:root{
  --bg:#0e1320; --bg2:#151c2e; --panel:#1a2236; --panel2:#222c44;
  --line:#2c3650; --line2:#3a466a;
  --txt:#e7ecf6; --mut:#9aa6c0; --dim:#6b779a;
  --acc:#4f8cff; --acc2:#22c1a6; --warn:#f4b740; --bad:#ff5d6c; --good:#39d98a;
  --r:12px; --r2:8px; --sh:0 6px 24px rgba(0,0,0,.35);
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:radial-gradient(1200px 600px at 80% -10%,#1b2540 0%,var(--bg) 60%);
  color:var(--txt);font:14px/1.55 -apple-system,"PingFang SC","Microsoft YaHei",Segoe UI,Roboto,sans-serif;}
a{color:var(--acc);text-decoration:none}
button{font-family:inherit}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:#2c3650;border-radius:8px}

/* ---------- top bar ---------- */
#topbar{display:flex;align-items:center;gap:18px;padding:10px 18px;
  background:rgba(16,21,34,.85);backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line);position:sticky;top:0;z-index:30;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:12px;min-width:240px}
.brand .logo{font-size:26px}
.brand .title{font-weight:700;font-size:16px;letter-spacing:.3px}
.brand .tagline{color:var(--mut);font-size:11.5px}
#tabs{display:flex;gap:6px;flex:1;flex-wrap:wrap}
#tabs button{background:transparent;border:1px solid transparent;color:var(--mut);
  padding:7px 13px;border-radius:999px;cursor:pointer;font-size:13.5px;transition:.15s}
#tabs button:hover{color:var(--txt);background:var(--panel)}
#tabs button.active{color:#fff;background:linear-gradient(135deg,var(--acc),#3a6ed8);box-shadow:0 4px 14px rgba(79,140,255,.35)}
.badge{background:var(--panel);border:1px solid var(--line);color:var(--acc2);
  padding:4px 10px;border-radius:999px;font-size:12px}

/* ---------- layout ---------- */
#main{padding:18px;max-width:1320px;margin:0 auto}
.view{display:none;animation:fade .25s}
.view.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1}}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:16px;box-shadow:var(--sh)}
.grid{display:grid;gap:14px}
.row{display:flex;gap:12px;flex-wrap:wrap}
.head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.head h2{margin:0;font-size:18px}
.sub{color:var(--mut);font-size:12.5px}
.muted{color:var(--mut)} .dim{color:var(--dim)}

/* ---------- controls ---------- */
.btn{background:var(--panel2);border:1px solid var(--line);color:var(--txt);
  padding:8px 14px;border-radius:var(--r2);cursor:pointer;font-size:13.5px;transition:.15s}
.btn:hover{border-color:var(--acc);color:#fff}
.btn.primary{background:linear-gradient(135deg,var(--acc),#3a6ed8);border-color:transparent;color:#fff}
.btn.ghost{background:transparent}
.btn.sm{padding:5px 10px;font-size:12.5px}
.btn.danger:hover{border-color:var(--bad);color:var(--bad)}
input,textarea,select{background:var(--bg2);border:1px solid var(--line);color:var(--txt);
  border-radius:var(--r2);padding:8px 10px;font-size:13.5px;font-family:inherit;width:100%}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--acc)}
label{font-size:12.5px;color:var(--mut);display:block;margin:0 0 4px}
.field{margin-bottom:10px}
.chip{display:inline-flex;align-items:center;gap:5px;background:var(--bg2);border:1px solid var(--line);
  border-radius:999px;padding:4px 11px;font-size:12.5px;cursor:pointer;color:var(--mut)}
.chip.active{color:#fff;border-color:var(--acc);background:rgba(79,140,255,.15)}

/* ---------- cards/stats ---------- */
.stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:14px}
.stat .v{font-size:26px;font-weight:700}
.stat .k{color:var(--mut);font-size:12.5px;margin-top:2px}
.stat .bar{height:6px;background:var(--bg2);border-radius:6px;margin-top:8px;overflow:hidden}
.stat .bar>i{display:block;height:100%;background:linear-gradient(90deg,var(--acc),var(--acc2))}
.cardlist{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.tile{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:14px;cursor:pointer;transition:.15s}
.tile:hover{border-color:var(--acc);transform:translateY(-2px)}
.tile h4{margin:0 0 6px;font-size:14.5px}
.pill{font-size:11px;padding:2px 8px;border-radius:999px;background:var(--bg2);color:var(--mut);border:1px solid var(--line)}
.good{color:var(--good)} .warn{color:var(--warn)} .bad{color:var(--bad)} .info{color:var(--acc)}
.dot{width:8px;height:8px;border-radius:50%;display:inline-block}

/* ---------- two-column with side ---------- */
.split{display:grid;grid-template-columns:1fr 360px;gap:14px;align-items:start}
@media(max-width:900px){.split{grid-template-columns:1fr}.brand .tagline{display:none}}

/* ---------- knowledge / chain graph ---------- */
.graphwrap{position:relative;border:1px solid rgba(120,180,240,.16);border-radius:var(--r);overflow:hidden;height:560px;background:radial-gradient(ellipse 90% 70% at 50% 42%,#050a16 0%,#02050c 55%,#000103 100%);box-shadow:inset 0 0 120px rgba(0,0,8,.6)}
.graphwrap svg{width:100%;height:100%;cursor:grab;display:block}
.graphwrap svg.grabbing{cursor:grabbing}
.gnode{cursor:pointer}
.gnode rect{stroke-width:1.5}
.gnode text{fill:#fff;font-size:12px;pointer-events:none}
.gedge{fill:none;stroke:#46527a;stroke-width:1.4;opacity:.7}
.gedge.flow{stroke:var(--acc2)} .gedge.depends{stroke:#6b779a;stroke-dasharray:4 3}
.glabel{fill:var(--mut);font-size:10px;pointer-events:none}
.gtools{position:absolute;right:10px;top:10px;display:flex;flex-direction:column;gap:6px;z-index:5}
.gtools button{width:34px;height:34px;border-radius:8px;background:rgba(26,34,54,.9);border:1px solid var(--line);color:var(--txt);cursor:pointer;font-size:16px}
.palette{position:absolute;left:10px;top:10px;display:flex;flex-wrap:wrap;gap:6px;max-width:62%;z-index:5}
.palette .chip{background:rgba(26,34,54,.92)}

/* ---------- detail panel ---------- */
.detail{position:sticky;top:74px}
.detail h3{margin:0 0 4px;font-size:16px}
.kp{margin:8px 0;padding-left:18px}
.kp li{margin:3px 0}
.tagrow{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}

/* ---------- flashcard review ---------- */
.flash{max-width:680px;margin:0 auto}
.flashcard{background:linear-gradient(160deg,var(--panel2),var(--panel));border:1px solid var(--line);
  border-radius:16px;padding:28px;min-height:220px;display:flex;flex-direction:column;justify-content:center;box-shadow:var(--sh)}
.flashcard .q{font-size:18px;line-height:1.7}
.flashcard .a{margin-top:16px;border-top:1px dashed var(--line);padding-top:16px;color:var(--txt)}
.grade{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:16px}
.grade button{padding:12px;border-radius:10px;border:1px solid var(--line);background:var(--panel2);color:var(--txt);cursor:pointer}
.grade button small{display:block;color:var(--mut);font-size:11px}
.grade button.again:hover{border-color:var(--bad)} .grade button.hard:hover{border-color:var(--warn)}
.grade button.good:hover{border-color:var(--acc)} .grade button.easy:hover{border-color:var(--good)}

/* ---------- chat ---------- */
.chatwrap{display:grid;grid-template-columns:230px 1fr;gap:14px;height:calc(100vh - 150px);min-height:480px}
@media(max-width:760px){.chatwrap{grid-template-columns:1fr}}
.botlist{display:flex;flex-direction:column;gap:8px}
.botlist .tile{cursor:pointer;padding:11px}
.botlist .tile.active{border-color:var(--acc);background:rgba(79,140,255,.12)}
.chatpane{display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.msgs{flex:1;overflow:auto;padding:16px;display:flex;flex-direction:column;gap:12px}
.msg{max-width:82%;padding:10px 13px;border-radius:12px;white-space:normal;word-wrap:break-word}
.msg.user{align-self:flex-end;background:linear-gradient(135deg,var(--acc),#3a6ed8);color:#fff;border-bottom-right-radius:3px}
.msg.bot{align-self:flex-start;background:var(--panel2);border:1px solid var(--line);border-bottom-left-radius:3px}
.msg.bot pre{background:#0c1120;border:1px solid var(--line);border-radius:8px;padding:10px;overflow:auto;font-size:12.5px}
.msg.bot code{background:#0c1120;padding:1px 5px;border-radius:4px}
.composer{display:flex;gap:8px;padding:10px;border-top:1px solid var(--line);background:var(--bg2)}
.composer textarea{resize:none;height:46px;max-height:140px}
.suggest{display:flex;gap:6px;flex-wrap:wrap;padding:8px 10px 0}
.suggest .chip{font-size:12px}
.typing{color:var(--mut);font-style:italic}

/* ---------- tables ---------- */
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line)}
th{color:var(--mut);font-weight:600;font-size:12px}
tr:hover td{background:rgba(255,255,255,.02)}
.right{text-align:right}

/* ---------- modal/toast ---------- */
#modal-root:empty{display:none}
.modal-bg{position:fixed;inset:0;background:rgba(5,8,15,.6);backdrop-filter:blur(3px);
  display:flex;align-items:center;justify-content:center;z-index:50;padding:18px}
.modal{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);
  padding:18px;max-width:620px;width:100%;max-height:88vh;overflow:auto;box-shadow:var(--sh)}
.modal .head h3{margin:0}
#toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);z-index:60;display:flex;flex-direction:column;gap:8px}
.toast{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--acc);
  padding:10px 16px;border-radius:8px;box-shadow:var(--sh);animation:fade .2s}
.toast.err{border-left-color:var(--bad)} .toast.ok{border-left-color:var(--good)}
.empty{color:var(--mut);text-align:center;padding:40px;border:1px dashed var(--line);border-radius:var(--r)}
.omni-dd{position:absolute;top:40px;right:0;width:360px;max-width:80vw;max-height:62vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:var(--sh);z-index:45}
.omni-item{padding:9px 12px;border-bottom:1px solid var(--line);cursor:pointer}
.omni-item:last-child{border-bottom:none}
.omni-item:hover{background:var(--panel2)}
.article h4{margin:14px 0 6px} .article p{margin:7px 0} .article li{margin:3px 0} .article{line-height:1.7}
.spin{display:inline-block;width:14px;height:14px;border:2px solid var(--line);border-top-color:var(--acc);border-radius:50%;animation:sp .7s linear infinite;vertical-align:-2px}
@keyframes sp{to{transform:rotate(360deg)}}

/* ---- pre-built operation chain stage cards (v2.1) ---- */
.stagecard{max-width:760px}
.stagesec{margin:12px 0}
.stagesec h4{margin:0 0 6px;font-size:13px;color:var(--acc)}
.checkrow{display:block;margin:5px 0;padding:6px 8px;border:1px solid var(--line);border-radius:8px;cursor:pointer;font-size:13px}
.checkrow:hover{border-color:var(--acc)}
.checkrow input{accent-color:var(--acc);margin-right:4px}
.fbbox{border-top:1px dashed var(--line);padding-top:10px}
.fbbox textarea{width:100%;margin-top:8px}

/* ---- audit pack (v2.4) ---- */
.spectable{width:100%;border-collapse:collapse;font-size:12px;margin:6px 0}
.spectable th,.spectable td{border:1px solid var(--line);padding:5px 7px;text-align:left;vertical-align:top}
.spectable th{color:var(--acc);font-weight:600;white-space:nowrap}
.rulerow .chip{padding:2px 7px}

/* ---- metrics pack (v2.5) ---- */
.formulabox{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;
  background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:9px 11px;
  white-space:pre-wrap;word-break:break-all;line-height:1.6}

/* ---- 3D knowledge tree (R13) ---- */
.tree3d-overlay{position:fixed;inset:0;z-index:55;background:rgba(3,6,12,.92);display:flex;flex-direction:column}
.tree3d-canvas{flex:1;cursor:grab;touch-action:none}
.tree3d-canvas:active{cursor:grabbing}
.tree3d-hud{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:10px 14px;
  background:linear-gradient(180deg,rgba(6,12,24,.82),rgba(6,12,24,.35));backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);
  border-bottom:1px solid rgba(120,170,230,.12);position:absolute;top:0;left:0;right:0;z-index:2;color:var(--fg,#dbe6f5);letter-spacing:.4px}
.tree3d-tip{position:absolute;z-index:3;max-width:250px;background:rgba(10,18,34,.78);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  border:1px solid rgba(120,180,240,.22);border-radius:12px;padding:11px 13px;
  box-shadow:0 10px 36px rgba(0,0,0,.55),inset 0 1px 0 rgba(160,210,255,.08)}
.tree3d-legend{position:absolute;right:14px;top:86px;z-index:2;max-width:240px;background:rgba(10,18,34,.66);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(120,180,240,.18);border-radius:12px;padding:9px 11px;
  box-shadow:0 8px 28px rgba(0,0,0,.4),inset 0 1px 0 rgba(160,210,255,.07)}
.gseclabel{font-size:17px;font-weight:600;letter-spacing:2px;opacity:.8}
.glabel.hot{fill:#cfe4ff;font-size:11px;font-weight:600}

/* ---- 2D map deep-space ambience (v2.6.6, 与 3D 同语言) ---- */
@keyframes gtwk{0%,100%{opacity:.12}50%{opacity:.55}}
.gstar{animation:gtwk 4.2s ease-in-out infinite}
@keyframes gcore{0%,100%{fill-opacity:1}50%{fill-opacity:.55}}
.gcore{animation:gcore 2.8s ease-in-out infinite}
@media (prefers-reduced-motion: reduce){.gstar,.gcore{animation:none}}
.gedge{stroke:#4e6ca0;opacity:.5}
.gseclabel{letter-spacing:3px}

/* ===== 离线指标计算器 (v2.8) ===== */
.calc-privacy{background:linear-gradient(135deg,rgba(34,193,166,.12),rgba(57,217,138,.06));
  border:1px solid #1f7a55;border-radius:var(--r);padding:12px 16px;margin:8px 0 12px;line-height:1.6}
.calc-privacy strong{color:var(--good);display:block;margin-bottom:4px}
.calc-privacy b{color:#aef0cf}
.calc-drop{border:2px dashed var(--line2);border-radius:var(--r);padding:26px;text-align:center;
  cursor:pointer;background:var(--bg2);transition:.15s;display:flex;flex-direction:column;gap:6px;align-items:center}
.calc-drop:hover,.calc-drop.over{border-color:var(--acc);background:rgba(79,140,255,.08)}
.calc-map{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:12px 14px;margin:10px 0}
.pill.good{color:var(--good);border-color:#1f7a55} .pill.warn{color:var(--warn);border-color:#7a5e1f}
.calc-remap{margin-top:8px} .calc-remap summary{cursor:pointer;color:var(--acc);font-size:13px}
.calc-bd{margin:6px 0;border:1px solid var(--line);border-radius:10px;padding:6px 12px;background:var(--panel)}
.calc-bd summary{cursor:pointer;font-weight:600}
.calc-cards .pill{font-size:12px;padding:4px 10px}
table.mtrend{border-collapse:collapse;width:100%;font-size:12.5px;margin:4px 0 10px}
table.mtrend th,table.mtrend td{border:1px solid var(--line);padding:4px 8px;text-align:right;white-space:nowrap}
table.mtrend th{background:var(--bg2);color:var(--acc2);font-weight:600}
table.mtrend td.l,table.mtrend th.l{text-align:left} table.mtrend td.muted{color:var(--mut)}
table.mtrend tr.clk{cursor:pointer} table.mtrend tr.clk:hover td{background:rgba(79,140,255,.08)}
table.mtrend .sig.good{color:var(--good)} table.mtrend .sig.bad{color:var(--bad)}
table.mtrend .sig.mid{color:var(--warn)} table.mtrend .sig.na{color:var(--mut)}
svg.spark{vertical-align:middle;display:inline-block}

/* ===== 战情体检 · 双房间 (v2.9) ===== */
.wr-room{border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin:12px 0;background:var(--panel)}
.wr-room.r1{border-left:4px solid var(--bad)}
.wr-room.r2{border-left:4px solid var(--acc)}
.wr-room.disabled{opacity:.5}
.wr-roomhead{font-weight:700;font-size:15px;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.wr-badge{background:rgba(255,93,108,.16);color:var(--bad);border:1px solid var(--bad);border-radius:6px;font-size:12px;padding:2px 8px}
.wr-badge.b2{background:rgba(79,140,255,.16);color:var(--acc);border-color:var(--acc)}
.wr-belt{text-align:center;color:var(--acc2);font-size:13px;margin:12px 0 0;padding:8px;border-top:1px dashed var(--line2);letter-spacing:1px}
.wr-archive{background:var(--bg2);border:1px solid var(--line);border-radius:10px;padding:10px 14px;margin-bottom:8px}
.wr-think{margin:8px 0;border:1px solid var(--line);border-radius:10px;background:#0c1426}
.wr-think summary{cursor:pointer;padding:6px 10px;color:var(--acc2);font-size:13px}
.wr-thinkbody{max-height:180px;overflow:auto;padding:8px 12px;color:var(--mut);font-size:12px;white-space:pre-wrap;font-family:ui-monospace,monospace}
.wr-report{margin-top:10px}.wr-report .md{line-height:1.7}
.wr-report h2{color:#9fc1ff;border-bottom:1px solid var(--line);padding-bottom:4px;margin-top:18px}
.wr-pack{max-height:360px;overflow:auto;background:#0c1426;border:1px solid var(--line);border-radius:8px;padding:10px;font-size:11px;white-space:pre-wrap}
.wr-health{background:linear-gradient(135deg,rgba(79,140,255,.10),rgba(34,193,166,.05));border:1px solid var(--line2);border-radius:12px;padding:14px;margin-bottom:12px}
.wr-gauge{width:110px;height:110px;border-radius:50%;border:6px solid var(--acc);display:flex;flex-direction:column;align-items:center;justify-content:center;flex:0 0 auto}
.wr-gauge .num{font-size:38px;font-weight:800;line-height:1}.wr-gauge .gl{font-size:11px;color:var(--mut);margin-top:3px}
.wr-headline{font-size:17px;font-weight:600;margin-bottom:6px;color:#cfe0ff}
.wr-kpis{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.wr-kpi{background:var(--bg2);border:1px solid var(--line);border-radius:10px;padding:6px 12px;min-width:96px}
.wr-kpi .kn{font-size:11px;color:var(--mut)}.wr-kpi .kv{font-size:18px;font-weight:700}.wr-kpi .kp{font-size:11px;color:var(--acc2)}
.wr-prog{height:8px;background:var(--bg2);border:1px solid var(--line);border-radius:6px;overflow:hidden;margin:6px 0}
.wr-prog>i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--acc),var(--acc2));transition:width .2s}
/* 房间一：直接载入指标包 */
.wr-packload{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:8px 0 2px;padding:8px 10px;border:1px dashed var(--line2);border-radius:10px;background:var(--bg2)}
/* 房间二：多轮 SOP 体检舞台 */
.wr-stage{margin:6px 0}
.wr-sopbanner{font-size:12.5px;color:var(--acc2);background:#0c1426;border:1px solid var(--line);border-radius:8px;padding:7px 12px;margin-bottom:8px}
.wr-riskbar{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:10px}
.wr-riskchip{font-size:11px;border:1px solid var(--line2);border-radius:20px;padding:2px 9px;font-weight:600}
.wr-round{border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:8px 0;background:var(--bg2)}
.wr-roundhd{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14px}
.wr-rno{background:rgba(79,140,255,.16);color:var(--acc);border:1px solid var(--acc);border-radius:6px;font-size:11px;padding:1px 7px}
.wr-mt{font-size:10.5px;border-radius:5px;padding:1px 6px;border:1px solid var(--line2);color:var(--mut)}
.wr-mt.think{color:var(--acc2);border-color:#1f6a5e;background:rgba(34,193,166,.10)}
.wr-mt.fast{color:#bcd0f5;border-color:var(--line2)}
.wr-roundstat{margin-left:auto}
.wr-angles{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:8px;margin-top:8px}
.wr-angle{border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:var(--panel);transition:border-color .2s,box-shadow .2s}
.wr-angle.running{border-color:var(--acc);box-shadow:0 0 0 1px var(--acc) inset;animation:wrpulse 1.2s ease-in-out infinite}
.wr-angle.done{border-color:var(--line2)}
.wr-angle.err{border-color:var(--bad)}
@keyframes wrpulse{0%,100%{box-shadow:0 0 0 1px rgba(79,140,255,.3) inset}50%{box-shadow:0 0 10px -2px var(--acc) inset}}
.wr-ahd{display:flex;align-items:center;gap:6px;font-size:13px}
.wr-ahd strong{flex:1;min-width:0}
.wr-sev{font-size:10.5px;border:1px solid var(--line2);border-radius:20px;padding:1px 7px;font-weight:700;white-space:nowrap}
.wr-ast{font-size:11px;color:var(--mut);white-space:nowrap}
.wr-alens{font-size:11px;margin:2px 0}
.wr-abody{margin-top:5px;font-size:12.5px}
.wr-verdict{color:#cfe0ff;font-weight:600;margin:3px 0}
.wr-finds{margin:4px 0 4px 0;padding-left:1.1em;color:var(--fg);font-size:12px}
.wr-finds li{margin:2px 0}
.wr-adet{margin-top:4px}.wr-adet summary{cursor:pointer;color:var(--acc2);font-size:11.5px}
.wr-adet .md{font-size:12px;line-height:1.6;margin-top:4px}
.wr-synthhd{color:var(--acc2);font-size:13px;padding:8px 0}
.wr-appendix{margin-top:12px;border:1px solid var(--line);border-radius:10px;background:#0c1426}
.wr-appendix>summary{cursor:pointer;padding:8px 12px;color:var(--acc2);font-size:13px}
.wr-apr{font-weight:700;color:#9fc1ff;margin:8px 12px 2px}
.wr-apitem{margin:2px 12px}.wr-apitem summary{cursor:pointer;font-size:12.5px;padding:3px 0}
.wr-apitem .md{font-size:12px;line-height:1.6;padding:4px 0 8px}
/* SKU 盈利体检（出清/扶持清单） */
.sku-panel{border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:12px 0;background:var(--bg2)}
.sku-sec{margin:8px 0}
.sku-h{font-weight:700;font-size:13.5px;margin:8px 0 2px}
.sku-h.bad{color:var(--bad)} .sku-h.good{color:var(--good)}
table.sku-tbl td.bad{color:var(--bad);font-weight:600}
table.sku-tbl td .sub{font-size:11px;color:var(--mut)}
table.sku-tbl td.l.sub{max-width:280px;white-space:normal}
.wr-fullrow{display:flex;gap:6px;flex-wrap:wrap;align-items:center;width:100%;margin-top:6px;padding-top:8px;border-top:1px dashed var(--line2)}
/* 房间三：图表可视化 */
.wr-room.r3{border-left:4px solid var(--acc2)}
.wr-badge.b3{background:rgba(34,193,166,.16);color:var(--acc2);border-color:var(--acc2)}
.r3-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;margin:6px 0}
.r3-card{background:var(--bg2);border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.r3-card.wide{grid-column:1/-1}
.r3-ct{font-size:13px;color:#bcd0f5;margin-bottom:6px;font-weight:600}
.r3-cv .r3svg,.r3svg{width:100%;height:auto;display:block}

/* ===== 细项表军火库 ===== */
.dt-domh{border-left:3px solid var(--acc);padding-left:8px}
.dt-card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:0 0 8px;transition:border-color .15s}
.dt-card.open{border-color:var(--acc)}
.dt-head{display:flex;align-items:center;gap:8px;cursor:pointer;flex-wrap:wrap}
.dt-code{font:600 11px/1 ui-monospace,monospace;color:var(--acc2);background:var(--bg2);border:1px solid var(--line);border-radius:5px;padding:3px 6px;letter-spacing:.4px}
.dt-name{flex:1;min-width:160px;color:#fff;font-size:14px}
.dt-badge{font-size:10.5px;padding:2px 7px;border-radius:9px;border:1px solid var(--line);color:var(--mut)}
.dt-badge.L1{color:#9fe0c4;border-color:#2f5f50}.dt-badge.L2{color:#ffd98a;border-color:#5c4d2a}.dt-badge.L3{color:#ff9fb0;border-color:#5c2f3a}
.dt-badge.tier{color:var(--dim)}
.dt-toggle{font-size:11px;color:var(--mut)}
.dt-liner{color:var(--txt);font-size:12.5px;margin:6px 0 4px}
.dt-dims{display:flex;gap:16px;flex-wrap:wrap;color:var(--mut);font-size:11.5px}
.dt-body{border-top:1px dashed var(--line);margin-top:9px;padding-top:9px;animation:dtfade .18s ease}
@keyframes dtfade{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}
.dt-sec{margin:0 0 11px}
.dt-sec h5{margin:0 0 5px;font-size:12px;color:var(--acc2);font-weight:600}
.dt-ci{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;margin:3px 0;font-size:12px}
.dt-ci b{color:#fff;min-width:110px}
.dt-ci code{background:var(--bg2);border:1px solid var(--line);border-radius:4px;padding:1px 6px;color:#bcd2ff;font-size:11.5px}
.dt-ref{color:var(--acc2);font-size:11px}
.dt-std{width:100%;border-collapse:collapse;font-size:12px}
.dt-std th{text-align:left;color:var(--mut);font-weight:500;font-size:11px;border-bottom:1px solid var(--line);padding:3px 6px}
.dt-std td{padding:4px 6px;border-bottom:1px solid var(--bg2);vertical-align:top}
.dt-lv{color:#0e1320;font-weight:700;font-size:10.5px;padding:2px 8px;border-radius:8px;white-space:nowrap}
.dt-act{margin:0;padding-left:18px;font-size:12.5px}
.dt-act li{margin:3px 0}
.dt-boundary{background:rgba(255,93,108,.07);border:1px solid #4a2f3a;border-radius:7px;padding:7px 10px;font-size:12px;color:#ffc9d0;margin:0 0 8px}
.dt-boundary b{color:#ff8a99}
.dt-foot{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:11.5px;margin:4px 0}
.dt-foot-lab{color:var(--mut)}
.dt-link{cursor:pointer;background:var(--bg2);border:1px solid var(--line2);border-radius:5px;padding:2px 7px;color:var(--acc);font:600 11px/1 ui-monospace,monospace}
.dt-link:hover{border-color:var(--acc);color:#fff}
.dt-src{color:var(--dim);font-size:11px;margin-top:6px}
.dt-modal{position:fixed;inset:0;background:rgba(6,10,20,.72);z-index:60;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow:auto}
.dt-modal-card{background:var(--panel);border:1px solid var(--line2);border-radius:14px;padding:18px 20px;max-width:820px;width:100%;box-shadow:0 18px 60px rgba(0,0,0,.5)}
.dt-philo{background:var(--bg2);border-left:3px solid var(--acc2);border-radius:6px;padding:10px 12px;font-size:12.5px;color:var(--txt);margin:8px 0;line-height:1.7}
.dt-doclist{font-size:13px;line-height:1.75;padding-left:20px}
.dt-doclist li{margin:7px 0}
.dt-backlog{margin-top:10px;font-size:12px}
.dt-backlog summary{cursor:pointer;color:var(--acc2)}
.dt-bl{padding:4px 0;border-bottom:1px solid var(--bg2);font-size:12px}
.dt-bl b{color:#bcd2ff;font-family:ui-monospace,monospace;font-size:11px}

/* ===== 细项表一键生成（房间一） ===== */
.dg-panel{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:10px 0}
.pill.ok{color:#9fe0c4;border-color:#2f5f50}.pill.warn{color:#ffd98a;border-color:#5c4d2a}.pill.bad{color:#ff9fb0;border-color:#5c2f3a}
.dg-tbl{width:100%;border-collapse:collapse;font-size:12px;margin:4px 0}
.dg-tbl th{position:sticky;top:0;background:var(--bg2);color:var(--mut);font-weight:500;font-size:11px;text-align:right;padding:4px 8px;border-bottom:1px solid var(--line)}
.dg-tbl td{padding:4px 8px;border-bottom:1px solid var(--bg2);text-align:right;color:var(--txt)}
.dg-tbl td.dim,.dg-tbl th:first-child{text-align:left}
.dg-tbl td.dim{color:#cdd8ef;font-weight:500}
.dg-tbl tr.lv td{background:rgba(255,255,255,.02)}
.dg-tbl td.lvtag{text-align:center}
.dg-note{font-size:12px;margin:6px 0;padding:5px 9px;border-radius:6px}
.dg-note.warn{background:rgba(244,183,64,.08);border:1px solid #5c4d2a;color:#ffd98a}
.dg-std{margin:0;padding-left:4px;list-style:none;font-size:12px}
.dg-std li{margin:4px 0}
.dg-infeas{margin-top:12px;font-size:12px;border-top:1px dashed var(--line);padding-top:8px}
.dg-infeas summary{cursor:pointer;color:#ff9fb0}

/* ===== 细项表 v2 评估(专属方案) ===== */
.dg-verdict{background:linear-gradient(135deg,rgba(79,140,255,.10),rgba(34,193,166,.06));border:1px solid var(--line2);border-radius:8px;padding:8px 11px;margin:2px 0 6px;font-size:13px;color:#eaf1ff;display:flex;align-items:center;flex-wrap:wrap}
.dg-reading{font-size:12px;color:var(--mut);margin:0 0 8px;padding-left:2px}
.dg-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin:8px 0 2px;font-size:11px;color:var(--mut);align-items:center}
.dg-band{display:inline-flex;align-items:center;gap:4px}

/* ===== 细项表·按需评估（房间2） ===== */
.dg-eval{margin-top:8px;border:1px solid var(--line2);border-radius:8px;overflow:hidden}
.dg-eval-h{background:linear-gradient(135deg,rgba(124,92,255,.16),rgba(79,140,255,.08));padding:6px 10px;font-size:12px;color:#dce6ff;border-bottom:1px solid var(--line)}
.dg-eval-body{padding:9px 11px;font-size:12.5px;line-height:1.7;color:var(--txt)}
.dg-eval-body .mdli{margin:3px 0}
.dg-eval-body h5{margin:8px 0 3px;color:var(--acc2);font-size:12.5px}
.dg-eval-body b{color:#fff}

/* ===== 房间一·多核并行开关 ===== */
.par-toggle{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--mut);cursor:pointer;user-select:none;border:1px solid var(--line);border-radius:7px;padding:4px 9px;background:var(--bg2)}
.par-toggle input{accent-color:var(--acc);cursor:pointer}
.par-toggle:hover{border-color:var(--acc);color:#cdd8ef}

/* ===================== 细项表可视化（图表库 / 卡片图表） ===================== */
/* 报表内容用亮色"纸面"卡片(与深色外壳对比)，承载 DeepSeek 预生成、本地渲染的图表 */
.viz-host{margin:6px 0}
.viz-card{background:#ffffff;color:#1f2937;border:1px solid #e2e8f0;border-radius:10px;padding:14px 16px;box-shadow:0 2px 10px rgba(0,0,0,.25)}
.viz-card svg{width:100%;max-width:100%;height:auto;display:block}
.viz-chart{overflow:hidden}

.viz-colorkey{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;margin-top:6px;font-size:11px;color:#475569}
.viz-ck-h{color:#64748b;font-weight:600}
.viz-ck{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.viz-ck i{width:10px;height:10px;border-radius:2px;display:inline-block;flex:none}
.viz-ck-more{color:#94a3b8;font-style:italic}
.viz-outlier-note{font-size:11px;color:#92400e;background:#fffbeb;border:1px solid #fde68a;border-radius:6px;padding:5px 9px;margin:4px 0 0}
.viz-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.viz-title{font-size:16px;font-weight:700;color:#0f172a}
.viz-sub{font-size:12px;color:#64748b}
.viz-demo-tag{font-size:11px;background:#fef3c7;color:#92400e;padding:1px 8px;border-radius:10px}
.viz-real-tag{font-size:11px;background:#dcfce7;color:#166534;padding:1px 8px;border-radius:10px}
.viz-kpis{display:flex;gap:10px;flex-wrap:wrap;margin:8px 0}
.viz-kpi{background:#f8fafc;border:1px solid #eef2f7;border-radius:8px;padding:8px 12px;min-width:108px}
.viz-kpi-lab{font-size:11px;color:#64748b}
.viz-kpi-val{font-size:20px;font-weight:700;line-height:1.2}
.viz-kpi-dir{font-size:10px;color:#94a3b8;margin-top:1px}
.viz-chart{margin:10px 0}
.viz-legend{display:flex;gap:12px;flex-wrap:wrap;font-size:11px;color:#475569;margin-top:2px}
.viz-leg{display:inline-flex;align-items:center;gap:4px}
.viz-leg i{width:10px;height:10px;border-radius:2px;display:inline-block}
.viz-narr{background:#f1f5f9;border-left:3px solid #2563eb;padding:8px 12px;border-radius:0 6px 6px 0;font-size:13px;color:#1e293b;margin:8px 0}
.viz-narr-ic{font-weight:700}
.viz-hints{margin:6px 0;padding-left:18px;font-size:12px;color:#475569}
.viz-hints li{margin:2px 0}
.viz-caveat{font-size:12px;color:#92400e;background:#fffbeb;border:1px solid #fde68a;border-radius:6px;padding:6px 10px;margin:6px 0}
.viz-tbl-toggle{background:none;border:1px solid #cbd5e1;color:#475569;border-radius:6px;padding:3px 10px;font-size:12px;cursor:pointer;margin-top:6px}
.viz-tbl-toggle:hover{background:#f1f5f9}
.viz-tbl-wrap{overflow:auto;margin-top:6px;max-height:360px}
.viz-tbl{border-collapse:collapse;width:100%;font-size:12px}
.viz-tbl th{background:#f1f5f9;color:#334155;padding:5px 8px;text-align:right;border-bottom:1px solid #e2e8f0;position:sticky;top:0}
.viz-tbl td{padding:4px 8px;border-bottom:1px solid #f1f5f9;text-align:right;color:#1f2937}
.viz-tbl td.dim,.viz-tbl th:first-child{text-align:left}
.viz-tbl td.emph,.viz-tbl th.emph{background:#eff6ff;font-weight:600}
.viz-lv{display:inline-block;padding:0 6px;border-radius:8px;color:#fff;font-size:11px}
.viz-err{padding:8px;font-size:12px}
/* 图表库外壳(深色) — 左右布局：左清单(可滚动) / 右图表(滚轮缩放) */
.viz-layout{display:flex;gap:14px;align-items:flex-start}
.viz-left{width:300px;flex:none;display:flex;flex-direction:column;gap:8px;position:sticky;top:10px}
.viz-right{flex:1;min-width:0}
.viz-search{width:100%}
.viz-domsel{width:100%;padding:6px 8px;background:var(--panel);color:var(--txt);border:1px solid var(--line);border-radius:8px}
.viz-panel{margin:0}
.viz-panel-head{display:flex;gap:10px;align-items:center;margin-bottom:6px;color:var(--txt);flex-wrap:wrap}
.viz-list{display:flex;flex-direction:column;gap:4px;max-height:calc(100vh - 240px);overflow-y:auto;padding-right:4px}
.viz-list-it{display:flex;gap:8px;align-items:center;padding:7px 10px;background:var(--panel);border:1px solid var(--line);border-radius:8px;cursor:pointer}
.viz-list-it:hover{border-color:var(--acc);background:var(--panel2)}
.viz-list-it .dt-code{flex:none}
.viz-list-nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}
.viz-list-dim{font-size:11px;color:var(--dim);flex:none;max-width:88px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.viz-ok{font-size:13px;flex:none}
.viz-real-dot{color:var(--good);font-size:10px;flex:none}
.viz-zoomwrap{overflow:auto;max-height:calc(100vh - 150px);border:1px solid var(--line);border-radius:10px;background:#0b1020;padding:6px}
.viz-zoom{transform-origin:0 0}
.viz-zoom-ctl{display:inline-flex;align-items:center;gap:4px;margin-left:auto}
.viz-zoom-ctl .btn.sm.ghost{padding:1px 9px;line-height:1.5;font-size:13px}
.viz-zoom-lab{font-size:12px;color:var(--mut);min-width:40px;text-align:center}
.viz-zoom-hint{font-size:10px;color:var(--dim);margin-left:2px}
@media(max-width:760px){.viz-layout{flex-direction:column}.viz-left{width:100%;position:static}.viz-list{max-height:280px}.viz-zoomwrap{max-height:none}}
/* 图表保存工具条 */
.viz-export{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:10px;padding-top:8px;border-top:1px dashed #e2e8f0}
.viz-export-lab{font-size:11px;color:#64748b;margin-right:auto}
.viz-export .btn.sm.ghost{color:#334155;border-color:#cbd5e1;background:#f8fafc}
.viz-export .btn.sm.ghost:hover{background:#eef2f7}

/* ---- 🔭 锚定汇总（二级聚合表 L2）：白纸卡片，warp-proof 网格 + 固定列宽表 ---- */
.ac-console{background:#fff;color:#1f2937;border-radius:10px;padding:14px 16px;min-width:720px;box-shadow:0 2px 10px rgba(0,0,0,.25)}
.ac-console select,.ac-console input{background:#f8fafc;border:1px solid #cbd5e1;color:#1f2937}
.ac-head h3{margin:0 0 2px;font-size:17px}
.ac-sub{color:#64748b;font-size:12.5px;margin-bottom:8px}
.ac-sub b{color:#1f2937}
.ac-ctl{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:6px 0 8px;padding:8px 10px;background:#f1f5f9;border-radius:8px}
.ac-ctl label{font-size:13px;color:#334155;font-weight:600}
.ac-sel{min-width:200px;max-width:340px;padding:5px 8px;border-radius:7px;font-size:13px}
.ac-hint{font-size:11px;color:#94a3b8}
/* 显示/隐藏控制：维度面板 + 指标列 chips */
.ac-vis{display:flex;flex-direction:column;gap:6px;margin:0 0 10px;padding:8px 10px;background:#f8fafc;border:1px dashed #d8e0ea;border-radius:8px}
.ac-vis-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ac-vis-lab{font-size:12px;color:#475569;font-weight:600;min-width:64px;flex:none}
.ac-chip{font-size:12px;padding:3px 11px;border-radius:999px;border:1px solid #cbd5e1;background:#fff;color:#64748b;cursor:pointer;transition:.12s;user-select:none}
.ac-chip:hover{border-color:#3b82c4}
.ac-chip.active{background:#3b82c4;border-color:#3b82c4;color:#fff;font-weight:600}
.ac-chip.ac-chip-na{opacity:.5;text-decoration:line-through}
/* KPI 条 */
.ac-slice-title{font-size:13.5px;color:#0f172a;margin:6px 0 6px}
.ac-slice-sub{color:#64748b;font-size:12px;margin-left:6px}
.ac-kpis{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.ac-kpi{flex:1 1 120px;min-width:108px;background:linear-gradient(160deg,#f8fafc,#eef2f7);border:1px solid #e2e8f0;border-radius:9px;padding:8px 12px}
.ac-kpi-v{font-size:18px;font-weight:700;color:#1f2937;line-height:1.2}
.ac-kpi-l{font-size:11px;color:#64748b;margin-top:2px}
.ac-kpi.ac-neg .ac-kpi-v{color:#d7503e}
/* warp-proof：auto-fill 保留空轨 → 隐藏面板时其余卡片宽度不变 */
/* 每个维度面板独占一行：完整表格一目了然，不用横向拖动（v2.54，原为 auto-fill 多列并排） */
.ac-grid{display:grid;grid-template-columns:1fr;gap:12px;align-items:start}
.ac-panel{border:1px solid #e2e8f0;border-radius:9px;padding:10px 12px;background:#fff;overflow-x:auto}
.ac-panel-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.ac-panel-head b{font-size:13.5px;color:#1f2937}
.ac-panel-dim{font-size:11px;color:#94a3b8}
.ac-toggle{margin-left:auto;padding:1px 9px;font-size:12px}
/* table-layout:fixed + 指标/属性列固定宽、维度列吸收剩余宽度（width:100% 铺满整行）
   → 隐藏指标列时数值列不挤压、不变形，只有维度列变宽；长名称（仓库/SKU）不再被截断 */
.ac-tbl{table-layout:fixed;width:100%;border-collapse:collapse;font-size:12px;color:#1f2937}
.ac-tbl .ac-col-dim{width:26%}
.ac-tbl .ac-col-m{width:96px}
.ac-tbl th,.ac-tbl td{border:1px solid #e6ebf2;padding:4px 7px;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ac-tbl th{background:#f1f5f9;color:#475569;font-weight:600;font-size:11.5px;white-space:normal;line-height:1.25;vertical-align:bottom}   /* 长表头(如 销售净额(CNY折算))换行而非截断 */
.ac-tbl th.ac-dimh,.ac-tbl td.ac-dim{text-align:left}
.ac-tbl td.ac-dim{font-weight:500}
.ac-rank{display:inline-block;min-width:16px;color:#94a3b8;font-size:10px;margin-right:4px}
.ac-tbl tr.ac-other td{color:#94a3b8;font-style:italic}
.ac-tbl tr.ac-total td{background:#f8fafc;font-weight:700;border-top:2px solid #cbd5e1}
.ac-tbl td.ac-neg{color:#d7503e}
/* 关联属性列（如 SKU→链接）：窄列居中，不撑表、不变形 */
.ac-tbl .ac-col-attr{width:64px}
.ac-tbl th.ac-attrh,.ac-tbl td.ac-attr{text-align:center}
.ac-tbl td.ac-attr a.ac-link{text-decoration:none;font-size:14px;line-height:1}
.ac-tbl td.ac-attr .ac-attr-txt{color:#64748b;font-size:11px}
.ac-link-inline{font-size:11.5px;color:#2563eb;text-decoration:none;border:1px solid #c7d7f5;border-radius:6px;padding:1px 7px;background:#f5f8ff;white-space:nowrap}
.ac-link-inline:hover{background:#e9f0ff}
.ac-chart{margin-top:4px}
.ac-bars{display:block;max-width:640px}   /* 面板整行后条形图不随行宽无限放大 */
.ac-empty{color:#94a3b8;font-size:12px;padding:14px;text-align:center;border:1px dashed #d8e0ea;border-radius:8px}
.ac-reading{margin-top:12px;padding:10px 12px;background:#fffaf0;border:1px solid #f4e3c0;border-radius:8px;color:#7a5e1f;font-size:12.5px;line-height:1.6}
@media(max-width:760px){.ac-console{min-width:0}.ac-grid{grid-template-columns:1fr}}

/* ---- 📝 图表修改需求汇总笔记机器人 ---- */
.vn-host{margin:6px 0 14px}
.vn-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 12px;background:var(--panel2);border:1px solid var(--line);border-radius:10px 10px 0 0}
.vn-bar b{font-size:14px}
.vn-model{font-size:11px;color:var(--acc2);background:var(--bg2);border:1px solid var(--line);border-radius:999px;padding:2px 9px}
.vn-zoomwrap{overflow:auto;max-height:calc(100vh - 200px);border:1px solid var(--line);border-top:none;border-radius:0 0 10px 10px;background:var(--bg2);padding:10px}
.vn-zoom{transform-origin:0 0}
.vn-grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:12px;align-items:start}
.vn-col{min-width:0}
.vn-col-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.vn-col-head b{font-size:13px}
.vn-count{font-size:11px;color:var(--mut)}
.vn-composer,.vn-summary{background:var(--panel);border:1px solid var(--line);border-radius:9px;padding:10px 12px;margin-bottom:10px}
.vn-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:4px 0}
.vn-row label{font-size:12px;color:var(--mut)}
.vn-bind{flex:1;min-width:160px;max-width:100%}
.vn-ta{width:100%;resize:vertical;font-size:13px}
.vn-instr{width:100%;font-size:12px}
.vn-hint{font-size:11px;color:var(--dim);margin-top:6px;line-height:1.5}
.vn-thumbs{display:flex;gap:6px;flex-wrap:wrap;margin:4px 0}
.vn-thumb{width:54px;height:54px;object-fit:cover;border-radius:6px;border:1px solid var(--line);cursor:pointer;background:#0c1120}
.vn-thumb-wrap{position:relative;display:inline-block}
.vn-thumb-x{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;border:none;background:var(--bad);color:#fff;font-size:11px;line-height:1;cursor:pointer;padding:0}
.vn-timeline{display:flex;flex-direction:column;gap:8px;max-height:calc(100vh - 280px);overflow-y:auto;padding-right:4px}
.vn-item{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--acc);border-radius:8px;padding:8px 10px}
.vn-item-head{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--mut)}
.vn-time{flex:none}
.vn-chart-tag{background:var(--bg2);border:1px solid var(--line);border-radius:999px;padding:1px 8px;color:var(--acc2);max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vn-del{margin-left:auto;border:none;background:none;color:var(--mut);cursor:pointer;font-size:12px;padding:0 2px}
.vn-del:hover{color:var(--bad)}
.vn-text{font-size:13px;color:var(--txt);margin:5px 0;white-space:pre-wrap;word-break:break-word}
.vn-think{background:#0c1120;border:1px dashed var(--line);border-radius:8px;padding:8px 10px;margin:6px 0;font-size:11.5px;color:var(--dim);white-space:pre-wrap;max-height:200px;overflow:auto}
.vn-summary-md{font-size:13px;color:var(--txt);line-height:1.65}
.vn-summary-md h4{margin:12px 0 4px;font-size:14px;color:var(--acc2)}
.vn-summary-md table{border-collapse:collapse;width:100%;margin:6px 0;font-size:12px}
.vn-summary-md th,.vn-summary-md td{border:1px solid var(--line);padding:4px 8px}
.vn-status{font-size:11px;color:var(--mut);margin-left:auto}
.vn-lightbox{position:fixed;inset:0;background:rgba(0,0,0,.85);display:flex;align-items:center;justify-content:center;z-index:60;cursor:zoom-out}
.vn-lightbox img{max-width:92vw;max-height:92vh;border-radius:8px;box-shadow:0 8px 40px rgba(0,0,0,.6)}
@media(max-width:760px){.vn-grid{grid-template-columns:1fr}.vn-zoomwrap{max-height:none}}
.vn-sync{font-size:11px;color:var(--mut)}

/* ---- 📦 订单明细（新域页签）：清单选中态 + 对账条 ---- */
.viz-list-it.active{border-color:var(--acc);background:rgba(79,140,255,.12)}
.od-recon .bad{color:#e5484d;font-size:12px}
.od-recon table.tbl th,.od-recon table.tbl td{padding:3px 8px;border-bottom:1px solid var(--line)}
.ac-chip-all{font-size:12px;padding:3px 11px;border-radius:999px;border:1px dashed #94a3b8;background:#fff;color:#334155;cursor:pointer;transition:.12s;user-select:none;font-weight:600}
.ac-chip-all:hover{border-color:#3b82c4}
.ac-chip-all.active{border-style:solid;border-color:#3b82c4;color:#3b82c4}
.od-recon tr.od-flag td{color:#e5484d}
/* 组合交叉表（≥2 组勾选 → 一张表；本地即时计算） */
.od-colsel{font-size:12px;padding:2px 6px;border-radius:7px;border:1px solid var(--line);background:var(--bg2);color:var(--txt);max-width:130px}
.od-tblwrap{overflow:auto;max-height:72vh;border:1px solid var(--line);border-radius:8px}
.od-tbl{border-collapse:collapse;font-size:12px;width:100%}
.od-tbl th,.od-tbl td{padding:4px 8px;border-bottom:1px solid var(--line);white-space:nowrap;text-align:right}
.od-tbl th{position:sticky;top:0;background:var(--bg2);font-weight:600;font-size:11.5px;z-index:1}
.od-tbl th.od-dim,.od-tbl td.od-dim{text-align:left}
.od-tbl tbody tr:hover td{background:rgba(79,140,255,.08)}
.od-diy .chip{padding:3px 9px;font-size:12px}
/* v2.60b：图表库表族分节 + 横幅框架（§0.6 条件显隐一律显示+横幅，不隐藏） */
.od-fam-head{font-size:11px;font-weight:700;color:var(--mut);text-transform:uppercase;letter-spacing:.02em;padding:10px 6px 4px;border-top:1px solid var(--line)}
.od-fam-head:first-child{border-top:none;padding-top:2px}
.od-fam-empty{font-size:12px;padding:2px 8px 8px;opacity:.75}
.od-banner{font-size:12.5px;padding:6px 10px;border-radius:8px;margin-top:8px;line-height:1.5}
.od-banner-warn{background:rgba(229,72,77,.10);color:#c23a3a;border:1px solid rgba(229,72,77,.28)}
.od-banner-info{background:rgba(79,140,255,.08);color:var(--mut);border:1px solid rgba(79,140,255,.22)}
/* v2.61：「📐 周×维度」矩阵板块——合计行/其他合并行/金额不可信渠道灰显（同 .ac-total/.ac-other 语义，od- 前缀对应 orderdetail.js 自渲染表） */
.od-tbl tr.od-total td{background:var(--bg2);font-weight:700;border-top:2px solid var(--line)}
.od-tbl tr.od-other td{color:var(--mut);font-style:italic}
.od-tbl td.od-untrusted{color:var(--mut);opacity:.6}
/* v2.62：层级行维度——父小计行加粗高亮；多值子行的⚑标记提示父值不唯一(title 列出全部候选) */
.od-tbl tr.od-subtotal td{background:rgba(79,140,255,.07);font-weight:700}
.od-flag-multi{color:#c23a3a;font-size:10.5px;font-weight:600;cursor:help;margin-left:2px}
/* v2.63：「📐 周×维度」多表同屏——每张表一张卡(自带 维度/度量/行数 chip 与 ✕移除)；正文行折叠让 2 张表同屏一眼看全 */
.od-wp-card .od-tblwrap{max-height:46vh}
.od-wp-card .chip{padding:3px 9px;font-size:12px}
.od-wp-card .chip[disabled]{opacity:.4;cursor:not-allowed}
.od-wp-note{margin:6px 0 0}
.od-tbl tr.od-wp-morerow td{text-align:center;background:var(--bg2)}
.od-tbl tr.od-wp-morerow:hover td{background:var(--bg2)}
/* v2.66 「周×平台」复合列：两层表头(周分组 → 各平台 + 该周小计)，列多时整表更紧凑，横向滚动靠 .od-tblwrap */
.od-tbl.od-wp-wide{font-size:12px}
.od-tbl.od-wp-wide th,.od-tbl.od-wp-wide td{padding:3px 6px}
.od-tbl th.od-wp-grp{text-align:center}
.od-tbl th.od-wp-grp-start,.od-tbl td.od-wp-grp-start{border-left:1px solid var(--line)}
.od-tbl th.od-wp-sub,.od-tbl td.od-wp-sub{background:rgba(79,140,255,.07);font-weight:700}
/* 两层表头都 sticky：第 1 行固定高度，第 2 行下移同样高度，纵向滚动时不互相遮挡 */
.od-tbl.od-wp-wide thead tr:first-child th{top:0;height:22px}
.od-tbl.od-wp-wide thead tr:nth-child(2) th{top:22px}

/* board — 「📦 订单明细看板」(exceptionaltoolai.com) 专属：口令页 / 顶栏口径条 / 分片进度条。
   看板复用本文件的全部既有样式（.panel/.chip/.od-*/.viz-*/.ac-*），这里只补主平台没有的三处。契约 §4。 */
#board-scopes{display:flex;gap:6px;flex:1;flex-wrap:wrap;align-items:center}
#board-actions{display:flex;gap:8px;align-items:center}
.board-gate{max-width:520px;margin:8vh auto 0}
.board-gate h2{margin:0 0 6px;font-size:18px}
.board-gate .board-code{flex:1 1 220px;width:auto}
.board-err{color:var(--bad);font-size:12.5px;min-height:18px;margin-top:8px}
.board-prog{max-width:520px;margin:8vh auto 0;text-align:center}
.board-prog-lab{margin:6px 0 8px}
.board-prog-bar{height:6px;border-radius:999px;background:var(--bg2);border:1px solid var(--line);overflow:hidden}
.board-prog-fill{height:100%;width:0;background:linear-gradient(90deg,var(--acc),var(--acc2));transition:width .18s}
.od-combo-na{border-style:solid;color:var(--warn)}
