.ds-statbar{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}.ds-stat{display:inline-flex;align-items:baseline;gap:5px}.ds-swatch{display:inline-block;width:10px;height:10px;border-radius:2px;vertical-align:-1px}.ds-stat .ds-k{color:var(--muted-2);font-size:11px}.ds-stat .ds-v{font-family:Consolas,Cascadia Mono,monospace;font-size:16px;font-weight:600}.ds-target-id{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.ds-target-id .mono{word-break:break-all}.ds-flow-group{border:1px solid var(--line-soft);border-radius:var(--radius);margin-bottom:6px;overflow:hidden}button.ds-ghead{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px;border:0;border-radius:0;background:var(--panel-2);color:var(--fg);font-size:12px;text-align:left}button.ds-ghead:hover:not(:disabled){background:#1d2c46}.ds-flow-names{display:flex;flex-wrap:wrap;gap:4px;padding:6px 8px;max-height:220px;overflow:auto}.ds-flow-name{font-size:11px;color:var(--muted);border:1px solid var(--line-soft);border-radius:9px;padding:0 6px}table.grid tr.ds-truncated>td{opacity:.55}.layout-preview{position:relative;overflow:auto;max-height:420px;padding:10px;background:linear-gradient(0deg,rgba(35,51,77,.35) 1px,transparent 1px) 0 0 / 100% 40px,linear-gradient(90deg,rgba(35,51,77,.35) 1px,transparent 1px) 0 0 / 40px 100%,var(--bg);border:1px solid var(--line);border-radius:var(--radius)}.layout-canvas{position:relative}.layout-links{position:absolute;left:0;top:0;pointer-events:none}.layout-win{position:absolute;box-sizing:border-box;overflow:hidden;border:1px solid var(--blue);border-radius:var(--radius);background:#7fb3ff24;color:var(--fg);font-size:11px;line-height:1.3;cursor:pointer}.layout-win:hover{background:#7fb3ff3d}.layout-win.sel{border-color:var(--green);background:#3ddc8433;box-shadow:0 0 0 1px #3ddc8480}.layout-win.hidden-win{border-style:dashed;border-color:var(--muted-2);background:#6f81991f;opacity:.6}.layout-win-label{padding:2px 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pm-root{display:flex;gap:8px;align-items:flex-start;min-width:0}.pm-map{position:relative;flex:1 1 auto;min-width:0;overflow:hidden;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius)}.pm-host{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.pm-host.panning{cursor:grabbing}.pm-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;pointer-events:none;z-index:1}.pm-svg.pm-overlay{z-index:3}.pm-sea{fill:#0c1424}.pm-grat{stroke:#1d2b42;stroke-width:1;shape-rendering:crispEdges}.pm-grat.major{stroke:#2c4160}.pm-grat-label{fill:var(--muted-2);font-size:10px;font-family:Consolas,Cascadia Mono,monospace;paint-order:stroke;stroke:#0b1220cc;stroke-width:2px;stroke-linejoin:round}.pm-tiles{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;z-index:2;pointer-events:none}.pm-tile{position:absolute;display:block;-webkit-user-select:none;user-select:none}.pm-marker{cursor:pointer;outline:none;color:var(--pm-c, var(--muted))}.pm-marker .pm-pin{fill:#0b1220eb;stroke:currentColor;stroke-width:2}.pm-marker .pm-dot{fill:currentColor}.pm-marker .pm-ring{fill:none;stroke:var(--accent);stroke-width:1.6;stroke-dasharray:3 3}.pm-marker .pm-pulse{fill:none;stroke:currentColor;stroke-width:2;transform-box:fill-box;transform-origin:center;animation:pmPulse 1.6s ease-out infinite}@keyframes pmPulse{0%{transform:scale(.55);opacity:.9}70%,to{transform:scale(2.3);opacity:0}}.pm-marker .pm-label{font-size:11px;fill:var(--fg);paint-order:stroke;stroke:#0b1220d9;stroke-width:3px;stroke-linejoin:round}.pm-marker:hover .pm-label,.pm-marker:focus-visible .pm-label{fill:var(--accent)}.pm-marker:focus-visible .pm-pin{stroke:#fff}.pm-tone-none{--pm-c: var(--muted)}.pm-tone-gen{--pm-c: var(--blue)}.pm-tone-online{--pm-c: var(--green)}.pm-tone-alarm{--pm-c: var(--red)}.pm-tone-off{--pm-c: #4d5a6d}.pm-toolbar{position:absolute;top:8px;left:8px;z-index:5;display:flex;align-items:center;gap:4px;flex-wrap:wrap;max-width:calc(100% - 16px);pointer-events:none}.pm-toolbar>*{pointer-events:auto}.pm-toolbar button{background:#111a2beb}.pm-seg{display:inline-flex;gap:2px;padding:1px;background:#0c1424cc;border:1px solid var(--line);border-radius:var(--radius)}.pm-seg button.active{background:#24406b;border-color:#3b74c0;color:#fff}.pm-legend{position:absolute;left:8px;bottom:6px;z-index:5;display:flex;flex-wrap:wrap;gap:3px 10px;max-width:calc(100% - 210px);padding:2px 6px;background:#0c1424b8;border:1px solid var(--line-soft);border-radius:var(--radius);font-size:11px;color:var(--muted);pointer-events:none}.pm-legend-item{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.pm-swatch{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--pm-c, var(--muted))}.pm-readout{position:absolute;right:8px;bottom:6px;z-index:5;padding:2px 6px;background:#0c1424b8;border:1px solid var(--line-soft);border-radius:var(--radius);color:var(--fg);white-space:nowrap;pointer-events:none}.pm-attrib{position:absolute;right:8px;top:8px;z-index:5;max-width:45%;padding:0 4px;text-align:right;background:#0c142499;border-radius:var(--radius);pointer-events:none}.pm-warn{position:absolute;left:50%;top:8px;transform:translate(-50%);z-index:6;background:#2a2209eb;pointer-events:none}.pm-empty{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;display:flex;align-items:center;justify-content:center;pointer-events:none}.pm-tip{position:absolute;z-index:7;width:288px;padding:6px 8px;background:#0a1220f5;border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 8px 20px #00000073;font-size:11px;pointer-events:none}.pm-tip-title{display:flex;align-items:center;gap:6px;margin-bottom:4px;font-size:12px;font-weight:600}.pm-tip-tone{margin-left:auto;padding:0 6px;border:1px solid currentColor;border-radius:9px;color:var(--pm-c, var(--muted));font-size:10px;font-weight:400;white-space:nowrap}.pm-tip-row{display:flex;gap:6px;line-height:1.5}.pm-tip-row .k{flex:0 0 60px;color:var(--muted-2)}.pm-tip-row .v{flex:1 1 auto;min-width:0;word-break:break-all}.pm-root .pm-side{flex:0 0 292px;width:292px;min-width:0;display:flex;flex-direction:column;overflow:hidden;margin-bottom:0;padding:8px}.pm-side-head{display:flex;align-items:center;gap:6px;padding-bottom:6px;margin-bottom:4px;border-bottom:1px solid var(--line-soft);color:var(--accent);font-weight:600}.pm-side-list{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:2px}.pm-side-title{display:flex;align-items:center;gap:6px;margin-top:8px;padding:4px 2px;border-top:1px dashed var(--line);color:var(--muted);font-size:11px}.pm-side-hint{padding:2px 4px}.pm-item{display:flex;align-items:center;gap:6px;width:100%;padding:4px 6px;background:transparent;border:1px solid transparent;border-radius:var(--radius);color:var(--fg);font-size:12px;text-align:left;cursor:pointer}.pm-item:hover{background:#17253c}.pm-item.active{background:#24406b;border-color:#3b74c0}.pm-item-dot{flex:none;width:9px;height:9px;border-radius:50%;background:var(--pm-c, var(--muted))}.pm-item-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column}.pm-item-name,.pm-item-sub{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pm-item-tail{flex:none;display:inline-flex;align-items:center;gap:4px}@media(max-width:900px){.pm-root{flex-direction:column}.pm-map,.pm-root .pm-side{flex:none;width:100%}.pm-legend{bottom:26px;max-width:calc(100% - 16px)}.pm-tip{width:240px}.pm-attrib{max-width:55%}}@media(prefers-reduced-motion:reduce){.pm-marker .pm-pulse{animation:none;opacity:.5}}.pj-toolbar{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap}.pj-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:10px}.pj-card{display:flex;flex-direction:column;gap:6px;min-width:0;padding:10px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius)}.pj-card.cur{border-color:#3b74c0;box-shadow:inset 3px 0 #3b74c0}.pj-card.off{opacity:.75}.pj-card-head{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.pj-card-head .pj-name{font-size:13px;font-weight:600}.pj-card-head .pj-id{font-size:11px;color:var(--muted)}.pj-desc{font-size:11px;color:var(--muted);word-break:break-all}.pj-kv{display:grid;grid-template-columns:78px 1fr;gap:2px 8px;font-size:11px}.pj-kv .k{color:var(--muted-2)}.pj-kv .v{word-break:break-all}.pj-coord{font-family:Consolas,Cascadia Mono,monospace;font-size:11px}.pj-scale{display:flex;gap:6px;flex-wrap:wrap}.pj-actions{display:flex;gap:4px;flex-wrap:wrap;margin-top:2px}.pj-detail,.pj-gen{padding-top:6px;border-top:1px dashed var(--line);font-size:11px}.pj-bar{position:relative;height:6px;margin-top:4px;border-radius:3px;background:var(--panel-2);overflow:hidden}.pj-bar-fill{position:absolute;top:0;bottom:0;left:0;background:#3b74c0}.pj-bar-fill.indet{width:38%;animation:pj-slide 1.1s ease-in-out infinite}.pj-bar-fill.done{width:100%;background:var(--green)}.pj-bar-fill.err{width:100%;background:var(--red)}@keyframes pj-slide{0%{left:-38%}to{left:100%}}.pj-form{display:grid;grid-template-columns:1fr 1fr;gap:8px}.pj-form .span2{grid-column:1 / -1}@media(max-width:720px){.pj-form{grid-template-columns:1fr}}.pj-map-wrap{width:100%;min-width:0}.pj-tiles{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap}.pj-tiles input{width:420px}.pj-list{display:flex;flex-direction:column;gap:4px;max-height:420px;overflow:auto}.pj-row{display:flex;align-items:stretch;gap:4px;min-width:0}.pj-item{display:flex;flex:1;align-items:center;gap:6px;min-width:0;padding:4px 6px;text-align:left;background:var(--panel-2);border:1px solid var(--line-soft);border-radius:var(--radius)}.pj-item.active{background:#1f3a5c;border-color:#3b74c0}.pj-item .pj-item-main{display:flex;flex:1;flex-direction:column;min-width:0}.pj-item .pj-item-name{font-size:12px}.pj-item .pj-item-sub{overflow:hidden;font-size:10px;color:var(--muted-2);text-overflow:ellipsis;white-space:nowrap}.pj-item .pj-item-tail{display:flex;align-items:center;gap:3px}.pj-group-title{display:flex;align-items:center;gap:6px;margin-top:6px;padding-top:6px;border-top:1px solid var(--line-soft);font-size:11px;color:var(--muted)}.so-dev-normal{--so-state: #52c41a}.so-dev-alarm{--so-state: #ff4d4f}.so-dev-maintenance{--so-state: #faad14}.so-dev-shutdown{--so-state: #8c8c8c}.so-flow-energized{--so-state: #52c41a}.so-flow-de-energized{--so-state: #8c8c8c}.so-flow-grounded{--so-state: #faad14}.so-flow-unknown{--so-state: #bfbfbf}.so-state-colored .svg-symbol>:not(.alarm-halo):not(text){stroke:var(--so-state)}.so-state-colored .svg-symbol>[fill]:not([fill=none]):not(text){fill:var(--so-state)}.so-dot circle{stroke:#0b1220;stroke-width:1.2}.so-dv text{font-variant-numeric:tabular-nums}.so-dv rect{pointer-events:none}.so-link-de-energized{stroke-dasharray:4 4}.so-link-grounded{stroke-dasharray:6 4}.so-link-energized{stroke-dasharray:8 6;animation:soFlowDash .9s linear infinite}@keyframes soFlowDash{to{stroke-dashoffset:-14}}@media(prefers-reduced-motion:reduce){.so-link-energized{animation:none}}.cimg-panel{display:flex;flex-direction:column;gap:6px;min-height:0;overflow:auto;padding-right:4px}.cimg-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.cimg-actions{display:flex;gap:6px;align-items:center}.cimg-sum{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:4px 0}.cimg-badge{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;border:1px solid transparent}.cimg-badge.ok{color:#7ee0a8;border-color:#7ee0a866;background:#7ee0a81a}.cimg-badge.warn{color:#f0b46a;border-color:#f0b46a73;background:#f0b46a1f}.cimg-badge.error{color:#ff8080;border-color:#ff808080;background:#ff808024}.cimg-badge.zero{color:var(--text-dim, #8aa0b8);border-color:var(--line-soft, #26364a)}.cimg-issues{display:flex;flex-direction:column;gap:3px;border:1px solid var(--line-soft, #26364a);border-radius:6px;padding:6px 8px;background:#ffffff03}.cimg-issue{display:flex;gap:8px;align-items:baseline;font-size:12px;line-height:1.5}.cimg-issue .cimg-lv{flex:none;width:30px;text-align:center;border-radius:3px;font-size:11px}.cimg-issue.ok .cimg-lv{color:#7ee0a8}.cimg-issue.warn .cimg-lv{color:#f0b46a}.cimg-issue.error .cimg-lv{color:#ff8080}.cimg-sub{margin:4px 0}.cimg-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.cimg-chip{font-size:11px;padding:2px 6px;border-radius:4px;border:1px solid var(--line-soft, #26364a);background:transparent;color:var(--text, #d8e4f2);cursor:pointer;font-family:ui-monospace,Consolas,monospace}.cimg-chip:hover{border-color:var(--accent, #4ea1ff)}.cimg-files{display:flex;flex-direction:column;gap:4px;max-height:420px;overflow:auto;border:1px solid var(--line-soft, #26364a);border-radius:6px;padding:6px 8px}.cimg-file-head{display:flex;align-items:center;gap:8px;justify-content:space-between}.cimg-file-issues{margin:2px 0 4px 12px}.cimg-file{border-bottom:1px solid rgba(255,255,255,.04);padding-bottom:4px}.cimg-viewer{border:1px solid var(--line, #33465e);border-radius:6px;padding:6px 8px;margin:4px 0}.cimg-pre{max-height:320px;overflow:auto;margin:4px 0 0;padding:8px;border-radius:4px;background:#00000047;font-size:11.5px;line-height:1.45;white-space:pre-wrap;word-break:break-all}.cimg-import{margin-top:6px;border-top:1px solid var(--line-soft, #26364a);padding-top:6px}.cimg-filebtn{cursor:pointer;border:1px solid var(--line-soft, #26364a);border-radius:4px;padding:2px 8px}.cimg-filebtn input{display:none}.cimg-textarea{width:100%;resize:vertical;font-family:ui-monospace,Consolas,monospace;font-size:11.5px;padding:6px 8px;border-radius:4px;border:1px solid var(--line-soft, #26364a);background:#0003;color:var(--text, #d8e4f2)}.cimg-imp-result{margin-top:6px;display:flex;flex-direction:column;gap:2px}.vw-layout{display:flex;gap:10px;align-items:flex-start}.vw-list{width:300px;min-width:300px;display:flex;flex-direction:column;gap:4px;max-height:calc(100vh - 190px)}.vw-list-scroll{flex:1;min-height:0;overflow:auto;border:1px solid var(--line);border-radius:var(--radius);background:#0c1424}.vw-item{display:flex;flex-direction:column;gap:2px;padding:5px 7px;border-bottom:1px solid var(--line-soft);cursor:pointer}.vw-item:hover{background:#17253c}.vw-item.active{background:#24406b}.vw-item .vw-name{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:600}.vw-item .vw-name .vw-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vw-sum{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vw-main{flex:1;min-width:0}@media(max-width:1100px){.vw-layout{flex-direction:column}.vw-list{width:100%;min-width:0;max-height:260px}}:root{--bg: #0b1220;--bg-soft: #0f1727;--panel: #111a2b;--panel-2: #16223a;--line: #23334d;--line-soft: #1a2740;--fg: #e8f0ff;--muted: #9fb3c8;--muted-2: #6f8199;--accent: #ffd166;--blue: #7fb3ff;--red: #ff5c4d;--green: #3ddc84;--orange: #ffa94d;--purple: #b197fc;--cyan: #4dd4d4;--radius: 4px;--head-h: 48px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--fg);font-family:Microsoft YaHei,PingFang SC,Segoe UI,system-ui,sans-serif;font-size:13px;line-height:1.5;overflow:hidden}a{color:var(--blue);text-decoration:none}a:hover{text-decoration:underline}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:#0a1020}::-webkit-scrollbar-thumb{background:#26374f;border-radius:5px}::-webkit-scrollbar-thumb:hover{background:#33496a}.app{display:flex;flex-direction:column;height:100%}.topbar{height:var(--head-h);min-height:var(--head-h);display:flex;align-items:center;gap:14px;padding:0 12px;background:linear-gradient(180deg,#16223a,#111a2b);border-bottom:1px solid var(--line);z-index:30}.brand{display:flex;align-items:baseline;gap:8px;font-weight:700;letter-spacing:.5px;white-space:nowrap}.brand .logo{color:var(--accent);font-size:15px}.brand .sub{color:var(--muted-2);font-size:11px;font-weight:400}.brand .proj-select{max-width:240px;padding:2px 6px;font-size:12px;font-weight:600;color:var(--text);background:var(--panel-2, rgba(255, 255, 255, .06));border:1px solid var(--line);border-radius:4px;cursor:pointer}.brand .proj-select:hover{border-color:var(--accent)}.brand .proj-select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.topnav{display:flex;gap:2px;flex-wrap:nowrap;overflow:hidden}.topnav a{display:inline-block;padding:4px 9px;border-radius:var(--radius);color:var(--muted);font-size:12px;white-space:nowrap}.topnav a:hover{background:#1d2c46;color:var(--fg);text-decoration:none}.topnav a.active{background:#24406b;color:#fff}.topbar-right{margin-left:auto;display:flex;align-items:center;gap:10px;white-space:nowrap}.app-body{flex:1;display:flex;min-height:0}.sidebar{width:292px;min-width:292px;display:flex;flex-direction:column;background:var(--bg-soft);border-right:1px solid var(--line);min-height:0}.sidebar.collapsed{width:26px;min-width:26px;overflow:hidden}.sidebar-tools{padding:6px;border-bottom:1px solid var(--line-soft);display:flex;gap:6px}.tree-scroll{flex:1;overflow:auto;padding:4px 0 20px}.content{flex:1;min-width:0;min-height:0;overflow:auto;padding:12px}.content.flush{padding:0;overflow:hidden;display:flex}button,.btn{background:#1d2c46;color:var(--fg);border:1px solid var(--line);border-radius:var(--radius);padding:4px 10px;font-size:12px;font-family:inherit;cursor:pointer}button:hover:not(:disabled),.btn:hover{background:#27405f}button:disabled,.btn.disabled{opacity:.45;cursor:not-allowed}button.primary{background:#2c5c9e;border-color:#3b74c0}button.primary:hover:not(:disabled){background:#376db8}button.danger{background:#822b23;border-color:#a83a30}button.danger:hover:not(:disabled){background:#9d3429}button.ghost{background:transparent}button.tiny{padding:1px 6px;font-size:11px}input,select,textarea{background:#0c1424;color:var(--fg);border:1px solid var(--line);border-radius:var(--radius);padding:3px 6px;font-size:12px;font-family:inherit;max-width:100%}input:focus,select:focus,textarea:focus{outline:1px solid #3b74c0}label.field{display:inline-flex;flex-direction:column;gap:2px;font-size:11px;color:var(--muted)}input[type=checkbox]{width:auto}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:10px;margin-bottom:10px}.card>h3,.card>h2{margin:0 0 8px;font-size:13px;font-weight:600;color:var(--accent);letter-spacing:.4px}.page-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}.page-head h2{margin:0;font-size:15px;font-weight:600}.page-head .desc{color:var(--muted-2);font-size:11px}.muted{color:var(--muted-2)}.small{font-size:11px}.mono{font-family:Consolas,Cascadia Mono,Courier New,monospace}.row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.col{display:flex;flex-direction:column;gap:8px}.spacer{flex:1}.row-actions{flex-wrap:nowrap;white-space:nowrap}.badge{display:inline-block;min-width:16px;padding:0 5px;border-radius:8px;background:#263a4f;color:var(--muted);font-size:10px;text-align:center;line-height:15px}.badge.accent{background:#4a3c12;color:var(--accent)}.badge.red{background:#4d1f1a;color:#ff8d80}.badge.green{background:#14402a;color:var(--green)}.badge.blue{background:#16345c;color:var(--blue)}.pill{display:inline-block;padding:0 6px;border:1px solid var(--line);border-radius:9px;font-size:10px;color:var(--muted);white-space:nowrap;vertical-align:middle}.pill.ok{border-color:#23613f;color:var(--green)}.pill.bad{border-color:#7a2c24;color:var(--red)}.pill.warn{border-color:#6d5518;color:var(--accent)}.pill.info,.pill.blue{border-color:#2c558a;color:var(--blue)}.offline-flag{padding:2px 8px;border:1px solid #6d5518;background:#3a2f0d;color:var(--accent);border-radius:9px;font-size:11px}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}.stat{background:var(--panel-2);border:1px solid var(--line-soft);border-radius:var(--radius);padding:8px 10px}.stat .k{color:var(--muted-2);font-size:11px}.stat .v{font-size:19px;font-weight:600;color:var(--fg);font-family:Consolas,Cascadia Mono,monospace;line-height:1.25}.stat .u{font-size:11px;color:var(--muted-2);margin-left:3px}.stat.accent .v{color:var(--accent)}.stat.blue .v{color:var(--blue)}.stat.green .v{color:var(--green)}.stat.red .v{color:var(--red)}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}table.grid{border-collapse:collapse;width:100%;font-size:12px}table.grid th,table.grid td{border-bottom:1px solid var(--line-soft);padding:3px 7px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:380px}table.grid thead th{position:sticky;top:0;background:#17233a;color:var(--muted);font-weight:600;z-index:2}table.grid tbody tr:hover{background:#17253c}table.grid tbody tr.clickable{cursor:pointer}table.grid tbody tr.selected{background:#1f3a5c}table.grid td.num,table.grid th.num{text-align:right;font-family:Consolas,Cascadia Mono,monospace}.empty{padding:18px;text-align:center;color:var(--muted-2)}.pager{display:flex;align-items:center;gap:8px;padding:6px 2px;font-size:11px;color:var(--muted);flex-wrap:wrap}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:8px;flex-wrap:wrap}.tabs button{border:none;border-bottom:2px solid transparent;border-radius:0;background:transparent;color:var(--muted);padding:5px 11px}.tabs button:hover{background:#17253c}.tabs button.active{color:var(--accent);border-bottom-color:var(--accent)}.tree-node{-webkit-user-select:none;user-select:none}.tree-row{display:flex;align-items:center;gap:4px;padding:1px 6px 1px 2px;border-radius:3px;cursor:pointer;white-space:nowrap;overflow:hidden}.tree-row:hover{background:#17253c}.tree-row.active{background:#24406b}.tree-row .caret{width:12px;min-width:12px;text-align:center;color:var(--muted-2);font-size:9px}.tree-row .lbl{overflow:hidden;text-overflow:ellipsis;color:var(--fg)}.tree-row.leaf .lbl{color:var(--muted)}.tree-row .bdg{margin-left:auto;flex:none}.tree-hint{color:var(--muted-2);font-size:11px;padding:6px 10px}.drawer-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#03070f8c;z-index:60}.drawer{position:fixed;top:0;right:0;bottom:0;width:min(760px,74vw);background:var(--bg-soft);border-left:1px solid var(--line);z-index:61;display:flex;flex-direction:column;box-shadow:-8px 0 24px #00000080}.drawer-head{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--line);background:var(--panel)}.drawer-head h3{margin:0;font-size:13px;color:var(--accent)}.drawer-body{flex:1;overflow:auto;padding:10px}.kv{display:grid;grid-template-columns:110px 1fr;gap:2px 8px;font-size:12px}.kv .k{color:var(--muted-2)}.kv .v{word-break:break-all}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#03070f99;z-index:80;display:flex;align-items:center;justify-content:center}.modal{width:min(560px,92vw);max-height:84vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:6px;box-shadow:0 12px 40px #0009}.modal-head{padding:8px 12px;border-bottom:1px solid var(--line);font-weight:600;color:var(--accent)}.modal-body{padding:12px}.modal-foot{padding:10px 12px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px}.alarm-stack{position:fixed;right:14px;bottom:14px;z-index:70;display:flex;flex-direction:column;gap:8px;width:360px}.alarm-card{background:#2a1512;border:1px solid #7a2c24;border-left:3px solid var(--red);border-radius:var(--radius);padding:8px 10px;box-shadow:0 6px 20px #00000080}.alarm-card.grade1{border-color:#b23a2c}.alarm-card.grade2{border-color:#a06a18}.alarm-card .t{font-weight:600}.alarm-card .m{color:var(--muted);font-size:11px}.login-wrap{height:100%;display:flex;align-items:center;justify-content:center;background:radial-gradient(1000px 600px at 50% 0%,#14243d,#0b1220 70%)}.login-box{width:360px;background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:20px;box-shadow:0 14px 44px #0000008c}.login-box h1{margin:0 0 2px;font-size:17px}.login-box .sub{color:var(--muted-2);font-size:11px;margin-bottom:16px}.login-box .field{display:block;margin-bottom:10px}.login-box input{width:100%;padding:6px 8px}.svg-host{position:relative;flex:1;min-width:0;min-height:0;overflow:hidden;background:var(--bg);border:1px solid var(--line);border-radius:var(--radius)}.svg-host svg{display:block;width:100%;height:100%;touch-action:none}.svg-toolbar{display:flex;align-items:center;gap:6px;padding:4px 6px;background:var(--panel);border:1px solid var(--line);border-bottom:none;border-radius:var(--radius) var(--radius) 0 0;flex-wrap:wrap}.svg-tip{position:absolute;pointer-events:none;background:#0a1220f2;border:1px solid var(--line);border-radius:3px;padding:4px 7px;font-size:11px;color:var(--fg);max-width:340px;z-index:5;white-space:pre-line}.sld-layout,.topo-layout,.monitor-layout{display:flex;flex:1;min-height:0;gap:8px}.graphic-list{width:264px;min-width:264px;display:flex;flex-direction:column;background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--radius);min-height:0}.graphic-list .list-scroll{flex:1;overflow:auto}.graphic-item{padding:4px 8px;cursor:pointer;border-bottom:1px solid var(--line-soft);display:flex;align-items:center;gap:6px;font-size:12px}.graphic-item:hover{background:#17253c}.graphic-item.active{background:#24406b}.graphic-item .sc{flex:none;font-size:10px;color:var(--muted-2)}.legend{display:flex;gap:10px;flex-wrap:wrap;font-size:11px;color:var(--muted);padding:4px 6px}.legend .it{display:inline-flex;align-items:center;gap:4px}.chart-host{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius)}.chart-tip{position:absolute;pointer-events:none;background:#0a1220f5;border:1px solid var(--line);border-radius:3px;padding:4px 7px;font-size:11px;z-index:6;white-space:nowrap}.notice{border:1px solid #3b5a2a;background:#16240f;color:#b9e39a;padding:6px 9px;border-radius:var(--radius);font-size:12px}.notice.warn{border-color:#6d5518;background:#2a2209;color:#ffdf94}.notice.err{border-color:#7a2c24;background:#2a1512;color:#ffb3aa}.notice.info{border-color:#24486e;background:#0f1f33;color:#bcd8ff}.checklist{max-height:240px;overflow:auto;border:1px solid var(--line);border-radius:var(--radius);padding:4px 6px;background:#0c1424}.checklist label{display:flex;align-items:center;gap:6px;font-size:12px;padding:1px 0}.spin{display:inline-block;width:11px;height:11px;border:2px solid #3b74c0;border-top-color:transparent;border-radius:50%;animation:spin .8s linear infinite;vertical-align:-1px}@keyframes spin{to{transform:rotate(360deg)}}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:10px}@media(max-width:1100px){.two-col{grid-template-columns:1fr}}.navgroup{position:relative}.navgroup-btn,.navgroup.single{display:inline-flex;align-items:center;gap:3px;padding:4px 9px;border:0;border-radius:var(--radius);background:transparent;color:var(--muted);font-size:12px;white-space:nowrap;cursor:pointer}.navgroup-btn:hover,.navgroup.single:hover{background:#1d2c46;color:var(--fg);text-decoration:none}.navgroup.active>.navgroup-btn,.navgroup.single.active{background:#24406b;color:#fff}.navgroup .caret{font-size:9px;opacity:.75}.navdrop{position:absolute;top:100%;left:0;min-width:268px;padding:4px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 10px 26px #00000073;z-index:60;display:none}.navgroup:hover .navdrop,.navgroup:focus-within .navdrop{display:block}.navdrop a{display:block;padding:5px 8px;border-radius:var(--radius);color:var(--fg)}.navdrop a:hover{background:#1d2c46;text-decoration:none}.navdrop a.active{background:#24406b}.navdrop a .t{display:block;font-size:12px}.navdrop a .h{display:block;font-size:10px;color:var(--muted-2);white-space:normal;line-height:1.35}.page{display:flex;flex-direction:column;gap:8px;min-height:0}.page-head2{display:flex;flex-direction:column;gap:4px;padding-bottom:6px;border-bottom:1px solid var(--line-soft)}.page-head2.dense{padding-bottom:2px}.page-head2 .crumbs{display:flex;gap:4px;font-size:11px;color:var(--muted-2)}.page-head2 .crumbs .sep{margin:0 4px;opacity:.6}.page-head2 .crumbs a{color:var(--blue)}.page-head2 .ph-main{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.page-head2 .ph-main h2{margin:0;font-size:15px}.page-head2 .ph-main .desc{color:var(--muted);font-size:11px;max-width:62vw}.page-head2 .ph-actions,.page-head2 .ph-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.card-head{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:6px}.card-head h3{margin:0}.grid tr.ev-raised>td{background:#ff4d4f29}.grid tr.ev-acked>td{background:#7fb3ff21}.grid tr.ev-cleared>td{background:#3ddc841f}.grid tr.ev-raised:hover>td{background:#ff4d4f3d}.grid tr.ev-acked:hover>td{background:#7fb3ff33}.grid tr.ev-cleared:hover>td{background:#3ddc842e}.ev-legend{display:inline-block;margin:0 4px;padding:1px 6px;border-radius:var(--radius);font-size:11px;border:1px solid var(--line)}table.grid th.dt-act,table.grid td.dt-act{position:sticky;right:0;background:var(--panel);box-shadow:-8px 0 10px -8px #000000a6}table.grid th.dt-act{z-index:3}table.grid td.dt-act{z-index:1}table.grid tbody tr:hover>td.dt-act{background:#17253c}table.grid tbody tr.selected>td.dt-act{background:#1f3a5c}table.grid tr.ev-raised>td.dt-act{background:#372231}table.grid tr.ev-raised:hover>td.dt-act{background:#4a2634}table.grid tr.ev-acked>td.dt-act{background:#1f2e47}table.grid tr.ev-acked:hover>td.dt-act{background:#273955}table.grid tr.ev-cleared>td.dt-act{background:#163136}table.grid tr.ev-cleared:hover>td.dt-act{background:#1a3b41}.ev-legend.ev-raised{background:#ff4d4f2e}.ev-legend.ev-acked{background:#7fb3ff29}.ev-legend.ev-cleared{background:#3ddc8424}.grid tr.row-missing-name>td{background:#ffd1660d}.alarm-halo{animation:alarmBlink 1.15s ease-in-out infinite}@keyframes alarmBlink{0%,to{opacity:1}50%{opacity:.28}}@media(prefers-reduced-motion:reduce){.alarm-halo{animation:none}}.alarm-panel{margin:4px 0;padding:6px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);max-height:168px;overflow:hidden;display:flex;flex-direction:column}.alarm-panel-list{overflow:auto;display:flex;flex-direction:column;gap:2px}.alarm-panel-row{display:flex;align-items:center;gap:6px;padding:3px 6px;background:transparent;border:0;border-left:3px solid var(--red);color:var(--fg);text-align:left;cursor:pointer;font-size:12px}.alarm-panel-row:hover{background:#1d2c46}.alarm-panel-row .t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.watch-drawer{height:52vh}
