/* 客户驾驶舱：深色数据大屏（藏青 + 香槟金），刻意只用深色。版式参考 AI认知资产的客户驾驶舱；员工在「客户驾驶舱」里可以预览。 */
@font-face{font-family:"Oxanium";font-style:normal;font-weight:600;font-display:swap;src:url(/assets/fonts/oxanium-latin-600-normal.woff2) format("woff2")}
@font-face{font-family:"Oxanium";font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/oxanium-latin-700-normal.woff2) format("woff2")}
body.bs-mode{background:#050a17}
.bs{
  --b0:#050a17; --pn:rgba(16,28,58,.66); --pn-hi:rgba(30,48,92,.5);
  --ln:rgba(217,190,133,.15); --ln2:rgba(217,190,133,.4);
  --tx:#ECF0FA; --tx2:#AAB6D2; --mu:#6E7C9E;
  --cy:#E2C68E; --bl:#7FA6FF; --vi:#a68bff; --am:#F3B858; --ro:#FF8597; --gr:#5BD6A6;
  --num:'Oxanium','DIN Alternate','DIN Condensed','Roboto Mono',ui-monospace,monospace;
  color-scheme:dark; color:var(--tx); position:relative; overflow-x:clip; min-height:100vh;
  background:
    radial-gradient(1100px 520px at 50% -8%, rgba(226,198,142,.13), transparent 62%),
    radial-gradient(800px 520px at 100% 100%, rgba(127,166,255,.11), transparent 60%),
    radial-gradient(700px 460px at 0% 70%, rgba(166,139,255,.07), transparent 60%), var(--b0);
  padding-bottom:28px;
}
.bs::before{content:"";position:absolute;inset:0;pointer-events:none;
  background-image:linear-gradient(rgba(150,170,220,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(150,170,220,.055) 1px,transparent 1px);
  background-size:44px 44px;-webkit-mask-image:radial-gradient(ellipse at 50% 30%,#000 30%,transparent 80%);mask-image:radial-gradient(ellipse at 50% 30%,#000 30%,transparent 80%)}
.bs::after{content:"";position:absolute;left:0;right:0;top:0;height:140px;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(226,198,142,.05),transparent);animation:scan 9s linear infinite}
@keyframes scan{from{transform:translateY(-140px)}to{transform:translateY(1900px)}}
.bs > *{position:relative;z-index:1}
.bs .n{font-family:var(--num);font-variant-numeric:tabular-nums;letter-spacing:.01em}

/* 顶栏 */
.bs-head{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:12px 20px;padding:12px 22px 0}
.bh-l{display:flex;align-items:center;gap:12px;min-width:0;flex-wrap:wrap}
.bh-l .lg{display:flex;align-items:center;gap:9px}
.bh-l .lg b{display:block;font-size:14px;font-weight:600}
.bh-l .lg span{display:block;font-size:11.5px;color:var(--mu)}
.bh-nav{display:flex;gap:4px;margin-left:10px}
.bh-nav a{font-size:13px;color:var(--tx2);text-decoration:none;padding:5px 12px;border:1px solid transparent;border-radius:4px}
.bh-nav a.on{color:var(--cy);border-color:rgba(226,198,142,.45);background:rgba(226,198,142,.08);box-shadow:inset 0 0 12px rgba(226,198,142,.15)}
.bh-c{text-align:center;position:relative;padding:4px 64px 12px}
.bh-c .en{font-family:var(--num);font-size:11px;letter-spacing:.42em;color:var(--cy);opacity:.75}
.bh-c h1{font-size:28px;font-weight:700;letter-spacing:.08em;margin:2px 0 0;line-height:1.25;text-wrap:balance;
  background:linear-gradient(180deg,#ffffff 20%,#F1DDAE);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:0 0 24px rgba(127,166,255,.25)}
.bh-c::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:linear-gradient(90deg,transparent,var(--cy) 30%,var(--bl) 70%,transparent);box-shadow:0 0 12px var(--cy)}
.bh-c::before{content:"";position:absolute;left:18%;right:18%;bottom:-5px;height:5px;background:linear-gradient(90deg,transparent,rgba(226,198,142,.6),transparent);filter:blur(3px)}
.bh-r{display:flex;justify-content:flex-end;align-items:center;gap:14px;flex-wrap:wrap}
.clock{text-align:right;line-height:1.15}
.clock b{display:block;font-family:var(--num);font-size:22px;font-weight:600;color:#fff;letter-spacing:.06em}
.clock span{font-size:11.5px;color:var(--mu)}
.live{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--gr);border:1px solid rgba(91,214,166,.35);background:rgba(91,214,166,.08);border-radius:3px;padding:4px 10px}
.live i{width:8px;height:8px;border-radius:50%;background:var(--gr);box-shadow:0 0 8px var(--gr);animation:blink 1.2s ease-in-out infinite}
@keyframes blink{50%{opacity:.2}}
.pseg{display:inline-flex;border:1px solid var(--ln2);border-radius:3px;overflow:hidden}
.pseg button{font:inherit;font-size:12.5px;border:0;background:transparent;color:var(--tx2);padding:5px 12px;cursor:pointer}
.pseg button+button{border-left:1px solid var(--ln)}
.pseg button.on{background:linear-gradient(180deg,rgba(226,198,142,.32),rgba(226,198,142,.12));color:#fff;text-shadow:0 0 8px var(--cy)}
.bs button:focus-visible,.bs a:focus-visible{outline:2px solid var(--cy);outline-offset:2px}

/* 信息条 + 滚动快讯 */
.bs-sub{display:flex;justify-content:space-between;align-items:center;gap:10px 18px;flex-wrap:wrap;padding:10px 22px 0;font-size:12.5px;color:var(--tx2)}
.bs-sub b{color:#fff;font-family:var(--num);font-weight:600}
.bs-sub .stp{display:flex;gap:18px;flex-wrap:wrap}
.ticker{display:flex;align-items:center;gap:0;margin:10px 22px 0;border:1px solid var(--ln);background:rgba(12,22,46,.72);height:32px;overflow:hidden}
.ticker .tl{flex:none;font-family:var(--num);font-size:11.5px;font-weight:700;letter-spacing:.2em;color:#1A1405;background:var(--cy);height:100%;display:flex;align-items:center;padding:0 12px;box-shadow:0 0 14px rgba(226,198,142,.5)}
.ticker .tw{flex:1;min-width:0;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent);mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent)}
.ticker .tr{display:inline-flex;gap:44px;white-space:nowrap;font-size:13px;color:var(--tx2);animation:marq var(--dur,60s) linear infinite;padding-left:20px}
.ticker .tr span b{font-family:var(--num);color:var(--cy);margin-right:8px;font-weight:600}
.ticker .tr span em{font-style:normal;font-family:var(--num);color:var(--am);margin-left:6px}
@keyframes marq{to{transform:translateX(-50%)}}

/* v160：一张网格排版，同一行的面板等高，上下边对齐。宽屏四栏 / 窄一些的电脑三栏见文件后部「四栏」 */
.bs-main{display:grid;grid-template-columns:420px minmax(0,1fr) 380px;gap:14px;padding:14px 22px 0;align-items:stretch;
  grid-template-areas:"gauge radar feed" "kpi radar feed" "plat radar prog" "heat trend prog" "imp imp imp"}
.a-gauge{grid-area:gauge}.a-kpi{grid-area:kpi}.a-plat{grid-area:plat}.a-heat{grid-area:heat}.a-radar{grid-area:radar}.a-trend{grid-area:trend}.a-feed{grid-area:feed}.a-prog{grid-area:prog}.a-imp{grid-area:imp}
.bs-main > .pn{display:flex;flex-direction:column}
.a-gauge .ggauge,.a-radar .orb-wrap{flex:1;display:flex;flex-direction:column;justify-content:center}
.a-trend .trend{flex:1;display:flex;align-items:center}
.a-trend .trend svg{flex:1}
.a-plat .plat{flex:1;align-content:space-evenly}
.a-heat .heat{flex:1;align-content:center}
.a-kpi .leds{flex:1;grid-auto-rows:1fr}
.a-feed .wfeed{flex:1 1 0;min-height:300px;max-height:none;contain:size}
.a-prog .oprog{flex:1;align-content:space-between}
.pn{position:relative;background:linear-gradient(180deg,var(--pn-hi),var(--pn) 40%);border:1px solid var(--ln);padding:12px 14px 14px;min-width:0;backdrop-filter:blur(2px)}
.pn::before,.pn::after{content:"";position:absolute;width:12px;height:12px;border:2px solid var(--cy);pointer-events:none;filter:drop-shadow(0 0 4px var(--cy))}
.pn::before{left:-1px;top:-1px;border-right:0;border-bottom:0}
.pn::after{right:-1px;bottom:-1px;border-left:0;border-top:0}
.ph{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--ln)}
.ph h2{font-size:14.5px;font-weight:600;display:flex;align-items:center;gap:8px;margin:0;letter-spacing:.04em}
.ph h2::before{content:"";width:4px;height:14px;background:linear-gradient(var(--cy),var(--bl));box-shadow:0 0 8px var(--cy)}
.ph small{font-family:var(--num);font-size:10.5px;letter-spacing:.16em;color:var(--mu);text-transform:uppercase}
.ph .phint{font-family:inherit;letter-spacing:0;text-transform:none;font-size:11.5px}

/* 指数仪表 */
.ggauge svg{display:block;width:100%;max-width:290px;height:auto;margin:0 auto;overflow:visible}
.g-mini{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-top:4px;text-align:center}
.g-mini div{border:1px solid var(--ln);background:rgba(8,16,36,.55);padding:6px 4px}
.g-mini span{display:block;font-size:11px;color:var(--mu)}
.g-mini b{font-family:var(--num);font-size:17px;font-weight:600}
.spin{transform-box:view-box;animation:spin 40s linear infinite}
.spin.rev{animation-duration:70s;animation-direction:reverse}
@keyframes spin{to{transform:rotate(360deg)}}

/* 数字牌 */
.leds{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.led{border:1px solid var(--ln);background:linear-gradient(180deg,rgba(226,198,142,.07),rgba(8,16,36,.5));padding:9px 11px;display:grid;gap:2px;min-width:0;position:relative;overflow:hidden}
.led .k{font-size:12px;color:var(--tx2)}
.led .v{display:flex;align-items:baseline;gap:4px}
.led .v b{font-family:var(--num);font-size:32px;font-weight:700;line-height:1.1;color:#fff;text-shadow:0 0 14px rgba(226,198,142,.55);font-variant-numeric:tabular-nums}
.led .v small{font-family:var(--num);font-size:13px;color:var(--mu)}
.led .d{font-size:11.5px;color:var(--mu)}
.led .d i{font-style:normal;font-family:var(--num);color:var(--gr);font-weight:600;margin-right:4px}
.led.bump{animation:bump .9s ease-out}
.led.bump .v b{color:var(--am);text-shadow:0 0 18px var(--am)}
@keyframes bump{0%{box-shadow:inset 0 0 0 1px var(--am),0 0 18px rgba(243,184,88,.5)}100%{box-shadow:none}}

/* 平台 */
.plat{display:grid;gap:9px}
.plat .pr{display:grid;grid-template-columns:62px minmax(0,1fr) 74px;gap:8px;align-items:center;font-size:12.5px}
.plat .tr{position:relative;height:9px;background:rgba(127,166,255,.1);border:1px solid rgba(127,166,255,.18)}
.plat .tr i{position:absolute;left:0;top:0;bottom:0;width:0;background:linear-gradient(90deg,rgba(127,166,255,.5),var(--cy));box-shadow:0 0 10px rgba(226,198,142,.5);transition:width 1.4s cubic-bezier(.2,.7,.2,1)}
.plat .tr s{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--tx2);opacity:.7}
.plat .vv{text-align:right;font-family:var(--num);font-size:13px}
.plat .vv b{color:#fff;font-weight:600}
.plat .vv em{font-style:normal;color:var(--gr);font-size:11.5px;margin-left:4px}
.plat-note{display:flex;gap:14px;font-size:11px;color:var(--mu);margin-top:8px}
.plat-note i{display:inline-block;width:12px;height:6px;vertical-align:middle;margin-right:4px;background:linear-gradient(90deg,rgba(127,166,255,.5),var(--cy))}
.plat-note s{display:inline-block;width:2px;height:10px;vertical-align:middle;margin-right:4px;background:var(--tx2)}

/* 热力 */
.heat{display:grid;grid-template-columns:40px repeat(7,minmax(0,1fr));gap:4px;align-items:center}
.heat .rl{font-family:var(--num);font-size:10.5px;color:var(--mu)}
.heat .hc{aspect-ratio:1.5;max-width:100%;border:1px solid rgba(226,198,142,.12);background:rgba(226,198,142,.04);transition:opacity .3s;position:relative;display:flex;align-items:center;justify-content:center;font-family:var(--num);font-size:10.5px;color:rgba(255,255,255,.0)}
.heat .hc:hover{color:#fff}
.heat .l1{background:rgba(226,198,142,.16)}.heat .l2{background:rgba(226,198,142,.32)}.heat .l3{background:rgba(226,198,142,.55)}.heat .l4{background:rgba(226,198,142,.85);box-shadow:0 0 8px rgba(226,198,142,.6)}
.heat .out{opacity:.25}
.heat .today{outline:2px solid var(--am);outline-offset:1px;animation:tpulse 1.6s ease-in-out infinite}
@keyframes tpulse{50%{outline-color:rgba(243,184,88,.25)}}
.heat-ft{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px;font-size:11.5px;color:var(--mu)}
.heat-ft b{font-family:var(--num);color:#fff;font-weight:600}
.hlg{display:inline-flex;gap:3px;align-items:center}
.hlg i{width:11px;height:8px;border:1px solid rgba(226,198,142,.12)}

/* 联动雷达 */
.orb-wrap{position:relative}
.orb svg{display:block;width:100%;max-width:740px;height:auto;margin:0 auto;overflow:visible}
.orb text{font-family:system-ui,-apple-system,"PingFang SC","Microsoft YaHei",sans-serif}
.o-ring{fill:none;stroke:rgba(127,166,255,.22);stroke-width:1}
.o-axis{stroke:rgba(127,166,255,.18);stroke-width:1}
.o-base{fill:none;stroke:#8EA0C6;stroke-width:1.4;stroke-dasharray:4 4;opacity:.75}
.o-cur{fill:url(#polyfill);stroke:var(--cy);stroke-width:2.2}
.o-link{fill:none;stroke:rgba(150,175,230,.09);stroke-width:1;transition:stroke .3s,stroke-width .3s,opacity .3s}
.o-link.on{stroke-width:1.6;stroke-dasharray:5 6;animation:flow 1.2s linear infinite}
@keyframes flow{to{stroke-dashoffset:-22}}
.o-link.fade{opacity:.25}
.d-lbl{font-size:13px;fill:var(--tx);text-anchor:middle;font-weight:600;cursor:pointer;transition:fill .3s,opacity .3s}
.d-num{font-family:var(--num)!important;font-size:11.5px;fill:var(--tx2);text-anchor:middle;cursor:pointer}
.d-num tspan.up{fill:var(--gr)}
.d-hit{fill:transparent;cursor:pointer}
.d-lbl.hi{fill:var(--cy)}
.dim-off{opacity:.28}
.d-dot{transition:opacity .3s}
.o-chip rect{transition:fill .3s,stroke-width .3s}
.o-chip{cursor:pointer;transition:opacity .3s}
.o-chip text{font-family:var(--num)!important;font-size:12.5px;font-weight:700;text-anchor:middle;dominant-baseline:central;letter-spacing:.04em}
.o-chip.off{opacity:.35}
.d-g:focus,.o-chip:focus{outline:none}
.d-g:focus-visible .d-lbl,.o-chip:focus-visible rect{stroke:#fff;stroke-width:1.5}
.o-chip.dimmed{opacity:.22}
.o-chip.hi rect{stroke-width:2.4}
.orbit{fill:none;stroke:rgba(226,198,142,.28);stroke-width:1;stroke-dasharray:2 7}
.tickring line{stroke:rgba(127,166,255,.3);stroke-width:1}
.sweep{transform-box:view-box;transform-origin:340px 340px;animation:spin 5.5s linear infinite}
.prt{pointer-events:none}
.pring{fill:none;stroke-width:2;pointer-events:none;transform-box:view-box;animation:pring 1s ease-out forwards}
@keyframes pring{from{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(3.4)}}
.glegend{display:flex;gap:10px 14px;flex-wrap:wrap;font-size:11.5px;color:var(--tx2)}
.glegend i{display:inline-block;width:9px;height:9px;margin-right:5px;vertical-align:-1px;background:currentColor;box-shadow:0 0 6px currentColor}
.orb-foot{display:flex;justify-content:space-between;align-items:flex-end;gap:10px 16px;flex-wrap:wrap;margin-top:-14px}
.dimcard{max-width:340px;min-height:62px;border:1px solid var(--ln2);background:rgba(8,16,38,.88);padding:10px 12px;font-size:12.5px;color:var(--tx2);display:grid;gap:5px;box-shadow:0 0 22px rgba(226,198,142,.12)}
.dimcard h3{margin:0;font-size:14px;color:#fff;display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}
.dimcard h3 .n{color:var(--cy);font-size:18px}
.dimcard .chips{display:flex;flex-wrap:wrap;gap:4px}
.dimcard .chips span{font-family:var(--num);font-size:11px;font-weight:600;padding:1px 6px;border:1px solid currentColor}
.dimcard button{all:unset;cursor:pointer;color:var(--cy);font-size:12px;text-decoration:underline;justify-self:start}
.orb-keys{text-align:right;font-size:11.5px;color:var(--mu);line-height:1.6}
.orb-keys i{display:inline-block;width:16px;height:0;border-top:2px solid var(--cy);vertical-align:middle;margin-right:5px}
.orb-keys i.b{border-top:1.5px dashed #8EA0C6}

/* 趋势 */
.trend svg{display:block;width:100%;height:auto;overflow:visible}
.trend text{font-family:var(--num)}
.trend .zh{font-family:system-ui,-apple-system,"PingFang SC","Microsoft YaHei",sans-serif}

/* 工作流 */
.wfeed{list-style:none;margin:0;padding:0;max-height:430px;overflow:auto;scrollbar-width:thin;scrollbar-color:rgba(127,166,255,.3) transparent}
.wfeed li{display:grid;grid-template-columns:44px 46px minmax(0,1fr) 34px;gap:8px;align-items:start;padding:8px 2px;border-bottom:1px dashed rgba(127,166,255,.14);font-size:12.5px;line-height:1.5}
.wfeed .ft{font-family:var(--num);font-size:12px;color:var(--mu);padding-top:1px}
.wfeed .ft.td{color:var(--cy)}
.wfeed .fo{font-family:var(--num);font-size:11px;font-weight:700;text-align:center;border:1px solid currentColor;padding:0 3px;height:max-content;letter-spacing:.04em}
.wfeed .fx{min-width:0;color:var(--tx);white-space:normal;overflow-wrap:anywhere}
.wfeed .fx small{display:block;color:var(--mu);font-size:11.5px}
.wfeed .fn{font-family:var(--num);font-weight:600;color:var(--am);text-align:right}
.wfeed li.new{animation:fin 1.4s ease-out;background:linear-gradient(90deg,rgba(243,184,88,.16),transparent 85%)}
@keyframes fin{0%{transform:translateX(30px);opacity:0;background:rgba(243,184,88,.35)}25%{transform:none;opacity:1}}
.wfeed .none{display:block;color:var(--mu);padding:16px 2px;border:0}
.fstat{display:flex;gap:6px;align-items:center;font-size:11.5px;color:var(--gr)}
.fstat i{width:6px;height:6px;border-radius:50%;background:var(--gr);box-shadow:0 0 6px var(--gr);animation:blink 1s infinite}
.fsel{font-size:12px;color:var(--cy);display:flex;gap:8px;align-items:center}
.fsel button{all:unset;cursor:pointer;color:var(--tx2);text-decoration:underline}

/* 八项优化进度 */
.oprog{display:grid;gap:3px}
.orow{all:unset;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:46px minmax(0,1fr) 62px;gap:4px 8px;align-items:center;padding:5px 6px;border:1px solid transparent;transition:background .2s,border-color .2s}
.orow:hover{background:rgba(127,166,255,.07)}
.orow.on{border-color:var(--cy);background:rgba(226,198,142,.08)}
.orow.flash{animation:oflash 1.2s ease-out}
@keyframes oflash{0%{background:rgba(243,184,88,.3)}100%{background:transparent}}
.orow .oc{font-family:var(--num);font-size:11.5px;font-weight:700;letter-spacing:.04em}
.orow .on2{font-size:12.5px;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.orow .ov{font-family:var(--num);font-size:12px;color:var(--tx2);text-align:right}
.orow .ov b{color:#fff;font-weight:600}
.orow .ob{grid-column:2/4;height:4px;background:rgba(127,166,255,.12);position:relative;overflow:hidden}
.orow .ob i{position:absolute;inset:0 auto 0 0;width:0;transition:width 1.1s cubic-bezier(.2,.7,.2,1)}
.orow .ob i::after{content:"";position:absolute;right:0;top:-2px;bottom:-2px;width:3px;background:#fff;box-shadow:0 0 8px #fff}
.orow.off{opacity:.42}
.orow.off .ob i::after{display:none}

/* 改善 */
.imp{list-style:none;margin:0;padding:0;display:grid;gap:9px}
.imp li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 10px;font-size:12.5px;color:var(--tx)}
.a-imp .imp{grid-template-columns:repeat(3,minmax(0,1fr));column-gap:36px;row-gap:12px}
.a-imp .imp li.bs-empty{grid-column:1/-1}
.imp .tg{font-family:var(--num);font-size:11px;color:var(--mu);margin-right:6px}
.imp .fr{font-family:var(--num);font-size:12.5px;color:var(--mu);text-align:right}
.imp .fr b{color:var(--gr);font-weight:600;font-size:14px}
.imp .mb{grid-column:1/-1;height:3px;background:rgba(91,214,166,.12);position:relative}
.imp .mb s{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--mu)}
.imp .mb i{position:absolute;left:0;top:0;bottom:0;width:0;background:linear-gradient(90deg,rgba(91,214,166,.35),var(--gr));box-shadow:0 0 6px rgba(91,214,166,.6);transition:width 1.4s ease}

/* 四栏（v171，按前台大屏视频的排法）：指数·核心数据·提及率 | 雷达·走势 | 实时工作流·已改善的指标 | 执行进度·交付热力。
   屏幕宽 1800 以上用（再窄雷达太小，仍用三栏）；页面比三栏短很多，大屏上一屏放下 */
@media (min-width:1800px){
  .bs-main{grid-template-columns:440px minmax(0,1fr) 420px 370px;grid-template-rows:auto auto minmax(0,1fr) auto;
    grid-template-areas:"gauge radar feed prog" "kpi radar feed prog" "plat radar imp heat" "plat trend imp heat"}
  .a-imp .imp{grid-template-columns:minmax(0,1fr);row-gap:14px;flex:1;align-content:space-evenly}
  .orb svg{max-width:min(740px,calc(100vh - 330px))}
  .orb-foot{min-height:162px}   /* 预留选中某度 / 某项优化时说明卡的高度，点选时下面的面板不跳动 */
}
@media (max-width:1280px){
  .bs-main{grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-areas:"radar radar" "gauge kpi" "feed prog" "plat heat" "trend trend" "imp imp"}
  .a-imp .imp{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:900px){
  .bs-head{grid-template-columns:minmax(0,1fr)}
  .bh-c{order:-1;padding:4px 0 10px}.bh-l,.bh-r{justify-content:space-between}
  .bh-c h1{font-size:22px}
  .bs-main{grid-template-columns:minmax(0,1fr);grid-template-areas:"gauge" "kpi" "radar" "feed" "prog" "trend" "plat" "heat" "imp"}
  .a-imp .imp{grid-template-columns:minmax(0,1fr)}
  .a-feed .wfeed{flex:none;contain:none;max-height:430px;min-height:0}
}
@media (max-width:640px){
  .bs-head,.bs-sub{padding-left:16px;padding-right:16px}
  .ticker{margin-left:16px;margin-right:16px}
  .bs-main{padding-left:16px;padding-right:16px}
  .bh-nav{margin-left:0}
  .clock b{font-size:18px}
  .orb-foot{margin-top:4px}.dimcard{max-width:none;width:100%}
  .orb-keys{text-align:left}
  .d-lbl{font-size:21px}.d-num{font-size:16px;transform:translateY(8px)}.o-chip text{font-size:17px}
  .trend{overflow-x:auto}.trend svg{min-width:560px}
  .wfeed li{grid-template-columns:42px minmax(0,1fr) 30px}
  .wfeed .fo{grid-column:2;justify-self:start;grid-row:1}
  .wfeed .fx{grid-column:2}
  .wfeed .fn{grid-column:3;grid-row:1}
}
@media (prefers-reduced-motion:reduce){
  .bs::after,.spin,.sweep,.ticker .tr,.live i,.fstat i,.heat .today,.o-link.on{animation:none}
}


/* v159 正式版补充 */
.bs h1,.bs h2,.bs h3{font-family:inherit}
.bs a{color:inherit}
.bh-nav button{all:unset;cursor:pointer;font-size:13px;color:var(--tx2);padding:5px 12px;border:1px solid transparent;border-radius:4px}
.bh-nav button:hover,.bh-nav a:hover{color:#fff}
.bs-prev{display:flex;justify-content:space-between;align-items:center;gap:8px 16px;flex-wrap:wrap;background:rgba(243,184,88,.12);border-bottom:1px solid rgba(243,184,88,.35);color:var(--am);font-size:13px;padding:8px 22px}
.bs-prev a{color:#fff}
.bs-prev-a{display:flex;gap:18px}
.bs-empty{color:var(--mu);font-size:12.5px;padding:14px 2px;line-height:1.7}
.d-lbl.na{fill:var(--mu)}
.bs-load{color:var(--tx2);padding:80px 22px;text-align:center}
.orow .ov small{color:var(--mu);font-size:11px;margin-left:2px}
@media (max-width:640px){.bs-prev{padding:8px 16px}}
.imp li > span:first-child{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.imp .fr{white-space:nowrap}

/* 一屏模式（v172，Ray 10-15：驾驶舱要和前台大屏视频一样一屏放下）：cockpit.js 判断窗口够大时给 .bs 加 .fit，
   按至少 2240×1260、长宽比与窗口一致的画布四栏排好，再整体缩放铺满窗口；窗口太小时不加 .fit，仍用上面的四栏 / 三栏 / 手机滚动排版 */
body.bs-mode.bs-fitmode{overflow:hidden}
.bs.fit{position:fixed;left:0;top:0;width:var(--cw,2240px);height:var(--ch,1260px);min-height:0;transform:scale(var(--fs,1));transform-origin:0 0;
  display:flex;flex-direction:column;padding-bottom:0;overflow:hidden}
.bs.fit > .bs-main{flex:1;min-height:0;padding-bottom:20px;grid-template-columns:450px minmax(0,1fr) 420px 380px;grid-template-rows:404px 280px minmax(0,1fr) 324px;
  grid-template-areas:"gauge radar feed prog" "kpi radar feed prog" "plat radar imp heat" "plat trend imp heat"}
.bs.fit .a-imp .imp{grid-template-columns:minmax(0,1fr);row-gap:14px;flex:1;align-content:space-evenly}
/* 一屏模式下雷达铺满面板（v173 / v174）：说明卡和图例放雷达右侧一栏；cockpit.js 按面板长宽比加宽雷达画布，
   外圈十二项优化排成横向椭圆、内圈雷达放大，屏幕越宽画布越宽，始终填满雷达框 */
.bs.fit .a-radar .orb-wrap{flex-direction:row;align-items:stretch;gap:10px;min-height:0}
.bs.fit .orb{flex:1;min-width:0;min-height:0;display:flex;align-items:center;justify-content:center}
.bs.fit .orb svg{width:100%;height:100%;max-width:none;max-height:none;margin:0}
.bs.fit .orb-foot{flex:none;width:270px;flex-direction:column;flex-wrap:nowrap;justify-content:flex-end;align-items:stretch;margin-top:0}
.bs.fit .dimcard{max-width:none}
.bs.fit .orb-keys{text-align:left}
.bs.fit .a-feed .wfeed{min-height:0}

/* 声誉版补充：70 分达标环、辅助作用连线、下降数值、热力图例 */
.o-ref{fill:none;stroke:rgba(91,214,166,.45);stroke-width:1;stroke-dasharray:3 5}
.o-link.aux{stroke-dasharray:2 5}
.o-link.aux.on{stroke-dasharray:3 6;stroke-width:1.2}
.d-num tspan.dn{fill:var(--ro)}
.hlg i.l1{background:rgba(226,198,142,.16)}.hlg i.l2{background:rgba(226,198,142,.32)}.hlg i.l3{background:rgba(226,198,142,.55)}.hlg i.l4{background:rgba(226,198,142,.85)}
.wfeed li{grid-template-columns:44px 50px minmax(0,1fr) 58px}
.wfeed .fn{font-family:inherit;font-size:11.5px;white-space:nowrap}
.bh-nav button.out{color:var(--mu)}
@media (max-width:640px){
  .wfeed li{grid-template-columns:42px minmax(0,1fr) 56px}
}
.plat-note{flex-wrap:wrap;gap:4px 14px}
.plat-note span{white-space:nowrap}
.plat-note span:last-child{white-space:normal;flex-basis:100%}

/* 左侧三块加宽后：仪表、数字牌、平台条随宽度放大 */
.ggauge svg{max-width:310px}
.led .v b{font-size:34px}
.plat .pr{grid-template-columns:76px minmax(0,1fr) 84px;font-size:13px}

/* 一屏模式：八度雷达画成正圆并铺满面板高度；说明卡和图例浮在面板右下角，不再单独占一栏 */
.bs.fit .a-radar .orb-wrap{display:block;position:relative;min-height:0}
.bs.fit .orb{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}
.bs.fit .orb svg{width:auto;height:100%;max-width:100%;aspect-ratio:1}
.bs.fit .orb-foot{position:absolute;right:0;bottom:0;width:270px;z-index:2}
