:root{--bg: #16181b;--panel: #1e2125;--raised: #262a2f;--line: #3a3f46;--fg: #c5cbd2;--dim: #8b929b;--mute: #6a717a;--normal: #8d939b;--p1: #c62828;--p2: #ef6c00;--p3: #c9a227;--sel: #4d7ec8;--go: #3d6aa8;--font: 14px;--mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font:var(--font)/1.35 "Segoe UI",system-ui,sans-serif;background:var(--bg);color:var(--fg);overflow:hidden}button,input,select{font:inherit;color:inherit;background:var(--raised);border:1px solid var(--line)}button{cursor:pointer;padding:.25rem .55rem}button:hover{border-color:var(--sel)}button.go{background:#243652;border-color:var(--go)}kbd{font:11px var(--mono);border:1px solid var(--line);padding:0 .28rem;color:var(--dim)}.muted,.hint{color:var(--dim);font-size:12px}.empty{color:var(--dim);padding:1rem}.hmi{height:100%;display:grid;grid-template-rows:auto auto auto 1fr auto auto}.sim-banner{background:#3a2f12;color:#e6d19a;text-align:center;font-size:12px;letter-spacing:.04em;padding:.2rem .5rem}.titlebar{display:flex;align-items:center;gap:1rem;padding:.28rem .6rem;background:var(--panel);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:.4rem}.sep{color:var(--mute)}.proto-chip{background:#2c3340;border:1px solid #5a6f90;color:#c5d4ea;font-size:11px;padding:.08rem .45rem;letter-spacing:.03em}.nav{display:flex;gap:.25rem;flex:1}.nav-btn.on{border-color:var(--sel);background:#243044}.clock{display:flex;gap:.5rem;font-family:var(--mono);font-size:12px}.alarm-dock{background:var(--panel);border-bottom:1px solid var(--line);max-height:168px;display:flex;flex-direction:column}.alarm-counts{display:flex;align-items:center;gap:.4rem;padding:.2rem .5rem}.chip{font-size:12px;padding:.05rem .4rem;border:1px solid var(--line)}.chip.p1{color:#f3c2c2;border-color:var(--p1)}.chip.p2{color:#f5d0b0;border-color:var(--p2)}.chip.p3{color:#e8d89a;border-color:var(--p3)}.chip.unack{color:var(--fg)}.alarm-table{overflow:auto}.alarm-row{display:grid;grid-template-columns:36px 120px 1fr 90px 56px 56px;gap:.4rem;padding:.12rem .5rem;cursor:pointer;border-left:3px solid transparent}.alarm-row.P1{border-left-color:var(--p1)}.alarm-row.P2{border-left-color:var(--p2)}.alarm-row.P3{border-left-color:var(--p3)}.alarm-row.selected,.alarm-row.cursor{background:#2a3340}.alarm-row.acked{opacity:.65}.alarm-row .pri,.alarm-row .code,.alarm-row .age,.alarm-row .ack{font-family:var(--mono);font-size:12px}.main{overflow:auto;min-height:0;padding:.5rem}.map-wrap{height:100%;display:flex;flex-direction:column}.map-canvas{position:relative;flex:1;min-height:320px;background:#121416;border:1px solid var(--line);overflow:hidden}.fleet-map .sea{position:absolute;right:0;bottom:0;width:42%;height:48%;background:#151a20;border-top-left-radius:40% 30%}.farm-cluster,.glyph{position:absolute;min-width:24px;min-height:24px;transform:translate(-50%,-50%);background:transparent;padding:.15rem .3rem}.farm-cluster{display:flex;flex-direction:column;align-items:flex-start;max-width:140px;border-color:#4a5058}.farm-name{white-space:normal;overflow-wrap:anywhere;text-align:left;line-height:1.2}.farm-meta{color:var(--dim);font-size:11px}.farm-cluster.selected,.glyph.selected{outline:1px solid var(--sel)}.glyph{display:flex;flex-direction:column;align-items:center;border-color:transparent}.glyph svg{display:block}.glyph .tower,.glyph .rotor line{stroke:var(--normal);stroke-width:1.4;fill:none}.glyph .rotor circle{fill:var(--normal);stroke:none}.glyph .mark{font-size:7px;fill:var(--dim)}.glyph.st-faulted .tower,.glyph.st-faulted .rotor line,.glyph.st-faulted .rotor circle{stroke:var(--p1);fill:var(--p1)}.glyph.st-faulted .mark{fill:var(--p1)}.glyph.st-curtailed .mark.pip{fill:var(--p2)}.glyph.hollow{background:transparent}.glyph.hollow svg{opacity:.85}.glyph.q-comm .tower,.glyph.q-comm .rotor line,.glyph.q-invalid .tower,.glyph.q-invalid .rotor line{stroke-dasharray:2 1.4;fill:none}.glyph.q-comm .rotor circle,.glyph.q-invalid .rotor circle{fill:none;stroke:var(--normal);stroke-dasharray:1.5 1}.gid{font-size:10px;color:var(--dim)}.rotor.spin{transform-origin:12px 12px;animation-name:rotor-spin;animation-timing-function:linear;animation-iteration-count:infinite}@keyframes rotor-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.rotor.spin{animation:none!important}}.farm-split{display:grid;grid-template-columns:1fr 280px;gap:.5rem;height:100%}.pane-h{display:flex;flex-wrap:wrap;gap:.4rem .8rem;align-items:baseline}.pane-h h2,.pane-h h3{margin:0;font-size:15px;font-weight:600}.ppc-panel{background:var(--panel);border:1px solid var(--line);padding:.5rem}.source-stack{list-style:none;margin:.4rem 0;padding:0}.source-stack li{display:grid;grid-template-columns:88px 1fr 40px;gap:.35rem;align-items:center;padding:.15rem 0}.source-stack .bar{height:8px;background:#2c3036}.source-stack .bar i{display:block;height:100%;background:#5a6370}.source-stack .dominant{color:var(--fg)}.source-stack .dominant .bar i{background:#c9a227}.ppc-set{margin:.2rem 0}.cmd-row{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.4rem}.face{display:flex;flex-direction:column;gap:.5rem}.face-h{display:flex;flex-direction:column;gap:.4rem}.face-id{display:flex;gap:.6rem;align-items:center}.face-id h2,.face-id p{margin:0}.first-alm{padding:.35rem .5rem;background:var(--raised);border-left:3px solid var(--line);display:flex;justify-content:space-between;gap:.8rem}.first-alm.P1{border-left-color:var(--p1)}.first-alm.P2{border-left-color:var(--p2)}.first-alm.P3{border-left-color:var(--p3)}.tabs{display:flex;align-items:center;gap:.3rem}.tabs .on{border-color:var(--sel)}.kv{display:grid;grid-template-columns:140px 1fr;gap:.2rem .6rem;margin:0}.kv dt{color:var(--dim)}.kv dd{margin:0}.grid{width:100%;border-collapse:collapse;font-size:13px}.grid th,.grid td{border-bottom:1px solid var(--line);padding:.22rem .4rem;text-align:left}.grid tr.selected,.grid tbody tr:hover{background:#262c34}.grid tbody tr{cursor:pointer}.tag-val.q-invalid,.tag-val.q-comm{outline:1px dashed var(--dim);color:var(--dim);background:transparent}.q{font-family:var(--mono);font-size:11px;padding:0 .25rem;border:1px solid var(--line)}.q-good{color:var(--dim)}.q-invalid,.q-comm{color:var(--dim);border-style:dashed;background:transparent}.sbo-dock{border-top:1px solid var(--line);background:var(--panel);padding:.4rem .6rem;min-height:72px}.sbo-dock.armed{background:#2a2618;border-top-color:var(--p3)}.sbo-h{font-size:11px;letter-spacing:.08em;color:var(--dim)}.sbo-preview{display:flex;flex-wrap:wrap;gap:.6rem 1.2rem;align-items:end}.sbo-preview .k{display:block;color:var(--dim);font-size:11px}.sbo-msg{margin:.2rem 0 0;color:var(--dim)}.status{display:flex;justify-content:space-between;padding:.15rem .6rem;background:#121416;border-top:1px solid var(--line);font-size:12px;color:var(--dim)}.reports{display:flex;flex-direction:column;gap:.6rem}.generate{display:flex;flex-wrap:wrap;gap:.6rem;align-items:end}.generate label{display:flex;flex-direction:column;gap:.2rem;font-size:12px;color:var(--dim)}.preview{background:#121416;border:1px solid var(--line);padding:.5rem;white-space:pre-wrap;font:12px var(--mono);margin:0}.loss-row{display:grid;grid-template-columns:minmax(140px,220px) 1fr 90px;gap:.4rem;align-items:center;margin:.15rem 0}.loss-bar{height:10px;background:#2a2e33}.loss-bar i{display:block;height:100%;background:#5c6570}.loss-bar i.iec-forced_outage{background:var(--p1)}.loss-bar i.iec-partial_performance,.loss-bar i.iec-requested_shutdown{background:var(--p2)}.loss-bar i.iec-information_unavailable{background:transparent;border:1px dashed var(--dim);box-sizing:border-box}.loss-lab,.loss-n{font-size:12px;color:var(--dim)}.filter-pop{position:absolute;top:92px;right:12px;background:var(--raised);border:1px solid var(--sel);padding:.4rem}.filter-pop input{min-width:220px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:grid;place-items:center;z-index:20}.modal-card{background:var(--panel);border:1px solid var(--line);padding:1rem;max-width:440px}.help ul{padding-left:1.1rem}.help li{margin:.2rem 0}.map-legend{margin:.3rem 0 0;color:var(--dim);font-size:12px}
