:root{--bg-pitch:#06080b;--bg-surface:#0b0e13;--bg-panel:#11151c;--bg-card:#151a23;--bg-card-hover:#1b222e;--border-dim:#1e2530;--border-subtle:#283242;--border-neon:#00ff6659;--border-neon-bright:#0f6;--color-neon:#0f6;--color-neon-dim:#00cc52;--color-neon-glow:#0f63;--color-neon-bright-glow:#00ff6673;--color-cyan:#00e5ff;--color-cyan-glow:#00e5ff33;--color-amber:#ffb700;--color-amber-glow:#ffb70033;--color-red:#f34;--color-red-glow:#ff334440;--text-primary:#f1f5f9;--text-secondary:#94a3b8;--text-muted:#64748b;--text-dark:#334155;--font-sans:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono:"JetBrains Mono", "Roboto Mono", "SF Mono", Consolas, monospace;--radius-sm:4px;--radius-md:6px;--radius-lg:8px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{background-color:var(--bg-pitch);color:var(--text-primary);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;font-size:13px;line-height:1.4;overflow-x:hidden}.font-mono{font-family:var(--font-mono)}.text-neon{color:var(--color-neon)}.text-cyan{color:var(--color-cyan)}.text-amber{color:var(--color-amber)}.text-red{color:var(--color-red)}.text-white{color:#fff}.text-gray{color:var(--text-secondary)}.font-bold{font-weight:700}.dashboard-root{background:radial-gradient(circle at 50% 0%, #0d1219 0%, var(--bg-pitch) 75%);flex-direction:column;height:100vh;max-height:100vh;display:flex;overflow:hidden}.dashboard-header{background-color:var(--bg-surface);border-bottom:1px solid var(--border-dim);z-index:20;flex-shrink:0;justify-content:space-between;align-items:center;height:48px;padding:0 14px;display:flex;box-shadow:0 2px 10px #0009}.header-brand{align-items:center;gap:12px;display:flex}.brand-icon-wrapper{border:1px solid var(--border-neon);border-radius:var(--radius-sm);width:34px;height:34px;color:var(--color-neon);background:#00ff6614;justify-content:center;align-items:center;display:flex;position:relative}.pulse-ring{border-radius:var(--radius-sm);border:1px solid var(--color-neon);pointer-events:none;width:100%;height:100%;position:absolute}@keyframes pulse-ring-anim{0%{opacity:.8;transform:scale(1)}to{opacity:0;transform:scale(1.4)}}.brand-text{flex-direction:column;display:flex}.brand-title-row{align-items:center;gap:8px;display:flex}.brand-title{letter-spacing:.8px;color:#fff;font-size:15px;font-weight:800}.badge{border-radius:var(--radius-sm);font-size:10px;font-weight:700;font-family:var(--font-mono);letter-spacing:.5px;padding:2px 6px}.badge-tech{color:var(--color-neon);border:1px solid var(--border-neon);background:#00ff661f}.badge-mock{color:var(--color-amber);background:#ffb7001f;border:1px solid #ffb7004d}.badge-waiting{color:var(--color-amber);background:#ffb70026;border:1px solid #ffb70066}.badge-stale{color:var(--color-amber);background:#ffb70033;border:1px solid #ffb70080}.badge-offline{color:var(--color-red);background:#ff3b3026;border:1px solid #ff3b3066}.brand-subtitle{color:var(--text-muted);font-size:11px;font-family:var(--font-mono)}.header-status-group{align-items:center;gap:10px;display:flex}.status-chip{background:var(--bg-panel);border:1px solid var(--border-dim);border-radius:var(--radius-sm);align-items:center;gap:6px;padding:5px 10px;font-size:11px;display:flex}.status-chip .chip-label{color:var(--text-muted);font-weight:600}.status-chip .chip-value{color:var(--text-primary);font-weight:700}.chip-quorum-active{border-color:var(--border-neon);background:#00ff6614}.chip-quorum-active .chip-value{color:var(--color-neon)}.chip-quorum-pending{background:#ffb70014;border-color:#ffb7004d}.chip-quorum-pending .chip-value{color:var(--color-amber)}.chip-backend-online{border-color:var(--border-neon);background:#00ff6614}.chip-backend-online .chip-value{color:var(--color-neon)}.chip-backend-connecting{background:#ffb70014;border-color:#ffb7004d}.chip-backend-connecting .chip-value{color:var(--color-amber)}.chip-backend-stale{background:#ffb7001f;border-color:#ffb70073}.chip-backend-stale .chip-value{color:var(--color-amber)}.chip-backend-disconnected{background:#ff3b301f;border-color:#ff3b3066}.chip-backend-disconnected .chip-value{color:var(--color-red)}.chip-stream-waiting{background:#ffb70014;border-color:#ffb70059}.chip-stream-waiting .chip-value{color:var(--color-amber)}.chip-stream-live{border-color:var(--border-neon);background:#00ff6614}.chip-stream-live .chip-value{color:var(--color-neon)}.chip-stream-stale{background:#ffb7001f;border-color:#ffb70073}.chip-stream-stale .chip-value{color:var(--color-amber)}.chip-stream-disconnected{background:#ff3b301f;border-color:#ff3b3066}.chip-stream-disconnected .chip-value{color:var(--color-red)}.chip-quorum-unavailable{border-color:var(--border-dim);background:var(--bg-card)}.chip-quorum-unavailable .chip-value{color:var(--text-muted)}.dashboard-main-grid{box-sizing:border-box;flex:1;grid-template-columns:56fr 44fr;gap:10px;width:100%;max-width:1920px;height:calc(100vh - 74px);min-height:0;margin:0 auto;padding:8px 12px;display:grid;overflow:hidden}.dashboard-col-left{flex-direction:column;gap:8px;height:100%;min-height:0;display:flex}.dashboard-col-right{scrollbar-width:thin;scrollbar-color:#00ff664d transparent;flex-direction:column;gap:8px;height:100%;min-height:0;padding-right:2px;display:flex;overflow-y:auto}.camera-feed-container{background:var(--bg-surface);border:1px solid var(--border-dim);border-radius:var(--radius-md);flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden;box-shadow:0 4px 18px #000000b3}.camera-header-bar{background:var(--bg-panel);border-bottom:1px solid var(--border-dim);flex-shrink:0;justify-content:space-between;align-items:center;height:36px;padding:0 10px;display:flex}.camera-header-left{align-items:center;gap:10px;display:flex}.live-pill{font-size:11px;font-weight:700;font-family:var(--font-mono);color:var(--color-neon);border:1px solid var(--border-neon);border-radius:var(--radius-sm);background:#00ff661a;align-items:center;gap:6px;padding:3px 8px;display:flex}.live-dot{background-color:var(--color-neon);border-radius:50%;width:6px;height:6px}.live-pill-connected{color:var(--color-neon);border-color:var(--border-neon);background:#00ff661a}.live-pill-connecting{color:var(--color-amber);background:#ffb7001a;border-color:#ffb70059}.live-pill-stale{color:var(--color-amber);background:#ffb70026;border-color:#ffb70080}.live-pill-disconnected{color:var(--color-red);background:#ff3b301f;border-color:#ff3b3066}.pill-waiting{color:var(--color-amber);background:#ffb7001f;border-color:#ffb70066}.camera-standby-overlay{z-index:15;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);pointer-events:none;background:#06080bbf;flex-direction:column;justify-content:center;align-items:center;gap:16px;display:flex;position:absolute;inset:0}.standby-reticle{border:1px dashed #ffb70080;border-radius:50%;justify-content:center;align-items:center;width:72px;height:72px;display:flex;position:relative}.standby-reticle-ring{border:1px solid #ffb70040;border-radius:50%;position:absolute;inset:-6px}.standby-text{text-align:center;flex-direction:column;align-items:center;gap:6px;padding:0 20px;display:flex}.standby-title{letter-spacing:1px;color:var(--color-amber);font-size:13px;font-weight:800}.standby-desc{color:var(--text-muted);max-width:420px;font-size:11px;line-height:1.4}.table-empty-waiting{color:var(--color-amber);font-family:var(--font-mono);justify-content:center;align-items:center;gap:8px;padding:24px 0;display:flex}.tag-row-stale{color:var(--color-amber);font-size:9px;font-weight:700}.plc-disclaimer-strip{border-radius:var(--radius-sm);background:#ffb70014;border:1px solid #ffb70040;align-items:center;gap:6px;margin-top:8px;padding:6px 10px;font-size:10px;display:flex}.dot-amber{background-color:var(--color-amber)!important}.dot-red{background-color:var(--color-red)!important}.camera-stream-notice{z-index:20;border-radius:var(--radius-sm);font-size:11px;font-family:var(--font-mono);letter-spacing:.5px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);pointer-events:none;align-items:center;gap:8px;padding:6px 14px;font-weight:700;display:flex;position:absolute;top:10px;left:50%;transform:translate(-50%);box-shadow:0 4px 16px #000c}.notice-stale{border:1px solid var(--color-amber);color:var(--color-amber);background:#ffb70038}.notice-offline{border:1px solid var(--color-red);color:#ff6b6b;background:#ff3b3038}.camera-spec{color:var(--text-muted);font-size:11px;font-family:var(--font-mono)}.camera-header-controls{align-items:center;gap:6px;display:flex}.cam-btn{background:var(--bg-card);border:1px solid var(--border-subtle);color:var(--text-secondary);font-size:11px;font-family:var(--font-mono);border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:4px;padding:4px 8px;font-weight:600;transition:all .15s;display:inline-flex}.cam-btn:hover:not(:disabled){background:var(--bg-card-hover);color:var(--color-neon);border-color:var(--border-neon)}.cam-btn.active{color:var(--color-neon);border-color:var(--border-neon);background:#00ff6626}.cam-btn:disabled{opacity:.4;cursor:not-allowed}.cam-btn-fullscreen{border-color:var(--border-neon);color:var(--color-neon);background:#00ff6614}.cam-btn-fullscreen:hover{background:#0f63}.viewport-wrapper{background-color:#05070a;flex:1;justify-content:center;align-items:center;width:100%;min-height:0;display:flex;position:relative;overflow:hidden}.camera-svg-canvas{aspect-ratio:600/500;width:auto;max-width:100%;height:100%;max-height:100%;margin:auto;display:block}.camera-live-feed-img{object-fit:contain;width:auto;max-width:100%;height:100%;max-height:100%;margin:auto;display:block}.scanline-overlay{pointer-events:none;z-index:5;opacity:.6;background:linear-gradient(#12192400 50%,#00000040 50%) 0 0/100% 4px;position:absolute;inset:0}.camera-hud-top{border-radius:var(--radius-sm);font-family:var(--font-mono);color:#cbd5e1;z-index:10;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#06080cf0;border:1px solid #0f66;flex-direction:column;gap:2px;padding:5px 8px;font-size:10.5px;display:flex;position:absolute;top:8px;left:8px;box-shadow:0 4px 14px #000000e6}.hud-line{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.hud-line-large{font-size:11.5px}.hud-line-subtle{color:#8da1b9;font-size:10px}.hud-divider{color:#3b4759}.hud-badge{background:#00ff6626;border-radius:2px;padding:1px 4px}.camera-legend-box{border:1px solid var(--border-dim);border-radius:var(--radius-sm);font-size:10px;font-family:var(--font-mono);color:var(--text-secondary);z-index:10;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#080b10d9;flex-direction:column;gap:4px;padding:6px 8px;display:flex;position:absolute;bottom:10px;right:10px}.legend-item{align-items:center;gap:6px;display:flex}.legend-swatch{border-radius:2px;width:10px;height:10px}.swatch-green{background:#0f6}.swatch-cyan{background:#00e5ff}.swatch-amber{background:#fa0}.swatch-red{background:#f34}.camera-fullscreen{z-index:9999!important;background:#000!important;border-radius:0!important;width:100vw!important;height:100vh!important;position:fixed!important;inset:0!important}.camera-fullscreen .viewport-wrapper{aspect-ratio:auto;height:calc(100vh - 36px)}.camera-fullscreen-floating-exit{z-index:100;border:1px solid var(--border-neon);color:var(--color-neon);font-family:var(--font-mono);border-radius:var(--radius-sm);cursor:pointer;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#080b10f0;align-items:center;gap:8px;padding:8px 16px;font-size:12px;font-weight:700;transition:all .2s;display:inline-flex;position:absolute;top:10px;right:14px}.camera-fullscreen-floating-exit:hover{background:#0f63;transform:scale(1.02)}.summary-cards-container{grid-template-columns:1fr 1fr;gap:12px;display:grid}.metric-card{background:var(--bg-surface);border:1px solid var(--border-dim);border-radius:var(--radius-md);flex-direction:column;gap:8px;padding:10px 12px;transition:border-color .2s;display:flex;box-shadow:0 4px 14px #00000080}.card-glow-neon{border-color:var(--border-neon)}.card-glow-amber{border-color:#ffb70059}.card-glow-idle{border-color:var(--border-dim)}.card-header{justify-content:space-between;align-items:center;display:flex}.card-title-group{align-items:center;gap:8px;display:flex}.card-title{letter-spacing:.6px;color:var(--text-secondary);font-size:11.5px;font-weight:700}.pill-badge{font-size:10px;font-family:var(--font-mono);border-radius:var(--radius-sm);padding:2px 6px;font-weight:700}.pill-neon{color:var(--color-neon);border:1px solid var(--border-neon);background:#00ff661f}.pill-amber{color:var(--color-amber);background:#ffb7001f;border:1px solid #ffb7004d}.pill-gray{background:var(--bg-card);color:var(--text-muted);border:1px solid var(--border-dim)}.card-main-stat{justify-content:space-between;align-items:center;gap:12px;display:flex}.stat-number-wrapper{align-items:baseline;gap:4px;display:flex}.stat-value-large{font-size:38px;font-weight:800;font-family:var(--font-mono);line-height:1}.stat-denominator{color:var(--text-muted);font-size:18px;font-family:var(--font-mono);font-weight:600}.stat-visual-meter{flex-direction:column;flex:1;gap:4px;display:flex}.meter-label-row{color:var(--text-muted);justify-content:space-between;font-size:10px;font-weight:600;display:flex}.meter-track{background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:4px;width:100%;height:8px;overflow:hidden}.meter-bar{height:100%;transition:width .3s}.meter-bar-neon{background:linear-gradient(90deg,#00b347,#0f6)}.meter-bar-amber{background:linear-gradient(90deg,#cc8f00,#ffb700)}.card-footer-meta{color:var(--text-muted);font-size:11px;font-family:var(--font-mono);border-top:1px solid #ffffff0d;align-items:center;gap:8px;padding-top:6px;display:flex}.trigger-status-badge-container{width:100%}.trigger-state{border-radius:var(--radius-sm);align-items:center;gap:12px;padding:8px 12px;display:flex}.trigger-state-active{border:1px solid var(--border-neon);background:#00ff6614}.trigger-state-pending{background:#ffb70014;border:1px solid #ffb7004d}.trigger-state-text{flex-direction:column;display:flex}.trigger-title{letter-spacing:.6px;font-size:14px;font-weight:800}.trigger-subtitle{color:var(--text-secondary);font-size:11px;font-family:var(--font-mono)}.debounce-progress-strip{color:var(--text-muted);font-size:11px;font-family:var(--font-mono);border-top:1px solid #ffffff0d;align-items:center;gap:8px;padding-top:6px;display:flex}.debounce-dots{gap:5px;display:flex}.debounce-dot{background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:2px;width:12px;height:6px}.debounce-dot.dot-active{background:var(--color-neon);border-color:var(--color-neon)}.panel-container{background:var(--bg-surface);border:1px solid var(--border-dim);border-radius:var(--radius-md);flex-direction:column;gap:8px;padding:10px 12px;display:flex;box-shadow:0 4px 14px #00000080}.panel-header{justify-content:space-between;align-items:center;display:flex}.panel-title-group{align-items:center;gap:8px;display:flex}.panel-title{letter-spacing:.6px;color:var(--text-primary);font-size:12px;font-weight:800}.status-tag{font-size:10px;font-weight:700;font-family:var(--font-mono);border-radius:var(--radius-sm);align-items:center;gap:6px;padding:2px 7px;display:flex}.tag-online{color:var(--color-neon);border:1px solid var(--border-neon);background:#00ff661a}.tag-online .indicator-dot{background:var(--color-neon);border-radius:50%;width:6px;height:6px}.tag-offline{color:var(--color-red);background:#ff33441a;border:1px solid #ff33444d}.plc-main-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}.plc-state-box{border-radius:var(--radius-sm);flex-direction:column;justify-content:space-between;gap:8px;padding:10px 12px;display:flex}.plc-state-high{border:1px solid var(--border-neon);background:#00ff6614;box-shadow:inset 0 0 12px #00ff661a}.plc-state-low{border:1px solid var(--border-subtle);background:#11151ccc}.plc-state-label-row{color:var(--text-muted);justify-content:space-between;font-size:10px;display:flex}.plc-output-value-row{align-items:center;gap:10px;display:flex}.plc-beacon{color:var(--color-neon)}@keyframes beacon-glow{0%{filter:drop-shadow(0 0 4px var(--color-neon));transform:scale(1)}to{filter:drop-shadow(0 0 10px var(--color-neon));transform:scale(1.08)}}.output-level-number{color:#fff;font-size:16px;font-weight:800}.output-level-desc{color:var(--color-neon);font-size:11px;display:block}.plc-meta-list{background:var(--bg-panel);border:1px solid var(--border-dim);border-radius:var(--radius-sm);flex-direction:column;justify-content:center;gap:4px;padding:8px 10px;font-size:11px;display:flex}.meta-row{justify-content:space-between;display:flex}.meta-label{color:var(--text-muted)}.plc-override-bar{background:var(--bg-panel);border:1px dashed var(--border-subtle);border-radius:var(--radius-sm);justify-content:space-between;align-items:center;padding:6px 10px;font-size:11px;display:flex}.override-hint{color:var(--text-muted)}.btn-override{background:var(--bg-card);border:1px solid var(--border-subtle);color:var(--text-secondary);font-size:11px;font-family:var(--font-mono);border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:6px;padding:4px 8px;font-weight:700;transition:all .15s;display:inline-flex}.btn-override:hover{background:var(--bg-card-hover);color:var(--color-neon);border-color:var(--border-neon)}.btn-override-active{border-color:var(--border-neon);color:var(--color-neon);background:#00ff6626}.perf-grid{grid-template-columns:repeat(3,1fr) 2fr;gap:10px;display:grid}.perf-stat-item{background:var(--bg-panel);border:1px solid var(--border-dim);border-radius:var(--radius-sm);flex-direction:column;gap:2px;padding:8px 10px;display:flex}.perf-label-row{color:var(--text-muted);align-items:center;gap:6px;font-size:10px;font-weight:700;display:flex}.perf-value-row{align-items:baseline;gap:4px;display:flex}.perf-value{font-size:20px;font-weight:800}.perf-unit{color:var(--text-muted);font-size:11px;font-family:var(--font-mono)}.perf-meta{color:var(--text-muted);font-size:10px}.perf-stat-wide{gap:4px}.perf-info-block{color:var(--text-secondary);flex-direction:column;gap:2px;font-size:10.5px;display:flex}.settings-disclaimer{border-radius:var(--radius-sm);color:#fef08a;background:#ffb70014;border:1px solid #ffb70040;align-items:center;gap:8px;padding:6px 10px;font-size:11px;display:flex}.settings-grid{grid-template-columns:repeat(3,1fr);gap:12px;display:grid}.setting-control-group{background:var(--bg-panel);border:1px solid var(--border-dim);border-radius:var(--radius-sm);flex-direction:column;gap:6px;padding:8px 10px;display:flex}.setting-label-row{justify-content:space-between;align-items:center;display:flex}.setting-label{color:var(--text-muted);font-size:10.5px;font-weight:700}.setting-value{font-size:12px;font-weight:800}.custom-range-slider{appearance:none;background:var(--bg-card);border-radius:2px;outline:none;width:100%;height:4px}.custom-range-slider::-webkit-slider-thumb{appearance:none;background:var(--color-neon);cursor:pointer;border-radius:50%;width:14px;height:14px;transition:transform .1s}.custom-range-slider::-webkit-slider-thumb:hover{transform:scale(1.2)}.setting-quick-buttons{gap:4px;display:flex}.btn-quick{background:var(--bg-card);border:1px solid var(--border-subtle);color:var(--text-secondary);font-size:9.5px;font-family:var(--font-mono);cursor:pointer;border-radius:2px;flex:1;padding:3px 2px;transition:all .1s}.btn-quick:hover{background:var(--bg-card-hover);color:var(--color-neon)}.btn-quick-active{border-color:var(--border-neon);color:var(--color-neon);background:#00ff6626;font-weight:700}.number-stepper{align-items:center;gap:8px;display:flex}.stepper-btn{background:var(--bg-card);border:1px solid var(--border-subtle);width:28px;height:24px;color:var(--text-primary);border-radius:var(--radius-sm);cursor:pointer;font-size:14px;font-weight:700}.stepper-btn:hover{background:var(--bg-card-hover);border-color:var(--border-neon);color:var(--color-neon)}.stepper-display{color:var(--color-neon);text-align:center;min-width:24px;font-size:16px;font-weight:800}.setting-meta-info{color:var(--text-muted);font-size:9.5px}.btn-reset-settings{background:var(--bg-card);border:1px solid var(--border-subtle);color:var(--text-secondary);font-size:10px;font-family:var(--font-mono);border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:4px;padding:3px 6px;font-weight:600;transition:all .15s;display:inline-flex}.btn-reset-settings:hover{background:var(--bg-card-hover);color:var(--color-neon);border-color:var(--border-neon)}.panel-actions-group{align-items:center;gap:6px;display:flex}.btn-apply-settings{border:1px solid var(--border-neon);color:var(--color-neon);font-size:10px;font-family:var(--font-mono);border-radius:var(--radius-sm);cursor:pointer;background:#00ff661f;align-items:center;gap:4px;padding:3px 8px;font-weight:700;transition:all .15s;display:inline-flex}.btn-apply-settings:hover:not(:disabled){background:#00ff6640}.btn-apply-settings:disabled{opacity:.35;cursor:not-allowed;border-color:var(--border-subtle);color:var(--text-muted)}.custom-numeric-input{border:1px solid var(--border-subtle);border-radius:var(--radius-sm);width:100%;color:var(--color-neon);font-family:var(--font-mono);box-sizing:border-box;background:#0d1217f2;outline:none;padding:5px 36px 5px 8px;font-size:13px;font-weight:700;transition:all .15s}.custom-numeric-input:focus{border-color:var(--color-neon);background:#0d1217}.custom-numeric-input.input-error{border-color:var(--color-red)!important;color:var(--color-red)!important;background:#ff3b3014!important}.custom-numeric-input:disabled{opacity:.5;cursor:not-allowed}.setting-input-wrap{align-items:center;width:100%;display:flex;position:relative}.setting-input-unit{font-size:10px;font-family:var(--font-mono);color:var(--text-muted);pointer-events:none;text-transform:uppercase;position:absolute;right:8px}.setting-error-text{color:var(--color-red);font-size:9.5px;font-family:var(--font-mono);margin-top:1px}.setting-status-pills{align-items:center;gap:6px;display:flex}.settings-readback-tag{font-size:8.5px;font-family:var(--font-mono);color:var(--color-neon);background:#00ff6614;border:1px solid #00ff6640;border-radius:2px;padding:1px 4px}.setting-label-with-badge{align-items:center;gap:6px;display:flex}.badge-restart-req{color:var(--color-amber);font-size:8.5px;font-family:var(--font-mono);text-transform:uppercase;background:#ffb7001f;border:1px solid #ffb70066;border-radius:2px;padding:1px 4px;font-weight:700}.settings-status-banner{border-radius:var(--radius-sm);font-size:11px;font-family:var(--font-mono);align-items:center;gap:8px;margin-bottom:8px;padding:6px 10px;animation:.2s fadeIn;display:flex}.banner-pending{color:var(--color-amber);background:#ffb7001a;border:1px solid #ffb7004d}.banner-success{color:var(--color-neon);background:#00ff661a;border:1px solid #00ff664d}.banner-error{color:#ff6b6b;background:#ff3b301a;border:1px solid #ff3b304d}.spin{animation:1s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.dashboard-footer{background-color:var(--bg-surface);border-top:1px solid var(--border-dim);height:24px;color:var(--text-muted);flex-shrink:0;justify-content:space-between;align-items:center;padding:0 14px;font-size:10px;display:flex}.footer-left{align-items:center;gap:6px;display:flex}.footer-label{color:var(--text-secondary);font-weight:700}.footer-dim{color:#475569}@media (width<=1200px){.dashboard-main-grid{grid-template-columns:1fr}.settings-grid,.perf-grid{grid-template-columns:repeat(2,1fr)}}@media (width<=768px){.header-status-group{display:none}.summary-cards-container,.plc-main-grid,.settings-grid{grid-template-columns:1fr}}.brand-logo-plate{border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:#fff;flex-shrink:0;align-items:center;height:34px;padding:3px 6px;display:flex}.brand-logo{width:auto;height:26px;display:block}.header-logout{background:var(--bg-panel);border:1px solid var(--border-dim);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:6px;padding:5px 10px;font-size:11px;font-weight:700;transition:border-color .15s,color .15s,background .15s;display:flex}.header-logout:hover,.header-logout:focus-visible{border-color:var(--color-red);color:var(--color-red);background:#ff334414;outline:none}.login-root{--login-accent:var(--color-neon);--login-accent-hover:#00d957;--login-ink:var(--text-primary);--login-muted:var(--text-muted);--login-line:var(--border-subtle);background:var(--bg-pitch);min-height:100vh;color:var(--login-ink);font-family:var(--font-sans);grid-template-columns:minmax(0,1.15fr) minmax(400px,1fr);display:grid}.login-visual{background:#101418;position:relative;overflow:hidden}.login-visual-img{object-fit:cover;object-position:72% 50%;width:100%;height:100%;position:absolute;inset:0}.login-visual-shade{background:linear-gradient(#06080b00 0% 55%,#06080beb 90%);position:absolute;inset:0}.login-visual-content{color:#fff;position:absolute;bottom:56px;left:56px;right:56px}.login-visual-title{letter-spacing:-.5px;font-size:44px;font-weight:700;line-height:1.08}.login-visual-text{color:#ffffffc7;max-width:440px;margin-top:16px;font-size:16px;line-height:1.5}.login-specs{border-top:1px solid #ffffff38;grid-template-columns:repeat(3,auto);justify-content:start;column-gap:48px;margin-top:36px;padding-top:20px;display:grid}.login-specs dt{color:#fff9;margin-bottom:4px;font-size:12px}.login-specs dd{color:#fff;font-size:14px;font-weight:600}.login-panel{background:var(--bg-surface);border-left:1px solid var(--border-dim);flex-direction:column;justify-content:center;align-items:center;padding:48px 40px 28px;display:flex}.login-form{flex-direction:column;width:100%;max-width:380px;margin:auto 0;display:flex}.login-logo{width:190px;height:auto;margin-bottom:44px;display:block}.login-heading{color:var(--login-ink);font-size:28px;font-weight:700}.login-lead{color:var(--login-muted);margin-top:8px;margin-bottom:28px;font-size:15px;line-height:1.5}.login-notice{color:var(--text-secondary);background:var(--bg-panel);border-left:3px solid var(--login-accent);margin-bottom:20px;padding:10px 12px;font-size:14px}.login-label{color:var(--login-ink);margin-bottom:8px;font-size:14px;font-weight:600}.login-field{align-items:center;display:flex;position:relative}.login-input{width:100%;height:46px;font-family:var(--font-sans);color:var(--login-ink);background:var(--bg-panel);border:1px solid var(--login-line);border-radius:6px;outline:none;margin-bottom:20px;padding:0 14px;font-size:16px;transition:border-color .15s}.login-field .login-input{margin-bottom:0}.login-field{margin-bottom:20px}.login-input-password{padding-right:48px}.login-input:hover:not(:disabled){border-color:var(--text-muted)}.login-input:focus{border-color:var(--login-accent);box-shadow:0 0 0 3px #00ff6626}.login-input:disabled{opacity:.6}.login-eye{width:36px;height:36px;color:var(--login-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;display:flex;position:absolute;right:6px}.login-eye:hover,.login-eye:focus-visible{color:var(--login-ink);background:#ffffff0f;outline:none}.login-error{color:#ff8a8a;border-left:3px solid var(--color-red);background:#ff33441a;align-items:center;gap:8px;margin-bottom:20px;padding:10px 12px;font-size:14px;display:flex}.login-submit{height:48px;font-family:var(--font-sans);color:#04120a;background:var(--login-accent);cursor:pointer;border:none;border-radius:6px;font-size:16px;font-weight:600;transition:background .15s}.login-submit:hover:not(:disabled){background:var(--login-accent-hover)}.login-submit:focus-visible{outline-offset:2px;outline:3px solid #00ff6659}.login-submit:disabled{opacity:.7;cursor:wait}.login-footnote{color:var(--login-muted);text-align:center;margin-top:32px;font-size:13px}.login-status-root{background:var(--bg-pitch);justify-content:center;align-items:center;min-height:100vh;padding:24px 16px;display:flex}.login-status{letter-spacing:.04em;color:var(--color-amber);font-size:13px}@media (width<=900px){.login-root{grid-template-rows:auto 1fr;grid-template-columns:1fr}.login-visual{min-height:220px}.login-visual-content{bottom:20px;left:20px;right:20px}.login-visual-title{font-size:28px}.login-visual-text,.login-specs{display:none}.login-panel{border-left:none;border-top:1px solid var(--border-dim);padding:32px 16px 24px}.login-logo{width:160px;margin-bottom:28px}}.header-brand,.brand-text{min-width:0}.header-logout{flex-shrink:0}@media (width<=1600px){.brand-text{display:none}.header-logout{padding:5px 8px}.header-logout .logout-text{display:none}}@media (width<=768px){.header-status-group{display:flex}.header-status-group>:not(.header-logout){display:none}}@media (width>=1601px) and (width<=2200px){.brand-title-row .badge,.brand-subtitle{display:none}.brand-title{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}}
