:root{
  --bg:#F1F4F9;
  --panel:#FFFFFF;
  --ink:#0E1A2B;
  --ink2:#46586E;
  --ink3:#8595A9;
  --ink4:#AAB7C7;
  --line:#E4EBF3;
  --line2:#EEF3F9;
  --brand:#16304C;
  --brand2:#0C1E32;
  --accent:#2A5F9E;
  --accent2:#17395C;
  --accent-soft:#EBF2FA;
  --ok:#1F8A5F;
  --ok-soft:#E7F5EE;
  --warn:#A97516;
  --warn-soft:#FAF1DE;
  --danger:#B8382F;
  --danger-soft:#FBE9E7;
  --r:10px;
  --sh-sm:0 1px 2px rgba(15,30,55,.05);
  --sh:0 1px 2px rgba(15,30,55,.035), 0 6px 18px -14px rgba(15,30,55,.2);
  --sh-lg:0 2px 6px rgba(15,30,55,.05), 0 26px 54px -28px rgba(12,26,45,.34);
}
*{box-sizing:border-box;}
html,body{height:100%;}
body{
  margin:0;color:var(--ink);
  background:var(--bg);
  background-image:radial-gradient(1200px 520px at 78% -10%, #EAF1FA 0%, rgba(234,241,250,0) 62%);
  background-repeat:no-repeat;
  font-family:"Inter","Helvetica Neue","PingFang SC","Microsoft YaHei",system-ui,-apple-system,sans-serif;
  font-size:13.5px;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;
}
a{cursor:pointer;text-decoration:none;}
::-webkit-scrollbar{width:8px;height:8px;}
::-webkit-scrollbar-thumb{background:#CFDBE9;border-radius:6px;border:2px solid transparent;background-clip:content-box;}
::-webkit-scrollbar-thumb:hover{background:#B9C9DC;border:2px solid transparent;background-clip:content-box;}
::-webkit-scrollbar-track{background:transparent;}

.app{display:flex;min-height:100vh;}

/* ================= side ================= */
.side{
  width:224px;flex:none;
  background:linear-gradient(180deg,#FDFEFF 0%,#F7FAFE 100%);
  border-right:1px solid var(--line);
  display:flex;flex-direction:column;position:sticky;top:0;height:100vh;
}
.logo{
  display:flex;align-items:center;gap:11px;padding:19px 18px 18px;margin-bottom:2px;
  position:relative;
}
.logo::after{
  content:'';position:absolute;left:18px;right:18px;bottom:0;height:1px;
  background:linear-gradient(90deg,var(--line),rgba(228,235,243,.25));
}
.mark{
  width:34px;height:34px;border-radius:9px;flex:none;color:#fff;
  background:linear-gradient(155deg,#2A5F9E 0%,#17395C 52%,#0E2136 100%);
  box-shadow:0 1px 2px rgba(12,30,50,.28), 0 6px 14px -8px rgba(12,30,50,.5), inset 0 1px 0 rgba(255,255,255,.18);
  display:flex;align-items:center;justify-content:center;
  font-size:15px;font-weight:600;letter-spacing:.5px;
}
.logo-t b{display:block;font-size:14px;font-weight:650;letter-spacing:.2px;color:var(--ink);line-height:1.35;}
.logo-t span{display:block;font-size:10.5px;color:var(--ink4);letter-spacing:1.1px;margin-top:1px;}

.nav{flex:1;overflow-y:auto;padding:10px 12px 14px;}
.nav-g{margin-bottom:6px;}
.nav-g + .nav-g{padding-top:4px;}
.nav-l{
  font-size:10px;color:#A3B1C2;letter-spacing:1.6px;padding:12px 10px 6px;
  display:flex;align-items:center;gap:7px;font-weight:600;
}
.nav-l::after{content:'';flex:1;height:1px;background:linear-gradient(90deg,var(--line2),rgba(238,243,249,0));}
.nav-i{
  display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;
  font-size:13px;color:var(--ink2);transition:background .16s ease, color .16s ease, box-shadow .16s ease;
  margin-bottom:2px;position:relative;
}
.nav-i i{
  font-style:normal;width:17px;height:17px;flex:none;display:flex;align-items:center;justify-content:center;
  color:#93A5BA;transition:color .16s ease;
}
.nav-i i svg{width:16px;height:16px;display:block;}
.nav-i:hover{background:#F0F5FB;color:var(--ink);}
.nav-i:hover i{color:var(--ink2);}
.nav-i.on{
  background:linear-gradient(90deg,#EAF2FB 0%,#F4F8FD 100%);
  color:var(--accent2);font-weight:600;
  box-shadow:inset 2.5px 0 0 var(--accent);
}
.nav-i.on i{color:var(--accent);}
.nav-b{
  margin-left:auto;min-width:17px;height:17px;padding:0 5px;border-radius:9px;
  background:var(--danger);color:#fff;font-size:10px;font-weight:600;line-height:17px;
  text-align:center;letter-spacing:0;box-shadow:0 1px 3px rgba(184,56,47,.24);
}
.nav-i.on .nav-b{background:var(--accent);box-shadow:0 1px 3px rgba(42,95,158,.28);}

.side-foot{padding:12px 14px 14px;border-top:1px solid var(--line);background:rgba(252,253,255,.6);}
.shop{
  display:flex;align-items:center;justify-content:space-between;gap:6px;
  background:#F4F8FC;border-radius:8px;padding:6px 8px;margin-bottom:10px;
}
.shop span{font-size:10.5px;color:var(--ink3);letter-spacing:.4px;white-space:nowrap;}
.shop select{
  flex:1;max-width:112px;border:0;border-radius:6px;padding:3px 4px;
  font:inherit;font-size:11.5px;font-weight:500;color:var(--accent2);background:transparent;
  outline:none;cursor:pointer;
}
.me{display:flex;align-items:center;gap:9px;padding:0 2px;}
.av{
  width:30px;height:30px;border-radius:8px;flex:none;
  background:linear-gradient(160deg,#E6EEF8,#D6E3F1);color:var(--accent2);
  display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:600;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.7);
}
.me b{display:block;font-size:12.5px;font-weight:600;line-height:1.4;}
.me span{display:block;font-size:10.5px;color:var(--ink4);}
.ver{font-size:9.5px;color:#C0CBDA;letter-spacing:.8px;margin-top:11px;padding-left:2px;}

/* ================= main ================= */
.main{flex:1;min-width:0;display:flex;flex-direction:column;}
.top{
  display:flex;align-items:center;justify-content:space-between;gap:24px;
  padding:17px 30px 15px;
  position:sticky;top:0;z-index:20;
  background:rgba(241,244,249,.82);
  backdrop-filter:blur(12px) saturate(1.2);
  -webkit-backdrop-filter:blur(12px) saturate(1.2);
  border-bottom:1px solid rgba(224,233,243,.9);
}
.top-l h1{
  font-size:18px;margin:0;letter-spacing:-.15px;font-weight:650;position:relative;padding-left:12px;line-height:1.4;
}
.top-l h1::before{
  content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:3px;height:15px;border-radius:2px;
  background:linear-gradient(180deg,#2A5F9E,#17395C);
}
.top-l p{margin:2px 0 0;font-size:12px;color:var(--ink3);padding-left:12px;letter-spacing:.2px;}
.top-r{display:flex;align-items:center;gap:9px;}
.search{
  display:flex;align-items:center;gap:8px;background:#fff;border-radius:8px;padding:7px 11px;
  box-shadow:inset 0 0 0 1px var(--line), var(--sh-sm);
  transition:box-shadow .16s ease;
}
.search:focus-within{box-shadow:inset 0 0 0 1px #BFD3E8, 0 0 0 3px rgba(42,95,158,.08);}
.search svg{width:14px;height:14px;color:var(--ink4);flex:none;}
.search input{border:0;outline:none;font:inherit;font-size:12.5px;width:180px;color:var(--ink);background:transparent;}
.search input::placeholder{color:#AEBBCB;}
.search kbd{font-family:inherit;font-size:10px;color:#AEBBCB;border:1px solid var(--line);border-radius:4px;padding:0 4px;}
.icon-btn{
  width:33px;height:33px;border-radius:8px;border:0;background:#fff;
  box-shadow:inset 0 0 0 1px var(--line), var(--sh-sm);
  color:var(--ink3);cursor:pointer;display:flex;align-items:center;justify-content:center;
  transition:color .16s ease, box-shadow .16s ease;
}
.icon-btn svg{width:15px;height:15px;}
.icon-btn:hover{color:var(--accent);box-shadow:inset 0 0 0 1px #CFDDEB, var(--sh-sm);}
.today{
  font-size:11.5px;color:var(--ink2);background:#fff;border-radius:8px;padding:7px 12px;
  box-shadow:inset 0 0 0 1px var(--line), var(--sh-sm);white-space:nowrap;letter-spacing:.2px;
}
/* 服务连接状态 */
.conn{
  display:inline-flex;align-items:center;gap:6px;background:#fff;border-radius:8px;
  padding:6px 11px;font-size:11px;color:var(--ink3);letter-spacing:.2px;
  box-shadow:inset 0 0 0 1px var(--line), var(--sh-sm);white-space:nowrap;
}
.conn i{width:6px;height:6px;border-radius:50%;background:#C0CBD9;flex:none;display:block;}
.conn.on i{background:#22A06B;box-shadow:0 0 0 3px rgba(34,160,107,.14);}
.conn.on{color:#1B7D53;}
.conn.off i{background:#C08A2E;box-shadow:0 0 0 3px rgba(192,138,46,.14);}
.conn.off{color:#9A7420;}

.view{padding:18px 30px 44px;}

/* ================= kpi ================= */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:13px;margin-bottom:14px;}
.kpi{
  background:var(--panel);border-radius:var(--r);padding:15px 18px 14px;
  box-shadow:inset 0 0 0 1px rgba(228,235,243,.8), var(--sh);
  position:relative;overflow:hidden;transition:box-shadow .2s ease;
}
.kpi::before{
  content:'';position:absolute;left:0;top:0;height:2px;width:100%;
  background:linear-gradient(90deg,rgba(42,95,158,.5),rgba(42,95,158,0) 72%);
}
.kpi .lab{
  font-size:11px;color:var(--ink3);display:flex;justify-content:space-between;align-items:baseline;
  letter-spacing:.4px;gap:8px;
}
.kpi .lab > span:last-child{font-size:10.5px;color:var(--ink4);letter-spacing:.2px;}
.kpi .val{
  font-size:24px;font-weight:650;letter-spacing:-.9px;margin-top:6px;line-height:1.24;
}
.kpi .val small{font-size:11.5px;font-weight:500;color:var(--ink3);margin-left:4px;letter-spacing:0;}
.kpi .sub{font-size:11px;color:var(--ink4);margin-top:6px;letter-spacing:.1px;}
.kpi .sub b{color:var(--ink2);font-weight:600;}
.kpi .sub .up{color:#B4453C;}
.kpi .sub .down{color:var(--ok);}
.kpi:not(:first-child):hover{
  box-shadow:inset 0 0 0 1px rgba(213,225,239,.9), 0 2px 4px rgba(15,30,55,.05), 0 12px 26px -18px rgba(15,30,55,.3);
}

/* 首卡：核心指标用品牌深色，形成视觉锚点 */
.kpis .kpi:first-child{
  background:linear-gradient(140deg,#1E4A72 0%,#17395C 46%,#102A45 100%);
  box-shadow:0 1px 2px rgba(12,30,50,.3), 0 14px 30px -18px rgba(12,30,50,.6), inset 0 1px 0 rgba(255,255,255,.1);
}
.kpis .kpi:first-child::before{
  background:linear-gradient(90deg,rgba(255,255,255,.22),rgba(255,255,255,0) 70%);
}
.kpis .kpi:first-child .lab{color:rgba(255,255,255,.62);}
.kpis .kpi:first-child .lab > span:last-child{color:rgba(255,255,255,.45);}
.kpis .kpi:first-child .val{color:#fff;}
.kpis .kpi:first-child .sub{color:rgba(255,255,255,.58);}
.kpis .kpi:first-child .sub b{color:#fff;}
.kpis .kpi:first-child .pbar{background:rgba(255,255,255,.18);}
.kpis .kpi:first-child .pbar > i{background:rgba(255,255,255,.85);}

/* ================= layout ================= */
.grid2{display:grid;grid-template-columns:1.6fr 1fr;gap:13px;}
.grid2b{display:grid;grid-template-columns:1fr 1fr;gap:13px;}
.card{
  background:var(--panel);border-radius:var(--r);overflow:hidden;
  box-shadow:inset 0 0 0 1px rgba(228,235,243,.85), var(--sh);
}
.card-hd{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:15px 18px 11px;
}
.card-hd h3{
  font-size:13px;margin:0;font-weight:650;letter-spacing:.1px;
  display:flex;align-items:center;gap:8px;
}
.card-hd h3::before{
  content:'';width:2.5px;height:11px;border-radius:2px;flex:none;
  background:linear-gradient(180deg,#2A5F9E,#17395C);opacity:.9;
}
.card-hd .hint{font-size:11px;color:var(--ink4);letter-spacing:.2px;}
.card-hd a.hint{color:var(--accent)!important;font-weight:500;}
.card-hd a.hint:hover{color:var(--accent2)!important;}
.card-bd{padding:0 18px 16px;}
.card-bd.p18{padding:14px 18px 18px;}
/* 通栏表格：表头与卡片等宽，首尾单元格对齐卡片内边距 */
.card-bd.flush{padding:0 0 4px;}
.card-bd.flush .tb th{background:#F7FAFD;}
.card-bd.flush .tb th:first-child,
.card-bd.flush .tb td:first-child{padding-left:18px;}
.card-bd.flush .tb th:last-child,
.card-bd.flush .tb td:last-child{padding-right:18px;}
.card-bd.flush .empty{padding:40px 18px;}

/* ================= buttons ================= */
.btn{
  border:0;font:inherit;font-size:12.5px;padding:7px 14px;border-radius:8px;cursor:pointer;
  background:#EDF2F9;color:var(--ink2);transition:all .15s ease;font-weight:500;letter-spacing:.2px;
  display:inline-flex;align-items:center;justify-content:center;gap:5px;line-height:1.4;
}
.btn:hover{background:#E4ECF6;color:var(--ink);}
.btn.pri{
  background:linear-gradient(180deg,#2D65A6 0%,#1E4C82 100%);color:#fff;
  box-shadow:0 1px 2px rgba(23,57,92,.28), inset 0 1px 0 rgba(255,255,255,.16);
}
.btn.pri:hover{background:linear-gradient(180deg,#3371B8 0%,#235589 100%);box-shadow:0 2px 5px rgba(23,57,92,.3), inset 0 1px 0 rgba(255,255,255,.2);}
.btn.line{background:#fff;box-shadow:inset 0 0 0 1px var(--line);}
.btn.line:hover{box-shadow:inset 0 0 0 1px #CFDDEB;background:#FCFDFF;}
.btn.sm{padding:4px 9px;font-size:11px;border-radius:6px;font-weight:500;}
.btn:disabled{opacity:.42;cursor:not-allowed;box-shadow:none;}

/* ================= table ================= */
.tb{width:100%;border-collapse:collapse;}
.tb th{
  font-size:10.5px;font-weight:600;color:#8B9AAD;text-align:left;
  padding:9px 12px;border-bottom:1px solid var(--line);white-space:nowrap;
  letter-spacing:.7px;background:#F8FAFD;
}
.tb th:first-child{padding-left:14px;}
.tb th:last-child{padding-right:14px;}
.tb td{
  padding:10px 12px;border-bottom:1px solid var(--line2);font-size:12.5px;color:var(--ink2);
  vertical-align:middle;transition:background .12s ease;
}
.tb td:first-child{padding-left:14px;}
.tb td:last-child{padding-right:14px;}
.tb tbody tr:last-child td{border-bottom:0;}
.tb tbody tr:hover td{background:#F7FBFE;}
.tb td.n,.tb th.n{text-align:right;font-variant-numeric:tabular-nums;}
.tb td.b{color:var(--ink);font-weight:600;}
.tb .mono{font-variant-numeric:tabular-nums;color:var(--ink2);}
.tb td > div > b{font-weight:600;letter-spacing:.1px;}
.tb-wrap{overflow-x:auto;}
.empty{padding:46px 16px;text-align:center;color:var(--ink4);font-size:12px;letter-spacing:.2px;}

.tag{
  display:inline-block;font-size:10.5px;padding:1.5px 7px;border-radius:5px;font-weight:500;
  background:#F1F5FA;color:#7E8EA2;white-space:nowrap;letter-spacing:.2px;line-height:1.55;
}
.tag.ok{background:var(--ok-soft);color:var(--ok);}
.tag.warn{background:var(--warn-soft);color:var(--warn);}
.tag.dan{background:var(--danger-soft);color:var(--danger);}
.tag.info{background:var(--accent-soft);color:var(--accent);}

.pill{display:inline-flex;align-items:center;gap:5px;}
.dot{width:5px;height:5px;border-radius:50%;background:currentColor;display:inline-block;}

/* ================= toolbar ================= */
.bar{display:flex;align-items:center;gap:10px;margin-bottom:13px;flex-wrap:wrap;}
.bar .grow{flex:1;}
.seg{display:inline-flex;background:#E8EEF7;border-radius:8px;padding:3px;gap:1px;}
.seg button{
  border:0;background:transparent;font:inherit;font-size:12px;color:var(--ink2);
  padding:5px 13px;border-radius:6px;cursor:pointer;transition:all .15s ease;font-weight:500;letter-spacing:.1px;
}
.seg button:hover{color:var(--ink);}
.seg button.on{background:#fff;color:var(--accent2);font-weight:600;box-shadow:0 1px 2px rgba(20,40,70,.09);}
.field{
  display:flex;align-items:center;gap:7px;background:#fff;border-radius:8px;padding:6px 11px;
  box-shadow:inset 0 0 0 1px var(--line), var(--sh-sm);
}
.field:focus-within{box-shadow:inset 0 0 0 1px #BFD3E8, 0 0 0 3px rgba(42,95,158,.07);}
.field input,.field select{border:0;outline:none;font:inherit;font-size:12.5px;color:var(--ink);background:transparent;max-width:150px;}
.field label{font-size:11px;color:var(--ink4);letter-spacing:.3px;}

/* ================= progress ================= */
.pbar{height:5px;border-radius:3px;background:#EDF2F8;overflow:hidden;min-width:54px;}
.pbar > i{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,#4A83C4,#2A5F9E);}
.pbar.ok > i{background:linear-gradient(90deg,#38A876,#1F8A5F);}

/* ================= charts ================= */
.chart{display:flex;align-items:flex-end;gap:10px;height:140px;padding-top:8px;}
.chart .c{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:7px;height:100%;}
.chart .c .b{
  width:100%;max-width:32px;border-radius:5px 5px 2px 2px;transition:height .3s ease;
  background:linear-gradient(180deg,#D5E2F1,#E6EEF8);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.6);
}
.chart .c .b.hi{background:linear-gradient(180deg,#2F6BAE,#1B4472);box-shadow:0 2px 8px -3px rgba(23,57,92,.5);}
.chart .c em{font-size:10px;color:var(--ink4);font-style:normal;letter-spacing:.2px;}

/* ================= list ================= */
.li{display:flex;align-items:center;gap:10px;padding:9px 0;border-top:1px solid var(--line2);font-size:12.5px;color:var(--ink2);}
.li:first-child{border-top:0;padding-top:2px;}
.li .grow{flex:1;min-width:0;}
.li .grow b{display:block;font-weight:600;color:var(--ink);font-size:12.5px;letter-spacing:.1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.li .grow span{display:block;font-size:11px;color:var(--ink4);margin-top:1px;}
.li .r{font-variant-numeric:tabular-nums;font-size:12px;font-weight:500;}

/* ================= todo check ================= */
.chk{display:flex;gap:11px;padding:9px 8px;border-top:1px solid var(--line2);cursor:pointer;border-radius:7px;transition:background .14s ease;margin:0 -8px;}
.chk:first-child{border-top:0;}
.chk:hover{background:#F8FBFE;}
.chk .box{
  width:16px;height:16px;border-radius:5px;flex:none;margin-top:2px;
  box-shadow:inset 0 0 0 1.5px #CBD8E7;background:#fff;
  display:flex;align-items:center;justify-content:center;transition:all .16s ease;
}
.chk .box svg{opacity:0;transition:opacity .14s ease;}
.chk.done .box{
  background:linear-gradient(180deg,#2F6BAE,#1E4C82);box-shadow:0 1px 3px rgba(23,57,92,.3);
}
.chk.done .box svg{opacity:1;}
.chk .tt{font-size:12.5px;color:var(--ink);line-height:1.5;}
.chk.done .tt{color:var(--ink4);text-decoration:line-through;text-decoration-color:#C4D0DE;}
.chk .sd{font-size:11px;color:var(--ink4);margin-top:1px;}
.chk .ck-body{flex:1;min-width:0;}
.chk.editing{cursor:default;}
.chk.editing:hover{background:#FAFCFE;}
.chk.editing .box{opacity:.45;}
.chk.editing .tt{color:var(--ink);text-decoration:none;}
.ck-tools{display:flex;align-items:center;gap:3px;flex:none;align-self:center;}
.ck-b{
  width:20px;height:20px;padding:0;border:0;border-radius:6px;background:#fff;cursor:pointer;
  color:var(--ink3);font:inherit;font-size:11px;line-height:1;
  display:flex;align-items:center;justify-content:center;
  box-shadow:inset 0 0 0 1px var(--line);transition:all .14s ease;
}
.ck-b:hover{color:var(--accent);background:#F6FAFE;box-shadow:inset 0 0 0 1px #B8CCE2;}
.ck-b:disabled{opacity:.3;cursor:not-allowed;}
.ck-b:disabled:hover{color:var(--ink3);background:#fff;box-shadow:inset 0 0 0 1px var(--line);}
.ck-b.del:hover{color:var(--danger);background:#FDF3F2;box-shadow:inset 0 0 0 1px #E7C4C1;}

/* ================= modal ================= */
.mask{
  position:fixed;inset:0;background:rgba(16,28,44,.34);backdrop-filter:blur(3px);
  -webkit-backdrop-filter:blur(3px);
  display:none;align-items:center;justify-content:center;z-index:60;padding:24px;
}
.mask.on{display:flex;}
.modal{
  background:#fff;border-radius:12px;box-shadow:var(--sh-lg);
  width:100%;max-width:520px;max-height:88vh;overflow:auto;
  animation:pop .18s cubic-bezier(.2,.8,.3,1);
}
@keyframes pop{from{opacity:0;transform:translateY(6px) scale(.99);}to{opacity:1;transform:none;}}
.modal.wide{max-width:780px;}
.m-hd{
  display:flex;align-items:center;justify-content:space-between;
  padding:17px 22px 13px;border-bottom:1px solid var(--line2);
  position:sticky;top:0;background:#fff;z-index:2;border-radius:12px 12px 0 0;
}
.m-hd h3{font-size:14.5px;margin:0;font-weight:650;letter-spacing:.1px;}
.m-hd .x{
  border:0;background:transparent;font-size:19px;color:var(--ink4);cursor:pointer;line-height:1;
  width:26px;height:26px;border-radius:6px;display:flex;align-items:center;justify-content:center;
  transition:all .14s ease;
}
.m-hd .x:hover{background:#F2F6FB;color:var(--ink2);}
.m-bd{padding:16px 22px 6px;}
.m-ft{
  display:flex;justify-content:flex-end;gap:9px;padding:14px 22px 16px;
  border-top:1px solid var(--line2);background:#FBFCFE;border-radius:0 0 12px 12px;
}
.form{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.form .full{grid-column:1 / -1;}
.fi label{display:block;font-size:11px;color:var(--ink3);margin-bottom:5px;letter-spacing:.3px;}
.fi input,.fi select,.fi textarea{
  width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;
  font:inherit;font-size:12.5px;color:var(--ink);outline:none;transition:all .15s ease;
}
.fi input:focus,.fi select:focus,.fi textarea:focus{border-color:#BFD3E8;box-shadow:0 0 0 3px rgba(42,95,158,.08);}
.fi input:disabled,.fi select:disabled{background:#F7F9FC;color:var(--ink3);}
.fi textarea{resize:vertical;min-height:60px;}

.items{border-radius:8px;overflow:hidden;margin-top:4px;box-shadow:inset 0 0 0 1px var(--line);}
.items-hd{
  display:grid;grid-template-columns:2.4fr .7fr .9fr .9fr 32px;gap:8px;padding:8px 11px;
  background:#F8FAFD;font-size:10.5px;color:#8B9AAD;letter-spacing:.6px;font-weight:600;
  border-bottom:1px solid var(--line);
}
.item-row{
  display:grid;grid-template-columns:2.4fr .7fr .9fr .9fr 32px;gap:8px;padding:7px 11px;
  align-items:center;border-top:1px solid var(--line2);
}
.item-row:first-child{border-top:0;}
.item-row input,.item-row select{
  width:100%;padding:5px 7px;border:1px solid var(--line);border-radius:6px;font:inherit;
  font-size:12px;outline:none;color:var(--ink);background:#fff;
}
.item-row input:focus,.item-row select:focus{border-color:#BFD3E8;box-shadow:0 0 0 3px rgba(42,95,158,.07);}
.item-row .amt{text-align:right;font-size:12px;color:var(--ink2);font-variant-numeric:tabular-nums;font-weight:500;}
.item-row .del{border:0;background:transparent;color:#C3CEDC;cursor:pointer;font-size:15px;border-radius:5px;}
.item-row .del:hover{color:var(--danger);background:#FBEDEB;}
.doc-total{
  display:flex;justify-content:flex-end;align-items:baseline;gap:14px;
  padding:13px 2px 4px;font-size:11.5px;color:var(--ink3);letter-spacing:.3px;
}
.doc-total b{font-size:19px;color:var(--ink);font-weight:650;font-variant-numeric:tabular-nums;letter-spacing:-.5px;}

/* ================= toast ================= */
.toast{
  position:fixed;left:50%;bottom:34px;transform:translate(-50%,10px);
  background:linear-gradient(180deg,#1E4468,#16304C);color:#fff;
  font-size:12.5px;padding:9px 18px;border-radius:8px;letter-spacing:.2px;
  box-shadow:0 10px 30px -12px rgba(12,30,50,.55), inset 0 1px 0 rgba(255,255,255,.1);
  opacity:0;pointer-events:none;transition:all .22s ease;z-index:70;
}
.toast.on{opacity:1;transform:translate(-50%,0);}

/* ================= misc ================= */
.split{display:grid;grid-template-columns:repeat(3,1fr);gap:11px;}
.mini-stat{background:#F7FAFD;border-radius:8px;padding:11px 13px;box-shadow:inset 0 0 0 1px rgba(228,235,243,.7);}
.mini-stat span{font-size:10.5px;color:var(--ink4);letter-spacing:.3px;}
.mini-stat b{display:block;font-size:16px;font-weight:650;margin-top:3px;letter-spacing:-.4px;}

.avatar{
  width:26px;height:26px;border-radius:7px;flex:none;
  background:linear-gradient(160deg,#E9F0F9,#D8E4F2);color:var(--accent2);
  display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;
  margin-right:9px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.75);
}
.cellflex{display:flex;align-items:center;}

/* ---------- 订单：提示块 / 时间线 / 弹窗内通栏表 ---------- */
.notice-mini{
  background:#F6F9FD;border-radius:8px;padding:9px 12px;font-size:11.5px;
  color:var(--ink2);line-height:1.7;box-shadow:inset 0 0 0 1px rgba(228,235,243,.85);
}
.sec-t{
  font-size:11px;color:var(--ink3);letter-spacing:.6px;margin-bottom:11px;
  display:flex;align-items:center;gap:9px;font-weight:600;
}
.sec-t::after{content:'';flex:1;height:1px;background:var(--line2);}
.timeline{position:relative;padding-left:3px;}
.tl{display:flex;gap:11px;padding-bottom:13px;position:relative;}
.tl:last-child{padding-bottom:0;}
.tl i{
  width:7px;height:7px;border-radius:50%;background:#fff;flex:none;margin-top:6px;
  box-shadow:inset 0 0 0 2px #C9D7E6;position:relative;z-index:1;
}
.tl:last-child i{background:var(--accent);box-shadow:inset 0 0 0 2px var(--accent), 0 0 0 3px rgba(42,95,158,.12);}
.tl:not(:last-child)::before{
  content:'';position:absolute;left:3px;top:12px;bottom:-2px;width:1px;background:var(--line);
}
.tl b{display:block;font-size:12px;font-weight:500;color:var(--ink2);line-height:1.55;}
.tl span{display:block;font-size:10.5px;color:var(--ink4);margin-top:1px;letter-spacing:.2px;}
.flush-tb{width:calc(100% + 44px);margin:0 -22px;}
.flush-tb th:first-child,.flush-tb td:first-child{padding-left:22px;}
.flush-tb th:last-child,.flush-tb td:last-child{padding-right:22px;}

/* ================= 快捷入口 ================= */
.sc-card{margin-bottom:14px;}
.sc-tools{display:flex;align-items:center;gap:11px;}
.sc-tip{font-size:10.5px;color:var(--ink4);letter-spacing:.2px;}
.sc-edit{
  font-size:11.5px;color:var(--accent);padding:3px 11px;border-radius:6px;
  background:var(--accent-soft);font-weight:500;letter-spacing:.2px;transition:all .15s ease;
}
.sc-edit:hover{background:#DCE8F6;}

.sc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(102px,1fr));gap:10px;}
.sc-i{
  --c:#2A5F9E;--cbg:#EBF2FA;
  position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
  padding:13px 6px 11px;min-height:82px;border-radius:10px;background:#fff;
  box-shadow:inset 0 0 0 1px var(--line2), 0 1px 2px rgba(15,30,55,.03);
  cursor:pointer;user-select:none;
  transition:box-shadow .16s ease, transform .16s ease;
}
.sc-i:hover{box-shadow:inset 0 0 0 1px #D5E2F1, 0 6px 16px -10px rgba(15,30,55,.42);transform:translateY(-1px);}
.sc-i:active{transform:none;}
.sc-ic{
  width:36px;height:36px;border-radius:9px;flex:none;position:relative;
  display:flex;align-items:center;justify-content:center;
  background:var(--cbg);color:var(--c);
}
.sc-ic svg{width:18px;height:18px;}
.sc-emo{font-size:16px;line-height:1;font-weight:600;}
.sc-t{
  font-size:12px;color:var(--ink2);font-weight:500;letter-spacing:.1px;text-align:center;
  max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.sc-i:hover .sc-t{color:var(--ink);}
.sc-b{
  position:absolute;top:-5px;right:-6px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;
  background:#fff;color:var(--c);font-size:10px;font-weight:600;font-style:normal;letter-spacing:0;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 1px 3px rgba(15,30,55,.18), inset 0 0 0 1px rgba(15,30,55,.06);
}
.sc-ext{position:absolute;top:7px;right:8px;font-size:10px;color:var(--ink4);line-height:1;}

.sc-i.c-teal{--c:#12796A;--cbg:#E2F3F0;}
.sc-i.c-amber{--c:#96660E;--cbg:#FAF0DC;}
.sc-i.c-violet{--c:#5B4BA8;--cbg:#EEEBFB;}
.sc-i.c-rose{--c:#A8465B;--cbg:#FBEBEF;}
.sc-i.c-slate{--c:#4A5A6E;--cbg:#EEF2F7;}

/* 编辑态：可拖、可删 */
.sc-grid.editing .sc-i{box-shadow:inset 0 0 0 1.5px #D2DFEE;cursor:grab;}
.sc-grid.editing .sc-i:hover{box-shadow:inset 0 0 0 1.5px #A6C1DE;transform:none;}
.sc-i.dragging{opacity:.42;cursor:grabbing;}
.sc-i.over{box-shadow:inset 0 0 0 2px var(--accent) !important;}
.sc-x{
  position:absolute;top:-6px;left:-6px;width:18px;height:18px;border-radius:50%;
  background:#fff;color:var(--danger);font-size:12px;font-weight:600;line-height:1;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:0 1px 3px rgba(15,30,55,.2), inset 0 0 0 1px var(--line);
}
.sc-x:hover{background:var(--danger);color:#fff;box-shadow:0 2px 5px rgba(184,56,47,.34);}
.sc-add{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  min-height:82px;border:0;border-radius:10px;cursor:pointer;background:transparent;font:inherit;
  box-shadow:inset 0 0 0 1.5px #DCE6F2;color:var(--ink3);transition:all .16s ease;
}
.sc-add i{
  width:28px;height:28px;border-radius:8px;background:#F1F5FA;font-style:normal;font-size:15px;
  display:flex;align-items:center;justify-content:center;
}
.sc-add span{font-size:11.5px;}
.sc-add:hover{box-shadow:inset 0 0 0 1.5px #B8CCE2;color:var(--accent);background:#FAFCFE;}
.sc-add:hover i{background:var(--accent-soft);color:var(--accent);}

.sc-pick{display:flex;gap:8px;}
.sc-pk{
  width:26px;height:26px;padding:0;border:0;border-radius:7px;cursor:pointer;background:#fff;
  box-shadow:inset 0 0 0 1px var(--line);display:flex;align-items:center;justify-content:center;
  transition:box-shadow .15s ease;
}
.sc-pk i{width:14px;height:14px;border-radius:4px;background:#2A5F9E;display:block;}
.sc-pk.c-teal i{background:#12796A;}
.sc-pk.c-amber i{background:#96660E;}
.sc-pk.c-violet i{background:#5B4BA8;}
.sc-pk.c-rose i{background:#A8465B;}
.sc-pk.c-slate i{background:#4A5A6E;}
.sc-pk:hover{box-shadow:inset 0 0 0 1px #B8CCE2;}
.sc-pk.on{box-shadow:inset 0 0 0 2px var(--accent2);}

@media (max-width:1180px){
  .kpis{grid-template-columns:repeat(2,1fr);}
  .grid2,.grid2b{grid-template-columns:1fr;}
}
@media (max-width:900px){
  .side{display:none;}
  .view,.top{padding-left:16px;padding-right:16px;}
  .form{grid-template-columns:1fr;}
  .kpis{grid-template-columns:1fr;}
}
/* ================= v2.0 新增：登录 / 权限 / 知识库 / 商品图 ================= */
[hidden]{display:none !important;}
.modal.xl{max-width:980px;}
.btn.danger{background:var(--danger);color:#fff;box-shadow:0 1px 2px rgba(184,56,47,.22), inset 0 1px 0 rgba(255,255,255,.14);}
.btn.danger:hover{background:#A5302A;}
.btn.danger-line{background:#fff;color:var(--danger);box-shadow:inset 0 0 0 1px #F1D6D3;}
.btn.danger-line:hover{background:#FDF6F5;}
.divider{
  display:flex;align-items:center;gap:10px;margin:20px 0 13px;
  font-size:11px;color:var(--ink3);letter-spacing:.8px;font-weight:600;
}
.divider::before,.divider::after{content:'';flex:1;height:1px;background:var(--line2);}
.ck{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink2);cursor:pointer;}
.ck input{width:15px;height:15px;accent-color:var(--accent);}

/* ---- 登录 ---- */
.login{
  position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(900px 520px at 50% -8%, #E4EEFA 0%, #F1F4F9 58%, #EEF2F8 100%);
  padding:24px;
}
.login-card{
  width:376px;background:#fff;border-radius:10px;padding:28px 30px 22px;
  box-shadow:0 1px 2px rgba(15,30,55,.05), 0 30px 66px -32px rgba(12,26,45,.36);
}
.login-brand{display:flex;align-items:center;gap:11px;margin-bottom:22px;}
.login-brand b{display:block;font-size:14px;font-weight:650;letter-spacing:.2px;}
.login-brand span{display:block;font-size:10.5px;color:var(--ink4);letter-spacing:.5px;margin-top:2px;}
.login-card h2{font-size:19px;margin:0 0 4px;font-weight:650;letter-spacing:-.2px;}
.login-sub{margin:0 0 20px;font-size:12px;color:var(--ink3);}
.login-form label{display:block;font-size:11px;color:var(--ink3);margin-bottom:13px;letter-spacing:.3px;}
.login-form input{
  width:100%;margin-top:6px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;
  font:inherit;font-size:13px;color:var(--ink);outline:none;transition:all .15s ease;background:#fff;
}
.login-form input:focus{border-color:#BFD3E8;box-shadow:0 0 0 3px rgba(42,95,158,.09);}
.login-err{min-height:17px;font-size:11.5px;color:var(--danger);margin-bottom:9px;line-height:1.5;}
.login-btn{width:100%;justify-content:center;padding:10px 14px;font-size:13px;}
.login-foot{margin-top:16px;font-size:10.5px;color:var(--ink4);text-align:center;line-height:1.6;}

/* 侧栏账号操作按钮 */
.me{position:relative;}
.me-more{
  margin-left:auto;border:0;background:transparent;color:var(--ink4);cursor:pointer;
  font-size:15px;line-height:1;padding:2px 3px;border-radius:6px;
}
.me-more:hover{background:#F0F5FB;color:var(--ink2);}
.acct{display:flex;align-items:center;gap:12px;padding:4px 0 14px;}
.av.lg{width:44px;height:44px;border-radius:10px;font-size:16px;}
.acct b{display:block;font-size:14px;font-weight:650;}
.acct span{display:block;font-size:11.5px;color:var(--ink3);margin-top:2px;}
.perm-chips{display:flex;flex-wrap:wrap;gap:6px;padding-bottom:8px;}
.chip{
  font-size:11px;padding:3px 8px;border-radius:6px;background:#F2F6FB;color:var(--ink3);
  letter-spacing:.2px;
}
.chip.can{background:var(--accent-soft);color:var(--accent2);font-weight:600;}

/* ---- 商品缩略图 ---- */
.p-cell{display:flex;align-items:center;gap:10px;min-width:0;}
.p-thumb{
  width:38px;height:38px;border-radius:8px;flex:none;overflow:hidden;background:#F4F8FC;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:inset 0 0 0 1px var(--line);transition:box-shadow .15s ease;
}
.p-thumb:hover{box-shadow:inset 0 0 0 1px #BDD2E8;}
.p-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.p-thumb.empty{color:#BCC9D9;}
.p-thumb.empty svg{width:18px;height:18px;}
.p-meta{min-width:0;}
.p-meta b{display:block;font-size:12.5px;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:260px;}
.p-meta span{display:block;font-size:11px;color:var(--ink3);margin-top:1px;}

/* ---- 图片上传 ---- */
.up-wrap{display:grid;grid-template-columns:186px 1fr;gap:14px;align-items:start;}
.up-cover{
  position:relative;aspect-ratio:1/1;border-radius:10px;background:#F5F8FC;overflow:hidden;
  box-shadow:inset 0 0 0 1px var(--line);display:flex;align-items:center;justify-content:center;
  cursor:pointer;
}
.up-cover img{width:100%;height:100%;object-fit:contain;background:#fff;display:block;}
.up-empty{display:flex;flex-direction:column;align-items:center;gap:5px;color:#A9B8CA;padding:0 14px;text-align:center;}
.up-empty svg{width:26px;height:26px;color:#B9C7D8;}
.up-empty b{font-size:12px;color:var(--ink2);font-weight:600;}
.up-empty span{font-size:10px;color:var(--ink4);line-height:1.5;}
.up-cov-act{
  position:absolute;left:0;right:0;bottom:0;display:flex;gap:6px;justify-content:center;padding:9px 8px;
  background:linear-gradient(0deg, rgba(10,22,38,.62), rgba(10,22,38,0));
}
.up-cov-act .btn{padding:3px 9px;font-size:11px;}
.up-progress{
  position:absolute;left:0;right:0;top:0;padding:5px;text-align:center;font-size:11px;color:#fff;
  background:rgba(23,57,92,.78);opacity:0;transition:opacity .15s ease;pointer-events:none;
}
.up-progress.on{opacity:1;}
.up-gal{min-width:0;}
.up-gal-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;}
.up-gal-hd span{font-size:11px;color:var(--ink3);letter-spacing:.3px;}
.up-gal-hd em{font-style:normal;font-size:10.5px;color:var(--ink4);}
.up-gal-list{display:flex;flex-wrap:wrap;gap:8px;min-height:66px;align-content:flex-start;}
.up-item{
  position:relative;width:64px;height:64px;border-radius:8px;overflow:hidden;background:#F4F8FC;
  box-shadow:inset 0 0 0 1px var(--line);
}
.up-item img{width:100%;height:100%;object-fit:cover;display:block;}
.up-x{
  position:absolute;top:2px;right:2px;width:17px;height:17px;border:0;border-radius:5px;
  background:rgba(12,26,45,.62);color:#fff;font-size:12px;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;padding:0;
}
.up-x:hover{background:var(--danger);}
.up-idx{
  position:absolute;left:2px;bottom:2px;font-size:9.5px;color:#fff;background:rgba(12,26,45,.55);
  border-radius:4px;padding:0 4px;line-height:14px;
}
.up-add{
  display:inline-flex;align-items:center;gap:5px;width:64px;height:64px;border-radius:8px;
  justify-content:center;font-size:10.5px;color:var(--ink3);cursor:pointer;text-align:center;
  box-shadow:inset 0 0 0 1px var(--line);background:#FBFCFE;line-height:1.35;flex-direction:column;
}
.up-add span{font-size:16px;line-height:1;color:var(--ink4);}
.up-add:hover{box-shadow:inset 0 0 0 1px #BFD3E8;color:var(--accent2);background:#F7FAFE;}
.up-gal-empty{font-size:11px;color:var(--ink4);display:flex;align-items:center;height:66px;}

/* ---- 商品详情 ---- */
.pv-main{
  border-radius:10px;background:#F7FAFD;overflow:hidden;display:flex;align-items:center;justify-content:center;
  box-shadow:inset 0 0 0 1px var(--line);max-height:380px;
}
.pv-main img{max-width:100%;max-height:380px;object-fit:contain;display:block;}
.pv-none{padding:40px;text-align:center;color:var(--ink4);font-size:12px;background:#F7FAFD;border-radius:10px;}
.pv-thumbs{display:flex;gap:7px;margin-top:9px;flex-wrap:wrap;}
.pv-th{
  width:50px;height:50px;border-radius:7px;overflow:hidden;cursor:pointer;background:#F4F8FC;
  box-shadow:inset 0 0 0 1px var(--line);transition:box-shadow .14s ease;
}
.pv-th img{width:100%;height:100%;object-fit:cover;display:block;}
.pv-th.on{box-shadow:inset 0 0 0 2px var(--accent);}
.pv-info{
  display:grid;grid-template-columns:1fr 1fr;gap:0 18px;margin-top:16px;
  border-radius:10px;background:#FBFCFE;box-shadow:inset 0 0 0 1px var(--line2);padding:6px 14px;
}
.pv-row{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px solid var(--line2);}
.pv-row:nth-last-child(-n+2){border-bottom:0;}
.pv-row span{font-size:11px;color:var(--ink3);}
.pv-row b{font-size:12.5px;font-weight:600;text-align:right;}
.pv-price{color:var(--accent2);font-size:14px !important;}
.pv-desc{margin-top:14px;padding:12px 14px;border-radius:10px;background:#FBFCFE;box-shadow:inset 0 0 0 1px var(--line2);}
.pv-desc-hd{font-size:11px;color:var(--ink3);letter-spacing:.6px;margin-bottom:6px;font-weight:600;}
.pv-desc div{font-size:12.5px;color:var(--ink2);line-height:1.85;}

/* ---- 知识库 ---- */
.kb-wrap{display:grid;grid-template-columns:186px 1fr;gap:16px;align-items:start;}
.kb-side{
  background:#fff;border-radius:10px;padding:10px;box-shadow:var(--sh);
  position:sticky;top:76px;
}
.kb-side-hd{font-size:10px;color:#A3B1C2;letter-spacing:1.5px;font-weight:600;padding:6px 8px 8px;}
.kb-cat-i{
  display:flex;align-items:center;gap:6px;padding:7px 9px;border-radius:7px;font-size:12.5px;
  color:var(--ink2);cursor:pointer;transition:background .14s ease,color .14s ease;position:relative;
}
.kb-cat-i:hover{background:#F2F7FC;}
.kb-cat-i.on{background:var(--accent-soft);color:var(--accent2);font-weight:600;}
.kb-cat-i span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.kb-cat-i b{font-size:10.5px;color:var(--ink4);font-weight:600;}
.kb-cat-i.on b{color:var(--accent);}
.kb-cat-x{
  font-style:normal;font-size:13px;line-height:1;color:var(--ink4);padding:0 2px;border-radius:4px;display:none;
}
.kb-cat-i:hover .kb-cat-x{display:block;}
.kb-cat-x:hover{color:var(--danger);}
.kb-side-foot{font-size:10px;color:var(--ink4);padding:10px 8px 4px;line-height:1.6;border-top:1px solid var(--line2);margin-top:8px;}
.kb-main{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));}
.kb-card{
  background:#fff;border-radius:10px;padding:15px 17px;box-shadow:var(--sh);cursor:pointer;
  transition:box-shadow .16s ease, transform .16s ease;display:flex;flex-direction:column;
}
.kb-card:hover{box-shadow:0 2px 4px rgba(15,30,55,.05), 0 14px 30px -20px rgba(12,26,45,.32);transform:translateY(-1px);}
.kb-card-top{display:flex;align-items:center;gap:7px;margin-bottom:6px;}
.kb-card-top h4{margin:0;font-size:13.5px;font-weight:650;letter-spacing:-.1px;line-height:1.45;flex:1;}
.kb-pin{
  font-style:normal;font-size:9.5px;padding:1px 5px;border-radius:4px;background:var(--warn-soft);
  color:var(--warn);font-weight:600;flex:none;
}
.kb-brief{
  margin:0 0 10px;font-size:11.5px;color:var(--ink3);line-height:1.75;flex:1;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.kb-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:10.5px;}
.kb-cat{background:var(--accent-soft);color:var(--accent2);padding:1px 6px;border-radius:4px;font-weight:600;}
.kb-tag{background:#F3F6FA;color:var(--ink3);padding:1px 6px;border-radius:4px;}
.kb-meta em{font-style:normal;color:var(--ink4);margin-left:auto;letter-spacing:.1px;}
.kb-read-meta{display:flex;gap:14px;font-size:11px;color:var(--ink3);padding-bottom:12px;border-bottom:1px solid var(--line2);margin-bottom:14px;flex-wrap:wrap;}
.kb-read{font-size:13px;line-height:1.95;color:var(--ink2);}
.kb-read h2{font-size:16px;margin:20px 0 8px;color:var(--ink);font-weight:650;letter-spacing:-.1px;}
.kb-read h3{font-size:14px;margin:16px 0 6px;color:var(--ink);font-weight:650;}
.kb-read h2:first-child,.kb-read h3:first-child{margin-top:0;}
.kb-read p{margin:0 0 10px;}
.kb-read ul,.kb-read ol{margin:0 0 12px;padding-left:22px;}
.kb-read li{margin-bottom:4px;}
.kb-read img{max-width:100%;border-radius:8px;display:block;margin:12px 0;box-shadow:0 1px 3px rgba(15,30,55,.1);}
.kb-read blockquote{
  margin:12px 0;padding:8px 14px;border-left:3px solid #CFDDEB;background:#F8FBFE;
  border-radius:0 8px 8px 0;color:var(--ink2);font-size:12.5px;
}
.kb-read code{background:#F3F6FA;padding:1px 5px;border-radius:4px;font-size:12px;color:var(--accent2);}
.kb-read pre{background:#F7FAFD;padding:12px 14px;border-radius:8px;overflow:auto;box-shadow:inset 0 0 0 1px var(--line2);}
.kb-read a{color:var(--accent);text-decoration:underline;}

/* ---- 富文本编辑器 ---- */
.ed{border-radius:10px;box-shadow:inset 0 0 0 1px var(--line);overflow:hidden;margin-top:4px;background:#fff;}
.ed-tool{
  display:flex;align-items:center;gap:3px;flex-wrap:wrap;padding:7px 9px;
  background:#FAFCFE;border-bottom:1px solid var(--line2);
}
.ed-tool button{
  border:0;background:transparent;border-radius:6px;padding:4px 8px;font:inherit;font-size:11.5px;
  color:var(--ink2);cursor:pointer;line-height:1.5;transition:background .13s ease,color .13s ease;
}
.ed-tool button:hover{background:#EAF2FB;color:var(--accent2);}
.ed-sep{width:1px;height:15px;background:var(--line);margin:0 4px;}
.ed-tip{margin-left:auto;font-size:10px;color:var(--ink4);}
.ed-body{
  min-height:280px;max-height:46vh;overflow:auto;padding:16px 18px;outline:none;
  font-size:13px;line-height:1.9;color:var(--ink2);
}
.ed-body:empty::before{content:attr(data-ph);color:#B6C2D1;font-size:12.5px;}
.ed-body img{max-width:100%;border-radius:8px;margin:10px 0;display:block;}
.ed-body h2{font-size:16px;margin:16px 0 8px;color:var(--ink);}
.ed-body h3{font-size:14px;margin:14px 0 6px;color:var(--ink);}
.ed-body blockquote{margin:10px 0;padding:6px 12px;border-left:3px solid #CFDDEB;background:#F8FBFE;color:var(--ink2);}
.ed-body ul,.ed-body ol{padding-left:22px;}
.m-ft-note{margin-right:auto;font-size:11px;color:var(--ink3);}

/* ---- 权限矩阵 ---- */
.role-tag{
  display:inline-block;font-size:11px;padding:2px 8px;border-radius:6px;font-weight:600;letter-spacing:.2px;
  background:#F2F6FB;color:var(--ink2);
}
.role-tag.r-admin{background:#E7EFFA;color:#1A4780;}
.role-tag.r-manager{background:#E7F5EE;color:#1F7A55;}
.role-tag.r-staff{background:#FAF1DE;color:#8E6412;}
.role-tag.r-viewer{background:#F1F0F7;color:#5B5580;}
.role-intro{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;}
.role-box{border-radius:10px;padding:12px 14px;background:#FBFCFE;box-shadow:inset 0 0 0 1px var(--line2);}
.role-box p{margin:6px 0 0;font-size:11.5px;color:var(--ink3);line-height:1.7;}
.u-cell{display:flex;align-items:center;gap:9px;}
.u-av{
  width:30px;height:30px;border-radius:8px;flex:none;display:flex;align-items:center;justify-content:center;
  font-size:12px;font-weight:600;color:var(--accent2);background:linear-gradient(160deg,#E6EEF8,#D9E5F2);
}
.u-cell b{display:block;font-size:12.5px;font-weight:600;line-height:1.35;}
.u-cell span{display:block;font-size:10.5px;color:var(--ink4);}
.u-me{font-style:normal;font-size:9.5px;color:var(--accent);background:var(--accent-soft);padding:0 4px;border-radius:3px;margin-left:3px;}
.u-perms .tag{font-size:10px;padding:1px 6px;margin:0 3px 3px 0;display:inline-block;}
.pm-bar{display:flex;align-items:center;gap:10px;margin-bottom:12px;}
.pm-bar-tip{font-size:11px;color:var(--ink4);}
.pm{max-height:280px;overflow:auto;padding-right:4px;}
.pm-g{margin-bottom:12px;}
.pm-g-n{
  font-size:10px;color:#A3B1C2;letter-spacing:1.4px;font-weight:600;margin-bottom:6px;
  display:flex;align-items:center;gap:8px;
}
.pm-g-n::after{content:'';flex:1;height:1px;background:var(--line2);}
.pm-row{display:flex;align-items:center;gap:10px;padding:3px 0;}
.pm-name{font-size:12px;color:var(--ink2);width:88px;flex:none;}
.pm-seg{display:inline-flex;background:#EEF3F9;border-radius:7px;padding:2px;gap:1px;}
.pm-seg button{
  border:0;background:transparent;border-radius:5px;padding:3px 12px;font:inherit;font-size:11px;
  color:var(--ink3);cursor:pointer;transition:all .13s ease;
}
.pm-seg button:hover{color:var(--ink);}
.pm-seg button.on{background:#fff;color:var(--accent2);font-weight:600;box-shadow:0 1px 2px rgba(20,40,70,.1);}
.pm-seg button[data-lv="none"].on{color:var(--ink4);font-weight:500;}
.pm-seg button[data-lv="edit"].on{color:#fff;background:var(--accent);box-shadow:0 1px 3px rgba(42,95,158,.3);}

/* ---- 二手回收 / 二手库存 ---- */
.seg-n{
  display:inline-block;margin-left:5px;font-size:10px;color:var(--ink4);font-weight:500;
  font-variant-numeric:tabular-nums;
}
.seg button.on .seg-n{color:var(--accent);}

/* 分段选择（设备类型 / 成色） */
.pick{display:flex;flex-wrap:wrap;gap:6px;}
.pick button{
  border:0;font:inherit;font-size:12px;padding:6px 14px;border-radius:7px;cursor:pointer;
  background:#EEF3F9;color:var(--ink2);transition:all .15s ease;letter-spacing:.1px;
}
.pick button:hover{background:#E4ECF6;color:var(--ink);}
.pick button.on{
  background:linear-gradient(180deg,#2D65A6,#1E4C82);color:#fff;font-weight:600;
  box-shadow:0 1px 2px rgba(23,57,92,.26), inset 0 1px 0 rgba(255,255,255,.16);
}

/* 二手库存卡片 */
.used-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(228px,1fr));gap:13px;}
.u-card{
  background:#fff;border-radius:var(--r);overflow:hidden;cursor:pointer;
  box-shadow:inset 0 0 0 1px rgba(228,235,243,.9), var(--sh-sm);
  transition:box-shadow .18s ease, transform .18s ease;
  display:flex;flex-direction:column;
}
.u-card:hover{
  box-shadow:inset 0 0 0 1px #D3E1F0, 0 2px 5px rgba(15,30,55,.05), 0 16px 30px -22px rgba(15,30,55,.34);
  transform:translateY(-1px);
}
.u-card.is-out{opacity:.74;}
.u-card.is-out:hover{opacity:1;}

.u-pic{
  position:relative;aspect-ratio:4/3;overflow:hidden;
  background:linear-gradient(160deg,#F7FAFD,#EDF2F9);
  display:flex;align-items:center;justify-content:center;
}
.u-pic img{width:100%;height:100%;object-fit:contain;background:#fff;display:block;}
.u-ph{color:#C2CFDF;display:flex;align-items:center;justify-content:center;width:100%;height:100%;}
.u-ph svg{width:42px;height:42px;}
.u-ph.big svg{width:74px;height:74px;}

.u-cond{
  position:absolute;left:9px;top:9px;width:20px;height:20px;border-radius:6px;
  display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;
  background:rgba(255,255,255,.94);color:var(--ink2);
  box-shadow:0 1px 3px rgba(15,30,55,.14);
}
.u-cond.c-A{color:var(--ok);}
.u-cond.c-B{color:var(--accent);}
.u-cond.c-C{color:var(--warn);}
.u-cond.c-D{color:var(--danger);}

.u-flag{
  position:absolute;right:9px;top:9px;font-size:10.5px;padding:2px 7px;border-radius:5px;
  background:rgba(14,26,43,.7);color:#fff;letter-spacing:.2px;
  -webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);
}
.u-flag.sold{background:rgba(31,138,95,.92);}
.u-flag.scrap{background:rgba(184,56,47,.9);}

.u-body{padding:11px 13px 9px;flex:1;min-width:0;}
.u-body b{
  display:block;font-size:12.5px;font-weight:650;line-height:1.4;color:var(--ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.u-spec{font-size:11.5px;color:var(--ink2);margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.u-spec2{font-size:11px;color:var(--ink3);margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.u-meta{font-size:10.5px;color:var(--ink4);margin-top:5px;letter-spacing:.2px;}

.u-foot{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:9px 13px 11px;border-top:1px solid var(--line2);background:#FCFDFF;
}
.u-price em{display:block;font-style:normal;font-size:15px;font-weight:650;color:var(--ink);letter-spacing:-.3px;}
.u-price span{display:block;font-size:10.5px;color:var(--ink4);margin-top:1px;}

/* 详情弹窗 */
.u-detail{display:grid;grid-template-columns:250px 1fr;gap:18px;}
.u-pic-big{
  aspect-ratio:4/3;border-radius:9px;overflow:hidden;
  background:linear-gradient(160deg,#F7FAFD,#EDF2F9);
  display:flex;align-items:center;justify-content:center;
}
.u-pic-big img{width:100%;height:100%;object-fit:contain;background:#fff;display:block;}
.u-info{min-width:0;}
.u-name{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:9px;}
.u-name b{font-size:15px;font-weight:650;letter-spacing:-.1px;}
.u-kv{display:grid;grid-template-columns:1fr 1fr;gap:0 14px;}
.u-kv > div{display:flex;gap:8px;padding:3.5px 0;border-bottom:1px dashed var(--line2);}
.u-kv em{font-style:normal;font-size:11px;color:var(--ink4);width:58px;flex:none;}
.u-kv span{font-size:11.5px;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.u-money{
  display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:12px;
  padding:11px 13px;border-radius:9px;background:#F7FAFD;
}
.u-money em{display:block;font-style:normal;font-size:10.5px;color:var(--ink4);}
.u-money b{display:block;font-size:15px;font-weight:650;margin-top:2px;letter-spacing:-.3px;}
.u-money b.pri{color:var(--accent2);}
.u-money b.up{color:#B4453C;}
.u-money b.down{color:var(--ok);}
.u-gal{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;}
.u-gal-i{width:66px;height:66px;border-radius:8px;overflow:hidden;cursor:pointer;box-shadow:inset 0 0 0 1px var(--line);}
.u-gal-i img{width:100%;height:100%;object-fit:cover;display:block;}
.u-desc{font-size:12.5px;color:var(--ink2);line-height:1.75;white-space:pre-wrap;}
.u-tip{
  font-size:11.5px;color:var(--ink3);background:#F7FAFD;border-radius:8px;
  padding:9px 12px;margin-top:12px;line-height:1.65;
}
.u-tip b.up{color:#B4453C;font-weight:650;}
.u-tip b.down{color:var(--ok);font-weight:650;}
.u-note{
  font-size:11.5px;color:var(--warn);background:var(--warn-soft);border-radius:8px;
  padding:9px 12px;margin-bottom:6px;line-height:1.6;
}

/* 弹窗顶部的设备摘要 */
.u-hd{display:flex;align-items:center;gap:11px;padding:2px 0 14px;}
.u-hd b{display:block;font-size:13.5px;font-weight:650;line-height:1.4;}
.u-hd span{display:block;font-size:11.5px;color:var(--ink3);margin-top:1px;}
.u-hd-no{color:var(--ink4) !important;font-size:11px !important;}

@media (max-width:900px){
  .u-detail{grid-template-columns:1fr;}
  .u-kv{grid-template-columns:1fr;}
  .up-wrap{grid-template-columns:1fr;}
  .kb-wrap{grid-template-columns:1fr;}
  .kb-side{position:static;}
  .pv-info{grid-template-columns:1fr;}
  .login-card{width:100%;padding:24px 20px 18px;}
}

@media print{
  .side,.top-r,.bar,.btn{display:none !important;}
  body{background:#fff;background-image:none;}
  .top{position:static;background:#fff;backdrop-filter:none;}
  .card,.kpi{box-shadow:none;outline:1px solid var(--line);}
  .kpis .kpi:first-child{background:#fff;color:var(--ink);}
  .kpis .kpi:first-child .val,.kpis .kpi:first-child .lab,.kpis .kpi:first-child .sub{color:var(--ink);}
  .main{padding:0;}
}

/* 全局搜索结果 */
.gs-h{
  display:flex;align-items:center;gap:6px;margin:14px 0 7px;
  font-size:11.5px;font-weight:600;color:var(--ink3);letter-spacing:.02em;
}
.gs-h:first-child{margin-top:0;}
.gs-h span{
  font-size:10.5px;font-weight:500;color:var(--ink4);
  background:var(--line2);border-radius:6px;padding:0 5px;line-height:16px;
}
.gs-list{display:flex;flex-direction:column;gap:5px;}
.gs-i{
  display:flex;flex-direction:column;gap:1px;padding:8px 11px;
  border-radius:8px;background:var(--line2);transition:background .16s ease;
}
.gs-i:hover{background:var(--accent-soft);}
.gs-i b{font-size:12.5px;font-weight:600;color:var(--ink);}
.gs-i span{font-size:11px;color:var(--ink3);}
