:root{font-family:Inter,Segoe UI,system-ui,sans-serif;color:#173332;background:#f3f6f5;font-synthesis:none;--teal:#087f73;--line:#dce5e2;--muted:#607875}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button{cursor:pointer;border:1px solid #cfddda;background:#fff;border-radius:8px;padding:9px 13px;color:#244b46;font-size:13px;font-weight:600;transition:background .15s}button:hover{background:#edf5f2;border-color:#8eaaa3}button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid #5fcab8;outline-offset:3px}button:disabled{opacity:.43;cursor:not-allowed}button.primary{background:var(--teal);border-color:var(--teal);color:white}button.primary:hover{background:#066c61}button.danger{color:#ad3d35;border-color:#e4b8b0;background:#fff8f6}input,select{width:100%;padding:10px 11px;border:1px solid #c8d9d3;border-radius:8px;background:white;color:#173332;min-width:0}label{display:grid;gap:7px;font-size:13px;font-weight:600}h1{font-size:29px;letter-spacing:-.9px;margin:0 0 9px}h2{font-size:18px;letter-spacing:-.3px;margin:0}h3{font-size:14px;margin:0}p{line-height:1.55}.muted,.fine{color:var(--muted);font-size:13px}.fine{font-size:12px}.eyebrow,.nav-label{font-size:10px;letter-spacing:1.6px;font-weight:750;color:var(--muted);margin:0 0 9px}[hidden]{display:none!important}.sidebar{width:224px;position:fixed;inset:0 auto 0 0;background:#fff;border-right:1px solid var(--line);padding:28px 19px;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:15px;margin-bottom:45px}.brandmark{background:#0d6158;color:#fff;border-radius:12px;width:40px;height:40px;display:grid;place-items:center;font-size:14px;font-weight:750;letter-spacing:-1px}.brand small{display:block;color:var(--muted);font-size:11px;font-weight:450;margin-top:3px}.nav-label{padding-left:10px}nav{display:grid;gap:6px}nav button{text-align:left;padding:12px;border:0;background:transparent;color:#57736e;font-size:13px}nav button.selected{background:#e4f3ee;color:#087568}nav button.selected:before{content:'•';margin-right:10px}.sidebar-foot{margin-top:auto;color:#52716a;font-size:12px}.sidebar-foot p{font-size:11px;line-height:1.6}.sidebar-foot button{margin-top:12px}.dot{display:inline-block;width:7px;height:7px;background:#36a08b;border-radius:50%;margin-right:5px}main{margin-left:224px;max-width:1600px;padding:36px 38px 22px}header{display:flex;justify-content:space-between;align-items:center;gap:18px;margin-bottom:28px}header p{margin:0}header .eyebrow{margin-bottom:8px}.connection{display:flex;gap:12px;align-items:center;flex-shrink:0}.connection span{font-size:11px;color:var(--muted)}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:22px;box-shadow:0 2px 5px #1d403604}.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:18px}.card-head p{margin:5px 0 0;font-size:11px;word-break:break-word}.badge{font-size:11px;padding:5px 9px;background:#eaf3ef;color:#2d7764;border-radius:30px;white-space:nowrap}.badge.warn{background:#fff0dc;color:#9b631c}.badge.bad{background:#fce8e4;color:#a74336}.row{padding:15px 0;border-top:1px solid #e8eeeb;display:flex;justify-content:space-between;align-items:center;gap:15px}.row p{font-size:11px;color:var(--muted);margin:5px 0 0;max-width:290px}.buttons{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}.sensor{font-size:11px;font-weight:500;margin-left:7px;color:var(--teal)}.notice{background:#fff4df;color:#835d28;border:1px solid #edddbb;padding:13px 16px;border-radius:9px;font-size:12px;line-height:1.6;margin-bottom:20px}.info{background:#e7f2ef;border-color:#cce3dc;color:#3e665c}.section-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}.section-gap{margin-top:22px}.formgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px;margin:15px 0}.formgrid .wide{grid-column:1/-1}.input-action{display:flex;align-items:end;gap:10px;margin:15px 0}.input-action label{flex:1}details{border-top:1px solid #e4ece8;margin-top:12px;padding-top:13px}summary{cursor:pointer;color:#55756c;font-size:12px;font-weight:600;margin-bottom:5px}.fault-row{display:grid;grid-template-columns:110px 1fr auto;align-items:center;gap:10px;margin:12px 0;font-size:12px}.fault-row button,.fault-row select{font-size:12px;padding:7px}.activity{margin-top:26px;background:#fff;border:1px solid var(--line);border-radius:14px;padding:21px}.result{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere;background:#f3f7f5;border-left:3px solid #66aa92;border-radius:5px;padding:14px;max-height:290px;overflow:auto;line-height:1.6}.result.failed{background:#fff1ed;border-color:#cd6c56}.result.pending{background:#fff8e9;border-color:#d4a545}#history{display:grid;gap:9px;font-size:12px;color:var(--muted);padding:10px 0}.dipgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:18px}.dip{border:1px solid var(--line);padding:12px;border-radius:10px;text-align:center}.dip p{font-size:11px;min-height:32px;margin:8px 0}.dip .buttons{justify-content:center}.dip button{padding:6px 9px}.dip.reset{border-color:#dca49a;background:#fff7f4}.login{min-height:100vh;display:grid;place-items:center;background:radial-gradient(ellipse at 20% 20%,#d8eee5,transparent 65%),#f3f6f5}.login-card{width:min(430px,calc(100% - 36px));padding:36px;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 18px 80px #1a584315}.login-card .brandmark{margin-bottom:23px}.login-card form{display:grid;gap:17px;margin-top:25px}.login-card h1{font-size:30px}.login-card .fine{margin:22px 0 0}#login-error{color:#ad3d35;margin:0;font-size:13px}dialog{border:1px solid var(--line);border-radius:15px;max-width:460px;width:calc(100% - 32px);padding:28px;color:#24483e;box-shadow:0 15px 80px #0003}dialog::backdrop{background:#15372b66;backdrop-filter:blur(3px)}dialog p{font-size:14px;color:#576f64}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:24px}footer{font-size:11px;color:#71837a;margin:22px 0;line-height:1.7}.smallstatus{font-size:12px;color:var(--muted);margin:10px 0;white-space:pre-wrap}.flow{display:flex;gap:8px;flex-wrap:wrap;font-size:11px;color:#58786c;margin:17px 0}.flow span{background:#edf5f1;border-radius:20px;padding:7px 11px}@media(min-width:1450px){main{padding:42px 50px}.grid{gap:24px}}@media(max-width:1100px){main{padding:28px 22px;margin-left:196px}.sidebar{width:196px}.row{align-items:flex-start;flex-direction:column}.buttons{justify-content:flex-start}.connection{flex-direction:column;align-items:flex-end}.dipgrid{grid-template-columns:repeat(2,1fr)}}@media(max-width:760px){.sidebar{position:static;width:auto;padding:16px 18px}.brand{margin:0 0 16px}.sidebar-foot,.nav-label{display:none}nav{display:flex;overflow-x:auto;gap:4px}nav button{white-space:nowrap;padding:10px}.brand small{display:inline;margin-left:7px}main{margin:0;padding:22px 16px}.grid{grid-template-columns:1fr}header{align-items:flex-start}h1{font-size:25px}.card{padding:19px}.row{flex-direction:row}.buttons{justify-content:flex-end}.connection span{display:none}.formgrid{grid-template-columns:1fr}.fault-row{grid-template-columns:85px 1fr auto}.dipgrid{grid-template-columns:repeat(4,1fr)}}@media(max-width:430px){.row{flex-direction:column}.buttons{justify-content:flex-start}.dipgrid{grid-template-columns:repeat(2,1fr)}}
.mobile-only{display:none}.toast{position:sticky;top:10px;z-index:3;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;margin-bottom:18px;background:#e6f4ed;border:1px solid #b5d5c6;border-radius:9px;box-shadow:0 3px 14px #17482b10;font-size:12px}.toast.error{background:#fff0ec;border-color:#e0b5a8}@media(max-width:760px){.mobile-only{display:block;margin-left:auto;font-size:11px;padding:7px}.brand small{display:block;margin-left:0}}
/* Visual door station; state remains driven by the existing API. */
.door-picker{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:20px}.door-tab{text-align:left;padding:15px;background:#fff}.door-tab span{display:block}.door-tab small{display:block;margin-top:7px;color:#6b807b;font-size:11px}.door-tab.selected{background:#173e35;color:#fff;border-color:#173e35;box-shadow:0 5px 15px #173e3516}.door-tab.selected small{color:#c2ded2}.door-workspace{padding:28px!important;overflow:hidden}.door-heading{display:flex;justify-content:space-between;align-items:center;gap:15px}.door-heading .fine{margin:7px 0 0;overflow-wrap:anywhere}.door-scene{display:grid;grid-template-columns:minmax(100px,1fr) minmax(150px,230px) minmax(100px,1fr);align-items:center;gap:28px;max-width:740px;margin:32px auto 10px;background:radial-gradient(ellipse at 50% 75%,#e6eee9,transparent 65%)}.reader-station{display:flex;align-items:center;flex-direction:column;gap:12px}.direction-label{font-size:10px;letter-spacing:2px;font-weight:750;color:#58756b}.reader-device{width:102px;height:158px;background:linear-gradient(125deg,#344a45,#172b25);border:4px solid #435a51;border-radius:17px;box-shadow:4px 9px 16px #18382c26,inset 0 0 0 1px #ffffff12;display:flex;align-items:center;flex-direction:column;color:#cee0d5;padding:12px 7px}.reader-led{width:28px;height:3px;background:#8ccbb0;border-radius:3px;margin-bottom:13px}.reader-screen{font:600 14px ui-monospace,monospace;letter-spacing:2px;padding:5px 12px;background:#101e19;border-radius:3px;color:#b9d6c5}.reader-device svg{width:40px;height:40px;fill:none;stroke:#a7bdb1;stroke-width:2;margin:7px}.reader-caption{font-size:6px;letter-spacing:2px}.reader-status{font-size:10px;color:#657e72;text-align:center;min-height:25px}.reader-device.not-configured{opacity:.35}.reader-device.not-configured .reader-led{background:#88948d}.reader-device.tampered .reader-led{background:#ee9871;box-shadow:0 0 8px #ee9871}.reader-tap{font-size:12px;width:100%;max-width:165px;padding:12px 8px}.door-center{align-self:end;text-align:center}.door-frame{height:285px;position:relative;border:9px solid #354d41;border-bottom-width:5px;background:#142b22;perspective:650px;box-shadow:0 6px 20px #1d3c3320}.door-interior{position:absolute;inset:0;background:linear-gradient(150deg,#182c24,#3b5546);display:grid;place-items:center;color:#b4c8b6;font-size:9px;letter-spacing:3px}.door-leaf{position:absolute;inset:0;background:linear-gradient(110deg,#b8c9be,#8fa89a);border:2px solid #7c9687;transform-origin:left;transition:transform .55s ease;box-shadow:inset 0 0 0 6px #ffffff12;backface-visibility:hidden}.is-open .door-leaf{transform:rotateY(-62deg)}.door-window{position:absolute;top:24px;left:24%;width:52%;height:85px;background:linear-gradient(125deg,#607c70,#9eafa5);border:5px solid #698778;box-shadow:inset 2px 2px 6px #213c3240}.door-number{position:absolute;top:124px;left:0;right:0;color:#496757;font-size:17px;font-weight:600}.door-handle{position:absolute;right:13px;top:62%;width:30px;height:7px;border-radius:4px;background:#e7eee7;box-shadow:0 3px 3px #526b5d}.door-handle:before{content:'';position:absolute;right:1px;top:-10px;width:8px;height:30px;background:#d5dfd7;border-radius:3px}.door-ground{height:9px;border-radius:50%;background:#21453515;filter:blur(3px);margin-top:5px}.contact-caption{font-size:11px;color:#657e72;margin:10px 0 0}.door-movement{display:flex;justify-content:center;gap:10px;margin:20px 0 0}.door-movement button{min-width:125px;padding:12px}.door-explainer{text-align:center;max-width:620px;margin:14px auto 28px;font-size:12px;color:#698073}.physical-inputs{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid #dce5e2;border-radius:13px;background:#f8faf8;overflow:hidden}.physical-input{padding:20px;text-align:center;display:flex;align-items:center;flex-direction:column;gap:11px;border-right:1px solid #dce5e2}.physical-input:last-child{border:0}.physical-input .eyebrow{margin:0}.physical-input p:not(.eyebrow){font-size:10px;color:#6b8175;margin:0}.physical-input .buttons{justify-content:center}.physical-input .sensor{font-size:11px}.exit-pad{border:6px solid #c5d1c8;border-radius:12px;background:#377f5e;color:#fff;width:110px;min-height:57px;font-size:13px;box-shadow:0 3px 5px #29463317}.exit-pad:hover{background:#236946;color:white}.quiet{border:0;background:transparent;text-decoration:underline;font-size:11px;padding:3px}.override-symbol{height:57px;width:57px;display:grid;place-items:center;font-size:27px;color:#597365;background:radial-gradient(circle,#dae2dc,#f2f5f2);border:4px solid #c2cec5;border-radius:50%}.override-symbol.break-glass{border-radius:9px;color:#b55942;border-color:#d6aaa0;background:#fff0e9;font-weight:700}.activated{background:#fff1e6}.activated .override-symbol{border-color:#c88345;box-shadow:0 0 0 4px #efbe8130}.door-feedback{display:flex;align-items:center;flex-wrap:wrap;gap:8px 15px;margin:20px 0;padding:12px 15px;border-radius:8px;background:#f1f5f3;font-size:12px}.door-feedback strong{text-transform:capitalize}.door-feedback small{flex-basis:100%;color:#708279}.door-workspace>details{margin-top:12px}.door-workspace>details summary{padding:10px 0}.door-workspace .fault-row{max-width:660px}@media(max-width:1000px){.door-scene{gap:15px}.physical-input{padding:16px 8px}.physical-input .buttons{gap:5px}.physical-input .buttons button{font-size:11px;padding:8px}.door-picker{grid-template-columns:repeat(2,1fr)}}@media(max-width:500px){.door-workspace{padding:18px!important}.door-scene{grid-template-columns:80px minmax(95px,1fr) 80px;gap:8px;margin-top:25px}.reader-device{width:67px;height:124px;border-width:3px;border-radius:12px;padding:9px 3px}.reader-screen{font-size:11px;padding:4px 8px}.reader-caption{font-size:5px;letter-spacing:1px}.reader-device svg{width:32px;height:32px;margin:4px}.reader-tap{font-size:10px;padding:10px 2px}.reader-status{font-size:9px}.direction-label{font-size:9px;letter-spacing:1px}.door-frame{height:215px;border-width:6px}.door-window{height:62px}.door-number{top:106px}.door-handle{right:7px;width:19px}.contact-caption{font-size:9px}.physical-inputs{grid-template-columns:1fr}.physical-input{border-right:0;border-bottom:1px solid #dce5e2;padding:18px}.door-heading{align-items:flex-start}.door-heading h2{font-size:17px}}@media(prefers-reduced-motion:reduce){.door-leaf{transition:none}}

.live-lock{max-width:440px;margin:20px auto 0;text-align:center;padding:14px;border:1px solid #c9d7cf;border-radius:10px;background:#f1f5f3}.live-lock strong{display:block;font-size:19px}.live-lock span{display:block;font-size:11px;margin-top:5px}.live-lock.released{background:#e2f5e9;border-color:#71b991;color:#195d39}.live-lock.secured{background:#e8eef2;color:#344f60}.live-lock.warning{background:#fff0d8;border-color:#cfa760;color:#805518}.live-lock.unknown{color:#77827b}

.reader-controls{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:22px 0 0}.reader-control{border:1px solid #d4e0da;border-radius:13px;background:#f7faf8;padding:20px;min-width:0}.reader-control-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.reader-control-head .eyebrow{font-size:9px;margin-bottom:7px}.reader-control-head h3{font-size:15px}.reader-security-dot{width:10px;height:10px;border-radius:50%;background:#76a38b}.reader-tamper-state{font-size:12px;color:#526e60;margin:17px 0 12px}.tamper-buttons{justify-content:flex-start;gap:8px;flex-wrap:wrap}.tamper-buttons button{font-size:11px}.ids-console{margin-top:20px;padding-top:16px;border-top:1px solid #d6e2da}.ids-display{font:600 13px ui-monospace,monospace;letter-spacing:.7px;padding:13px;background:#e5ebe7;color:#6c7d72;border-radius:7px;margin-bottom:10px}.ids-display.armed{background:#203e34;color:#d6e5ad}.ids-display.disarmed{background:#e0f1e7;color:#256644}.ids-display.alarm{background:#7f302b;color:#fff1dd}.ids-tap{width:100%;background:#eaf0ec;border-color:#b7cfc0;padding:12px}.ids-console .fine{font-size:11px;margin-bottom:0}.tamper-active{border-color:#d59b80;background:#fff7ef}.tamper-active .reader-security-dot{background:#ca593d;box-shadow:0 0 0 4px #ca593d16}.tamper-active .reader-tamper-state{color:#a34830;font-weight:650}.reader-absent .reader-security-dot{background:#a7afa9}.reader-controls-note{font-size:11px;color:#708377;margin:12px 0 24px;line-height:1.6}@media(max-width:600px){.reader-controls{grid-template-columns:1fr}.reader-control{padding:17px}}

.wiring-bench{margin-top:25px;padding-top:24px;border-top:1px solid #dce5e2}.wiring-heading{display:flex;justify-content:space-between;align-items:center;gap:12px}.wiring-heading h3{font-size:18px}.feedback-test{display:flex;align-items:center;justify-content:space-between;gap:14px;border:1px solid #d3ded7;background:#f1f6f3;padding:18px;border-radius:12px;margin-top:18px}.feedback-test p{font-size:11px;color:#63796c;margin-bottom:0}.feedback-test.failed{background:#fff2e4;border-color:#d1a171}.feedback-test [aria-pressed=true]{box-shadow:0 0 0 2px #628b79}.wiring-channels{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:20px 0}.wiring-channel{border:1px solid #d4e0d8;border-radius:12px;padding:18px;background:#f8fbf9}.wire-label{display:flex;align-items:center;justify-content:space-between;gap:8px}.wire-label h3{font-size:13px}.wire-label>span{font-size:10px;color:#64806e}.wire-diagram{display:flex;align-items:center;gap:10px;margin:22px 0;color:#628272}.wire-end{font:600 9px ui-monospace,monospace;letter-spacing:1px;background:#e8efea;padding:8px;border:1px solid #cddbd2;border-radius:5px}.wire-path{display:flex;align-items:center;flex:1;position:relative;gap:0}.wire-path i{height:3px;background:#73a18b;flex:1}.wire-path b{width:16px;height:16px;border:3px solid #73a18b;border-radius:50%;background:#f8fbf9}.wire-actions{display:flex;gap:5px}.wire-actions button{flex:1;padding:9px 4px;font-size:11px}.wire-actions .selected{background:#2b5c47;color:white;border-color:#2b5c47}.wiring-channel.cut,.wiring-channel.short{background:#fff5eb;border-color:#ddb092}.cut .wire-path{gap:12px}.cut .wire-path b{border:0;width:12px;color:#ad5936}.cut .wire-path b:after{content:'×';font:700 23px system-ui;position:absolute;top:-10px;left:calc(50% - 7px)}.cut .wire-path i,.short .wire-path i{background:#cb8c66}.short .wire-path b{width:22px;height:18px;border-radius:2px;border-color:#ba754d;box-shadow:0 5px 0 -2px #fff5eb,0 7px 0 -2px #ba754d}.cut .wire-label>span,.short .wire-label>span{color:#a35630}.cut .wire-actions .selected,.short .wire-actions .selected{background:#975431;border-color:#975431}@media(max-width:1000px){.feedback-test{align-items:flex-start;flex-direction:column}}@media(max-width:600px){.wiring-channels{grid-template-columns:1fr}.wiring-heading{align-items:flex-start}.wiring-heading h3{font-size:16px}.feedback-test .buttons{justify-content:flex-start}}

.sio-board{background:linear-gradient(120deg,#234e43,#173c32);border:7px solid #d8e0d9;border-radius:18px;padding:25px;margin:20px 0 25px;color:#d9e9de;box-shadow:0 10px 28px #163b3019;position:relative}.sio-board-head{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #79988755;padding-bottom:19px;margin-bottom:22px;gap:12px}.sio-board-head p{font:10px ui-monospace,monospace;letter-spacing:2px;color:#9bbdab;margin:0 0 7px}.sio-board-head h2{font-size:27px;color:#edf7ef}.sio-board-head>span{font-size:11px;color:#b9d2c3}.sio-bank-label{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:13px}.sio-bank-label h3{font:600 11px ui-monospace,monospace;letter-spacing:1.4px;color:#bcd9c8}.sio-bank-label>span{font-size:10px;color:#9bb8a8}.sio-channels{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));gap:13px}.sio-channel{background:#f2f5ee;border:1px solid #88a392;border-radius:10px;padding:13px;min-width:0;color:#2e4c3b;box-shadow:0 3px 5px #092b2620}.sio-terminal{display:flex;justify-content:space-around;background:#6d9d69;border:2px solid #547f51;border-radius:4px;padding:5px;margin:-2px 0 14px;box-shadow:0 3px 0 #395b3b}.sio-terminal i{width:12px;height:12px;border-radius:50%;background:linear-gradient(125deg,#d7d4b7,#898b75);border:1px solid #485740;position:relative}.sio-terminal i:after{content:'';position:absolute;width:8px;height:1px;background:#495747;top:5px;left:1px;transform:rotate(-35deg)}.sio-channel-title{display:flex;align-items:center;justify-content:space-between}.sio-channel h4{font:700 12px ui-monospace,monospace;margin:0}.sio-led{height:8px;width:8px;border-radius:50%;background:#8ca293}.sio-device{height:34px;margin:12px 0;display:grid;place-items:center;font:10px ui-monospace,monospace;letter-spacing:2px}.relay-block{background:#293b32;border:3px solid #1d2b24;border-radius:3px;color:#b8c6b8;box-shadow:3px 3px 0 #bdcabc}.input-trace{color:#90a892;font-size:22px}.sio-state{display:block;font-size:12px;margin-bottom:5px}.sio-device-id{display:block;font:9px ui-monospace,monospace;color:#708773;overflow-wrap:anywhere;margin-bottom:13px}.sio-actions{display:grid;grid-template-columns:1fr 1fr;gap:5px}.sio-actions button{font-size:10px;padding:8px 3px;border-radius:5px}.sio-actions .selected{background:#2f6149;color:#fff;border-color:#2f6149}.sio-read{font-size:10px;background:transparent;border:0;padding:10px 0 0;color:#607c69;text-decoration:underline}.sio-channel[data-signal=event],.sio-channel[data-signal=linecut],.sio-channel[data-signal=lineshort]{background:#fff0df;border-color:#d1a069}.sio-channel[data-signal=event] .sio-led,.sio-channel[data-signal=linecut] .sio-led,.sio-channel[data-signal=lineshort] .sio-led{background:#d48737;box-shadow:0 0 8px #d4873755}.sio-channel[data-signal=close] .sio-led,.sio-channel[data-signal=closed] .sio-led{background:#4da76c;box-shadow:0 0 8px #4da76c55}.sio-board-bus{display:flex;align-items:center;justify-content:center;gap:15px;padding:25px 0;color:#93b39f;font:9px ui-monospace,monospace;letter-spacing:1px}.sio-board-bus i{height:1px;flex:1;background:#639778}.sio-board-bus b{padding:12px;background:#142c24;border:4px dashed #769281;color:#bdd5c4}.sio-empty{font-size:12px;color:#a9c5b5;margin:8px 0 15px}@media(max-width:600px){.sio-board{padding:16px;border-width:4px}.sio-channels{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.sio-channel{padding:10px}.sio-bank-label h3{font-size:10px}.sio-board-head{align-items:flex-start}.sio-board-head>span{font-size:10px}.sio-board-bus{gap:8px}}@media(max-width:350px){.sio-channels{grid-template-columns:1fr}}

.hardware-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px;align-items:start}.hardware-grid>.card{min-width:0}.power-rig{border:1px solid #cad9d1;border-radius:12px;overflow:hidden;background:#edf3ef}.supply-module{text-align:center;padding:20px;background:#f8faf8}.mains-symbol{margin:10px auto;width:62px;height:62px;border:3px solid #5a8870;border-radius:50%;font:55px/48px Georgia;color:#3d775b}.hardware-state{display:block;font-size:14px;margin:12px 0}.supply-module .buttons{justify-content:center;margin-top:16px}.power-link{text-align:center;background:#dce9e0;color:#527563;font:10px monospace;padding:10px;letter-spacing:2px}.voltage-module{padding:20px;background:#253d34;color:#bdd7c4}.voltage-module>span{font:10px monospace;letter-spacing:2px}.voltage-module output{display:block;font:32px ui-monospace,monospace;color:#e1f4ba;margin:8px 0 16px}.voltage-module label{color:#c2d6ca}.voltage-module .input-action{margin:0;align-items:end}.voltage-module input{width:100%;min-width:0}.battery-module{padding:22px;display:grid;grid-template-columns:90px 1fr;gap:12px;align-items:center}.battery-art{height:48px;display:flex;align-items:center;gap:4px;border:3px solid #567e64;border-radius:5px;padding:7px;position:relative}.battery-art b{position:absolute;right:-10px;background:#567e64;color:#edf3ef;font:10px monospace;padding:3px 1px}.battery-art i{background:#69a47c;flex:1;height:100%;border-radius:2px}.battery-actions,.tamper-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px}.battery-actions{grid-column:1/-1}.hardware-grid button{font-size:11px;padding:10px}.hardware-grid .selected{background:#305f49;color:white;border-color:#305f49}.controller-case{background:linear-gradient(130deg,#dbe3df,#f1f3ef);border:6px solid #c4cec8;border-radius:13px;padding:18px;box-shadow:inset 0 0 0 1px #aebcb3}.case-heading{display:flex;justify-content:space-between;gap:10px;align-items:center;font:10px monospace;letter-spacing:1px;color:#526a5b}.case-vents{font-size:20px;color:#82998b}.tamper-pair{display:grid;gap:16px;margin:20px 0}.tamper-contact{background:#f7faf7;border:1px solid #b8cdbf;padding:18px;border-radius:9px}.contact-switch{display:flex;align-items:center;width:140px;height:36px;margin:16px 0}.contact-switch i{flex:1;height:4px;background:#67967c}.contact-switch b{width:40px;height:4px;background:#67967c;transform-origin:left;transition:transform .2s}.tamper-description{font-size:11px;color:#6c8073;min-height:16px}.case-footer{font:9px monospace;letter-spacing:1px;color:#6c8174}.tamper-contact[data-signal=event],.tamper-contact[data-signal=linecut],.tamper-contact[data-signal=lineshort]{background:#fff1e3;border-color:#d6aa79}.tamper-contact[data-signal=event] .contact-switch b{transform:rotate(-30deg);background:#bd7645}.tamper-contact[data-signal=linecut] .contact-switch b{background:transparent;border-top:3px dashed #bd7645}.tamper-contact[data-signal=lineshort] .contact-switch b{height:15px;background:transparent;border:3px solid #bd7645}.supply-module[data-signal=fail]{background:#fff0df}.supply-module[data-signal=fail] .mains-symbol{color:#b56838;border-color:#b56838}.battery-module[data-signal=missing] .battery-art{border-style:dashed;opacity:.5}.battery-module[data-signal=missing] .battery-art i{visibility:hidden}.battery-module[data-signal=low] .battery-art i{background:#c28b47}.battery-module[data-signal=low] .battery-art i:nth-child(n+2){visibility:hidden}.battery-module[data-signal=charging] .battery-art{box-shadow:0 0 0 4px #79a88133}.battery-module[data-signal=charging] .battery-art b{background:#337c54}.hardware-grid .fine{line-height:1.7;margin-top:16px}@media(max-width:1000px){.hardware-grid{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){.contact-switch b{transition:none}}

.network-workspace{margin-bottom:22px}.network-toolbar{display:flex;justify-content:space-between;gap:24px;align-items:start}.network-toolbar input{max-width:170px}.controller-hub{margin:20px auto 0;max-width:350px;background:#25483d;color:#e3f0e7;display:flex;align-items:center;gap:18px;padding:23px;border:5px solid #bbcdc2;border-radius:12px}.hub-chip{font:700 16px monospace;padding:15px;border:3px dashed #a5bcae;background:#17372c}.controller-hub strong,.controller-hub span:not(.hub-chip){display:block}.controller-hub div span{font-size:11px;color:#b5cabe;margin-top:7px}.network-trunk{height:30px;width:3px;background:#90ac9a;margin:auto}.network-groups{border-top:3px solid #90ac9a;padding-top:23px}.network-group{margin-bottom:24px}.network-group>h3{font:11px monospace;letter-spacing:2px;color:#72917d;margin-bottom:14px}.network-nodes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px}.network-node{padding:17px;background:#f1f6f3;border:1px solid #c8d9cf;border-radius:11px;min-width:0}.network-node-head{display:flex;justify-content:space-between;align-items:center}.network-icon{font:700 12px monospace;background:#d6e4db;border:2px solid #adc6b7;padding:12px;border-radius:5px}.network-led{width:9px;height:9px;background:#80988a;border-radius:50%}.network-node h3{font-size:14px;margin:15px 0 8px}.network-state{font-size:11px;color:#67816f;min-height:30px;line-height:1.5}.network-wire{display:flex;align-items:center;height:12px;margin:14px 0}.network-wire i{flex:1;height:2px;background:#94b6a0}.network-wire b{width:9px;height:9px;border:2px solid #94b6a0;border-radius:50%}.network-actions{display:flex;flex-wrap:wrap;gap:6px}.network-actions button{font-size:10px;padding:9px 7px;flex:1;white-space:normal}.network-node.outage,.reader-route.outage{background:#fff1e4;border-color:#d7ab80}.outage .network-led{background:#cc763b;box-shadow:0 0 0 4px #cc763b19}.outage .network-state{color:#96572f}.outage .network-wire{gap:8px}.outage .network-wire b{border:0;color:#b97140}.outage .network-wire b:after{content:'×';position:relative;top:-6px}.outage .network-wire i{background:#c99770}.reader-link-drawer{border-top:1px solid #d5e0d8;padding-top:18px}.reader-route-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:18px}.reader-route{padding:15px;background:#f4f7f4;border:1px solid #d3dfd6;border-radius:9px;min-width:0}.reader-route h3{font-size:12px}.backend-scene{display:flex;align-items:center;gap:20px;max-width:550px;margin:12px 0 22px}.backend-scene span{padding:24px;border:2px solid #b8c9be;border-radius:10px;background:#edf3ef;font:11px monospace;letter-spacing:1px}.backend-scene i{flex:1;text-align:center;color:#84998c;font-size:30px;border-bottom:2px dashed #b8c9be}@media(max-width:1150px){.network-nodes,.reader-route-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:600px){.network-toolbar{flex-direction:column;gap:8px}.network-node{padding:12px}.backend-scene{gap:8px}.backend-scene span{padding:18px 10px;font-size:9px}.network-actions{flex-direction:column}}

.advanced-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}.advanced-grid>.card{min-width:0}.advanced-illustration{height:155px;border:1px solid #ccdcd1;border-radius:12px;background:#edf3ef;display:flex;justify-content:center;align-items:center;gap:15px;margin:0 0 22px;color:#547864}.ids-illustration span{font:10px monospace;letter-spacing:1px;padding:16px 10px;border:2px solid #b0c8b8;border-radius:7px;background:#f8faf8}.ids-illustration b{border:3px dashed #9fbea9;background:#2c5142;color:#c8decd;padding:17px;text-align:center;font:14px monospace}.ids-illustration i{font-size:22px}.interlock-illustration b{text-align:center;font-size:27px;font-weight:400}.interlock-illustration small{display:block;font:9px monospace;letter-spacing:2px;margin-top:8px}.mini-door{width:58px;height:92px;border:5px solid #9bb6a4;border-bottom:0;padding:3px;background:#284537}.mini-door i{display:block;height:100%;background:#c7d9cc;border:1px solid #839d8c;position:relative}.mini-door i:after{content:'';position:absolute;right:6px;top:45px;width:10px;height:3px;background:#5e7e68}.dip-board{background:linear-gradient(125deg,#294f42,#1a392f);padding:23px;border:6px solid #cbd8ce;border-radius:14px;margin:20px 0;color:#d3e3d7}.dip-board-heading{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:22px}.dip-board-heading .eyebrow{color:#a7c2b0}.dip-board-heading h3{font:700 22px monospace}.dip-board-heading>span{font:11px monospace;color:#a9cbb5}.dip-switch-rack{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:9px;padding:14px;background:#863d35;border:3px solid #aa6558;border-radius:7px}.dip-unit{min-width:0;text-align:center}.dip-unit h4{font:700 15px monospace;color:#ffdfb5;margin:0 0 12px}.dip-slider{height:68px;width:30px;margin:0 auto 12px;background:#492a27;border:3px solid #bb8071;border-radius:5px;position:relative}.dip-slider i{position:absolute;width:20px;height:24px;left:2px;bottom:3px;border-radius:3px;background:repeating-linear-gradient(#f5edcf 0 4px,#d4c6a7 4px 5px);box-shadow:0 3px 4px #281b1b88}.dip-unit[data-position=on] .dip-slider i{bottom:35px}.dip-unit[data-position=GPIO] .dip-slider i{bottom:19px;opacity:.4}.dip-switch-actions{display:grid;gap:5px;margin-top:12px}.dip-switch-actions button{padding:8px 3px;font:10px monospace}.dip-switch-actions .selected{background:#e9d6a2;color:#433c27;border-color:#e9d6a2}.dip-unit p{font-size:9px;line-height:1.5;color:#efd4c6;overflow-wrap:anywhere;min-height:28px;margin:12px 0 0}.dip-unit .badge{font-size:9px;padding:4px 6px}.factory-switch{outline:2px solid #ecc793;outline-offset:4px;border-radius:3px}.factory-switch p{font-weight:700;color:#ffe0a5}@media(max-width:1000px){.advanced-grid{grid-template-columns:1fr}.dip-switch-rack{grid-template-columns:repeat(4,minmax(0,1fr));row-gap:24px}}@media(max-width:600px){.dip-board{padding:15px;border-width:4px}.dip-switch-rack{padding:12px 8px;gap:9px}.advanced-illustration{gap:8px}.ids-illustration span{padding:12px 5px;font-size:9px}.dip-board-heading>span{font-size:9px}}

.common-door-controls{max-width:100%;grid-template-columns:minmax(155px,1fr) minmax(185px,260px) minmax(155px,1fr);gap:22px;align-items:start}.common-door-controls .door-center{align-self:start;padding-top:35px}.door-side{min-width:0;display:flex;flex-direction:column;gap:14px;background:#f5f8f5;border:1px solid #dbe5dd;border-radius:13px;padding:16px}.door-side .physical-input{border:0;border-top:1px solid #dce5e2;padding:16px 0 0;gap:8px;width:100%}.door-side .physical-input .buttons{gap:6px;flex-wrap:wrap}.door-side .physical-input .buttons button{font-size:11px;padding:8px}.door-side .override-symbol{width:43px;height:43px;font-size:22px}.door-side .exit-pad{min-height:46px;font-size:12px}.common-door-controls .live-lock{margin-top:15px;padding:12px 8px}.common-door-controls .live-lock strong{font-size:16px}.common-door-controls .door-movement{flex-direction:column;gap:8px;margin-top:12px}.common-door-controls .door-movement button{min-width:0;width:100%;font-size:12px}.common-door-controls .reader-status{min-height:0}.door-side .physical-input.activated{border-radius:8px;padding-bottom:12px}@media(max-width:1100px){.common-door-controls{grid-template-columns:minmax(130px,1fr) minmax(150px,210px) minmax(130px,1fr);gap:12px}.door-side{padding:12px}.door-side .direction-label{letter-spacing:1px}}@media(max-width:700px){.common-door-controls{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.common-door-controls .door-center{grid-column:1/-1;grid-row:1;justify-self:center;width:min(100%,250px);padding-top:0}.common-door-controls .entry-side{grid-column:1;grid-row:2}.common-door-controls .exit-side{grid-column:2;grid-row:2}.common-door-controls .door-movement{flex-direction:row}.common-door-controls .door-movement button{padding:10px 4px}.door-side .reader-tap{max-width:100%}.door-side .physical-input .eyebrow{font-size:9px}.door-side .exit-pad{max-width:100%}.door-side .physical-input .buttons{width:100%}.door-side .physical-input .buttons button{flex:1}}
