:root{--bg: #0d1117;--card: #161b22;--line: #2a313c;--text: #e8edf2;--muted: #8b96a3;--cheap: #3fb950;--peak: #f0883e;--elec: #58a6ff;--gas: #d2a8ff;--car: #56d4c4;--off: #4b5563}*{box-sizing:border-box;margin:0}html,body{height:100%;background:var(--bg);color:var(--text)}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;user-select:none;overflow:hidden}button{font:inherit;color:inherit;background:none;border:0}#app{height:100%;display:flex;flex-direction:column;gap:16px;padding:24px 28px 14px}.clock{text-align:center}.time{font-size:112px;font-weight:200;letter-spacing:-2px;line-height:1;font-variant-numeric:tabular-nums}.date{font-size:24px;color:var(--muted);margin-top:6px}.screen{display:none;flex-direction:column;gap:16px;flex:1;min-height:0;overflow-y:auto}.screen.active{display:flex}.card{background:var(--card);border:1px solid var(--line);border-radius:22px;padding:18px 22px}.label{font-size:17px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}.label.strong{color:var(--text)}.label-row{display:flex;justify-content:space-between}.big{font-size:80px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums}.mid{font-size:38px;font-weight:600;font-variant-numeric:tabular-nums}.sub{font-size:18px;color:var(--muted);margin-top:6px;line-height:1.35}.k{font-size:17px;color:var(--muted);margin-bottom:4px}.split{display:flex;gap:16px}.split>div{flex:1}.rate-row{display:flex;align-items:center;justify-content:space-between}.band{font-size:24px;font-weight:700;letter-spacing:.1em;padding:8px 18px;border-radius:999px}.rate[data-band=cheap]{border-color:var(--cheap)}.rate[data-band=cheap] .big,.rate[data-band=cheap] .band{color:var(--cheap)}.rate[data-band=cheap] .band{background:#3fb95024}.rate[data-band=peak]{border-color:var(--peak)}.rate[data-band=peak] .big,.rate[data-band=peak] .band{color:var(--peak)}.rate[data-band=peak] .band{background:#f0883e24}.rate-row{gap:18px}.live-meta{margin-left:auto;text-align:right}.live-meta .sub{margin-top:0}#live-age.stale{color:var(--peak)}#spark{width:100%;height:90px;display:block;margin-top:12px}#spark .area{fill:#58a6ff29}#spark .ln{fill:none;stroke:var(--elec);stroke-width:2.5;vector-effect:non-scaling-stroke}#spark .slot{fill:#3fb9501f}#spark text{font-size:15px;fill:var(--muted)}.rate[data-band=cheap] #spark .ln{stroke:var(--cheap)}.rate[data-band=cheap] #spark .area{fill:#3fb95029}.rate[data-band=peak] #spark .ln{stroke:var(--peak)}.rate[data-band=peak] #spark .area{fill:#f0883e24}.alerts{display:flex;flex-direction:column;gap:10px}.alert{border-radius:18px;padding:14px 18px;background:#f0883e1a;border:1px solid var(--peak);display:flex;gap:14px;align-items:center}.alert.good{background:#3fb9501a;border-color:var(--cheap)}.alert-txt{flex:1}.alert-t{font-size:21px;font-weight:700}.alert-b{font-size:17px;color:var(--muted);margin-top:3px;line-height:1.3}.alert-x{font-size:17px;color:var(--muted);padding:10px 14px;border:1px solid var(--line);border-radius:12px}#chart{width:100%;height:200px;display:block}#chart .elec{fill:var(--elec)}#chart .gas{fill:var(--gas)}#chart .car{fill:var(--car)}#chart text{font-size:16px;text-anchor:middle;fill:var(--muted)}#chart .val{fill:var(--text);font-weight:600}.legend{display:flex;align-items:center;gap:8px;font-size:17px;color:var(--muted);margin-top:6px}.sw{width:14px;height:14px;border-radius:4px;display:inline-block;margin-left:6px}.sw.elec{background:var(--elec);margin-left:0}.sw.gas{background:var(--gas)}.sw.car{background:var(--car)}.right{margin-left:auto;color:var(--text)}.plugs{display:flex;flex-direction:column;gap:10px}.plug{display:flex;align-items:center;gap:16px;padding:14px 16px;border-radius:16px;background:#0f141b;border:1px solid var(--line)}.plug-main{flex:1;min-width:0}.plug-name{font-size:24px;font-weight:600}.plug-sub{font-size:16px;color:var(--muted);margin-top:2px}.plug-w{font-size:30px;font-weight:600;font-variant-numeric:tabular-nums;min-width:120px;text-align:right}.plug.off .plug-w,.plug.offline .plug-w{color:var(--muted);font-size:20px}.plug.offline{opacity:.55}.switch{width:76px;height:44px;border-radius:999px;background:var(--off);position:relative;flex:none}.switch:after{content:"";position:absolute;top:4px;left:4px;width:36px;height:36px;border-radius:50%;background:#fff;transition:left .2s}.switch.on{background:var(--cheap)}.switch.on:after{left:36px}.lock{font-size:15px;color:var(--muted);width:76px;text-align:center;line-height:1.2}.label.link{color:var(--elec);text-transform:none;letter-spacing:0;font-size:18px}.lights{display:grid;grid-template-columns:1fr 1fr;gap:10px}.light{border-radius:16px;background:#0f141b;border:1px solid var(--line);padding:12px 14px;display:flex;flex-direction:column;gap:10px}.light.on{background:#2a2414;border-color:#b8913a}.light.unreach{opacity:.5}.light-tap{text-align:left}.light-name{font-size:22px;font-weight:600}.light-state{font-size:16px;color:var(--muted);margin-top:2px}.light.on .light-state{color:#f0c46c}.light-bri{width:100%;height:36px;accent-color:#f0c46c}.tabs{display:flex;gap:10px;margin-top:auto}.tab{flex:1;padding:16px 0;border-radius:16px;background:var(--card);border:1px solid var(--line);font-size:22px;color:var(--muted)}.tab.active{color:var(--text);border-color:var(--elec)}.status{font-size:14px;color:var(--muted);text-align:center}.frame{position:fixed;inset:0;background:#000;z-index:10}.frame.hidden,.confirm.hidden{display:none}.stage{position:absolute;inset:0;overflow:hidden}.slide{position:absolute;inset:0;opacity:0;transition:opacity 1.8s ease;overflow:hidden}.slide.show{opacity:1}.slide img{position:absolute;display:block}.slide .fill{inset:0;width:100%;height:100%;object-fit:cover}.slide .backdrop{inset:-40px;width:calc(100% + 80px);height:calc(100% + 80px);object-fit:cover;filter:blur(28px) brightness(.55) saturate(1.2)}.slide .contain{left:0;top:50%;width:100%;height:auto;transform:translateY(-50%)}.slide.pair{display:flex;flex-direction:column;gap:6px;background:#000}.slide.pair .half{position:relative;flex:1;width:100%;min-height:0;object-fit:cover}.kb{animation:kb 22s ease-out forwards}.contain.kb{animation-name:kbc}@keyframes kb{0%{transform:scale(1.02) translate(0)}to{transform:scale(1.14) translate(var(--kx),var(--ky))}}@keyframes kbc{0%{transform:translateY(-50%) scale(1)}to{transform:translateY(-50%) scale(1.08) translate(var(--kx))}}.frame-shade{position:absolute;left:0;right:0;bottom:0;height:300px;background:linear-gradient(transparent,#000000a6);pointer-events:none}.frame-caption{position:absolute;left:32px;right:32px;bottom:168px;font-size:22px;color:#f1f4f8;text-shadow:0 2px 10px rgba(0,0,0,.8);letter-spacing:.02em}.frame.nophotos .stage,.frame.nophotos .frame-shade,.frame.nophotos .frame-caption{display:none}.frame-info{position:absolute;left:32px;right:32px;bottom:40px;text-shadow:0 2px 12px rgba(0,0,0,.7)}.frame-time{font-size:96px;font-weight:200;line-height:1;font-variant-numeric:tabular-nums}.frame-sub{font-size:24px;margin-top:8px;color:#dfe6ee}.frame.nophotos .frame-info,.frame.night .frame-info{top:50%;bottom:auto;transform:translateY(-50%);text-align:center}.frame.nophotos .frame-time{font-size:180px}.frame.night .frame-info{opacity:.28}.frame.night .frame-time{font-size:160px}.wx{font-size:22px;color:var(--muted);margin-top:4px;min-height:1.2em}.chips{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:8px}.chip{background:#2a2414;border:1px solid #b8913a;color:#f0c46c;border-radius:999px;padding:6px 14px;font-size:20px;font-variant-numeric:tabular-nums}.chip button{color:#f0c46c;margin-left:8px;font-size:18px}.np-row{display:flex;align-items:center;gap:16px}.np-logo{width:88px;height:88px;border-radius:16px;object-fit:cover;background:#0f141b}.np-name{font-size:32px;font-weight:600}.nowplaying.playing{border-color:var(--cheap)}.np-controls{display:flex;gap:10px;margin-top:16px}.vol-bar{height:8px;border-radius:4px;background:#0f141b;margin-top:12px;overflow:hidden}#vol-fill{height:100%;width:0;background:var(--elec);transition:width .2s}.stations{display:grid;grid-template-columns:1fr 1fr;gap:10px}.station{border-radius:14px;background:#0f141b;border:1px solid var(--line);padding:16px;font-size:20px;font-weight:600;text-align:left}.station.on{border-color:var(--cheap);color:var(--cheap)}.radio-search{display:flex;gap:10px;margin-top:12px}.radio-search input{flex:1;font:inherit;font-size:20px;padding:14px;border-radius:14px;border:1px solid var(--line);background:#0f141b;color:var(--text)}.radio-search .btn{flex:none;padding:0 22px}.btn.wide{width:100%;text-align:center;margin-bottom:8px}.ring{position:fixed;inset:0;z-index:40;background:#120d02;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:28px}.ring.hidden{display:none}.ring-icon{font-size:140px;animation:pulse 1s ease-in-out infinite}.ring-label{font-size:44px;font-weight:600;color:#f0c46c;text-align:center;padding:0 40px}.big-btn{flex:none;width:420px;padding:28px 0;font-size:34px}.tab.talk{display:flex;align-items:center;justify-content:center;gap:8px;color:#04111f;background:var(--elec);border-color:var(--elec);font-weight:700}.assist{position:fixed;inset:0;z-index:30;background:#05080ceb;display:flex;align-items:center;justify-content:center}.assist.hidden{display:none}.assist-box{width:680px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:22px}.orb{width:180px;height:180px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#9dd0ff,#3a7bd5 55%,#1b3a6b);box-shadow:0 0 60px #58a6ff73;transform:scale(calc(1 + var(--lvl, 0) * .35));transition:transform .08s linear}.assist.thinking .orb{animation:pulse 1.1s ease-in-out infinite}.assist.speaking .orb{background:radial-gradient(circle at 35% 35%,#c8ffd4,#3fb950 55%,#1d5c2a);box-shadow:0 0 60px #3fb95073;animation:pulse 1.6s ease-in-out infinite}@keyframes pulse{0%,to{transform:scale(.94)}50%{transform:scale(1.06)}}.assist-state{font-size:22px;color:var(--muted);letter-spacing:.06em;text-transform:uppercase}.assist-box{max-height:100%;padding:40px 0}.assist-log{width:100%;display:flex;flex-direction:column;gap:14px;max-height:620px;overflow:hidden;justify-content:flex-end;text-align:left;-webkit-mask-image:linear-gradient(transparent,#000 18%)}.msg{padding:14px 18px;border-radius:18px;max-width:88%;line-height:1.35}.msg.user{align-self:flex-end;background:#1d2633;color:#c9d4e0;font-size:24px;border-bottom-right-radius:6px}.msg.bot{align-self:flex-start;background:#12301c;color:#eafbee;font-size:30px;font-weight:500;border-bottom-left-radius:6px}.msg.note{align-self:center;color:var(--muted);font-size:20px}.assist-actions{display:flex;gap:14px;width:100%;margin-top:10px}.confirm{position:fixed;inset:0;background:#0009;z-index:20;display:flex;align-items:center;justify-content:center}.confirm-box{background:var(--card);border:1px solid var(--line);border-radius:22px;padding:28px;width:620px}.confirm-text{font-size:30px;font-weight:600;margin-bottom:24px}.confirm-actions{display:flex;gap:14px}.btn{flex:1;padding:18px 0;border-radius:14px;border:1px solid var(--line);font-size:22px}.btn.primary{background:var(--elec);color:#04111f;font-weight:700;border-color:var(--elec)}.sp-label{display:flex;align-items:center;gap:8px}.sp-dot{width:12px;height:12px;border-radius:50%;background:#1db954}.sp-account{margin-left:auto;text-transform:none;letter-spacing:0;color:var(--muted, #9aa4b2)}.btn.sp-connect{margin-top:12px;background:#1db954;border-color:#1db954;color:#04110a}.spotify.playing{border-color:#1db954}.sp-title{font-size:26px;line-height:1.15;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.sp-lists{margin-top:12px}.sp-lists .station{display:flex;align-items:center;gap:10px;padding:8px;font-size:17px;overflow:hidden}.sp-lists .station img{width:44px;height:44px;border-radius:8px;object-fit:cover;flex:none}.sp-lists .station span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sp-qr{background:#06120b}.sp-qr.hidden{display:none}.sp-qr-title{color:#e8ecf3}.sp-qr-code{background:#fff;padding:24px;border-radius:24px}.sp-qr-code svg{display:block;width:420px;height:420px}.sp-qr-sub{max-width:560px;text-align:center;font-size:20px}.blackout{position:fixed;inset:0;z-index:60;background:#000;cursor:none}.blackout.hidden{display:none}.clock{position:relative}.gear{position:absolute;top:4px;right:4px;width:48px;height:48px;border-radius:50%;background:#ffffff0f;border:1px solid var(--line);color:var(--muted, #9aa4b2);font-size:24px;opacity:.5}.gear:active{opacity:1}.settings{position:fixed;inset:0;z-index:50;background:#05080ceb;display:flex;align-items:center;justify-content:center}.settings.hidden{display:none}.settings-box{width:560px;max-width:92vw;background:#0f141b;border:1px solid var(--line);border-radius:20px;padding:24px;display:flex;flex-direction:column;gap:12px}.settings-title{font-size:26px;font-weight:700;margin-bottom:4px}.settings .btn.wide{text-align:left;padding:18px 20px;font-size:20px}.apps{display:grid;grid-template-columns:1fr 1fr;gap:10px}.apptile{display:flex;align-items:center;gap:12px;padding:16px;border-radius:14px;background:#0f141b;border:1px solid var(--line);font-size:20px;font-weight:600;text-align:left}.apptile .appicon{font-size:28px}.apptile.missing{opacity:.4}.sp-open{cursor:pointer;border-radius:12px}.sp-open:active{background:#11161d}[hidden]{display:none!important}body.web{overflow:auto;user-select:auto}body.web #app{height:auto;min-height:100%;max-width:1080px;margin:0 auto;padding:max(16px,env(safe-area-inset-top)) 16px max(20px,env(safe-area-inset-bottom))}.web-head{display:flex;justify-content:space-between;align-items:flex-end;padding:4px 4px 0}.web-title{font-size:30px;font-weight:700;letter-spacing:-.5px}.web-head .date{font-size:16px;margin-top:2px}.web-time{font-size:40px;font-weight:200;font-variant-numeric:tabular-nums;color:var(--muted)}.web .screen{display:grid;overflow:visible}.web .screen[hidden]{display:none}.web-grid{grid-template-columns:1fr;gap:14px}.status{padding:4px 0 8px}.pair{display:flex;flex-direction:column;gap:12px;max-width:520px;margin:24px auto 0;width:100%}.pair .sub{margin-top:0}.pair-in{font:inherit;font-size:20px;padding:14px 16px;border-radius:14px;border:1px solid var(--line);background:#0f141b;color:var(--text);width:100%;user-select:text}#pair-code{font-size:28px;letter-spacing:.3em;text-transform:uppercase;text-align:center;font-variant-numeric:tabular-nums}.pair .btn{flex:none;padding:16px 0;font-size:20px}.pair-err{min-height:1.4em;color:var(--peak)}@media(max-width:600px){.web .card{padding:14px 16px;border-radius:18px}.web .label{font-size:13px;margin-bottom:8px}.web .big{font-size:52px}.web .mid{font-size:24px}.web .sub,.web .k{font-size:14px}.web .band{font-size:15px;padding:6px 12px}.web .rate-row{flex-wrap:wrap;gap:10px}.web .live-meta{margin-left:0;text-align:left;order:3;flex-basis:100%;display:flex;align-items:baseline;gap:10px}.web .split{gap:10px}.web #spark{height:70px}.web #chart{height:160px}.web .legend{font-size:13px;flex-wrap:wrap}.web .alert-t{font-size:17px}.web .alert-b{font-size:14px}}@media(min-width:900px){.web-grid{grid-template-columns:1fr 1fr}.web-grid>.wide{grid-column:1 / -1}}
