/* ===== 基础 ===== */
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
:root{
  --primary:#2563eb;--primary-d:#1d4ed8;--primary-l:#eff6ff;
  --text:#1f2937;--muted:#6b7280;--line:#edf0f4;--bg:#f4f6f9;--card:#fff;
  --green:#16a34a;--green-bg:#dcfce7;--amber:#d97706;--amber-bg:#fef3c7;
  --teal:#0d9488;--teal-bg:#ccfbf1;--red:#dc2626;--red-bg:#fee2e2;
  --violet:#7c3aed;--violet-bg:#ede9fe;
  --safe-b:env(safe-area-inset-bottom);
  /* 底部导航实测高度（图标20 + 文字14 + gap2 + padding 10≈46px）。
     统一用变量管理，避免各处硬编码不同数值导致错位：
     - .m-view 底部留白按此留足
     - .foot-actions 需**排在这条导航之上**，否则会被导航盖住、按钮点不到 */
  --tabh:46px;
}
html,body{height:100%}
body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  color:var(--text);background:var(--bg);font-size:15px;overflow:hidden}
.hidden{display:none!important}
input,select,textarea,button{font-family:inherit;font-size:15px;color:var(--text)}
button{cursor:pointer;border:none;background:none}
input,select,textarea{outline:none}
.screen{position:fixed;inset:0;display:flex;flex-direction:column;background:var(--bg)}

/* ===== 登录 ===== */
#login-screen{overflow-y:auto;background:#fff}
.login-hero{background:linear-gradient(140deg,#1e40af,#2563eb 60%,#0ea5e9);
  color:#fff;padding:54px 24px 46px;text-align:center;border-radius:0 0 28px 28px}
.m-logo{width:70px;height:70px;background:rgba(255,255,255,.18);border-radius:18px;
  display:flex;align-items:center;justify-content:center;margin:0 auto 14px;overflow:hidden}
.m-logo img{width:100%;height:100%;object-fit:contain}
.m-logo .fi{font-size:34px;font-weight:700;color:#fff}
.login-hero h1{font-size:22px;margin-bottom:6px}
.login-hero p{font-size:12.5px;opacity:.85}
.login-form{padding:30px 24px}
.input-row{display:flex;align-items:center;gap:10px;border:1px solid var(--line);
  border-radius:12px;padding:0 14px;height:50px;margin-bottom:14px;background:#fafbfc}
.input-row .ii{font-size:16px}
.input-row input{flex:1;border:none;background:none;height:100%}
.btn-main{width:100%;height:50px;background:var(--primary);color:#fff;border-radius:12px;
  font-size:16px;font-weight:600;margin-top:6px}
.btn-main:active{background:var(--primary-d)}
.btn-main:disabled{opacity:.6}
/* 注册页：登录/注册切换 + 原生 select 需与 input 视觉统一 */
.login-alt{text-align:center;margin:14px 0 2px;font-size:13px}
.login-alt a{color:var(--primary);text-decoration:none}
.form-tip{font-size:12px;color:var(--muted);line-height:1.7;margin:14px 0 0;text-align:center}
.native-select{flex:1;border:none;background:none;height:100%;font-size:15px;color:var(--text);
  appearance:none;-webkit-appearance:none;outline:none}

/* ===== 头部 ===== */
#app-screen .m-header{height:52px;background:var(--primary);color:#fff;display:flex;
  align-items:center;padding:0 8px;flex-shrink:0;position:relative;z-index:10}
.h-back{width:40px;height:40px;font-size:30px;color:#fff;line-height:1;padding-left:6px}
.h-title{flex:1;text-align:center;font-size:17px;font-weight:600;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;padding:0 6px}
.h-right{min-width:40px;display:flex;align-items:center;justify-content:flex-end;font-size:14px}
.h-right button{color:#fff;font-size:14px;padding:6px}
/* 底部留白：需 ≥ tabbar 实际高度，否则最后一条内容会被导航盖住。
   tabbar 高度 = padding(6+4) + 图标20 + gap2 + 文字约14 ≈ 46px + safe-b，
   故 68px 足够（原 84px 对应更高的导航）。 */
.m-view{flex:1;overflow-y:auto;padding:14px 14px 68px;-webkit-overflow-scrolling:touch}

/* ===== tabbar ===== */
.tabbar{position:absolute;left:0;right:0;bottom:0;background:#fff;border-top:1px solid var(--line);
  display:flex;padding-bottom:var(--safe-b);z-index:20}
/* 整体缩小以释放内容区（需求 2026-10-09）：图标 26→20、文字 12.5→11、
   内边距 9/7→6/4。约为原高度的 3/4。 */
.tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 0 4px;
  color:#9ca3af;font-size:11px}
.tab .ti{font-size:20px;line-height:1}
.tab.active{color:var(--primary)}

/* ===== 卡片 ===== */
.card{background:var(--card);border-radius:14px;padding:16px;margin-bottom:12px;
  box-shadow:0 1px 4px rgba(0,0,0,.04)}
.card-title{font-size:15px;font-weight:600;margin-bottom:12px;display:flex;
  align-items:center;justify-content:space-between}
.section-label{font-size:13px;color:var(--muted);margin:16px 4px 8px;font-weight:500}

/* 首页大按钮 */
.home-banner{background:linear-gradient(135deg,#2563eb,#0ea5e9);border-radius:16px;
  color:#fff;padding:24px 20px;margin-bottom:14px}
.home-banner h2{font-size:19px;margin-bottom:6px}
.home-banner p{font-size:13px;opacity:.9;line-height:1.6}
.big-action{display:flex;align-items:center;justify-content:center;gap:8px;
  width:100%;box-sizing:border-box;min-height:clamp(52px,7.2vh,70px);
  background:linear-gradient(135deg,#2563eb,#0ea5e9);color:#fff;border-radius:14px;
  font-size:clamp(16px,2.5vh,21px);font-weight:600;
  margin:6px 0 14px;box-shadow:0 4px 14px rgba(37,99,235,.22)}
.big-action:active{transform:scale(.98);box-shadow:0 2px 8px rgba(37,99,235,.2)}
.home-actions{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:14px}
.home-tile{background:#fff;border-radius:14px;padding:18px 12px;text-align:center;
  box-shadow:0 1px 4px rgba(0,0,0,.04)}
.home-tile .ht-ico{font-size:28px}.home-tile .ht-label{font-size:13px;margin-top:6px;color:var(--text)}

/* 公告 */
.notice{display:flex;gap:9px;align-items:flex-start;background:#fffbeb;border:1px solid #fde68a;
  border-radius:12px;padding:12px 14px;margin-bottom:14px}
.notice .ni{font-size:17px;flex-shrink:0}
.notice .nt{font-size:13px;line-height:1.6}
.notice .nt b{display:block;margin-bottom:2px}
/* 公告正文过长时折叠，避免首页被单条公告撑长 */
.notice .ann-body{display:block;word-break:break-word}
.notice .ann-body.collapsed{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.notice .ann-more{color:var(--primary);font-size:12px;cursor:pointer;margin-top:3px;display:inline-block}
.notice-more{text-align:center;font-size:12px;color:var(--muted);padding:2px 0 10px}

/* ===== 表单 ===== */
.form-group{margin-bottom:14px}
.form-group label{display:block;font-size:13.5px;color:var(--muted);margin-bottom:7px;font-weight:500}
.form-group label .req{color:var(--red)}
.input,.select,textarea.input{width:100%;border:1px solid var(--line);border-radius:10px;
  padding:12px;background:#fff;min-height:48px}
.select{appearance:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 13px center}
textarea.input{min-height:90px;resize:vertical;line-height:1.6}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.custom-toggle{font-size:12.5px;color:var(--primary);margin-top:6px;display:inline-block}
.hint-text{font-size:12px;color:#9ca3af;margin-top:5px;line-height:1.5}

/* 上传图片 */
.upload-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.up-cell{aspect-ratio:1;border:1px dashed #cbd5e1;border-radius:10px;overflow:hidden;
  position:relative;background:#fafbfc;display:flex;align-items:center;justify-content:center}
.up-cell img{width:100%;height:100%;object-fit:cover}
.up-cell video{width:100%;height:100%;object-fit:cover}
.up-add{font-size:26px;color:#9ca3af}
.up-del{position:absolute;top:2px;right:2px;width:20px;height:20px;background:rgba(0,0,0,.55);
  color:#fff;border-radius:50%;font-size:13px;line-height:18px;text-align:center;z-index:2}

/* ===== 工单卡片 ===== */
.order-card{background:#fff;border-radius:14px;padding:14px 16px;margin-bottom:11px;
  box-shadow:0 1px 4px rgba(0,0,0,.04)}
.order-card:active{background:#fafbfc}
.oc-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:9px}
.oc-no{font-size:12.5px;color:#9ca3af;font-family:monospace}
.oc-loc{font-size:14px;font-weight:600;line-height:1.5;margin-bottom:7px}
.oc-meta{font-size:13px;color:var(--muted);line-height:1.7}
.oc-desc{font-size:13px;color:#4b5563;margin-top:7px;line-height:1.6;
  overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.oc-foot{display:flex;justify-content:space-between;align-items:center;margin-top:10px;
  padding-top:10px;border-top:1px solid var(--line)}
.oc-time{font-size:12px;color:#9ca3af}
.oc-imgs{display:flex;gap:5px;margin-top:9px}
.oc-imgs img{width:48px;height:48px;border-radius:8px;object-fit:cover;border:1px solid var(--line)}

/* 状态标签 */
.tag{display:inline-block;padding:3px 11px;border-radius:20px;font-size:12px;font-weight:500}
.tag-pending{background:var(--amber-bg);color:var(--amber)}
.tag-accepted{background:#dbeafe;color:#2563eb}
.tag-repairing{background:var(--teal-bg);color:var(--teal)}
.tag-completed{background:var(--green-bg);color:var(--green)}
.tag-verified{background:#f3f4f6;color:#6b7280}

/* ===== 筛选条（维修工作台） ===== */
.filter-bar{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;margin-bottom:6px}
.filter-chip{flex-shrink:0;border:1px solid var(--line);background:#fff;border-radius:20px;
  padding:7px 15px;font-size:13px;color:var(--muted);white-space:nowrap}
.filter-chip.active{background:var(--primary);color:#fff;border-color:var(--primary)}
.search-input{width:100%;height:42px;border:1px solid var(--line);border-radius:21px;
  padding:0 16px 0 38px;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%239ca3af' stroke-width='2'%3E%3Ccircle cx='7' cy='7' r='5'/%3E%3Cpath d='M11 11l4 4'/%3E%3C/svg%3E") no-repeat 13px center;margin-bottom:12px}

/* ===== 详情 ===== */
.dl{display:flex;padding:11px 0;border-bottom:1px solid var(--line);font-size:14px}
.dl .k{width:84px;color:var(--muted);flex-shrink:0}
.dl .v{flex:1;word-break:break-all;line-height:1.5}
.desc-box{background:#f8fafc;border-radius:10px;padding:13px;font-size:14px;
  line-height:1.7;white-space:pre-wrap;margin-top:8px}
.media-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.media-row img{width:100px;height:100px;border-radius:10px;object-fit:cover;border:1px solid var(--line)}
.media-row video{width:160px;border-radius:10px}
.parts-box{margin-top:8px}
.part-line{display:flex;justify-content:space-between;background:#f8fafc;border-radius:8px;
  padding:10px 13px;margin-bottom:7px;font-size:13.5px}
.part-line .pl-r{color:var(--muted)}

/* ===== 固定底部操作栏（2026-10-11 重做）=====
   ⚠️ 旧版把 2~3 个按钮排在**一行**（.foot-actions{display:flex;gap:10px}），
   而 .btn 带 white-space:nowrap，flex 项的 min-width:auto 又等于整段文字宽，
   于是「开始维修 / 需要配件·预约二次上门 / 完成（远程调试 / 无需维修）」
   三行文字宽度相加远超屏宽 → 整排溢出、最右按钮被裁掉（用户截图现象）。
   现在改为两档结构，任何状态都不会溢出：
     · 主操作 = .foot-actions 的**直接子级** .btn —— 通栏大按钮
     · 次要操作 = .foot-sub 里的一组轻量按钮 —— 并排等分
   位置仍在底部导航之上（body.has-tabbar 时抬起），避免被导航压住点不到。 */
.foot-actions{position:absolute;left:0;right:0;bottom:0;background:#fff;
  border-top:1px solid var(--line);
  padding:12px 14px calc(12px + var(--safe-b));
  display:flex;flex-direction:column;gap:10px;z-index:22}
body.has-tabbar .foot-actions{
  bottom:calc(var(--tabh) + var(--safe-b));padding-bottom:12px}

/* 主操作：通栏 */
.foot-actions > .btn{width:100%;height:48px;border-radius:14px;font-size:15.5px;
  font-weight:600;padding:0 14px;overflow:hidden;text-overflow:ellipsis}
.foot-actions > .btn.btn-p{background:linear-gradient(135deg,#2563eb,#3b82f6);
  box-shadow:0 3px 10px rgba(37,99,235,.22)}
.foot-actions > .btn.btn-g{background:linear-gradient(135deg,#16a34a,#22c55e);
  box-shadow:0 3px 10px rgba(22,163,74,.22)}
.foot-actions > .btn.btn-ghost,
.foot-actions > .btn.btn-o{background:#fff;border:1.5px solid #d7e2f7;color:var(--primary);
  box-shadow:none}
.foot-actions > .btn.btn-r{background:#fff;border:1.5px solid #fecaca;color:var(--red);box-shadow:none}

/* 次要操作：并排等分、低饱和轻量配色 */
.foot-sub{display:flex;gap:10px}
.foot-sub .btn{flex:1 1 0;min-width:0;height:42px;border-radius:12px;font-size:13px;
  font-weight:600;padding:0 10px;overflow:hidden;text-overflow:ellipsis;box-shadow:none}
.foot-sub .btn.btn-ghost,
.foot-sub .btn.btn-o{background:#fff;border:1px solid #d7e2f7;color:var(--primary)}
.foot-sub .btn.btn-p{background:#eef4ff;border:1px solid #d7e2f7;color:var(--primary)}
.foot-sub .btn.btn-g{background:#eefaf1;border:1px solid #cdeed7;color:#15803d}
.foot-sub .btn.btn-r{background:#fff5f5;border:1px solid #fecaca;color:var(--red)}

.btn-p{background:var(--primary);color:#fff}
.btn-g{background:var(--green);color:#fff}
.btn-o{background:#fff;color:var(--primary);border:1px solid var(--primary)}
.btn-r{background:#fff;color:var(--red);border:1px solid var(--red)}
.btn-ghost{background:#fff;color:var(--primary);border:1px solid var(--primary)}

/* 有底部操作栏的页面：内容区需为按钮栏留出空间。
   注意 .has-foot 是 .m-view 的**子元素**，而 .m-view 已有 68px 底部内边距，
   故用固定 -68px 负 margin 抵消父级留白，只净增按钮栏所需高度。
   按钮栏高度不再写死（可能是一行主操作，也可能主操作 + 次要操作两行），
   由 core.js 的 fitFootBar() 实测写入 --footh，这里按它留白。 */
.has-foot{padding-bottom:var(--footh,72px);margin-bottom:-68px}
body.has-tabbar .has-foot{
  padding-bottom:calc(var(--footh,72px) + var(--tabh) + var(--safe-b));
  margin-bottom:-68px}

/* ===== 底部弹出 sheet ===== */
.sheet-mask{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:100;display:flex;
  align-items:flex-end;animation:fade .2s}
.sheet{background:#fff;width:100%;border-radius:18px 18px 0 0;max-height:88vh;display:flex;
  flex-direction:column;padding-bottom:var(--safe-b);animation:up .25s}
.sheet-head{padding:16px 18px;border-bottom:1px solid var(--line);display:flex;
  justify-content:space-between;align-items:center}
.sheet-title{font-size:16px;font-weight:600}
.sheet-close{font-size:22px;color:#9ca3af;line-height:1}
.sheet-body{padding:18px;overflow-y:auto}
.sheet-foot{padding:12px 18px;border-top:1px solid var(--line)}
@keyframes fade{from{opacity:0}}@keyframes up{from{transform:translateY(100%)}}

/* 居中 modal */
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:110;display:flex;
  align-items:center;justify-content:center;padding:30px;animation:fade .2s}
.modal{background:#fff;border-radius:16px;width:100%;max-width:340px;overflow:hidden}
.modal-head{padding:16px 18px;font-size:16px;font-weight:600;text-align:center}
.modal-body{padding:0 18px 18px}
.modal-foot{display:flex;border-top:1px solid var(--line)}
.modal-foot button{flex:1;padding:14px;font-size:15px}
.modal-foot button + button{border-left:1px solid var(--line)}
.modal-foot .ok{color:var(--primary);font-weight:600}
.modal-foot .danger{color:var(--red);font-weight:600}

/* ===== toast ===== */
#toast-root{position:fixed;top:20px;left:0;right:0;z-index:200;display:flex;
  flex-direction:column;align-items:center;gap:8px;pointer-events:none}
.toast{background:rgba(31,41,55,.95);color:#fff;padding:10px 20px;border-radius:22px;
  font-size:13.5px;max-width:84%;text-align:center;animation:tin .2s}
.toast.success{background:#16a34a}.toast.error{background:#dc2626}.toast.warn{background:#d97706}
@keyframes tin{from{opacity:0;transform:translateY(-10px)}}

/* ===== 报修码（移动端） ===== */
.m-code-img{width:220px;height:220px;margin:10px auto;display:block}
.code-text-box{background:#f8fafc;border-radius:10px;padding:12px;text-align:center;
  font-family:monospace;font-size:13px;margin-top:10px;word-break:break-all}

/* ===== 配件统计 ===== */
.stat-mini{display:grid;grid-template-columns:repeat(2,1fr);gap:11px;margin-bottom:12px}
.stat-mini .sm{background:#fff;border-radius:12px;padding:15px}
.stat-mini .sm .l{font-size:12.5px;color:var(--muted);margin-bottom:6px}
.stat-mini .sm .n{font-size:22px;font-weight:700}
.bar-row{display:flex;align-items:center;gap:10px;margin-bottom:11px;font-size:13px}
.bar-row .bl{width:74px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bar-track{flex:1;height:18px;background:#f1f5f9;border-radius:9px;overflow:hidden}
.bar-fill{height:100%;background:var(--primary);border-radius:9px}
.bar-row .bv{width:28px;text-align:right;color:var(--muted)}

/* 列表项（管理用） */
.list-item{display:flex;align-items:center;justify-content:space-between;background:#fff;
  border-radius:11px;padding:13px 15px;margin-bottom:9px}
.list-item .li-main{flex:1;min-width:0}
.list-item .li-t{font-size:14.5px;font-weight:500}
.list-item .li-s{font-size:12px;color:#9ca3af;margin-top:3px}
.list-item .li-ops{display:flex;gap:6px;flex-shrink:0}
.mini-btn{padding:6px 12px;border:1px solid var(--line);border-radius:8px;font-size:12.5px;background:#fff}
.mini-btn.danger{color:var(--red);border-color:#fecaca}
.empty{text-align:center;color:#9ca3af;padding:50px 20px;font-size:13.5px}
.empty .ei{font-size:44px;display:block;margin-bottom:12px}

/* 分段选择 */
.segment{display:flex;background:#eef1f5;border-radius:10px;padding:3px;margin-bottom:14px}
.segment button{flex:1;padding:8px;border-radius:8px;font-size:13.5px;color:var(--muted)}
.segment button.active{background:#fff;color:var(--primary);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.08)}

/* 复选标签组 */
.check-tags{display:flex;flex-wrap:wrap;gap:8px}
.check-tags .ct{border:1px solid var(--line);border-radius:20px;padding:7px 14px;font-size:13px;background:#fff;color:var(--muted)}
.check-tags .ct.on{background:var(--primary-l);border-color:var(--primary);color:var(--primary)}

/* 新状态标签 */
.tag-dispatched{background:var(--violet-bg);color:var(--violet)}
.tag-rerepair{background:var(--red-bg);color:var(--red)}

/* 下拉筛选条 */
.filter-bar{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.fb-item select{width:100%;height:38px;border:1px solid var(--line);border-radius:9px;
  background:#fff;font-size:13.5px;color:var(--text);padding:0 8px}

/* 手写签名 */
.sign-wrap{display:flex;flex-direction:column;align-items:stretch;width:100%}
.sign-canvas{width:100%;height:230px;border:1px solid var(--line);border-radius:10px;background:#fff;touch-action:none}
.sign-tip{font-size:12px;color:var(--muted);margin:8px 2px;text-align:center}
.sign-clear{padding:8px 18px;border:1px solid var(--line);background:#fff;border-radius:8px;font-size:13px;color:var(--muted);align-self:center}

/* 工单进度时间线 */
.timeline{padding-left:2px;margin-top:6px}
.tl-node{position:relative;padding:0 0 18px 22px;border-left:2px solid var(--line);margin-left:7px}
.tl-node.last{border-left-color:transparent;padding-bottom:2px}
.tl-dot{position:absolute;left:-7px;top:2px;width:12px;height:12px;border-radius:50%;
  background:var(--primary);box-shadow:0 0 0 2px var(--primary)}
.tl-node.last .tl-dot{background:var(--green);box-shadow:0 0 0 2px var(--green)}
.tl-label{font-size:14px;font-weight:600;color:var(--text)}
.tl-detail{font-size:13px;color:var(--muted);line-height:1.6;margin-top:3px;word-break:break-all}
.tl-meta{font-size:12px;color:#9ca3af;margin-top:3px}

/* 媒体列表（维修/报修） */
.media-list{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}
.media-list img{width:100%;height:96px;object-fit:cover;border-radius:9px;border:1px solid var(--line);cursor:zoom-in}
.media-list video{width:100%;border-radius:9px;grid-column:span 3}

/* 图片查看器（点图放大，需求 2026-10-11）
   定位 / 居中 / 层级由 .modal-mask 提供（z-index 110 > tabbar 的 20） */
.img-lightbox{background:rgba(0,0,0,.92);padding:0;cursor:zoom-out;z-index:120}
.img-lightbox img{max-width:94vw;max-height:88vh;border-radius:10px;
  box-shadow:0 10px 34px rgba(0,0,0,.5)}

/* ============================================================
   学校组织树（与小程序 pages/schools 对齐）
   ============================================================ */
.hint-bar {
  background: #eff6ff; color: #1d4ed8; font-size: 12.5px;
  line-height: 1.6; padding: 10px 14px; border-radius: 8px; margin-bottom: 12px;
}
.sch { background: #fff; border-radius: 12px; margin-bottom: 12px; overflow: hidden; }
.sch-head, .cp-head {
  display: flex; align-items: center; gap: 8px; padding: 14px;
  border-bottom: 1px solid #f1f3f7;
}
.sch-name, .cp-name { flex: 1; font-size: 15px; font-weight: 600; color: #1f2937; }
.sch-op, .cp-op { font-size: 13px; color: #2563eb; }
.caret { color: #9ca3af; transition: transform .2s; display: inline-block; }
.caret.open { transform: rotate(90deg); }
.sch-body { padding: 12px 14px; background: #fafbfd; }
.sch-tip { font-size: 13px; color: #9ca3af; padding: 8px 0; }
.campus { background: #fff; border: 1px solid #eef1f6; border-radius: 10px; margin-bottom: 10px; }
.cp-body { padding: 12px; border-top: 1px solid #f1f3f7; }
.sub-row { display: flex; align-items: flex-start; gap: 8px; margin-bottom: 10px; flex-wrap: wrap; }
.sub-row:last-child { margin-bottom: 0; }
.sub-lbl { font-size: 13px; color: #6b7280; min-width: 56px; padding-top: 6px; }
.chips { display: flex; flex-wrap: wrap; gap: 6px; flex: 1; }
.chip {
  display: inline-flex; align-items: center; gap: 4px;
  background: #f3f4f6; border-radius: 6px; padding: 5px 10px; font-size: 12.5px; color: #4b5563;
}
.chip.add { background: #eff6ff; color: #2563eb; cursor: pointer; border: 1px dashed #93c5fd; }
.chip.add.wide { margin-top: 8px; width: 100%; justify-content: center; }
.chip-x { color: #9ca3af; font-size: 14px; cursor: pointer; }
.chip-x:hover { color: #dc2626; }

/* 报修码 */
.codes-row { display: flex; flex-wrap: wrap; gap: 6px; flex: 1; }
.code-chip {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  background: #f7f9fc; border: 1px solid #e3e9f2; border-radius: 8px; padding: 5px 10px 5px 5px;
}
.code-qr { width: 40px; height: 40px; border-radius: 4px; background: #fff; }
.code-txt { font-size: 11.5px; color: #4b5563; word-break: break-all; }
.code-empty { font-size: 12.5px; color: #a8b0bd; padding: 6px 0; }

/* 选项器（自动派单 / 公告定向） */
.opts { display: flex; flex-wrap: wrap; gap: 8px; }
.opt {
  padding: 8px 14px; border-radius: 8px; background: #f3f4f6;
  font-size: 13.5px; color: #4b5563; cursor: pointer; border: 1px solid transparent;
}
.opt.on { background: #eff6ff; color: #2563eb; border-color: #2563eb; font-weight: 500; }
.f-hint { display: block; font-size: 12px; color: #7c3aed; margin-top: 8px; }
.parent-tip { font-size: 12.5px; color: #6b7280; margin-bottom: 10px; }
.req { color: #dc2626; margin-right: 2px; }

/* 规则卡片 */
.rl { padding: 12px 0; }
.rl.off { opacity: .55; }
.rl-divider { border-top: 1px solid #f1f3f7; margin: 4px 0 12px; }
.rl-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.rl-cat { font-size: 14.5px; font-weight: 600; color: #1f2937; background: #f3f4f6; padding: 4px 12px; border-radius: 6px; }
.rl-cat.all { background: #ede9fe; color: #6d28d9; }
.rl-tog { font-size: 12.5px; color: #2563eb; background: #eff6ff; padding: 4px 12px; border-radius: 12px; cursor: pointer; }
.rl-row { display: flex; justify-content: space-between; font-size: 13px; padding: 3px 0; }
.rl-row .k { color: #9ca3af; }
.rl-row .v { color: #374151; }
.rl-ops { display: flex; gap: 16px; margin-top: 8px; font-size: 13px; color: #2563eb; }
.rl-ops .danger, .ac-op.danger { color: #dc2626; }

/* 公告卡片 */
.ann-card { margin-bottom: 12px; }
.ann-card.off { opacity: .6; }
.ac-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.ac-title { font-size: 15.5px; font-weight: 600; color: #1f2937; }
.tag.gray { background: #f3f4f6; color: #6b7280; }
.ac-content { font-size: 13.5px; color: #4b5563; line-height: 1.65; white-space: pre-wrap; }
.ac-meta { display: flex; align-items: center; gap: 12px; margin-top: 10px; padding-top: 10px; border-top: 1px solid #f1f3f7; font-size: 12px; color: #9ca3af; }
.ac-meta .sc { color: #2563eb; }
.ac-op { color: #2563eb; cursor: pointer; margin-left: auto; }
.ac-meta .ac-op + .ac-op { margin-left: 0; }

/* 空态补充 */
.e-ico { font-size: 40px; margin-bottom: 8px; }
.e-sub { font-size: 12.5px; color: #a8b0bd; margin-top: 6px; line-height: 1.6; padding: 0 30px; }

/* ============================================================
 * 工作日报（需求 2026-10-09）
 * 设计取向：简洁 —— 单栏、留白充足、层次靠字号而非边框堆叠
 * ============================================================ */

/* 今日卡片：主操作区 */
.dr-hero{background:var(--card);border-radius:16px;padding:18px 16px;margin-bottom:14px;
  box-shadow:0 1px 3px rgba(15,23,42,.06);border:1px solid var(--line)}
.dr-hero.done{background:linear-gradient(180deg,#f0fdf4,#fff);border-color:#bbf7d0}
.dr-hero-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.dr-hero-date{font-size:15px;font-weight:600;color:#0f172a;letter-spacing:.2px}
.dr-hero-tip{font-size:12.5px;color:var(--muted);margin-top:4px}
.dr-hero-badge{flex-shrink:0;font-size:12px;padding:4px 10px;border-radius:20px;
  background:#f1f5f9;color:#64748b}
.dr-hero.done .dr-hero-badge{background:#16a34a;color:#fff}
.dr-hero-body{margin-top:14px;padding-top:14px;border-top:1px dashed var(--line)}
.dr-hero-label{font-size:12px;color:var(--muted);margin-bottom:5px}
.dr-hero-text{font-size:14px;line-height:1.75;color:#1e293b;margin-bottom:12px;
  white-space:normal;word-break:break-word}
.dr-hero-acts{margin-top:14px}
.dr-hero-acts .btn-line{width:100%;background:#fff;color:var(--primary);
  border:1px solid var(--primary)}
.dr-hero .btn-main{width:100%;margin-bottom:10px}
.dr-hero .btn-line{width:100%}

/* 分组标题 */
.dr-sec-title{font-size:13px;color:var(--muted);margin:18px 2px 10px;font-weight:600}
.dr-sec-title span{font-weight:400;font-size:12px;color:#b6bcc6;margin-left:4px}

/* 待补记快捷 chips */
.dr-quick{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:4px}
.dr-chip{font-size:13px;padding:7px 14px;border-radius:20px;cursor:pointer;
  background:var(--card);border:1px solid var(--line);color:var(--primary)}
.dr-chip:active{background:var(--primary-l)}

/* 历史列表 */
.dr-list{margin-bottom:6px}
.dr-item{background:var(--card);border-radius:12px;padding:14px 14px;margin-bottom:10px;
  box-shadow:0 1px 2px rgba(15,23,42,.04);cursor:pointer}
.dr-item:active{background:#f8fafc}
.dr-item-hd{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px}
.dr-item-date{font-size:14px;font-weight:600;color:#0f172a}
.dr-tag-sup{font-size:10.5px;font-style:normal;color:#b45309;background:#fef3c7;
  border-radius:4px;padding:2px 6px;margin-left:6px;font-weight:500}
.dr-item-ord{font-size:11.5px;color:#a8b0bd;text-align:right}
.dr-ord-link{color:#2563eb;cursor:pointer}
.dr-ord-link:hover{text-decoration:underline}
.dr-item-sub{font-size:11.5px;color:#6b7280;margin-bottom:6px}
.dr-item-text{font-size:13.5px;line-height:1.75;color:#334155;word-break:break-word}
.dr-item-plan{margin-top:9px;padding-top:9px;border-top:1px dashed var(--line);
  font-size:12.5px;line-height:1.7;color:#64748b}
.dr-item-plan b{display:inline-block;margin-right:6px;color:var(--primary);font-weight:600}

/* 空态 */
.dr-empty{text-align:center;padding:48px 16px;color:var(--muted)}
.dr-empty-ico{font-size:40px;margin-bottom:10px}
.dr-empty-t{font-size:15px;color:#475569;margin-bottom:5px;font-weight:500}
.dr-empty-s{font-size:12.5px;line-height:1.7;color:#a8b0bd;padding:0 20px}

/* 汇总统计 */
.dr-stats{display:flex;gap:10px;margin-bottom:12px}
.dr-stat{flex:1;background:var(--card);border-radius:12px;padding:14px 8px;text-align:center;
  box-shadow:0 1px 2px rgba(15,23,42,.04)}
.dr-stat-n{font-size:20px;font-weight:700;color:var(--primary);line-height:1.2}
.dr-stat-l{font-size:11.5px;color:var(--muted);margin-top:5px}
.dr-stat-title{font-size:13px;color:var(--muted);margin-bottom:10px}
.dr-people{display:flex;flex-wrap:wrap;gap:8px}
.dr-person{display:flex;align-items:center;gap:6px;font-size:12.5px;padding:7px 12px;
  border-radius:20px;background:#f8fafc;border:1px solid var(--line);cursor:pointer;color:#334155}
.dr-person:active{background:var(--primary-l)}
.dp-role{font-size:11px;color:#a8b0bd}
.dp-cnt{font-size:11px;color:var(--primary);font-weight:600}

/* 编辑器内的 textarea：与项目 input 风格统一 */
#dr-content,#dr-plan{width:100%;box-sizing:border-box;font-size:14px;line-height:1.7;
  padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;
  color:#1e293b;resize:vertical;font-family:inherit}
#dr-content:focus,#dr-plan:focus{outline:none;border-color:var(--primary)}
#dr-date{width:100%;box-sizing:border-box;font-size:14px;padding:10px 12px;
  border:1px solid var(--line);border-radius:10px;background:#fff;color:#1e293b}

/* ---- 全部日报：日期筛选 + 标注（需求 2026-10-09） ---- */
.dr-date-row { display: flex; align-items: center; gap: 8px; margin-top: 10px; }
.dr-date-row input {
  flex: 1; min-width: 0; border: 1px solid var(--line); border-radius: 8px;
  padding: 8px 10px; font-size: 13px; color: var(--text); background: #fff;
}
.dr-date-sep { color: var(--muted); font-size: 13px; flex-shrink: 0; }
.dr-quick { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
.dr-qb {
  border: 1px solid var(--line); background: #fff; color: var(--primary);
  border-radius: 999px; padding: 5px 13px; font-size: 12.5px;
}
.dr-qb:active { background: #f1f5f9; }

/* 标注筛选（颜色由 --mc 承接，与后台保持一致） */
.dr-mark-filter { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.dr-mf {
  display: inline-flex; align-items: center; gap: 5px;
  border: 1px solid var(--line); background: #fff; color: #475569;
  border-radius: 999px; padding: 5px 12px; font-size: 12.5px;
}
.dr-mf .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--mc, #94a3b8); }
.dr-mf b { color: var(--mc, #94a3b8); font-weight: 600; }
.dr-mf.on {
  border-color: var(--mc, #2563eb); color: var(--mc, #2563eb);
  background: color-mix(in srgb, var(--mc, #2563eb) 10%, #fff);
  font-weight: 600;
}

/* 列表项里的标注徽标 + 备注 */
.dr-item-act {
  display: flex; align-items: center; gap: 10px;
  margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--line);
}
.dr-mark {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 11.5px; padding: 3px 10px; border-radius: 999px;
  color: var(--mc); background: color-mix(in srgb, var(--mc) 12%, #fff);
  border: 1px solid color-mix(in srgb, var(--mc) 40%, #fff);
}
.dr-note {
  margin-top: 8px; font-size: 12.5px; line-height: 1.6;
  color: #b45309; background: #fffbeb;
  border-left: 3px solid #fbbf24; border-radius: 4px; padding: 7px 10px;
}
.dr-note b { display: block; font-size: 11px; color: #92400e; margin-bottom: 2px; }

/* 标注弹窗 */
.dr-pick { display: flex; flex-wrap: wrap; gap: 8px; }
.dr-pick-b {
  display: inline-flex; align-items: center; gap: 5px;
  border: 1px solid var(--line); background: #fff; color: #475569;
  border-radius: 8px; padding: 7px 13px; font-size: 13px;
}
.dr-pick-b .dot { width: 9px; height: 9px; border-radius: 50%; background: var(--mc, #94a3b8); }
.dr-pick-b.on {
  border-color: var(--mc); color: var(--mc); font-weight: 600;
  background: color-mix(in srgb, var(--mc) 12%, #fff);
}

/* ---- 登录页底部的管理后台入口（需求 2026-10-09） ----
 * 刻意做得很低调：灰色小字、无边框、居中，
 * 不干扰报修人登录，又让管理员能直接找到。 */
.admin-entry {
  text-align: center;
  margin-top: 26px;
  padding-top: 14px;
  border-top: 1px solid rgba(0, 0, 0, .05);
}
.admin-entry a {
  font-size: 12px;
  color: #a8b0bd;
  text-decoration: none;
  letter-spacing: .5px;
}
.admin-entry a:active { color: #6b7280; }

/* 列表项左侧带勾选框（批量导出/打印，需求 2026-10-10） */
/* ⚠️ 2026-10-11 修复两处导致「布局乱了」的问题：
   ① 选择器写成 `.row-pick > .card`，但 orderCard() 渲染的是 `.order-card`
      （reporter.js:687），永远匹配不上 → 卡片拿不到 flex:1，被勾选框挤成窄条；
   ② 整块样式此前没有生效机会（index.html 的 css 链接缺 ?v=，一直被缓存）。
   margin-bottom 统一挪到 .row-pick 上，避免卡片自身 margin 在 flex 行内叠高。 */
.row-pick { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 11px; }
.row-pick > .pk {
  flex: 0 0 auto; width: 21px; height: 21px; margin: 14px 0 0;
  accent-color: var(--primary); cursor: pointer;
}
.row-pick > .order-card,
.row-pick > .card { flex: 1 1 auto; min-width: 0; margin-bottom: 0; }

/* ===== 通用按钮基础（2026-10-11）=====
   此前只有 `.foot-actions .btn` 带盒模型，页面里独立使用的
   <button class="btn btn-o">（导出表格 / 批量打印 / 审批设置）
   没有任何基础样式 → 渲染成裸按钮，边框、间距、圆角全不可控。 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  height:42px;padding:0 14px;border-radius:11px;font-size:14px;font-weight:600;
  line-height:1;border:1px solid transparent;background:#f1f3f7;color:var(--text);
  white-space:nowrap}
.btn:active{transform:scale(.98)}
.btn:disabled{opacity:.6}
.btn.tiny{height:34px;padding:0 12px;font-size:12.5px;border-radius:9px}

/* 工具条：导出表格 / 批量打印 / 审批设置 */
.toolbar-row{display:flex;gap:8px;margin-bottom:10px}
.toolbar-row .btn{flex:1;min-width:0;font-size:12.5px;padding:0 6px}

/* 全选条（批量导出 / 打印前按筛选结果一键全选） */
.pick-bar{display:flex;align-items:center;gap:10px;background:#fff;
  border:1px solid var(--line);border-radius:12px;padding:9px 14px;margin-bottom:10px;
  font-size:13px}
.pick-bar.has{border-color:var(--primary);background:var(--primary-l)}
.pick-bar .pa{display:flex;align-items:center;gap:8px;font-weight:600;cursor:pointer}
.pick-bar .pa input{width:19px;height:19px;margin:0;accent-color:var(--primary)}
.pick-bar .pc{color:var(--muted)}
.pick-bar .pc b{color:var(--primary);font-weight:700}
.pick-bar .sp{flex:1}
.btn-link{color:var(--primary);font-size:13px;font-weight:600;padding:4px 2px}
.btn-link:active{opacity:.7}

/* 报修审批设置（校管，需求 2026-10-11） */
.audit-school{margin-bottom:6px}
.audit-school .as-name{font-size:14px;font-weight:600;margin-bottom:9px;color:var(--text)}
.audit-sep{height:1px;background:var(--line);margin:4px 0 14px}
