/* 数字员工云 · ERP 外壳样式（多页面共用，2026-09-30 视觉优化版） */
:root{
  --bg:#f5f7fb; --panel:#ffffff; --panel2:#f3f6fa; --panel3:#f8fafc;
  color-scheme:light;
  --line:#dde5ef; --line2:#e7edf5; --line3:#eef2f8;
  --txt:#131c26; --dim:#5a6b7e; --dim2:#6b7a8c;
  --blue:#1d78c4; --blue2:#1663a8; --ok:#12925a; --warn:#a86a12; --bad:#d13f3f; --purple:#7050cf;
  --side:238px; --top:60px; --gap:16px; --r:13px;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--txt);
  font:13.6px/1.68 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased}
a{color:var(--blue);text-decoration:none}
a:hover{text-decoration:underline}
code{background:#f1f4f9;border:1px solid var(--line2);border-radius:5px;padding:1px 6px;font-size:12px;color:#22303f}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:#c7d2e0;border-radius:8px;border:2px solid var(--bg)}
::-webkit-scrollbar-thumb:hover{background:#eceff3}
::-webkit-scrollbar-track{background:transparent}

/* ── 侧栏 ── */
aside{position:fixed;left:0;top:0;bottom:0;width:var(--side);background:linear-gradient(180deg,#ffffff,#f7f9fc);
  border-right:1px solid var(--line);display:flex;flex-direction:column;z-index:40;transition:transform .22s ease}
.aside-hd{padding:17px 18px 15px;border-bottom:1px solid var(--line2)}
.aside-hd .ent{font-size:15px;font-weight:700;display:flex;align-items:center;gap:8px;letter-spacing:.2px}
.dot{width:9px;height:9px;border-radius:50%;background:var(--ok);box-shadow:0 0 10px var(--ok);flex:0 0 auto}
.aside-hd .dom{color:var(--dim2);font-size:11.5px;margin-top:4px;font-family:ui-monospace,Menlo,monospace}
.nav{padding:10px;overflow-y:auto;flex:1}
.nav .grp{color:var(--dim2);font-size:10.5px;padding:14px 11px 7px;letter-spacing:1px}
.nav a{display:flex;align-items:center;gap:10px;padding:9.5px 11px;border-radius:10px;color:#2a3a4c;
  font-size:13.5px;margin-bottom:3px;border:1px solid transparent;transition:background .15s,color .15s}
.nav a:hover{background:#edf3fa;color:#14517f;text-decoration:none}
.nav a.on{background:linear-gradient(90deg,#e3eefb,#d9e9f9);color:#0f4c81;border-color:#c4daf1;
  box-shadow:0 1px 3px rgba(16,26,40,.06)}
.nav a .ic{width:19px;text-align:center;font-size:15px;opacity:.95}
.nav a .n{margin-left:auto;background:#e9eff7;color:#5a6b7e;border-radius:999px;padding:1px 8px;font-size:11px;
  min-width:22px;text-align:center}
.nav a.on .n{background:#c4daf1;color:#14517f}
.aside-ft{border-top:1px solid var(--line2);padding:12px 16px 14px;font-size:12px;color:var(--dim)}
.aside-ft .who{color:var(--txt);font-weight:600;font-size:12.5px}
.aside-ft .out{display:inline-block;margin-top:7px;font-size:11.5px;color:#7fa8d0}

/* ── 顶栏 ── */
main{margin-left:var(--side)}
header{position:sticky;top:0;height:var(--top);background:rgba(255,255,255,.94);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line);display:flex;align-items:center;gap:11px;padding:0 22px;z-index:30}
.burger{display:none;background:#ffffff;border:1px solid var(--line);color:var(--txt);border-radius:9px;
  padding:6px 10px;font-size:15px;cursor:pointer;line-height:1}
header h1{font-size:16.5px;margin:0;font-weight:650;letter-spacing:.2px}
header .crumb{color:var(--dim2);font-size:12px;display:flex;align-items:center;gap:6px}
header .crumb b{color:var(--dim);font-weight:500}
.grow{flex:1}
.pill{padding:4.5px 11px;border-radius:999px;border:1px solid var(--line);background:var(--panel2);
  font-size:12px;color:var(--dim);white-space:nowrap;display:inline-flex;align-items:center;gap:6px}
.pill.run{color:var(--blue);border-color:#c4daf1;background:#eaf4fd}
.pill.ok{color:var(--ok);border-color:#a8d9bf;background:#e9f7ef}
.pill.bad{color:var(--bad);border-color:#efb9b9;background:#fdecec}
.pill.warn{color:var(--warn);border-color:#e6cf9d;background:#fdf4e7}
.pill.idle{color:var(--dim2)}
.wrap{padding:20px 22px 70px;max-width:1560px}

/* ── 区块 ── */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);margin-bottom:var(--gap);overflow:hidden}
.card>h2{font-size:14px;margin:0;padding:14px 18px;border-bottom:1px solid var(--line2);
  display:flex;align-items:center;gap:9px;font-weight:600;background:linear-gradient(180deg,#ffffff,#ffffff)}
.card>h2 .sub{color:var(--dim2);font-size:12px;font-weight:400}
.card>.bd{padding:16px 18px}
.card>.bd.tight{padding:0}
.grid{display:grid;gap:var(--gap)}
.g2{grid-template-columns:repeat(auto-fit,minmax(430px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.g4{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}
.kpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(196px,1fr));gap:14px;margin-bottom:var(--gap)}
.kpi .k{background:linear-gradient(180deg,#ffffff,#ffffff);border:1px solid var(--line);border-radius:var(--r);
  padding:15px 17px;position:relative;overflow:hidden}
.kpi .k::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--line)}
.kpi .k.c-blue::after{background:var(--blue)} .kpi .k.c-ok::after{background:var(--ok)}
.kpi .k.c-bad::after{background:var(--bad)} .kpi .k.c-warn::after{background:var(--warn)}
.kpi .k.c-pur::after{background:var(--purple)}
.kpi .k b{display:block;font-size:25px;font-weight:700;line-height:1.25;font-variant-numeric:tabular-nums}
.kpi .k span{color:var(--dim);font-size:12.5px}
.kpi .k .t{color:var(--dim2);font-size:11.5px;margin-top:4px}

/* ── 表格 ── */
.tblwrap{overflow:auto}
.tblwrap.scrolly{max-height:min(58vh,620px)}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
th{text-align:left;color:#5a6b7e;font-weight:600;font-size:11.5px;letter-spacing:.3px;padding:10px 14px;
  background:#f7f9fc;border-bottom:1px solid var(--line);white-space:nowrap;position:sticky;top:0;z-index:2}
td{padding:11.5px 14px;border-bottom:1px solid var(--line3);vertical-align:middle}
tbody tr:nth-child(even) td{background:#ebeff4}
tbody tr:hover td{background:#ebeff4}
tbody tr:last-child td{border-bottom:0}
tr.clickable{cursor:pointer}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
.mut{color:var(--dim);font-size:12.5px}
.mut2{color:var(--dim2);font-size:11.5px}
.nowrap{white-space:nowrap}
.right{text-align:right}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}
.ellip{max-width:340px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}
.go{color:#5d7ba0;font-size:15px}
tbody tr:hover .go{color:var(--blue)}
.empty{padding:26px 18px;text-align:center;color:var(--dim2);font-size:12.8px}
.empty .big{font-size:22px;display:block;margin-bottom:6px;opacity:.7}

/* 状态：彩色圆点 + 中文 */
.st{display:inline-flex;align-items:center;gap:6px;font-size:12.3px;white-space:nowrap}
.st i{width:7px;height:7px;border-radius:50%;background:var(--dim2);flex:0 0 auto}
.st.done i{background:var(--ok)} .st.done{color:var(--ok)}
.st.working i{background:var(--blue);box-shadow:0 0 8px var(--blue)} .st.working{color:var(--blue)}
.st.blocked i{background:var(--warn)} .st.blocked{color:#b02525}
.st.warn i{background:var(--warn)} .st.warn{color:var(--warn)}
.st.wait i{background:#edf0f3} .st.wait{color:var(--dim2)}

.tag{display:inline-block;padding:2.5px 9px;border-radius:999px;font-size:11.3px;border:1px solid var(--line);
  background:#f7f9fc;color:var(--dim);white-space:nowrap}
.tag.on,.tag.ok{color:var(--ok);border-color:#a8d9bf;background:#e9f7ef}
.tag.off{color:var(--dim2);border-color:var(--line);background:var(--panel3)}
.tag.bad{color:var(--bad);border-color:#efb9b9;background:#fdecec}
.tag.warn{color:var(--warn);border-color:#e6cf9d;background:#fdf4e7}
.tag.info{color:var(--blue);border-color:#c4daf1;background:#eaf4fd}
.tag.pur{color:var(--purple);border-color:#d1cbe1;background:#edebf4}

/* 表单与按钮 */
.btn{display:inline-block;padding:9.5px 16px;border:0;border-radius:10px;font-size:13px;font-weight:600;
  background:linear-gradient(var(--blue),var(--blue2));color:#f2f5f9;cursor:pointer;line-height:1.2}
.btn:hover{filter:brightness(1.08);text-decoration:none}
.btn.ghost{background:#ffffff;color:var(--txt);border:1px solid var(--line);font-weight:500}
.btn.ghost:hover{background:#ebeff4;border-color:#c7d4e6}
.btn.sm{padding:5px 11px;font-size:12px;border-radius:7px}
.btn[disabled]{opacity:.5;cursor:not-allowed}
input,select,textarea{width:100%;padding:10px 12px;border-radius:10px;border:1px solid var(--line);
  background:#f8fafc;color:var(--txt);font-size:13px;font-family:inherit}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(29,120,196,.10)}
label{display:block;font-size:12px;color:var(--dim);margin:0 0 6px}
.field{margin-bottom:14px}
.msg{border-radius:10px;padding:11px 14px;font-size:12.8px;margin-bottom:14px}
.msg.ok{background:#ebf4f0;border:1px solid #a8d9bf;color:#12925a}
.msg.err{background:#f4ebec;border:1px solid #efb9b9;color:#b02525}
.msg.warn{background:#fdf4e7;border:1px solid #e6cf9d;color:#8a5a0a}
.hint{color:var(--dim2);font-size:11.8px;margin-top:8px;line-height:1.7}

/* 筛选条 */
.filterbar{display:flex;gap:10px;align-items:center;padding:12px 18px;border-bottom:1px solid var(--line2);
  background:#ebeff4;flex-wrap:wrap}
.filterbar input,.filterbar select{width:auto;min-width:150px;padding:7.5px 11px;font-size:12.5px}
.filterbar .cnt{color:var(--dim2);font-size:12px;margin-left:auto}
header h1 .sub{color:var(--dim2);font-size:12.5px;font-weight:400;margin-left:8px}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:9px;overflow:hidden}
.seg button{background:#f7f9fc;color:var(--dim);border:0;padding:7.5px 13px;font-size:12.5px;cursor:pointer;
  font-family:inherit;border-right:1px solid var(--line)}
.seg button:last-child{border-right:0}
.seg button.on{background:#e3eefb;color:#0f4c81;font-weight:600}

/* 员工卡 */
.empgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(298px,1fr));gap:14px}
.emp{background:linear-gradient(180deg,#ebeff4,#ebeff4);border:1px solid var(--line);border-radius:var(--r);
  padding:15px 16px;display:flex;flex-direction:column;gap:10px;min-height:200px;
  transition:border-color .15s,transform .15s}
.emp:hover{border-color:#c4daf1;transform:translateY(-1px)}
.emp .hd{display:flex;align-items:center;gap:11px}
.emp .av{color:#0f2438;width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  font-weight:700;font-size:13px;color:#f2f5f9;flex:0 0 auto;letter-spacing:.4px}
.emp .nm{font-weight:650;font-size:14.5px}
.emp .rl{color:var(--dim2);font-size:11.5px;font-family:ui-monospace,Menlo,monospace}
.emp .jb{color:var(--dim);font-size:12.5px;min-height:36px}
.emp .ft{margin-top:auto;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.bar{height:5px;border-radius:999px;background:#f1f4f9;overflow:hidden}
.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--blue),var(--ok));transition:width .4s}

/* 流水线 */
.steps{display:flex;flex-direction:column;gap:9px}
.step{display:flex;gap:12px;align-items:center;background:var(--panel3);border:1px solid var(--line);
  border-radius:11px;padding:12px 14px}
.step .no{width:27px;height:27px;border-radius:9px;background:#ffffff;border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--dim);flex:0 0 auto;font-weight:600}
.step.done{border-color:#cae2d3}
.step.done .no{background:#ebf4f0;border-color:#a8d9bf;color:var(--ok)}
.step.now{border-color:#c4daf1;background:#ebeff4}
.step.now .no{background:#ebf0f4;border-color:#c4daf1;color:var(--blue)}
.step .tt{font-weight:600;font-size:13.5px}
.step .ds{color:var(--dim2);font-size:12px;margin-top:2px}

/* 拦截说明 */
.blockcard{background:linear-gradient(180deg,#f4ecee,#f3ecef);border:1px solid #efb9b9;border-radius:var(--r);
  padding:17px 19px;margin-bottom:var(--gap)}
.blockcard .bh{display:flex;align-items:center;gap:10px;font-weight:700;color:#b02525;font-size:15.5px}
.blockcard .bby{color:var(--dim);font-size:12.5px;margin:8px 0 12px}
.blockcard .bhead{color:var(--warn);font-weight:600;font-size:13px;margin:12px 0 5px}
.blockcard ul{margin:5px 0 10px;padding-left:20px;color:#7a2020;font-size:13px}
.blockcard li{margin-bottom:3px}
.blockcard .brule{background:#f3eced;border:1px dashed #efb9b9;border-radius:10px;padding:12px 14px;
  color:#b02525;font-size:12.8px;margin-top:12px;line-height:1.75}
.blockcard .bnote{color:var(--dim2);font-size:12px;margin-top:11px;line-height:1.75}

/* 内容面板 / 检查项 */
.panelx{background:var(--panel3);border:1px solid var(--line2);border-radius:11px;padding:14px 16px;
  max-height:520px;overflow:auto;white-space:pre-wrap;word-break:break-word;font-size:12.8px;line-height:1.8}
.panelx.tbl{white-space:normal;padding:0}
.panelx.tbl table{font-size:12.5px}
.panelx.tbl th,.panelx.tbl td{padding:7px 11px}
.chk{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-bottom:1px dashed var(--line2);font-size:13px}
.chk:last-child{border-bottom:0}
.chk .ic{flex:0 0 auto}
.chk.pass .ic{color:var(--ok)} .chk.fail .ic{color:var(--bad)} .chk.warn .ic{color:var(--warn)}

/* 上传 */
.dropb{border:1.4px dashed #c7d4e5;border-radius:12px;padding:15px 16px;text-align:center;color:var(--dim);
  background:#f8fafc;cursor:pointer;font-size:12.8px;transition:border-color .15s,background .15s;line-height:1.7}
.dropb:hover{border-color:#3c5d85;background:#ebeff4}
.dropb.hot{border-color:var(--blue);color:var(--blue);background:#ebf0f4}
.mats{display:flex;flex-direction:column;gap:7px;margin-top:12px}
.mat{display:flex;align-items:center;gap:10px;background:var(--panel3);border:1px solid var(--line2);
  border-radius:10px;padding:9px 12px;font-size:12.5px}
.mat .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{background:#f7f9fc;border:1px solid var(--line2);border-radius:7px;padding:3.5px 9px;font-size:11.5px;
  color:var(--dim);max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chip.more{color:var(--blue);border-color:#c4daf1}

/* 对话 */
.chat{display:flex;flex-direction:column;gap:10px;max-height:520px;overflow-y:auto;padding:4px 2px}
.bub{max-width:78%;padding:10px 14px;border-radius:13px;font-size:13px;white-space:pre-wrap;word-break:break-word}
.bub.me{align-self:flex-end;background:#ebf0f4;border:1px solid #c4daf1}
.bub.bot{align-self:flex-start;background:var(--panel2);border:1px solid var(--line)}
.bub .wh{color:var(--dim2);font-size:11px;margin-bottom:4px}
.chatbar{display:flex;gap:9px;margin-top:12px}
.tabs{display:flex;gap:5px;border-bottom:1px solid var(--line2);padding:0 16px;flex-wrap:wrap}
.tabs a{padding:11px 14px;font-size:13px;color:var(--dim);border-bottom:2px solid transparent}
.tabs a.on{color:var(--txt);border-bottom-color:var(--blue)}
.tabs a:hover{text-decoration:none;color:var(--txt)}

/* 遮罩（移动端抽屉） */
#scrim{display:none;position:fixed;inset:0;background:rgba(16,26,40,.28);z-index:35}
@media (max-width:980px){
  aside{transform:translateX(-100%);box-shadow:0 0 40px rgba(16,26,40,.16)}
  body.navopen aside{transform:none}
  body.navopen #scrim{display:block}
  main{margin-left:0}
  .burger{display:inline-block}
  .wrap{padding:14px}
  .g2,.g3{grid-template-columns:1fr}
  .kpi{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
  header{padding:0 14px;gap:9px}
  header .crumb{display:none}
  .ellip{max-width:180px}
}

/* 窄屏（手机）：顶栏只留关键信号，卡片单列，控件做大手势友好 */
@media (max-width:700px){
  header{padding:0 12px;gap:7px}
  header h1{font-size:15px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  header h1 .sub{display:none}
  #reqPill,#timePill{display:none}
  .pill{padding:4px 9px;font-size:11.5px}
  .kpi{grid-template-columns:repeat(2,minmax(0,1fr))}
  .filterbar{flex-wrap:wrap;gap:6px}
  .filterbar .cnt{width:100%;margin-left:0}
  .tb{display:block;overflow-x:auto}
  .steps{grid-template-columns:1fr}

  /* ① 表单/两栏一律塌成单列（内联 grid 也压掉，否则窄屏两栏挤成竖排碎句） */
  /* 关键：用 minmax(0,1fr) 而不是 1fr —— 否则单元格里的宽表格会把整列撑到 560px，
     连带右边的柱子图也一起被撑出屏幕（手机上看着就像“图表没渲染”） */
  .grid,.form2{grid-template-columns:minmax(0,1fr) !important}
  .form2s{grid-template-columns:minmax(0,1fr) !important}
  .wrap{padding:12px}
  .card .bd{padding:12px}
  .card h2{font-size:14px;flex-wrap:wrap;gap:6px}
  .card h2 .sub{flex:1 1 100%;font-size:11.5px;line-height:1.5}

  /* ② 触控目标：≥42px，复选框整行可点 */
  input:not([type=checkbox]),select,textarea{min-height:42px;font-size:15px}
  .btn{min-height:42px;padding:0 14px;font-size:13.5px;display:inline-flex;align-items:center;justify-content:center}
  .btn.sm{min-height:36px}
  .sw{min-height:46px}
  .sw input{width:22px;height:22px}
  .chips{flex-wrap:wrap}
  .chips .chip{font-size:12px;padding:5px 9px}
  .chips .btn{min-height:38px}

  /* ③ 告警条目：竖排，右栏不再被挤成一列字 */
  .alrow{flex-wrap:wrap;gap:9px;padding:11px 12px}
  .alrow .at{flex:1 1 100%}
  .alrow .af{flex:1 1 100%;max-width:none;text-align:left;color:var(--blue)}
  .alrow .tag{flex:0 0 auto}

  /* ④ 拦截卡标题：状态/说明/入口不再硬塞一行 */
  .blockcard{padding:12px 13px}
  .blockcard .bh{flex-wrap:wrap;font-size:14px}
  .blockcard .go2{margin-left:0;flex:1 1 100%;padding-top:4px}

  /* ⑤ KPI：等高、说明最多两行 */
  .kpi .k{padding:12px}
  .kpi .k .t{font-size:11.5px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;
            -webkit-box-orient:vertical;overflow:hidden}
  .kpi .k b{font-size:22px}

  /* ⑥ 表格：只有包在 .tblwrap 里的宽表才强制最小宽（其余窄表让它自适应，别撑破卡片） */
  th,td{padding:9px 10px;font-size:12.5px}
  .swipe{display:flex}
  thead th{position:sticky;top:0;z-index:2}
  .tblwrap{-webkit-overflow-scrolling:touch}

  /* ⑦ 用量细条：两行紧凑 */
  .usestrip{padding:7px 2px}
  .usestrip .u-i{padding:0 9px;font-size:12px;border-right:0}
  .usestrip .u-i:last-child{margin-left:0}
  .bars{height:82px;gap:3px}
  .bars .bar .bn{font-size:9px}
  .axis{font-size:10px}
  pre.pre{overflow-x:auto;font-size:12px}

  /* ⑧ 抽屉导航：够宽、能滚、条目手势友好 */
  aside{width:84vw;max-width:340px;overflow-y:auto;overscroll-behavior:contain}
  .nav a{min-height:44px}
  .nav .grp{margin-top:14px}
  .side-foot{padding:12px 14px}

  /* ⑨ 预览弹窗占满屏 */
  #pv,.pvbox{width:96vw!important;max-width:96vw!important;height:88vh!important;max-height:88vh!important}
  .msg,.hint{font-size:12.5px;line-height:1.6}
}
@media (max-width:430px){
  #connPill{display:none}                 /* 只剩状态胶囊 + 刷新 + 菜单 */
  .kpi{grid-template-columns:1fr 1fr;gap:8px}
  .g2{gap:10px}
}
/* 表格横滑提示（只在真溢出时由 JS 插入） */
.swipe{display:none;align-items:center;gap:6px;font-size:11.5px;color:var(--dim2);
       padding:6px 10px;border-bottom:1px solid var(--line3);background:rgba(16,26,40,.02)}
.swipe b{color:var(--blue);font-weight:500}
/* 移动端上传区：不写「拖拽」，给能点的按钮 */
.tap{display:none}
.tblwrap{max-width:100%;overflow-x:auto}

/* ── 用量小栏目（概览用：一行、矮、不抢眼）────────────────────────── */
.usestrip{display:flex;align-items:center;gap:0;flex-wrap:wrap;margin:0 0 14px;
  background:var(--panel);border:1px solid var(--line2);border-radius:11px;padding:8px 4px;font-size:12.5px}
.usestrip .u-i{color:var(--dim);padding:0 12px;border-right:1px solid var(--line3);white-space:nowrap}
.usestrip .u-i:first-child{padding-left:14px}
.usestrip .u-i:last-child{border-right:0;margin-left:auto;padding-right:14px}
.usestrip .u-i b{color:var(--txt);font-weight:650;margin-right:4px;font-variant-numeric:tabular-nums}
.usestrip .u-i.bad b{color:var(--warn)}
.usestrip .u-i.link{color:var(--blue);text-decoration:none}
.usestrip .u-i.link:hover{text-decoration:underline}

/* ── 拦截说明卡：中性配色（不再用红色）+ 概览紧凑版 ───────────────── */
.blockcard{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--blue);
  border-radius:12px;padding:14px 16px;margin-bottom:14px}
.blockcard .bh{font-size:14.5px;font-weight:650;color:var(--txt);display:flex;align-items:center;gap:8px;margin-bottom:6px}
.blockcard .bh .bby{color:var(--dim2);font-size:12px;font-weight:400}
.blockcard .bhead{color:var(--dim);font-size:12px;margin:9px 0 3px;letter-spacing:.3px}
.blockcard .brule{color:var(--dim2);font-size:12px;border-top:1px dashed var(--line2);margin-top:10px;padding-top:8px;line-height:1.7}
.blockcard .bnote{color:var(--dim2);font-size:12px;margin-top:6px}
.blockcard.slim{padding:9px 13px;margin-bottom:11px;background:var(--panel)}
.blockcard.slim .bh{margin-bottom:2px;font-size:14px}
.blockcard.slim .bhead{margin:7px 0 2px}
.blockcard.slim ul{margin:2px 0 0;padding-left:18px}
.blockcard.slim li{font-size:12.5px;line-height:1.6;color:var(--dim)}
.blockcard.slim > div:not(.bh):not(.bhead){font-size:12.5px;line-height:1.65;color:var(--dim)}
.blockcard .go2{margin-left:auto;color:var(--blue);font-size:12px;text-decoration:none;font-weight:400}
.blockcard .go2:hover{text-decoration:underline}

.kpi .k .act{display:flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap}
.btn.charge{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:650}
.btn.charge:hover{filter:brightness(1.08)}

/* 本机接管开关：一行复选框 + 说明 */
.sw{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--txt);background:#f7f9fc;
    border:1px solid #c8d4e5;border-radius:8px;padding:9px 11px;cursor:pointer;user-select:none}
.sw:hover{border-color:#cdd5e0}
.sw input{width:15px;height:15px;accent-color:#1d78c4;cursor:pointer}

/* 告警条 · 首页 */
.alrow{display:flex;align-items:flex-start;gap:10px;padding:9px 12px;border-bottom:1px solid #eef2f8}
.alrow:last-child{border-bottom:0}
.alrow .at{flex:1;display:flex;flex-direction:column;gap:2px;font-size:13px;line-height:1.55}
.alrow .at .mut2{font-size:12px}
.alrow .af{font-size:12px;max-width:280px;text-align:right;margin-left:auto}
.alrow.high{background:rgba(200,140,40,.07)}
.alrow.ok{opacity:.85}
/* 近 14 天派单走势 */
.bars{display:flex;align-items:flex-end;gap:5px;height:96px;padding:6px 2px;
      background:#fbfcfe;border:1px dashed #d6e0ec;border-radius:8px}
.bars .bar{flex:1;display:flex;align-items:flex-end;height:100%}
.bars .bar i{display:block;width:100%;border-radius:3px 3px 0 0;
             background:linear-gradient(180deg,#1d78c4,#2b6ea8);min-height:4px}
.bars .bar:hover i{background:linear-gradient(180deg,#7cc0f0,#3987c8)}

/* 空态：没数据时给一句人话，别摆空图 */
.bars-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:110px;
  gap:4px;color:#6b7a8c;font-size:12.5px;line-height:1.7;text-align:center}

/* 柱状图：日期轴、柱顶数字、零值样式 */
.bars{height:110px}
.bars .bar{position:relative;flex-direction:column;justify-content:flex-end;align-items:center}
.bars .bar .bn{font-size:10px;color:#5a6b7e;margin-bottom:2px;line-height:1}
.bars .bar.zero i{background:#ebeff4}
.bars .bar.zero .bn{color:#3d4c5c}
.axis{display:flex;justify-content:space-between;font-size:11px;color:#5d6f82;padding:2px 2px 0}
.addr{white-space:normal;word-break:break-all;max-width:300px;line-height:1.5}

/* 移动端专属：拖拽文案换掉、角色说明限高 */
@media (max-width:700px){
  .dnd{display:none}
  .tap{display:inline}
  .dropb{min-height:92px;display:flex;align-items:center;justify-content:center;text-align:center;
         font-size:13.5px;padding:14px}
  .rolehint{max-height:124px;overflow:auto}
  .filtersel{min-height:38px}
  #kbRes .tblwrap table{min-width:520px}
  .card .bd table{min-width:0}                 /* 卡片里没包 tblwrap 的小表：自动缩，不撑列 */
  .bars{width:100%!important}
  .bars .bar .bn{font-size:8.5px}
  .bars{gap:3px}
}

/* 手机端：派活提交行吸底，随时能点；告警按钮小一号 */
@media (max-width:700px){
  .actbar{position:sticky;bottom:0;z-index:6;margin-top:10px;padding:10px 0 8px;
          background:linear-gradient(180deg,rgba(255,255,255,0),rgba(255,255,255,.96) 26%);
          backdrop-filter:blur(3px);border-top:1px solid var(--line3)}
  .actbar .hint{margin-top:6px;font-size:11.5px;line-height:1.55}
  textarea{resize:none}
  .alrow .af .btn{min-height:32px;margin-top:4px;padding:0 10px;font-size:12px}
}

/* ═══ 手机端最终裁决（必须放在文件最后：同权重规则后写的赢） ═══ */
@media (max-width:700px){
  .swipe{display:flex!important}          /* JS 插的「左右滑动」提示条 */
  .dnd{display:none!important}            /* 桌面文案：拖到这里 */
  .tap{display:inline!important}          /* 手机文案：点这里选择文件 */
  .card{overflow:visible}                 /* card 默认 overflow:hidden 会让 .actbar 的 sticky 失效 */
  .actbar{position:sticky;bottom:0;z-index:20}
  .kpi .k .t{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  table td .path,.tblwrap .mono{word-break:break-all}   /* 长路径换行显示，别硬截断 */
  .tblwrap table{min-width:520px}
}

/* 抽屉：加深遮罩 + 分组层级 + 关闭键 + 路径省略显示 */
#scrim{background:rgba(16,26,40,.40)}
aside{box-shadow:6px 0 24px rgba(16,26,40,.16)}
.navx{display:none}
.nav .grp{display:flex;align-items:center;gap:8px}
.nav .grp::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,#ebeff4,transparent)}
@media (max-width:700px){
  .navx{display:block;position:absolute;top:10px;right:10px;width:34px;height:34px;border-radius:9px;
        background:#edf3fa;color:#2a3a4c;border:1px solid #c8d4e5;font-size:14px;line-height:1}
  .aside-hd{position:relative;padding-right:46px}
  .nav{padding:8px 10px 16px}
  .nav .grp{margin-top:16px;padding:0 4px 8px;color:#7d94ac;font-size:11px;letter-spacing:.5px;font-weight:600}
  .nav .grp:first-child{margin-top:2px}
  .nav a{padding:11px 12px;font-size:14px;margin-bottom:2px}
  .nav a.on{box-shadow:inset 3px 0 0 #4c8dff}
}
.addr,.mono.copy{text-decoration:underline dotted rgba(90,110,135,.32);text-underline-offset:3px}
.addr.copied,.mono.copy.copied{color:#5ee39a}

/* 手机端：长字符串（路径/命令/接口）就地换行，别把整页撑宽 */
@media (max-width:700px){
  pre,code,.mono,.path,.bhead2,.hint,.sub,td,th,.alrow{overflow-wrap:anywhere;word-break:break-word}
  pre{white-space:pre-wrap}
  body{overflow-x:hidden}
}

/* 平板（≤1024）：KPI 四列太窄 → 2×2；顶栏精简；告警条目竖排 */
@media (max-width:1024px){
  .kpi{grid-template-columns:repeat(2,minmax(0,1fr))}
  #timePill{display:none}
  header h1 .sub{display:none}
  .alrow{flex-wrap:wrap;gap:9px}
  .alrow .at{flex:1 1 100%}
  .alrow .af{flex:1 1 100%;max-width:none;text-align:left}
  .grid.g3{grid-template-columns:repeat(2,minmax(0,1fr))}
}
/* 零值柱：给一个看得见的矮桩，别像“图没渲染” */
.bars .bar.zero i{background:#ebeff4;min-height:5px}
.bars .bar.zero .bn{color:#33445a}

/* 零值柱 + 基线：让“按天计数”的图看着就是一张图 */
.bars{position:relative}
.bars::after{content:"";position:absolute;left:2px;right:2px;bottom:6px;height:1px;background:#ebeff4}
.bars .bar.zero i{background:linear-gradient(180deg,#ebeff4,#ebeef4);min-height:5px}

/* ═══ 使用说明（材料与知识库页）═══ */
.gdfilter{display:flex;gap:9px;align-items:center;margin-bottom:11px;flex-wrap:wrap}
.gdfilter input{flex:1;min-width:180px}
.gdgrid{display:grid;grid-template-columns:minmax(0,1fr);gap:9px;align-items:start;max-width:1180px}
.gd{background:var(--panel3);border:1px solid var(--line2);border-radius:11px;overflow:hidden}
.gd[open]{border-color:#c4daf1;box-shadow:0 2px 12px rgba(16,26,40,.08)}
.gd summary{cursor:pointer;padding:11px 13px;display:flex;flex-direction:column;gap:3px;
           list-style:none;transition:background .15s}
.gd summary::-webkit-details-marker{display:none}
.gd summary:hover{background:#ebeff4}
.gd[open] summary{background:#ebeff4;border-bottom:1px solid var(--line2)}
.gdt{font-weight:600;font-size:13.5px;color:var(--txt);display:flex;align-items:center;gap:7px}
.gdt::before{content:"▸";color:var(--blue);font-size:12px;transition:transform .15s}
.gd[open] .gdt::before{content:"▾"}
.gds{font-size:11.5px;line-height:1.5;padding-left:19px}
.gdb{padding:13px 15px;font-size:13.2px;line-height:1.92;color:var(--txt);max-width:1000px}
.gdb h4{font-size:14px;margin:13px 0 6px;color:var(--txt);letter-spacing:.2px}
.gdb h5{font-size:13px;margin:9px 0 4px;color:#22303f}
.gdb p{margin:8px 0}
.gdb ul,.gdb ol{margin:7px 0 7px 19px;padding:0}
.gdb li{margin:4px 0}
.gdb code{background:#ebeff4;border:1px solid #c8dcf2;border-radius:6px;padding:1.5px 7px;
          font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;color:#14517f}
.gdb b{color:var(--txt);font-weight:700}
.gdq{background:var(--panel3);border-left:2px solid var(--line);padding:6px 10px;border-radius:0 8px 8px 0;
     margin:8px 0;font-size:12.5px;line-height:1.6}

@media (max-width:700px){
  .gd summary{padding:12px 12px}
  .gdt{font-size:14px}
  .gdb{padding:12px 12px;font-size:13.5px}
  .gdfilter{gap:7px}
  .gdfilter input{min-width:0}
}

/* 手机端：搜索框独占一行，按钮换行，别把占位文字挤断 */
@media (max-width:700px){
  .gdfilter input{flex:1 1 100%}
  .gdfilter .btn,.gdfilter .mut2{flex:0 0 auto}
}

/* ══════════════════════════════════════════════════════════════════════
   v2 视觉基线（2026-10-15）——对齐市面上成熟 AI 数字员工控制台的做法：
     · 单一强调色（蓝），其它颜色只用于状态；零装饰噪音
     · 顶部 hero 一屏回答「谁在岗、在干什么、今天出了什么活、卡没卡」
     · 每个数字员工一张卡（头像 / 岗位 / 状态 / 最近动作），而不是一张表
     · 更克制的边框与阴影，更大的留白，表格首行吸顶
   ══════════════════════════════════════════════════════════════════════ */
:root{
  --acc:#2f6df0; --acc-ink:#1b47bd; --acc-soft:#eff4ff;
  --ink:#16202e; --ink2:#41506b; --mut:#8a97a6;
  --line:#e6ecf5; --line2:#eff3fa; --bg2:#f6f8fc; --card2:#fff;
  --ok:#12a06a; --warn:#c07a12; --bad:#cf3b3b; --info:#3f7fd6;
  --r:14px; --rs:10px;
  --sh:0 1px 2px rgba(18,38,74,.05), 0 6px 18px rgba(18,38,74,.04);
  --shh:0 2px 6px rgba(18,38,74,.08), 0 14px 30px rgba(18,38,74,.07);
}
main .wrap{max-width:1380px}

/* ── hero：一屏回答「谁在岗、在干什么」 ───────────────────────────── */
.hero{display:flex;gap:14px;flex-wrap:wrap;align-items:stretch;margin:2px 0 16px}
.hero .hl{flex:1 1 320px;min-width:300px;border:1px solid var(--line);border-radius:var(--r);
  background:linear-gradient(135deg,#fff 0%,#f8fbff 58%,#eef4ff 100%);padding:18px 20px;box-shadow:var(--sh)}
.hero .h1{font-size:25px;font-weight:750;letter-spacing:-.4px;line-height:1.28}
.hero .h1 .n{color:var(--acc);font-size:31px;font-weight:800}
.hero .h2{color:var(--ink2);font-size:13.2px;margin-top:7px;line-height:1.72;max-width:60ch}
.hero .ha{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap;align-items:center}
.hero .hm{flex:1 1 360px;min-width:300px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.mt{background:var(--card2);border:1px solid var(--line);border-radius:var(--rs);padding:12px 14px;box-shadow:var(--sh)}
.mt .k{font-size:11.5px;color:var(--mut);letter-spacing:.3px;display:flex;align-items:center;gap:5px}
.mt b{display:block;font-size:23px;font-weight:750;letter-spacing:-.5px;line-height:1.4;margin-top:2px}
.mt .d{font-size:11.3px;color:var(--mut);margin-top:1px;line-height:1.5}
.mt.acc b{color:var(--acc)} .mt.ok b{color:var(--ok)} .mt.bad b{color:var(--bad)} .mt.warn b{color:var(--warn)}

/* ── 数字员工卡网格（谁在干什么，一屏看全） ────────────────────────── */
.agrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(352px,1fr));gap:12px}
.ag{background:var(--card2);border:1px solid var(--line);border-radius:var(--r);padding:14px;
  box-shadow:var(--sh);transition:box-shadow .16s ease,transform .16s ease;display:flex;flex-direction:column;gap:9px}
.ag:hover{box-shadow:var(--shh);transform:translateY(-1px)}
.ag .top{display:flex;align-items:center;gap:10px}
.ag .av{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  color:#fff;font-weight:700;font-size:12.5px;letter-spacing:.4px;flex:none}
.ag .nm{font-weight:650;font-size:14.5px;line-height:1.35}
.ag .rl{color:var(--mut);font-size:11.3px}
.ag .jb{color:var(--ink2);font-size:12.2px;line-height:1.6;min-height:34px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ag .act{position:relative;color:var(--ink2);font-size:12.1px;line-height:1.55;background:var(--line2);border-radius:9px;padding:8px 10px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ag .ft{display:flex;gap:6px;align-items:center;margin-top:auto}
.ag .ft .grow{flex:1}

/* ── 今日动态（谁做了什么，按时间倒序） ────────────────────────────── */
.tl{position:relative;padding-left:18px;margin:2px 0 2px}
.tl:before{content:"";position:absolute;left:4px;top:8px;bottom:8px;width:2px;background:var(--line2);border-radius:2px}
.tl-i{position:relative;padding:7px 0 8px 4px;font-size:12.6px;color:var(--ink2);line-height:1.6}
.tl-i:before{content:"";position:absolute;left:-19px;top:13px;width:9px;height:9px;border-radius:50%;
  background:#fff;border:2px solid var(--acc)}
.tl-i.bad:before{border-color:var(--bad)} .tl-i.ok:before{border-color:var(--ok)} .tl-i.warn:before{border-color:var(--warn)}
.tl-i .t{color:var(--mut);font-size:11.4px;margin-right:7px;font-variant-numeric:tabular-nums}
.tl-i b{font-weight:600;color:var(--ink)}

/* ── 头部主操作（所有页面都能一键派活） ───────────────────────────── */
.btn.headact{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600;box-shadow:0 2px 8px rgba(47,109,240,.22)}
.btn.headact:hover{background:var(--acc-ink);border-color:var(--acc-ink)}

/* ── 导航：更紧的行高、更明确的选中态 ────────────────────────────── */
aside .nav .grp{margin-top:14px;letter-spacing:.5px}
aside .nav .nav-i{border-radius:9px;transition:background .14s ease}
aside .nav .nav-i:hover{background:#f3f7fd}

/* ── 卡片与表格：克制的边框 + 表头吸顶 + 行悬停 ──────────────────── */
.card{border-radius:var(--r);box-shadow:var(--sh)}
.card>h2{font-size:14.6px;letter-spacing:-.2px}
.card>h2 .sub{font-weight:400}
table th{position:sticky;top:0;z-index:1;background:#fbfcfe}
table tbody tr{transition:background .12s ease}
table tbody tr:hover{background:#fafcff}
.tblwrap{max-height:none}

/* ── 空状态更体面 ────────────────────────────────────────────────── */
.empty{padding:26px 14px}

@media (max-width:900px){
  .hero .h1{font-size:22px} .hero .h1 .n{font-size:26px}
  .agrid{grid-template-columns:1fr}
  main .wrap{padding:14px 12px 40px}
}


/* ── 全局状态条（页头下方）：现在能不能派活、卡在哪 ───────────────── */
.sbar{display:flex;align-items:center;gap:10px;margin:0 0 14px;padding:10px 14px;border-radius:12px;
  font-size:13px;border:1px solid var(--line);background:#fff;box-shadow:var(--sh)}
.sbar .ic{font-size:15px;line-height:1}
.sbar b{font-weight:650;letter-spacing:-.1px}
.sbar .rs{color:var(--ink2);font-size:12.4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:56ch}
.sbar .grow{flex:1}
.sbar.ok{background:#f3fbf7;border-color:#cfeade}
.sbar.ok b{color:#0e7d54}
.sbar.warn{background:#fffaf0;border-color:#f0dcb6}
.sbar.warn b{color:#9a6a10}
.sbar.bad{background:#f4f7fc;border-color:#cfdcf0}
.sbar.bad b{color:#14315a}
.mt.zero b{color:var(--mut);font-weight:600}
.ag .act .lbl{display:inline-block;color:var(--mut);font-size:10.6px;letter-spacing:.4px;margin-right:6px;
  padding:0 5px;border:1px solid var(--line);border-radius:5px;background:#fff;vertical-align:1px}
main>header .meta{display:flex;align-items:center;gap:6px;padding-left:10px;border-left:1px solid var(--line);font-size:12px;opacity:.92}
@media (max-width:900px){.sbar .rs{display:none}main>header .meta{display:none}}


/* ── v2.2：状态条可换行 + 折叠诊断 + 告警行顶部对齐 ───────────────── */
.sbar{align-items:flex-start;flex-wrap:wrap;row-gap:6px}
.sbar .ic{line-height:1.45}
.sbar b{line-height:1.5}
.sbar .rs{white-space:normal;max-width:none;flex:1 1 320px;line-height:1.55}
.sbar .lnk{color:var(--ink2);font-size:12.5px;text-decoration:none;border-bottom:1px dashed var(--line)}
.sbar .lnk:hover{color:var(--acc);border-bottom-color:var(--acc)}
details.fold{margin:0 0 14px}
details.fold>summary{cursor:pointer;list-style:none;background:#fffaf0;border:1px solid #f0dcb6;color:#9a6a10;
  border-radius:12px;padding:10px 14px;font-size:13px;font-weight:600;box-shadow:var(--sh)}
details.fold>summary::-webkit-details-marker{display:none}
details.fold>summary:after{content:"展开 ›";float:right;font-weight:400;color:#b08a3a}
details.fold[open]>summary:after{content:"收起 ⌃"}
details.fold[open]>summary{border-radius:12px 12px 0 0;margin-bottom:-6px}
.alrow{align-items:flex-start}
.alrow .af{margin-top:1px}
@media (max-width:900px){.sbar .rs{display:block;flex-basis:100%}}


/* ── v2.3：整卡可点 + 末行不留空档 ───────────────────────────────── */
.ag.clickable{cursor:pointer}
.ag.clickable:hover{border-color:#cfe0ff}
.ag.clickable .ft .mut2{opacity:0;transition:opacity .15s ease}
.ag.clickable:hover .ft .mut2{opacity:1}


/* ══ 侧栏 v3：二级目录 · 去图标 · 字号 +1 · 加框 ═══════════════════ */
aside .nav{padding:8px 6px 12px}
aside .nav .gsec{border:1px solid #e2eaf6;border-radius:13px;background:#fff;margin:0 3px 11px;padding:5px;
  box-shadow:0 1px 3px rgba(18,38,74,.045)}
aside .nav .grp{display:flex;align-items:center;gap:8px;width:100%;background:transparent;border:0;cursor:pointer;
  font-family:inherit;font-size:12.5px;font-weight:650;line-height:1.45;color:#33506e;letter-spacing:.3px;
  padding:8px 9px;border-radius:9px;text-align:left}
aside .nav .gsec.open{border-color:#cfdcf0;box-shadow:0 2px 8px rgba(18,38,74,.06)}
aside .nav .gsec.open>.grp{color:var(--acc-ink);background:#f5f9ff}
aside .nav .grp:hover{background:#f4f7fd;color:var(--acc-ink)}
aside .nav .grp .gt{flex:1}
aside .nav .grp .car{transition:transform .18s ease;color:#9fb0c4;font-size:15px;line-height:1}
aside .nav .gsec.open .grp .car{transform:rotate(90deg)}
aside .nav .gsec.open .grp{color:var(--acc-ink)}
aside .nav .gbody{padding:2px 0 4px 8px;border-left:2px solid var(--line2);margin-left:9px}
aside .nav .gsec.closed .gbody{display:none}
aside .nav a.nav-i{font-size:15.5px;padding:9px 10px;border-radius:9px;gap:0;border-left:2px solid transparent}
aside .nav a.nav-i.on{border-left-color:var(--acc);background:#f2f6fb;color:#14315a;font-weight:600}
aside .nav a.nav-i .n{font-size:11.5px;padding:1px 9px}
aside .nav .grp .ic{display:none}
@media (max-width:900px){aside .nav a.nav-i{font-size:16px}}

/* ══ 花名册/首页：按部门编排 ══════════════════════════════════════ */
.dept{margin:6px 0 14px}
.dept-h{display:flex;align-items:baseline;gap:9px;font-size:14px;font-weight:700;color:#24405f;
  letter-spacing:.2px;padding:4px 2px 10px;margin-bottom:2px;border-bottom:1px solid var(--line2)}
.dept-h .mut2{font-weight:400;font-size:12px}
.dept .agrid{margin-top:10px;grid-template-columns:repeat(auto-fit,minmax(330px,1fr))}

/* 侧栏底部与导航分区 */
aside .who,aside .nfoot{border-top:1px solid #e6ecf5;margin-top:10px;padding-top:10px}
aside .nav .grp .car{font-size:16px;color:#a9b8cb}
aside .nav .gsec.open>.grp .car{color:var(--acc)}


/* ══ 侧栏 v5：无框 · 大字 · 一级默认折叠 ══════════════════════════ */
aside .nav{padding:10px 8px 16px}
aside .nav .gsec{border:0;background:transparent;box-shadow:none;margin:0 0 7px;padding:0}
aside .nav .grp{gap:11px;width:100%;border:0;background:transparent;cursor:pointer;text-align:left;
  font-family:inherit;font-size:14.5px;font-weight:650;line-height:1.65;color:#2b4666;letter-spacing:.5px;
  padding:14px 11px;border-radius:10px}
aside .nav .grp:hover{background:#f4f7fc}
aside .nav .gsec.open>.grp{color:#12325c;background:#f1f6fd}
aside .nav .grp .gt{flex:1}
aside .nav .grp .ic{flex:0 0 21px;width:21px;height:21px;color:#9fadbe}
aside .nav .gsec.open>.grp .ic{color:#4a5c70}
aside .nav .grp .car{font-size:17px;line-height:1;color:#a9b8cb;transition:transform .18s ease}
aside .nav .gsec.open>.grp .car{transform:rotate(90deg);color:var(--acc)}
aside .nav .gsec.closed .gbody{display:none}
aside .nav .gbody{padding:4px 0 8px 24px;border:0}
aside .nav a.nav-i{display:flex;align-items:center;gap:11px;font-size:17px;line-height:1.6;
  padding:13px 11px;border-radius:10px;letter-spacing:.4px;color:#33506e}
aside .nav a.nav-i:hover{background:#f4f7fc}
aside .nav a.nav-i .ic{flex:0 0 20px;width:20px;height:20px;color:#a6b4c6}
aside .nav a.nav-i .lb{flex:1;white-space:nowrap}
aside .nav a.nav-i.on{background:#eef4fd;color:#0f2f57;font-weight:600}
aside .nav a.nav-i.on .ic{color:#3d4c5c}
aside .nav a.nav-i:hover .ic{color:#6b7b8d}
aside .nav a.nav-i .n{font-size:12.5px;padding:2px 10px}
@media (max-width:900px){aside .nav a.nav-i{font-size:18px}aside .nav .grp{font-size:15.5px}}

aside .navver{font-size:11px;color:#b3c0d0;padding:4px 4px 0;letter-spacing:.2px}

/* ══ 侧栏 v6：三级目录（一级模块 → 二级目录 → 三级页面）══════════════ */
aside .nav a.gsec.lone{display:flex;align-items:center;gap:11px;padding:14px 11px;border-radius:10px;
  font-size:14.5px;font-weight:650;letter-spacing:.5px;color:#2b4666;margin:0 0 7px}
aside .nav a.gsec.lone:hover{background:#f4f7fc}
aside .nav a.gsec.lone.on{background:#eef4fd;color:#0f2f57}
aside .nav .nav-3h{font-size:12.5px;font-weight:650;color:#8ea1b6;letter-spacing:.6px;padding:9px 10px 3px}
aside .nav a.nav-i3{padding:10px 10px 10px 24px;font-size:16px}

/* ══ ERP 业务页：沿用现有卡片/表格样式（别名 + 表单栅格）═══════════════ */
.kpigrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(186px,1fr));gap:14px;margin-bottom:var(--gap)}
.kpigrid .kpi{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:15px 17px}
.kpigrid .kv{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.25}
.kpigrid .kl{color:var(--dim);font-size:12.5px;margin-top:3px}
.tw{max-width:100%;overflow-x:auto}
.card h3{font-size:13.5px;font-weight:650;color:#33506e;margin:0 0 10px;letter-spacing:.2px}
.card.form{margin-bottom:var(--gap)}
.fgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin:12px 0}
.fgrid label{display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:#5a6b7e}
.fgrid input{padding:9px 11px;border:1px solid var(--line);border-radius:9px;font-size:14px;background:#fff}
.form textarea{width:100%;padding:10px;border:1px solid var(--line);border-radius:9px;font:13px/1.6 ui-monospace,SFMono-Regular,monospace}
.inline{display:flex;gap:8px;align-items:center;margin-top:12px;flex-wrap:wrap}
.inline input{padding:8px 10px;border:1px solid var(--line);border-radius:9px}

aside .nav .nav-3h{padding:10px 10px 4px 14px;color:#7f93aa}
aside .nav a.nav-i3{padding-left:30px;font-size:15.5px}
