:root{--bg: #0f1f17;--card: #172d22;--text: #eaf3ee;--muted: #93a99c;--accent: #f5c542;--good: #4ade80;--some: #facc15;--none: #64748b;--error: #f87171;color-scheme:dark}@media(prefers-color-scheme:light){:root{--bg: #f3f7f4;--card: #ffffff;--text: #13241b;--muted: #5b6f63;--good: #16a34a;--some: #ca8a04;--none: #94a3b8;--error: #dc2626;color-scheme:light}}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:16px/1.4 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-tap-highlight-color:transparent}main{max-width:560px;margin:0 auto;padding:max(16px,env(safe-area-inset-top)) 16px max(24px,env(safe-area-inset-bottom))}h1,h2{margin:0}h2{font-size:1.05rem;font-weight:600}.muted{color:var(--muted)}.center{text-align:center;padding:48px 16px}.error{color:var(--error);margin:0}.notice{background:color-mix(in srgb,var(--accent) 18%,transparent);padding:10px 14px;border-radius:10px}.card{background:var(--card);border-radius:18px;padding:18px;margin-top:16px}button{font:inherit;font-weight:600;border:0;border-radius:12px;padding:12px 16px;background:var(--accent);color:#1a1a1a;cursor:pointer}button:disabled{opacity:.6}button.link{background:none;color:var(--muted);padding:8px;font-weight:500}input{font:inherit;width:100%;padding:12px;border-radius:10px;border:1px solid color-mix(in srgb,var(--muted) 40%,transparent);background:var(--bg);color:var(--text)}.auth{display:flex;flex-direction:column;align-items:center;text-align:center;padding-top:12vh}.auth h1{margin-top:12px;font-size:2rem;letter-spacing:.08em}.form{width:100%;display:flex;flex-direction:column;gap:14px;text-align:left}.form label{display:flex;flex-direction:column;gap:6px;font-size:.9rem;color:var(--muted)}.dashboard header{display:flex;align-items:center;gap:10px}.brand{display:flex;align-items:center;gap:8px;flex:1;font-size:1.2rem;letter-spacing:.08em}.dot{width:10px;height:10px;border-radius:50%;background:var(--none)}.dot.open{background:var(--good)}.dot.connecting{background:var(--some)}.producer-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.value{font-size:clamp(3rem,16vw,4.5rem);font-weight:700;margin-top:8px;font-variant-numeric:tabular-nums}.status{font-weight:600;display:flex;align-items:center;gap:8px}.status:before{content:"";width:12px;height:12px;border-radius:50%;background:var(--none)}.level-lots .status:before{background:var(--good);box-shadow:0 0 12px var(--good)}.level-lots .value{color:var(--good)}.level-some .status:before{background:var(--some)}.level-offline .value{color:var(--muted)}.chart{margin:18px 0 0}.chart-body{display:grid;grid-template-columns:auto 1fr;column-gap:6px;row-gap:4px}.chart-y{display:flex;flex-direction:column;justify-content:space-between;align-items:flex-end;height:96px;font-size:.7rem;color:var(--muted);font-variant-numeric:tabular-nums}.chart-y span{line-height:1}.chart svg{width:100%;height:96px;display:block;overflow:visible}.chart .grid{stroke:var(--muted);stroke-opacity:.25;stroke-dasharray:3 3;stroke-width:1}.chart .area{fill:color-mix(in srgb,var(--good) 22%,transparent)}.chart .line{fill:none;stroke:var(--good);stroke-width:2}.chart-x{display:flex;justify-content:space-between;font-size:.8rem;color:var(--muted)}.chart-empty{font-size:.9rem;margin:18px 0 0}.owner{display:flex;flex-direction:column;gap:10px;margin-top:18px}.hint{margin:10px 0 0;color:var(--muted)}.view-switch{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-top:16px;padding:4px;background:var(--card);border-radius:14px}.view-switch button{background:none;color:var(--muted);padding:10px;border-radius:10px}.view-switch button[aria-selected=true]{background:var(--accent);color:#1a1a1a}.appliances-summary{font-weight:600;margin:12px 0}.appliance-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}.appliance-grid li{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center;padding:10px 6px;border-radius:12px;background:var(--bg);transition:opacity .4s,filter .4s}.appliance-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1}.appliance-name{font-size:.8rem;line-height:1.2;min-height:2.4em;display:flex;align-items:center}.appliance-state{font-size:.75rem;color:var(--muted);font-variant-numeric:tabular-nums}.appliance-meter{width:80%;height:4px;border-radius:2px;background:color-mix(in srgb,var(--muted) 25%,transparent);overflow:hidden}.appliance-meter span{display:block;height:100%;background:var(--some);transition:width .6s}.appliance-grid li.ok{box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--good) 60%,transparent)}.appliance-grid li.ok .appliance-meter span{background:var(--good)}.appliance-grid li.ok .appliance-state{color:var(--good);font-weight:600}.appliance-grid li.no{opacity:.55}.small{font-size:.85rem}.center-text{text-align:center}.grow{flex:1}button.secondary{background:none;color:var(--text);box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--muted) 50%,transparent)}.appliances-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.appliances-head .link{white-space:nowrap}.sheet{position:fixed;inset:0;z-index:10;background:var(--bg);overflow-y:auto}.sheet-body{max-width:560px;margin:0 auto;padding:max(12px,env(safe-area-inset-top)) 16px max(32px,env(safe-area-inset-bottom))}.sheet-head{position:sticky;top:0;z-index:1;background:var(--bg);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:8px 0}.sheet-head>:first-child{justify-self:start}.sheet-head>:last-child{justify-self:end;padding:8px 16px}.sheet h3{margin:24px 0 8px;font-size:1rem}.appliance-grid.pick li{padding:0;background:none}.appliance-grid.pick button{position:relative;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;gap:4px;padding:10px 6px;border-radius:12px;font-weight:400;background:var(--card);color:var(--text);opacity:.6}.appliance-grid.pick button.on{opacity:1;box-shadow:inset 0 0 0 2px var(--accent)}.appliance-grid.pick .check{position:absolute;top:6px;right:8px;font-weight:700;color:var(--accent)}.custom-list{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:6px}.custom-list li{display:flex;align-items:center;gap:10px;background:var(--card);border-radius:12px;padding:6px 6px 6px 12px}.custom-form{display:flex;flex-direction:column;gap:10px;background:var(--card);border-radius:14px;padding:14px}.custom-form .muted{margin:0}.icon-picker{display:flex;flex-direction:column;gap:10px}.icon-group-title{margin:0 0 6px;font-size:.8rem;color:var(--muted)}.icon-group-icons{display:flex;flex-wrap:wrap;gap:6px}.icon-chosen{margin:0;display:flex;align-items:center;gap:8px;font-weight:600}.icon-picker button{padding:3px;line-height:0;background:none;border-radius:50%}.icon-picker button.on{box-shadow:0 0 0 3px var(--accent)}.custom-inputs{display:grid;grid-template-columns:1fr 90px;gap:8px}.appliance-grid li{position:relative}.bell{position:absolute;top:6px;right:7px;line-height:0;color:var(--accent)}.push-toggle{display:flex;flex-direction:column;gap:8px}.push-toggle .muted{margin:0}.push-on{margin:0;color:var(--good);font-weight:600}.push-actions{display:flex;gap:8px;align-items:center}.chips{display:flex;flex-wrap:wrap;gap:6px}.chip{font-weight:500;font-size:.9rem;padding:8px 12px;border-radius:999px;background:var(--bg);color:var(--muted)}.chip.on{background:color-mix(in srgb,var(--accent) 22%,transparent);color:var(--text);box-shadow:inset 0 0 0 1.5px var(--accent)}.footer{text-align:center;margin-top:32px}.footer a{color:inherit}.timeline{margin:18px 0 0}.timeline-summary{font-weight:600;margin-bottom:10px}.timeline-bars{display:grid;grid-template-columns:repeat(24,1fr);gap:2px;height:72px;align-items:end}.timeline-bars .bar{height:100%;padding:0;border-radius:3px;background:none;display:flex;align-items:flex-end}.timeline-bars .bar span{display:block;width:100%;border-radius:3px}.timeline-bars .bar.empty span{height:2px;background:color-mix(in srgb,var(--muted) 20%,transparent)}.timeline-bars .bar.none span{height:12%;background:var(--none)}.timeline-bars .bar.some span{height:50%;background:var(--some)}.timeline-bars .bar.lots span{height:100%;background:var(--good)}.timeline-bars .bar.selected{box-shadow:0 0 0 2px var(--text)}.timeline-axis{display:grid;grid-template-columns:repeat(24,1fr);gap:2px;font-size:.7rem;color:var(--muted);margin-top:4px}.timeline-axis span{white-space:nowrap;overflow:visible}.timeline-detail{font-size:.85rem;margin:10px 0 0;min-height:1.4em}.timeline-legend{display:flex;gap:14px;font-size:.8rem;color:var(--muted);margin-top:8px}.timeline-legend span:before{content:"";display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px}.timeline-legend .none:before{background:var(--none)}.timeline-legend .some:before{background:var(--some)}.timeline-legend .lots:before{background:var(--good)}.rename{padding:0 0 0 6px;font-size:.9rem;vertical-align:1px}.push-warning{margin:0 0 10px;color:var(--some)}.push-toggle .push-warning{margin:0}button.link.inline{padding:0;color:inherit;text-decoration:underline;font-size:inherit}:root{--tone-kitchen: #D85A30;--tone-home: #378ADD;--tone-climate: #E24B4A;--tone-media: #7F77DD;--tone-garden: #639922;--tone-energy: #BA7517;--tone-neutral: #888780}.icon-badge{display:inline-flex;align-items:center;justify-content:center;flex:none;border-radius:50%;color:#fff;vertical-align:middle;line-height:1;transition:background-color .4s}.tone-kitchen{background:var(--tone-kitchen)}.tone-home{background:var(--tone-home)}.tone-climate{background:var(--tone-climate)}.tone-media{background:var(--tone-media)}.tone-garden{background:var(--tone-garden)}.tone-energy{background:var(--tone-energy)}.tone-neutral{background:var(--tone-neutral)}.tone-muted{background:color-mix(in srgb,var(--none) 55%,transparent)}.ui-icon{vertical-align:-.15em;flex:none}button.edit-devices{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:999px;white-space:nowrap}.view-switch button{display:inline-flex;align-items:center;justify-content:center;gap:6px}.chip{display:inline-flex;align-items:center;gap:6px}.appliance-grid.pick .check,.custom-list .link{line-height:0}
