:root{
  --pri:#2f5bff; --pri-d:#1d44e0; --pri-l:#eef2ff;
  --bg:#f4f6fb; --card:#fff; --line:#e6eaf3; --line-2:#eef1f8;
  --tx:#1a2130; --tx-2:#5a6478; --tx-3:#98a2b8;
  --green:#0e9f5d; --green-l:#e6f7ef;
  --amber:#d97706; --amber-l:#fdf3e3;
  --red:#dc2626; --red-l:#fdeeee;
  --purple:#7c3aed; --purple-l:#f3eeff;
  --blue:#2563eb; --blue-l:#e8f0fe;
  --slate:#64748b; --slate-l:#f1f4f9;
  --r:14px; --r-s:8px;
  --sh:0 1px 2px rgba(16,24,40,.05),0 4px 16px rgba(16,24,40,.055);
  --sh-h:0 2px 6px rgba(16,24,40,.05),0 14px 36px rgba(16,24,40,.10);
}
*{box-sizing:border-box}
/* 必须显式声明：.modal-wrap/.drawer-mask 带 display:flex，
   会盖掉 UA 样式表里 [hidden]{display:none}，导致隐藏的遮罩仍然盖住整页、什么都点不动 */
[hidden]{display:none !important}
html,body{margin:0;padding:0}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  font-size:13px;color:var(--tx);line-height:1.6;
  background:radial-gradient(1100px 480px at 78% -180px,rgba(77,107,255,.065),transparent 70%),
             radial-gradient(900px 460px at -8% 26%,rgba(124,58,237,.045),transparent 62%),
             var(--bg);
  background-attachment:fixed;
  -webkit-font-smoothing:antialiased;
}
.boot{padding:80px;text-align:center;color:var(--tx-3)}
a{color:var(--pri);text-decoration:none}
button{font-family:inherit}
::selection{background:rgba(47,91,255,.16)}
/* 细滚动条 */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#c9d1e2;border-radius:8px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:#b2bdd4;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}

/* ---------- 登录页：深夜靛蓝 · 玻璃拟态 ---------- */
.login{
  min-height:100vh;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;
  background:radial-gradient(1200px 620px at 6% -12%,rgba(64,86,255,.42),transparent 58%),
             radial-gradient(1000px 560px at 108% 114%,rgba(124,58,237,.34),transparent 55%),
             radial-gradient(760px 460px at 50% 128%,rgba(14,165,233,.22),transparent 58%),
             radial-gradient(560px 320px at 88% 6%,rgba(56,189,248,.14),transparent 62%),
             linear-gradient(162deg,#0a0f2c 0%,#0d1436 48%,#121c48 100%);
}
/* 细网格纹理：缓慢漂移，营造深度 */
.login::before{content:"";position:absolute;inset:0;pointer-events:none;
  background-image:linear-gradient(rgba(148,163,255,.055) 1px,transparent 1px),
                   linear-gradient(90deg,rgba(148,163,255,.055) 1px,transparent 1px);
  background-size:46px 46px;
  -webkit-mask-image:radial-gradient(980px 760px at 50% 42%,rgba(0,0,0,.9),transparent 78%);
  mask-image:radial-gradient(980px 760px at 50% 42%,rgba(0,0,0,.9),transparent 78%);
  animation:gridmove 60s linear infinite}
@keyframes gridmove{from{background-position:0 0,0 0}to{background-position:46px 46px,46px 46px}}
/* 底部标语 */
.login::after{content:"小适供应链 · 内部系统";position:absolute;bottom:26px;left:0;right:0;
  text-align:center;font-size:11px;letter-spacing:2px;color:rgba(190,200,255,.30);pointer-events:none}
.login-box{
  width:400px;position:relative;z-index:1;
  background:linear-gradient(168deg,rgba(33,43,88,.72),rgba(15,22,52,.68));
  -webkit-backdrop-filter:blur(22px) saturate(1.35);backdrop-filter:blur(22px) saturate(1.35);
  border:1px solid rgba(163,177,255,.17);border-radius:20px;
  padding:38px 36px 30px;
  box-shadow:0 30px 80px rgba(3,7,24,.55),0 4px 18px rgba(3,7,24,.35),inset 0 1px 0 rgba(255,255,255,.09);
  animation:logincard .5s cubic-bezier(.2,.7,.3,1)}
@keyframes logincard{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
/* 品牌徽章（app.js renderLogin 渲染） */
.logo-mark{width:54px;height:54px;border-radius:16px;margin:0 auto 16px;
  display:flex;align-items:center;justify-content:center;
  font-size:25px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,#4d6bff,#7c3aed);
  box-shadow:0 10px 26px rgba(77,107,255,.45),inset 0 1px 0 rgba(255,255,255,.35)}
.login-box h1{margin:0 0 5px;font-size:19px;font-weight:700;letter-spacing:.4px;color:#fff;text-align:center}
.login-box .sub{color:rgba(196,206,255,.55);font-size:12px;margin-bottom:26px;text-align:center;letter-spacing:.3px}
.login-box .fld{margin-bottom:15px}
.login-box label.f{color:rgba(196,206,255,.62)}
.login-box input[type=text],.login-box input[type=password]{
  background:rgba(255,255,255,.07);border:1px solid rgba(163,177,255,.20);color:#fff;height:37px;border-radius:9px}
.login-box input[type=text]:hover,.login-box input[type=password]:hover{border-color:rgba(163,177,255,.38)}
.login-box input[type=text]:focus,.login-box input[type=password]:focus{
  border-color:#6d87ff;background:rgba(255,255,255,.095);
  box-shadow:0 0 0 3px rgba(77,107,255,.22)}
.login-box input::placeholder{color:rgba(196,206,255,.35)}
.login-err{background:rgba(220,38,38,.16);color:#fca5a5;padding:9px 12px;border-radius:var(--r-s);
  font-size:12px;margin-bottom:14px;border:1px solid rgba(248,113,113,.30)}
.hint-acc{margin-top:20px;font-size:11px;color:rgba(196,206,255,.42);line-height:1.9;
  border-top:1px dashed rgba(163,177,255,.20);padding-top:14px}
@media(prefers-reduced-motion:reduce){
  .login::before,.login-box{animation:none}
  *{transition-duration:.01ms!important;animation-duration:.01ms!important}
}

/* ---------- 主框架 ---------- */
.shell{display:flex;min-height:100vh}
.side{width:206px;flex-shrink:0;position:sticky;top:0;height:100vh;
  display:flex;flex-direction:column;
  background:radial-gradient(420px 240px at 0% 0%,rgba(77,107,255,.17),transparent 72%),
             linear-gradient(180deg,#0e1526 0%,#0d1428 52%,#0f1a3a 100%);
  box-shadow:inset -1px 0 0 rgba(255,255,255,.05)}
.brand{padding:18px 16px 15px;border-bottom:1px solid rgba(255,255,255,.07);
  display:grid;grid-template-columns:34px 1fr;gap:4px 11px;align-items:center}
/* 侧栏品牌徽章（纯 CSS，占网格第一格） */
.brand::before{content:"适";width:34px;height:34px;border-radius:10px;grid-column:1;grid-row:1;
  display:flex;align-items:center;justify-content:center;
  font-size:16px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,#4d6bff,#7c3aed);
  box-shadow:0 5px 14px rgba(77,107,255,.4),inset 0 1px 0 rgba(255,255,255,.32)}
.brand .bn{font-size:13.5px;font-weight:700;letter-spacing:.3px;color:#fff;grid-column:2}
.brand .bd{font-size:10px;color:rgba(255,255,255,.40);margin-top:1px;letter-spacing:.2px;grid-column:2}
.nav{padding:12px 10px;flex:1;overflow-y:auto}
.nav-sec{padding:14px 10px 6px;font-size:10px;color:rgba(255,255,255,.32);letter-spacing:1.6px}
.nav a{display:flex;align-items:center;gap:9px;padding:8.5px 12px;border-radius:9px;
  color:rgba(255,255,255,.66);font-size:13px;margin-bottom:2px;cursor:pointer;position:relative;
  transition:background .16s,color .16s}
/* 左缘光条：激活时点亮 */
.nav a::before{content:"";position:absolute;left:0;top:26%;bottom:26%;width:3px;border-radius:3px;
  background:linear-gradient(180deg,#7d95ff,#4d6bff);opacity:0;transition:opacity .16s}
.nav a:hover{background:rgba(255,255,255,.075);color:#fff}
.nav a.on{background:linear-gradient(90deg,rgba(64,92,255,.92),rgba(64,92,255,.55));
  color:#fff;font-weight:500;box-shadow:0 4px 16px rgba(64,92,255,.34)}
.nav a.on::before{opacity:1}
.nav a .ic{width:16px;text-align:center;font-size:13px;opacity:.9}
.nav a .badge{margin-left:auto;background:#f43f5e;color:#fff;font-size:10px;
  padding:1px 6px;border-radius:9px;font-weight:600;animation:pulse 2.2s ease-in-out infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(244,63,94,.45)}50%{box-shadow:0 0 0 5px rgba(244,63,94,0)}}
.side-foot{padding:14px 16px;border-top:1px solid rgba(255,255,255,.07);font-size:12px}
.me-row{display:flex;align-items:center;gap:9px}
.avatar{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;color:#fff;font-size:11.5px;font-weight:600;flex-shrink:0;
  box-shadow:0 0 0 2px rgba(255,255,255,.14)}
.me-name{font-size:12px;font-weight:600;color:#fff}
.me-role{font-size:10px;color:rgba(255,255,255,.4)}
.side-foot .out{color:rgba(255,255,255,.4);cursor:pointer;font-size:11px;margin-top:9px;display:inline-block;transition:color .15s}
.side-foot .out:hover{color:#f87171}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.top{height:56px;background:rgba(255,255,255,.74);-webkit-backdrop-filter:blur(14px) saturate(1.2);
  backdrop-filter:blur(14px) saturate(1.2);
  border-bottom:1px solid rgba(230,234,243,.95);
  display:flex;align-items:center;gap:12px;padding:0 24px;position:sticky;top:0;z-index:20}
.top h2{margin:0;font-size:16px;font-weight:700;letter-spacing:.2px;flex-shrink:0}
.top .sp{flex:1}
.searchbox{display:flex;align-items:center;gap:6px;border:1px solid var(--line);
  border-radius:20px;padding:0 12px;height:34px;background:rgba(255,255,255,.9);width:330px;transition:.15s}
.searchbox:focus-within{border-color:var(--pri);box-shadow:0 0 0 3px rgba(47,91,255,.13);background:#fff}
.searchbox input{border:0;outline:0;background:transparent;flex:1;font-size:12px;font-family:inherit}
.searchbox .fld-sel{border:0;background:transparent;font-size:12px;color:var(--tx-2);outline:0;
  font-family:inherit;cursor:pointer}
.content{padding:22px 26px 64px;flex:1}

/* ---------- 通用组件 ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;
  height:32px;padding:0 14px;border-radius:var(--r-s);border:1px solid var(--line);
  background:#fff;color:var(--tx);font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap;
  transition:all .16s;box-shadow:0 1px 2px rgba(16,24,40,.05)}
.btn:hover{border-color:#c2cce2;background:#f8faff;transform:translateY(-1px);box-shadow:0 4px 10px rgba(16,24,40,.08)}
.btn:active{transform:translateY(0)}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}
.btn-pri{background:linear-gradient(135deg,#4468ff,#2549e8);border-color:transparent;color:#fff;
  box-shadow:0 2px 7px rgba(47,91,255,.34),inset 0 1px 0 rgba(255,255,255,.20)}
.btn-pri:hover{background:linear-gradient(135deg,#2f5bff,#1d3fd6);border-color:transparent;
  box-shadow:0 5px 14px rgba(47,91,255,.42),inset 0 1px 0 rgba(255,255,255,.20)}
.btn-dan{color:var(--red);border-color:#f3c9c9;background:#fff}
.btn-dan:hover{background:var(--red-l);border-color:#eeb4b4;box-shadow:0 3px 8px rgba(220,38,38,.1)}
.btn-sm{height:27px;padding:0 10px;font-size:11px}
.btn-xs{height:23px;padding:0 8px;font-size:11px;border-radius:6px}

.card{background:var(--card);border:1px solid #e9edf5;border-radius:var(--r);
  box-shadow:var(--sh);margin-bottom:18px;overflow:hidden;transition:box-shadow .22s,transform .22s}
.card:hover{box-shadow:var(--sh-h)}
.card-h{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line-2)}
.card-h h3{margin:0;font-size:13.5px;font-weight:650;position:relative;padding-left:12px}
.card-h h3::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:3.5px;height:15px;border-radius:3px;background:linear-gradient(180deg,#4d6bff,#7c3aed);
  box-shadow:0 1px 4px rgba(77,107,255,.4)}
.card-h .sp{flex:1}
.card-h .desc{font-size:11px;color:var(--tx-3);font-weight:400}
.card-b{padding:18px}
.card-b.p0{padding:0}

.grid{display:grid;gap:16px}
.g4{grid-template-columns:repeat(4,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g2{grid-template-columns:repeat(2,1fr)}
@media(max-width:1180px){.g4{grid-template-columns:repeat(2,1fr)}}

.kpi{background:#fff;border:1px solid #e9edf5;border-radius:var(--r);padding:17px 18px;
  box-shadow:var(--sh);cursor:default;position:relative;overflow:hidden;transition:.2s}
.kpi::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;
  background:linear-gradient(180deg,#4d6bff,#7c3aed);opacity:.9}
/* 右上装饰光晕 */
.kpi::before{content:"";position:absolute;right:-34px;top:-34px;width:120px;height:120px;border-radius:50%;
  background:radial-gradient(circle,rgba(77,107,255,.11),transparent 68%);pointer-events:none}
.kpi .kl{font-size:11px;color:var(--tx-3);margin-bottom:6px;font-weight:500;letter-spacing:.3px}
.kpi .kv{font-size:26px;font-weight:750;letter-spacing:-.4px;line-height:1.2;
  font-variant-numeric:tabular-nums;color:var(--tx)}
.kpi .ks{font-size:11px;color:var(--tx-3);margin-top:4px}
.kpi.warn{background:linear-gradient(135deg,#fffbf2,#fff);border-color:#f3e3c3}
.kpi.warn .kv{color:var(--amber)}
.kpi.warn::after{background:linear-gradient(180deg,#f59e0b,#f97316)}
.kpi.warn::before{background:radial-gradient(circle,rgba(245,158,11,.15),transparent 68%)}
.kpi.dang{background:linear-gradient(135deg,#fff7f7,#fff);border-color:#f5d3d3}
.kpi.dang .kv{color:var(--red)}
.kpi.dang::after{background:linear-gradient(180deg,#ef4444,#f43f5e)}
.kpi.dang::before{background:radial-gradient(circle,rgba(239,68,68,.13),transparent 68%)}
.kpi.good .kv{color:var(--green)}
.kpi.good::after{background:linear-gradient(180deg,#10b981,#0e9f5d)}
.kpi.good::before{background:radial-gradient(circle,rgba(16,185,129,.12),transparent 68%)}
.kpi.click{cursor:pointer}
.kpi.click:hover{border-color:#c2cce2;transform:translateY(-2px);box-shadow:var(--sh-h)}

table{width:100%;border-collapse:collapse;font-size:12px}
th{text-align:left;font-weight:600;color:var(--tx-2);background:#f7f9fd;
  padding:10px 13px;border-bottom:1px solid var(--line);white-space:nowrap;font-size:11px;
  letter-spacing:.4px}
td{padding:10px 13px;border-bottom:1px solid var(--line-2);vertical-align:middle}
tbody tr{transition:background .13s}
tbody tr:hover{background:#f7f9ff}
tbody tr.clickable{cursor:pointer}
tbody tr.clickable:hover{background:#eef3ff}
tbody tr.sel{background:var(--pri-l)}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px}
.nowrap{white-space:nowrap}
.tright{text-align:right}
.tw{color:var(--tx-3)}

.tag{display:inline-block;padding:1.5px 9px;border-radius:20px;font-size:11px;
  white-space:nowrap;font-weight:500;line-height:17px;border:1px solid transparent}
.t-amber{background:var(--amber-l);color:#a35a05;border-color:#f3e3c3}
.t-blue{background:var(--blue-l);color:#1d4fd8;border-color:#cfdefb}
.t-green{background:var(--green-l);color:#0a7a46;border-color:#c8e6d4}
.t-red{background:var(--red-l);color:#b91c1c;border-color:#f5d3d3}
.t-purple{background:var(--purple-l);color:#6d28d9;border-color:#e2d5fb}
.t-slate{background:var(--slate-l);color:var(--slate);border-color:#e2e8f0}
.tag-line{border:1px solid currentColor;background:transparent;opacity:.92}

input[type=text],input[type=password],input[type=number],input[type=date],select,textarea{
  width:100%;height:32px;padding:0 11px;border:1px solid var(--line);border-radius:var(--r-s);
  font-size:12px;font-family:inherit;color:var(--tx);outline:0;background:#fff;transition:border-color .15s,box-shadow .15s}
textarea{height:auto;padding:9px 11px;line-height:1.65;resize:vertical}
input:hover,select:hover,textarea:hover{border-color:#c2cce2}
input:focus,select:focus,textarea:focus{border-color:var(--pri);box-shadow:0 0 0 3px rgba(47,91,255,.13)}
input::placeholder,textarea::placeholder{color:#b3bdcd}
label.f{display:block;font-size:11px;color:var(--tx-2);margin-bottom:5px;font-weight:500}
label.f .sub{font-weight:400;opacity:.75}
.fld{margin-bottom:13px}
.row{display:flex;gap:10px}
.row>*{flex:1}
.row3{display:flex;gap:10px}
.row3>*{flex:1}

.bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.bar .sp{flex:1}
.chip{display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:15px;
  border:1px solid var(--line);background:#fff;font-size:12px;color:var(--tx-2);cursor:pointer;
  transition:all .15s;user-select:none}
.chip:hover{border-color:#c2cce2;color:var(--tx);background:#f8faff}
.chip.on{background:linear-gradient(135deg,#4468ff,#2549e8);border-color:transparent;color:#fff;
  font-weight:500;box-shadow:0 2px 9px rgba(47,91,255,.32),inset 0 1px 0 rgba(255,255,255,.18)}

.empty{padding:56px 20px;text-align:center;color:var(--tx-3);font-size:12px}

.note{background:#f8f9fd;border:1px solid var(--line-2);border-radius:var(--r-s);
  padding:10px 13px;font-size:11.5px;color:var(--tx-2);line-height:1.7}
.note.warn{background:var(--amber-l);border-color:#f3e3c3;color:#8a5a08}
.note.dang{background:var(--red-l);border-color:#f5d3d3;color:#9b1c1c}
.note.ok{background:var(--green-l);border-color:#c8e6d4;color:#0a6b3c}
.note.info{background:var(--blue-l);border-color:#cfdefb;color:#1a4bbd}

/* ---------- 抽屉 ---------- */
.drawer-mask{position:fixed;inset:0;background:rgba(10,16,38,.44);-webkit-backdrop-filter:blur(3px);
  backdrop-filter:blur(3px);z-index:60;
  display:flex;justify-content:flex-end;animation:fadein .18s ease}
.drawer{width:660px;max-width:94vw;background:#fff;height:100%;overflow-y:auto;
  box-shadow:-10px 0 48px rgba(8,14,36,.22);display:flex;flex-direction:column;
  animation:slidein .24s cubic-bezier(.2,.7,.3,1)}
@keyframes slidein{from{transform:translateX(40px);opacity:.6}to{transform:none;opacity:1}}
@keyframes fadein{from{opacity:0}to{opacity:1}}
.drawer-h{padding:17px 22px;border-bottom:1px solid var(--line);display:flex;
  align-items:flex-start;gap:10px;position:sticky;top:0;background:rgba(255,255,255,.94);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:2}
.drawer-h .t1{font-size:15px;font-weight:700;font-family:ui-monospace,Menlo,monospace;letter-spacing:.3px}
.drawer-h .t2{font-size:11.5px;color:var(--tx-3);margin-top:2px}
.drawer-h .sp{flex:1}
.drawer-b{padding:20px 22px;flex:1}
.drawer-f{padding:14px 22px;border-top:1px solid var(--line);display:flex;gap:8px;
  position:sticky;bottom:0;background:rgba(255,255,255,.94);-webkit-backdrop-filter:blur(8px);
  backdrop-filter:blur(8px);flex-wrap:wrap}

.sec{margin-bottom:20px}
.sec-t{font-size:11px;color:var(--tx-3);letter-spacing:.6px;margin-bottom:10px;
  padding-bottom:7px;border-bottom:1px solid var(--line-2);font-weight:600}
.kv{display:grid;grid-template-columns:96px 1fr;gap:6px 12px;font-size:12px}
.kv dt{color:var(--tx-3);font-size:11.5px}
.kv dd{margin:0;word-break:break-word}

/* 流程条 */
.flow{display:flex;align-items:center;gap:0;flex-wrap:wrap}
.flow .st{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--tx-3)}
.flow .dot{width:17px;height:17px;border-radius:50%;border:1.5px solid var(--line);
  display:flex;align-items:center;justify-content:center;font-size:9px;background:#fff;
  color:var(--tx-3);flex-shrink:0;transition:.2s}
.flow .st.done{color:var(--green);font-weight:500}
.flow .st.done .dot{background:linear-gradient(135deg,#10b981,#0e9f5d);border-color:transparent;
  color:#fff;box-shadow:0 2px 7px rgba(14,159,93,.38)}
.flow .ln{width:22px;height:2px;background:var(--line);margin:0 7px;flex-shrink:0;border-radius:2px}
.flow .st.done+.ln,.flow .ln.done{background:linear-gradient(90deg,#10b981,#a7d9c4)}

/* 消息预览 */
.msgbox{background:#f8f9fd;border:1px solid var(--line-2);border-radius:var(--r-s);
  padding:13px 15px;font-size:12px;white-space:pre-wrap;line-height:1.75;
  font-family:inherit;max-height:280px;overflow-y:auto}

/* 批量解析表 */
.paste-area{min-height:200px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;
  background:#fbfcfe}
.prow td{padding:7px 10px;font-size:11.5px}
.prow input{height:26px;font-size:11.5px;padding:0 7px}
.prow.warn input{border-color:#f0c9c9;background:#fffafa}
.dupbox{background:var(--amber-l);color:#8a5a08;padding:2px 7px;border-radius:5px;
  font-size:10.5px;display:inline-block;border:1px solid #f3e3c3}

/* ---------- 弹窗 ---------- */
.modal-wrap{position:fixed;inset:0;background:rgba(10,16,38,.44);-webkit-backdrop-filter:blur(3px);
  backdrop-filter:blur(3px);z-index:80;
  display:flex;align-items:center;justify-content:center;padding:24px;animation:fadein .18s ease}
.modal{background:#fff;border-radius:18px;width:520px;max-width:100%;max-height:88vh;
  overflow-y:auto;box-shadow:0 24px 70px rgba(8,14,36,.26),0 4px 16px rgba(8,14,36,.10);
  animation:pop .2s cubic-bezier(.2,.7,.3,1)}
@keyframes pop{from{transform:scale(.96) translateY(8px);opacity:.5}to{transform:none;opacity:1}}
.modal-h{padding:16px 22px;border-bottom:1px solid var(--line);font-size:14px;font-weight:600}
.modal-b{padding:20px 22px}
.modal-f{padding:14px 22px;border-top:1px solid var(--line);display:flex;
  justify-content:flex-end;gap:8px;background:#fbfcfe;border-radius:0 0 18px 18px}

/* ---------- Toast ---------- */
.toast-wrap{position:fixed;top:18px;left:50%;transform:translateX(-50%);z-index:200;
  display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{background:rgba(22,29,52,.92);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  color:#fff;padding:10px 20px;border-radius:22px;font-size:12px;
  box-shadow:0 10px 34px rgba(8,14,36,.34);animation:tin .22s ease;border:1px solid rgba(163,177,255,.14)}
.toast.err{background:linear-gradient(135deg,rgba(239,68,68,.94),rgba(220,38,38,.94))}
.toast.ok{background:linear-gradient(135deg,rgba(16,185,129,.94),rgba(14,159,93,.94))}
@keyframes tin{from{opacity:0;transform:translateY(-10px) scale(.96)}to{opacity:1;transform:none}}

/* ---------- 图表 ---------- */
.chart{display:flex;align-items:flex-end;gap:14px;height:170px;padding:8px 4px 0}
.chart .col{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;
  justify-content:flex-end;height:100%}
.chart .stack{width:100%;max-width:46px;display:flex;flex-direction:column;
  justify-content:flex-end;height:100%}
.chart .b1{background:linear-gradient(180deg,#5d82ff,#2563eb);border-radius:4px 4px 0 0;transition:.3s}
.chart .col:hover .b1{background:linear-gradient(180deg,#7494ff,#3d66ff)}
.chart .b2{background:linear-gradient(180deg,#f6a94a,#d97706);border-radius:0 0 4px 4px;transition:.3s}
.chart .col:hover .b2{background:linear-gradient(180deg,#fbbf24,#f59e0b)}
.chart .cl{font-size:10.5px;color:var(--tx-3);white-space:nowrap}
.chart .cv{font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}
.legend{display:flex;gap:16px;font-size:11px;color:var(--tx-2);padding:10px 4px 0}
.legend i{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:5px}
.bars{display:flex;flex-direction:column;gap:9px}
.brow{display:grid;grid-template-columns:110px 1fr 46px;gap:10px;align-items:center;font-size:11.5px}
.btrack{height:8px;background:#eef1f8;border-radius:5px;overflow:hidden}
.bfill{height:100%;background:linear-gradient(90deg,#4d6bff,#7c3aed);border-radius:5px;transition:width .4s ease}

/* ---- 近 7 日登记迷你趋势 ---- */
.mini7{display:flex;align-items:flex-end;gap:6px;padding:2px 4px 0}
.mini7 .m7col{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;
  padding:6px 2px 8px;border-radius:8px;transition:background .15s}
.mini7 .m7col:hover{background:#f2f5ff}
.mini7 .m7col.today{background:linear-gradient(180deg,#f0f4ff,#eaf0ff)}
.mini7 .m7stack{display:flex;flex-direction:column;justify-content:flex-end;
  height:52px;width:26px;border-radius:5px;background:#f2f4fb;overflow:hidden}
.mini7 .m7b{display:block;width:100%}
.mini7 .m7d{background:linear-gradient(180deg,#60a5fa,#2563eb)}
.mini7 .m7i{background:linear-gradient(180deg,#fbbf24,#d97706)}
.mini7 .m7z{height:3px;background:var(--line)}
.mini7 .m7v{font-size:10.5px;font-weight:600;color:var(--tx-2);font-variant-numeric:tabular-nums;min-height:14px}
.mini7 .m7l{font-size:10px;color:var(--tx-3)}
.mini7 .m7col.today .m7l{color:#3d66ff;font-weight:600}

/* ---- 分页条 ---- */
.pager{display:flex;align-items:center;gap:5px;padding:12px 14px;flex-wrap:wrap;
  border-top:1px solid var(--line-2)}
.pg-btn{min-width:30px;height:28px;padding:0 9px;border:1px solid var(--line);border-radius:7px;
  background:#fff;font-size:11.5px;color:var(--tx-2);cursor:pointer;transition:.15s}
.pg-btn:hover:not(:disabled){border-color:#3d66ff;color:#3d66ff;background:#f4f7ff}
.pg-btn.on{background:linear-gradient(135deg,#4468ff,#5b5bd6);color:#fff;border-color:transparent;font-weight:600;
  box-shadow:0 2px 7px rgba(68,104,255,.32)}
.pg-btn:disabled{opacity:.4;cursor:default}
.pg-info{margin-left:auto;font-size:11px;color:var(--tx-3)}

/* ---- 合计行 ---- */
tr.sum-row td{background:#f7f9fd;border-top:2px solid var(--line);
  border-bottom:none;font-weight:500;color:var(--tx-1)}

/* ---- 空态 ---- */
.empty{padding:40px 20px;text-align:center;color:var(--tx-3);font-size:12.5px;line-height:1.7}
.empty .big{font-size:34px;margin-bottom:8px;opacity:.32;line-height:1}

/* ---- 手机适配：客服手机登记场景 ---- */
@media(max-width:860px){
  .side{width:58px;padding:14px 7px}
  .side .brand{grid-template-columns:1fr;justify-items:center;gap:6px;padding:12px 4px 10px}
  .side .brand::before{width:30px;height:30px;font-size:14px;border-radius:9px}
  .side .bn{font-size:12px;writing-mode:vertical-rl;letter-spacing:3px;grid-column:1}
  .side .bd,.side .nav-sec,.side .me-name,.side .me-role,.side .out{display:none}
  .nav a{justify-content:center;padding:12px 0}
  .nav a::before{display:none}
  .nav a .badge{position:absolute;top:5px;right:8px}
  .nav a{position:relative}
  .side-foot{align-items:center}
  .me-row{justify-content:center}
  .main{padding:0}
  .top{padding:12px 14px}
  .content{padding:14px 10px}
  .searchbox{max-width:150px}
  .searchbox input{min-width:0}
  .bar{flex-wrap:wrap;row-gap:8px}
  .row3{flex-direction:column;gap:12px}
  td,th{padding:8px 9px;font-size:11.5px}
  .brow{grid-template-columns:86px 1fr 42px}
  .modal{width:94vw!important}
  .drawer{width:96vw!important}
  .login-box{width:92vw;max-width:400px;padding:30px 22px 24px}
}

.step-hint{font-size:11px;color:var(--tx-3);margin-top:8px;line-height:1.7}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
