:root{color:#162138;font-synthesis:none;text-rendering:optimizelegibility;--blue:#3478f6;--blue-deep:#2865d8;--text-muted:#748199;--card:#ffffffd6;--line:#1b2e5414;background:#f4f7fd;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,Segoe UI,sans-serif}*{box-sizing:border-box}body{background:linear-gradient(#f8fbff 0%,#eef3fb 100%);min-width:320px;min-height:100vh;margin:0}button,input{font:inherit}button{-webkit-tap-highlight-color:transparent}.app-shell{width:min(1120px,100%);min-height:100vh;padding:max(22px, env(safe-area-inset-top)) max(22px, env(safe-area-inset-right)) max(26px, env(safe-area-inset-bottom)) max(22px, env(safe-area-inset-left));flex-direction:column;margin:0 auto;display:flex;position:relative;overflow:hidden}.ambient{filter:blur(4px);pointer-events:none;opacity:.64;z-index:0;border-radius:50%;position:fixed}.ambient-one{background:radial-gradient(circle,#5ba8ff38,#0000 68%);width:340px;height:340px;top:-110px;right:-90px}.ambient-two{background:radial-gradient(circle,#ffbc702b,#0000 68%);width:310px;height:310px;bottom:4%;left:-150px}.topbar,.zone-nav,.device-grid,.empty-state,footer{z-index:1;position:relative}.topbar{justify-content:space-between;align-items:center;gap:16px;display:flex}.brand{align-items:center;gap:11px;min-width:0;display:flex}.brand-logo{object-fit:cover;object-position:50% 0%;width:66px;height:34px;box-shadow:none;background:0 0;border-radius:0;flex:0 0 66px}h1{letter-spacing:-.04em;margin:0;font-size:25px}.brand-subtitle{color:#8490a4;margin-top:3px;font-size:12px;font-weight:650;display:block}.compact-weather{color:#677792;white-space:nowrap;background:#ffffffb3;border:1px solid #ffffffe0;border-radius:16px;align-items:center;gap:7px;margin-left:auto;padding:8px 11px;display:flex;box-shadow:0 8px 22px #2c487a12}.compact-weather-icon{color:#d28705;background:#fff0b9;border-radius:10px;place-items:center;width:28px;height:28px;display:grid}.compact-weather strong{color:#26354e;font-size:17px}.compact-weather>span:last-child{font-size:11px;font-weight:700}.status-strip{flex:none;align-items:center;gap:8px;display:flex}.status-indicator{isolation:isolate;border:1px solid var(--status-border);background:linear-gradient(150deg, #fff 8%, var(--status-surface) 100%);border-radius:19px;flex-direction:column;flex:0 0 52px;justify-content:center;align-items:center;width:52px;height:56px;display:flex;position:relative;overflow:hidden;box-shadow:0 10px 23px #344d751a,inset 0 1px #fffffffa}.status-indicator:before{z-index:-1;border-radius:inherit;background:radial-gradient(circle at 50% 45%, var(--status-glow), transparent 69%);content:"";position:absolute;inset:1px}.status-indicator.is-active{--status-border:#caecdc;--status-surface:#f0fbf5;--status-glow:#39cf8538;color:#119a62}.status-indicator.is-inactive{--status-border:#f4d4d7;--status-surface:#fff3f3;--status-glow:#ea5b6a29;color:#d64d5e}.status-glyph{z-index:1;filter:drop-shadow(0 2px 2px #2a574429);flex:none;position:relative}.presence-indicator small{z-index:1;letter-spacing:.015em;font-variant-numeric:tabular-nums;margin-top:-1px;font-size:11px;font-weight:800;line-height:12px;position:relative}.zone-nav{background:#ffffffa1;border:1px solid #1c335c12;border-radius:18px;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;width:100%;max-width:100%;margin:26px 0 24px;padding:7px;display:grid;box-shadow:0 10px 32px #2c487a0f}.zone-nav button{color:#7c879a;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:13px;justify-content:center;align-items:center;gap:8px;min-width:0;min-height:44px;padding:0 8px;font-size:13px;font-weight:700;transition:all .18s;display:flex}.zone-label-compact{display:none}.zone-nav button.active{color:#245fce;background:#fff;box-shadow:0 5px 18px #304a7b1a}.device-grid{grid-template-columns:repeat(3,1fr);gap:16px;width:100%;display:grid}.tv-summary-grid{grid-template-columns:minmax(0,.9fr) minmax(0,1.6fr);gap:16px;margin-bottom:16px;display:grid}.tv-summary-card{background:var(--card);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border:1px solid #ffffffe6;border-radius:26px;min-width:0;padding:19px 20px;box-shadow:0 16px 42px #273f6c17}.tv-summary-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.tv-summary-title{align-items:center;gap:11px;min-width:0;display:flex}.tv-summary-title h2{color:#202b43;letter-spacing:-.035em;text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:20px;overflow:hidden}.tv-summary-title span:not(.tv-summary-icon){color:#8a95a8;margin-top:3px;font-size:12px;font-weight:650;display:block}.tv-summary-icon{border-radius:16px;flex:0 0 46px;place-items:center;width:46px;height:46px;display:grid}.tv-summary-icon.bus{color:#2c71d5;background:linear-gradient(145deg,#dcecff,#c5dcff)}.tv-summary-icon.mountain{color:#43816b;background:linear-gradient(145deg,#e0f5ea,#c9e9d9)}.tv-summary-notice,.tv-summary-ticker{color:#64728a;margin:17px 0 10px;font-size:13px;line-height:1.45}.tv-departures{display:grid}.tv-departure{border-top:1px solid var(--line);color:#65748c;grid-template-columns:48px 40px minmax(0,1fr) auto;align-items:center;gap:8px;min-height:32px;font-size:12px;display:grid}.tv-departure strong{color:#27354d;font-size:13px}.tv-departure b{color:#4276c9;font-size:11px}.tv-departure span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tv-departure em{color:#5a73af;white-space:nowrap;font-size:11px;font-style:normal;font-weight:800}.tv-lift-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.tv-lift{border:1px solid var(--line);color:#52627a;background:#ffffff94;border-radius:13px;align-items:center;gap:7px;min-width:0;padding:8px 10px;font-size:12px;display:flex}.tv-lift>svg{color:#37a372;flex:none}.tv-lift>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tv-lift .facility-status{margin-left:auto}.login-shell{background:linear-gradient(160deg,#f8fbff,#e8eef9);place-items:center;min-height:100vh;padding:24px;display:grid}.login-card{text-align:center;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);background:#ffffffdb;border:1px solid #ffffffe6;border-radius:30px;width:min(370px,100%);padding:30px;box-shadow:0 25px 70px #28406c29}.login-logo{object-fit:cover;object-position:50% 0%;width:220px;height:112px;box-shadow:none;background:0 0;border-radius:0}.login-card h1{margin-top:20px;font-size:25px}.login-card>p{color:#8190a6;margin:5px 0 24px;font-size:13px;font-weight:650}.pin-form{text-align:left;gap:9px;display:grid}.pin-form label{color:#6e7e97;font-size:12px;font-weight:800}.pin-form input{color:#24334e;letter-spacing:.35em;text-align:center;background:#f8faff;border:1px solid #dce4ef;border-radius:14px;outline:0;width:100%;padding:12px 13px;font-size:20px}.pin-form input:focus{border-color:#76a4ef;box-shadow:0 0 0 3px #4780e121}.pin-form button{color:#fff;cursor:pointer;background:linear-gradient(145deg,#4d89ef,#326bd3);border:0;border-radius:14px;min-height:45px;margin-top:6px;font-size:13px;font-weight:800}.pin-form button:disabled{opacity:.5;cursor:default}.pin-error{color:#c34f5b!important;margin:14px 0 0!important;font-size:12px!important}.device-card{background:var(--card);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border:1px solid #ffffffe0;border-radius:26px;flex-direction:column;min-width:0;min-height:152px;padding:20px;transition:transform .2s,box-shadow .2s;display:flex;position:relative;box-shadow:0 16px 42px #273f6c17}.boiler-card{min-height:92px}.light-card{min-height:126px}.garage-card{min-height:92px}.device-card:hover{transform:translateY(-2px);box-shadow:0 20px 48px #273f6c1f}.device-card.is-unavailable{background:linear-gradient(145deg,#f8fafdf5,#eff3f8eb);border-color:#dce3ec}.device-card.is-unavailable .device-icon{filter:saturate(.45)}.card-top{justify-content:space-between;align-items:center;gap:10px;display:flex}.device-heading{align-items:center;gap:11px;min-width:0;display:flex}.device-heading h4{letter-spacing:-.035em;margin:0;font-size:20px;line-height:1.1}.device-icon{border-radius:17px;flex:0 0 50px;place-items:center;width:50px;height:50px;display:grid}.device-icon.water{color:#1672da;background:linear-gradient(145deg,#d9efff,#bcdfff)}.device-icon.sun{color:#d28705;background:linear-gradient(145deg,#fff1b8,#ffdc78)}.device-icon.garage.closed{color:#168e5a;background:linear-gradient(145deg,#dcf8e9,#bcebd2)}.device-icon.garage.open{color:#d84356;background:linear-gradient(145deg,#ffe5e9,#ffcbd3)}.device-icon.garage.unavailable{color:#758093;background:linear-gradient(145deg,#eef1f5,#dfe5ec)}.toggle{cursor:pointer;background:#dce2eb;border:0;border-radius:999px;width:50px;height:30px;padding:3px;transition:background .2s}.toggle span{background:#fff;border-radius:50%;width:24px;height:24px;transition:transform .2s cubic-bezier(.25,.8,.25,1);display:block;box-shadow:0 2px 7px #14233d40}.toggle.is-on{background:#3ec97d}.toggle.is-on span{transform:translate(20px)}.toggle:disabled{opacity:.55;cursor:wait}.dimmer-row{color:#d18b12;grid-template-columns:18px 1fr 40px;align-items:center;gap:9px;margin-top:14px;display:grid}.dimmer-row strong{color:#647187;text-align:right;font-size:12px}input[type=range]{--level:50%;appearance:none;background:linear-gradient(to right, #f2b544 var(--level), #e3e7ee var(--level));border-radius:999px;outline:none;width:100%;height:5px;margin:0}input[type=range]::-webkit-slider-thumb{appearance:none;cursor:pointer;background:#f1ad31;border:4px solid #fff;border-radius:50%;width:21px;height:21px;box-shadow:0 3px 10px #5a451640}input[type=range]::-moz-range-thumb{cursor:pointer;background:#f1ad31;border:4px solid #fff;border-radius:50%;width:13px;height:13px;box-shadow:0 3px 10px #5a451640}input[type=range]:disabled{opacity:.48;cursor:not-allowed}.garage-top{gap:7px}.garage-heading{flex:1;gap:9px}.garage-heading h4{white-space:nowrap}.garage-actions{flex:none;gap:5px;display:flex}.garage-actions button{color:#fff;cursor:pointer;background:linear-gradient(145deg,#6e65ea,#5148c7);border:0;border-radius:12px;justify-content:center;align-items:center;width:34px;height:38px;padding:0;display:flex;box-shadow:0 8px 17px #4d42bc2b}.garage-actions button:disabled{color:#9ba4b3;box-shadow:none;cursor:default;background:#ebedf2}.garage-progress{z-index:2;border-radius:inherit;color:#5148c7;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);text-align:center;background:#f8f9fff0;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:6px;display:flex;position:absolute;inset:0}.garage-progress svg{width:22px;height:22px;animation:1.2s linear infinite garage-spin}.garage-progress strong{font-size:14px}.garage-progress-track{background:#e0def9;border-radius:999px;width:min(190px,82%);height:5px;margin-top:2px;overflow:hidden}.garage-progress-track span{border-radius:inherit;background:linear-gradient(90deg,#928af5,#5148c7);width:42%;height:100%;animation:1.4s ease-in-out infinite alternate garage-progress;display:block}@keyframes garage-spin{to{transform:rotate(360deg)}}@keyframes garage-progress{0%{transform:translate(-100%)}to{transform:translate(240%)}}.sonos-card{grid-column:1/-1;min-height:0}.device-icon.sonos{color:#5551c9;background:linear-gradient(145deg,#eae9ff,#d7d4ff)}.sonos-group-status{color:#78849a;white-space:nowrap;background:#f0f3f8;border-radius:999px;padding:7px 10px;font-size:11px;font-weight:750}.sonos-group-status.joined{color:#4f4ac2;background:#eeecff}.sonos-content{grid-template-columns:minmax(0,1.35fr) minmax(240px,.8fr);gap:18px;margin-top:18px;display:grid}.sonos-player-panel,.sonos-group-panel{min-width:0}.sonos-room-switch{background:#eef1f8;border-radius:14px;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;padding:4px;display:grid}.sonos-room-switch button{color:#788399;cursor:pointer;background:0 0;border:0;border-radius:11px;min-width:0;min-height:38px;font-size:13px;font-weight:750}.sonos-room-switch button.active{color:#4542b3;background:#fff;box-shadow:0 3px 11px #363d771a}.sonos-now-playing{align-items:center;gap:13px;min-width:0;margin-top:16px;display:flex}.sonos-art{color:#fff;background:linear-gradient(145deg,#8d87f5,#5a53c7);border-radius:18px;flex:0 0 56px;place-items:center;width:56px;height:56px;display:grid;box-shadow:0 8px 19px #564fc12e}.sonos-track-text{flex-direction:column;gap:2px;min-width:0;display:flex}.sonos-track-text span{color:#7771c6;font-size:11px;font-weight:750}.sonos-track-text strong{color:#202a43;text-overflow:ellipsis;white-space:nowrap;font-size:18px;line-height:1.25;overflow:hidden}.sonos-track-text small{color:#8a95a8;text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.sonos-transport{justify-content:center;align-items:center;gap:10px;margin-top:13px;display:flex}.sonos-transport button,.sonos-volume button{color:#5b6480;cursor:pointer;background:#f0f2f9;border:0;border-radius:14px;flex:none;place-items:center;width:42px;height:42px;padding:0;display:grid}.sonos-transport .sonos-play{color:#fff;background:linear-gradient(145deg,#7971e7,#5149c8);border-radius:16px;width:48px;height:48px;box-shadow:0 8px 18px #524bc233}.sonos-transport button:disabled,.sonos-volume button:disabled{opacity:.45;cursor:not-allowed}.sonos-volume{grid-template-columns:42px minmax(0,1fr) 38px;align-items:center;gap:11px;margin-top:12px;display:grid}.sonos-volume button{background:0 0;width:42px;height:38px}.sonos-volume strong{color:#717d94;text-align:right;font-size:12px}.sonos-volume input[type=range]{background:linear-gradient(to right, #7770e3 var(--level), #e3e7ee var(--level))}.sonos-volume input[type=range]::-webkit-slider-thumb{background:#6b63d9}.sonos-volume input[type=range]::-moz-range-thumb{background:#6b63d9}.sonos-tv-hint{color:#8c97a8;margin:10px 0 0;font-size:11px;line-height:1.4}.sonos-group-panel{background:linear-gradient(160deg,#f7f7ff,#f9faff);border:1px solid #e7e8f9;border-radius:20px;flex-direction:column;padding:16px;display:flex}.sonos-panel-heading{color:#5955bd;align-items:center;gap:8px;font-size:14px;display:flex}.sonos-room-list{gap:7px;margin-top:13px;display:grid}.sonos-room-row{color:#34415a;align-items:center;gap:8px;min-height:28px;font-size:13px;font-weight:700;display:flex}.sonos-room-row small{color:#8b96a8;margin-left:auto;font-size:11px;font-weight:650}.sonos-room-dot{background:#b3bdcb;border-radius:50%;width:7px;height:7px}.sonos-room-dot.playing{background:#43c383;box-shadow:0 0 0 3px #43c3831f}.sonos-group-button{color:#fff;cursor:pointer;background:#615bd1;border:0;border-radius:13px;justify-content:center;align-items:center;gap:8px;width:100%;min-height:42px;margin-top:16px;padding:8px;font-size:12px;font-weight:750;display:flex}.sonos-group-button.separate{color:#5d56c1;background:#e9e8fb}.sonos-group-button:disabled{opacity:.48;cursor:not-allowed}.sonos-group-panel p{color:#919bad;margin:9px 1px 0;font-size:11px;line-height:1.4}.overview-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;width:100%;display:grid}.overview-card{background:var(--card);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border:1px solid #ffffffe6;border-radius:26px;min-width:0;padding:20px;box-shadow:0 16px 42px #273f6c17}.overview-card.wide{grid-column:1/-1}.overview-card-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.overview-title{align-items:center;gap:11px;min-width:0;display:flex}.overview-title h3{color:#202b43;letter-spacing:-.035em;margin:0;font-size:19px}.overview-title span:not(.overview-icon){color:#8a95a8;margin-top:3px;font-size:12px;font-weight:650;display:block}.overview-icon{border-radius:16px;flex:0 0 46px;place-items:center;width:46px;height:46px;display:grid}.overview-icon.weather{color:#d4860a;background:linear-gradient(145deg,#fff1b8,#ffdc78)}.overview-icon.bus{color:#2c71d5;background:linear-gradient(145deg,#dcecff,#c5dcff)}.overview-icon.mountain{color:#43816b;background:linear-gradient(145deg,#e0f5ea,#c9e9d9)}.overview-icon.house{color:#6362c8;background:linear-gradient(145deg,#e9e8ff,#d8d7fb)}.overview-muted-icon{color:#9aa5b7}.weather-hero{align-items:baseline;gap:11px;margin-top:17px;display:flex}.weather-hero strong{color:#17243b;letter-spacing:-.07em;font-size:43px;line-height:1}.weather-hero span{color:#60718c;font-size:14px;font-weight:700}.weather-meta{color:#8895a8;flex-wrap:wrap;gap:8px 13px;margin-top:9px;font-size:12px;display:flex}.forecast-list{gap:7px;margin-top:17px;display:grid}.forecast-row{border-top:1px solid var(--line);color:#687791;grid-template-columns:45px minmax(0,1fr) auto;align-items:center;gap:7px;padding-top:7px;font-size:12px;display:grid}.forecast-row strong{color:#35445d;white-space:nowrap;font-size:12px}.forecast-row em{color:#9ca7b7;font-style:normal;font-weight:650}.overview-notice{color:#64728a;margin:17px 0 11px;font-size:13px;font-weight:650}.bus-list{gap:1px;display:grid}.bus-row{border-top:1px solid var(--line);color:#66748c;grid-template-columns:48px minmax(0,1fr) auto;align-items:center;gap:8px;min-height:42px;font-size:12px;display:grid}.bus-row>strong{color:#27354d;font-size:13px}.bus-row>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bus-row>span b{color:#4276c9;margin-right:6px;font-size:11px}.bus-row>em{color:#5a73af;white-space:nowrap;font-size:11px;font-style:normal;font-weight:800}.facility-summary{color:#27825d;white-space:nowrap;background:#eaf8f0;border-radius:999px;padding:7px 10px;font-size:12px}.facility-ticker{color:#596a85;margin:17px 0 13px;font-size:14px;line-height:1.45}.facility-list{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;display:grid}.facility-chip{border:1px solid var(--line);color:#52627a;background:#ffffff94;border-radius:14px;align-items:center;gap:7px;min-width:0;padding:10px 11px;font-size:12px;display:flex}.facility-chip>svg{color:#37a372;flex:none}.facility-chip>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.facility-status{color:#3a9a70;white-space:nowrap;margin-left:auto;font-size:10px}.facility-status.closed{color:#d25d69}.facility-status.preparing{color:#b77b20}.facility-status.unknown{color:#8894a7}.overview-stale{color:#a27a2a;margin-top:11px;font-size:11px;font-weight:700;display:inline-block}.house-status-list{grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin-top:16px;display:grid}.house-status-list>div{color:#5f6e85;background:#f2f5fac7;border-radius:15px;align-items:center;gap:8px;min-width:0;padding:12px 13px;font-size:13px;display:flex}.house-status-list>div>svg{color:#6a7e9d;flex:none}.house-status-list span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.house-status-list strong{color:#34435d;white-space:nowrap;margin-left:auto;font-size:12px}.overview-empty{color:#8b97a9;margin:24px 0 4px;font-size:13px}.empty-state{text-align:center;background:#ffffff7a;border:1px dashed #3c578529;border-radius:28px;align-content:center;place-items:center;min-height:260px;padding:30px;display:grid}.empty-state div{color:#6481ad;background:#e7effa;border-radius:19px;place-items:center;width:58px;height:58px;display:grid}.empty-state h4{margin:15px 0 5px;font-size:20px}.empty-state p{color:#7f8b9e;max-width:330px;margin:0;font-size:13px;line-height:1.5}footer{color:#9aa4b4;justify-content:center;align-items:center;gap:7px;margin-top:auto;padding-top:26px;font-size:12px;display:flex}.toast{z-index:10;left:50%;bottom:max(25px, env(safe-area-inset-bottom));color:#fff;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#172136eb;border-radius:999px;padding:12px 18px;font-size:13px;font-weight:700;animation:.25s ease-out toast-in;position:fixed;transform:translate(-50%);box-shadow:0 12px 35px #141f3240}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,8px)}}@media (max-width:820px){.device-grid{grid-template-columns:repeat(2,1fr)}.sonos-content{grid-template-columns:1fr}.facility-list,.house-status-list{grid-template-columns:repeat(2,minmax(0,1fr))}.tv-summary-grid{grid-template-columns:1fr}}@media (max-width:700px){.zone-nav{gap:3px;padding:5px}.zone-nav button{flex-direction:column;gap:4px;min-height:62px;padding:5px 0;font-size:10px}.zone-label-full{display:none}.zone-label-compact{display:inline}}@media (max-width:590px){.app-shell{padding-left:16px;padding-right:16px}h1{font-size:23px}.brand-logo{flex-basis:54px;width:54px;height:28px}.brand-subtitle{max-width:180px;font-size:10px}.compact-weather{gap:5px;padding:7px 8px}.compact-weather>span:last-child{display:none}.status-strip{gap:6px}.status-indicator{border-radius:17px;flex-basis:47px;width:47px;height:51px}.zone-nav{margin:20px 0 24px}.device-grid,.overview-grid{grid-template-columns:1fr}.overview-card.wide{grid-column:auto}.device-card{border-radius:24px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
