/* 昕光 EventOS · 操作系统外壳：顶栏 / 左舷导航 / 工作区窗格 / 右舷信号坞 / 状态栏 / 命令面板 */
:root{
  --sh-top:44px;--sh-rail:220px;--sh-rail-min:60px;--sh-dock:300px;--sh-status:26px;
  --sh-bg:#06070B;--sh-panel:#0C0E14;--sh-panel2:#10131B;--sh-line:rgba(232,230,225,.09);--sh-line2:rgba(232,230,225,.16);
  --sh-ink:#E8E6E1;--sh-dim:#7A766E;--sh-metal:#B8C4BC;--sh-live:#E23B2F;--sh-ok:#6FBF8E;--sh-warn:#E0A64B;--sh-foil:#C4A574;
  --mono:"JetBrains Mono","SF Mono",Consolas,"Cascadia Mono",monospace;
}
html,body{height:100%}
body.os{margin:0;background:var(--sh-bg);color:var(--sh-ink);overflow:hidden}
body.os #app{position:fixed;inset:0;display:grid;grid-template-rows:var(--sh-top) minmax(0,1fr) var(--sh-status);grid-template-columns:var(--sh-rail) minmax(0,1fr) var(--sh-dock);grid-template-areas:"top top top" "rail work dock" "status status status";transition:grid-template-columns .28s cubic-bezier(.2,.7,.2,1)}
body.os.rail-min #app{grid-template-columns:var(--sh-rail-min) minmax(0,1fr) var(--sh-dock)}
body.os.dock-off #app{grid-template-columns:var(--sh-rail) minmax(0,1fr) 0}
body.os.rail-min.dock-off #app{grid-template-columns:var(--sh-rail-min) minmax(0,1fr) 0}
.sh-top,.sh-work,.sh-status{min-width:0;overflow:hidden}
.sh-work{overflow:auto}
/* 背景网格：工作区 */
.sh-work{grid-area:work;position:relative;overflow:auto;background:
  radial-gradient(rgba(232,230,225,.045) 1px,transparent 1px) 0 0/22px 22px,
  radial-gradient(60% 40% at 80% 0%,rgba(184,196,188,.05),transparent 60%),var(--sh-bg)}
.sh-work::-webkit-scrollbar{width:8px}.sh-work::-webkit-scrollbar-thumb{background:rgba(232,230,225,.12);border-radius:4px}
/* 顶栏 */
.sh-top{grid-area:top;display:flex;align-items:center;gap:14px;padding:0 14px;border-bottom:1px solid var(--sh-line);background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,0)),var(--sh-panel);position:relative;z-index:5}
.sh-top:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:linear-gradient(90deg,var(--sh-metal),transparent 40%,transparent 60%,var(--sh-metal));opacity:.25}
.sh-brand{display:flex;align-items:center;gap:10px;min-width:0}
.sh-logo{width:22px;height:22px;border-radius:5px;background:conic-gradient(from 210deg,#dfe7e2,#8f9c95 40%,#dfe7e2 70%,#5f6a64);box-shadow:inset 0 0 0 1px rgba(255,255,255,.25),0 0 18px rgba(184,196,188,.25);position:relative}
.sh-logo:after{content:"";position:absolute;inset:6px;border-radius:2px;background:#06070B}
.sh-brand b{font-size:13px;letter-spacing:.06em;font-weight:600;white-space:nowrap}
.sh-brand .area{font-size:11px;color:var(--sh-dim);letter-spacing:.2em;padding-left:10px;border-left:1px solid var(--sh-line2);white-space:nowrap}
.sh-ctx{display:flex;align-items:center;gap:8px;min-width:0;flex:1;justify-content:center}
.sh-ctx .ev{display:inline-flex;align-items:center;gap:8px;height:28px;padding:0 12px;border:1px solid var(--sh-line2);border-radius:3px;background:rgba(255,255,255,.02);font-size:12px;max-width:min(46vw,560px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sh-ctx .ev i{width:6px;height:6px;border-radius:50%;background:var(--sh-dim);flex:none}
.sh-ctx .ev i.live{background:var(--sh-live);box-shadow:0 0 0 3px rgba(226,59,47,.2);animation:shPulse 2.2s infinite}
.sh-ctx .ev i.warm{background:var(--sh-warn)}
.sh-ctx .ev i.ok{background:var(--sh-ok)}
.sh-cmdk{display:inline-flex;align-items:center;gap:8px;height:28px;padding:0 10px 0 12px;border:1px solid var(--sh-line);border-radius:3px;color:var(--sh-dim);font-size:12px;background:rgba(255,255,255,.015);cursor:pointer;white-space:nowrap}
.sh-cmdk kbd{font:10px/1 var(--mono);padding:3px 5px;border:1px solid var(--sh-line2);border-radius:3px;color:var(--sh-metal)}
.sh-cmdk:hover{border-color:var(--sh-line2);color:var(--sh-ink)}
.sh-right{display:flex;align-items:center;gap:12px;white-space:nowrap}
.sh-sync{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--sh-dim);font-family:var(--mono)}
.sh-sync i{width:7px;height:7px;border-radius:50%;background:var(--sh-ok);box-shadow:0 0 0 0 rgba(111,191,142,.6);animation:shBreath 3s infinite}
.sh-sync.fresh{color:var(--sh-ink)}.sh-sync.fresh i{background:var(--sh-live);animation:shPulse .9s 3}
.sh-sync.bad i{background:var(--sh-live);animation:none}
@keyframes shBreath{0%,100%{box-shadow:0 0 0 0 rgba(111,191,142,.0)}50%{box-shadow:0 0 0 4px rgba(111,191,142,.18)}}
@keyframes shPulse{0%{box-shadow:0 0 0 0 rgba(226,59,47,.5)}100%{box-shadow:0 0 0 9px rgba(226,59,47,0)}}
.sh-clock{font:12px var(--mono);color:var(--sh-ink);letter-spacing:.04em}
.sh-clock small{color:var(--sh-dim);margin-right:8px}
.sh-role{height:24px;padding:0 9px;border:1px solid var(--sh-line2);border-radius:3px;font-size:11px;letter-spacing:.14em;color:var(--sh-metal);display:inline-flex;align-items:center}
.sh-ib{width:30px;height:28px;border:1px solid var(--sh-line);border-radius:3px;background:transparent;color:var(--sh-dim);display:inline-grid;place-items:center;position:relative;cursor:pointer}
.sh-ib:hover{color:var(--sh-ink);border-color:var(--sh-line2)}
.sh-ib .n{position:absolute;top:-6px;right:-6px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--sh-live);color:#fff;font:10px/16px var(--mono);text-align:center}
.sh-ib svg{width:15px;height:15px}
/* 左舷导航 */
.sh-rail{grid-area:rail;border-right:1px solid var(--sh-line);background:var(--sh-panel);display:flex;flex-direction:column;overflow:hidden;position:relative;z-index:4}
.sh-rail .grp{padding:14px 12px 4px;font-size:10px;letter-spacing:.24em;color:var(--sh-dim);white-space:nowrap;overflow:hidden}
.sh-rail nav{flex:1;overflow-y:auto;overflow-x:hidden;padding-bottom:12px}
.sh-rail nav::-webkit-scrollbar{width:0}
.sh-nav{display:flex;align-items:center;gap:10px;width:100%;height:34px;padding:0 12px 0 14px;border:0;border-left:2px solid transparent;background:transparent;color:var(--sh-dim);font-size:13px;text-align:left;cursor:pointer;white-space:nowrap;position:relative}
.sh-nav svg{width:16px;height:16px;flex:none;opacity:.8}
.sh-nav span{flex:1;overflow:hidden;text-overflow:ellipsis}
.sh-nav .bd{font:10px/1 var(--mono);color:var(--sh-dim);padding:3px 5px;border:1px solid var(--sh-line);border-radius:3px}
.sh-nav .bd.hot{color:#fff;background:var(--sh-live);border-color:var(--sh-live)}
.sh-nav .bd.ok{color:var(--sh-ok);border-color:rgba(111,191,142,.35)}
.sh-nav .bd.warn{color:var(--sh-warn);border-color:rgba(224,166,75,.4)}
.sh-nav kbd{font:9px/1 var(--mono);color:var(--sh-dim);opacity:.6}
.sh-nav:hover{color:var(--sh-ink);background:rgba(255,255,255,.025)}
.sh-nav.on{color:var(--sh-ink);border-left-color:var(--sh-metal);background:linear-gradient(90deg,rgba(184,196,188,.12),rgba(184,196,188,0))}
.sh-nav.on svg{opacity:1}
.sh-rail .foot{padding:10px 12px;border-top:1px solid var(--sh-line);display:flex;align-items:center;justify-content:space-between;gap:8px;white-space:nowrap;overflow:hidden}
.sh-rail .foot small{font:10px var(--mono);color:var(--sh-dim);overflow:hidden;text-overflow:ellipsis}
body.rail-min .sh-rail .grp,body.rail-min .sh-nav span,body.rail-min .sh-nav .bd,body.rail-min .sh-nav kbd,body.rail-min .sh-rail .foot small{display:none}
body.rail-min .sh-nav{justify-content:center;padding:0}
body.rail-min .sh-rail .grp{height:10px;padding:0;border-top:1px solid var(--sh-line);margin:6px 14px 0;display:block}
/* 工作区 */
.sh-head{position:sticky;top:0;z-index:3;display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:18px 24px 12px;background:linear-gradient(180deg,var(--sh-bg) 70%,rgba(6,7,11,0));backdrop-filter:blur(6px)}
.sh-head h1{margin:0;font-size:20px;font-weight:600;letter-spacing:.01em}
.sh-head .sub{margin:4px 0 0;font-size:12px;color:var(--sh-dim)}
.sh-head .acts{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;position:relative;z-index:2;flex:0 0 auto}
.sh-body{padding:4px 24px 40px}
.sh-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:12px}
.sh-grid>*{min-width:0}
.c3{grid-column:span 3}.c4{grid-column:span 4}.c5{grid-column:span 5}.c6{grid-column:span 6}.c7{grid-column:span 7}.c8{grid-column:span 8}.c9{grid-column:span 9}.c12{grid-column:span 12}
/* 窗格 */
.win{position:relative;border:1px solid var(--sh-line);background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.008)),var(--sh-panel);border-radius:4px;display:flex;flex-direction:column;min-height:0;animation:winIn .5s cubic-bezier(.2,.7,.2,1) both}
@keyframes winIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.win:before,.win:after{content:"";position:absolute;width:8px;height:8px;border-color:var(--sh-metal);border-style:solid;opacity:.45;pointer-events:none}
.win:before{left:-1px;top:-1px;border-width:1px 0 0 1px}.win:after{right:-1px;bottom:-1px;border-width:0 1px 1px 0}
.win>header{display:flex;align-items:center;justify-content:space-between;gap:10px;height:34px;padding:0 12px;border-bottom:1px solid var(--sh-line);font-size:12px}
.win>header h3{margin:0;font-size:11px;letter-spacing:.2em;color:var(--sh-dim);font-weight:500;white-space:nowrap}
.win>header .meta{color:var(--sh-dim);font:11px var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.win>header .meta b{color:var(--sh-ink);font-weight:500}
.win>.body{padding:12px 14px 14px;flex:1;min-height:0}
.win.tight>.body{padding:8px 12px 10px}
.win.live{border-color:rgba(226,59,47,.35)}
.win.live:before,.win.live:after{border-color:var(--sh-live)}
/* 指标 */
.kp{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}
.kp .k{padding:10px 12px;border:1px solid var(--sh-line);border-radius:3px;background:rgba(255,255,255,.015);position:relative;overflow:hidden}
.kp .k small{display:block;font-size:11px;letter-spacing:.08em;color:var(--sh-dim)}
.kp .k b{display:block;font:500 26px/1.15 var(--mono);margin-top:4px;letter-spacing:-.02em}
.kp .k em{display:block;font:10px var(--mono);font-style:normal;color:var(--sh-dim);margin-top:4px}
.kp .k em.up{color:var(--sh-ok)}.kp .k em.hot{color:var(--sh-live)}
.kp .k .sp{position:absolute;right:8px;bottom:6px;opacity:.55}
.hero-n{font:500 clamp(56px,9vw,116px)/1 var(--mono);letter-spacing:-.05em;color:var(--sh-metal);text-shadow:0 0 40px rgba(184,196,188,.18)}
.hero-c{color:var(--sh-dim);font-size:12px;margin-top:6px}
.cmd-big{height:46px;min-width:200px;font-size:16px;letter-spacing:.06em}
/* 图形 */
svg.spark{display:block;width:100%;height:36px}
.donut{display:flex;align-items:center;gap:14px}
.donut svg{width:88px;height:88px;flex:none}
.donut .lg{display:grid;gap:4px;font-size:12px;color:var(--sh-dim)}
.donut .lg i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:6px;vertical-align:middle}
.donut .lg b{color:var(--sh-ink);font:500 12px var(--mono);margin-left:6px}
.ring{position:relative;width:64px;height:64px;flex:none}
.ring svg{width:64px;height:64px;transform:rotate(-90deg)}
.ring b{position:absolute;inset:0;display:grid;place-items:center;font:500 14px var(--mono)}
.phases{display:grid;gap:8px}
.phase{display:grid;grid-template-columns:1fr auto;gap:4px 10px;font-size:12px}
.phase small{color:var(--sh-dim)}
.phase b{font:500 12px var(--mono)}
.phase .bar{grid-column:1/-1;margin:0}
/* 时间轴 */
.tl2{list-style:none;margin:0;padding:0}
.tl2 li{display:grid;grid-template-columns:52px 1fr auto;gap:10px;align-items:baseline;padding:7px 0 7px 14px;border-left:1px solid var(--sh-line2);position:relative;font-size:13px;color:var(--sh-dim)}
.tl2 li:before{content:"";position:absolute;left:-4px;top:12px;width:7px;height:7px;border-radius:50%;background:var(--sh-dim)}
.tl2 li.now{color:var(--sh-ink)}.tl2 li.now:before{background:var(--sh-live);box-shadow:0 0 0 4px rgba(226,59,47,.2)}
.tl2 li.done{color:#57534c}.tl2 li.done:before{background:var(--sh-metal)}
.tl2 li small{font:11px var(--mono);color:inherit}
.tl2 li .act{font-size:11px}
/* 右舷信号坞 */
.sh-dock{grid-area:dock;border-left:1px solid var(--sh-line);background:var(--sh-panel);display:flex;flex-direction:column;min-width:0;overflow:hidden}
body.dock-off .sh-dock{display:none}
.sh-dock>header{height:34px;display:flex;align-items:center;justify-content:space-between;padding:0 12px;border-bottom:1px solid var(--sh-line);font-size:11px;letter-spacing:.2em;color:var(--sh-dim)}
.sh-dock .sec{padding:10px 12px;border-bottom:1px solid var(--sh-line)}
.sh-dock .sec h4{margin:0 0 8px;font-size:10px;letter-spacing:.22em;color:var(--sh-dim);font-weight:500}
.sig2{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.sig2 div{padding:8px 10px;border:1px solid var(--sh-line);border-radius:3px}
.sig2 small{display:block;font-size:11px;color:var(--sh-dim)}
.sig2 b{font:500 20px var(--mono)}
.sig2 .hot b{color:var(--sh-live)}
.feed{flex:1;overflow-y:auto;padding:6px 0 12px}
.feed::-webkit-scrollbar{width:0}
.feed .it{display:grid;grid-template-columns:44px 1fr;gap:8px;padding:6px 12px;font-size:12px;color:var(--sh-ink);border-left:2px solid transparent}
.feed .it small{font:11px var(--mono);color:var(--sh-dim);padding-top:1px}
.feed .it em{font-style:normal;color:var(--sh-dim);font-size:10px;letter-spacing:.1em;margin-right:6px;padding:1px 4px;border:1px solid var(--sh-line);border-radius:2px;vertical-align:1px}
.feed .it.new{animation:feedIn .6s cubic-bezier(.2,.7,.2,1) both;border-left-color:var(--sh-live)}
@keyframes feedIn{from{opacity:0;transform:translateX(8px)}to{opacity:1;transform:none}}
.feed .empty{padding:18px 12px;color:var(--sh-dim);font-size:12px}
.dock-now{padding:10px 12px;border-bottom:1px solid var(--sh-line)}
.dock-now small{display:block;font-size:10px;letter-spacing:.22em;color:var(--sh-live)}
.dock-now b{display:block;font-size:14px;margin-top:4px;font-weight:500}
.dock-now span{display:block;font-size:11px;color:var(--sh-dim);margin-top:2px}
/* 状态栏 */
.sh-status{grid-area:status;display:flex;align-items:center;gap:0;padding:0 12px;border-top:1px solid var(--sh-line);background:var(--sh-panel);font:11px var(--mono);color:var(--sh-dim);overflow:hidden;white-space:nowrap}
.sh-status span{padding:0 10px;border-right:1px solid var(--sh-line);display:inline-flex;align-items:center;gap:6px;height:100%}
.sh-status span:last-child{border-right:0;margin-left:auto}
.sh-status i{width:6px;height:6px;border-radius:50%;background:var(--sh-ok)}
.sh-status .env{color:var(--sh-metal)}
.sh-status kbd{font:inherit;color:var(--sh-metal)}
/* 命令面板 */
.sh-pal{position:fixed;inset:0;z-index:60;display:none;align-items:flex-start;justify-content:center;padding-top:12vh;background:rgba(2,3,6,.62);backdrop-filter:blur(4px)}
.sh-pal.on{display:flex}
.sh-pal .box{width:min(640px,92vw);border:1px solid var(--sh-line2);border-radius:6px;background:var(--sh-panel2);box-shadow:0 30px 80px rgba(0,0,0,.6);overflow:hidden;animation:winIn .18s both}
.sh-pal input{width:100%;height:52px;border:0;border-bottom:1px solid var(--sh-line);background:transparent;padding:0 18px;font-size:15px;color:var(--sh-ink);outline:none}
.sh-pal ul{list-style:none;margin:0;padding:6px 0;max-height:52vh;overflow:auto}
.sh-pal li{display:flex;align-items:center;gap:12px;padding:9px 18px;font-size:13px;color:var(--sh-dim);cursor:pointer}
.sh-pal li em{font-style:normal;font-size:10px;letter-spacing:.18em;padding:2px 6px;border:1px solid var(--sh-line);border-radius:3px;min-width:44px;text-align:center}
.sh-pal li b{color:var(--sh-ink);font-weight:500}
.sh-pal li small{margin-left:auto;font:10px var(--mono);opacity:.7}
.sh-pal li.on{background:rgba(184,196,188,.1);color:var(--sh-ink)}
.sh-pal .hint{padding:8px 18px;border-top:1px solid var(--sh-line);font:10px var(--mono);color:var(--sh-dim);display:flex;gap:14px}
/* 通知 */
.sh-toasts{position:fixed;right:16px;bottom:calc(var(--sh-status) + 12px);z-index:70;display:grid;gap:8px;width:min(340px,90vw);pointer-events:none}
.sh-toast{padding:10px 12px;border:1px solid var(--sh-line2);border-left:3px solid var(--sh-metal);background:rgba(12,14,20,.96);border-radius:3px;font-size:12px;display:grid;grid-template-columns:1fr auto;gap:4px 10px;animation:feedIn .35s both;box-shadow:0 12px 30px rgba(0,0,0,.4)}
.sh-toast.act{pointer-events:auto}.sh-toast.act button{grid-column:1/-1;justify-self:start;margin-top:4px}
.sh-toast small{font:10px var(--mono);color:var(--sh-dim)}
.sh-toast.hot{border-left-color:var(--sh-live)}.sh-toast.ok{border-left-color:var(--sh-ok)}.sh-toast.warn{border-left-color:var(--sh-warn)}
.sh-toast.out{opacity:0;transform:translateX(12px);transition:.3s}
/* 门与开机 */
.sh-gate{position:fixed;inset:0;display:grid;grid-template-columns:1.1fr 1fr;background:var(--sh-bg)}
.sh-gate .left{position:relative;overflow:hidden;border-right:1px solid var(--sh-line);padding:40px;display:flex;flex-direction:column;justify-content:space-between;background:
  radial-gradient(rgba(232,230,225,.05) 1px,transparent 1px) 0 0/22px 22px,radial-gradient(50% 60% at 30% 30%,rgba(184,196,188,.08),transparent 60%),var(--sh-bg)}
.sh-gate .left .brand{display:flex;align-items:center;gap:12px}
.sh-gate .left .brand b{font-size:14px;letter-spacing:.08em}
.sh-gate .left h2{margin:0;font-size:clamp(28px,4vw,44px);font-weight:600;line-height:1.15;letter-spacing:-.01em}
.sh-gate .left p{color:var(--sh-dim);font-size:13px;max-width:460px;line-height:1.7}
.sh-gate .sys{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;max-width:520px}
.sh-gate .sys div{padding:10px 12px;border:1px solid var(--sh-line);border-radius:3px;font:11px var(--mono);color:var(--sh-dim)}
.sh-gate .sys b{display:block;color:var(--sh-ink);font-size:13px;margin-top:3px;font-weight:500}
.sh-gate .right{display:grid;place-items:center;padding:40px}
.sh-gate .box{width:min(380px,100%)}
.sh-gate .box .kicker{margin:0 0 10px;font-size:11px;letter-spacing:.28em;color:var(--sh-metal)}
.sh-gate .box h1{margin:0 0 8px;font-size:26px;font-weight:600}
.sh-gate .box .lede{color:var(--sh-dim);font-size:13px;margin:0 0 20px;line-height:1.6}
.sh-gate .terms{margin-top:22px;font:10px var(--mono);color:var(--sh-dim);line-height:1.8}
.sh-boot{position:fixed;inset:0;z-index:80;background:var(--sh-bg);display:none;place-items:center}
.sh-boot.on{display:grid}
.sh-boot pre{margin:0;font:12px/1.9 var(--mono);color:var(--sh-dim);min-width:320px}
.sh-boot pre b{color:var(--sh-metal);font-weight:500}
.sh-boot pre .ok{color:var(--sh-ok)}
.sh-boot .bar{width:320px;height:2px;background:var(--sh-line);margin-top:14px;overflow:hidden}
.sh-boot .bar i{display:block;height:100%;width:0;background:var(--sh-metal);transition:width .25s}
/* 表格、字段在窗格中的细化 */
.win .list{font-size:12.5px}
.win .list th{font-size:11px;letter-spacing:.06em}
.win .list tr:hover td{background:rgba(255,255,255,.02)}
.win .pane-form{max-width:none}
.win .field{background:rgba(255,255,255,.02)}
.win .glass{background:rgba(255,255,255,.015)}
.pill-s{display:inline-flex;align-items:center;height:20px;padding:0 7px;border:1px solid var(--sh-line2);border-radius:3px;font:10px var(--mono);color:var(--sh-dim);letter-spacing:.06em}
.pill-s.ok{color:var(--sh-ok);border-color:rgba(111,191,142,.4)}
.pill-s.hot{color:var(--sh-live);border-color:rgba(226,59,47,.45)}
.pill-s.warn{color:var(--sh-warn);border-color:rgba(224,166,75,.45)}
.mono{font-family:var(--mono)}
/* 响应 */
@media (max-width:1180px){:root{--sh-dock:260px}}
@media (max-width:980px){
  body.os #app,body.os.rail-min #app,body.os.dock-off #app,body.os.rail-min.dock-off #app{grid-template-columns:minmax(0,1fr);grid-template-rows:var(--sh-top) minmax(0,1fr) 52px;grid-template-areas:"top" "work" "rail"}
  .sh-top{gap:8px;padding:0 10px}
  .sh-role,.sh-clock small,.sh-sync span,.sh-brand b{display:none}
  .sh-ctx{justify-content:flex-start}
  .sh-ctx .ev{max-width:100%}.sh-ctx .ev span.t{display:inline;font-size:11px}
  .sh-rail{border-right:0;border-top:1px solid var(--sh-line);flex-direction:row;overflow-x:auto}
  .sh-rail nav{display:flex;padding:0 6px;flex:none}
  .sh-rail .grp,.sh-rail .foot{display:none}
  .sh-nav{height:52px;flex-direction:column;justify-content:center;gap:3px;padding:0 12px;border-left:0;border-top:2px solid transparent;font-size:10px}
  .sh-nav.on{border-top-color:var(--sh-metal);border-left:0}
  .sh-nav .bd,.sh-nav kbd{display:none}
  .sh-dock{display:none}
  body.dock-on .sh-dock{display:flex;position:fixed;right:0;top:var(--sh-top);bottom:52px;width:min(320px,90vw);z-index:30;box-shadow:-20px 0 60px rgba(0,0,0,.5)}
  .sh-status,.sh-ctx .ev span.t,.sh-brand .area,.sh-cmdk span{display:none}
  .sh-head,.sh-body{padding-left:14px;padding-right:14px}
  .c3,.c4,.c5,.c6,.c7,.c8,.c9{grid-column:span 12}
  .sh-gate{grid-template-columns:1fr}.sh-gate .left{display:none}
  .sh-toasts{bottom:64px}
}

/* ===== 运营层组件：抽屉 / 漏斗 / 阶段 / 里程碑轨 / 标签页 / 筛选片 / 线程 / 确认单 / 通知 / 资料 ===== */
.sh-drawer{position:fixed;inset:0;z-index:55;display:none}
.sh-drawer.on{display:block}
.sh-drawer .scrim{position:absolute;inset:0;background:rgba(2,3,6,.55);backdrop-filter:blur(2px)}
.sh-drawer aside{position:absolute;top:0;right:0;bottom:0;width:min(460px,96vw);background:var(--sh-panel2);border-left:1px solid var(--sh-line2);box-shadow:-30px 0 80px rgba(0,0,0,.5);display:flex;flex-direction:column;animation:drIn .28s cubic-bezier(.2,.7,.2,1) both}
.sh-drawer.wide aside{width:min(720px,96vw)}
@keyframes drIn{from{transform:translateX(24px);opacity:0}to{transform:none;opacity:1}}
.sh-drawer header{display:flex;align-items:center;gap:10px;height:48px;padding:0 16px;border-bottom:1px solid var(--sh-line)}
.sh-drawer header h3{margin:0;font-size:14px;font-weight:600;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sh-drawer header .meta{font:11px var(--mono);color:var(--sh-dim)}
.sh-drawer .body{flex:1;overflow:auto;padding:14px 16px 24px}
.sh-drawer .body::-webkit-scrollbar{width:6px}.sh-drawer .body::-webkit-scrollbar-thumb{background:rgba(232,230,225,.12)}
.dsec{margin-bottom:16px}
.dsec h4{margin:0 0 8px;font-size:10px;letter-spacing:.22em;color:var(--sh-dim);font-weight:500}
.dkv{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;font-size:12.5px}
.dkv small{color:var(--sh-dim);white-space:nowrap}
.dkv b{font-weight:500}
.dkv .field{margin:0}
.steps{list-style:none;margin:0;padding:0;display:grid;gap:0}
.steps li{display:grid;grid-template-columns:18px 1fr auto;gap:10px;align-items:center;padding:6px 0;font-size:12.5px;color:var(--sh-dim);position:relative}
.steps li:before{content:"";position:absolute;left:8px;top:-8px;bottom:-8px;width:1px;background:var(--sh-line)}
.steps li:first-child:before{top:50%}.steps li:last-child:before{bottom:50%}
.steps li i{width:18px;height:18px;border-radius:50%;border:1px solid var(--sh-line2);display:grid;place-items:center;font-size:10px;background:var(--sh-panel2);z-index:1}
.steps li.ok{color:var(--sh-ink)}.steps li.ok i{background:var(--sh-ok);border-color:var(--sh-ok);color:#06070B}
.steps li.hot i{background:var(--sh-live);border-color:var(--sh-live);color:#fff}
.steps li small{font:11px var(--mono);color:var(--sh-dim)}
/* 漏斗 */
.funnel{display:grid;gap:8px}
.funnel .fs .lab{display:flex;justify-content:space-between;font-size:12px;color:var(--sh-dim)}
.funnel .fs .lab b{font:500 14px var(--mono);color:var(--sh-ink)}
.funnel .fs .bar{height:10px;background:rgba(255,255,255,.04);border:1px solid var(--sh-line);border-radius:2px;overflow:hidden;margin:4px 0 2px}
.funnel .fs .bar i{display:block;height:100%;background:linear-gradient(90deg,rgba(184,196,188,.55),var(--sh-metal));transition:width .6s cubic-bezier(.2,.7,.2,1)}
.funnel .fs.hot .bar i{background:linear-gradient(90deg,rgba(226,59,47,.5),var(--sh-live))}
.funnel .fs small{font:10px var(--mono);color:var(--sh-dim)}
.funnel.compact{grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:8px}
.funnel.compact .fs small{display:none}
.funnel [data-funnel]{cursor:pointer}.funnel [data-funnel]:hover .lab{color:var(--sh-ink)}
/* 阶段步进 */
.stepper{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:4px}
.stepper .st{position:relative;padding:8px 0 0;text-align:center;font-size:11px;color:var(--sh-dim);letter-spacing:.06em}
.stepper .st i{display:block;height:3px;background:var(--sh-line2);border-radius:2px;margin-bottom:8px}
.stepper .st.done i{background:var(--sh-metal)}
.stepper .st.on i{background:var(--sh-live);box-shadow:0 0 12px rgba(226,59,47,.5)}
.stepper .st.on{color:var(--sh-ink)}
.stepper .st b{display:block;font:500 16px var(--mono);color:var(--sh-ink);margin-top:2px}
.stepper .st[data-stage]{cursor:pointer}.stepper .st[data-stage]:hover span{color:var(--sh-ink)}
.rowk-list .rowk{cursor:pointer}.rowk-list .rowk:hover{background:rgba(255,255,255,.03)}
.win.attn{border-color:rgba(224,166,75,.35);box-shadow:inset 3px 0 0 var(--sh-warn)}
.stepper .st[data-stage]{cursor:pointer}
/* 里程碑轨 */
.track{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(96px,1fr);gap:6px;overflow-x:auto;padding:4px 0 6px;position:relative}
.track::-webkit-scrollbar{height:0}
.track .ms{position:relative;padding:22px 6px 0;font-size:11.5px;color:var(--sh-dim);line-height:1.4}
.track .ms:before{content:"";position:absolute;left:0;right:0;top:9px;height:1px;background:var(--sh-line2)}
.track .ms i{position:absolute;left:6px;top:3px;width:13px;height:13px;border-radius:50%;border:1px solid var(--sh-line2);background:var(--sh-panel);display:grid;place-items:center;font-size:9px;color:#06070B;z-index:1}
.track .ms.done i{background:var(--sh-metal);border-color:var(--sh-metal)}
.track .ms.done:before{background:var(--sh-metal)}
.track .ms.late i{background:var(--sh-live);border-color:var(--sh-live);box-shadow:0 0 0 4px rgba(226,59,47,.2)}
.track .ms.soon i{border-color:var(--sh-warn);box-shadow:0 0 0 4px rgba(224,166,75,.18)}
.track .ms small{display:block;font:10px var(--mono);color:var(--sh-dim)}
.track .ms small em{font-style:normal;margin-left:6px;color:var(--sh-warn)}
.track .ms.late small em{color:var(--sh-live)}.track .ms.done small em{display:none}
.track .ms span{display:block;color:var(--sh-ink);margin-top:2px}
.track .ms.done span{color:var(--sh-dim);text-decoration:line-through;text-decoration-color:rgba(232,230,225,.3)}
.track .ms[data-ms]{cursor:pointer}.track .ms[data-ms]:hover span{color:var(--sh-metal)}
/* 标签页 / 筛选片 */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--sh-line);margin-bottom:12px;overflow-x:auto}
.tabs::-webkit-scrollbar{height:0}
.tab{height:34px;padding:0 14px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--sh-dim);font-size:13px;cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center;gap:8px}
.tab b{font:10px/1 var(--mono);padding:3px 5px;border:1px solid var(--sh-line);border-radius:3px;color:var(--sh-dim)}
.tab:hover{color:var(--sh-ink)}.tab.on{color:var(--sh-ink);border-bottom-color:var(--sh-metal)}.tab.on b{color:var(--sh-metal);border-color:var(--sh-metal)}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{height:26px;padding:0 10px;border:1px solid var(--sh-line);border-radius:14px;background:transparent;color:var(--sh-dim);font-size:12px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.chip b{font:10px var(--mono);color:var(--sh-dim)}
.chip:hover{color:var(--sh-ink);border-color:var(--sh-line2)}
.chip.on{color:var(--sh-ink);border-color:var(--sh-metal);background:rgba(184,196,188,.1)}.chip.on b{color:var(--sh-metal)}
.chip.hot.on{border-color:var(--sh-live);background:rgba(226,59,47,.12)}
.chip.warn.on{border-color:var(--sh-warn);background:rgba(224,166,75,.12)}
/* 工具条 / 批量条 */
.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.toolbar .field{margin:0;height:32px}
.toolbar .search{min-width:220px;flex:1}
.bulkbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px;margin-bottom:10px;border:1px solid rgba(184,196,188,.35);border-radius:3px;background:rgba(184,196,188,.06);font-size:12px;animation:winIn .2s both}
.bulkbar b{font:500 13px var(--mono);color:var(--sh-metal);margin-right:6px}
.bulkbar .field{margin:0;height:28px;font-size:12px}
/* 数据表增强 */
.list tr.sel td{background:rgba(184,196,188,.08)}
.list td.chk,.list th.chk{width:26px;padding-right:0}
.list input[type=checkbox]{accent-color:var(--sh-metal)}
.list tr[data-open]{cursor:pointer}
.list tr[data-open]:hover td{background:rgba(255,255,255,.03)}
.tagz{display:inline-flex;gap:4px;flex-wrap:wrap}
.tagz i{font-style:normal;font-size:10px;padding:1px 6px;border:1px solid var(--sh-line);border-radius:10px;color:var(--sh-dim)}
.fun-dots{display:inline-flex;gap:3px;vertical-align:middle}
.fun-dots i{width:7px;height:7px;border-radius:50%;background:rgba(232,230,225,.12)}
.fun-dots i.on{background:var(--sh-metal)}.fun-dots i.hot{background:var(--sh-live)}
/* 沟通线程 */
.thread{display:flex;flex-direction:column;gap:8px;max-height:52vh;overflow:auto;padding:4px 2px}
.thread::-webkit-scrollbar{width:6px}.thread::-webkit-scrollbar-thumb{background:rgba(232,230,225,.12)}
.msg{max-width:78%;padding:8px 12px;border:1px solid var(--sh-line);border-radius:8px 8px 8px 2px;background:rgba(255,255,255,.03);font-size:13px;line-height:1.55;position:relative;animation:winIn .3s both}
.msg small{display:block;font:10px var(--mono);color:var(--sh-dim);margin-bottom:3px}
.msg.me{align-self:flex-end;border-radius:8px 8px 2px 8px;border-color:rgba(184,196,188,.35);background:rgba(184,196,188,.08)}
.msg.sys{align-self:center;background:transparent;border:0;color:var(--sh-dim);font-size:11px}
.composer{display:flex;gap:8px;margin-top:10px}
.composer .field{flex:1;margin:0}
/* 确认单卡 */
.apv{border:1px solid var(--sh-line);border-radius:4px;padding:12px 14px;background:rgba(255,255,255,.015);margin-bottom:10px;position:relative;animation:winIn .3s both}
.apv.pending{border-left:3px solid var(--sh-warn)}
.apv.approved{border-left:3px solid var(--sh-ok)}
.apv.changes{border-left:3px solid var(--sh-live)}
.apv .h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.apv .h b{font-size:14px;font-weight:600;flex:1}
.apv .h small{font:11px var(--mono);color:var(--sh-dim)}
.apv pre{margin:8px 0 0;white-space:pre-wrap;font:12.5px/1.6 inherit;color:var(--sh-ink);max-height:180px;overflow:auto;padding:8px 10px;border:1px solid var(--sh-line);border-radius:3px;background:rgba(0,0,0,.25)}
.apv .note{margin-top:8px;font-size:12px;color:var(--sh-warn)}
.apv .acts{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
/* 通知卡 */
.ntc{border:1px solid var(--sh-line);border-radius:4px;padding:10px 12px;margin-bottom:8px;background:rgba(255,255,255,.015);display:grid;grid-template-columns:1fr auto;gap:2px 10px}
.ntc b{font-size:13px;font-weight:600}
.ntc p{margin:3px 0 0;font-size:12.5px;color:var(--sh-ink);line-height:1.55;white-space:pre-wrap;grid-column:1}
.ntc small{font:10px var(--mono);color:var(--sh-dim);white-space:nowrap}
.ntc.pin{border-color:rgba(196,165,116,.45)}
.ntc .aud{font-size:10px;letter-spacing:.1em;color:var(--sh-dim);padding:1px 5px;border:1px solid var(--sh-line);border-radius:2px;margin-left:6px;vertical-align:1px}
/* 资料格 */
.files{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.file{border:1px solid var(--sh-line);border-radius:4px;background:rgba(255,255,255,.015);overflow:hidden;display:flex;flex-direction:column;min-height:132px;position:relative}
.file .pv{height:84px;background:#0a0c12 center/cover no-repeat;display:grid;place-items:center;font:600 18px var(--mono);color:var(--sh-metal);letter-spacing:.1em;border-bottom:1px solid var(--sh-line)}
.file .nm{padding:8px 10px 4px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.file .mt{padding:0 10px 8px;font:10px var(--mono);color:var(--sh-dim);display:flex;justify-content:space-between;gap:6px}
.file .kd{position:absolute;left:6px;top:6px;font-size:10px;padding:1px 6px;border-radius:2px;background:rgba(6,7,11,.75);color:var(--sh-metal);border:1px solid var(--sh-line2)}
.file .x{position:absolute;right:6px;top:6px;width:20px;height:20px;border:0;border-radius:2px;background:rgba(6,7,11,.75);color:var(--sh-dim);cursor:pointer;font-size:11px}
.file .x:hover{color:var(--sh-live)}
.dropzone{border:1px dashed var(--sh-line2);border-radius:4px;padding:16px;text-align:center;color:var(--sh-dim);font-size:12px;cursor:pointer;transition:.2s}
.dropzone:hover,.dropzone.over{border-color:var(--sh-metal);color:var(--sh-ink);background:rgba(184,196,188,.05)}
.dropzone input{display:none}
/* 空态 */
.sh-empty{padding:26px 16px;text-align:center;color:var(--sh-dim);font-size:12.5px;border:1px dashed var(--sh-line);border-radius:4px}
.sh-empty b{display:block;color:var(--sh-ink);font-weight:500;margin-bottom:4px}
/* 扫码 */
.scan{position:relative;border:1px solid var(--sh-line2);border-radius:6px;overflow:hidden;background:#000;aspect-ratio:4/3;max-height:52vh}
.scan video{width:100%;height:100%;object-fit:cover;display:block}
.scan .reticle{position:absolute;inset:14% 22%;border:1px solid rgba(184,196,188,.6);border-radius:6px;box-shadow:0 0 0 999px rgba(0,0,0,.35)}
.scan .reticle:after{content:"";position:absolute;left:4%;right:4%;top:0;height:2px;background:var(--sh-live);box-shadow:0 0 12px var(--sh-live);animation:scanLine 2.2s ease-in-out infinite}
@keyframes scanLine{0%,100%{top:0}50%{top:calc(100% - 2px)}}
.scan .hint{position:absolute;left:0;right:0;bottom:0;padding:8px;text-align:center;font:11px var(--mono);color:var(--sh-dim);background:linear-gradient(0deg,rgba(0,0,0,.7),transparent)}
.hit{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;align-items:center;padding:14px 16px;border:1px solid rgba(111,191,142,.45);border-radius:6px;background:rgba(111,191,142,.08);animation:winIn .25s both}
.hit.dup{border-color:rgba(224,166,75,.5);background:rgba(224,166,75,.08)}
.hit.bad{border-color:rgba(226,59,47,.5);background:rgba(226,59,47,.08)}
.hit .nm{font-size:22px;font-weight:600}
.hit small{color:var(--sh-dim);font-size:12px}
.qr{display:block;border-radius:4px}
.qr-miss{border:1px dashed var(--sh-line2);border-radius:4px}
.kv-line{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;padding:5px 0;border-bottom:1px dashed var(--sh-line)}
.kv-line small{color:var(--sh-dim)}
.kv-line:last-child{border-bottom:0}
.tip-row{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--sh-line);border-radius:4px;background:rgba(255,255,255,.015);font-size:12.5px;line-height:1.5;margin-bottom:8px}
.tip-row i{width:8px;height:8px;border-radius:50%;background:var(--sh-warn);flex:none;margin-top:6px}
.tip-row.hot i{background:var(--sh-live);box-shadow:0 0 0 3px rgba(226,59,47,.2)}
.tip-row.ok i{background:var(--sh-ok)}
.tip-row b{font-weight:600}
.tip-row .go{margin-left:auto;white-space:nowrap}
@media (max-width:980px){.sh-drawer aside,.sh-drawer.wide aside{width:100vw}.funnel.compact{grid-template-columns:repeat(3,1fr)}.stepper{grid-auto-columns:minmax(64px,1fr);overflow-x:auto}}

/* ---- 折叠导航组 ---- */
.sh-rail .grp.tog{cursor:pointer;display:flex;align-items:center;gap:6px;user-select:none}
.sh-rail .grp.tog:hover{color:var(--sh-ink)}
.sh-rail .grp.tog i{margin-left:auto;font-style:normal;font:12px var(--mono);color:var(--sh-dim)}
.sh-rail .grp.tog b{font:500 10px var(--mono);color:var(--sh-hot);background:rgba(226,59,47,.12);border-radius:8px;padding:0 5px}
.sh-rail .grp.closed{padding-bottom:8px}
body.rail-min .sh-rail .grp.tog i,body.rail-min .sh-rail .grp.tog b{display:none}

/* ---- 变化被看见 ---- */
@keyframes chgFlash{0%{background:rgba(228,194,122,.35);color:#fff}100%{background:transparent}}
@keyframes chgUp{0%{color:#6fbf8e;transform:translateY(-3px)}100%{color:inherit;transform:none}}
@keyframes chgDn{0%{color:#e0a64b;transform:translateY(3px)}100%{color:inherit;transform:none}}
[data-live].chg{border-radius:3px;animation:chgFlash 2.2s ease-out both}
[data-live].chg-up{animation:chgFlash 2.2s ease-out both,chgUp .9s cubic-bezier(.2,.8,.2,1) both}
[data-live].chg-dn{animation:chgFlash 2.2s ease-out both,chgDn .9s cubic-bezier(.2,.8,.2,1) both}
@keyframes rowFlash{0%{background:rgba(228,194,122,.22);box-shadow:inset 3px 0 0 var(--sh-warn)}100%{background:transparent;box-shadow:none}}
[data-live-row].chg-row{animation:rowFlash 2.6s ease-out both}
.funnel .bar i,.bar i,.ring svg circle:last-child,.track .ms i{transition:width .9s cubic-bezier(.2,.8,.2,1),stroke-dasharray .9s cubic-bezier(.2,.8,.2,1),background .4s}

/* ---- 建场进度（冷启动） ---- */
.setup{container-type:inline-size;min-width:0}
.setup-in{display:grid;grid-template-columns:200px minmax(0,1fr);gap:20px;align-items:start}
.setup.compact .setup-in{grid-template-columns:1fr}
@container (max-width:640px){.setup-in{grid-template-columns:1fr;gap:12px}.setup ol{grid-template-columns:1fr}.setup-head b{font-size:40px}}
@container (min-width:1100px){.setup ol{grid-template-columns:repeat(3,1fr)}}
.setup-head small{display:block;font-size:10px;letter-spacing:.24em;color:var(--sh-dim)}
.setup-head b{display:block;font:500 54px/1 var(--mono);color:var(--sh-ink);margin:8px 0}
.setup-head b span{font-size:22px;color:var(--sh-dim)}
.setup-head .bar{margin:6px 0 10px}
.setup-head p{margin:0;font-size:12.5px;color:var(--sh-dim);line-height:1.5}
.setup ol{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.setup.compact ol{grid-template-columns:1fr}
.setup li{display:grid;grid-template-columns:26px 1fr auto;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--sh-line);border-radius:4px;background:rgba(255,255,255,.02)}
.setup li[data-setup]{cursor:pointer}
.setup li[data-setup]:hover{border-color:var(--sh-metal);background:rgba(255,255,255,.04)}
.setup li i{width:26px;height:26px;border-radius:50%;border:1px solid var(--sh-line);display:grid;place-items:center;font:500 12px var(--mono);color:var(--sh-dim);font-style:normal}
.setup li.done i{border-color:var(--sh-ok);color:var(--sh-ok);background:rgba(111,191,142,.1)}
.setup li b{display:block;font-weight:500;font-size:13px;color:var(--sh-ink)}
.setup li b em{font:500 11px var(--mono);color:var(--sh-ok);font-style:normal;margin-left:4px}
.setup li.done b{color:var(--sh-dim);text-decoration:line-through;text-decoration-color:rgba(255,255,255,.25)}
.setup li small{display:block;font-size:11px;color:var(--sh-dim);margin-top:2px}
.setup li .go{font:500 11px var(--mono);color:var(--sh-warn);white-space:nowrap}
@media (max-width:980px){.setup{grid-template-columns:1fr}.setup ol{grid-template-columns:1fr}}

/* ---- 座次画布（eos-seat.js 控制器渲染；工位 / 业主台共用） ---- */
.seatwrap{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:14px;min-height:520px}
.seatcol{min-width:0;display:flex;flex-direction:column;min-height:0}
.seattbar{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:0 2px 8px}
body.os.seat-wide .seatwrap{grid-template-columns:minmax(0,1fr) 300px}
.seatcv{position:relative;overflow:auto;height:clamp(480px,calc((100vh - 290px) / var(--sh-zoom,1)),1100px);border:1px solid var(--sh-line);border-radius:var(--sh-r,6px);background:
  radial-gradient(ellipse 60% 22% at 50% 0%,rgba(228,194,122,.07),transparent 70%),
  radial-gradient(circle at 1px 1px,rgba(255,255,255,.055) 1px,transparent 1.5px) 0 0/24px 24px,#0c0d11;touch-action:pan-x pan-y}
.seatcv .seatempty{position:absolute;left:50%;top:44%;transform:translate(-50%,-50%);width:min(380px,84%);text-align:center;background:rgba(14,15,18,.92);border:1px dashed var(--sh-line);border-radius:6px;padding:18px 16px}
.seatcv .seatempty b{display:block;margin-bottom:4px}.seatcv .seatempty span{display:block;color:var(--sh-dim);font-size:12.5px;line-height:1.5}
.seatcv .seattbar{position:sticky;top:0;z-index:6;display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:8px 10px;background:rgba(12,13,17,.9);backdrop-filter:blur(8px);border-bottom:1px solid var(--sh-line)}
.tbl header button[data-sa="rowflip"]{opacity:1;font-size:11px;letter-spacing:.04em;border:1px solid var(--sh-line);padding:0 6px;min-width:auto;height:22px;line-height:20px}
.seatcv .stagebar{position:absolute;left:50%;top:10px;transform:translateX(-50%);padding:4px 44px;border:1px solid rgba(228,194,122,.5);border-radius:2px;color:var(--sh-warn);font:500 11px var(--mono);letter-spacing:.3em;pointer-events:none;white-space:nowrap;background:rgba(228,194,122,.06)}
.tbl{position:absolute;width:190px;border:1px solid rgba(232,230,225,.14);border-radius:10px;background:linear-gradient(180deg,rgba(28,31,38,.98),rgba(18,20,25,.98));box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 14px 34px -14px rgba(0,0,0,.8);user-select:none;-webkit-user-select:none;display:flex;flex-direction:column;box-sizing:border-box;touch-action:none}
.seatwrap:not(.ro) .tbl{cursor:grab}
.seatwrap.ro .tbl{touch-action:auto}
.tbl .grip{position:absolute;right:0;bottom:0;width:18px;height:18px;cursor:nwse-resize;touch-action:none;border-radius:0 0 10px 0;background:linear-gradient(135deg,transparent 55%,rgba(232,230,225,.28) 55%,rgba(232,230,225,.28) 65%,transparent 65%,transparent 75%,rgba(232,230,225,.28) 75%,rgba(232,230,225,.28) 85%,transparent 85%)}
.tbl .grip:hover,.tbl.dragging .grip{background:linear-gradient(135deg,transparent 55%,var(--sh-warn) 55%,var(--sh-warn) 65%,transparent 65%,transparent 75%,var(--sh-warn) 75%,var(--sh-warn) 85%,transparent 85%)}
.tbl.stage{border-color:rgba(228,194,122,.45);background:linear-gradient(180deg,rgba(40,35,26,.98),rgba(20,19,17,.98))}
.tbl header{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:0 10px;height:34px;cursor:grab;border-bottom:1px solid rgba(232,230,225,.09);touch-action:none}
.tbl header:active{cursor:grabbing}
.tbl header b{font-weight:600;font-size:13px;color:var(--sh-ink);letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tbl.stage header b{color:var(--sh-warn)}
.tbl header small{font:11px var(--mono);color:var(--sh-dim);padding:1px 6px;border-radius:9px;background:rgba(255,255,255,.06)}
.tbl header button{border:0;background:transparent;color:var(--sh-dim);cursor:pointer;font-size:12px;touch-action:auto;min-width:22px;min-height:22px;border-radius:3px;padding:0;opacity:0;transition:opacity .15s}
.tbl:hover header button,.tbl header button:focus-visible{opacity:1}
@media (pointer:coarse){.tbl header button{opacity:1}}
.tbl header button:hover{color:var(--sh-ink);background:rgba(255,255,255,.08)}
.tbl header button[data-sa="tbldel"]:hover{color:var(--sh-live)}
.tbl .seats{display:grid;grid-template-columns:repeat(auto-fill,minmax(82px,1fr));gap:5px;padding:8px;flex:1;align-content:start}
.tbl.sized .seats{grid-auto-rows:minmax(30px,1fr);align-content:stretch}
.tbl.row .seats{display:flex;flex-direction:column;flex-wrap:nowrap;gap:5px;padding:8px}
.tbl.rowh .seats{display:flex !important;flex-direction:row !important;flex-wrap:nowrap !important;gap:5px;padding:8px 10px}
.rowdir{display:flex;margin:6px 8px 0;border:1px solid var(--sh-line);border-radius:4px;overflow:hidden;flex:0 0 auto}
.rowdir button{flex:1;border:0;background:transparent;color:var(--sh-dim);height:26px;font:600 11px inherit;cursor:pointer;letter-spacing:.04em;padding:0 4px;white-space:nowrap}
.rowdir button.on{background:var(--sh-ink);color:var(--sh-bg)}
.rowdir button:not(.on):hover{background:rgba(255,255,255,.06);color:var(--sh-ink)}
.rowdir.ro button{cursor:default}
.tblpick{display:grid;grid-template-columns:1fr 1fr;gap:8px;min-width:min(420px,80vw)}
.tblpick .btn{display:flex;flex-direction:column;align-items:flex-start;gap:2px;height:auto;padding:10px 12px;text-align:left}
.tblpick .btn b{font-size:14px}
.tblpick .btn span{font-size:11px;color:var(--sh-dim);font-weight:400}
.tbl.rowh{min-width:400px}
.tbl.rowh .seat{flex:1 1 0;min-width:0;flex-direction:column;justify-content:center;text-align:center;min-height:48px;padding:4px 2px;border-radius:6px}
.tbl.rowh .seat small{opacity:1}
.tbl.rowh .seat b{font-size:12px;line-height:1.15;display:block;max-height:2.3em;overflow:hidden}
.tbl.stage .seats{display:flex;gap:5px;padding:8px 10px}
.tbl.stage .seat{flex:1 1 0;min-width:0;flex-direction:column;justify-content:center;text-align:center;min-height:56px;padding:4px 2px;border-radius:6px}
.tbl.stage .seat small{opacity:1}
.tbl.stage .seat b{font-size:12px;line-height:1.15;display:block;max-height:2.3em;overflow:hidden}
.tbl .stagehint{font:10px var(--mono);color:var(--sh-dim);padding:0 10px 7px;letter-spacing:.06em}
/* 圆桌：座位围圈 + 中心圆盘 */
.tbl.round{border-radius:14px}
.tbl.round .orbit{position:relative;flex:1;margin:6px}
.tbl.round .orbit .seat{position:absolute;width:46px;height:46px;margin:-23px 0 0 -23px;border-radius:50%;padding:0;justify-content:center;text-align:center;flex-direction:column;gap:0;line-height:1.1}
.tbl.round .orbit .seat small{position:absolute;top:-4px;left:50%;transform:translateX(-50%);font:600 9px var(--mono);padding:0 4px;border-radius:6px;background:#15171d;color:var(--sh-dim);opacity:1;border:1px solid rgba(232,230,225,.12)}
.tbl.round .orbit .seat.on small{color:var(--sh-ink);border-color:rgba(184,196,188,.45)}
.tbl.round .orbit .seat.on.leader small{color:var(--sh-warn);border-color:rgba(228,194,122,.6)}
.tbl.round .orbit .seat b{font-size:11px;font-weight:600;display:block;padding:0 3px;max-height:2.2em;overflow:hidden;word-break:break-all}
.tbl.round .orbit .seat .lede{font-size:10px}
.tbl.round .disc{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;background:radial-gradient(circle at 50% 35%,rgba(255,255,255,.07),rgba(255,255,255,.015) 65%,transparent 100%);border:1px solid rgba(232,230,225,.1);box-shadow:inset 0 0 0 6px rgba(0,0,0,.18);pointer-events:none}
.tbl.round .disc b{font:600 22px var(--mono);color:var(--sh-ink);line-height:1;font-variant-numeric:tabular-nums}
.tbl.round .disc small{font:10px var(--mono);color:var(--sh-dim);letter-spacing:.1em}
.tbl .loose{display:flex;flex-wrap:wrap;gap:4px;padding:0 8px 8px}
.tbl .loose .seat{min-height:24px;font-size:11px;padding:2px 6px;border-radius:12px}
.seat{min-height:30px;border:1px dashed rgba(232,230,225,.2);border-radius:6px;font-size:12px;padding:3px 8px;display:flex;align-items:center;gap:5px;color:var(--sh-dim);background:rgba(255,255,255,.015);transition:border-color .15s,background .15s,box-shadow .15s}
.seat small{font:10.5px var(--mono);color:var(--sh-dim);opacity:.75}
.seat b{font-weight:500}
.seat.on{border-style:solid;border-color:rgba(184,196,188,.42);background:linear-gradient(180deg,rgba(184,196,188,.16),rgba(184,196,188,.07));color:var(--sh-ink);cursor:grab;touch-action:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.08)}
.seat.on.leader{border-color:rgba(228,194,122,.65);background:linear-gradient(180deg,rgba(228,194,122,.2),rgba(228,194,122,.08))}
.seat.over{border-color:var(--sh-ok);background:rgba(111,191,142,.18);box-shadow:0 0 0 2px rgba(111,191,142,.35)}
.seatwrap:not(.ro) .seat:not(.on){cursor:pointer}
.seatwrap:not(.ro) .seat:not(.on):hover{border-color:var(--sh-metal);color:var(--sh-ink)}
.seatwrap.picking .seat:not(.on){border-color:rgba(111,191,142,.55);border-style:dashed;animation:seatpick 1.2s ease-in-out infinite}
@keyframes seatpick{0%,100%{background:transparent}50%{background:rgba(111,191,142,.12)}}
.pchip.sel{border-color:var(--sh-ok);background:rgba(111,191,142,.14);box-shadow:0 0 0 1px var(--sh-ok)}
.seatpop{position:fixed;z-index:390;width:290px;max-width:calc(100vw - 16px);background:#15171c;border:1px solid var(--sh-line);border-radius:6px;box-shadow:0 18px 50px rgba(0,0,0,.6);padding:10px 12px 12px;font-size:12.5px;color:var(--sh-ink)}
.seatpop h4{margin:0 0 8px;font-size:13px;font-weight:600;display:flex;align-items:center;gap:8px}
.seatpop h4 .lede{font-weight:400}
.seatpop h4 .x{margin-left:auto;border:0;background:transparent;color:var(--sh-dim);cursor:pointer;font-size:13px;padding:2px 6px}
.seatpop .field{width:100%;margin:0 0 6px;font-size:12.5px}
.seatpop .row .btn.sm{min-width:30px;padding:0 8px;height:30px}
.seatpop .pf{display:grid;gap:0}
.seatpop .list{display:flex;flex-direction:column;gap:3px;max-height:240px;overflow:auto;margin:2px 0 8px}
.seatpop .list button{display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;text-align:left;border:1px solid var(--sh-line);background:rgba(255,255,255,.02);color:var(--sh-ink);border-radius:3px;padding:7px 9px;font:inherit;cursor:pointer}
.seatpop .list button:hover{border-color:var(--sh-ok);background:rgba(111,191,142,.1)}
.seatpop .list button small{color:var(--sh-dim);font-size:10.5px;text-align:right}
.seatpop details{border-top:1px solid var(--sh-line);padding-top:8px;margin-top:4px}
.seatpop summary{cursor:pointer;color:var(--sh-dim);font-size:12px;margin-bottom:8px}
.seatwrap.ro .seat.on,.seatwrap.ro .tbl header,.seatwrap.ro .tbl{cursor:default;touch-action:auto}
.seatside{display:flex;flex-direction:column;gap:8px;min-height:0}
.seatside .pool{flex:1;overflow:auto;border:1px solid var(--sh-line);border-radius:4px;padding:6px;display:flex;flex-direction:column;gap:4px;min-height:200px;max-height:440px}
.pchip{display:flex;justify-content:space-between;gap:6px;padding:7px 8px;border:1px solid var(--sh-line);border-radius:3px;font-size:12px;cursor:grab;background:rgba(255,255,255,.02);touch-action:none}
.seatwrap.ro .pchip{cursor:default;touch-action:auto}
.pchip:active{cursor:grabbing}
.pchip small{color:var(--sh-dim);font-size:10.5px}
.pchip.leader{border-color:rgba(228,194,122,.45)}
.pchip.dragging,.seat.dragging{opacity:.35}
.tbl.dragging{opacity:.85;box-shadow:0 16px 40px rgba(0,0,0,.6)}
.seatside .pool.over{border-color:var(--sh-ok);box-shadow:inset 0 0 0 1px var(--sh-ok)}
.seatghost{position:fixed;z-index:400;pointer-events:none;padding:6px 10px;border-radius:4px;background:#1a1d24;border:1px solid var(--sh-ok);color:var(--sh-ink);font-size:12px;box-shadow:0 10px 30px rgba(0,0,0,.5);white-space:nowrap}
.seatsvg{display:block;max-width:100%}
.seatsvg text{font-family:system-ui,"PingFang SC","Microsoft YaHei",sans-serif}
.seatside .pool{max-height:none}
@media (max-width:980px){.seatwrap{grid-template-columns:1fr}.seatcv{height:min(60vh,520px)}.seatside .pool{max-height:220px}}

/* ---- 费用 ---- */
.bg-sum{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}
.bg-sum .k b{font-size:22px}
.bgt td input{width:100%;background:transparent;border:0;border-bottom:1px solid transparent;color:var(--sh-ink);font:inherit;padding:2px 0}
.bgt td input:focus{outline:0;border-bottom-color:var(--sh-metal)}
.bgt td select{background:transparent;border:0;color:var(--sh-ink);font:inherit}
.bgt tr.pending td{color:var(--sh-warn)}
.bgt tr.changes td{color:var(--sh-hot)}
.bgt tr.confirmed td{color:var(--sh-ink)}
.bgt tr.removed td{text-decoration:line-through;color:var(--sh-dim)}
.delta.up{color:var(--sh-hot)}.delta.dn{color:var(--sh-ok)}

/* ---- 口令遮罩 ---- */
.mask{font-family:var(--mono);letter-spacing:.2em;color:var(--sh-dim)}
.mask.on{letter-spacing:0;color:var(--sh-ink)}

/* ---- 总控紧凑 live 条 ---- */
.livebar{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:16px;align-items:center;padding:10px 14px;border:1px solid rgba(226,59,47,.35);border-radius:4px;background:rgba(226,59,47,.05);margin-bottom:8px;min-width:0}
.livebar .who{min-width:0}.livebar .who b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.livebar .hero{font:500 min(var(--hero,64px),40px)/1 var(--mono);color:var(--sh-ink);min-width:64px;text-align:center}
.livebar .hero small{display:block;font:10px var(--mono);letter-spacing:.2em;color:var(--sh-dim);margin-top:4px}
.livebar .who b{display:block;font-weight:500;font-size:14px}
.livebar .who small{font:11px var(--mono);color:var(--sh-dim)}
.livebar .sigs{display:flex;gap:14px;margin-top:6px;flex-wrap:wrap}
.livebar .sigs span{font:11px var(--mono);color:var(--sh-dim)}
.livebar .sigs span b{color:var(--sh-ink);margin-left:4px}
.livebar .doors2{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.livebar .doors2 a{font:11px var(--mono);color:var(--sh-ink);border:1px solid var(--sh-line);border-radius:3px;padding:4px 8px;text-decoration:none}
.livebar .doors2 a:hover{border-color:var(--sh-metal)}
.urg{display:inline-flex;gap:4px;flex-wrap:wrap}
.kp .k.hot b{color:var(--sh-live)}.kp .k.ok b{color:var(--sh-ok)}.kp .k.warn b{color:var(--sh-warn)}
.track .ms.auto i{border-style:dashed;color:var(--sh-dim);background:transparent;font-size:8px}.track .ms.auto span{color:var(--sh-dim)}.track .ms small em.sug{color:var(--sh-dim);border:1px dashed var(--sh-line2);border-radius:2px;padding:0 3px}

/* 确认单里的座次快照 */
.apv .apmap{margin:8px 0;max-height:380px;overflow:auto;border:1px solid var(--sh-line);border-radius:4px;padding:8px;background:#0e0f12}
.apv details summary{font-size:12px;margin:6px 0 4px}
.apv details pre{margin-top:4px}

.seatzoom{display:inline-flex;align-items:center;gap:2px;margin-left:auto;border:1px solid var(--sh-line);border-radius:3px;padding:0 2px}
.seatzoom button{border:0;background:transparent;color:var(--sh-ink);min-width:24px;height:22px;cursor:pointer;font-size:13px;white-space:nowrap;padding:0 4px;flex:none}
.seatzoom button:hover{color:var(--sh-warn)}
.seatzoom b{font:10.5px var(--mono);color:var(--sh-dim);min-width:36px;text-align:center}

/* =====================================================================
   EventOS Design System v2 · 覆盖层（靠层叠顺序覆盖上面的 v1 规则）
   1) 尺度：body 级 zoom（按屏幕宽度自动 + 三档密度），全站 px 一起长大
   2) 对比与字距：dim 提到 ≥5:1，中文字距归零
   3) 表面三层：底 / 面板 / 浮起，顶部 1px 高光代替四周描边，嵌套元素去边框
   4) 阶段氛围：筹备冷金属 / 现场暖红 / 展墙绿 / 收尾金箔
   5) 统一弹层：sh-pop（就地小面板）/ sh-modal（确认·输入）/ toast / 命令面板 同一质感
   6) 检视器：抽屉停靠到右舷；窗格聚焦 / 最大化；状态栏密度与主题
   7) 明亮主题（业主台）
   8) reduced-motion 全关
   ===================================================================== */
:root{
  --sh-dim:#9A958B;--sh-mute:#6E6A63;--sh-line:rgba(232,230,225,.10);--sh-line2:rgba(232,230,225,.18);
  --sh-raise:#141821;--sh-glow:rgba(184,196,188,.10);--sh-ambient:rgba(184,196,188,.08);
  --sh-zoom:1;--sh-ease:cubic-bezier(.2,.7,.2,1);--sh-r:6px;--sh-r2:10px;
  --sh-hot:var(--sh-live);
}
@media (min-width:1500px){:root{--sh-dock:340px}}
body.os{zoom:var(--sh-zoom);font-family:system-ui,-apple-system,"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",sans-serif;font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased}
body.os .mono,body.os .sh-clock,body.os .kp .k b,body.os .sig2 b,body.os .hero-n,body.os .meta{font-feature-settings:"tnum","zero"}
/* 字距归零（中文别拉开），层级靠字重与颜色 */
.sh-rail .grp{letter-spacing:.12em;font-size:10.5px;font-weight:600;color:var(--sh-mute)}
.sh-rail .grp.tog{color:var(--sh-mute)}
.sh-nav{font-size:13.5px;height:36px}
.sh-nav .bd{font-weight:600}
.win>header h3{letter-spacing:.06em;font-size:12px;font-weight:600;color:var(--sh-dim)}
.win.focus>header h3,.win:focus-within>header h3{color:var(--sh-ink)}
.sh-dock>header{letter-spacing:.1em;font-weight:600}
.sh-dock .sec h4,.dsec h4{letter-spacing:.1em;font-size:10.5px;font-weight:600}
.sh-brand .area{letter-spacing:.1em}
.sh-role{letter-spacing:.06em}
.kp .k small{letter-spacing:.02em;font-size:11.5px}
.dock-now small{letter-spacing:.1em;font-weight:600}
.sh-head h1{font-size:22px;letter-spacing:-.01em;font-weight:650}
.sh-head .sub{font-size:12.5px;line-height:1.55;max-width:900px}
.lede{color:var(--sh-dim)}
/* 表面：三层 + 顶部高光 + 深阴影，去嵌套边框 */
.win{border-color:var(--sh-line);border-radius:var(--sh-r);background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,.008) 40%),var(--sh-panel);box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 14px 34px -22px rgba(0,0,0,.9);transition:border-color .2s,box-shadow .2s}
.win:before,.win:after{opacity:0;transition:opacity .2s}
.win.live:before,.win.live:after,.win.focus:before,.win.focus:after{opacity:.75}
.win.focus{border-color:var(--sh-line2);box-shadow:inset 0 1px 0 rgba(255,255,255,.07),0 0 0 1px rgba(184,196,188,.08),0 18px 40px -22px rgba(0,0,0,.95)}
.win>header{height:38px;border-bottom-color:var(--sh-line)}
.kp .k{border:0;background:rgba(255,255,255,.03);box-shadow:inset 0 1px 0 rgba(255,255,255,.04);border-radius:5px}
.kp .k b{font-size:28px}
.sig2 div{border:0;background:rgba(255,255,255,.035);border-radius:5px}
.sh-pal li em,.feed .it em,.pill-s,.tab b,.sh-nav .bd{border-radius:4px}
.apv,.ntc,.file,.tip-row,.msg,.glass,.card,.type,.kpi{border-radius:var(--sh-r)}
.sh-top{background:linear-gradient(180deg,rgba(255,255,255,.04),rgba(255,255,255,0)),var(--sh-panel)}
.sh-ctx .ev{border-radius:5px;font-size:12.5px}
.sh-cmdk{border-radius:5px}
.sh-ib{border-radius:5px}
/* 工作区背景：网格 + 阶段氛围光 */
.sh-work{background:radial-gradient(rgba(232,230,225,.04) 1px,transparent 1px) 0 0/22px 22px,radial-gradient(70% 45% at 70% -6%,var(--sh-ambient),transparent 62%),radial-gradient(40% 30% at 0% 100%,rgba(196,165,116,.04),transparent 60%),var(--sh-bg);transition:background .6s}
body[data-stage="live"]{--sh-ambient:rgba(226,59,47,.12)}
body[data-stage="warmup"],body[data-stage="draft"]{--sh-ambient:rgba(184,196,188,.09)}
body[data-stage="photos_open"]{--sh-ambient:rgba(111,191,142,.10)}
body[data-stage="ended"],body[data-stage="archived"]{--sh-ambient:rgba(196,165,116,.08)}
/* 按钮 / 字段 */
.btn{border-radius:5px;transition:background .15s,border-color .15s,color .15s,transform .05s;font-weight:500}
.btn:hover{background:rgba(184,196,188,.10)}
.btn.solid:hover{filter:brightness(1.06);background:var(--sh-metal)}
.btn:active{transform:translateY(1px)}
.btn:focus-visible,.sh-nav:focus-visible,.tab:focus-visible,.chip:focus-visible,.sh-ib:focus-visible{outline:2px solid rgba(184,196,188,.55);outline-offset:1px}
.field{border-radius:5px;transition:border-color .15s,box-shadow .15s}
.field:focus{outline:0;border-color:var(--sh-metal);box-shadow:0 0 0 3px rgba(184,196,188,.14)}
select.field{appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--sh-dim) 50%),linear-gradient(135deg,var(--sh-dim) 50%,transparent 50%);background-position:calc(100% - 15px) 50%,calc(100% - 10px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:28px}
.win .list th{color:var(--sh-dim);font-weight:600;letter-spacing:.02em;font-size:11.5px}
.win .list td{font-size:13px}
.sh-empty{border-radius:var(--sh-r)}
/* 滚动条 */
body.os ::-webkit-scrollbar{width:8px;height:8px}body.os ::-webkit-scrollbar-thumb{background:rgba(232,230,225,.14);border-radius:4px}body.os ::-webkit-scrollbar-thumb:hover{background:rgba(232,230,225,.22)}
/* ---- 统一弹层 ---- */
.sh-pop,.seatpop{position:fixed;z-index:390;min-width:220px;max-width:min(380px,calc(100vw - 16px));background:var(--sh-raise);border:1px solid var(--sh-line2);border-radius:8px;box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 24px 60px -12px rgba(0,0,0,.8);padding:10px 12px 12px;font-size:12.5px;color:var(--sh-ink);animation:popIn .16s var(--sh-ease) both;transform-origin:top left}
.seatpop{width:290px}
.sh-pop h4,.seatpop h4{margin:0 0 8px;font-size:13px;font-weight:600;display:flex;align-items:center;gap:8px}
.sh-pop h4 .x,.seatpop h4 .x{margin-left:auto;border:0;background:transparent;color:var(--sh-dim);cursor:pointer;font-size:13px;padding:2px 6px;border-radius:4px}
.sh-pop h4 .x:hover,.seatpop h4 .x:hover{color:var(--sh-ink);background:rgba(255,255,255,.06)}
@keyframes popIn{from{opacity:0;transform:scale(.97) translateY(-4px)}to{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.sh-modal{position:fixed;inset:0;z-index:75;display:grid;place-items:center;background:rgba(2,3,6,.62);backdrop-filter:blur(6px);animation:fadeIn .15s both}
.sh-modal .box{width:min(460px,92vw);background:var(--sh-raise);border:1px solid var(--sh-line2);border-radius:var(--sh-r2);box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 40px 100px -20px rgba(0,0,0,.9);padding:20px 22px 18px;animation:popIn .18s var(--sh-ease) both}
.sh-modal .kick{font:10.5px var(--mono);letter-spacing:.14em;color:var(--sh-metal);margin-bottom:6px}
.sh-modal .kick.danger{color:var(--sh-live)}
.sh-modal h3{margin:0 0 8px;font-size:16px;font-weight:600;line-height:1.35}
.sh-modal p{margin:0 0 14px;color:var(--sh-dim);font-size:13px;line-height:1.65;white-space:pre-line}
.sh-modal .field{margin:0 0 14px;height:38px;width:100%}
.sh-modal .acts{display:flex;justify-content:flex-end;gap:8px}
.sh-modal .btn.danger{border-color:rgba(226,59,47,.6);color:var(--sh-live)}
.sh-modal .btn.danger.solid{background:var(--sh-live);border-color:var(--sh-live);color:#fff}
.sh-modal .btn.danger.solid:hover{background:var(--sh-live)}
.sh-toast{background:var(--sh-raise);border-radius:var(--sh-r);border-color:var(--sh-line2);box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 16px 40px -10px rgba(0,0,0,.7);font-size:12.5px}
.sh-pal .box{border-radius:var(--sh-r2);background:var(--sh-raise)}
.sh-drawer aside{background:var(--sh-panel2)}
/* ---- 检视器：抽屉停靠到右舷（桌面 & 右舷可见时） ---- */
.sh-drawer.dock{inset:auto;top:var(--sh-top);right:0;bottom:var(--sh-status);width:var(--sh-dock);z-index:6}
.sh-drawer.dock .scrim{display:none}
.sh-drawer.dock aside{width:100%;box-shadow:none;border-left:1px solid var(--sh-line);background:var(--sh-panel);animation:fadeIn .18s both}
.sh-drawer.dock header{height:40px;padding:0 12px;gap:8px}
.sh-drawer.dock header h3{font-size:13.5px}
.sh-drawer.dock .body{padding:12px 12px 24px}
.sh-drawer .kick{display:none;font:10px var(--mono);letter-spacing:.14em;color:var(--sh-metal);white-space:nowrap}
.sh-drawer.dock .kick{display:inline}
.sh-drawer .body .grid2{gap:6px}
@media (min-width:1500px){body.os.insp:not(.dock-off){--sh-dock:380px}}
/* ---- 窗格聚焦 / 最大化 ---- */
.win-max{border:0;background:transparent;color:var(--sh-dim);width:22px;height:22px;border-radius:4px;cursor:pointer;opacity:0;transition:opacity .15s,background .15s;display:grid;place-items:center;flex:none;margin-left:6px}
.win-max svg{width:13px;height:13px}
.win:hover .win-max,.win.max .win-max,.win.focus .win-max{opacity:1}
.win-max:hover{color:var(--sh-ink);background:rgba(255,255,255,.07)}
.win.max{position:fixed;top:var(--sh-top);left:var(--sh-rail);right:var(--sh-dock);bottom:var(--sh-status);z-index:8;border-radius:0;animation:none;margin:0;box-shadow:none;border-width:0 0 0 1px}
body.rail-min .win.max{left:var(--sh-rail-min)}
body.dock-off .win.max{right:0}
.win.max>.body{overflow:auto}
body.has-max .sh-work{overflow:hidden}
/* ---- 状态栏交互 ---- */
.sh-status button{border:0;background:transparent;color:var(--sh-dim);font:inherit;cursor:pointer;padding:0 5px;height:100%}
.sh-status button.on{color:var(--sh-ink)}
.sh-status button:hover{color:var(--sh-ink)}
.sh-status .cf{color:var(--sh-warn)}
/* ---- 通知中心 ---- */
.sh-notif{width:360px;max-width:calc(100vw - 16px);padding:0;overflow:hidden}
.sh-notif header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid var(--sh-line);font-size:12.5px;font-weight:600}
.sh-notif header small{font:10.5px var(--mono);color:var(--sh-dim);font-weight:400}
.sh-notif .list2{max-height:52vh;overflow:auto}
.sh-notif .it{display:grid;grid-template-columns:44px 1fr;gap:8px;padding:8px 12px;font-size:12.5px;border-bottom:1px solid var(--sh-line)}
.sh-notif .it:last-child{border-bottom:0}
.sh-notif .it small{font:11px var(--mono);color:var(--sh-dim);padding-top:1px}
.sh-notif .it em{font-style:normal;color:var(--sh-dim);font-size:10px;letter-spacing:.08em;margin-right:6px;padding:1px 4px;border:1px solid var(--sh-line);border-radius:3px;vertical-align:1px}
.sh-notif .it.new{border-left:2px solid var(--sh-live)}
.sh-notif .foot{display:flex;gap:6px;padding:8px 12px;border-top:1px solid var(--sh-line);flex-wrap:wrap}
.sh-notif .hots{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:10px 12px;border-bottom:1px solid var(--sh-line)}
.sh-notif .hots button{border:0;text-align:left;padding:8px 10px;border-radius:5px;background:rgba(226,59,47,.10);color:var(--sh-ink);font:inherit;cursor:pointer}
.sh-notif .hots button small{display:block;color:var(--sh-dim);font-size:11px}
.sh-notif .hots button b{font:600 18px var(--mono);color:var(--sh-live)}
/* ---- 档案式检视 ---- */
.prof{display:flex;gap:12px;align-items:center;padding:4px 0 12px;border-bottom:1px solid var(--sh-line);margin-bottom:12px}
.prof .av{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;font:600 18px/1 var(--mono);color:#06070B;background:linear-gradient(135deg,#dfe7e2,var(--sh-metal));flex:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.5)}
.prof .av.leader{background:linear-gradient(135deg,#f0dfb4,var(--sh-foil))}
.prof .av.staff{background:linear-gradient(135deg,#9fb3c9,#5f7a94);color:#fff}
.prof .who{min-width:0;flex:1}
.prof .who b{display:block;font-size:16px;font-weight:600;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.prof .who small{display:block;color:var(--sh-dim);font-size:12px;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.prof .st{display:flex;flex-direction:column;gap:4px;align-items:flex-end;flex:none}
.ribbon{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px}
.ribbon span{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 9px;border-radius:12px;font-size:11.5px;background:rgba(255,255,255,.04);color:var(--sh-dim);border:1px solid var(--sh-line)}
.ribbon span i{width:6px;height:6px;border-radius:50%;background:var(--sh-dim)}
.ribbon span.ok{color:var(--sh-ok);border-color:rgba(111,191,142,.35)}.ribbon span.ok i{background:var(--sh-ok)}
.ribbon span.hot{color:var(--sh-live);border-color:rgba(226,59,47,.4)}.ribbon span.hot i{background:var(--sh-live)}
.ribbon span.warn{color:var(--sh-warn);border-color:rgba(224,166,75,.4)}.ribbon span.warn i{background:var(--sh-warn)}
.ribbon span.gold{color:var(--sh-foil);border-color:rgba(196,165,116,.45)}.ribbon span.gold i{background:var(--sh-foil)}
/* ---- 指挥台 ---- */
.cmdk-hero{display:grid;grid-template-columns:auto 1fr;gap:20px;align-items:center;padding:6px 2px 10px}
.cmdk-hero .big{font:600 clamp(48px,6vw,84px)/1 var(--mono);letter-spacing:-.04em;color:var(--sh-ink);text-shadow:0 0 50px var(--sh-glow)}
.cmdk-hero .big small{display:block;font:11px var(--mono);letter-spacing:.14em;color:var(--sh-dim);margin-bottom:6px}
.cmdk-hero .big em{font-style:normal;font-size:18px;color:var(--sh-dim);margin-left:6px;letter-spacing:0}
.cmdk-hero .rt{min-width:0}
.cmdk-hero .rt h2{margin:0 0 6px;font-size:18px;font-weight:600;line-height:1.3}
.cmdk-hero .rt p{margin:0;color:var(--sh-dim);font-size:12.5px;line-height:1.6}
.chains{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.chain{padding:12px 14px;border-radius:var(--sh-r);background:rgba(255,255,255,.03);box-shadow:inset 0 1px 0 rgba(255,255,255,.04);cursor:pointer;transition:background .15s}
.chain:hover{background:rgba(255,255,255,.05)}
.chain small{display:block;font-size:11px;letter-spacing:.06em;color:var(--sh-dim);font-weight:600}
.chain b{display:block;font:600 26px/1.1 var(--mono);margin:6px 0 4px}
.chain b em{font-style:normal;font-size:13px;color:var(--sh-dim);margin-left:4px}
.chain .bar{height:4px;background:rgba(255,255,255,.06);border-radius:2px;overflow:hidden;margin:8px 0 6px}
.chain .bar i{display:block;height:100%;background:linear-gradient(90deg,rgba(184,196,188,.5),var(--sh-metal))}
.chain.hot .bar i{background:linear-gradient(90deg,rgba(226,59,47,.5),var(--sh-live))}
.chain.ok .bar i{background:linear-gradient(90deg,rgba(111,191,142,.5),var(--sh-ok))}
.chain span{font-size:11.5px;color:var(--sh-dim)}
.advice{display:grid;gap:8px}
.adv{display:grid;grid-template-columns:auto 1fr auto;gap:10px 12px;align-items:center;padding:10px 12px;border-radius:var(--sh-r);background:rgba(255,255,255,.03);box-shadow:inset 0 1px 0 rgba(255,255,255,.04);animation:winIn .3s both}
.adv i{width:8px;height:8px;border-radius:50%;background:var(--sh-warn);box-shadow:0 0 0 3px rgba(224,166,75,.15)}
.adv.hot i{background:var(--sh-live);box-shadow:0 0 0 3px rgba(226,59,47,.18)}
.adv.info i{background:var(--sh-metal);box-shadow:0 0 0 3px rgba(184,196,188,.15)}
.adv.ok i{background:var(--sh-ok);box-shadow:0 0 0 3px rgba(111,191,142,.15)}
.adv b{font-size:13px;font-weight:600;display:block}
.adv small{display:block;color:var(--sh-dim);font-size:12px;line-height:1.5;margin-top:2px}
.adv .go{white-space:nowrap}
.adv.done{opacity:.5}
/* ---- reduced motion ---- */
@media (prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
/* ---- 明亮主题（业主台 / 投屏） ---- */
body.os.light{
  --sh-bg:#F2F0EA;--sh-panel:#FBFAF7;--sh-panel2:#FFFFFF;--sh-raise:#FFFFFF;
  --sh-line:rgba(20,22,30,.10);--sh-line2:rgba(20,22,30,.18);
  --sh-ink:#17181D;--sh-dim:#5E5B55;--sh-mute:#8A867E;--sh-metal:#5B6B63;--sh-ok:#2F8F5B;--sh-warn:#A9701A;--sh-live:#C9302C;--sh-foil:#8A6D2F;
  --sh-glow:rgba(91,107,99,.12);--sh-ambient:rgba(91,107,99,.10);
  --bg:#F2F0EA;--panel:#FBFAF7;--ink:#17181D;--dim:#5E5B55;--line:rgba(20,22,30,.12);--metal:#5B6B63;
  color-scheme:light;
}
body.os.light[data-stage="live"]{--sh-ambient:rgba(201,48,44,.10)}
body.os.light[data-stage="photos_open"]{--sh-ambient:rgba(47,143,91,.10)}
body.os.light .sh-work{background:radial-gradient(rgba(20,22,30,.07) 1px,transparent 1px) 0 0/22px 22px,radial-gradient(70% 45% at 70% -6%,var(--sh-ambient),transparent 62%),var(--sh-bg)}
body.os.light .sh-top{background:var(--sh-panel);border-bottom-color:var(--sh-line)}
body.os.light .sh-top:after{opacity:.35}
body.os.light .win{background:var(--sh-panel);box-shadow:inset 0 1px 0 #fff,0 10px 30px -18px rgba(20,22,30,.28)}
body.os.light .win.focus{box-shadow:inset 0 1px 0 #fff,0 0 0 1px rgba(91,107,99,.18),0 14px 34px -18px rgba(20,22,30,.32)}
body.os.light .kp .k,body.os.light .sig2 div,body.os.light .chain,body.os.light .adv,body.os.light .ribbon span{background:rgba(20,22,30,.04);box-shadow:none}
body.os.light .sh-nav.on{background:linear-gradient(90deg,rgba(91,107,99,.14),transparent)}
body.os.light .sh-nav:hover{background:rgba(20,22,30,.04)}
body.os.light .btn.solid,body.os.light .sh-modal .btn.solid{color:#fff}
body.os.light .btn:hover{background:rgba(91,107,99,.10)}
body.os.light .field{background:#fff}
body.os.light .win .field{background:#fff}
body.os.light .sh-toast,body.os.light .sh-pal .box,body.os.light .sh-modal .box,body.os.light .sh-pop,body.os.light .seatpop{background:#fff;box-shadow:0 24px 60px -12px rgba(20,22,30,.35)}
body.os.light .sh-pal li.on{background:rgba(91,107,99,.12)}
body.os.light .sh-drawer aside{background:#fff}
body.os.light .sh-drawer .scrim{background:rgba(20,22,30,.35)}
body.os.light .feed .it{color:var(--sh-ink)}
body.os.light .seatcv{background:radial-gradient(circle at 1px 1px,rgba(20,22,30,.12) 1px,transparent 1.5px) 0 0/24px 24px,#E9E6DF}
body.os.light .seatcv .seattbar{background:rgba(251,250,247,.94);border-bottom-color:rgba(20,22,30,.08)}
body.os.light .rowdir{border-color:rgba(20,22,30,.12)}
body.os.light .rowdir button.on{background:#1c1f26;color:#fff}
body.os.light .rowdir button:not(.on):hover{background:rgba(20,22,30,.06);color:var(--sh-ink)}
body.os.light .seatcv .seatempty{background:rgba(251,250,247,.94)}
body.os.light .tbl{background:#fff;box-shadow:0 8px 24px rgba(20,22,30,.14)}
body.os.light .seat.on{background:rgba(91,107,99,.10);border-color:rgba(91,107,99,.35)}
body.os.light .seat.on.leader{background:rgba(138,109,47,.12);border-color:rgba(138,109,47,.45)}
body.os.light .seatghost{background:#fff;color:var(--sh-ink)}
body.os.light .pchip{background:#fff}
body.os.light .apv pre{background:rgba(20,22,30,.04)}
body.os.light .file .pv{background-color:#e8e5de}
body.os.light .win .list tr:hover td,body.os.light .list tr[data-open]:hover td{background:rgba(20,22,30,.03)}
body.os.light .list tr.sel td{background:rgba(91,107,99,.10)}
body.os.light .funnel .fs .bar{background:rgba(20,22,30,.05)}
body.os.light .track .ms i{background:#fff;color:#fff}
body.os.light .track .ms.done i{background:var(--sh-metal);border-color:var(--sh-metal);color:#fff}
body.os.light .track .ms.late i{background:var(--sh-live);border-color:var(--sh-live)}
body.os.light .steps li i{background:#fff}
body.os.light .steps li.ok i{background:var(--sh-ok);border-color:var(--sh-ok);color:#fff}
body.os.light .steps li.hot i{background:var(--sh-live);border-color:var(--sh-live);color:#fff}
body.os.light .sh-status{background:var(--sh-panel)}
body.os.light .sh-rail,body.os.light .sh-dock{background:var(--sh-panel)}
body.os.light .prof .av{color:#fff}
body.os.light .hero-n{color:var(--sh-metal);text-shadow:none}
body.os.light .cmdk-hero .big{text-shadow:none}
body.os.light .sh-boot{background:var(--sh-bg)}
body.os.light .stagebar{color:var(--sh-foil);border-color:rgba(138,109,47,.5)}
body.os.light .tbl.stage{border-color:rgba(138,109,47,.45)}
body.os.light ::-webkit-scrollbar-thumb{background:rgba(20,22,30,.18)}

/* 座次专注模式：右舷让位给画布（检视器打开时右列自动回来） */
@media (min-width:1400px){
  body.os.seat-wide:not(.insp) #app{grid-template-columns:var(--sh-rail) minmax(0,1fr) 0}
  body.os.seat-wide.rail-min:not(.insp) #app{grid-template-columns:var(--sh-rail-min) minmax(0,1fr) 0}
  body.os.seat-wide:not(.insp) .sh-dock{display:none}
  body.os.seat-wide:not(.insp) .win.max{right:0}
}
.seatzoom button.wide{border-left:1px solid var(--sh-line);margin-left:2px;color:var(--sh-dim)}
.seatzoom button.wide.on{color:var(--sh-warn)}
body.os.light .tbl{background:linear-gradient(180deg,#fff,#F6F4EF);border-color:rgba(20,22,30,.14);box-shadow:0 10px 26px -12px rgba(20,22,30,.28)}
body.os.light .tbl.stage{background:linear-gradient(180deg,#FBF6EA,#F3EBD8)}
body.os.light .tbl header{border-bottom-color:rgba(20,22,30,.08)}
body.os.light .tbl header small{background:rgba(20,22,30,.06)}
body.os.light .tbl.round .orbit .seat small{background:#fff;border-color:rgba(20,22,30,.16)}
body.os.light .tbl.round .disc{background:radial-gradient(circle at 50% 35%,rgba(20,22,30,.05),rgba(20,22,30,.015) 65%,transparent 100%);border-color:rgba(20,22,30,.1);box-shadow:inset 0 0 0 6px rgba(20,22,30,.05)}
body.os.light .seat{border-color:rgba(20,22,30,.22);background:rgba(20,22,30,.02)}
body.os.light .seat.on{background:linear-gradient(180deg,rgba(91,107,99,.16),rgba(91,107,99,.07));border-color:rgba(91,107,99,.4);box-shadow:none}
body.os.light .seat.on.leader{background:linear-gradient(180deg,rgba(138,109,47,.18),rgba(138,109,47,.08));border-color:rgba(138,109,47,.5)}
body.os.light .seatcv{background:radial-gradient(ellipse 60% 22% at 50% 0%,rgba(138,109,47,.08),transparent 70%),radial-gradient(circle at 1px 1px,rgba(20,22,30,.12) 1px,transparent 1.5px) 0 0/24px 24px,#E9E6DF}
body.os.light .seatcv .stagebar{background:rgba(138,109,47,.06)}

/* ===== v3：检视器页签 / 已读语义 / 动作流分日 ===== */
.sh-drawer header .dtabs{display:none;gap:2px;flex:none}
.sh-drawer header .dtabs button{border:0;background:transparent;color:var(--sh-dim);font:500 10.5px var(--mono);letter-spacing:.12em;padding:3px 7px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.sh-drawer header .dtabs button.on{color:var(--sh-ink);background:rgba(255,255,255,.07)}
.sh-drawer header .dtabs button:hover:not(.on){color:var(--sh-ink)}
.sh-drawer header .dtabs .n{font:600 9.5px var(--mono);min-width:15px;height:15px;padding:0 4px;border-radius:8px;background:var(--sh-live);color:#fff;display:inline-grid;place-items:center}
.sh-drawer.dock header .dtabs{display:inline-flex}
.sh-drawer.dock header .kick{display:none}
.sh-drawer.dock .body .dfeed{margin:-12px -12px -24px}
.dfeed .dock-now{margin:0}
.dfeed .sec{padding:10px 12px;border-bottom:1px solid var(--sh-line)}
.dfeed .sec h4{margin:0 0 8px;font-size:10px;letter-spacing:.22em;color:var(--sh-dim);font-weight:500;display:flex;align-items:center;justify-content:space-between}
.dfeed .feed{padding:0 0 12px}
.feed .day,.sh-notif .day{font:500 10px var(--mono);letter-spacing:.18em;color:var(--sh-dim);padding:8px 12px 3px;position:sticky;top:0;background:var(--sh-panel);z-index:1}
.sh-notif .day{background:var(--sh-raise)}
.feed .it{transition:border-color .3s,background .3s}
.feed .it.new{background:linear-gradient(90deg,rgba(226,59,47,.07),transparent 70%)}
.unread{color:var(--sh-live);font:600 10.5px var(--mono);letter-spacing:.06em}
button.mark{border:1px solid var(--sh-line);background:transparent;color:var(--sh-dim);font:500 10px var(--mono);letter-spacing:.1em;padding:1px 6px;border-radius:9px;cursor:pointer;margin-left:6px}
button.mark:hover{color:var(--sh-ink);border-color:var(--sh-metal)}
#shDockMeta{display:inline-flex;align-items:center;gap:4px;letter-spacing:0}
.sh-notif .foot{justify-content:space-between;align-items:center}
body.os.light .sh-drawer header .dtabs button.on{background:rgba(20,22,30,.07)}
body.os.light .feed .it.new{background:linear-gradient(90deg,rgba(201,48,44,.07),transparent 70%)}
/* v3：最小字号地板 —— 任何屏幕上次级文字不低于 10.5px，正文小字不低于 12.5px */
.sh-status{font-size:11.5px}
.win>header>h3{font-size:12.5px}
.win>header .meta{font-size:11.5px}
.feed .it{font-size:12.5px}
.feed .it small{font-size:11.5px}
.feed .it em{font-size:10.5px}
.sh-dock .sec h4{font-size:10.5px}
.sig2 small{font-size:11.5px}
.sh-drawer header .meta{font-size:11.5px}
.pchip small,.seatpop .list button small{font-size:11px}
.tbl .stagehint{font-size:10.5px}
.sh-nav kbd{font-size:10.5px}
.sh-top .who,.sh-top small{font-size:11.5px}
