:root{color-scheme:light;--bg: 244 246 239;--surface: 255 255 255;--sunken: 231 235 224;--ink: 25 34 26;--ink-muted: 76 88 72;--line: 170 179 162;--accent: 184 214 90;--accent-ink: 16 23 20;--ok: 33 92 53;--warn: 113 70 0;--danger: 142 39 39;--info: 18 78 101;--radius: 2px;--border: 1px;--control-height: 32px;--kiosk-target: 48px;--esp32-target: 64px;--font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: ui-monospace, "SFMono-Regular", Consolas, monospace;--type-xs: 10px;--type-sm: 11px;--type-md: 12px;--type-lg: 16px;--type-xl: 20px}:root[data-scheme=dark]{color-scheme:dark;--bg: 18 26 24;--surface: 28 38 34;--sunken: 16 23 20;--ink: 240 243 236;--ink-muted: 187 196 185;--line: 77 91 82}:root[data-density=comfortable]{--control-height: 40px;--type-md: 14px}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-sans);font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--font-mono);font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.visible{visibility:visible}.static{position:static}.table{display:table}.border{border-width:1px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background:rgb(var(--bg));color:rgb(var(--ink));font-family:var(--font-sans);font-size:var(--type-md);-webkit-font-smoothing:antialiased}button,input,select,textarea{color:inherit;font:inherit}button{cursor:pointer}:focus-visible{outline:2px solid rgb(var(--accent));outline-offset:2px}::-moz-selection{background:rgb(var(--accent));color:rgb(var(--accent-ink))}::selection{background:rgb(var(--accent));color:rgb(var(--accent-ink))}@media (prefers-reduced-motion: reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.index-label,.mono{font-family:var(--font-mono);font-size:10px;letter-spacing:.04em}.index-label{color:rgb(var(--ink-muted));text-transform:uppercase}.button{min-height:32px;padding:0 10px;border:var(--border) solid rgb(var(--line));border-radius:var(--radius);background:rgb(var(--surface));color:rgb(var(--ink));font-size:11px}.button-default{border-color:rgb(var(--accent));background:rgb(var(--accent));color:rgb(var(--accent-ink));font-weight:650}.button-quiet{background:transparent}.button-danger{color:rgb(var(--danger))}.control,.input,.select,.textarea{border:var(--border) solid rgb(var(--line));border-radius:var(--radius);background:rgb(var(--surface));min-height:32px;padding:4px 8px}.textarea{min-height:64px}.check-control,.switch-control{display:flex;gap:8px;align-items:center}.check-control input,.switch-control input{accent-color:rgb(var(--accent))}.badge{border:var(--border) solid rgb(var(--line));padding:3px 6px;font:10px var(--font-mono)}.status{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.status-pip{display:flex;align-items:center;gap:6px;font:9px var(--font-mono);white-space:nowrap}.status-pip i,.status i{width:7px;height:7px;display:inline-block;background:rgb(var(--ok));flex:none}.status-ok i{background:rgb(var(--ok))}.status-warn i{background:rgb(var(--warn))}.status-danger i{background:rgb(var(--danger))}.panel{border:var(--border) solid rgb(var(--line));background:rgb(var(--surface));position:relative}.panel:before,.device-frame:before{content:"";position:absolute;width:6px;height:6px;top:-1px;left:-1px;border-top:2px solid rgb(var(--accent));border-left:2px solid rgb(var(--accent))}.panel:after{pointer-events:none}.panel-heading{min-height:32px;background:rgb(var(--sunken));border-bottom:var(--border) solid rgb(var(--line));display:flex;align-items:center;justify-content:space-between;gap:12px;padding:4px 10px}.panel-heading>span:last-child{font-size:10px;color:rgb(var(--ink-muted))}.panel-action{display:flex;align-items:center;gap:5px}.panel-body{padding:12px}.panel-body p{margin:5px 0 12px;color:rgb(var(--ink-muted));font-size:11px}.table-scroll{overflow:auto}.data-table{width:100%;border-collapse:collapse;text-align:left;font-size:11px}.data-table th{height:28px;padding:4px 10px;background:rgb(var(--sunken));color:rgb(var(--ink-muted));font:10px var(--font-mono);letter-spacing:.04em}.data-table td{padding:8px 10px;border-top:var(--border) solid rgb(var(--line));vertical-align:middle}.data-table tbody tr:hover{background:rgb(var(--bg))}.data-table strong,.row-subtitle{display:block}.row-subtitle{margin-top:3px;color:rgb(var(--ink-muted));font:10px var(--font-mono)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10;display:grid;place-items:center}.dialog,.sheet{width:min(480px,calc(100vw - 24px));border:var(--border) solid rgb(var(--line));background:rgb(var(--surface));padding:12px;box-shadow:0 8px 24px rgb(var(--ink) / .18)}.sheet{margin-left:auto;height:100%;width:min(400px,90vw)}.dialog h2,.sheet h2{font-size:16px}.dialog-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}.auth-panel{max-width:420px;margin:40px auto}.auth-form{display:grid;gap:6px;margin-top:12px}.auth-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:8px}.auth-link{color:rgb(var(--ink));font-size:11px;text-decoration:underline}.toolbar{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}.toolbar .input{min-width:200px}.bulk-bar{display:flex;align-items:center;gap:8px;padding:8px 10px;border:var(--border) solid rgb(var(--line));background:rgb(var(--surface));margin-bottom:12px}.bulk-bar>span:first-child{margin-right:auto;font-size:11px}.row-clickable{cursor:pointer}.class-mark{margin-right:4px}.detail-status{display:flex;align-items:center;gap:8px;margin:8px 0;flex-wrap:wrap}.detail-section{margin-top:12px;border-top:var(--border) solid rgb(var(--line));padding-top:8px}.detail-note{color:rgb(var(--ink-muted));font-size:11px}.kv{display:grid;grid-template-columns:120px 1fr;gap:2px 8px;margin:6px 0;font-size:11px}.kv dt{color:rgb(var(--ink-muted))}.command-row{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0}.audit-list{list-style:none;margin:6px 0;padding:0;display:grid;gap:4px;font-size:11px}.detail-danger{display:flex;align-items:center;gap:8px;margin-top:12px;flex-wrap:wrap}.detail-danger span{font-size:11px;color:rgb(var(--ink-muted))}.payload-view{max-height:320px;overflow:auto;background:rgb(var(--sunken));border:var(--border) solid rgb(var(--line));padding:8px;font:11px var(--font-mono);white-space:pre-wrap;word-break:break-word}.deploy-devices{display:grid;gap:4px;margin:10px 0;border:var(--border) solid rgb(var(--line));padding:8px}.deploy-device-row{display:flex;align-items:center;gap:8px;font-size:11px}.deploy-device-row span:first-of-type{margin-right:auto}.deploy-review{border-top:var(--border) solid rgb(var(--line));padding-top:10px;margin-top:10px}.deploy-review p{color:rgb(var(--ink-muted));font-size:11px;margin:4px 0 10px}.settings-form{display:grid;gap:6px;max-width:520px}.settings-actions{margin-top:10px}.colour-row{display:flex;align-items:center;gap:8px}.colour-swatch{width:28px;height:28px;border:var(--border) solid rgb(var(--line));flex:none}.drop-zone{border:1px dashed rgb(var(--line));padding:16px;margin-bottom:12px;text-align:center;color:rgb(var(--ink-muted));font-size:11px}.drop-zone-active{border-color:rgb(var(--accent));background:rgb(var(--sunken))}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.upload-list{list-style:none;margin:0 0 12px;padding:0;display:grid;gap:4px;font-size:11px}.upload-list li{display:flex;align-items:center;gap:8px;justify-content:space-between;border:var(--border) solid rgb(var(--line));padding:4px 8px}.badge.danger{border-color:rgb(var(--danger));color:rgb(var(--danger))}.media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;margin:0}.media-card{margin:0;border:var(--border) solid rgb(var(--line));background:rgb(var(--surface));display:grid;grid-template-rows:120px auto}.media-thumb{border:0;border-bottom:var(--border) solid rgb(var(--line));background:rgb(var(--sunken));padding:0;display:grid;place-items:center;overflow:hidden}.media-thumb img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.media-video-mark{font:11px var(--font-mono);color:rgb(var(--ink-muted))}.media-card figcaption{padding:8px;display:grid;gap:4px;font-size:11px}.media-card figcaption strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.media-preview{width:100%;max-height:360px;-o-object-fit:contain;object-fit:contain;background:rgb(var(--sunken))}.tabs{display:flex;border-bottom:var(--border) solid rgb(var(--line))}.tab{border:0;border-bottom:2px solid transparent;background:transparent;padding:8px 12px}.tab.active{border-color:rgb(var(--accent))}.toast{position:fixed;right:16px;bottom:16px;background:rgb(var(--surface));border:var(--border) solid rgb(var(--line));padding:8px;z-index:20}.tooltip-wrap{position:relative}.tooltip-wrap [role=tooltip]{display:none;position:absolute;background:rgb(var(--ink));color:rgb(var(--bg));padding:4px;z-index:3}.tooltip-wrap:hover [role=tooltip],.tooltip-wrap:focus [role=tooltip]{display:block}.grid-empty,.empty-state{background-color:rgb(var(--surface));background-image:linear-gradient(to right,rgb(var(--line)) 1px,transparent 1px),linear-gradient(to bottom,rgb(var(--line)) 1px,transparent 1px);background-size:16px 16px}.grid-empty{grid-column:1 / -1;height:40px;opacity:.35}.empty-state{min-height:120px;padding:16px;background-size:16px 16px}.skeleton{display:block;height:12px;background:rgb(var(--sunken));border:var(--border) solid rgb(var(--line))}.device-frame{position:relative;border:var(--border) solid rgb(var(--line));background:rgb(var(--surface));padding:0}.device-frame iframe{display:block;width:100%;min-height:360px;border:0}.app-shell{min-height:100vh;display:flex;background:rgb(var(--bg));color:rgb(var(--ink))}.side-shell{width:56px;flex:none;border-right:var(--border) solid rgb(var(--line));display:flex;flex-direction:column;background:rgb(var(--surface))}.wordmark{height:40px;border-bottom:var(--border) solid rgb(var(--line));display:flex;align-items:center;justify-content:center;color:rgb(var(--ink));text-decoration:none;font:700 14px var(--font-mono)}.wordmark span{color:rgb(var(--accent))}.wordmark b{display:none;font-size:10px;margin-left:8px}.rail-toggle{height:32px;border:0;border-bottom:var(--border) solid rgb(var(--line));background:rgb(var(--sunken));color:rgb(var(--ink-muted));font:10px var(--font-mono)}.rail{display:flex;flex-direction:column;gap:2px;padding:8px 4px}.rail-item{min-height:36px;border:1px solid transparent;background:transparent;color:rgb(var(--ink-muted));display:flex;align-items:center;gap:12px;padding:4px 9px;text-align:left;font-size:11px}.rail-item.active{border-color:rgb(var(--line));background:rgb(var(--sunken));color:rgb(var(--ink))}.rail-index{color:rgb(var(--ink-muted))}.rail-label{display:none}.rail-footer{margin-top:auto;padding:8px 5px;display:grid;gap:8px;border-top:var(--border) solid rgb(var(--line))}.rail-footer .mono{display:none}.main-shell{min-width:0;flex:1}.topbar{height:40px;border-bottom:var(--border) solid rgb(var(--line));background:rgb(var(--surface));display:flex;align-items:center;justify-content:space-between;padding:0 16px}.theme-control{display:flex;align-items:center;gap:8px}.theme-control select{height:28px;border:var(--border) solid rgb(var(--line));border-radius:var(--radius);background:rgb(var(--surface));padding:0 8px;font:10px var(--font-mono)}.workspace-main{padding:16px;max-width:1440px;margin:0 auto}.page-header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.page-header h1{font-size:20px;letter-spacing:-.04em;margin:4px 0 0;font-weight:650}.metric-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:var(--border) solid rgb(var(--line));margin-bottom:16px}.metric{min-height:88px;padding:12px;border-right:var(--border) solid rgb(var(--line));display:flex;flex-direction:column;gap:5px}.metric:last-child{border:0}.metric strong{font:600 20px var(--font-mono)}.metric>span:last-child{font-size:10px;color:rgb(var(--ink-muted))}.work-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}.activity-readout{display:grid;grid-template-columns:auto 1fr;align-items:end;gap:8px}.activity-readout strong{font:600 24px var(--font-mono)}.activity-readout>span{font:10px var(--font-mono);color:rgb(var(--ink-muted));padding-bottom:4px}.rail-expanded{width:208px}.rail-expanded .rail-label,.rail-expanded~.rail-footer .mono{display:inline}.rail-expanded~.wordmark b{display:inline}.rail-expanded .rail-item{min-height:32px}.bottom-bar{display:none}@media (min-width: 1100px){.side-shell:has(.rail-expanded){width:208px}.side-shell:has(.rail-expanded) .wordmark{justify-content:flex-start;padding-left:12px}.side-shell:has(.rail-expanded) .wordmark b,.side-shell:has(.rail-expanded) .rail-label,.side-shell:has(.rail-expanded) .rail-footer .mono{display:inline}.side-shell:has(.rail-expanded) .rail-footer{padding:8px}}@media (max-width: 767px){.side-shell{display:none}.main-shell{padding-bottom:52px}.topbar{padding:0 12px}.workspace-main{padding:12px}.metric-row{grid-template-columns:repeat(2,minmax(0,1fr))}.metric:nth-child(2){border-right:0}.metric:nth-child(-n+2){border-bottom:var(--border) solid rgb(var(--line))}.work-grid{grid-template-columns:1fr}.bottom-bar{position:fixed;z-index:5;display:grid;grid-template-columns:repeat(4,1fr);height:48px;bottom:0;left:0;right:0;border-top:var(--border) solid rgb(var(--line));background:rgb(var(--surface))}.bottom-bar button{border:0;background:transparent;color:rgb(var(--ink-muted));display:grid;place-content:center;gap:2px;font-size:9px}.bottom-bar button span{font:9px var(--font-mono)}.bottom-bar button.active{color:rgb(var(--accent-ink));background:rgb(var(--accent))}.data-table th,.data-table td{padding:7px 6px}.data-table th:nth-child(3),.data-table td:nth-child(3){display:none}.page-header h1{font-size:18px}}
