@font-face{font-family:Outfit Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/outfit-latin-ext-wght-normal-DdQaqQDo.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Outfit Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/outfit-latin-wght-normal-Bc-8i84L.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root,:root[data-theme=dark]{color-scheme:dark;--bg: #09090b;--bg-elevated: #111113;--surface: rgba(255, 255, 255, .045);--surface-strong: #1a1a1d;--surface-on: rgba(225, 29, 46, .16);--stroke: rgba(255, 255, 255, .08);--stroke-strong: rgba(255, 255, 255, .16);--text: #f6f3ef;--text-muted: #a8a29e;--text-faint: #78716c;--accent: #e11d2e;--accent-text: #ffc1c7;--accent-contrast: #ffffff;--on: #f6f3ef;--off: #78716c;--ok: #8dce9a;--warning: #e6b15c;--danger: #ff6b6b;--shadow: 0 18px 50px rgba(0, 0, 0, .35);--tabbar: rgba(12, 12, 14, .86);--glow: rgba(225, 29, 46, .18);--artwork-a: #3a1020;--artwork-b: #12080c}:root[data-theme=light]{color-scheme:light;--bg: #f4f1ec;--bg-elevated: #fffdfb;--surface: rgba(255, 255, 255, .88);--surface-strong: #ffffff;--surface-on: rgba(159, 18, 57, .1);--stroke: rgba(28, 25, 23, .08);--stroke-strong: rgba(28, 25, 23, .16);--text: #1c1917;--text-muted: #57534e;--text-faint: #78716c;--accent: #9f1239;--accent-text: #9f1239;--accent-contrast: #ffffff;--on: #1c1917;--off: #a8a29e;--ok: #157a3a;--warning: #92400e;--danger: #b42318;--shadow: 0 16px 40px rgba(60, 40, 30, .08);--tabbar: rgba(255, 253, 251, .9);--glow: rgba(159, 18, 57, .08);--artwork-a: #f1d5d8;--artwork-b: #efe7df}@media(prefers-color-scheme:light){:root[data-theme=system]{color-scheme:light;--bg: #f4f1ec;--bg-elevated: #fffdfb;--surface: rgba(255, 255, 255, .88);--surface-strong: #ffffff;--surface-on: rgba(159, 18, 57, .1);--stroke: rgba(28, 25, 23, .08);--stroke-strong: rgba(28, 25, 23, .16);--text: #1c1917;--text-muted: #57534e;--text-faint: #78716c;--accent: #9f1239;--accent-text: #9f1239;--accent-contrast: #ffffff;--on: #1c1917;--off: #a8a29e;--ok: #157a3a;--warning: #92400e;--danger: #b42318;--shadow: 0 16px 40px rgba(60, 40, 30, .08);--tabbar: rgba(255, 253, 251, .9);--glow: rgba(159, 18, 57, .08);--artwork-a: #f1d5d8;--artwork-b: #efe7df}}:root{--font: "Outfit Variable", "Outfit", "Avenir Next", "Segoe UI", sans-serif;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--radius-sm: 12px;--radius-md: 22px;--radius-lg: 28px;--control: 44px;--icon-sm: 18px;--icon-md: 24px;--icon-lg: 32px;--motion-fast: .14s;--motion: .22s;--motion-slow: .42s;--shadow-card: var(--shadow);--row: 112px;--safe-top: env(safe-area-inset-top);--safe-bottom: env(safe-area-inset-bottom)}@media(prefers-reduced-motion:reduce){:root{--motion-fast: 0ms;--motion: 0ms;--motion-slow: 0ms}}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;font-family:var(--font);background:radial-gradient(900px 420px at 50% -10%,var(--glow),transparent 60%),var(--bg);color:var(--text);letter-spacing:-.011em}button,input,select{font:inherit;color:inherit}a{color:inherit}button{cursor:pointer}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.j-skip{position:absolute;left:12px;top:-40px;background:var(--surface-strong);padding:8px 12px;z-index:5}.j-skip:focus{top:12px}.j-splash,.j-onboard,.j-legal{min-height:100dvh;display:grid;place-items:center;padding:calc(32px + var(--safe-top)) 20px calc(32px + var(--safe-bottom))}.j-logo-plate{width:88px;height:88px;border-radius:26px;overflow:hidden;background:#000;box-shadow:var(--shadow)}.j-logo-plate img{width:100%;height:100%;object-fit:cover;display:block}.j-onboard-card,.j-legal-card,.j-settings-card,.j-sheet,.j-dialog{width:min(440px,100%);display:grid;gap:16px}.j-onboard h1,.j-legal h1,.j-sheet h2,.j-dialog h2{font-size:clamp(2rem,4vw,2.7rem);line-height:1.02;margin:0;font-weight:560;letter-spacing:-.04em}.j-lead{margin:0;color:var(--text-muted);font-size:1.05rem;line-height:1.45}.j-stack{display:grid;gap:10px}.j-button,.j-button-secondary,.j-button-quiet{min-height:var(--control);border-radius:999px;border:0;padding:0 18px;display:inline-flex;align-items:center;justify-content:center;gap:8px}.j-button{background:var(--accent);color:var(--accent-contrast)}.j-button-secondary,.j-button-quiet{background:transparent;border:1px solid var(--stroke-strong)}.j-button-quiet{border:0;color:var(--text-muted)}.j-field{display:grid;gap:6px}.j-field span{font-size:.82rem;color:var(--text-muted)}.j-field input,.j-field select,.j-search{min-height:var(--control);border-radius:14px;border:1px solid var(--stroke-strong);background:var(--bg-elevated);padding:0 14px}.j-error{color:var(--danger);margin:0}.j-advanced{color:var(--text-muted)}.j-advanced summary{min-height:44px;display:grid;align-items:center;cursor:pointer}.j-shell{min-height:100dvh;display:grid;grid-template-columns:1fr}.j-sidebar{display:none;padding:calc(22px + var(--safe-top)) 16px 22px;gap:18px;align-content:start;border-right:1px solid var(--stroke)}.j-brand{display:flex;gap:12px;align-items:center;padding:0 8px}.j-brand .j-logo-plate{width:42px;height:42px;border-radius:14px;box-shadow:none}.j-brand strong{display:block;font-size:1rem}.j-brand small,.j-kicker,.j-card-kicker,.j-status{color:var(--text-muted);font-size:.78rem}.j-nav-button,.j-dash-link{width:100%;text-align:left;border:0;background:transparent;min-height:42px;border-radius:12px;padding:0 12px;display:flex;gap:10px;align-items:center;color:var(--text-muted)}.j-nav-button[aria-current=page],.j-dash-link[aria-current=page],.j-tab[aria-current=page]{color:var(--text);background:var(--surface-on)}.j-main{min-width:0;padding:calc(18px + var(--safe-top)) 16px calc(108px + var(--safe-bottom))}.j-top{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:18px}.j-top h1{margin:0;font-size:clamp(1.7rem,3vw,2.3rem);letter-spacing:-.045em;font-weight:560}.j-actions{display:flex;gap:8px;align-items:center}.j-status{display:inline-flex;align-items:center;gap:6px;min-height:32px}.j-dot{width:8px;height:8px;border-radius:99px;background:var(--warning)}.j-dot[data-state=connected]{background:var(--ok)}.j-dot[data-state=offline],.j-dot[data-state=unavailable],.j-dot[data-state=authentication_required]{background:var(--danger)}.j-banner{margin-bottom:14px;padding:12px 14px;border-radius:16px;background:var(--surface);border:1px solid var(--stroke);color:var(--text-muted)}.j-grid{display:grid;grid-template-columns:repeat(var(--cols),minmax(0,1fr));grid-auto-rows:var(--row);gap:12px}.j-card{position:relative;height:100%;min-width:0;border-radius:var(--radius-md);background:var(--surface);border:1px solid var(--stroke);box-shadow:var(--shadow-card);overflow:hidden;display:flex}.j-card[data-on=true]{background:linear-gradient(180deg,var(--surface-on),var(--surface) 55%)}.j-card[data-stale=true]{opacity:.72}.j-card-main,.j-card-more{border:0;background:transparent;text-align:left}.j-card-main{flex:1;min-width:0;padding:14px;display:flex;flex-direction:column;gap:10px;align-items:flex-start}.j-card-more{position:absolute;top:8px;right:8px;width:36px;height:36px;border-radius:999px;color:var(--text-muted)}.j-icon-well{width:38px;height:38px;border-radius:13px;display:grid;place-items:center;background:#ffffff0d;color:var(--text)}.j-card[data-on=true] .j-icon-well{background:var(--accent);color:#fff}.j-card-copy{display:grid;gap:2px;min-width:0}.j-card-copy strong,.j-room-name{font-size:1.05rem;font-weight:560;letter-spacing:-.03em}.j-card[data-kind=room] .j-card-main,.j-card[data-kind=climate] .j-card-main{justify-content:space-between}.j-card[data-kind=climate] .j-card-state{font-size:1.8rem;letter-spacing:-.05em;color:var(--text)}.j-card-state{color:var(--text-muted);font-size:.92rem}.j-card[data-featured=true] .j-card-main{padding:0}.j-artwork{height:58%;width:100%;background:linear-gradient(160deg,transparent,rgba(0,0,0,.45)),var(--art, linear-gradient(145deg, var(--artwork-a), var(--artwork-b)));background-size:cover;background-position:center;display:flex;align-items:flex-end;padding:12px}.j-artwork span{color:#fff;font-weight:560}.j-media-copy{padding:12px 14px 14px;display:grid;gap:2px}.j-transport{display:flex;gap:8px}.j-transport button,.j-chip,.j-seg button{min-width:44px;min-height:36px;border-radius:999px;border:1px solid var(--stroke);background:var(--bg-elevated)}.j-slider{width:100%;accent-color:var(--accent)}.j-room-lines{display:grid;gap:2px;color:var(--text-muted);font-size:.92rem}.j-edit-chrome{position:absolute;inset:auto 8px 8px;display:flex;justify-content:space-between;pointer-events:none}.j-edit-chrome button,.j-resize{pointer-events:auto;width:36px;height:36px;border-radius:12px;border:0;background:var(--bg-elevated)}.j-card.is-editing{outline:1px dashed var(--stroke-strong)}.j-tabbar{position:fixed;left:0;right:0;bottom:0;display:grid;grid-template-columns:repeat(4,1fr);padding:6px 8px calc(6px + var(--safe-bottom));background:var(--tabbar);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border-top:1px solid var(--stroke);z-index:3}.j-tab{min-height:52px;border:0;background:transparent;color:var(--text-muted);display:grid;justify-items:center;align-content:center;gap:2px;font-size:.72rem}.j-sheet-backdrop,.j-dialog-backdrop{position:fixed;inset:0;background:#00000075;display:grid;align-items:end;justify-items:center;z-index:6;padding:12px}.j-dialog-backdrop{align-items:center}.j-sheet,.j-dialog{width:min(560px,100%);max-height:min(86dvh,820px);overflow:auto;background:var(--bg-elevated);border-radius:var(--radius-lg);padding:18px 16px calc(18px + var(--safe-bottom));box-shadow:var(--shadow)}.j-chips{display:flex;gap:8px;overflow:auto;padding-bottom:4px}.j-chips button[aria-pressed=true]{background:var(--accent);color:#fff;border-color:transparent}.j-result{width:100%;min-height:64px;border:0;border-bottom:1px solid var(--stroke);background:transparent;display:flex;justify-content:space-between;gap:12px;align-items:center;text-align:left}.j-vlist{max-height:52dvh;overflow:auto;position:relative}.j-toast{position:fixed;left:50%;bottom:calc(92px + var(--safe-bottom));transform:translate(-50%);background:var(--text);color:var(--bg);border-radius:999px;padding:12px 16px;z-index:7;display:flex;gap:12px;align-items:center}.j-list{display:grid;gap:10px}.j-list a,.j-list button.j-row{text-decoration:none;color:inherit;background:var(--surface);border:1px solid var(--stroke);border-radius:18px;min-height:72px;padding:12px 14px;display:flex;justify-content:space-between;align-items:center;gap:12px}.j-settings{display:grid;gap:18px;align-items:start}.j-settings nav{display:grid;gap:2px}.j-settings nav a{text-decoration:none;border-radius:12px;padding:8px 10px}.j-settings nav a[aria-current=page]{background:var(--surface-on);color:var(--accent-text)}.j-prose a{color:var(--accent-text)}.j-clock{font-size:clamp(3rem,8vw,6rem);letter-spacing:-.06em;font-weight:520}.j-kiosk{padding:calc(24px + var(--safe-top)) 16px calc(24px + var(--safe-bottom))}.j-spark{width:100%;height:36px}.j-spark path{fill:none;stroke:var(--accent);stroke-width:2}.j-prose h1{font-size:2rem}.j-prose p,.j-prose li{color:var(--text-muted);line-height:1.5}.j-empty{padding:28px 8px;color:var(--text-muted);display:grid;gap:8px}@media(min-width:760px){:root{--row: 124px}.j-main{padding-left:28px;padding-right:28px}.j-settings{grid-template-columns:220px minmax(0,1fr)}.j-settings>.j-top{grid-column:1 / -1}}@media(min-width:1100px){.j-shell{grid-template-columns:260px 1fr}.j-sidebar{display:grid;position:sticky;top:0;height:100dvh}.j-tabbar{display:none}.j-main{padding-bottom:40px}.j-toast{bottom:28px}}@media(hover:hover){.j-card{transition:transform var(--motion) ease,border-color var(--motion) ease}.j-card:hover{transform:translateY(-2px);border-color:var(--stroke-strong)}}@media(prefers-reduced-motion:reduce){.j-card{transition:none}.j-card:hover{transform:none}}
