:root{--navy: #12324f;--navy-2: #1c4a72;--navy-3: #2a5e8c;--ink: #182430;--muted: #5b6b7a;--faint: #8496a5;--bg: #e9eef3;--panel: #ffffff;--line: #d3dde5;--line-2: #e4ebf0;--ok: #1f8a5b;--ok-bg: #e6f4ec;--info: #2563a8;--info-bg: #e7eff8;--warn: #b06e0f;--warn-bg: #fbf1de;--crit: #bd2f22;--crit-bg: #fbe9e6;--offline: #7d8c9a;--tbc: #9a6b12;--tbc-bg: #fbf3e2;--tbc-line: #e6cf9c;--mono: ui-monospace, "Cascadia Code", "Cascadia Mono", Consolas, "SF Mono", Menlo, monospace;--sans: "Segoe UI", system-ui, -apple-system, Roboto, Helvetica, Arial, sans-serif;--radius: 8px;--radius-sm: 5px;--shadow: 0 1px 2px rgba(18, 50, 79, .06), 0 6px 18px rgba(18, 50, 79, .06);color-scheme:light;font-family:var(--sans);line-height:1.5;font-weight:400;color:var(--ink);background-color:var(--bg)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--sans);color:var(--ink);background:var(--bg);font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased;min-height:100vh}#root{min-height:100vh}a{color:inherit;text-decoration:none}button{font:inherit}.mono{font-family:var(--mono)}.app{display:grid;grid-template-columns:230px 1fr;grid-template-rows:56px 1fr;min-height:100vh}.topbar{grid-column:1 / -1;grid-row:1;background:var(--navy);color:#eaf1f7;display:flex;align-items:center;gap:16px;padding:0 18px;position:sticky;top:0;z-index:40;border-bottom:1px solid #0d2740}.brand{display:flex;align-items:center;gap:11px;min-width:200px}.brand .mark{width:30px;height:30px;border-radius:6px;flex:0 0 auto;background:linear-gradient(135deg,#2a5e8c,#1c4a72);display:grid;place-items:center;font-weight:700;font-size:12px;letter-spacing:.5px;color:#fff;border:1px solid #3a6ea0}.brand .txt b{font-size:14px;letter-spacing:.3px;display:block;line-height:1.1}.brand .txt span{font-size:10.5px;color:#9db8cf;letter-spacing:.4px}.topbar .spacer{flex:1}.prelim-chip{font-size:11px;font-weight:600;letter-spacing:.3px;background:var(--tbc-bg);color:var(--tbc);border:1px solid var(--tbc-line);padding:3px 9px;border-radius:999px;white-space:nowrap}.role-select{display:flex;align-items:center;gap:7px;font-size:12px;color:#c6d7e6}.role-select select{font-family:var(--sans);font-size:12px;color:#eaf1f7;background:#194066;border:1px solid #2c5d86;border-radius:6px;padding:5px 8px;cursor:pointer}.who{display:flex;align-items:center;gap:8px;font-size:12px;color:#c6d7e6}.who .av{width:26px;height:26px;border-radius:50%;background:#2c5d86;display:grid;place-items:center;font-size:11px;color:#fff;font-weight:600}.icon-btn{background:#194066;border:1px solid #2c5d86;color:#dbe8f2;border-radius:6px;width:30px;height:30px;display:grid;place-items:center;cursor:pointer;font-size:14px}.icon-btn:hover{background:#22537f}.sidebar{grid-column:1;grid-row:2;background:var(--navy);color:#c7d7e5;padding:12px 10px;display:flex;flex-direction:column;gap:2px;border-right:1px solid #0d2740;position:sticky;top:56px;height:calc(100vh - 56px);overflow-y:auto}.nav-label{font-size:10px;letter-spacing:1.2px;text-transform:uppercase;color:#6f8ba6;padding:12px 12px 6px}.nav-item{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:7px;cursor:pointer;color:#c7d7e5;font-size:13px;font-weight:500;-webkit-user-select:none;user-select:none;border:1px solid transparent;text-decoration:none}.nav-item:hover{background:#194066}.nav-item.active{background:#22537f;color:#fff;border-color:#3a6ea0}.nav-item .ic{width:18px;height:18px;flex:0 0 auto;opacity:.9;display:grid;place-items:center}.nav-item .badge{margin-left:auto;font-size:10px;font-weight:700;background:var(--crit);color:#fff;border-radius:999px;padding:1px 6px;min-width:18px;text-align:center}.main{grid-column:2;grid-row:2;overflow-y:auto;height:calc(100vh - 56px)}.screen{display:block;padding:20px 26px 60px;animation:fade .18s ease}@keyframes fade{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.screen{animation:none}}.screen-head{display:flex;align-items:flex-start;gap:16px;margin-bottom:16px;flex-wrap:wrap}.screen-head h1{margin:0;font-size:20px;letter-spacing:-.2px}.screen-head .sub{margin:3px 0 0;color:var(--muted);font-size:13px;max-width:640px}.screen-head .actions{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap}.btn{font-family:var(--sans);font-size:13px;font-weight:600;border-radius:var(--radius-sm);padding:8px 14px;cursor:pointer;border:1px solid var(--navy-2);background:var(--navy-2);color:#fff;white-space:nowrap}.btn:hover{background:var(--navy-3);border-color:var(--navy-3)}.btn.ghost{background:#fff;color:var(--navy-2);border-color:var(--line)}.btn.ghost:hover{background:#f2f6f9}.btn.sm{padding:6px 11px;font-size:12px}.btn.warnb{background:var(--warn);border-color:var(--warn)}.btn.critb{background:var(--crit);border-color:var(--crit)}.btn:disabled{opacity:.45;cursor:not-allowed}.grid{display:grid;gap:16px}.g-4{grid-template-columns:repeat(4,1fr)}.g-3{grid-template-columns:repeat(3,1fr)}.g-2{grid-template-columns:repeat(2,1fr)}@media(max-width:1100px){.g-4{grid-template-columns:repeat(2,1fr)}.g-3,.g-2{grid-template-columns:1fr}}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card .ch{padding:12px 16px;border-bottom:1px solid var(--line-2);display:flex;align-items:center;gap:10px}.card .ch h3{margin:0;font-size:13.5px;letter-spacing:.2px}.card .ch .r{margin-left:auto;font-size:12px;color:var(--muted)}.card .cb{padding:16px}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow);position:relative;overflow:hidden}.kpi .k-accent{position:absolute;left:0;top:0;bottom:0;width:4px}.kpi .k-lab{font-size:11.5px;color:var(--muted);letter-spacing:.3px;text-transform:uppercase}.kpi .k-val{font-size:26px;font-weight:700;margin-top:5px;font-family:var(--mono);letter-spacing:-.5px}.kpi .k-sub{font-size:11.5px;color:var(--faint);margin-top:2px}table.tbl{width:100%;border-collapse:collapse;font-size:13px}table.tbl th{text-align:left;font-size:11px;letter-spacing:.4px;text-transform:uppercase;color:var(--muted);background:#f4f7fa;padding:9px 12px;border-bottom:1px solid var(--line);white-space:nowrap}table.tbl td{padding:10px 12px;border-bottom:1px solid var(--line-2);vertical-align:middle}table.tbl tr:last-child td{border-bottom:none}table.tbl tbody tr.clk{cursor:pointer}table.tbl tbody tr.clk:hover{background:#f3f8fc}.id{font-family:var(--mono);font-weight:600;color:var(--navy-2)}.bdg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;border-radius:999px;padding:2px 9px;white-space:nowrap;border:1px solid transparent}.bdg .dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto}.b-ok{background:var(--ok-bg);color:var(--ok);border-color:#bfe3ce}.b-ok .dot{background:var(--ok)}.b-info{background:var(--info-bg);color:var(--info);border-color:#c3d7ec}.b-info .dot{background:var(--info)}.b-warn{background:var(--warn-bg);color:var(--warn);border-color:#e6d5ac}.b-warn .dot{background:var(--warn)}.b-crit{background:var(--crit-bg);color:var(--crit);border-color:#eec2bc}.b-crit .dot{background:var(--crit)}.b-off{background:#eef1f4;color:var(--offline);border-color:#d7dee4}.b-off .dot{background:var(--offline)}.b-tbc{background:var(--tbc-bg);color:var(--tbc);border-color:var(--tbc-line)}.b-tbc .dot{background:var(--tbc)}.bat{display:inline-flex;align-items:center;gap:7px;font-family:var(--mono);font-size:12px}.bat .cell{width:38px;height:9px;border:1px solid var(--line);border-radius:2px;position:relative;background:#f0f4f7;overflow:hidden}.bat .fill{position:absolute;left:0;top:0;bottom:0;background:var(--ok)}.bat.low .fill{background:var(--warn)}.bat.crit .fill{background:var(--crit)}.tbc-banner{background:var(--tbc-bg);border:1px solid var(--tbc-line);border-radius:var(--radius);padding:12px 16px;display:flex;gap:12px;align-items:flex-start;margin-bottom:16px}.tbc-banner .tag{font-family:var(--mono);font-size:11px;font-weight:700;color:#fff;background:var(--tbc);border-radius:4px;padding:2px 7px;flex:0 0 auto;margin-top:1px}.tbc-banner p{margin:0;font-size:12.5px;color:#6a4e13;line-height:1.4}.tbc-banner b{color:#4f3a0d}.dl{display:grid;grid-template-columns:150px 1fr;gap:9px 14px;font-size:13px}.dl dt{color:var(--muted)}.dl dd{margin:0;font-weight:600}.dl dd.tbcv{color:var(--tbc);font-weight:600}.fld{margin-bottom:13px}.fld label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px;font-weight:600}.fld input,.fld select,.fld textarea{width:100%;font-family:var(--sans);font-size:13px;color:var(--ink);border:1px solid var(--line);border-radius:6px;padding:8px 10px;background:#fff}.fld input:focus,.fld select:focus,.fld textarea:focus{outline:2px solid #b9d2ea;border-color:var(--navy-3)}.hint{font-size:11px;color:var(--faint);margin-top:4px}.two{display:grid;grid-template-columns:1fr 1fr;gap:14px}.ftabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:16px;flex-wrap:wrap}.ftab{background:transparent;border:1px solid transparent;border-bottom:none;color:var(--muted);font-family:var(--sans);font-size:13px;font-weight:600;padding:9px 16px;cursor:pointer;border-radius:7px 7px 0 0;margin-bottom:-1px}.ftab:hover{color:var(--navy-2);background:#f2f6f9}.ftab.active{background:#fff;border-color:var(--line);color:var(--navy);border-bottom:1px solid #fff}.fpane{display:none}.fpane.active{display:block}.bar{height:8px;border-radius:4px;background:#eef2f6;overflow:hidden;min-width:90px}.bar>span{display:block;height:100%;background:var(--info)}.progress-bar{display:flex;align-items:center;gap:8px}.minisel{font-family:var(--sans);font-size:12px;color:var(--ink);border:1px solid var(--line);border-radius:5px;padding:4px 8px;background:#fff;cursor:pointer}.map-wrap{display:grid;grid-template-columns:1fr 250px;gap:16px}@media(max-width:1000px){.map-wrap{grid-template-columns:1fr}}.floors{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.floor-btn{font-family:var(--mono);font-size:12px;font-weight:600;border:1px solid var(--line);background:#fff;color:var(--navy-2);border-radius:6px;padding:6px 12px;cursor:pointer}.floor-btn.active{background:var(--navy-2);color:#fff;border-color:var(--navy-2)}.plan{background:#f7fafc;border:1px solid var(--line);border-radius:var(--radius)}.legend{font-size:12px;color:var(--muted)}.legend .li{display:flex;align-items:center;gap:8px;margin-bottom:7px}.legend .sw{width:12px;height:12px;border-radius:3px;flex:0 0 auto}.login-wrap{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;grid-template-columns:1fr 1fr;background:var(--bg)}.login-left{background:linear-gradient(160deg,#12324f,#1c4a72);color:#eaf1f7;padding:60px 56px;display:flex;flex-direction:column;justify-content:center}.login-left .lg-mark{width:44px;height:44px;border-radius:9px;background:#2a5e8c;border:1px solid #3a6ea0;display:grid;place-items:center;font-weight:700;margin-bottom:24px;color:#fff;font-size:16px}.login-left h1{font-size:26px;margin:0 0 6px;letter-spacing:-.3px;line-height:1.15;color:#eaf1f7}.login-left p{color:#a9c3da;font-size:14px;margin:0 0 28px;max-width:420px}.login-left ul{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:11px}.login-left li{display:flex;gap:10px;align-items:center;font-size:13.5px;color:#cfe0ee}.login-left li .ck{width:20px;height:20px;border-radius:50%;background:#25517b;display:grid;place-items:center;font-size:12px;flex:0 0 auto;color:#fff}.login-right{display:grid;place-items:center;padding:40px}.login-card{background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);width:100%;max-width:360px;padding:30px 28px}.login-card h2{margin:0 0 3px;font-size:20px}.login-card .lc-sub{color:var(--muted);font-size:12.5px;margin:0 0 20px}.login-card .foot{font-size:11px;color:var(--faint);margin-top:16px;text-align:center}.login-left .prelim{margin-top:30px;font-size:11.5px;color:#8ba7c2;border-top:1px solid #1d456b;padding-top:16px}.trace{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px}.trace .t{font-family:var(--mono);font-size:10.5px;color:var(--navy-2);background:#dfe9f1;border:1px solid #c6d7e6;border-radius:4px;padding:1px 6px}.trace .lbl{font-size:10.5px;color:var(--faint);align-self:center;letter-spacing:.3px;margin-right:2px}.small{font-size:11.5px;color:var(--muted)}.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mb8{margin-bottom:8px}.flowlink{color:var(--navy-2);text-decoration:underline;cursor:pointer;font-weight:600}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a18268c;z-index:60;display:none;place-items:center;padding:24px}.modal-bg.on{display:grid}.modal{background:#fff;border-radius:12px;max-width:620px;width:100%;box-shadow:0 20px 60px #0000004d;overflow:hidden}.modal .mh{background:var(--navy);color:#fff;padding:16px 20px;display:flex;align-items:center;gap:10px}.modal .mh h2{margin:0;font-size:16px}.modal .mb{padding:20px;font-size:13.5px;color:var(--ink);line-height:1.5}.modal .mf{padding:14px 20px;border-top:1px solid var(--line-2);display:flex;justify-content:flex-end;gap:10px}.pa-two{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media(max-width:1050px){.pa-two{grid-template-columns:1fr}}.cmd{display:flex;gap:9px;flex-wrap:wrap}.perm-note{font-size:11.5px;color:var(--muted);margin-top:10px;padding:8px 11px;background:#f5f8fa;border:1px solid var(--line-2);border-radius:6px}.perm-note.blocked{background:var(--warn-bg);border-color:#e6d5ac;color:#6a4e13}.scopebar{position:fixed;bottom:0;left:230px;right:0;z-index:30;background:#f3f6f9;border-top:1px solid var(--line);font-size:11px;color:var(--muted);padding:7px 26px;display:flex;gap:14px;align-items:center;flex-wrap:wrap}.rail{position:fixed;left:230px;right:0;top:56px;z-index:35;background:#0e2a44;color:#eaf1f7;display:none;align-items:center;gap:14px;padding:9px 26px;border-bottom:1px solid #1d456b}.rail.on{display:flex}.anno-toggle{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.anno-toggle input{cursor:pointer;margin:0}.stoprow{display:flex;gap:6px;align-items:center;margin-bottom:6px}.stoprow input{font-family:var(--sans);font-size:12.5px;border:1px solid var(--line);border-radius:5px;padding:6px 8px;background:#fff}.stoprow .loc{flex:1;min-width:0}.stoprow .dw{width:52px;text-align:center;font-family:var(--mono)}.scopemark{display:inline}body.anno-off .trace,body.anno-off .hint,body.anno-off .perm-note,body.anno-off .anno,body.anno-off .scopemark{display:none!important}
