/* ==========================================================================
   电容装盘进销存 · 企业版（金蝶云星空风格）
   深蓝主视觉 / 紧凑行高 / 专业表格 / 响应式
   ========================================================================== */
:root{
  /* 品牌（金蝶蓝升级） */
  --brand:#1F4E9C; --brand-2:#2C6FD1; --brand-3:#17417F; --brand-l:#EAF1FC; --brand-ll:#F5F8FE;
  /* 底色 */
  --bg:#EEF2F7; --card:#fff; --line:#DDE4ED; --line-2:#EDF1F6; --line-3:#F4F7FB;
  --text:#17202E; --sub:#5C6B7F; --sub-2:#96A1B2; --fg:#17202E;
  /* 状态 */
  --pri:#1F4E9C; --pri-d:#17417F;
  --ok:#12A150; --ok-l:#E8F7EF; --ok-b:#BFE8CF;
  --warn:#E8830C; --warn-l:#FEF4E6; --warn-b:#FBD9A8;
  --err:#D92D20; --err-l:#FEECEB; --err-b:#F9C6C1;
  --info:#2C6FD1;
  /* 阴影/圆角/尺寸 */
  --shadow:0 1px 2px rgba(16,24,40,.05),0 1px 3px rgba(16,24,40,.05);
  --shadow-md:0 4px 12px rgba(16,24,40,.09);
  --shadow-lg:0 12px 32px rgba(16,24,40,.14);
  --r:6px; --r-lg:8px; --sbw:222px; --top-h:50px;
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--text);
  font:13px/1.5 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Segoe UI",sans-serif;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
a{color:var(--brand);text-decoration:none}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:#C6CFDC;border-radius:6px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:#A9B5C6;background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}

/* ============================================================
   1. 骨架：侧边栏 + 主区
   ============================================================ */
.layout{display:flex;min-height:100vh}
.main{flex:1;margin-left:var(--sbw);display:flex;flex-direction:column;min-width:0;background:var(--bg)}

/* ---------- 侧边栏（深蓝企业色） ---------- */
.sidebar{width:var(--sbw);position:fixed;top:0;bottom:0;left:0;z-index:60;
  display:flex;flex-direction:column;color:#C9D6E8;
  background:linear-gradient(180deg,#1B3E7D 0%,#173463 55%,#132C55 100%)}
.brand{padding:13px 14px;display:flex;align-items:center;gap:10px;
  border-bottom:1px solid rgba(255,255,255,.09);flex:0 0 auto}
.brand .logo{width:32px;height:32px;border-radius:7px;flex:0 0 auto;
  background:linear-gradient(135deg,#3F86E0,#2C6FD1);
  display:flex;align-items:center;justify-content:center;font-size:16px;
  box-shadow:0 2px 8px rgba(0,0,0,.28)}
.brand>div:last-child{min-width:0;flex:1}
.brand .bt{font-size:13px;font-weight:700;color:#fff;letter-spacing:.2px;line-height:1.25;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-all}
.brand .bs{font-size:10.5px;color:#8FA7CB;margin-top:2px;letter-spacing:.4px}

.menu{flex:1;overflow-y:auto;padding:8px 8px 14px}
.menu::-webkit-scrollbar-thumb{background:rgba(255,255,255,.18);background-clip:content-box}
.mgroup{font-size:10.5px;color:#7B93B8;font-weight:700;letter-spacing:1.1px;
  padding:13px 10px 5px;text-transform:uppercase}
.mitem{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r);
  color:#C9D6E8;text-decoration:none;font-size:13px;margin-bottom:1px;position:relative;
  transition:background .12s,color .12s;cursor:pointer}
.mitem .ic{font-size:14.5px;width:17px;text-align:center;flex:0 0 auto;opacity:.92}
.mitem:hover{background:rgba(255,255,255,.09);color:#fff}
.mitem.on{background:var(--brand-2);color:#fff;font-weight:600;
  box-shadow:0 2px 8px rgba(44,111,209,.45)}
.mitem.on .ic{opacity:1}
.mitem .badge{margin-left:auto;background:var(--err);color:#fff;font-size:10.5px;
  font-weight:700;padding:0 6px;border-radius:9px;line-height:16px;min-width:16px;text-align:center}
.mitem.aux{font-size:12.5px;color:#A9BAD4;padding:6.5px 10px}
.mitem.aux:hover{color:#fff}

.sbfoot{padding:9px 14px;border-top:1px solid rgba(255,255,255,.09);
  font-size:11px;color:#7B93B8;line-height:1.6;flex:0 0 auto}
.sbfoot .st{display:flex;align-items:center;gap:5px}
.sbfoot .dot{width:6px;height:6px;border-radius:50%;background:#3DD68C;flex:0 0 auto;
  box-shadow:0 0 0 2px rgba(61,214,140,.22)}

/* ---------- 顶栏 ---------- */
.topbar{height:var(--top-h);background:#fff;border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:12px;padding:0 18px;position:sticky;top:0;z-index:50;
  box-shadow:0 1px 2px rgba(16,24,40,.03)}
.topbar h1{display:none}
.topbar .sp{flex:1}
.crumb{font-size:12.5px;color:var(--sub);display:flex;align-items:center;gap:6px}
.crumb b{color:var(--text);font-weight:600;font-size:13.5px}
.crumb .sep{color:var(--sub-2)}
.userchip{display:flex;align-items:center;gap:7px;padding:3px 10px 3px 3px;
  border-radius:16px;background:var(--brand-ll);border:1px solid var(--brand-l);font-size:12.5px}
.avatar{width:24px;height:24px;border-radius:50%;flex:0 0 auto;
  background:linear-gradient(135deg,var(--brand),var(--brand-2));
  color:#fff;display:flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:700}
.topbar .logout{border:1px solid var(--line);background:#fff;color:var(--sub);
  padding:5px 11px;font-size:12.5px;border-radius:var(--r);font-weight:500}
.topbar .logout:hover{border-color:var(--err);color:var(--err);background:var(--err-l)}
.hamburger{display:none;font-size:18px;background:none;border:none;cursor:pointer;
  color:var(--text);padding:4px 8px;margin-left:-6px}
.mask{display:none;position:fixed;top:0;right:0;bottom:0;left:var(--sbw);
  background:rgba(16,24,40,.45);z-index:59}
.mask.show{display:block}
.nav{display:none}

/* ============================================================
   2. 内容区
   ============================================================ */
.wrap{max-width:1400px;margin:0 auto;padding:14px 18px 28px;width:100%}

/* 页头（页面标题区） */
.ph{display:flex;align-items:flex-start;gap:12px;margin:0 0 12px;flex-wrap:wrap}
.ph h1{font-size:17px;font-weight:700;margin:0;letter-spacing:.2px;
  display:flex;align-items:center;gap:8px}
.ph .desc{font-size:12.5px;color:var(--sub);margin-top:3px;line-height:1.55}
.ph .stp{flex:1}
.ph .acts{display:flex;gap:7px;flex-wrap:wrap;align-items:center}

/* ============================================================
   3. 卡片 / 面板
   ============================================================ */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);
  margin-bottom:12px;box-shadow:var(--shadow);overflow:hidden}
.card>h2{font-size:13.5px;font-weight:700;margin:0;padding:10px 14px;
  border-bottom:1px solid var(--line-2);background:linear-gradient(180deg,#FCFDFF,#F8FAFD);
  display:flex;align-items:center;gap:8px;color:var(--text)}
.card>h2 .muted{font-weight:400;font-size:12px}
.card>h2 .sp{flex:1}
.card-bd{padding:14px}
.card-pad{padding:14px}
.muted{color:var(--sub);font-size:12.5px}

/* ============================================================
   4. 指标卡（紧凑专业版）
   ============================================================ */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}
.stat{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);
  padding:11px 13px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.stat::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--brand-2)}
.stat .lbl{font-size:11.5px;color:var(--sub);font-weight:600;letter-spacing:.2px}
.stat .val{font-size:22px;font-weight:700;margin-top:3px;letter-spacing:-.4px;
  font-variant-numeric:tabular-nums;line-height:1.15}
.stat .val small{font-size:11.5px;font-weight:500;color:var(--sub-2);margin-left:3px}
.stat .dlt{font-size:11.5px;margin-top:3px;color:var(--sub-2)}
.stat.g::before{background:var(--ok)} .stat.g .val{color:var(--ok)}
.stat.b::before{background:var(--brand-2)} .stat.b .val{color:var(--brand-2)}
.stat.w::before{background:var(--warn)} .stat.w .val{color:var(--warn)}
.stat.e::before{background:var(--err)} .stat.e .val{color:var(--err)}
.stat.mini{padding:9px 12px}
.stat.mini .val{font-size:18px}

/* 提醒条 */
.alert{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:var(--r);
  font-size:12.5px;margin:-2px 0 12px;border:1px solid}
.alert-warn{background:var(--warn-l);border-color:var(--warn-b);color:#8A5200}
.alert-err{background:var(--err-l);border-color:var(--err-b);color:#9B1C13}
.alert-ok{background:var(--ok-l);border-color:var(--ok-b);color:#0B6B36}
.alert .sp{flex:1}

/* ============================================================
   5. 表单（紧凑栅格）
   ============================================================ */
.field{margin:0}
.field label{display:block;font-size:11.5px;color:var(--sub);margin-bottom:4px;
  font-weight:600;letter-spacing:.2px}
.field label .req{color:var(--err);margin-left:2px}
.frow{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));
  gap:10px 12px;margin-bottom:11px}
.frow.c2{grid-template-columns:repeat(2,1fr)}
.frow.c3{grid-template-columns:repeat(3,1fr)}
.frow.c4{grid-template-columns:repeat(4,1fr)}
.frow .wide{grid-column:1/-1}
input,select,textarea{width:100%;padding:7px 10px;border:1px solid var(--line);
  border-radius:var(--r);font-size:13px;background:#fff;color:var(--text);
  outline:none;font-family:inherit;transition:border-color .12s,box-shadow .12s}
input:hover,select:focus-within,textarea:hover{border-color:#C6D0DE}
input:focus,select:focus,textarea:focus{border-color:var(--brand-2);
  box-shadow:0 0 0 2.5px rgba(44,111,209,.13)}
input[readonly],input:disabled,select:disabled,textarea:disabled{background:#F5F7FA;color:var(--sub);cursor:not-allowed}
select{appearance:none;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%235C6B7F' d='M6 8.5 1.5 4h9z'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 9px center;padding-right:26px;cursor:pointer}
input[type=checkbox],input[type=radio]{width:14px;height:14px;accent-color:var(--brand-2);cursor:pointer;vertical-align:-2px}
.row{display:flex;gap:9px;flex-wrap:wrap;align-items:center}
.row>*{flex:1;min-width:130px}
.row>.fix{flex:0 0 auto;min-width:0}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:11px}
hr{border:none;border-top:1px solid var(--line-2);margin:14px 0}
label.ck{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;
  cursor:pointer;color:var(--fg);white-space:nowrap}
label.ck input{margin:0}
.form-acts{display:flex;gap:8px;align-items:center;padding-top:2px;flex-wrap:wrap}
.form-acts .sp{flex:1}

button.mini{padding:1px 7px;font-size:11px;font-weight:600;border-radius:4px;
  border:1px solid var(--brand-l);background:var(--brand-ll);color:var(--brand-2);
  cursor:pointer;vertical-align:1px;margin-left:5px}
button.mini:hover{background:var(--brand-l);border-color:var(--brand-2)}
.quick{margin-top:6px;padding:9px;border:1px solid var(--brand-l);
  background:var(--brand-ll);border-radius:var(--r);display:flex;flex-direction:column;gap:6px}
.quick input{padding:6px 9px;font-size:12.5px}
.cfgbox{border:1px solid var(--line);border-radius:var(--r);padding:8px 10px;
  display:grid;grid-template-columns:1fr 1fr;gap:5px 8px;max-height:210px;overflow:auto;background:#FBFCFE}
.cfgbox label{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:400;
  color:var(--fg);cursor:pointer;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ============================================================
   6. 按钮（企业级：扁平、紧凑、分组）
   ============================================================ */
button,.btn{border:1px solid var(--line);background:#fff;color:var(--text);
  padding:6px 12px;border-radius:var(--r);font-size:12.5px;cursor:pointer;
  font-family:inherit;font-weight:500;transition:all .12s;white-space:nowrap;
  display:inline-flex;align-items:center;justify-content:center;gap:5px;line-height:1.5}
button:hover,.btn:hover{border-color:var(--brand-2);color:var(--brand-2);background:var(--brand-ll)}
button:active,.btn:active{transform:translateY(.5px)}
button:disabled,.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}
.btn-p{background:var(--brand-2);border-color:var(--brand-2);color:#fff;
  box-shadow:0 1px 2px rgba(44,111,209,.3)}
.btn-p:hover{background:var(--brand-3);border-color:var(--brand-3);color:#fff}
.btn-ok{background:var(--ok);border-color:var(--ok);color:#fff;box-shadow:0 1px 2px rgba(18,161,80,.3)}
.btn-ok:hover{background:#0E8A43;border-color:#0E8A43;color:#fff}
.btn-warn{background:var(--warn);border-color:var(--warn);color:#fff}
.btn-warn:hover{background:#C96E08;border-color:#C96E08;color:#fff}
.btn-d{background:#fff;border-color:var(--line);color:var(--err)}
.btn-d:hover{background:var(--err-l);border-color:var(--err-b);color:var(--err)}
.btn-lg{padding:10px 18px;font-size:13.5px;font-weight:600}
.btn-xl{padding:12px 22px;font-size:14px;font-weight:600;border-radius:var(--r-lg)}
.btn-sm{padding:4px 9px;font-size:11.5px}
.btns{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.btns .sp{flex:1}

/* ============================================================
   7. 工具栏（列表页的标准操作条）
   ============================================================ */
.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;
  padding:10px 14px;background:#FBFCFE;border-bottom:1px solid var(--line-2)}
.toolbar input,.toolbar select{width:auto;min-width:120px;padding:6px 10px;font-size:12.5px}
.toolbar .grw{flex:1;min-width:180px}
.toolbar .sp{flex:1}
.toolbar .segs .btn-p{background:var(--brand-2);border-color:var(--brand-2);color:#fff}

/* ============================================================
   8. 表格（紧凑 / 斑马纹 / 表头吸顶 / 数字右对齐）
   ============================================================ */
.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px}
.tbl th,.tbl td{padding:8px 11px;text-align:left;white-space:nowrap;
  border-bottom:1px solid var(--line-3);vertical-align:middle}
.tbl thead th,.tbl tr:first-child th{
  background:#F5F8FC;color:#4A5A70;font-size:11.5px;font-weight:700;letter-spacing:.35px;
  border-bottom:1px solid var(--line);position:sticky;top:0;z-index:2;
  text-transform:none;padding:8px 11px}
.tbl tbody tr:nth-child(even) td{background:#FBFCFE}
.tbl tbody tr:hover td,.tbl tr:hover td{background:var(--brand-ll)}
.tbl td b,.tbl td strong{font-weight:600}
.tbl .num{text-align:right;font-variant-numeric:tabular-nums}
.tbl .mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}
.tbl .ctr{text-align:center}
.tbl .op{white-space:nowrap;text-align:right}
.tbl .op button{padding:3px 8px;font-size:11.5px;margin-left:4px}
.tbl tfoot td,.tbl .sum td{background:#F5F8FC!important;font-weight:700;
  border-top:1px solid var(--line);color:var(--text)}
.tbl tr.bad td{background:var(--err-l)!important;color:#9B1C13}
.scroll{overflow:auto;max-height:66vh}
.scroll table{margin:0}
/* 表格在卡片里时去掉多余圆角 */
.card>.scroll{border-radius:0}

/* ============================================================
   9. 状态标签
   ============================================================ */
.tag{display:inline-flex;align-items:center;gap:4px;padding:1.5px 8px;border-radius:4px;
  font-size:11.5px;font-weight:600;line-height:1.6;border:1px solid transparent}
.tag::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;flex:0 0 auto}
.tag.plain::before{display:none}
.t0{background:var(--warn-l);color:#9A5B00;border-color:var(--warn-b)}
.t1{background:var(--brand-l);color:var(--brand);border-color:#C9DCF7}
.t2{background:var(--warn-l);color:#9A5B00;border-color:var(--warn-b)}
.t3{background:var(--ok-l);color:#0B6B36;border-color:var(--ok-b)}
.t9{background:var(--err-l);color:#9B1C13;border-color:var(--err-b)}
.tag.k{background:#EEF1F5;color:var(--sub);border-color:var(--line)}

/* ============================================================
   10. 扫码工作台
   ============================================================ */
.scanbox{background:linear-gradient(180deg,var(--brand-ll),#fff);
  border:1px dashed #B9CFEE;border-radius:var(--r-lg);padding:14px}
.scanbox .scanline{position:relative}
.scanbox input{font-size:15px;padding:10px 12px 10px 36px;letter-spacing:.6px;
  font-weight:600;border:1.5px solid var(--brand-2);border-radius:var(--r-lg);background:#fff}
.scanbox input::placeholder{font-weight:400;letter-spacing:0;color:var(--sub-2)}
.scanbox .scanline::before{content:"🔫";position:absolute;left:12px;top:50%;
  transform:translateY(-50%);font-size:14px;z-index:1}
.scan-hint,.scanhint{font-size:12px;color:var(--sub);margin-top:8px;display:flex;
  align-items:center;gap:8px;flex-wrap:wrap;line-height:1.6}
.ready{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ok);
  font-weight:700;background:var(--ok-l);border:1px solid var(--ok-b);
  padding:1px 8px;border-radius:20px;flex:0 0 auto}
.ready::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ok);
  animation:blink 1.6s infinite}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.35}}
#video{width:100%;border-radius:var(--r);background:#000;max-height:44vh;object-fit:cover}

/* 当前单提示 */
.bar{display:flex;align-items:center;gap:10px;padding:7px 12px;border-radius:var(--r);
  font-size:12.5px;background:var(--brand-ll);border:1px solid var(--brand-l);
  margin-top:9px;flex-wrap:wrap}
.bar b{color:var(--brand)}

/* ============================================================
   11. 结果卡片（详情）
   ============================================================ */
.res{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:#fff}
.res-hd{padding:9px 14px;background:#F7FAFD;border-bottom:1px solid var(--line-2);
  display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.res-hd .no{font-size:14.5px;font-weight:700;letter-spacing:.3px;color:var(--brand);
  display:flex;align-items:center;gap:8px;font-variant-numeric:tabular-nums}
.res-hd .side{display:flex;align-items:center;gap:9px;font-size:12.5px;color:var(--sub);flex-wrap:wrap}
.res-hd.ok{background:linear-gradient(180deg,#F2FBF6,#EAF7EF);border-bottom-color:var(--ok-b)}
.res-hd.ok .no{color:#0B6B36}
.res-hd.bad{background:linear-gradient(180deg,#FEF6F5,#FDEDEB);border-bottom-color:var(--err-b)}
.res-hd.bad .no{color:#9B1C13}
.res-bd{padding:13px 14px}
.kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(135px,1fr));gap:8px}
.kv>div{background:#F8FAFD;border:1px solid var(--line-2);border-radius:var(--r);padding:8px 10px}
.kv>div>span{display:block;font-size:11px;color:var(--sub);margin-bottom:2px}
.kv>div>b{font-size:14.5px;font-weight:700;font-variant-numeric:tabular-nums}
.kv>div>b small{font-size:11.5px;font-weight:500;color:var(--sub-2);margin-left:2px}
.kv .hi{background:var(--brand-ll);border-color:#C9DCF7}
.kv .gob{background:var(--ok-l);border-color:var(--ok-b)}
.kv .gob>b{color:#0B6B36}
.big{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}
.avail{color:var(--ok)} .zero{color:var(--err)} .part{color:var(--warn)}

/* 区块小标题 */
.subhd{font-size:12px;font-weight:700;color:var(--sub);letter-spacing:.4px;
  margin:14px 0 6px;display:flex;align-items:center;gap:7px}
.subhd::after{content:"";flex:1;height:1px;background:var(--line-2)}

/* ============================================================
   12. 出库页红绿规则条
   ============================================================ */
.rulebar{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-bottom:11px}
.rulebar>div{border-radius:var(--r);padding:9px 12px;font-size:12.5px;font-weight:700;
  line-height:1.45;border:1px solid;display:flex;gap:9px;align-items:flex-start}
.rulebar>div .ric{font-size:15px;line-height:1.2;flex:0 0 auto}
.rulebar>div span{display:block;font-size:11.5px;font-weight:400;margin-top:1px;opacity:.88}
.rule-warn{background:var(--err-l);border-color:var(--err-b);color:#9B1C13}
.rule-ok{background:var(--ok-l);border-color:var(--ok-b);color:#0B6B36}

/* ============================================================
   13. 单据 tab / 分段器
   ============================================================ */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);padding:0 14px;
  background:#FBFCFE;overflow-x:auto}
.tab{padding:9px 14px;font-size:13px;font-weight:500;color:var(--sub);cursor:pointer;
  border:none;background:none;border-bottom:2px solid transparent;border-radius:0;
  margin-bottom:-1px;white-space:nowrap}
.tab:hover{color:var(--brand-2);background:transparent;border-color:transparent;
  border-bottom-color:var(--brand-l)}
.tab.on{color:var(--brand);font-weight:700;border-bottom-color:var(--brand-2);background:transparent}
.tab.on:hover{color:var(--brand)}

/* ============================================================
   14. 其它
   ============================================================ */
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);
  background:#1B2534;color:#fff;padding:10px 18px;border-radius:var(--r-lg);
  font-size:13px;z-index:200;max-width:90vw;box-shadow:var(--shadow-lg);
  display:flex;align-items:center;gap:8px;border:1px solid rgba(255,255,255,.1)}
.toast.ok{background:#0E8A43} .toast.err{background:#C42218} .toast.warn{background:#C96E08}
.diag-row{display:flex;justify-content:space-between;gap:12px;padding:7px 0;
  border-bottom:1px dashed var(--line);font-size:12.5px}
.diag-row:last-child{border-bottom:none}
.diag-row b{font-variant-numeric:tabular-nums}
.diag-tip{font-size:12px;color:var(--sub);margin-top:9px;line-height:1.7}
.tip{font-size:12px;color:var(--sub);line-height:1.7}
pre{background:#F5F8FC;padding:10px;border-radius:var(--r);overflow:auto;font-size:11.5px;
  border:1px solid var(--line-2);margin:0}
code{background:#F0F3F8;padding:1px 5px;border-radius:3px;font-size:11.5px;
  font-family:ui-monospace,Menlo,Consolas,monospace;color:#B4341F}
.hidden{display:none!important}
.empty{padding:32px 20px;text-align:center;color:var(--sub-2);font-size:13px}
.empty .ic{font-size:30px;display:block;margin-bottom:8px;opacity:.4}
.hr-thin{height:1px;background:var(--line-2);margin:12px 0;border:none}

/* 进度/迷你条：损耗率等 */
.rate{display:inline-flex;align-items:center;gap:6px;font-variant-numeric:tabular-nums}
.rate .bar{width:44px;height:5px;border-radius:3px;background:var(--line);overflow:hidden;padding:0;border:none;margin:0}
.rate .bar i{display:block;height:100%;background:var(--ok);border-radius:3px}
.rate.warn .bar i{background:var(--warn)} .rate.err .bar i{background:var(--err)}

/* ============================================================
   15. 响应式
   ============================================================ */
@media(max-width:1280px){
  .frow.c4{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:1024px){
  .wrap{max-width:100%}
  .frow.c3,.frow.c4{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:900px){
  .sidebar{transform:translateX(-100%);transition:transform .22s ease;box-shadow:var(--shadow-lg)}
  .sidebar.open{transform:none}
  .main{margin-left:0}
  .hamburger{display:block}
  /* 侧边栏抽屉盖在最上面，遮罩只铺它右侧的内容区，避免挡住抽屉自身点击 */
  .sidebar{z-index:62}
  .mask{left:var(--sbw);z-index:61}
  .stats{grid-template-columns:repeat(2,1fr)}
  .wrap{padding:12px}
  .topbar{padding:0 12px}
  .menu{padding-top:6px}
}
@media(max-width:600px){
  .wrap{padding:10px 9px 22px}
  .card-bd,.card-pad{padding:11px}
  .card>h2{padding:9px 11px}
  .tbl{font-size:12px}
  .tbl th,.tbl td{padding:7px 8px}
  .stats{grid-template-columns:1fr 1fr;gap:8px}
  .stat{padding:9px 11px} .stat .val{font-size:18px}
  .frow,.frow.c2,.frow.c3,.frow.c4{grid-template-columns:1fr;gap:9px}
  .rulebar{grid-template-columns:1fr}
  .big{font-size:18px}
  .toolbar{padding:9px 11px}
  .toolbar input,.toolbar select{min-width:0;flex:1}
  .ph h1{font-size:15.5px}
  .config-box{grid-template-columns:1fr}
}
@media print{
  .sidebar,.topbar,.nav,.noprint,.toolbar,.form-acts,.btns{display:none!important}
  .main{margin-left:0}
  body{background:#fff}
  .wrap{max-width:100%;padding:0}
  .card{border:none;box-shadow:none;margin-bottom:8px}
  .tbl th{position:static}
  .scroll{max-height:none;overflow:visible}
}
