/* v0.4 — 全球服务驾驶舱 index.html tokens; a shared visual language, independent application. */
:root{
  color-scheme:dark;--bg:#06080b;--panel:rgba(13,17,23,.85);--panel2:#101720;
  --line:rgba(150,180,220,.16);--text:#cdd6e5;--muted:#8b95a6;--faint:#718097;
  --teal:#3fe0ff;--amber:#ffb020;--red:#ff4d5e;--green:#36d399;--blue:#9f8bff;
  --accent-soft:rgba(63,224,255,.08);--accent-line:rgba(63,224,255,.32);
  --sans:"Noto Sans SC",-apple-system,"PingFang SC","Segoe UI",sans-serif;
  --mono:"JetBrains Mono",ui-monospace,Menlo,monospace;
  font-family:var(--sans);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;
}
body{background:var(--bg);color:var(--text)}
*{scrollbar-width:thin;scrollbar-color:rgba(150,180,220,.22) transparent}
button,select{background:var(--panel2);border-color:var(--line);border-radius:7px;transition:background .2s,border-color .2s,color .2s,transform .16s}
button:hover{background:var(--accent-soft);border-color:var(--accent-line);color:var(--teal)}button:active{transform:translateY(1px)}
button[aria-pressed=true]{background:var(--accent-soft);border-color:var(--teal);color:var(--teal)}
a{color:var(--teal)}.shell{max-width:1920px}.mono{font-family:var(--mono)}
.topbar{height:62px;background:linear-gradient(180deg,#0d1119,#090d13);padding:0 28px;border-color:var(--line);gap:30px}
.brand{font-size:21px;letter-spacing:1.8px;color:var(--text);gap:11px}.brand svg{stroke:var(--teal);width:32px;height:32px;filter:drop-shadow(0 0 8px #3fe0ff22)}
.brand-sub{font-size:9px;letter-spacing:2.5px;color:var(--muted)}.top-context{font-size:10px;gap:9px}
.mode{color:var(--teal);border-color:var(--accent-line);background:var(--accent-soft);font-size:9px;padding:3px 6px}
.top-tools select{min-height:30px;font-size:11px}.icon-button{border:0;background:transparent;min-height:30px;color:var(--muted)}
.main-nav{height:43px;background:#0a0e14;padding:0 28px;gap:31px;border-color:var(--line)}
.main-nav button{font-size:12px;color:var(--muted);letter-spacing:.5px}.main-nav button[aria-current=page]{color:var(--teal);border-bottom:2px solid var(--teal)}
.nav-version{color:var(--faint);font:9px var(--mono);letter-spacing:1.6px}#nav-count{background:#ff4d5e16;color:var(--red);font-size:9px}
main{padding:18px 24px 20px;display:flex;flex-direction:column}.page-heading{margin-bottom:17px;min-height:59px;gap:18px}
.eyebrow{color:var(--faint);font:9px var(--mono);letter-spacing:1.8px}.page-heading .eyebrow{font-size:8px;letter-spacing:2px;margin-bottom:5px}
h1{font-size:25px;font-weight:500;letter-spacing:.3px;color:var(--text);margin-bottom:5px}#subtitle{font-size:11px;color:var(--muted)}
.scope-controls{gap:9px}.scope-controls label{font-size:10px;color:var(--muted);gap:4px}.scope-controls select{height:32px;min-height:32px;font-size:11px;min-width:105px}#building{width:224px}
.scope-controls button{min-height:32px;font-size:11px;padding:6px 14px}.primary,.subtle{background:var(--accent-soft);color:var(--teal);border-color:var(--accent-line);box-shadow:none}.primary:hover,.subtle:hover{background:#3fe0ff1c;color:var(--teal);border-color:var(--teal)}
.stats{margin:0 0 16px;border:0;border-radius:0;background:transparent;grid-template-columns:1fr 1.25fr 1fr .85fr 1.1fr}
.stat{padding:9px 22px 11px;border-color:var(--line)}.stat .label{color:var(--muted);font-size:10px;margin-bottom:7px}.stat .value{font:300 26px var(--mono);letter-spacing:-.8px;color:var(--text)}
.stat .unit{color:var(--muted);font-size:10px;margin-left:5px}.stat .sub{color:var(--faint);font-size:9px;margin-top:7px}.stat .hot{color:var(--amber)}
body[data-view=building] #stats{order:4;margin:17px 3px 0}body[data-view=building] #building-view{order:3}body[data-view=building] .page-heading{order:0}body[data-view=building] #tour{order:1}body[data-view=building] #load-error{order:2}
.workspace{grid-template-columns:minmax(0,1fr) 292px;gap:0;background:var(--panel);border:1px solid var(--line);border-radius:13px;overflow:hidden;box-shadow:0 18px 50px #0005,inset 0 1px #cdd6e507}
.viewer{border:0;border-radius:0;position:relative;min-width:0;background:#090e16}
.viewer-toolbar{position:absolute;left:22px;right:20px;top:91px;z-index:6;border:0;padding:0;align-items:center;gap:10px}
.segmented{gap:3px;padding:4px;background:#0d1119d9;backdrop-filter:blur(14px);border:1px solid var(--line);border-radius:8px;box-shadow:0 4px 16px #0002}
.segmented button{font-size:10px;min-height:27px;padding:4px 10px;color:var(--muted);background:transparent;border-color:transparent}
.segmented button[aria-pressed=true]{background:#3fe0ff13;color:var(--teal);border-color:#3fe0ff38;box-shadow:inset 0 0 14px #3fe0ff05}
.view-actions{gap:5px}.view-actions button{font-size:10px;min-height:29px;background:#0d1119b8;border-color:var(--line);color:var(--muted);padding:4px 9px;backdrop-filter:blur(12px)}.view-actions button[aria-pressed=true]{background:var(--accent-soft);color:var(--teal);border-color:var(--accent-line)}
.floor-nav{position:absolute;left:23px;top:153px;z-index:6;padding:0;background:none;display:flex;flex-direction:column;gap:5px;max-width:126px}
.floor-nav button{font-family:var(--mono);display:flex;align-items:center;justify-content:flex-start;gap:9px;min-height:33px;padding:6px 9px;text-align:left;background:#0d1119b5;border:1px solid var(--line);backdrop-filter:blur(12px);color:var(--muted);font-size:11px;transition:background .2s,transform .2s,border-color .2s}
.floor-nav button span{font-family:var(--sans);font-size:9px;margin:0;color:var(--muted);white-space:nowrap}.floor-nav button[aria-pressed=true]{background:#0f2831e0;color:var(--teal);border-color:#3fe0ff66;box-shadow:inset 2px 0 var(--teal),0 0 18px #3fe0ff05}.floor-nav button:hover{transform:translateX(2px)}
.scene{height:clamp(560px,calc(100dvh - 302px),860px);min-height:560px;background:radial-gradient(ellipse at 54% 42%,#1a2b3e 0,#0c1420 53%,#070b12 100%);isolation:isolate}
.scene:after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(110deg,#3fe0ff03,transparent 45%,#9f8bff04);z-index:1}
.scene canvas{position:relative;z-index:1;cursor:grab}.scene canvas:active{cursor:grabbing}
.stage-heading{position:absolute;top:25px;left:24px;z-index:4;display:flex;align-items:center;gap:13px;pointer-events:none}
.stage-heading>span{font:300 45px/1 var(--mono);letter-spacing:-3px;color:#5f8095;border-right:1px solid #3fe0ff2a;padding-right:15px}
.stage-heading .eyebrow{font-size:8px;letter-spacing:1.8px;color:var(--faint);margin:0 0 6px}.stage-heading strong{font-size:17px;font-weight:500;letter-spacing:1px;color:var(--text)}
.floor-tags{z-index:3}.floor-tag{position:absolute;display:flex;align-items:center;gap:7px;white-space:nowrap;pointer-events:auto;min-height:26px;font:10px var(--sans);color:var(--muted);background:#0c1521d9;border:1px solid #67879f55;border-radius:5px;padding:5px 8px;box-shadow:0 5px 16px #0003;transform:translate(-100%,-50%);backdrop-filter:blur(10px)}
.floor-tag:after{content:'';position:absolute;left:100%;top:50%;width:17px;border-top:1px solid #3fe0ff77}.floor-tag b{font:11px var(--mono);color:var(--teal)}.floor-tag:hover{background:#102735;transform:translate(-100%,-50%)}.floor-tag.part-tag{border-color:var(--accent-line)}
.scene-tooltip{position:absolute;z-index:9;background:#0d1825ee;backdrop-filter:blur(12px);color:var(--text);border:1px solid var(--accent-line);border-radius:7px;padding:9px 12px;pointer-events:none;font-size:11px;box-shadow:0 8px 25px #0005;max-width:200px}.scene-tooltip small{color:var(--teal);display:block;margin-top:4px;font-size:10px}
.scene-caption{left:21px;bottom:15px;z-index:4;max-width:48%;color:var(--faint);font-size:9px;gap:4px}.scene-caption span:first-child{font-size:10px;color:var(--muted)}
.camera-tools{right:18px;bottom:15px;z-index:5;gap:4px}.camera-tools button{font-family:var(--mono);font-size:16px;min-height:29px;width:30px;border-color:var(--line);background:#0d1119cc;color:var(--muted);backdrop-filter:blur(10px)}.camera-tools button:nth-child(-n+2){font-size:10px;width:auto;padding:5px 8px}
.separation-control{position:absolute;left:50%;bottom:64px;transform:translateX(-50%);z-index:6;display:flex;gap:11px;align-items:center;background:#0d1622dc;border:1px solid #546c8659;border-radius:9px;padding:6px 13px 6px 6px;box-shadow:0 8px 24px #0005,inset 0 1px #ffffff06;backdrop-filter:blur(15px);white-space:nowrap}
.separation-control button{background:#3fe0ff12;border-color:#3fe0ff42;color:var(--teal);min-height:29px;font-size:10px;padding:5px 11px}.separation-control label{font-size:10px;color:var(--muted)}.separation-control input{width:105px;accent-color:var(--teal);height:3px;cursor:pointer}.separation-control output{font:10px var(--mono);color:var(--teal);min-width:27px}
.scene-footer{border-top:1px solid var(--line);padding:12px 20px;background:#0b1018}.legend{font-size:10px;color:var(--muted);gap:18px}.legend i{height:5px;width:5px}.normal{background:var(--green)}.warning{background:var(--amber)}.critical{background:var(--red)}.reserved{background:#627084}
#route-note{font-size:10px;color:var(--muted);margin:8px 0 0;line-height:1.55}#scene-loading,#scene-fallback{background:#0b121ee8;color:var(--text);border:1px solid var(--line);border-radius:10px;font-size:12px;padding:24px;backdrop-filter:blur(12px)}
.inspector{border:0;border-left:1px solid var(--line);border-radius:0;padding:23px 20px;background:linear-gradient(145deg,#121923f2,#0c1018);max-height:calc(clamp(560px,calc(100dvh - 302px),860px) + 75px)}
.inspector-top{margin-bottom:19px}.inspector-top .eyebrow{color:var(--faint);font-size:9px;letter-spacing:1.6px}#back-rack{color:var(--teal);background:var(--accent-soft);border-color:var(--accent-line);font-size:10px;min-height:26px}
.asset-label{color:var(--muted);font-size:10px;gap:7px;margin-bottom:23px}.asset-label select{border-color:var(--line);background:#0a1018;font-size:11px;min-height:35px;color:var(--text)}
.inspector h2{font-size:22px;font-weight:500;letter-spacing:.1px;color:var(--text);margin-bottom:7px}.inspector .asset-type{font-size:11px;line-height:1.6;color:var(--muted);margin-bottom:13px}
.badge{background:transparent;color:var(--muted);border:1px solid var(--line);border-radius:5px;font-size:9px;padding:3px 6px}
.badge.normal{background:#36d3990c;color:var(--green);border-color:#36d39938}.badge.warning{background:#ffb0200c;color:var(--amber);border-color:#ffb02038}.badge.critical{background:#ff4d5e0c;color:var(--red);border-color:#ff4d5e38}.badge.unknown{background:#9f8bff0c;color:#b3a5f3;border-color:#9f8bff38}
.facts{margin:17px 0;border-color:var(--line)}.facts>div{border-color:var(--line);padding:10px 0;font-size:11px}.facts dt{color:var(--muted)}.facts dd{color:var(--text);font-size:11px;max-width:66%;overflow-wrap:anywhere}.inspector h3{color:var(--text);font-size:11px;letter-spacing:.5px;margin-top:22px}
.asset-buttons{gap:7px}.asset-buttons button{background:#ffffff03;border-color:var(--line);color:var(--text);font-size:12px;padding:11px 12px}.asset-buttons button:hover{background:var(--accent-soft);border-color:var(--accent-line)}.asset-buttons button span{font-size:10px;color:var(--muted);line-height:1.5;margin-top:4px}
.parts-grid button,.gpu-grid button{background:#ffffff03;border-color:var(--line);color:var(--muted);font-size:10px}.parts-grid button[aria-pressed=true],.gpu-grid button[aria-pressed=true]{background:var(--accent-soft);border-color:var(--teal);color:var(--teal)}
.metric-pair{gap:7px}.metric-pair>div{background:#ffffff03;border-color:var(--line);padding:11px}.metric-pair strong{color:var(--text);font:300 23px var(--mono)}.metric-pair span{font-size:10px;color:var(--muted)}.sparkline{opacity:.85}.sparkline polyline{stroke:var(--teal)}
.quality-note,.small-note{color:var(--muted);font-size:10px}.quality-note.stale{color:var(--amber)}.relation-row{background:#3fe0ff05;border-color:#3fe0ff66;color:var(--text);font-size:10px}.relation-row span{color:var(--muted);font-size:9px}.inspector-action{background:#ffffff03;border-color:var(--line);font-size:11px;color:var(--text)}
.scenario-strip{border:0;border-top:1px solid var(--line);background:transparent;border-radius:0;padding:14px 2px 0;gap:20px;margin-top:15px}.scenario-strip .eyebrow{display:none}.scenario-strip h2{font-size:11px;font-weight:500;margin:0;color:var(--muted)}.scenario-strip p{display:none}.scenario-buttons{justify-content:flex-start;gap:6px}.scenario-buttons button{font-size:10px;min-height:29px;padding:5px 11px;color:var(--muted);border-color:var(--line);background:#ffffff02}#show-incidents{font-size:10px;background:transparent;border-color:transparent;color:var(--teal);min-height:29px;padding:5px}
.tour{background:#3fe0ff08;border-color:var(--accent-line);border-radius:9px;padding:15px 18px;margin-bottom:16px}.tour strong{color:var(--text);font-size:12px}.tour .eyebrow{color:var(--teal)}.tour-steps button{background:#3fe0ff06;border-color:var(--line);color:var(--text);font-size:10px}.tour p{color:var(--muted);font-size:10px}
.app-footer{border-color:var(--line);color:var(--faint);padding:12px 27px;font-size:9px}.toast{background:#102630;border-color:var(--accent-line);color:var(--text);box-shadow:0 8px 30px #0005}.toast.error,.error-box{background:#25131b;border-color:#ff4d5e55;color:#ffb1bb}
.surface,.capacity-card{background:var(--panel);border-color:var(--line);border-radius:11px;box-shadow:0 8px 25px #0002}.surface-title p{color:var(--muted)}.search,textarea,.note-form input{background:#090f17;border-color:var(--line);color:var(--text)}.search::placeholder,textarea::placeholder{color:var(--faint)}
th{color:var(--muted);background:#111821;border-color:var(--line)}td{color:var(--text);border-color:var(--line)}tbody tr:hover{background:var(--accent-soft)}.table-count,.table-count button{color:var(--muted)}.capacity-card strong{color:var(--text);font-family:var(--mono);font-weight:300}.capacity-card h3{color:var(--teal)}.capacity-card p{color:var(--muted)}.notice{background:#ffb02008;border-color:var(--amber);color:#c6b085}
.incident-item{background:var(--panel);border-color:var(--line);border-radius:9px}.incident-item.active{background:var(--accent-soft);border-color:var(--accent-line)}.incident-item strong{color:var(--text)}.incident-item small{color:var(--muted)}.workflow-steps .done{border-color:var(--teal);color:var(--teal)}.workflow-detail p,.workflow-steps span{color:var(--muted)}.workflow-detail>div{border-color:var(--line)}
.timeline{border-color:var(--line)}.timeline>div{color:var(--text)}.timeline>div:before{background:var(--teal)}.timeline time{color:var(--faint)}.timeline p,.note-form label{color:var(--muted)}.empty{color:var(--muted);border-color:var(--line);background:#ffffff02}.help-grid p,.help-grid li{color:var(--muted)}.help-grid h2{color:var(--text)}.help-grid a{color:var(--teal)}
#twin[data-server-id]:not([data-server-id=""]) .floor-nav{display:none}
body.presentation .topbar,body.presentation .main-nav,body.presentation .page-heading,body.presentation #stats,body.presentation .scenario-strip,body.presentation .app-footer,body.presentation #tour{display:none!important}
body.presentation main{padding:0}body.presentation .workspace{grid-template-columns:1fr;border:0;border-radius:0}body.presentation .inspector{display:none}body.presentation .scene{height:calc(100dvh - 68px);max-height:none;min-height:500px}body.presentation .viewer-toolbar{right:25px}body.presentation .scene-footer{min-height:68px}
@media(min-width:1650px){.workspace{grid-template-columns:minmax(0,1fr) 330px}.inspector{padding:27px 25px}.stage-heading{left:30px}.viewer-toolbar{left:30px}.floor-nav{left:31px}}
@media(max-width:1100px){main{padding:16px}.topbar,.main-nav{padding-left:20px;padding-right:20px}.page-heading{flex-direction:row;align-items:center}.page-heading>div:first-child{max-width:44%}#subtitle{font-size:10px}.scope-controls{width:auto;flex-wrap:wrap;justify-content:flex-end}#building{width:205px}.workspace{grid-template-columns:minmax(0,1fr) 265px}.scene{height:610px;min-height:560px}.inspector{max-height:685px;padding:20px 16px}.stage-heading{left:18px;top:22px}.stage-heading strong{font-size:15px}.stage-heading>span{font-size:38px}.viewer-toolbar{left:16px;right:13px;top:85px;flex-wrap:wrap}.floor-nav{left:18px;top:174px;max-width:50px}.floor-nav button span{display:none}.segmented button{padding:4px 8px;font-size:10px}.view-actions{gap:4px}.view-actions button{padding:4px 7px;font-size:9px}.stat{padding:10px 13px}.stat .value{font-size:22px}.separation-control{gap:7px;bottom:63px}.separation-control input{width:82px}.separation-control label{display:none}.scene-caption{max-width:49%}.scenario-strip{gap:10px}.scenario-buttons{justify-content:flex-start}.app-footer{padding:12px 19px}}
@media(max-width:780px){.topbar{height:57px;padding:0 16px;gap:12px}.brand{font-size:18px}.brand svg{width:27px}.brand-sub{font-size:8px;letter-spacing:1.6px}.top-tools select{width:117px;font-size:10px}.main-nav{padding:0 16px;gap:24px;height:42px}.main-nav button{font-size:11px}.page-heading{align-items:flex-start;flex-direction:column;gap:13px;margin-bottom:14px}.page-heading>div:first-child{max-width:100%}h1{font-size:23px}.page-heading .eyebrow{font-size:8px}.scope-controls{width:100%;justify-content:flex-start;gap:8px}.scope-controls label{font-size:9px}.scope-controls select{font-size:10px;min-height:31px;height:31px;min-width:99px}#building{width:197px}.scope-controls button{font-size:10px;min-height:31px}.workspace{grid-template-columns:1fr;border-radius:11px}.scene{height:610px;min-height:500px}.viewer-toolbar{left:16px;top:85px;right:16px}.view-actions{margin-left:auto}.floor-nav{left:18px;top:174px}.floor-nav button{font-size:10px;padding:6px 8px;min-height:30px}.inspector{border-left:0;border-top:1px solid var(--line);max-height:none;padding:22px}.asset-label{margin-bottom:20px}.inspector h2{font-size:23px}.inspector .asset-type{font-size:11px}.facts>div,.facts dd{font-size:11px}.asset-buttons button{font-size:12px}.scene-footer{padding:12px 16px}.legend{font-size:9px;gap:13px}.scene-caption{left:15px;font-size:9px}.scene-caption span:first-child{font-size:9px}.camera-tools{right:13px;bottom:15px}.camera-tools button{width:27px;font-size:16px;min-height:29px}.camera-tools button:nth-child(-n+2){font-size:9px;padding:5px 6px}.stats{grid-template-columns:repeat(3,1fr)}.stat{padding:12px 13px}.stat:nth-child(3){border-right:0}.stat:nth-child(n+4){border-top:1px solid var(--line)}.stat .value{font-size:23px}.scenario-strip{padding:13px 0 0;gap:10px;flex-wrap:wrap}.scenario-strip>div:first-child{width:100%}.scenario-buttons{flex-wrap:wrap;gap:5px}.scenario-buttons button{font-size:10px;padding:5px 8px;min-height:29px}#show-incidents{font-size:10px}.app-footer{padding:13px 17px;gap:8px}body.presentation .scene{height:calc(100dvh - 90px);min-height:470px}}
@media(max-width:420px){main{padding:15px 11px}.scope-controls #building{width:190px}.scope-controls{gap:7px}#tour-toggle{margin-top:0}.stage-heading{left:14px;top:22px;gap:10px}.stage-heading>span{font-size:35px;padding-right:12px}.stage-heading .eyebrow{font-size:7px;letter-spacing:1.1px}.stage-heading strong{font-size:14px}.viewer-toolbar{left:11px;right:10px;top:86px;gap:7px}.segmented{gap:0;padding:3px}.segmented button{font-size:9px;padding:4px 7px;min-height:27px}.view-actions{margin-left:0;width:100%;justify-content:flex-end}.view-actions button{font-size:9px;min-height:27px}.floor-nav{top:174px;left:12px;max-width:40px;gap:4px}.floor-nav button{min-height:28px;font-size:9px;padding:4px 7px}.scene{height:580px;min-height:530px}.floor-tag{font-size:9px;min-height:24px;padding:4px 6px;gap:4px}.floor-tag b{font-size:10px}.scene-caption{bottom:52px;max-width:100%;left:13px}.camera-tools{bottom:13px;right:11px}.separation-control{bottom:97px;padding:5px 9px 5px 5px;gap:8px}.separation-control button{font-size:10px;padding:4px 8px;min-height:28px}.separation-control input{width:82px}.legend{gap:8px;font-size:9px}.stats{grid-template-columns:1fr 1fr}.stat:nth-child(3){border-right:1px solid var(--line);border-top:1px solid var(--line)}.stat:nth-child(2),.stat:nth-child(4){border-right:0}.stat .value{font-size:22px}.top-context{display:none}.top-tools select{width:111px}.main-nav{gap:22px}.main-nav button{font-size:11px}.inspector{padding:21px 18px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
