:root{--bg:#f6f7f9;--panel:#fff;--panel-2:#f1f3f7;--line:#e2e6ed;--line-2:#cfd6e0;--text:#16202e;--muted:#5d6b80;--faint:#8a95a6;--accent:#0079a8;--accent-soft:#e6f3f9;--ok:#157f4a;--ok-soft:#e7f5ed;--warn:#8a5a00;--warn-soft:#fdf3e0;--bad:#b3261e;--bad-soft:#fdecea;--radius:10px;--radius-lg:14px;--shadow:0 1px 2px #1018280a, 0 1px 3px #1018280f;--shadow-lg:0 8px 24px #1018281a, 0 2px 6px #1018280f;--sidebar:236px;--mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;margin:0;font:15px/1.55 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1{letter-spacing:-.01em;margin:0 0 4px;font-size:24px}h2{letter-spacing:-.01em;margin:0 0 14px;font-size:19px}h3{margin:0 0 10px;font-size:15px}code{background:var(--panel-2);border:1px solid var(--line);font-family:var(--mono);border-radius:5px;padding:1px 5px;font-size:.9em}.boot{color:var(--muted);padding:48px}.shell{min-height:100vh}.sidebar{width:var(--sidebar);background:var(--panel);border-right:1px solid var(--line);z-index:20;flex-direction:column;padding:20px 14px 16px;display:flex;position:fixed;top:0;bottom:0;left:0}.brand{letter-spacing:-.015em;color:var(--text);margin-bottom:26px;padding:0 8px;font-size:17px;font-weight:650}.brand:hover{text-decoration:none}.nav{flex-direction:column;flex:1;gap:2px;display:flex}.nav a{color:var(--muted);border-radius:8px;align-items:center;gap:10px;padding:9px 10px;font-size:14.5px;font-weight:500;display:flex}.nav a:hover{background:var(--panel-2);color:var(--text);text-decoration:none}.nav a.nav-on{background:var(--accent-soft);color:var(--accent)}.nav-icon{stroke:currentColor;fill:none;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:18px;height:18px}.who{border-top:1px solid var(--line);margin-top:12px;padding:12px 10px 0;font-size:13px}.who-name{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-weight:550;overflow:hidden}.who-role{color:var(--faint);margin-bottom:8px;font-size:12.5px}.who-links{gap:14px;display:flex}.content{margin-left:var(--sidebar);max-width:1080px;padding:30px 32px 72px}.pagehead{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:22px;display:flex}.pagehead h1{margin:0}.pagehead .lede{color:var(--muted);margin:4px 0 0;font-size:14px}.back{color:var(--muted);margin-bottom:8px;font-size:13px;display:inline-block}.section{margin-top:32px}button,a.button{font:inherit;border:1px solid var(--line-2);background:var(--panel);color:var(--text);cursor:pointer;border-radius:8px;padding:8px 15px;font-weight:500;box-shadow:0 1px 1px #10182808}a.button{line-height:1.25;text-decoration:none;display:inline-block}button:hover:not(:disabled),a.button:hover{background:var(--panel-2);border-color:var(--muted)}button:disabled{opacity:.5;cursor:default;box-shadow:none}button.primary,a.button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.primary:hover:not(:disabled),a.button.primary:hover{background:#00648b;border-color:#00648b}button.danger{color:var(--bad)}button.danger:hover:not(:disabled){background:var(--bad-soft);border-color:var(--bad)}button.link{box-shadow:none;color:var(--accent);background:0 0;border:none;padding:0;font-size:13px;font-weight:500}button.link:hover:not(:disabled){background:0 0;text-decoration:underline}button.small,a.button.small{padding:5px 10px;font-size:13px}input,select{font:inherit;border:1px solid var(--line-2);background:var(--panel);color:var(--text);border-radius:8px;padding:8px 11px}input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}input::placeholder{color:var(--faint)}label{color:var(--muted);flex-direction:column;gap:5px;font-size:13px;font-weight:500;display:flex}label.check{flex-direction:row;align-items:center;gap:7px;font-weight:400}.filters{gap:8px;display:flex}.search{min-width:260px}.row{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.formgrid{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));align-items:end;gap:14px;display:grid}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow);margin-bottom:18px;padding:20px}.cardhead{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.cardhead h2,.cardhead h3{margin:0}.muted{color:var(--muted)}.sub{color:var(--faint);font-size:12.5px}.sub.warn,.stale{color:var(--warn)}.fineprint{color:var(--faint);margin:14px 0 0;font-size:12.5px}.error,.notice,.success{border:1px solid;border-radius:8px;margin:12px 0;padding:10px 13px;font-size:13.5px}.error{background:var(--bad-soft);color:#8c1d18;border-color:#f3c4c0}.notice{background:var(--accent-soft);color:#044f6e;border-color:#b9dced}.success{background:var(--ok-soft);color:#0e5c35;border-color:#b8e0c8}.banner{background:var(--warn-soft);color:#6b4700;padding:11px 32px 11px calc(var(--sidebar) + 32px);border-bottom:1px solid #f0dcb4;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;font-size:13.5px;display:flex}.banner a{color:#6b4700;white-space:nowrap;font-weight:600;text-decoration:underline}.warn{color:var(--warn)}.ok{color:var(--ok)}.code-input{letter-spacing:10px;text-align:center;font-variant-numeric:tabular-nums;font-size:26px;font-family:var(--mono)}.qr{border:1px solid var(--line);background:#fff;border-radius:8px;margin:18px auto;padding:8px;display:block}.secret{font-family:var(--mono);letter-spacing:1px;text-align:center;background:var(--panel-2);border:1px solid var(--line);-webkit-user-select:all;user-select:all;border-radius:8px;padding:11px;font-size:15px}.codes{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:8px;margin:16px 0;padding:0;list-style:none;display:grid}.codes li{font-family:var(--mono);background:var(--panel-2);border:1px solid var(--line);text-align:center;-webkit-user-select:all;user-select:all;border-radius:8px;padding:9px 10px;font-size:14px}.linkish{box-shadow:none;font:inherit;color:var(--accent);cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.linkish:hover:not(:disabled){background:0 0}@media print{.sidebar,.banner,.row,.fineprint{display:none!important}.content{margin-left:0}body,.card{box-shadow:none!important;background:#fff!important}}.empty{text-align:center;color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);padding:60px 20px}.empty h2{color:var(--text)}.tablewrap{border-radius:var(--radius-lg);overflow-x:auto}.grid{border-collapse:separate;border-spacing:0;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);width:100%;min-width:640px;box-shadow:var(--shadow);overflow:hidden}.grid th{text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--faint);background:var(--panel-2);border-bottom:1px solid var(--line);white-space:nowrap;padding:11px 16px;font-size:11.5px;font-weight:600}.grid td{border-bottom:1px solid var(--line);vertical-align:top;padding:13px 16px}.grid tbody tr:last-child td{border-bottom:none}.grid tbody tr:hover td{background:#fafbfd}.grid td.actions{text-align:right;white-space:nowrap}.grid td.actions button{margin-left:6px}.grid.dim{opacity:.65}.pager{align-items:center;gap:14px;margin-top:16px;display:flex}.pill{white-space:nowrap;border:1px solid;border-radius:999px;padding:2px 9px;font-size:11.5px;font-weight:550;display:inline-block}.pill-ok{color:var(--ok);background:var(--ok-soft);border-color:#b8e0c8}.pill-warn{color:var(--warn);background:var(--warn-soft);border-color:#f0dcb4}.pill-bad{color:var(--bad);background:var(--bad-soft);border-color:#f3c4c0}.pill-plain{color:var(--muted);border-color:var(--line-2);background:var(--panel-2)}.people{margin:0;padding:0;list-style:none}.people li{border-bottom:1px solid var(--line);justify-content:space-between;gap:16px;padding:9px 0;display:flex}.people li:last-child{border-bottom:none}.device{border-bottom:1px solid var(--line);grid-template-columns:1.4fr 1fr 1.2fr auto;align-items:start;gap:16px;padding:16px 0;display:grid}.device:last-child{border-bottom:none}.device-name{font-weight:550}.device-state,.device-cached,.device-controls{flex-direction:column;gap:5px;display:flex}.device-controls{flex-flow:wrap;align-items:center}.reason{width:180px;font-size:13px}@media (width<=860px){.sidebar{border-right:none;border-bottom:1px solid var(--line);flex-flow:wrap;align-items:center;gap:16px;width:auto;padding:12px 16px;position:static}.brand{margin-bottom:0}.nav{flex-flow:wrap;gap:4px}.who{border-top:none;margin-top:0;margin-left:auto;padding:0}.who-role{display:none}.content{margin-left:0;padding:22px 16px 56px}.banner{padding:11px 16px}.device{grid-template-columns:1fr}}.signin{background:radial-gradient(1000px 500px at 50% -10%, #e9f2f7 0%, transparent 70%), var(--bg);place-items:center;min-height:100vh;padding:24px;display:grid}.signin-card{width:100%;max-width:400px;box-shadow:var(--shadow-lg);flex-direction:column;gap:15px;margin:0;padding:30px;display:flex}.signin-card h1{text-align:center;margin:0}.signin-card p{margin:0}.signin-legal{color:var(--faint);text-align:center;margin:2px 0 0;font-size:12.5px;line-height:1.5}.grantform .row{margin-top:14px}.modal-backdrop{z-index:40;background:#10182857;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.modal{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:460px;max-height:calc(100vh - 48px);padding:18px 20px 20px;overflow-y:auto}.modal.tall{flex-direction:column;max-width:520px;height:min(76vh,680px);display:flex;overflow:hidden}.modal-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.modal-head h2{margin:0;font-size:17px}.modal-foot{border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px;padding-top:14px;display:flex}.color-current{align-items:center;gap:12px;margin-bottom:14px;display:flex}.color-chip.lg{border:1px solid var(--line-2);border-radius:10px;width:52px;height:52px;display:block}.swatches{grid-template-columns:repeat(auto-fill,minmax(38px,1fr));gap:8px;display:grid}.swatch{border:1px solid var(--line-2);height:38px;box-shadow:none;border-radius:8px;padding:0}.swatch.on{box-shadow:0 0 0 2px var(--panel), 0 0 0 4px var(--accent)}.color-fine{flex-wrap:wrap;align-items:flex-end;gap:16px;display:flex}.color-fine label{color:var(--muted);flex-direction:column;gap:5px;font-size:13px;display:flex}.color-fine input[type=color]{cursor:pointer;width:64px;height:36px;padding:2px}.hexfield{border:1px solid var(--line-2);background:var(--panel);border-radius:8px;align-items:center;display:flex;overflow:hidden}.hexhash{color:var(--faint);font-family:var(--mono);padding:0 2px 0 9px}.hexfield input{width:10ch;font-family:var(--mono);text-transform:lowercase;border:none;border-radius:0;padding-left:1px;padding-right:6px}.ledstrip{flex-wrap:wrap;gap:6px;margin:14px 0 10px;display:flex}.led{border:1px solid var(--line-2);border-radius:50%;width:30px;height:30px;padding:0;box-shadow:inset 0 0 0 1px #ffffff59}.led.off{border:1px dashed var(--line-2);box-shadow:none;background:var(--panel-2)!important}.led.selected{box-shadow:0 0 0 2px var(--panel), 0 0 0 4px var(--accent)}.house{max-width:60%;margin-inline:auto}.house-frame{border-radius:var(--radius-lg);--house-led:max(5px, 1.54cqw);--house-glow:max(7px, 2.56cqw);background:#0d1117;width:100%;position:relative;overflow:hidden;container-type:inline-size}.house-photo{object-fit:contain;width:100%;height:100%;display:block}.house-led{width:var(--house-led);height:var(--house-led);pointer-events:none;border-radius:50%;position:absolute;transform:translate(-50%,-50%)}.grid th.looks{width:224px}.swatchdots{vertical-align:middle;align-items:center;gap:3px;display:inline-flex}.swatchdot{border-radius:50%;flex:none;width:8px;height:8px;box-shadow:inset 0 0 0 1px #0f172a1f}.picklist{flex:auto;margin:10px -6px 0;padding:0 6px;overflow-y:auto}.picklist.short{flex:none;max-height:168px}.pickrow{text-align:left;border:none;border-bottom:1px solid var(--line);width:100%;box-shadow:none;background:0 0;border-radius:0;justify-content:space-between;align-items:center;gap:12px;padding:10px 6px;display:flex}.pickrow.on{background:var(--accent-soft);color:var(--accent);font-weight:600}.small-text{font-size:12px}.pad{padding:14px 6px}.slider{margin:14px 0;display:block}.slider-top{color:var(--muted);justify-content:space-between;align-items:baseline;margin-bottom:4px;font-size:13px;display:flex}.slider input[type=range]{width:100%;accent-color:var(--accent)}.field{margin:14px 0}.field-label{color:var(--muted);margin-bottom:5px;font-size:13px;display:block}.rowbutton{text-align:left;background:var(--panel);justify-content:space-between;align-items:center;gap:12px;width:100%;padding:10px 12px;display:flex}.steprow{align-items:center;gap:12px;display:flex}.steprow button{width:34px;padding:6px 0;font-size:17px;line-height:1}.check{align-items:center;gap:8px;margin:10px 0;font-size:14px;display:flex}.chips{flex-wrap:wrap;gap:8px;display:flex}.chip{border-radius:999px;padding:6px 12px;font-size:13px}.chip.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.crumbs{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:14px;font-size:13px;display:flex}.crumb{box-shadow:none;color:var(--accent);background:0 0;border:none;padding:0;font-size:13px}.crumb:hover{background:0 0;text-decoration:underline}.crumb.here{color:var(--text);font-weight:600}.crumb-sep{color:var(--faint)}.catgrid{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px;margin-top:12px;display:grid}.cattile{text-align:left;flex-direction:column;align-items:flex-start;gap:3px;padding:12px 14px;display:flex}.cattile-icon{font-size:20px;line-height:1.1}.cattile-title{font-weight:600}.cattile-count{font-size:12px}.cardhead{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;display:flex}.rowactions{flex-wrap:wrap;gap:8px;display:flex}.actionbar{z-index:5;background:var(--bg);box-shadow:0 -1px 0 var(--line);flex-wrap:wrap;align-items:center;gap:12px;margin-top:4px;padding:14px 0;display:flex;position:sticky;bottom:0}.error.inline{margin:6px 0 0;padding:5px 8px;font-size:12px}.newcat{display:block}
