:root{--bg: #0f1419;--panel: #1a212b;--panel-2: #222b37;--border: #2d3845;--text: #e6edf3;--muted: #8b98a8;--accent: #4c9aff;--run: #2e7d32;--pause: #ef6c00;--stop: #c62828;--reset: #5b6b7e;--cyan: #39d0d8;--violet: #a78bfa;--target: #55d68b;--observed: #3f9970}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:13px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}html{scrollbar-width:thin;scrollbar-color:var(--border) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:5px}::-webkit-scrollbar-thumb:hover{background:#3a4757}::-webkit-scrollbar-corner{background:transparent}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.muted{color:var(--muted)}.small{font-size:12px}.app{max-width:1700px;margin:0 auto;padding:0 16px 48px}.topbar{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--bg);z-index:10}.topbar h1{font-size:17px;margin:0}.topbar-right{display:flex;align-items:center;gap:12px}.sim-tabs{display:flex;gap:4px;padding:12px 0 0;border-bottom:1px solid var(--border);overflow-x:auto}.sim-tab{color:var(--muted);background:transparent;border:0;border-bottom:2px solid transparent;padding:10px 18px;cursor:pointer;font:inherit;font-weight:650;white-space:nowrap}.sim-tab:hover{color:var(--text)}.sim-tab.active{color:var(--cyan);border-bottom-color:var(--cyan);background:linear-gradient(180deg,transparent,rgba(57,208,216,.08))}.device-workspace{margin-top:16px}.adapter-placeholder{min-height:300px;display:grid;place-content:center;text-align:center;max-width:780px;margin:40px auto}.adapter-placeholder h2{margin:14px 0 4px}.workspace-heading{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin:4px 0 14px}.workspace-heading h2{margin:2px 0;font-size:24px}.workspace-heading p{margin:0}.workspace-eyebrow{color:var(--cyan);text-transform:uppercase;letter-spacing:.12em;font-size:10px;font-weight:800}.mode-switch{display:inline-flex;padding:3px;border:1px solid var(--border);border-radius:9px;background:var(--panel)}.mode-switch button{border:0;background:transparent;color:var(--muted);padding:7px 14px;border-radius:6px;cursor:pointer}.mode-switch button.active{background:var(--panel-2);color:var(--text)}.mode-banner{display:flex;align-items:center;gap:10px;padding:9px 12px;margin-bottom:12px;border:1px solid var(--border);border-radius:8px;background:#4c9aff0f}.mode-banner.networked{background:#a78bfa12}.mode-banner label{display:flex;align-items:center;gap:8px}.mode-chip,.provenance-chip{display:inline-block;border-radius:999px;padding:3px 8px;font-size:9px;font-weight:800;letter-spacing:.09em;text-transform:uppercase}.mode-standalone{color:#7dd3fc;background:#0ea5e92b}.mode-networked{color:#c4b5fd;background:#8b5cf633}.mode-schema{color:#bac4d0;background:#8b98a82e}.mode-unavailable{color:#ffb74d;background:#ef6c0033}.provenance-chip.target{color:#83efad;background:#55d68b29}.execution-control{margin-top:18px;padding:14px;border:1px solid var(--border);border-left:3px solid var(--violet);border-radius:8px;background:#a78bfa0d}.execution-control>div:first-child{display:flex;gap:9px;align-items:center}.execution-control p{margin:6px 0}.inline-error{color:#ef9a9a}.session-strip{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:18px;padding:11px 14px;margin-bottom:14px}.session-strip>div{display:flex;align-items:center;gap:9px}.session-clock{flex-direction:column;gap:0!important;align-items:flex-end!important;font-size:10px;color:var(--muted)}.session-clock strong{color:var(--text);font-size:12px}.session-actions{justify-content:flex-end;flex-wrap:wrap}.status-dot{width:9px;height:9px;border-radius:50%;background:#64748b;box-shadow:0 0 8px currentColor}.status-dot.ready,.status-dot.running,.status-dot.paused{background:var(--target);color:var(--target)}.status-dot.faulted{background:#ef5350;color:#ef5350}.status-dot.provisioning{background:#f5b942;color:#f5b942;animation:provisioning-pulse 1.2s ease-in-out infinite}@keyframes provisioning-pulse{0%,to{opacity:1}50%{opacity:.35}}.notice.provisioning{border-color:#f5b942}.notice.launcher{opacity:.85}.stream-live{color:var(--target)}.stream-offline{color:#ef9a9a}.gateway-grid{display:grid;grid-template-columns:minmax(520px,1.55fr) minmax(330px,.85fr);gap:14px;align-items:start}.gateway-grid>*{min-width:0}.schematic-panel,.timeline-panel{grid-column:1}.sensor-panel,.telemetry-panel{grid-column:2}.sensor-panel{grid-row:1}.telemetry-panel{grid-row:2}.timeline-panel{grid-row:2 / span 2}.panel-title-row{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:10px}.panel-title-row h3{margin:0;font-size:14px}.schematic-wrap,.dtmonitor-schematic-wrap,.splitmeter-schematic-wrap,.busbar-schematic-wrap{overflow:auto;max-width:100%;border:1px solid #263443;border-radius:8px;background:radial-gradient(circle at 45% 0,#172a38,#0c1218 68%)}.schematic-wrap{background:radial-gradient(circle at 50% 0,#182736,#0c1218 65%)}.device-schematic{display:block;width:100%;height:auto;min-width:calc(var(--schematic-width, 0px) * .78)}.schematic-chip{fill:#18232d;stroke:#3b566d;stroke-width:1.5}.schematic-peripheral{fill:#151d26;stroke:#2f485b}.schematic-boundary{fill:#39d0d80e;stroke:#2e6570;stroke-dasharray:5 4}.schematic-title,.schematic-label,.schematic-part,.schematic-state{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.schematic-title{fill:#7590a5;font-size:10px;letter-spacing:.12em}.schematic-label{fill:#e6edf3;font-size:12px;font-weight:700}.schematic-part{fill:#8fa2b2;font-size:10px}.schematic-state{fill:#55d68b;font-size:9px;text-transform:uppercase}.schematic-led{fill:#64748b}.schematic-led.ready,.schematic-led.running,.schematic-led.paused{fill:#55d68b;filter:drop-shadow(0 0 4px #55d68b)}.schematic-led.faulted{fill:#ef5350}.schematic-bus{fill:none;stroke:#3d6b83;stroke-width:1.5}.schematic-arrow{fill:#3d6b83}.schematic-wire-tag rect{fill:#101a23;stroke:#2b4354;stroke-width:1}.schematic-wire-tag text{fill:#78a1b9;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.schematic-junction{fill:#3d6b83}.renode-field-grid{display:grid;grid-template-columns:repeat(3,minmax(100px,1fr));gap:8px;margin-bottom:15px}.input-with-unit{display:flex;align-items:center}.input-with-unit input{width:100%;border-radius:6px 0 0 6px}.input-with-unit em{padding:6px 7px;background:var(--panel-2);border:1px solid var(--border);border-left:0;border-radius:0 6px 6px 0;color:var(--muted);font-style:normal}.sensor-panel h4{color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.08em;margin:16px 0 8px}.fault-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}.fault-grid label{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted)}.relay-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;margin:10px 0}.relay-grid label{display:flex;align-items:center;gap:5px;font-size:10px;color:var(--muted)}.metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px}.renode-metric{min-width:0;padding:9px;border:1px solid var(--border);border-radius:7px;background:#ffffff04;display:flex;flex-direction:column}.renode-metric span{color:var(--muted);font-size:10px}.renode-metric strong{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:15px;margin:3px 0}.renode-metric small{color:var(--target);font-size:9px}.provenance-note{color:var(--muted);font-size:10px;border-left:2px solid var(--target);padding-left:9px}.json-view{max-height:300px;overflow:auto;color:#a8c5dc;font-size:10px;white-space:pre-wrap}.event-ticker{max-height:415px;overflow:auto;border:1px solid var(--border);border-radius:7px}.ticker-empty{margin:0;padding:16px}.ticker-row{display:grid;grid-template-columns:130px 88px 1fr auto;gap:9px;align-items:center;padding:5px 8px;border-bottom:1px solid rgba(45,56,69,.72);font-size:10px}.ticker-row:nth-child(2n){background:#ffffff05}.ticker-time{color:#86a5ba}.ticker-type{color:var(--cyan);text-transform:uppercase;letter-spacing:.05em}.type-fault .ticker-type{color:#ef9a9a}.type-telemetry .ticker-type{color:var(--target)}.splitmeter-grid{display:grid;grid-template-columns:minmax(520px,1.45fr) minmax(350px,.9fr);gap:14px;align-items:start}.splitmeter-grid>*{min-width:0}.splitmeter-schematic-panel,.splitmeter-telemetry-panel,.splitmeter-timeline-panel{grid-column:1}.splitmeter-input-panel,.splitmeter-relay-panel,.splitmeter-target-panel{grid-column:2}.splitmeter-input-panel{grid-row:1}.splitmeter-relay-panel,.splitmeter-telemetry-panel{grid-row:2}.splitmeter-target-panel{grid-row:3}.splitmeter-timeline-panel{grid-row:3 / span 2}.schematic-node rect{fill:#151d26;stroke:#344d60;stroke-width:1.5}.schematic-node text{fill:#e6edf3;font:700 11px ui-monospace,SFMono-Regular,Menlo,monospace}.schematic-node .schematic-sub{fill:#8398a9;font-size:8px;font-weight:500}.schematic-node.active rect{stroke:var(--observed);filter:drop-shadow(0 0 3px rgba(63,153,112,.23))}.schematic-node.fault rect{stroke:#d15353;filter:drop-shadow(0 0 3px rgba(239,83,80,.28))}.schematic-wire{fill:none;stroke:#3d6b83;stroke-width:2}.schematic-wire.radio{stroke:#9475d4}.schematic-wire.observed{stroke:var(--observed);stroke-width:2.5;filter:drop-shadow(0 0 3px rgba(63,153,112,.3))}.schematic-arrow.observed{fill:var(--observed)}.schematic-legend{display:flex;flex-wrap:wrap;gap:14px;padding:7px 9px;color:var(--muted);font-size:9px}.schematic-legend span{display:inline-flex;align-items:center;gap:5px}.legend-dot{width:7px;height:7px;border-radius:50%;background:#64748b}.legend-dot.active{background:var(--observed)}.legend-dot.fault{background:#ef5350}.relay-grid.compact{grid-template-columns:repeat(3,minmax(70px,1fr))}.splitmeter-relay-inputs{display:grid;gap:5px;max-height:320px;overflow:auto;margin-bottom:10px}.relay-input-row{display:grid;grid-template-columns:minmax(150px,1fr) auto;gap:8px;align-items:end}.relay-input-row label:last-child{display:flex;align-items:center;gap:5px;padding-bottom:7px;color:var(--muted);font-size:9px}.relay-state-table{display:grid;gap:5px}.relay-state-row{display:grid;grid-template-columns:42px 1fr 1fr 55px auto;align-items:center;gap:7px;padding:6px 7px;border:1px solid var(--border);border-radius:6px;color:var(--muted);font-size:9px}.relay-state-row strong{color:var(--text)}.relay-state-row.fault{border-color:#ef5350b3;background:#ef53500f}.relay-state-row .btn{padding:4px 7px;font-size:9px}.fault-actions{display:flex;flex-wrap:wrap;gap:7px;margin-top:10px}.mode-switch button:disabled{cursor:not-allowed;opacity:.55}.unsupported-mode{border-left:3px solid #ef9a9a}.busbar-grid{display:grid;grid-template-columns:minmax(540px,1.45fr) minmax(360px,.9fr);gap:14px;align-items:start}.busbar-grid>*{min-width:0}.busbar-schematic-panel,.busbar-telemetry-panel,.busbar-timeline-panel{grid-column:1}.busbar-input-panel,.busbar-target-panel,.busbar-peripheral-panel,.busbar-fault-panel{grid-column:2}.busbar-input-panel{grid-row:1}.busbar-target-panel{grid-row:2}.busbar-schematic-panel{grid-row:1}.busbar-telemetry-panel{grid-row:2}.busbar-peripheral-panel{grid-row:3}.busbar-timeline-panel{grid-row:3 / span 2}.busbar-fault-panel{grid-row:4}.busbar-input-panel h4{color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.08em;margin:15px 0 7px}.busbar-input-panel .btn-save{margin-top:12px}.busbar-ct-grid{grid-template-columns:repeat(3,minmax(100px,1fr))}.dtmonitor-workspace .unsupported-mode{display:flex;align-items:center;gap:10px;border-left-color:var(--pause)}.dtmonitor-grid{display:grid;grid-template-columns:minmax(590px,1.5fr) minmax(370px,.9fr);gap:14px;align-items:start}.dtmonitor-grid>*{min-width:0}.dtmonitor-schematic-panel,.dtmonitor-telemetry-panel,.dtmonitor-buses-panel,.dtmonitor-timeline-panel{grid-column:1}.dtmonitor-input-panel,.dtmonitor-processors-panel,.dtmonitor-fault-panel{grid-column:2}.dtmonitor-input-panel{grid-row:1 / span 2}.dtmonitor-processors-panel{grid-row:3}.dtmonitor-telemetry-panel{grid-row:2}.dtmonitor-buses-panel{grid-row:3}.dtmonitor-fault-panel{grid-row:4}.dtmonitor-timeline-panel{grid-row:4 / span 2}.dtmonitor-input-group{margin-top:12px;padding-top:10px;border-top:1px solid var(--border)}.dtmonitor-input-group summary{color:var(--cyan);cursor:pointer;font-size:11px;font-weight:650;margin-bottom:9px}.observation-stamp{color:#86a5ba!important;margin-top:3px}.fault-apply{margin-top:12px}.type-held_input .ticker-type,.type-dt_monitor_telemetry .ticker-type{color:var(--target)}.dtmonitor-timeline-panel .ticker-row{grid-template-columns:130px 155px 1fr auto}@media (max-width: 1080px){.gateway-grid{grid-template-columns:1fr}.schematic-panel,.sensor-panel,.telemetry-panel,.timeline-panel{grid-column:1;grid-row:auto}.splitmeter-grid{grid-template-columns:1fr}.splitmeter-grid>*{grid-column:1;grid-row:auto}.busbar-grid{grid-template-columns:1fr}.busbar-grid>*{grid-column:1;grid-row:auto}.dtmonitor-grid{grid-template-columns:1fr}.dtmonitor-grid>*{grid-column:1;grid-row:auto}.dtmonitor-timeline-panel .ticker-row{grid-template-columns:90px 120px 1fr}.dtmonitor-timeline-panel .ticker-row>:last-child{display:none}.session-strip{grid-template-columns:1fr}.session-clock{align-items:flex-start!important}}@media (max-width: 680px){.app{padding:0 10px 32px}.topbar,.workspace-heading{align-items:flex-start;flex-direction:column}.topbar-right{flex-wrap:wrap}.renode-field-grid{grid-template-columns:1fr 1fr}.ticker-row{grid-template-columns:90px 70px 1fr}.ticker-row>:last-child{display:none}.relay-state-row{grid-template-columns:40px 1fr auto}.relay-state-row>:nth-child(3),.relay-state-row>:nth-child(4){display:none}}.refresh-toggle{display:flex;align-items:center;gap:6px;color:var(--muted)}.state-badge{font-weight:600;padding:4px 10px;border-radius:999px;font-size:12px;letter-spacing:.04em}.state-running{background:#2e7d3240;color:#7bd88f}.state-paused{background:#ef6c0040;color:#ffb74d}.state-stopped{background:#c6282840;color:#ef9a9a}.state-fastforward{background:#1976d24d;color:#90caf9;animation:ff-pulse 1.1s ease-in-out infinite}@keyframes ff-pulse{50%{opacity:.55}}.state-unknown{background:var(--panel-2);color:var(--muted)}.notice{margin:12px 0;padding:10px 14px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px}.notice.error{border-color:var(--stop);color:#ef9a9a}.console-grid{display:grid;grid-template-columns:320px 380px 1fr;gap:16px;margin-top:16px;align-items:start}@media (max-width: 1200px){.console-grid{grid-template-columns:1fr}}.panel{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:16px}.panel h2{margin:0 0 12px;font-size:14px;display:flex;align-items:center;justify-content:space-between}.lifecycle{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}.btn{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:7px;padding:7px 12px;cursor:pointer;font-size:13px}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-run{border-color:var(--run)}.btn-pause{border-color:var(--pause)}.btn-stop{border-color:var(--stop)}.btn-reset{border-color:var(--reset)}.btn-save{background:var(--accent);border-color:var(--accent);color:#04101f;font-weight:600}.btn-link{background:none;border:none;color:var(--accent);padding:0 0 0 8px;cursor:pointer;font-size:12px}.btn-link.danger{color:#ef9a9a}.clear-sel{font-weight:400}.config-disclosure summary{cursor:pointer;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.05em;margin-bottom:10px}.field-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin:10px 0}.field{display:flex;flex-direction:column;gap:4px;font-size:12px}.field.checkbox{flex-direction:row;align-items:center;gap:8px}.field span em.inert{color:var(--pause);font-style:italic;font-size:10px}.field span em.note{color:var(--muted);font-style:italic;font-size:10px}input,select{background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:6px 8px;font:inherit}.actions{display:flex;align-items:center;gap:12px;margin-top:12px}.tree-col{max-height:80vh;overflow:auto}.tree{font-size:13px;min-width:100%;width:max-content}.tree-row{display:flex;align-items:center;gap:6px;padding:3px 4px;border-radius:5px;cursor:pointer;white-space:nowrap}.tree-row:hover{background:var(--panel-2)}.tree-row.selected{background:#4c9aff2e;outline:1px solid var(--accent)}.caret{width:12px;color:var(--muted);display:inline-block;text-align:center;flex:0 0 12px}.tree-label{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.tree-type{color:var(--muted);font-size:11px}.tree-note{color:var(--muted);font-size:11px;margin-left:auto;padding-left:10px}.detail-col{min-height:200px}.detail-header{display:flex;align-items:baseline;gap:10px;margin-bottom:6px}.detail-header h3{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.detail-section{margin-top:14px}.detail-section h4{margin:0 0 8px;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);border-bottom:1px solid var(--border);padding-bottom:4px}.kv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:6px 18px}.kv-grid.muted-grid{margin-bottom:8px}.kv{display:flex;justify-content:space-between;gap:12px;border-bottom:1px dotted var(--border);padding:2px 0}.kv-label{color:var(--muted)}.kv-value{text-align:right}.line-list{list-style:none;margin:0;padding:0}.line-list li{padding:4px 0;border-bottom:1px solid var(--border);font-size:12px}.scenario-block{margin-top:20px;border-top:2px solid var(--border);padding-top:12px}.scenario-block h3{margin:0 0 8px;font-size:14px}.panel-section{margin-top:14px}.panel-section h4{font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:0 0 8px}.tag{font-size:10px;padding:2px 6px;border-radius:4px;margin-right:6px;text-transform:uppercase}.tag-active{background:#43a04733;color:#81c784}.tag-pending{background:#4c9aff33;color:#9cc4ff}.tag-expired{background:#9e9e9e33;color:#bdbdbd}.tag-runtime{background:#ef6c0033;color:#ffb74d}.tag-vacant{background:#9e9e9e33;color:#bdbdbd}.tag-generated{background:#4c9aff29;color:#9cc4ff}.tag-adjust{background:#ab47bc38;color:#ce93d8}.tag-suppress{background:#ef535033;color:#ef9a9a}.tag-add{background:#43a04738;color:#a5d6a7}.override-editor{margin:6px 0 4px 18px;padding:8px;border-left:2px solid rgba(171,71,188,.4)}.auth-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.auth-card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:28px;width:360px;max-width:100%;display:flex;flex-direction:column;gap:12px}.auth-card h1{margin:0;font-size:18px}.auth-error{color:#ef9a9a;font-size:13px}
