:root{
  --bg:#080d14; --bg2:#0b1220; --card:#0e1725; --card2:#111d2e; --ln:#1c2c40;
  --tx:#e7f0fa; --dim:#8298b2; --dim2:#546b86; --ac:#3fe0c8; --ac2:#63a8ff;
  --gold:#ffd166; --up:#ff5d6c; --dn:#25c98b; --warn:#ff9f43;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
  --tf-tx:#b8f6ec; --tf-hi:#ffd166; --tf-who:#63e6c8; --tf-bg:#08191b;
  --tf-size:12px; --tf-bright:1;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;background:var(--bg);color:var(--tx);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-size:14px;line-height:1.5}
body{background:radial-gradient(1100px 600px at 12% -8%,rgba(63,224,200,.10),transparent 60%),radial-gradient(900px 520px at 96% 4%,rgba(99,168,255,.09),transparent 60%),var(--bg);min-height:100dvh}
button,input,textarea{font-family:inherit;color:inherit}
button{cursor:pointer;border:0;background:none}
.hidden{display:none!important}
a{color:var(--ac2)}

/* ===== 启动 ===== */
.boot{position:fixed;inset:0;z-index:99;background:#070c13;display:flex;align-items:center;justify-content:center;transition:opacity .4s,visibility .4s}
.boot.off{opacity:0;visibility:hidden}
.boot-in{text-align:center}
.boot-logo{width:56px;height:56px;margin:0 auto 14px;border-radius:16px;background:linear-gradient(145deg,var(--ac),#1a7f9e);color:#04121a;font:800 30px/56px var(--mono);box-shadow:0 0 40px rgba(63,224,200,.35)}
.boot-t{font-size:17px;font-weight:700;letter-spacing:2px}
.boot-s{color:var(--dim2);font-size:11px;margin-top:5px}
.boot-bar{width:170px;height:2px;background:#152436;margin:16px auto 0;overflow:hidden;border-radius:2px}
.boot-bar i{display:block;height:100%;width:40%;background:var(--ac);animation:bd 1.1s ease-in-out infinite}
@keyframes bd{0%{transform:translateX(-110%)}100%{transform:translateX(320%)}}

/* ===== 顶栏 ===== */
.top{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:10px;padding:9px 14px;background:rgba(8,13,20,.9);backdrop-filter:blur(14px);border-bottom:1px solid var(--ln)}
.brand{display:flex;align-items:center;gap:9px;min-width:0}
.seal{width:30px;height:30px;flex:0 0 30px;border-radius:9px;background:linear-gradient(145deg,var(--ac),#157e9c);color:#04121a;font:800 17px/30px var(--mono);text-align:center}
.brand b{display:block;font-size:14px;letter-spacing:.4px;white-space:nowrap}
.brand i{display:block;font:9px/1.3 var(--mono);color:var(--dim2);letter-spacing:1.2px;font-style:normal}
.tag{font:9px var(--mono);color:var(--ac);border:1px solid rgba(63,224,200,.28);background:rgba(63,224,200,.07);padding:3px 7px;border-radius:5px;white-space:nowrap}
.top-r{margin-left:auto;display:flex;align-items:center;gap:7px}
.net{display:inline-flex;align-items:center;gap:5px;font:9px var(--mono);color:var(--dim);white-space:nowrap}
.net i{width:6px;height:6px;border-radius:50%;background:var(--dim2)}
.net.on i{background:var(--dn);box-shadow:0 0 8px var(--dn)}
.net.live i{background:var(--ac);box-shadow:0 0 8px var(--ac);animation:pulse 1.2s infinite}
.net.sim i{background:var(--warn);box-shadow:0 0 8px var(--warn)}
@keyframes pulse{50%{opacity:.35}}
.ico{width:30px;height:30px;border-radius:8px;border:1px solid var(--ln);background:var(--card);color:var(--dim);font-size:15px}
.ico:hover{color:var(--ac);border-color:var(--ac)}

/* ===== 首页 ===== */
.home{max-width:940px;margin:0 auto;padding:18px 14px 26px}
.hero{padding:16px 2px 18px}
.kicker{display:flex;align-items:center;gap:7px;font:9px var(--mono);letter-spacing:1.4px;color:var(--ac)}
.kicker i{width:16px;height:1px;background:var(--ac)}
.hero h1{margin:10px 0 8px;font-size:clamp(24px,5.4vw,38px);line-height:1.25;letter-spacing:-.5px;font-weight:800}
.hero h1 em{font-style:normal;background:linear-gradient(100deg,var(--ac),var(--ac2));-webkit-background-clip:text;background-clip:text;color:transparent}
.hero p{color:var(--dim);font-size:12.5px;margin:0}
.card{background:linear-gradient(165deg,var(--card2),var(--card));border:1px solid var(--ln);border-radius:14px;padding:14px;margin-bottom:12px;box-shadow:0 12px 34px rgba(0,0,0,.22)}
.cp-h{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.cp-l{font-size:11px;font-weight:700;color:var(--tx)}
.cp-net{margin-left:auto;display:inline-flex;align-items:center;gap:5px;font:9px var(--mono);color:var(--dn)}
.cp-net i{width:5px;height:5px;border-radius:50%;background:currentColor}
.cp-net.sim{color:var(--warn)}
.cp-tip{margin-left:auto;font:9px var(--mono);color:var(--dim2);text-align:right}
textarea,.txt{width:100%;background:#0a1220;border:1px solid var(--ln);border-radius:9px;padding:10px 11px;font-size:12.5px;line-height:1.6;resize:vertical;outline:none}
textarea:focus,.txt:focus{border-color:var(--ac)}
input.txt{height:38px;padding:0 11px}
.ex-row{display:flex;gap:6px;overflow-x:auto;margin-top:9px;padding-bottom:2px;scrollbar-width:none}
.ex-row::-webkit-scrollbar{display:none}
.ex{flex:0 0 auto;border:1px solid var(--ln);background:#0b1626;color:var(--dim);border-radius:20px;padding:5px 11px;font-size:10.5px;white-space:nowrap}
.ex:hover{color:var(--ac);border-color:var(--ac)}
.src-note{margin-top:8px;font:9.5px/1.6 var(--mono);color:var(--dim2)}
.card-h{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.card-h b{font-size:12.5px}
.ch-i{color:var(--ac);font-size:15px}
.ch-s{margin-left:auto;font:9.5px var(--mono);color:var(--dim)}
.opt-row{display:flex;align-items:center;gap:10px;min-height:34px;flex-wrap:wrap}
.ol{font-size:10.5px;color:var(--dim);width:66px;flex:0 0 66px}
input[type=range]{flex:1 1 130px;min-width:90px;height:3px;-webkit-appearance:none;appearance:none;background:#1b2c42;border-radius:3px;outline:none}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--ac);box-shadow:0 0 9px rgba(63,224,200,.55);cursor:pointer}
input[type=range]::-moz-range-thumb{width:14px;height:14px;border:0;border-radius:50%;background:var(--ac);cursor:pointer}
.ov{font:11px var(--mono);color:var(--ac);width:52px;text-align:right;flex:0 0 52px}
.sw-row{display:flex;flex-wrap:wrap;gap:8px 16px;margin:12px 0}
.sw{display:inline-flex;align-items:center;gap:7px;font-size:10.5px;color:var(--dim);cursor:pointer}
.sw input{display:none}
.sw i{width:28px;height:16px;border-radius:10px;background:#1b2c42;position:relative;transition:.2s;flex:0 0 28px}
.sw i::after{content:'';position:absolute;left:2px;top:2px;width:12px;height:12px;border-radius:50%;background:#5a7290;transition:.2s}
.sw input:checked+i{background:rgba(63,224,200,.3)}
.sw input:checked+i::after{left:14px;background:var(--ac)}
.sw input:checked~span{color:var(--ac)}
.ai-row{display:grid;grid-template-columns:repeat(2,1fr);gap:7px;margin:12px 0}
.ai-row .ai-btn:last-child{grid-column:span 2}
@media(min-width:700px){.ai-row{grid-template-columns:repeat(3,1fr)}.ai-row .ai-btn:last-child{grid-column:auto}}
.ai-btn{border:1px solid var(--ln);background:linear-gradient(150deg,#11253a,#0d1a2b);border-radius:10px;padding:10px 8px;text-align:left;transition:.18s}
.ai-btn:hover{border-color:var(--ac);transform:translateY(-1px)}
.ai-btn.hot{border-color:rgba(255,209,102,.4);background:linear-gradient(150deg,#2a2413,#161a22)}
.ai-btn b{display:block;font-size:11px;color:var(--ac);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ai-btn.hot b{color:var(--gold)}
.ai-btn span{display:block;font-size:9px;color:var(--dim2);margin-top:3px;line-height:1.4}
.plan-box{border:1px dashed var(--ln);border-radius:10px;padding:10px;min-height:62px;max-height:230px;overflow-y:auto;background:rgba(5,12,20,.45)}
.plan-empty{font-size:10.5px;color:var(--dim2);text-align:center;padding:12px 0}
.pl-dept{display:flex;align-items:center;gap:8px;padding:5px 0;border-bottom:1px solid rgba(28,44,64,.6);font-size:10.5px}
.pl-dept:last-child{border:0}
.pl-dept b{color:var(--ac);font:10px var(--mono);width:44px;flex:0 0 44px}
.pl-dept .nm{flex:1 1 auto;color:var(--tx);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-dept .ct{color:var(--gold);font:10px var(--mono)}
.pl-dept .ds{color:var(--dim2);font-size:9px;width:44%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:560px){.pl-dept .ds{display:none}}
.chips{display:flex;gap:5px;overflow-x:auto;flex:1 1 auto;padding:2px 0;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chips button{flex:0 0 auto;border:1px solid var(--ln);background:#0b1626;color:var(--dim);border-radius:16px;padding:4px 10px;font-size:10px;white-space:nowrap}
.chips button.on{border-color:var(--ac);color:var(--ac);background:rgba(63,224,200,.09)}
.start{display:block;width:100%;margin:14px 0 10px;border-radius:12px;padding:14px;background:linear-gradient(100deg,#0f6d72,#146b9c 60%,#1c5aa8);box-shadow:0 10px 30px rgba(20,107,156,.28);transition:.18s}
.start:hover{filter:brightness(1.12);transform:translateY(-1px)}
.start b{display:block;font-size:15px;letter-spacing:2px}
.start span{display:block;font-size:9.5px;opacity:.8;margin-top:3px}
.start.sm{padding:10px;margin:10px 0 0}
.start.sm b{font-size:12px;letter-spacing:.5px}
.fine{font-size:10px;color:var(--dim2);line-height:1.7;margin-bottom:8px}
.disc{font-size:9.5px;color:#7c6a55;line-height:1.65;border-left:2px solid #5b4a30;padding-left:9px;margin-top:10px}
.spec-note{font-size:9.5px;color:#8aa6bd;line-height:1.7;border:1px solid rgba(99,168,255,.22);background:rgba(99,168,255,.05);border-radius:9px;padding:8px 10px;margin-bottom:8px}
.spec-note a,.spec-note .lnk{color:var(--ac2);text-decoration:none;border-bottom:1px dotted var(--ac2)}
.spec-note .lnk{background:none;padding:0;font-size:inherit;border:0;border-bottom:1px dotted var(--ac2)}
.as-files{display:flex;flex-direction:column;gap:4px;max-height:280px;overflow-y:auto}
.as-file{display:flex;align-items:center;gap:7px;border:1px solid var(--ln);border-radius:7px;padding:6px 8px;background:#0b1626;font-size:10px;cursor:pointer;text-align:left;width:100%}
.as-file:hover,.as-file.on{border-color:var(--ac);color:var(--ac)}
.as-file b{font:9px var(--mono);color:var(--ac2);flex:0 0 46px;text-transform:uppercase}
.as-file span{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--tx)}
.as-file i{font:8.5px var(--mono);color:var(--dim2);font-style:normal}
.as-code{background:#08111d;border:1px solid var(--ln);border-radius:8px;padding:10px;font:10px/1.65 var(--mono);white-space:pre-wrap;word-break:break-word;color:#a9c0d6;max-height:none}
.as-proto{width:100%;height:min(74dvh,720px);border:1px solid var(--ln);border-radius:9px;background:#0b1119}
.as-kpi{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:7px;margin-bottom:10px}
.as-kpi div{background:#0b1626;border:1px solid var(--ln);border-radius:8px;padding:9px}
.as-kpi b{display:block;font:17px var(--mono);color:var(--ac)}
.as-kpi span{font-size:9px;color:var(--dim2)}
.core-hero{background:linear-gradient(140deg,#0f2233,#0d1726)}
.core-hero b{color:var(--ac);font-size:12px}
.core-hero span{float:right;font:9px var(--mono);color:var(--dim2)}
.core-hero p{font-size:10px;color:var(--dim);line-height:1.75;margin:7px 0 0;clear:both}
.core-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin-bottom:9px}
@media(max-width:760px){.core-grid{grid-template-columns:repeat(2,1fr)}}
.core-mod{background:var(--card);border:1px solid var(--ln);border-radius:9px;padding:9px}
.core-mod .api{font:9px var(--mono);color:var(--ac2);word-break:break-all}
.core-mod b{display:block;font-size:11px;margin:4px 0}
.core-mod .du{font-size:9px;color:var(--dim2);line-height:1.6;min-height:44px}
.core-mod .gt{font:8.5px var(--mono);color:var(--gold);display:block;margin-top:5px;border-top:1px dashed var(--ln);padding-top:5px}
.core-mod .st{font:9px var(--mono);color:var(--dn);margin-top:4px}
.ledger{font:10px var(--mono);display:grid;grid-template-columns:repeat(2,1fr);gap:5px}
.ledger div{background:#0b1626;border:1px solid var(--ln);border-radius:6px;padding:5px 7px;color:var(--dim)}
.ledger b{color:var(--ac);float:right}

/* ===== TOKEN 实时流 ===== */
.tokflow{position:relative;max-width:940px;margin:0 auto 12px;overflow:hidden;border:1px solid #1c3b3c;border-radius:11px;background:var(--tf-bg);box-shadow:inset 0 0 26px rgba(63,224,200,.05)}
.tokflow::before{content:'';position:absolute;inset:0;pointer-events:none;z-index:2;background:repeating-linear-gradient(0deg,rgba(0,0,0,.13) 0,rgba(0,0,0,.13) 1px,transparent 1px,transparent 3px);opacity:.4}
.tf-scan{position:absolute;left:0;right:0;top:0;height:1px;z-index:3;background:linear-gradient(90deg,transparent,var(--tf-who),var(--tf-hi),transparent);animation:tfScan 3.4s linear infinite}
@keyframes tfScan{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
.tf-head{position:relative;z-index:4;display:flex;align-items:center;gap:6px;padding:6px 9px 5px;border-bottom:1px solid rgba(63,224,200,.13);flex-wrap:wrap}
.tf-live{display:inline-flex;align-items:center;gap:6px;font:9.5px var(--mono);letter-spacing:1px;color:var(--tf-who);font-weight:700}
.tf-live i{width:6px;height:6px;border-radius:50%;background:var(--tf-who);box-shadow:0 0 9px var(--tf-who);animation:pulse 1.15s infinite}
.tf-meta{flex:1 1 auto;min-width:60px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:9px var(--mono);color:var(--dim2)}
.tf-toggle{flex:0 0 auto;border:1px solid rgba(63,224,200,.22);background:rgba(63,224,200,.06);color:var(--tf-who);border-radius:5px;font-size:9px;padding:2px 7px}
.tf-pal{position:relative;z-index:4;display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:5px 9px;border-bottom:1px solid rgba(63,224,200,.1);font-size:9px;color:var(--dim2)}
.tf-pl{color:var(--dim2);font:9px var(--mono)}
.tf-presets{display:flex;gap:4px}
.tf-presets button{border:1px solid rgba(63,224,200,.2);border-radius:4px;padding:2px 6px;font-size:9px;color:var(--dim)}
.tf-presets button.on{border-color:var(--tf-hi);color:var(--tf-hi)}
.tf-pal label{display:inline-flex;align-items:center;gap:3px;color:var(--dim2)}
.tf-pal input[type=color]{width:17px;height:17px;border:1px solid var(--ln);border-radius:4px;padding:0;background:none;cursor:pointer}
.tf-pal input[type=range]{flex:0 0 62px;min-width:50px}
.tf-body{position:relative;z-index:3;display:flex;gap:9px;padding:7px 9px 8px;height:104px}
.tokflow.mini .tf-body,.tokflow.mini .tf-pal{display:none}
.tokflow.mini{border-color:var(--ln)}
.tf-ghost{position:absolute;left:9px;right:122px;top:6px;bottom:7px;z-index:0;overflow:hidden;pointer-events:none;opacity:.14;font:9.5px/1.85 var(--mono);color:var(--tf-who);mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
.tf-ghost i{display:block;white-space:nowrap;font-style:normal;letter-spacing:2px}
.tf-ghost i:nth-child(odd){animation:tfDrift 17s linear infinite}
.tf-ghost i:nth-child(even){animation:tfDrift 23s linear infinite reverse}
@keyframes tfDrift{0%{transform:translateX(-9%)}100%{transform:translateX(9%)}}
.tf-lines{position:relative;z-index:3;flex:1 1 auto;min-width:0;height:100%;overflow-y:auto;overflow-x:hidden;scrollbar-width:none;font:var(--tf-size)/1.7 var(--mono);display:flex;flex-direction:column;justify-content:flex-start;gap:1px}
.tf-lines::-webkit-scrollbar{display:none}
.tf-hint{color:var(--dim2);font-size:10px}
.tf-row{flex:0 0 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--tf-tx);opacity:var(--tf-bright);text-shadow:0 1px 3px rgba(0,0,0,.7);animation:tfIn .26s cubic-bezier(.2,.8,.3,1) both}
@keyframes tfIn{from{opacity:0;transform:translateY(8px)}to{opacity:var(--tf-bright);transform:translateY(0)}}
.tf-row.hot{color:var(--tf-hi)}
.tf-row.done{color:var(--tf-who)}
.tf-row.warn{color:var(--warn)}
.tf-row .tf-t{color:var(--dim2);margin-right:6px}
.tf-row .tf-w{color:var(--tf-who);margin-right:6px}
.tf-caret{display:inline-block;width:5px;height:10px;margin-left:1px;background:var(--tf-who);vertical-align:-1px;animation:tfBlink .7s steps(1) infinite}
@keyframes tfBlink{50%{opacity:0}}
.tf-side{position:relative;z-index:2;flex:0 0 108px;display:flex;flex-direction:column;justify-content:space-between;padding-left:9px;border-left:1px solid rgba(63,224,200,.13)}
.tf-num b{display:block;font:24px/1 var(--mono);font-variant-numeric:tabular-nums;color:var(--tf-who);text-shadow:0 0 16px rgba(63,224,200,.35)}
.tf-num span,.tf-mini span{display:block;font-size:8px;color:var(--dim2);letter-spacing:.6px;margin-top:3px}
.tf-mini{display:flex;gap:12px}
.tf-mini b{font:14px var(--mono);color:var(--tf-hi);font-variant-numeric:tabular-nums}
.tf-spark{display:flex;align-items:flex-end;gap:1px;height:22px}
.tf-spark i{flex:1 1 auto;min-width:1px;height:2px;border-radius:1px 1px 0 0;background:linear-gradient(180deg,var(--tf-who),rgba(63,224,200,.14));transition:height .22s}
.tokflow.full{position:fixed;inset:0;z-index:80;max-width:none;margin:0;border-radius:0;border:0;display:flex;flex-direction:column}
.tokflow.full .tf-body{flex:1 1 auto;height:auto;min-height:0}
.tokflow.full .tf-lines{font-size:calc(var(--tf-size) * 1.45);overflow-y:auto;justify-content:flex-start;white-space:pre-wrap}
.tokflow.full .tf-row{white-space:pre-wrap;overflow-wrap:anywhere}
.tokflow.full .tf-side{flex-basis:160px}
.tokflow.full .tf-num b{font-size:38px}
@media(max-width:400px){.tf-side{flex-basis:88px}.tf-num b{font-size:18px}}

/* ===== 工作台 ===== */
.ops{max-width:1180px;margin:0 auto;padding:10px 12px 70px}
.ops-top{display:flex;align-items:center;gap:10px;padding:9px 2px 10px}
.ph{display:flex;align-items:center;gap:9px;min-width:0}
.ph-i{font:11px var(--mono);color:var(--ac);border:1px solid rgba(63,224,200,.3);padding:3px 7px;border-radius:5px;flex:0 0 auto}
.ph b{display:block;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ph i{display:block;font-size:9.5px;color:var(--dim2);font-style:normal}
.ph-r{margin-left:auto;display:flex;gap:6px}
.pill{font:9px var(--mono);color:var(--dim);border:1px solid var(--ln);padding:3px 7px;border-radius:12px;white-space:nowrap}
.metrics{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.metric{background:var(--card);border:1px solid var(--ln);border-radius:9px;padding:7px 8px;min-width:0}
.metric b{display:block;font:15px var(--mono);font-variant-numeric:tabular-nums;color:var(--ac);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.metric span{display:block;font-size:8.5px;color:var(--dim2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.metric.up b{color:var(--up)}.metric.dn b{color:var(--dn)}.metric.gd b{color:var(--gold)}
@media(max-width:700px){.metrics{grid-template-columns:repeat(4,1fr)}}
.ph-bar{height:2px;background:#152436;border-radius:2px;margin:9px 0;overflow:hidden}
.ph-bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--ac),var(--ac2));transition:width .4s}
.tabs{display:flex;gap:3px;overflow-x:auto;border-bottom:1px solid var(--ln);padding-bottom:0;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tabs button{flex:0 0 auto;padding:7px 10px;font-size:10.5px;color:var(--dim);border-bottom:2px solid transparent;white-space:nowrap}
.tabs button.on{color:var(--ac);border-color:var(--ac)}
.panes{padding-top:10px}
.pane{min-height:260px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:9px}
@media(max-width:760px){.grid2{grid-template-columns:1fr}}
.pnl{background:var(--card);border:1px solid var(--ln);border-radius:11px;padding:10px;margin-bottom:9px;min-width:0}
.pnl-h{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.pnl-h b{font-size:11px}
.pnl-h span{margin-left:auto;font:9px var(--mono);color:var(--dim2);text-align:right}
canvas{display:block;width:100%;height:190px}
.events{height:170px;overflow-y:auto;font:10.5px/1.85 var(--mono)}
.ev{display:flex;gap:8px;border-bottom:1px solid rgba(28,44,64,.5);padding:2px 0}
.ev .t{color:var(--dim2);flex:0 0 54px}
.ev .w{color:var(--ac);flex:0 0 82px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ev .c{color:var(--dim);flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stages{display:flex;flex-direction:column;gap:5px}
.stg{display:flex;align-items:center;gap:8px;font-size:10.5px;padding:5px 7px;border-radius:7px;background:#0b1626;border:1px solid transparent}
.stg .n{font:9px var(--mono);color:var(--dim2);width:20px}
.stg .s{flex:1 1 auto;color:var(--dim)}
.stg .v{font:9px var(--mono);color:var(--dim2)}
.stg.on{border-color:var(--ac);background:rgba(63,224,200,.07)}
.stg.on .s{color:var(--ac)}
.stg.ok .s{color:var(--dn)}
.stg.ok .v{color:var(--dn)}
.lg-bar{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.lg-bar .txt{flex:1 1 auto}
#lgStat{font:10px var(--mono);color:var(--ac);white-space:nowrap}
.dept-strip{display:flex;gap:5px;overflow-x:auto;margin-bottom:9px;scrollbar-width:none}
.dept-strip::-webkit-scrollbar{display:none}
.dept-strip button{flex:0 0 auto;border:1px solid var(--ln);border-radius:14px;padding:4px 9px;font-size:9.5px;color:var(--dim);background:#0b1626}
.dept-strip button.on{border-color:var(--ac);color:var(--ac)}
.board{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:6px;max-height:520px;overflow-y:auto}
.ag{background:var(--card);border:1px solid var(--ln);border-radius:9px;padding:7px 8px;min-width:0}
.ag .r1{display:flex;align-items:center;gap:5px}
.ag .dot{width:6px;height:6px;border-radius:50%;background:var(--dim2);flex:0 0 6px}
.ag .nm{font-size:10.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ag .rl{margin-left:auto;font:8.5px var(--mono);color:var(--dim2);white-space:nowrap}
.ag .tk{font-size:9px;color:var(--dim2);margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ag .st{font:8.5px var(--mono);margin-top:4px;color:var(--dim2)}
.ag.working{border-color:rgba(63,224,200,.5)}.ag.working .dot{background:var(--ac);box-shadow:0 0 7px var(--ac)}
.ag.done .dot{background:var(--dn)}.ag.done .st{color:var(--dn)}
.ag.audit .rl{color:var(--gold)}.ag.turbo .rl{color:var(--ac2)}
.flow{display:flex;flex-direction:column;gap:6px;max-height:420px;overflow-y:auto}
.fl{display:flex;align-items:center;gap:8px;font-size:10.5px;padding:6px 8px;border:1px solid var(--ln);border-radius:8px;background:#0b1626}
.fl .fi{font:9px var(--mono);color:var(--ac);width:26px;flex:0 0 26px}
.fl .fn{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fl .fd{font:9px var(--mono);color:var(--dim2);max-width:38%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fl .fv{font:9px var(--mono);width:62px;text-align:right}
.fl.ok .fv{color:var(--dn)}.fl.run .fv{color:var(--ac)}.fl.wait .fv{color:var(--dim2)}
.kstat{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;font:10px var(--mono)}
.kstat div{background:#0b1626;border:1px solid var(--ln);border-radius:8px;padding:8px}
.kstat b{display:block;font-size:15px;color:var(--ac)}
.kstat span{color:var(--dim2);font-size:8.5px}
.tbl-wrap{overflow-x:auto;max-height:320px;overflow-y:auto}
.tbl{width:100%;border-collapse:collapse;font:10px var(--mono);white-space:nowrap}
.tbl th{text-align:left;color:var(--dim2);font-weight:500;padding:5px 7px;border-bottom:1px solid var(--ln);position:sticky;top:0;background:var(--card)}
.tbl td{padding:5px 7px;border-bottom:1px solid rgba(28,44,64,.55);color:var(--dim)}
.tbl td.up{color:var(--up)}.tbl td.dn{color:var(--dn)}.tbl td.hi{color:var(--ac)}
.news,.alarms{display:flex;flex-direction:column;gap:6px;max-height:260px;overflow-y:auto}
.nw{border-left:2px solid var(--ac2);padding:3px 8px;font-size:10.5px}
.nw b{display:block;color:var(--tx);font-weight:500;line-height:1.45}
.nw span{font:9px var(--mono);color:var(--dim2)}
.al{border:1px solid var(--ln);border-radius:8px;padding:7px 9px;font-size:10.5px;background:#0b1626}
.al b{color:var(--warn)}.al.ok b{color:var(--dn)}.al.bad b{color:var(--up)}
.al span{display:block;color:var(--dim2);font-size:9.5px;margin-top:2px}
.logs{font:10.5px/1.8 var(--mono);max-height:560px;overflow-y:auto;background:var(--card);border:1px solid var(--ln);border-radius:10px;padding:10px}
.lg{display:flex;gap:8px;border-bottom:1px solid rgba(28,44,64,.4);padding:2px 0}
.lg .t{color:var(--dim2);flex:0 0 62px}.lg .k{color:var(--ac);flex:0 0 52px}.lg .w{color:var(--gold);flex:0 0 88px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lg .c{color:var(--dim);flex:1 1 auto}
.report{background:#0c1622;border:1px solid var(--ln);border-radius:10px;padding:16px;font-size:12.5px;line-height:1.85;max-height:640px;overflow-y:auto}
.report h1{font-size:19px;margin:4px 0 12px}.report h2{font-size:14px;color:var(--ac);margin:18px 0 8px;border-bottom:1px solid var(--ln);padding-bottom:4px}.report h3{font-size:12.5px;color:var(--gold);margin:12px 0 5px}
.report p{margin:6px 0;color:#c6d5e6}.report table{border-collapse:collapse;width:100%;font-size:10.5px;margin:8px 0}.report th,.report td{border:1px solid var(--ln);padding:4px 7px;text-align:left}.report th{color:var(--ac);background:#101f31}
.report blockquote{border-left:2px solid var(--gold);margin:8px 0;padding:4px 10px;color:var(--dim);font-size:11px;background:#111d2b}
.empty{color:var(--dim2);font-size:11px;text-align:center;padding:30px 0}
.arc-h{display:flex;gap:8px;align-items:center;margin-bottom:7px;font-size:11px}.arc-h span{margin-left:auto;font:9px var(--mono);color:var(--dim2)}
.arc{background:#08111d;border:1px solid var(--ln);border-radius:9px;padding:12px;max-height:600px;overflow:auto;font:10.5px/1.7 var(--mono);white-space:pre-wrap;color:#a9c0d6;margin:0}
.ops-foot{position:fixed;left:0;right:0;bottom:0;z-index:25;display:flex;gap:6px;padding:8px 12px;background:rgba(8,13,20,.94);backdrop-filter:blur(12px);border-top:1px solid var(--ln)}
.of-btn{flex:1 1 auto;border:1px solid var(--ln);border-radius:8px;background:var(--card);color:var(--dim);font-size:11px;padding:9px 6px}
.of-btn:hover{color:var(--ac);border-color:var(--ac)}
.of-btn.pri{background:linear-gradient(100deg,#0f6d72,#146b9c);color:#fff;border:0}

/* ===== 设置面板 ===== */
.sheet{position:fixed;inset:0;z-index:70;visibility:hidden}
.sheet.on{visibility:visible}
.sh-mask{position:absolute;inset:0;background:rgba(2,6,12,.72);opacity:0;transition:.25s}
.sheet.on .sh-mask{opacity:1}
.sh-body{position:absolute;right:0;top:0;bottom:0;width:min(400px,92vw);background:#0c1523;border-left:1px solid var(--ln);padding:0 16px 20px;overflow-y:auto;transform:translateX(100%);transition:.28s}
.sheet.on .sh-body{transform:none}
.sh-h{display:flex;align-items:center;position:sticky;top:0;background:#0c1523;padding:14px 0 10px;border-bottom:1px solid var(--ln);z-index:2}
.sh-h b{font-size:13px}.sh-h button{margin-left:auto;font-size:22px;color:var(--dim);line-height:1}
.lbl{font-size:10.5px;color:var(--dim);margin:12px 0 5px}
.hint{display:block;font-size:9.5px;color:var(--dim2);line-height:1.6;margin-top:5px}
.btn{border:1px solid var(--ln);border-radius:8px;background:var(--card);padding:8px 11px;font-size:10.5px;color:var(--dim)}
.btn:hover{color:var(--ac);border-color:var(--ac)}
.btn.grow{display:block;width:100%}
.row{display:flex}
.hr{height:1px;background:var(--ln);margin:14px 0}

/* ===== 策略设计台 ===== */
.studio{position:fixed;inset:0;z-index:75;background:#080e18;display:flex;flex-direction:column}
.sd-top{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--ln)}
.sd-top b{font-size:13px;color:var(--ac)}
.sd-top span{font-size:10px;color:var(--dim2)}
.sd-top button{margin-left:auto;font-size:22px;color:var(--dim);line-height:1}
.sd-body{flex:1 1 auto;display:grid;grid-template-columns:330px 1fr;min-height:0;overflow:hidden}
.sd-left{padding:14px;border-right:1px solid var(--ln);overflow-y:auto}
.sd-right{display:flex;flex-direction:column;min-width:0;min-height:0}
.sd-tabs{display:flex;gap:4px;padding:8px 12px;border-bottom:1px solid var(--ln)}
.sd-tabs button{font-size:10.5px;color:var(--dim);padding:5px 10px;border-radius:6px}
.sd-tabs button.on{background:rgba(63,224,200,.12);color:var(--ac)}
.sd-view{flex:1 1 auto;overflow:auto;padding:14px;font-size:11px;line-height:1.7}
.sd-foot{display:flex;gap:6px;padding:8px 12px;border-top:1px solid var(--ln)}
.sd-note{font-size:9.5px;color:var(--dim2);line-height:1.6;margin-top:8px}
.org-dept{border:1px solid var(--ln);border-radius:9px;margin-bottom:8px;overflow:hidden}
.org-dept .oh{display:flex;gap:8px;align-items:center;padding:8px 10px;background:#101e30}
.org-dept .oh b{color:var(--ac);font-size:11px}
.org-dept .oh span{margin-left:auto;font:10px var(--mono);color:var(--gold)}
.org-dept .ob{padding:7px 10px;color:var(--dim);font-size:10px;line-height:1.7}
.org-bar{height:3px;background:#152436;border-radius:2px;margin-top:5px;overflow:hidden}
.org-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--ac),var(--ac2))}
.dag-row{display:flex;gap:8px;align-items:center;padding:6px 8px;border:1px solid var(--ln);border-radius:7px;margin-bottom:5px;font:10px var(--mono)}
.dag-row .dn2{color:var(--ac);width:26px;flex:0 0 26px}
.dag-row .dt{flex:1 1 auto;color:var(--tx)}
.dag-row .dd{color:var(--dim2);font-size:9px}
@media(max-width:780px){
  .sd-body{display:block;overflow-y:auto;grid-template-columns:none;grid-template-rows:none}
  .sd-left{border-right:0;border-bottom:1px solid var(--ln);max-height:none}
  .sd-right{display:block;min-height:0}
  .sd-tabs{position:sticky;top:0;z-index:3;background:#080e18;flex-wrap:wrap}
  .sd-view{overflow:visible;min-height:0;padding-bottom:20px}
  .as-files{max-height:none;overflow:visible}
  .sd-foot{flex-wrap:wrap;position:sticky;bottom:0;background:#080e18}
  .sd-foot .of-btn{flex:1 1 44%}
}

.toast{position:fixed;left:50%;bottom:74px;transform:translate(-50%,20px);z-index:90;background:#13263a;border:1px solid var(--ac);color:var(--tx);border-radius:9px;padding:9px 15px;font-size:11px;opacity:0;pointer-events:none;transition:.25s;max-width:88vw;text-align:center}
.toast.on{opacity:1;transform:translate(-50%,0)}
