:root{color-scheme:dark;font-family:Inter,PingFang SC,Microsoft YaHei,system-ui,sans-serif;background:#05070b;color:#e6f2fb}*{box-sizing:border-box}html,body,#root{width:100%;min-width:0;height:100%;min-height:100%;margin:0}body{overflow:hidden}button,input{font:inherit}a{color:#8be7ff;text-decoration:none}.nav-link{display:inline-flex;align-items:center;gap:7px;min-height:32px}.boot,.login-shell{display:grid;width:100vw;height:100vh;place-items:center;background:linear-gradient(135deg,rgba(19,83,100,.16),transparent 42%),radial-gradient(circle at 80% 15%,rgba(74,110,72,.18),transparent 30%),#05070b}.login-panel{width:min(420px,calc(100vw - 32px));padding:30px;border:1px solid rgba(108,174,205,.24);border-radius:8px;background:#081019e0;box-shadow:0 24px 80px #0000005c}.login-mark{display:grid;width:48px;height:48px;place-items:center;margin-bottom:18px;border-radius:8px;background:#1a8f85;font-weight:800;color:#fff}.login-panel h1,.topbar h1{margin:0;font-size:clamp(22px,2.2vw,34px);letter-spacing:0}.login-panel p{margin:8px 0 24px;color:#8fa8ba}.login-panel label{display:grid;gap:8px;margin-bottom:16px;color:#c8dbea}.login-panel input,.upload-panel input{width:100%;min-height:42px;border:1px solid rgba(108,174,205,.26);border-radius:6px;padding:0 12px;background:#050a10eb;color:#e6f2fb}button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;border:1px solid rgba(99,230,208,.38);border-radius:6px;padding:0 14px;background:#15746ee0;color:#f5ffff;cursor:pointer}button:disabled{cursor:not-allowed;opacity:.58}button svg,.nav-link svg{flex:0 0 auto}.login-panel button{width:100%}.form-error,.admin-message{margin:10px 0;color:#ff9099}.dashboard,.admin-page{display:grid;grid-template-rows:auto 1fr auto;width:100vw;height:100vh;min-width:0;min-height:0;padding:clamp(10px,1.1vw,18px);background:linear-gradient(180deg,#0c1e2ddb,#05070bf0),#05070b;gap:clamp(10px,1vw,16px)}.admin-page{grid-template-rows:auto 1fr}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;min-width:0;padding:4px 2px}.topbar span{color:#8fa8ba}.topbar nav{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:flex-end}.online,.offline{display:inline-flex;align-items:center;min-height:28px;padding:0 10px;border-radius:6px;background:#39d98a1f;color:#69e5a3!important}.offline{background:#ff5c6c1f;color:#ff8d98!important}.layout{display:grid;grid-template-columns:minmax(270px,18vw) minmax(420px,1fr) minmax(320px,22vw);min-height:0;gap:clamp(10px,1vw,16px)}.panel,.model-wrap,.admin-preview,.upload-panel,.version-panel{min-width:0;min-height:0;border:1px solid rgba(105,170,210,.2);border-radius:8px;background:#070f18c7;box-shadow:inset 0 1px #ffffff0a;overflow:hidden}.panel{padding:clamp(12px,1vw,16px);overflow:auto}.panel h2,.panel h3,.upload-panel h2,.version-panel h2{margin:0 0 12px;font-size:clamp(16px,1.2vw,20px);letter-spacing:0}.metric-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:14px}.metric{min-height:78px;padding:12px;border:1px solid rgba(123,165,198,.18);border-radius:8px;background:#08141fe0}.metric span,.carbon-card span,.switch-row span,.coord-list dt,.version-row span{color:#8ea9bd}.metric strong{display:block;margin-top:8px;font-size:clamp(24px,2.4vw,36px);line-height:1}.metric.normal strong{color:#39d98a}.metric.alarm strong{color:#ff5c6c}.metric.offline strong{color:#8a94a6}.carbon-card{display:grid;gap:8px;padding:13px;margin-bottom:16px;border-radius:8px;background:#10303075}.carbon-card div{display:flex;justify-content:space-between;gap:12px}.chart{width:100%;height:clamp(170px,20vh,260px)}.model-wrap,.admin-preview{position:relative}.scene-shell{position:relative;width:100%;height:100%;min-height:320px}.scene{width:100%;height:100%;min-height:inherit;background:#05070b}.scene-status{position:absolute;left:14px;top:14px;max-width:min(420px,calc(100% - 28px));border:1px solid rgba(105,170,210,.24);border-radius:8px;padding:10px 12px;background:#050a10c7;color:#cfe3f3}.empty-scene{display:grid;height:100%;min-height:320px;place-items:center;color:#8fa8ba}.box-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}.box-title strong{font-size:18px}.tag{display:inline-flex;align-items:center;justify-content:center;min-height:26px;border-radius:6px;padding:0 9px;font-size:12px;background:#8a94a629;color:#cbd4df}.tag.normal{background:#39d98a24;color:#67e1a1}.tag.warning{background:#f5b84b29;color:#ffd17c}.tag.alarm{background:#ff5c6c29;color:#ff9aa3}.tag.offline{background:#8a94a629;color:#cbd4df}.coord-list{display:grid;gap:8px;margin:0 0 16px}.coord-list div{display:grid;grid-template-columns:78px 1fr;gap:10px}.coord-list dd{margin:0;color:#dcecf8;overflow-wrap:anywhere}.switch-list{display:grid;gap:10px}.switch-row{display:grid;grid-template-columns:1fr auto;gap:8px 10px;padding:12px;border:1px solid rgba(107,163,194,.18);border-radius:8px;background:#08141fad}.switch-row div{display:grid;gap:3px}.switch-row small{color:#cfe2ef}.event-bar{display:flex;align-items:center;gap:12px;min-width:0;min-height:44px;padding:0 14px;border:1px solid rgba(105,170,210,.2);border-radius:8px;background:#070f18c7;overflow:hidden;white-space:nowrap}.event-bar span{overflow:hidden;text-overflow:ellipsis;color:#dcecf8}.event-bar .alarm{color:#ff9aa3}.event-bar .warning{color:#ffd17c}.event-bar .offline{color:#cbd4df}.screen{display:grid;grid-template-rows:70px 96px minmax(0,1fr) 48px;gap:12px;width:100vw;height:100vh;min-width:0;min-height:0;padding:14px;background:linear-gradient(180deg,#07151ef5,#04080dfa),#05070b;overflow:hidden}.screen-header{display:grid;grid-template-columns:minmax(220px,300px) minmax(320px,1fr) minmax(420px,560px);align-items:center;gap:14px;min-width:0;border:1px solid rgba(99,160,196,.18);border-radius:8px;padding:8px 14px;background:#071019b8}.screen-brand,.screen-title{min-width:0}.screen-brand{display:grid;gap:4px}.screen-brand span{color:#72e1cf;font-size:12px;font-weight:700;line-height:1.1}.screen-brand strong{color:#eef8ff;font-size:19px;line-height:1.15}.screen-title{text-align:center}.screen-title h1{margin:0;color:#f5fbff;font-size:28px;line-height:1.05;letter-spacing:0}.screen-title span{display:block;margin-top:4px;color:#91aebe;font-size:13px;line-height:1.2}.screen-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;min-width:0;flex-wrap:wrap}.clock{color:#d9edf7;font-size:13px}.screen-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;min-width:0}.kpi-tile{display:grid;grid-template-columns:34px minmax(0,1fr);align-items:center;gap:10px;min-width:0;min-height:0;border:1px solid rgba(94,156,190,.2);border-radius:8px;padding:12px;background:#07121dc2;box-shadow:inset 0 1px #ffffff0a}.kpi-tile svg{color:#63d6c8}.kpi-tile span,.kpi-tile em{display:block;color:#91aabd;font-size:12px;font-style:normal}.kpi-tile strong{display:block;margin:4px 0;color:#f7fbff;font-size:25px;line-height:1}.kpi-tile small,.mini-stat small,.ledger-row small{margin-left:4px;color:#9fb6c6;font-size:12px;font-weight:600}.kpi-tile.power svg,.mini-stat.power strong{color:#f5b84b}.kpi-tile.carbon svg,.mini-stat.carbon strong{color:#69d986}.kpi-tile.locate svg,.mini-stat.locate strong{color:#64b5ff}.kpi-tile.alarm svg{color:#ff7b88}.screen-grid{display:grid;grid-template-columns:minmax(300px,350px) minmax(520px,1fr) minmax(360px,410px);gap:12px;min-width:0;min-height:0}.screen-column{display:grid;align-content:stretch;gap:12px;min-width:0;min-height:0;overflow:hidden}.screen-column:first-child{grid-template-rows:auto 86px minmax(205px,.95fr) minmax(176px,.7fr) minmax(180px,.75fr)}.screen-column:last-child{grid-template-rows:auto auto minmax(210px,1fr) minmax(190px,.9fr)}.screen-panel,.screen-model,.detail-card{min-width:0;min-height:0;border:1px solid rgba(94,156,190,.2);border-radius:8px;background:#07111bb8;box-shadow:inset 0 1px #ffffff0a;overflow:hidden}.screen-panel,.detail-card{padding:12px}.panel-title{display:flex;align-items:center;gap:8px;min-height:28px;color:#dff5ff}.panel-title svg{color:#72e1cf}.panel-title h2{margin:0;font-size:17px;letter-spacing:0}.panel-title.compact{min-height:24px;margin-bottom:8px}.panel-title.compact h2{font-size:15px}.status-matrix{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;min-height:0}.mini-stat{display:grid;align-content:center;min-width:0;min-height:0;border:1px solid rgba(101,155,185,.16);border-radius:8px;padding:10px;background:#050d16a8}.mini-stat span{color:#91aabd;font-size:12px}.mini-stat strong{margin-top:4px;color:#f1f7fb;font-size:22px;line-height:1}.mini-stat.normal strong{color:#69d986}.mini-stat.warning strong{color:#ffd17c}.mini-stat.alarm strong{color:#ff8792}.mini-stat.offline strong{color:#9da8b6}.trend-panel{display:grid;grid-template-rows:auto 1fr}.trend-chart{height:100%;min-height:168px}.carbon-ledger{display:grid;align-content:start;gap:8px}.ledger-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;min-height:24px}.ledger-row span{color:#91aabd;font-size:13px}.ledger-row strong{color:#eef8ff;font-size:15px}.roster-panel{display:grid;grid-template-rows:auto 1fr}.box-roster{display:grid;gap:8px;min-height:0;overflow:auto;padding-right:2px}.box-roster-row{display:grid;grid-template-columns:10px minmax(80px,1fr) auto;grid-template-rows:auto auto;align-items:center;gap:2px 8px;width:100%;min-height:54px;border:1px solid rgba(96,157,190,.16);border-radius:8px;padding:8px 10px;background:#050d169e;color:#eaf7ff;text-align:left}.box-roster-row.selected{border-color:#72e1cf7a;background:#134e516b}.box-roster-row strong{font-size:14px}.box-roster-row small{grid-column:2 / 3;color:#91aabd;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.box-roster-row em{grid-column:3 / 4;grid-row:1 / 3;color:#f5b84b;font-size:13px;font-style:normal}.status-dot{grid-row:1 / 3;width:8px;height:8px;border-radius:50%;background:#69d986;box-shadow:0 0 12px #69d986b3}.box-roster-row.warning .status-dot{background:#ffd17c;box-shadow:0 0 12px #ffd17c99}.box-roster-row.alarm .status-dot{background:#ff8792;box-shadow:0 0 12px #ff8792a6}.box-roster-row.offline .status-dot{background:#9da8b6;box-shadow:none}.screen-model{display:grid;grid-template-rows:48px minmax(0,1fr);padding:0}.model-head{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;padding:10px 12px;border-bottom:1px solid rgba(94,156,190,.16)}.model-legend{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:flex-end}.legend-item{display:inline-flex;align-items:center;gap:5px;color:#a9bfce;font-size:12px}.legend-item i{width:8px;height:8px;border-radius:50%;background:#69d986}.legend-item.warning i{background:#ffd17c}.legend-item.alarm i{background:#ff8792}.legend-item.offline i{background:#9da8b6}.model-stage{position:relative;min-width:0;min-height:0}.model-stage .scene-shell{min-height:0}.model-hud{position:absolute;left:14px;bottom:38px;width:min(320px,calc(100% - 28px));border:1px solid rgba(114,225,207,.28);border-radius:8px;padding:12px;background:#050d14c2;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.model-hud strong,.detail-card-head strong{display:block;color:#f5fbff;font-size:17px}.model-hud span,.detail-card-head span{display:block;margin-top:4px;color:#91aabd;font-size:12px}.model-hud dl{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:12px 0 0}.model-hud div{min-width:0}.model-hud dt{color:#91aabd;font-size:11px}.model-hud dd{margin:3px 0 0;color:#eaf7ff;font-size:14px}.detail-card{display:grid;gap:12px}.detail-card-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.detail-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.detail-grid .mini-stat{min-height:68px}.detail-meta{display:grid;gap:7px;margin:0}.detail-meta div{display:grid;grid-template-columns:70px minmax(0,1fr);gap:8px}.detail-meta dt{color:#91aabd;font-size:12px}.detail-meta dd{margin:0;color:#ddecf6;font-size:12px;overflow-wrap:anywhere}.status-pill{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:24px;border-radius:6px;padding:0 8px;background:#9da8b624;color:#d1dbe5;font-size:12px}.status-pill.normal{background:#69d98624;color:#86e5a2}.status-pill.warning{background:#ffd17c26;color:#ffd17c}.status-pill.alarm{background:#ff879229;color:#ff9aa4}.status-pill.offline{color:#b8c2ce}.circuit-panel{display:grid;align-content:start;gap:8px;overflow:auto}.circuit-row{display:grid;grid-template-columns:minmax(82px,1fr) auto repeat(4,minmax(44px,auto));align-items:center;gap:8px;min-height:43px;border:1px solid rgba(96,157,190,.16);border-radius:8px;padding:8px;background:#050d169e}.circuit-row strong{display:block;color:#f0f8ff;font-size:13px}.circuit-row span{display:block;margin-top:3px;color:#91aabd;font-size:11px}.circuit-row small{color:#ddecf6;font-size:12px;white-space:nowrap}.split-panel{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.split-panel>div{min-width:0;min-height:0}.small-chart{height:150px}.empty-panel{display:grid;min-height:180px;place-items:center;color:#91aabd}.screen-footer{display:flex;align-items:center;gap:12px;min-width:0;border:1px solid rgba(94,156,190,.2);border-radius:8px;padding:0 14px;background:#07111bb8;overflow:hidden;white-space:nowrap}.screen-footer strong{color:#f5fbff;flex:0 0 auto}.screen-footer span{overflow:hidden;text-overflow:ellipsis;color:#ddecf6;font-size:13px}.screen-footer .alarm{color:#ff9aa4}.screen-footer .warning{color:#ffd17c}.screen-footer .offline{color:#b8c2ce}.screen-footer .normal{color:#86e5a2}@media(max-width:1500px){.screen{grid-template-rows:66px 88px minmax(0,1fr) 46px;gap:10px;padding:12px}.screen-header{grid-template-columns:minmax(190px,260px) minmax(300px,1fr) minmax(360px,500px)}.screen-title h1{font-size:24px}.screen-grid{grid-template-columns:minmax(280px,320px) minmax(470px,1fr) minmax(330px,370px);gap:10px}.kpi-tile{padding:10px}.kpi-tile strong{font-size:22px}.detail-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.circuit-row{grid-template-columns:minmax(82px,1fr) auto repeat(2,minmax(44px,auto))}}@media(max-height:850px)and (min-width:1181px){.screen{grid-template-rows:60px 80px minmax(0,1fr) 42px;gap:8px;padding:10px}.screen-panel,.detail-card{padding:10px}.screen-header{padding:6px 10px}.panel-title h2{font-size:15px}.panel-title.compact{margin-bottom:6px}.mini-stat{padding:8px}.mini-stat strong{font-size:19px}.box-roster-row{min-height:48px}.small-chart{height:118px}.screen-column:first-child{grid-template-rows:auto 76px minmax(170px,.9fr) minmax(150px,.65fr) minmax(152px,.7fr)}.screen-column:last-child{grid-template-rows:auto auto minmax(175px,1fr) minmax(150px,.75fr)}}.admin-grid{display:grid;grid-template-columns:minmax(320px,390px) 1fr;grid-template-rows:auto 1fr;gap:14px;min-height:0}.upload-panel,.version-panel{padding:16px}.upload-panel{display:grid;gap:12px}.upload-panel p{margin:0;color:#9db4c6}.upload-panel code{color:#8be7ff}.version-panel{grid-row:span 2;overflow:auto}.version-list{display:grid;gap:10px}.version-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;padding:12px;border:1px solid rgba(107,163,194,.18);border-radius:8px;background:#08141fad}.version-row div{display:grid;min-width:0;gap:4px}.version-row span{overflow-wrap:anywhere}.admin-preview{min-height:420px;height:100%}@media(max-width:1180px){body{overflow:auto}.dashboard,.admin-page,.screen{height:auto;min-height:100vh}.screen{grid-template-rows:auto;overflow:visible}.screen-header,.screen-grid{grid-template-columns:1fr}.screen-header{justify-items:start}.screen-title{text-align:left}.screen-actions{justify-content:flex-start}.screen-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.screen-column,.screen-column:first-child,.screen-column:last-child{grid-template-rows:auto;overflow:visible}.screen-model{height:620px}.screen-footer{flex-wrap:wrap;white-space:normal;min-height:56px;padding:10px 14px}.layout,.admin-grid{grid-template-columns:1fr;grid-template-rows:none}.model-wrap,.admin-preview{min-height:520px;height:62vh;max-height:680px}.version-panel{grid-row:auto}.event-bar{flex-wrap:wrap;white-space:normal;min-height:56px;padding:10px 14px}}@media(max-width:680px){.topbar{align-items:flex-start;flex-direction:column}.screen{padding:10px}.screen-title h1{font-size:22px}.screen-kpis,.status-matrix,.detail-grid,.split-panel{grid-template-columns:1fr}.screen-model{height:520px}.model-head,.detail-card-head{align-items:flex-start;flex-direction:column}.model-hud{left:10px;right:10px;bottom:34px;width:auto}.model-hud dl{grid-template-columns:repeat(2,minmax(0,1fr))}.circuit-row,.metric-grid,.coord-list div,.switch-row{grid-template-columns:1fr}}.dashboard-viewport{position:relative;width:100vw;height:100vh;min-width:0;min-height:0;overflow:hidden;background:radial-gradient(circle at 50% 0%,rgba(17,78,128,.32),transparent 42%),#010914}.prototype-screen{--panel-bg: rgba(3, 18, 33, .88);--panel-border: rgba(31, 128, 185, .42);--panel-border-soft: rgba(35, 108, 154, .28);--cyan: #1ed2ff;--blue: #2d9bff;--green: #4bd975;--red: #ff474f;--yellow: #ffc234;display:grid;grid-template-columns:380px minmax(640px,1fr) 500px;grid-template-rows:60px minmax(0,1fr) 330px;gap:8px;width:1920px;height:1080px;min-width:0;min-height:0;padding:0 14px 12px;transform:translate(var(--screen-offset-x, 0),var(--screen-offset-y, 0)) scale(var(--screen-scale, 1));transform-origin:top left;background:linear-gradient(180deg,#020c1ccc,#010812f0),#010914;color:#d8edf8;overflow:hidden}.proto-header{grid-column:1 / 4;display:grid;grid-template-columns:minmax(360px,.9fr) minmax(520px,1fr) minmax(470px,.9fr);align-items:center;min-width:0;border-bottom:1px solid rgba(39,117,166,.42);background:linear-gradient(90deg,#06172bc7,#06213fa3,#06172bc7)}.weather-strip,.proto-actions{display:flex;align-items:center;gap:22px;min-width:0;color:#b5c6d8;font-size:15px}.weather-strip span,.proto-actions span,.proto-actions a,.proto-actions button{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}.weather-strip svg,.proto-actions svg{color:#86aee5}.title-frame{display:grid;place-items:center;height:60px;min-width:0;background:linear-gradient(90deg,transparent 0,rgba(18,82,138,.54) 20%,rgba(23,90,150,.46) 80%,transparent 100%);clip-path:polygon(7% 0,93% 0,86% 100%,14% 100%)}.title-frame h1{margin:0;color:#f2fbff;font-size:34px;line-height:1;font-weight:800;text-shadow:0 0 16px rgba(65,177,255,.55);letter-spacing:0}.proto-actions{justify-content:flex-end;gap:14px;font-size:16px}.proto-actions strong{color:#d7e8f7;font-size:17px}.proto-actions button,.plain-icon,.proto-panel-title button,.overview-filter,.map-tools button,.zoom-tools button{min-height:28px;border:1px solid rgba(69,157,214,.34);border-radius:4px;padding:0 10px;background:#051b31d1;color:#d9f4ff}.proto-actions .icon-button,.plain-icon{width:32px;padding:0}.proto-panel{position:relative;min-width:0;min-height:0;border:1px solid var(--panel-border);border-radius:4px;background:linear-gradient(180deg,#041426eb,#020d1ae6),var(--panel-bg);box-shadow:inset 0 0 28px #1162961f,0 0 0 1px #00000038;overflow:hidden}.proto-panel:before,.proto-panel:after{content:"";position:absolute;width:14px;height:14px;pointer-events:none}.proto-panel:before{left:0;top:0;border-left:2px solid rgba(28,166,255,.75);border-top:2px solid rgba(28,166,255,.75)}.proto-panel:after{right:0;bottom:0;border-right:2px solid rgba(28,166,255,.5);border-bottom:2px solid rgba(28,166,255,.5)}.proto-panel-title{display:flex;align-items:center;justify-content:space-between;height:38px;min-width:0;padding:0 12px;border-bottom:1px solid rgba(30,116,166,.25);color:#f0fbff}.proto-panel-title span{display:inline-flex;align-items:center;gap:4px;font-size:19px;font-weight:800}.proto-panel-title svg{color:var(--cyan)}.proto-panel-title button{gap:4px;color:#93b7ca;background:transparent}.divider-title{display:flex;align-items:center;min-height:34px;margin:10px 10px 8px;border-top:1px solid rgba(54,130,174,.28);color:#e8f7ff;font-size:17px;line-height:1;font-weight:800}.overview-panel{grid-column:1;grid-row:2;padding-bottom:12px}.overview-filter{position:absolute;right:12px;top:12px;height:28px;color:#c7ddec;font-size:13px}.summary-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;padding:14px 12px 4px}.stat-card{display:grid;grid-template-columns:38px 1fr;grid-template-rows:20px 1fr;align-items:center;min-height:68px;border:1px solid rgba(40,148,207,.34);border-radius:7px;padding:10px;background:#061c32bd}.stat-card svg{grid-row:1 / 3;color:#5fb0ff}.stat-card span{color:#b7cad8;font-size:13px}.stat-card strong{color:#f7fbff;font-size:25px;line-height:1}.stat-card.normal svg,.stat-card.normal strong{color:var(--green)}.stat-card.alarm svg,.stat-card.alarm strong{color:var(--red)}.stat-card.warning svg,.stat-card.warning strong{color:var(--yellow)}.stat-card.offline svg,.stat-card.offline strong{color:#8997a8}.status-section{display:grid;grid-template-columns:138px 1fr;align-items:center;min-height:138px;padding:0 12px}.prototype-screen .chart{width:100%;height:100%;min-height:0}.status-donut{height:124px}.status-legend-list{display:grid;gap:9px}.status-line{display:grid;grid-template-columns:1fr 34px 54px;align-items:center;gap:8px;color:#c8dce8;font-size:14px}.status-line.offline{display:grid;min-height:0;padding:0;background:transparent;color:#c8dce8!important}.dot-text.offline{display:inline-flex;min-height:0;padding:0;background:transparent;color:#c8dce8!important}.status-line span,.dot-text{display:inline-flex;align-items:center;gap:8px}.status-line i,.dot-text i,.map-legend i,.map-marker i,.selected-callout i,.ring-legend i{width:10px;height:10px;border-radius:50%;background:var(--green)}.status-line.alarm i,.dot-text.alarm i,.map-legend .alarm i,.map-marker.alarm i,.selected-callout.alarm i{background:var(--red)}.status-line.warning i,.dot-text.warning i,.map-legend .warning i,.map-marker.warning i,.selected-callout.warning i{background:var(--yellow)}.status-line.offline i,.dot-text.offline i,.map-legend .offline i,.map-marker.offline i,.selected-callout.offline i{background:#8a94a6}.status-line strong{color:#f3fbff;text-align:right}.status-line em{color:#a2b6c4;font-style:normal}.power-overview,.detail-metrics,.carbon-ledger-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:0 12px}.detail-metrics{grid-template-columns:repeat(4,minmax(0,1fr));padding:0}.info-tile,.metric-banner{display:grid;grid-template-columns:20px 1fr;align-items:center;min-height:58px;border:1px solid rgba(35,122,170,.32);border-radius:5px;padding:9px;background:#061d35b3}.info-tile svg{grid-row:1 / 3}.info-tile span,.metric-banner span{color:#afc2d2;font-size:12px}.info-tile strong,.metric-banner strong{color:#effaff;font-size:22px;line-height:1}.info-tile small,.metric-banner small{margin-left:3px;color:#a8bdcc;font-size:12px}.info-tile.energy svg,.info-tile.energy strong{color:#2d9bff}.info-tile.carbon svg,.info-tile.carbon strong,.metric-banner.carbon strong{color:var(--green)}.info-tile.coal svg,.info-tile.coal strong,.metric-banner.coal strong{color:var(--yellow)}.info-tile.locate svg,.info-tile.locate strong{color:#51b7ff}.scene-panel{grid-column:2;grid-row:2}.scene-host,.scene-host .scene-shell{position:relative;width:100%;height:100%;min-height:0}.scene-host .scene{filter:saturate(.92) contrast(1.08) brightness(.95)}.map-overlay{position:absolute;inset:0;pointer-events:none}.map-legend,.map-tools,.zoom-tools,.selected-callout,.map-marker span{border:1px solid rgba(27,136,195,.46);border-radius:5px;background:#030e1bdb;box-shadow:0 8px 28px #0000004d;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.map-legend{position:absolute;left:24px;top:24px;display:grid;gap:9px;width:88px;padding:11px 12px;color:#c9dce9;font-size:13px}.map-legend strong{color:#effaff;font-size:14px}.map-legend span{display:inline-flex;align-items:center;gap:8px}.map-tools,.zoom-tools{position:absolute;right:20px;display:grid;gap:1px;overflow:hidden;pointer-events:auto}.map-tools{top:24px;width:52px}.zoom-tools{bottom:18px;width:52px}.map-tools button,.zoom-tools button{display:grid;width:52px;height:40px;place-items:center;border-radius:0;padding:0;color:#d7efff;font-weight:700;background:#051629e6}.route-line{position:absolute;left:49%;top:61%;width:22%;height:0;border-top:2px dashed rgba(28,207,255,.82);transform:rotate(-21deg);transform-origin:left center;filter:drop-shadow(0 0 8px rgba(28,207,255,.65))}.route-line:after{content:"";position:absolute;right:-6px;top:-5px;width:10px;height:10px;border-top:2px solid rgba(28,207,255,.9);border-right:2px solid rgba(28,207,255,.9);transform:rotate(45deg)}.map-marker{position:absolute;display:grid;place-items:center;width:18px;height:18px;border:0;padding:0;background:transparent;transform:translate(-50%,-50%);pointer-events:auto}.map-marker span{position:absolute;left:20px;top:-12px;min-width:74px;min-height:26px;padding:4px 8px;color:#e9f7ff;font-size:13px;font-weight:800}.map-marker i{width:13px;height:13px;border:2px solid rgba(0,0,0,.35);box-shadow:0 0 12px currentColor}.map-marker.selected{width:84px;height:84px}.map-marker.selected:before,.map-marker.selected:after{content:"";position:absolute;inset:6px;border:2px solid rgba(25,213,255,.85);border-radius:50%;box-shadow:0 0 22px #19d5ffb8}.map-marker.selected:after{inset:20px;border-color:#19d5ff8c}.map-marker.selected i{width:18px;height:18px;z-index:1}.map-marker.selected span{display:none}.selected-callout{position:absolute;display:grid;gap:6px;min-width:190px;padding:12px 14px;color:#dff6ff;transform:translate(-50%,-120%);pointer-events:auto}.selected-callout strong{display:inline-flex;align-items:center;gap:8px;color:#fff;font-size:17px}.selected-callout span,.selected-callout em{color:#c2d8e6;font-size:13px;font-style:normal}.detail-drawer{grid-column:3;grid-row:2;padding:0 12px 12px}.drawer-title{display:flex;align-items:center;justify-content:space-between;margin:0 -12px}.drawer-title .proto-panel-title{flex:1;border-bottom:0}.plain-icon{margin-right:8px;background:transparent;border-color:transparent}.box-detail-head{display:grid;grid-template-columns:116px 1fr;gap:18px;align-items:center;padding:14px 0 8px;border-bottom:1px solid rgba(41,115,158,.26)}.box-thumb{display:grid;width:112px;height:90px;place-items:center;border:1px solid rgba(98,168,211,.22);border-radius:4px;background:linear-gradient(140deg,#926216b8,#f2ab36c2),#091e33cc;color:#242414}.box-detail-head strong{display:inline-flex;align-items:center;gap:10px;color:#f6fbff;font-size:17px}.box-detail-head .status-pill{float:right}.box-detail-head dl{display:grid;gap:6px;margin:12px 0 0}.box-detail-head dl div{display:grid;grid-template-columns:76px minmax(0,1fr);gap:8px}.box-detail-head dt,.box-detail-head dd{margin:0;font-size:13px}.box-detail-head dt{color:#8faac0}.box-detail-head dd{color:#d8e8f2;overflow-wrap:anywhere}.switch-table,.uwb-table,.rank-table{display:grid;gap:0;min-height:0}.table-head,.table-row{display:grid;grid-template-columns:minmax(96px,1fr) 54px 52px 52px 58px 64px;align-items:center;gap:6px}.table-head,.uwb-head,.rank-head{min-height:36px;padding:0 10px;border:1px solid rgba(35,108,154,.22);border-radius:4px 4px 0 0;background:#0b2137bd;color:#aebfd0;font-size:13px}.table-row,.uwb-row,.rank-row,.alarm-item{width:100%;min-height:42px;border:0;border-bottom:1px solid rgba(45,103,135,.22);border-radius:0;padding:0 10px;background:transparent;color:#d8edf8;text-align:left}.table-row:hover,.uwb-row:hover,.rank-row:hover,.alarm-item:hover{background:#16588229}.table-row span,.uwb-row span,.rank-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.status-pill{border:1px solid currentColor;border-radius:4px;font-weight:700}.top-panel{grid-column:1;grid-row:3}.rank-table{padding:10px 12px}.rank-head,.rank-row{display:grid;grid-template-columns:44px 1fr 110px;align-items:center;gap:8px}.rank-row em{display:grid;width:20px;height:20px;place-items:center;border-radius:3px;background:#3d85b96b;color:#dff4ff;font-style:normal;font-weight:800}.rank-row strong{color:#e9f5ff;text-align:right}.bottom-stack{grid-column:2 / 4;grid-row:3;display:grid;grid-template-columns:250px 380px minmax(0,1fr);gap:8px;min-width:0;min-height:0}.alarm-panel,.uwb-panel,.carbon-panel{min-height:0}.alarm-list{display:grid;gap:0;padding:8px 10px}.alarm-item{display:grid;grid-template-columns:18px minmax(48px,.9fr) minmax(54px,1fr) 58px;gap:5px;align-items:center;color:#c9dae5}.alarm-item>*,.uwb-row>*,.uwb-head>*{min-width:0}.alarm-item svg,.alarm-item strong{color:var(--yellow)}.alarm-item.alarm svg,.alarm-item.alarm strong,.alarm-item.alarm em{color:var(--red)}.alarm-item.normal svg,.alarm-item.normal strong,.alarm-item.normal em{color:var(--green)}.alarm-item span,.alarm-item em{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-style:normal}.uwb-table{overflow:hidden;padding:10px 8px}.uwb-head,.uwb-row{display:grid;grid-template-columns:58px 58px repeat(3,34px) 42px 48px;align-items:center;gap:3px;width:100%}.uwb-head span,.uwb-row span{font-size:11px}.carbon-panel{display:grid;grid-template-rows:38px 70px minmax(0,1fr);padding-bottom:10px}.carbon-ledger-row{min-height:0;padding:7px 12px 5px}.metric-banner{min-height:54px;grid-template-columns:1fr}.metric-banner strong{margin-top:3px;font-size:24px}.carbon-grid{display:grid;grid-template-columns:minmax(270px,1.15fr) minmax(260px,1fr);gap:10px;height:100%;min-height:0;padding:0 12px}.carbon-grid>div{display:grid;grid-template-rows:auto minmax(0,1fr);min-width:0;min-height:0}.carbon-panel .divider-title{min-height:26px;margin:2px 10px 1px;font-size:16px}.trend-mini{height:100%}.ring-layout{display:grid;grid-template-columns:minmax(130px,.9fr) minmax(150px,1fr);align-items:center;height:100%;min-height:0}.carbon-ring{min-height:0}.ring-legend{display:grid;gap:4px}.ring-legend button{display:grid;grid-template-columns:10px 1fr 42px 56px;align-items:center;gap:8px;min-height:23px;border:0;border-radius:0;padding:0;background:transparent;color:#c8dce9;text-align:left}.ring-legend button:nth-child(2) i{background:var(--green)}.ring-legend button:nth-child(3) i{background:var(--yellow)}.ring-legend button:nth-child(4) i{background:#5e78ff}.ring-legend span,.ring-legend em{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-style:normal}.ring-legend strong{color:#dff6ff;font-size:13px}@media(max-width:1500px){.prototype-screen{grid-template-columns:330px minmax(540px,1fr) 420px;grid-template-rows:56px minmax(0,1fr) 300px;gap:7px;padding:0 10px 10px}.title-frame h1{font-size:28px}.proto-header{grid-template-columns:minmax(300px,.9fr) minmax(430px,1fr) minmax(390px,.9fr)}.weather-strip,.proto-actions{gap:10px;font-size:13px}.bottom-stack{grid-template-columns:220px 330px minmax(0,1fr)}.table-head,.table-row{grid-template-columns:minmax(86px,1fr) 48px repeat(4,minmax(42px,1fr))}.detail-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:1180px){.prototype-screen{height:auto;min-height:100vh;grid-template-columns:1fr;grid-template-rows:auto;overflow:visible}.proto-header,.overview-panel,.scene-panel,.detail-drawer,.top-panel,.bottom-stack{grid-column:1;grid-row:auto}.proto-header,.bottom-stack{grid-template-columns:1fr}.title-frame{clip-path:none;justify-items:start;padding-left:12px}.scene-panel{height:620px}}.dashboard-viewport .prototype-screen{grid-template-columns:380px minmax(640px,1fr) 500px;grid-template-rows:60px minmax(0,1fr) 330px;gap:8px;width:1920px;height:1080px;min-height:0;padding:0 14px 12px;overflow:hidden}.dashboard-viewport .proto-header{grid-column:1 / 4;grid-row:1;grid-template-columns:minmax(360px,.9fr) minmax(520px,1fr) minmax(470px,.9fr)}.dashboard-viewport .overview-panel{grid-column:1;grid-row:2}.dashboard-viewport .scene-panel{grid-column:2;grid-row:2;height:auto}.dashboard-viewport .detail-drawer{grid-column:3;grid-row:2}.dashboard-viewport .top-panel{grid-column:1;grid-row:3}.dashboard-viewport .bottom-stack{grid-column:2 / 4;grid-row:3;grid-template-columns:250px 380px minmax(0,1fr)}.dashboard-viewport .title-frame{clip-path:polygon(7% 0,93% 0,86% 100%,14% 100%);justify-items:center;padding-left:0}.dashboard-viewport .title-frame h1{font-size:34px}.dashboard-viewport .weather-strip,.dashboard-viewport .proto-actions{gap:22px;font-size:15px}.dashboard-viewport .table-head,.dashboard-viewport .table-row{grid-template-columns:minmax(96px,1fr) 54px 52px 52px 58px 64px}.dashboard-viewport .detail-metrics{grid-template-columns:repeat(4,minmax(0,1fr))}
