/* ===== 恒纳智能工作台数据大屏 · 深蓝科技风 =====
   v6.3 容器化改造：全部样式限定在 .stage / #mapOverlay / #stip 作用域内，
   既支持独立大屏页（screen/index.html），也可被克隆进工作台 #v-screen 视图。
   所有类选择器一律带 .stage / #mapOverlay 前缀，严禁外泄到宿主页面。
   本文件占用全局 @keyframes：rise / sweep / glide / flyflow / pulse（与 app.css 的 breath/fade/popin 无冲突）。 */
.stage,#mapOverlay,#stip{
  --bg-0:#030a1c; --bg-1:#071634; --bg-2:#0a1f4b;
  --panel:rgba(9,28,66,.66); --panel-line:rgba(0,229,255,.16);
  --cyan:#00e5ff; --cyan-dim:rgba(0,229,255,.55);
  --gold:#ffb74a; --green:#35e0a1; --red:#ff5d6c; --blue:#4f8bff; --purple:#a78bfa;
  --txt:#d8ecff; --txt-dim:#7fa8d4; --num:#eaf8ff;
}
.stage *,#mapOverlay *,#stip{margin:0; padding:0; box-sizing:border-box}
.stage{ /* 原 body 级样式已容器化（独立页的 html,body 设置见 index.html 内联样式） */
  position:relative; overflow:hidden; height:100%;
  font-family:"Microsoft YaHei","PingFang SC",sans-serif; color:var(--txt);
  display:flex; flex-direction:column; padding:10px 14px 12px; gap:10px;
  background:
    radial-gradient(1100px 600px at 50% -10%, #0e2a63 0%, transparent 60%),
    radial-gradient(900px 500px at 100% 100%, #0a1f4b 0%, transparent 55%),
    linear-gradient(180deg, var(--bg-1), var(--bg-0));
}
.stage::before{ /* 网格底纹（原 body::before，fixed 改 absolute 限定在容器内） */
  content:''; position:absolute; inset:0; pointer-events:none; opacity:.35;
  background-image:linear-gradient(rgba(0,229,255,.05) 1px, transparent 1px),
                   linear-gradient(90deg, rgba(0,229,255,.05) 1px, transparent 1px);
  background-size:42px 42px;
}

/* ===== 面板通用：角框 + 微光 ===== */
.stage .panel{
  position:relative; background:linear-gradient(160deg, rgba(0,229,255,.06), transparent 38%), var(--panel);
  border:1px solid var(--panel-line); padding:10px 12px; min-height:0;
  animation:rise .7s calc(var(--i,0)*.09s) both;
}
.stage .panel::before,.stage .panel::after,
.stage .panel .p-head::before,.stage .panel .p-head::after{ /* 四角 L 框 */
  content:''; position:absolute; width:14px; height:14px; pointer-events:none;
}
.stage .panel::before{left:-1px; top:-1px; border-left:2px solid var(--cyan); border-top:2px solid var(--cyan)}
.stage .panel::after{right:-1px; top:-1px; border-right:2px solid var(--cyan); border-top:2px solid var(--cyan)}
.stage .panel .p-head::before{left:-1px; bottom:-1px; border-left:2px solid var(--cyan); border-bottom:2px solid var(--cyan)}
.stage .panel .p-head::after{right:-1px; bottom:-1px; border-right:2px solid var(--cyan); border-bottom:2px solid var(--cyan)}
@keyframes rise{from{opacity:0; transform:translateY(14px)} to{opacity:1; transform:none}}
.stage .p-head{display:flex; align-items:center; justify-content:space-between; margin-bottom:8px}
.stage .p-head h2{font-size:clamp(13px,.85vw,16px); letter-spacing:2px; color:var(--num); font-weight:700;
  padding-left:9px; border-left:3px solid var(--cyan); text-shadow:0 0 12px rgba(0,229,255,.5)}
.stage .p-tag{font-size:10.5px; color:var(--cyan-dim); letter-spacing:1px}

/* ===== 顶部标题栏 ===== */
.stage .top-bar{position:relative; height:56px; flex:none; display:flex; align-items:center; justify-content:space-between; padding:0 8px;
  background:linear-gradient(180deg, rgba(0,229,255,.10), rgba(0,229,255,.02));
  border:1px solid var(--panel-line);
  clip-path:polygon(0 0,100% 0,100% 62%,96% 100%,4% 100%,0 62%);
  animation:rise .6s both}
.stage .tb-title{position:absolute; left:50%; transform:translateX(-50%); font-size:clamp(20px,1.7vw,30px); letter-spacing:5px; font-weight:800; white-space:nowrap;
  background:linear-gradient(90deg,#7fdcff 0%,#eaf8ff 30%,#00e5ff 50%,#eaf8ff 70%,#7fdcff 100%);
  background-size:220% 100%; -webkit-background-clip:text; background-clip:text; color:transparent;
  animation:sweep 5s linear infinite; text-shadow:none}
@keyframes sweep{to{background-position:220% 0}}
.stage .tb-side{display:flex; align-items:baseline; gap:10px; z-index:1}
.stage .tb-chip{font-size:11px; letter-spacing:2px; color:var(--bg-0); background:var(--cyan); padding:2px 8px; font-weight:800; box-shadow:0 0 14px rgba(0,229,255,.6)}
.stage .tb-sub{font-size:10.5px; letter-spacing:3px; color:var(--txt-dim)}
.stage .tb-exit{ /* 嵌入工作台时的退出全屏按钮（独立页默认隐藏，由宿主 app.css 在大屏态显示） */
  display:none; align-items:center; font-family:inherit; font-size:11.5px; letter-spacing:1px; cursor:pointer;
  color:var(--cyan); background:rgba(0,229,255,.08); border:1px solid var(--cyan-dim); border-radius:4px; padding:3px 10px;
  transition:background .15s, box-shadow .15s}
.stage .tb-exit:hover{background:rgba(0,229,255,.2); box-shadow:0 0 10px rgba(0,229,255,.35)}
.stage .tb-right{flex-direction:column; align-items:flex-end; gap:1px}
.stage .tb-date{font-size:11px; color:var(--txt-dim)}
.stage .tb-time{font-size:19px; color:var(--cyan); font-weight:700; letter-spacing:3px; text-shadow:0 0 14px rgba(0,229,255,.7); font-variant-numeric:tabular-nums}

/* ===== 主网格 ===== */
.stage .grid-main{flex:1; min-height:0; display:grid; grid-template-columns:24% 1fr 24%; gap:10px}
.stage .col{display:flex; flex-direction:column; gap:10px; min-height:0}
.stage .grow{flex:1}

/* 左列：业务完成情况表 */
.stage .biz-table{width:100%; border-collapse:collapse; font-size:clamp(11px,.8vw,13.5px)}
.stage .biz-table th{color:var(--txt-dim); font-weight:400; text-align:left; padding:4px 6px; border-bottom:1px solid var(--panel-line); letter-spacing:1px}
.stage .biz-table td{padding:7px 6px; border-bottom:1px dashed rgba(0,229,255,.10); color:var(--num)}
.stage .biz-table td:nth-child(n+2){font-variant-numeric:tabular-nums; text-align:right}
.stage .biz-table tr{position:relative}
.stage .biz-table tbody tr:hover td{background:linear-gradient(90deg, rgba(0,229,255,.12), transparent); color:#fff}
.stage .biz-table .rate{font-weight:700}
.stage .rate.up{color:var(--green)} .stage .rate.mid{color:var(--gold)} .stage .rate.down{color:var(--red)}

/* 左列：雷达 */
.stage .radar-wrap{display:flex; align-items:center; gap:8px; height:calc(100% - 30px)}
.stage .radar-wrap svg{flex:1.2; height:100%; min-height:0}
.stage .radar-side{flex:1; display:flex; flex-direction:column; gap:8px}
.stage .r-card{background:rgba(0,229,255,.06); border:1px solid var(--panel-line); padding:7px 10px}
.stage .r-card small{display:block; font-size:10.5px; color:var(--txt-dim); letter-spacing:1px}
.stage .r-card b{font-size:clamp(16px,1.2vw,22px); color:var(--num); font-variant-numeric:tabular-nums; text-shadow:0 0 10px rgba(0,229,255,.4)}
.stage .r-card b em{font-style:normal; font-size:11px; color:var(--cyan); margin-left:3px}

/* 中列 KPI 卡（.stage .kpi 显式 display:block，抵消宿主 app.css .kpi 网格渗透，且不外泄） */
.stage .kpi-row{flex:none; display:grid; grid-template-columns:repeat(4,1fr); gap:10px}
.stage .kpi{display:block; position:relative; padding:10px 12px 9px; background:linear-gradient(160deg, rgba(0,229,255,.10), rgba(9,28,66,.66) 45%);
  border:1px solid var(--panel-line); overflow:hidden}
.stage .kpi::after{content:''; position:absolute; top:0; left:-60%; width:45%; height:100%; transform:skewX(-22deg);
  background:linear-gradient(90deg, transparent, rgba(0,229,255,.14), transparent); animation:glide 3.6s ease-in-out infinite; animation-delay:var(--k,0s)}
@keyframes glide{0%,55%{left:-60%} 90%,100%{left:130%}}
.stage .kpi small{font-size:clamp(10.5px,.78vw,12.5px); color:var(--txt-dim); letter-spacing:1px; display:block}
.stage .kpi .v{font-size:clamp(19px,1.55vw,28px); font-weight:800; color:var(--num); font-variant-numeric:tabular-nums; line-height:1.25;
  text-shadow:0 0 16px rgba(0,229,255,.55)}
.stage .kpi .v em{font-style:normal; font-size:.5em; color:var(--cyan); margin-left:2px}
.stage .kpi .delta{font-size:10.5px}
.stage .delta.up{color:var(--green)} .stage .delta.down{color:var(--red)}

/* 中列地图 */
.stage .map-panel{display:flex; flex-direction:column}
.stage .map-wrap{position:relative; flex:1; min-height:0; display:flex; align-items:center; justify-content:center}
#worldMap{width:100%; height:100%}
:is(#worldMap,#ovSvg) .country{fill:#0d2456; stroke:rgba(0,229,255,.22); stroke-width:.6; transition:fill .25s}
:is(#worldMap,#ovSvg) .country:hover{fill:#14376f}
:is(#worldMap,#ovSvg) .fly{fill:none; stroke:url(#flyGrad); stroke-width:1.6; stroke-linecap:round;
  stroke-dasharray:14 86; filter:drop-shadow(0 0 4px rgba(0,229,255,.9)); animation:flyflow 2.8s linear infinite}
:is(#worldMap,#ovSvg) .fly.gold{stroke:url(#flyGold)}
:is(#worldMap,#ovSvg) .fly-base{fill:none; stroke:rgba(0,229,255,.14); stroke-width:.8; stroke-dasharray:3 4}
@keyframes flyflow{from{stroke-dashoffset:100} to{stroke-dashoffset:0}}
:is(#worldMap,#ovSvg) .pulse{fill:var(--cyan); animation:pulse 2s ease-out infinite; transform-box:fill-box; transform-origin:center}
:is(#worldMap,#ovSvg) .pulse.gold{fill:var(--gold)}
@keyframes pulse{0%{opacity:.9; r:3} 70%{opacity:0; r:9} 100%{opacity:0}}
:is(#worldMap,#ovSvg) .hub{fill:#fff; stroke:var(--cyan); stroke-width:2}
.stage .map-legend{position:absolute; left:8px; bottom:4px; display:flex; gap:14px; font-size:10.5px; color:var(--txt-dim)}
.stage .map-legend i{display:inline-block; width:9px; height:9px; border-radius:50%; margin-right:5px; vertical-align:-1px}
.stage .lg-cyan{background:var(--cyan); box-shadow:0 0 8px var(--cyan)}
.stage .lg-gold{background:var(--gold); box-shadow:0 0 8px var(--gold)}
.stage .lg-dot{background:#3d6bb0}

/* 中列小卡行 */
.stage .mini-row{flex:none; height:26%; min-height:118px; display:grid; grid-template-columns:1fr 1.4fr; gap:10px}
.stage .mini-row .panel{display:flex; flex-direction:column}
.stage .mini-row svg{flex:1; min-height:0}
.stage .mini-note{flex:none; font-size:10.5px; color:var(--txt-dim); text-align:center; padding-top:2px}
.stage .mini-note b{color:var(--cyan)}

/* 右列：排行条形 */
.stage .rank-list{display:flex; flex-direction:column; gap:9px; justify-content:space-evenly; height:calc(100% - 30px)}
.stage .rank{display:grid; grid-template-columns:26px 64px 1fr 52px; align-items:center; gap:7px; font-size:clamp(11px,.8vw,13px)}
.stage .rank .no{width:20px; height:20px; display:flex; align-items:center; justify-content:center; font-size:11px; font-weight:800;
  color:var(--cyan); border:1px solid var(--cyan-dim); transform:rotate(45deg)}
.stage .rank .no b{transform:rotate(-45deg); font-variant-numeric:tabular-nums}
.stage .rank.top1 .no{background:var(--gold); border-color:var(--gold); color:#08122c; box-shadow:0 0 10px rgba(255,183,74,.7)}
.stage .rank .nm{color:var(--txt); letter-spacing:1px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.stage .rank .track{height:9px; background:rgba(0,229,255,.08); border:1px solid rgba(0,229,255,.12); overflow:hidden}
.stage .rank .track i{display:block; height:100%; width:0; background:linear-gradient(90deg, #0e7ea8, var(--cyan));
  box-shadow:0 0 8px rgba(0,229,255,.6); transition:width 1.2s cubic-bezier(.2,.7,.3,1)}
.stage .rank.gold .track i{background:linear-gradient(90deg,#b97a1e,var(--gold)); box-shadow:0 0 8px rgba(255,183,74,.6)}
.stage .rank .amt{text-align:right; color:var(--num); font-variant-numeric:tabular-nums}
.stage .rank .amt em{font-style:normal; font-size:10px; color:var(--txt-dim)}

/* 右列：词云 */
.stage .cloud{display:flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:8px 14px; height:calc(100% - 30px); min-height:96px}
.stage .cloud span{cursor:default; letter-spacing:1px; transition:transform .2s, color .2s}
.stage .cloud span:hover{transform:scale(1.18); color:var(--cyan)}
.stage .cloud .lv1{font-size:21px; color:var(--cyan); text-shadow:0 0 14px rgba(0,229,255,.8); font-weight:700}
.stage .cloud .lv2{font-size:16px; color:#9fdcff}
.stage .cloud .lv3{font-size:13px; color:var(--txt-dim)}
.stage .cloud .lv4{font-size:12px; color:#5d84b3}
.stage .cloud .gold{color:var(--gold); text-shadow:0 0 12px rgba(255,183,74,.7)}

/* ===== 底部一行 ===== */
.stage .grid-foot{flex:none; height:23%; min-height:132px; display:grid; grid-template-columns:1fr 1.1fr 1fr 1.15fr; gap:10px}
.stage .grid-foot .panel{display:flex; flex-direction:column}
.stage .foot-body{flex:1; min-height:0; display:flex; align-items:center; gap:10px}
.stage .foot-body svg{height:100%; max-height:100%; flex:none}
.stage .foot-legend{flex:1; font-size:clamp(10px,.72vw,12px); color:var(--txt-dim); display:flex; flex-direction:column; gap:4px; min-width:0; overflow:hidden}
.stage .foot-legend li{list-style:none; display:flex; align-items:center; gap:6px; white-space:nowrap; overflow:hidden}
.stage .foot-legend i{width:8px; height:8px; border-radius:2px; flex:none}
.stage .foot-legend b{margin-left:auto; color:var(--num); font-variant-numeric:tabular-nums}
.stage .gauges{justify-content:space-evenly}
.stage .gauge{text-align:center}
.stage .gauge small{display:block; font-size:10.5px; color:var(--txt-dim); margin-top:-4px; letter-spacing:1px}
.stage .dc-list{flex:1; font-size:clamp(10px,.72vw,12px); display:flex; flex-direction:column; gap:6px; min-width:0}
.stage .dc-list li{list-style:none; display:flex; justify-content:space-between; gap:6px; border-bottom:1px dashed rgba(0,229,255,.10); padding-bottom:4px}
.stage .dc-list b{color:var(--cyan); font-variant-numeric:tabular-nums}
.stage .dc-list li.hot b{color:var(--gold); text-shadow:0 0 8px rgba(255,183,74,.6)}

/* SVG 通用文字（作用域限定，防止污染工作台内其他 SVG） */
.stage svg text,#mapOverlay svg text{font-family:inherit}
.stage .gauge-val{fill:var(--num); font-size:19px; font-weight:800; font-variant-numeric:tabular-nums}
.stage .gauge-lab{fill:var(--txt-dim); font-size:9.5px; letter-spacing:1px}

/* ===== 阶段 1.5 · 交互增强 ===== */
/* 共享 tooltip */
#stip{position:fixed; z-index:200; pointer-events:none; max-width:320px; padding:8px 12px; font-size:12px; line-height:1.7;
  font-family:"Microsoft YaHei","PingFang SC",sans-serif; color:#d8ecff; background:rgba(6,20,48,.94); border:1px solid var(--cyan-dim); border-radius:6px;
  box-shadow:0 4px 20px rgba(0,229,255,.25), 0 0 0 1px rgba(0,229,255,.08) inset;
  opacity:0; transform:translateY(4px); transition:opacity .12s, transform .12s; white-space:nowrap}
#stip.on{opacity:1; transform:none}
#stip b{color:var(--num)}

/* 面板悬停通用强调 */
.stage .panel{transition:border-color .2s, box-shadow .2s}
.stage .panel:hover{border-color:rgba(0,229,255,.4); box-shadow:0 0 22px rgba(0,229,255,.12)}

/* KPI 卡悬停上浮 */
.stage .kpi{transition:transform .2s, border-color .2s, box-shadow .2s}
.stage .kpi:hover{transform:translateY(-3px); border-color:var(--cyan); box-shadow:0 6px 20px rgba(0,229,255,.28)}

/* 业务表锁定行 */
#bizTable tbody tr{cursor:pointer}
#bizTable tbody tr.locked td{background:linear-gradient(90deg, rgba(0,229,255,.18), transparent); color:#fff;
  border-bottom-color:var(--cyan-dim)}

/* 雷达命中区与轴标签 */
#radar .hit{cursor:pointer}
#radar .axlab{transition:fill .15s}
#radar .axlab.hot{fill:var(--cyan); font-weight:700}
#radar circle:not(.hit):hover{r:4}

/* SVG 弧段/柱体交互 */
#funnelDonut circle, #staffDonut circle, #weekBars rect, #dcDonut circle{transition:opacity .2s, filter .2s; cursor:pointer}
#funnelDonut circle:hover, #staffDonut circle:hover, #weekBars rect:hover{filter:brightness(1.35) drop-shadow(0 0 6px rgba(0,229,255,.8))}
#funnelDonut circle.svgdim, #staffDonut circle.svgdim{opacity:.22}
.stage .trendhit{cursor:pointer}
.stage .trendhit.on{fill:rgba(0,229,255,.06)}
.stage .rank{transition:background .15s; border-radius:4px}
.stage .rank:hover .track i{filter:brightness(1.3)}
.stage .rank:hover{background:rgba(0,229,255,.05)}
.stage .dc-list li{transition:color .15s; cursor:default}
.stage .dc-list li:hover{color:var(--cyan)}
.stage .dc-list li.hot:hover b{color:var(--red); text-shadow:0 0 10px rgba(255,93,108,.8)}

/* 地图：入口光标 + 飞线暂停 */
.stage .map-panel{cursor:zoom-in}
.stage .zoom-btn{color:var(--cyan); cursor:zoom-in}
.stage .map-panel:hover .zoom-btn{text-shadow:0 0 8px var(--cyan)}
.stage .map-panel.paused .fly, .stage .map-panel.paused .pulse{animation-play-state:paused}
#worldMap .country:hover, #ovSvg .country:hover{fill:#1a4a8f; stroke:var(--cyan)}

/* 地图放大浮层（body 直属，嵌入/独立两模式共用） */
#mapOverlay{position:fixed; inset:0; z-index:100; display:none; flex-direction:column; padding:18px 22px;
  font-family:"Microsoft YaHei","PingFang SC",sans-serif;
  background:
    linear-gradient(rgba(0,229,255,.04) 1px, transparent 1px),
    linear-gradient(90deg, rgba(0,229,255,.04) 1px, transparent 1px),
    radial-gradient(1200px 700px at 50% -10%, #0e2a63 0%, transparent 60%),
    linear-gradient(180deg, var(--bg-1), var(--bg-0));
  background-size:42px 42px, 42px 42px, auto, auto}
#mapOverlay.on{display:flex; animation:rise .3s both}
#mapOverlay .ov-bar{flex:none; display:flex; align-items:center; justify-content:space-between; margin-bottom:12px}
#mapOverlay .ov-bar h3{font-size:19px; letter-spacing:3px; color:var(--num); padding-left:10px; border-left:3px solid var(--cyan);
  text-shadow:0 0 12px rgba(0,229,255,.6)}
#mapOverlay .ov-btns{display:flex; gap:10px}
#mapOverlay .ov-btns button{font-family:inherit; font-size:12.5px; letter-spacing:1px; color:var(--cyan); background:rgba(0,229,255,.08);
  border:1px solid var(--cyan-dim); padding:6px 16px; cursor:pointer; transition:background .15s, box-shadow .15s}
#mapOverlay .ov-btns button:hover{background:rgba(0,229,255,.2); box-shadow:0 0 12px rgba(0,229,255,.4)}
#mapOverlay .ov-stage{flex:1; min-height:0; display:flex; align-items:center; justify-content:center}
#ovSvg{width:100%; height:100%; cursor:grab}
#ovSvg:active{cursor:grabbing}
#mapOverlay .ov-hint{flex:none; text-align:center; font-size:11px; color:var(--txt-dim); letter-spacing:2px; padding-top:8px}

/* 放大视图 · 国家中文标签（随缩放逐级显现，字号恒定不随缩放变形） */
#ovSvg .clabels text{fill:#cfe9ff; font-weight:600; paint-order:stroke; stroke:rgba(3,10,28,.85); stroke-width:2.5;
  letter-spacing:1px; pointer-events:none; transition:opacity .25s}

/* ===== v6.2 全站图表动画（进场编排 + 悬停重播统一风格） ===== */
.stage .farc,.stage .sarc,.stage .darc,.stage .gval{transition:stroke-dasharray 1.05s cubic-bezier(.25,.8,.3,1), opacity .2s, filter .2s}
.stage .bargrp{transform-box:fill-box; transform-origin:50% 100%; transform:scaleY(.02);
  transition:transform .9s cubic-bezier(.3,1.15,.4,1)}   /* 轻微过冲，柱体拔起有弹性 */
.stage .bargrp.go{transform:none}
.stage .barval{opacity:0; transition:opacity .35s .45s}
.stage .barval.go{opacity:1}
.stage .rshape{transform-box:fill-box; transform-origin:center; transform:scale(.05);
  transition:transform 1.1s cubic-bezier(.3,1.22,.4,1)}   /* 轻微过冲回弹，生长更自然 */
.stage .rshape.go{transform:none}
.stage .rdot{opacity:0; transition:opacity .4s .55s}
.stage .rdot.go{opacity:1}
.stage .axlab{opacity:0; transition:opacity .5s var(--d,0ms), fill .15s}
.stage .axlab.go{opacity:1}
.stage .tline{stroke-dasharray:1; stroke-dashoffset:1; transition:stroke-dashoffset 1.3s cubic-bezier(.3,.7,.3,1)}
.stage .tline.go{stroke-dashoffset:0}
.stage .tarea{opacity:0; transition:opacity .7s .55s}
.stage .tarea.go{opacity:1}
.stage .tdot{opacity:0; transition:opacity .35s .7s}
.stage .tdot.go{opacity:1}

/* ===== v6.4 新板块：战力榜 tab / 渠道来源环 / 今日动态流 / 预警行动面板 ===== */
.stage .p-tab{font-size:clamp(12px,.8vw,15px); letter-spacing:2px; color:var(--txt-dim); cursor:pointer; margin-right:14px; font-weight:700; transition:color .2s}
.stage .p-tab.on{color:var(--num); text-shadow:0 0 10px rgba(0,229,255,.55)}
.stage .p-tab:hover{color:var(--cyan)}
.stage .rank .no.t1{background:var(--gold); border-color:var(--gold); color:#08122c; box-shadow:0 0 10px rgba(255,183,74,.7)}
.stage .rank .no.t2{background:#cfd8e3; border-color:#cfd8e3; color:#26313d}
.stage .rank .no.t3{background:#c98a5a; border-color:#c98a5a; color:#3a2500}
.stage .chan-wrap{flex:1; min-height:0; display:flex; align-items:center; gap:12px; padding:4px 2px}
.stage .chan-wrap .chan-donut{width:88px; height:88px; flex:none}
.stage .chan-wrap .foot-legend{width:auto}
.stage .feed-list{flex:1; min-height:0; overflow-y:auto; display:flex; flex-direction:column; gap:5px; padding:2px; scrollbar-width:thin; scrollbar-color:rgba(0,229,255,.3) transparent}
.stage .feed-item{display:flex; align-items:center; gap:8px; font-size:clamp(10px,.72vw,12px); color:var(--txt); padding:5px 8px; background:rgba(0,229,255,.05); border-left:2px solid rgba(0,229,255,.35); flex:none}
.stage .feed-item.gold{border-left-color:var(--gold); background:rgba(255,183,74,.09)}
.stage .ftag{flex:none; font-size:10px; padding:1px 6px; border:1px solid var(--cyan-dim); color:var(--cyan); letter-spacing:1px}
.stage .ftag.gold{border-color:var(--gold); color:var(--gold)}
.stage .ftxt{overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.stage .feed-empty{color:var(--txt-dim); font-size:11.5px; text-align:center; padding:16px 0; letter-spacing:1px}
.stage .alert-list{flex:1; min-height:0; overflow-y:auto; display:flex; flex-direction:column; gap:8px; padding:2px; scrollbar-width:thin; scrollbar-color:rgba(0,229,255,.3) transparent}
.stage .al-sec .al-t{font-size:10.5px; color:var(--txt-dim); letter-spacing:2px; margin-bottom:4px}
.stage .al-row{display:flex; justify-content:space-between; align-items:center; gap:8px; font-size:clamp(10px,.72vw,12px); padding:5px 8px; background:rgba(0,229,255,.05); border-left:2px solid rgba(0,229,255,.35); cursor:pointer; transition:background .15s}
.stage .al-row:hover{background:rgba(0,229,255,.13)}
.stage .al-row.hot{border-left-color:var(--red)}
.stage .al-row.warn{border-left-color:var(--gold)}
.stage .al-nm{overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--txt)}
.stage .al-sub{flex:none; color:var(--txt-dim); font-size:.92em}
