:root{--layout-max:1248px;--bg:#f4f6f9;--panel:#fff;--panel2:#fff;--card:#fff;--line:#e2e8f0;--line-soft:#f0f4f8;--ink:#1a202c;--mut:#718096;--label:#a0aec0;--accent:#4a90d9;--green:#38a169;--amber:#d69e2e;--red:#e53e3e;--orange:#dd6b20;--hw:#805ad5;--ev:#4a90d9;--batt:#38a169;--load-hw:var(--hw);--load-batt:var(--batt);--load-ev:var(--ev);--solar:#f5c542;--surface-inset:#f7fafc;--track-bg:#f7fafc;--pill-blue:#ebf4ff;--pill-muted:#f7fafc;--shadow:0 1px 2px #0000000f, 0 4px 12px #0000000a}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body{margin:0;overflow-x:hidden}body{background:var(--bg);color:var(--ink);min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}a{color:var(--accent)}header.device-header{z-index:10;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);background:#ffffffeb;position:sticky;top:0}.hd{max-width:var(--layout-max);flex-wrap:wrap;align-items:center;gap:10px;margin:0 auto;padding:11px 14px;display:flex}.brand{letter-spacing:.2px;align-items:center;gap:8px;font-size:15px;font-weight:700;display:flex}.dot{background:var(--mut);border-radius:50%;width:9px;height:9px;box-shadow:0 0 #34d39980}.dot.live{background:var(--green);animation:2s infinite pulse}@keyframes pulse{0%{box-shadow:0 0 #34d39980}70%{box-shadow:0 0 0 7px #34d39900}to{box-shadow:0 0 #34d39900}}.meta{color:var(--mut);font-size:12px}.device-meta{text-align:right;flex:120px;margin-left:auto}nav.device-nav{z-index:20;-webkit-overflow-scrolling:touch;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);background:#fffffff5;display:flex;position:fixed;bottom:0;left:0;right:0;overflow-x:auto;box-shadow:0 -2px 10px #0000000a}nav.device-nav a{min-width:72px;color:var(--mut);border-top:2px solid #0000;flex-direction:column;flex:1 0 auto;justify-content:center;align-items:center;gap:3px;min-height:56px;padding:8px 6px;font-size:10px;text-decoration:none;display:flex}nav.device-nav a.act{color:var(--accent);border-top-color:var(--accent)}nav.device-nav .ni{justify-content:center;align-items:center;line-height:0;display:flex}nav.device-nav .nl{letter-spacing:.02em;text-align:center;font-size:10px;line-height:1.2}nav.config-subnav{background:var(--track-bg);border:1px solid var(--line);-webkit-overflow-scrolling:touch;border-radius:10px;gap:6px;margin:0 0 16px;padding:4px;display:flex;overflow-x:auto}nav.config-subnav a{text-align:center;color:var(--mut);white-space:nowrap;border-radius:7px;flex:1 0 auto;padding:8px 12px;font-size:13px;text-decoration:none}nav.config-subnav a.act{color:var(--ink);background:var(--panel);box-shadow:inset 0 0 0 1px var(--line)}.debug-panel{border:1px dashed var(--line);background:var(--track-bg);border-radius:10px;margin-bottom:16px;padding:12px 14px}.debug-panel-label{letter-spacing:.06em;text-transform:uppercase;color:var(--mut);margin:0 0 10px;font-size:11px;font-weight:600}.debug-panel .config-details{margin:0}.debug-section{margin-bottom:12px}.debug-section-title{color:var(--mut);margin:0 0 6px;font-size:11px;font-weight:600}.debug-kv{grid-template-columns:auto 1fr;gap:2px 10px;margin:0;font-size:12px;display:grid}.debug-kv dt{color:var(--mut)}.debug-kv dd{margin:0;font-family:ui-monospace,monospace}.price-interval-badge{color:var(--mut);margin:0 0 10px;font-size:13px}.price-interval-badge.warn{color:var(--amber)}main.device-main{max-width:var(--layout-max);padding:16px 14px calc(78px + env(safe-area-inset-bottom));margin:0 auto}.grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,140px),1fr));gap:12px;display:grid}.grid>*{min-width:0}.card{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);overflow-wrap:break-word;border-radius:16px;min-width:0;padding:15px}.card h2{text-transform:uppercase;letter-spacing:.07em;color:var(--mut);margin:0 0 8px;font-size:11px;font-weight:600}.val{letter-spacing:-.5px;font-size:clamp(18px,5vw,24px);font-weight:650}.val .u{color:var(--mut);margin-left:3px;font-size:13px;font-weight:500}.sub{color:var(--mut);margin-top:5px;font-size:12px}.on{color:var(--green)}.off{color:var(--mut)}.warn{color:var(--amber)}.imp{color:var(--red)}.exp{color:var(--green)}.buy.imp{color:var(--red)}.sell.exp{color:var(--green)}.band{color:var(--mut);margin-left:6px;font-size:11px}.sect{text-transform:uppercase;letter-spacing:.08em;color:var(--mut);border-bottom:1px solid var(--line);margin:24px 0 10px;padding-bottom:6px;font-size:11px;font-weight:600}.load-cards{flex-direction:column;gap:12px;margin:20px 0 16px;display:flex}.load-card{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:16px;padding:0;overflow:hidden}.load-card__title{letter-spacing:.08em;text-transform:uppercase;color:var(--mut);border-bottom:1px solid var(--line);background:0 0;margin:0;padding:10px 14px 8px;font-size:11px;font-weight:600}.load-card__body{flex-direction:column;gap:12px;padding:14px;display:flex}.load-card__status{min-width:0}.load-card__metric{color:var(--ink);font-variant-numeric:tabular-nums;font-size:26px;font-weight:600;line-height:1.15}.load-card__soc{background:var(--surface-inset);border-radius:3px;height:6px;margin-top:8px;overflow:hidden}.load-card__soc-bar{background:var(--load-batt);border-radius:3px;height:100%;transition:width .3s}.load-card__metric .u{color:var(--mut);margin-left:4px;font-size:14px;font-weight:500}.load-card__line{color:var(--mut);margin:6px 0 0;font-size:13px;line-height:1.35}.load-card__line.is-active{color:var(--load-batt)}.load-card--hw .load-card__title,.load-card--hw .load-card__line{color:var(--load-hw)}.load-card--battery .load-card__title,.load-card--battery .load-card__line{color:var(--load-batt)}.load-card--ev .load-card__title,.load-card--ev .load-card__line{color:var(--load-ev)}.load-card--ev .evchargegoal{background:var(--pill-blue);color:var(--load-ev);border-radius:999px;margin-top:8px;padding:4px 10px;font-size:13px;font-weight:600;display:inline-block}.load-card--hw .loadctrl,.load-card--battery .loadctrl,.load-card--ev .loadctrl{background:var(--surface-inset);border-radius:10px;gap:3px;padding:3px}.load-card--hw .loadctrl .btn.sec,.load-card--battery .loadctrl .btn.sec,.load-card--ev .loadctrl .btn.sec{color:var(--ink);background:0 0;border:none}.load-card--hw .loadctrl .btn.sec:hover:not(:disabled),.load-card--battery .loadctrl .btn.sec:hover:not(:disabled),.load-card--ev .loadctrl .btn.sec:hover:not(:disabled){background:color-mix(in srgb, var(--ink) 6%, transparent)}.load-card--hw .loadctrl .btn.is-active{background:var(--load-hw);color:#fff;font-weight:600}.load-card--battery .loadctrl .btn.is-active{background:var(--load-batt);color:#fff;font-weight:600}.load-card--ev .loadctrl .btn.is-active{background:var(--load-ev);color:#fff;font-weight:600}.load-card--hw .load-card__actions--syncing .btn.is-active{box-shadow:0 0 0 2px color-mix(in srgb, var(--load-hw) 45%, transparent)}.load-card--battery .load-card__actions--syncing .btn.is-active{box-shadow:0 0 0 2px color-mix(in srgb, var(--load-batt) 45%, transparent)}.load-card--ev .load-card__actions--syncing .btn.is-active{box-shadow:0 0 0 2px color-mix(in srgb, var(--load-ev) 45%, transparent)}.loadctrl .btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.loadctrl .btn.is-active:focus-visible{outline-offset:1px;box-shadow:0 0 0 2px var(--accent), 0 1px 2px #0000001f;outline-color:#fff}.load-card__details{color:var(--mut);margin-top:8px;font-size:12px;line-height:1.45}.load-card__details .sub,.load-card__details .hint{font-size:inherit;line-height:inherit;margin:0}.load-card__details .evvehicle,.load-card__details .evchargegoal{color:var(--ink);margin-top:6px;font-weight:600}.load-card__details .evchargegoal{font-size:14px}.load-card__aside{border-top:1px solid var(--line);flex-direction:column;gap:10px;min-width:0;padding-top:12px;display:flex}.load-card__aside--locked{background:#fbbf240f;border:1px dashed #fbbf2466;border-radius:10px;padding:10px}.load-card__aside--locked .load-card__actions,.load-card__aside--locked .load-card__footer>:not(.evpairing-notice){opacity:.48;filter:saturate(.85)}.load-card__actions{flex-flow:wrap;gap:6px;width:100%;display:flex}.load-card__mode-sync{width:100%;margin-top:8px}.load-card__mode-sync--pending{background:color-mix(in srgb, var(--accent,#3b82f6) 12%, transparent);border:1px solid color-mix(in srgb, var(--accent,#3b82f6) 35%, transparent);border-radius:8px;align-items:flex-start;gap:8px;padding:8px 10px;display:flex}.load-card__mode-sync-dot{background:var(--accent,#3b82f6);border-radius:50%;flex-shrink:0;width:8px;height:8px;margin-top:5px;animation:1.2s ease-in-out infinite load-card-sync-pulse}@keyframes load-card-sync-pulse{0%,to{opacity:.35;transform:scale(.85)}50%{opacity:1;transform:scale(1)}}.load-card__actions--syncing .btn.is-active{box-shadow:0 0 0 2px color-mix(in srgb, var(--accent,#3b82f6) 45%, transparent)}.load-card__mode-sync .hint{margin:0;font-size:12px;line-height:1.4}.load-card__footer{flex-direction:column;gap:8px;display:flex}.load-card__footer .hint,.load-card__footer .chk{margin:0}.load-card__footer .evgoal{color:var(--mut);margin-top:0;font-size:13px;display:block}.load-card__footer .evgoal input[type=range],.load-card__footer .evgoal input[type=time]{width:100%;margin-top:4px;display:block}.load-card__footer .evpairing-notice{color:var(--amber);margin:0;line-height:1.45}.load-card__footer .evpairing-notice a{color:var(--accent);font-weight:600}.hwpanel,.evpanel{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:14px;padding:12px 14px}.loadctrl{flex-flow:wrap;flex:1;gap:6px;min-width:0;display:flex}.load-card__actions .btn,.loadctrl .btn{border-radius:8px;flex:1 1 0;justify-content:center;min-width:64px;min-height:36px;padding:7px 10px;font-size:12px;font-weight:550}.evpanel .evstat{flex:auto;min-width:0}.evpanel .evctrl{flex-direction:column;flex:auto;gap:10px;min-width:0;display:flex}.evpanel .evgoal{color:var(--mut);margin-top:8px;font-size:13px;display:block}.evpanel .evgoal input[type=range],.evpanel .evgoal input[type=time],.ev-range input[type=range]{width:100%;margin-top:4px;display:block}input[type=range]{appearance:none;cursor:pointer;background:0 0;border:none;border-radius:0;height:32px;padding:0}input[type=range]::-webkit-slider-runnable-track{background:var(--line);border-radius:3px;height:6px}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--accent);border:2px solid var(--panel);border-radius:50%;width:20px;height:20px;margin-top:-7px;box-shadow:0 1px 4px #00000059}input[type=range]::-moz-range-track{background:var(--line);border-radius:3px;height:6px}input[type=range]::-moz-range-thumb{background:var(--accent);border:2px solid var(--panel);border-radius:50%;width:20px;height:20px;box-shadow:0 1px 4px #00000059}input[type=range]:disabled{opacity:.5;cursor:not-allowed}.evpanel .evvehicle{color:var(--ink);font-weight:600}.evpanel .evchargegoal{color:var(--ink);font-size:15px;font-weight:600}.evpanel .evoptions{flex-direction:column;gap:4px;display:flex}.evpanel .evoptions .hint{margin:0 0 4px}.evpanel .evoptions .chk{margin-top:0}.evpanel .evctrl--locked{background:#fbbf240f;border:1px dashed #fbbf2466;border-radius:10px;padding:10px}.evpanel .evctrl--locked .loadctrl,.evpanel .evctrl--locked .evoptions>:not(.evpairing-notice),.load-card__aside--locked .loadctrl{opacity:.48;filter:saturate(.85)}.evpanel .evpairing-notice{color:var(--amber);margin:0 0 6px;line-height:1.45}.evpanel .evpairing-notice a{color:var(--accent);font-weight:600}.grid.single{grid-template-columns:1fr}.row{flex-wrap:wrap;align-items:center;gap:8px;margin:16px 0;display:flex}.btn{background:var(--accent);color:#fff;cursor:pointer;white-space:nowrap;border:0;border-radius:10px;justify-content:center;align-items:center;gap:6px;min-height:44px;padding:10px 15px;font-family:inherit;font-size:14px;font-weight:550;line-height:1.2;text-decoration:none;display:inline-flex}.btn:hover{filter:brightness(1.08)}button.btn:disabled,.btn:disabled,.btn[aria-disabled=true]{opacity:.55;cursor:not-allowed;pointer-events:none}.btn.sec{background:var(--surface-inset);border:1px solid var(--line);color:var(--ink)}.btn-sm{min-height:36px;padding:8px 12px;font-size:13px}.pill{border:1px solid var(--line);background:var(--surface-inset);color:var(--mut);border-radius:999px;padding:4px 10px;font-size:12px}.pill.ok{color:var(--green);border-color:#34d39973}.pill.warn{color:var(--amber);border-color:#fbbf2473}.pill.bad{color:var(--red);border-color:#f8717173}fieldset{border:1px solid var(--line);background:var(--panel);border-radius:14px;margin:0 0 16px;padding:16px}legend{color:var(--ink);padding:0 6px;font-size:13px;font-weight:600}details.config-details{border:1px solid var(--line);background:var(--panel);border-radius:14px;margin:0 0 16px;padding:16px}details.config-details>summary{cursor:pointer;color:var(--ink);font-size:13px;font-weight:600;list-style:none}details.config-details>summary::-webkit-details-marker{display:none}details.config-details>summary:before{content:"▸";color:var(--mut);margin-right:6px;transition:transform .15s;display:inline-block}details.config-details[open]>summary:before{transform:rotate(90deg)}details.config-details>.intro{margin-top:12px}.config-page .intro{margin-bottom:20px}.config-section{border:1px solid var(--line);background:var(--panel);border-radius:14px;margin:0 0 16px;padding:16px}.config-section__head{flex-wrap:wrap;align-items:center;gap:8px 10px;margin-bottom:6px;display:flex}.config-section__title{color:var(--ink);margin:0;font-size:14px;font-weight:600}.config-section__desc{color:var(--mut);margin:0 0 14px;font-size:12px;line-height:1.45}.config-section__body .cols3{margin-top:0}details.config-advanced{border-top:1px solid var(--line);margin-top:14px;padding-top:12px}details.config-advanced>summary{cursor:pointer;color:var(--mut);-webkit-user-select:none;user-select:none;font-size:12px;font-weight:600;list-style:none}details.config-advanced>summary::-webkit-details-marker{display:none}details.config-advanced>summary:before{content:"▸";color:var(--mut);margin-right:6px;transition:transform .15s;display:inline-block}details.config-advanced[open]>summary:before{transform:rotate(90deg)}details.config-advanced>summary:hover{color:var(--ink)}.config-advanced__body{margin-top:12px}.config-actions{flex-wrap:wrap;gap:8px;margin-top:4px;display:flex}.config-actions .btn{flex:0 auto}.vehicle-card{border:1px solid var(--line);background:var(--surface-inset);border-radius:12px;margin-top:12px;padding:14px}.vehicle-card:first-child{margin-top:0}.vehicle-card__head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:14px;display:flex}.vehicle-card__title{color:var(--ink);margin:0;font-size:15px;font-weight:600}.vehicle-card__status{flex-wrap:wrap;gap:6px;display:flex}.vehicle-card__meta{color:var(--mut);margin:4px 0 0;font-size:12px;line-height:1.45}.vehicle-card__fields{grid-template-columns:1fr;gap:12px;display:grid}.vehicle-card__fields label{margin-top:0}.vehicle-card__fields .note{grid-column:1/-1;margin:-4px 0 0}.vehicle-card__pairing{border-top:1px solid var(--line);margin-top:14px;padding-top:14px}.vehicle-card__pairing-title{color:var(--ink);margin:0 0 4px;font-size:12px;font-weight:600}.vehicle-card__pairing-desc{color:var(--mut);margin:0 0 8px;font-size:12px;line-height:1.45}.ev-pairing-status{border:1px solid var(--line);background:var(--track-bg);border-radius:10px;align-items:flex-start;gap:12px;margin:0 0 12px;padding:12px 14px;display:flex}.ev-pairing-status--ok{background:#34d3991a;border-color:#34d39973}.ev-pairing-status__icon{color:#04210f;background:var(--green);border-radius:999px;flex:none;place-items:center;width:28px;height:28px;font-size:14px;font-weight:700;line-height:1;display:grid}.ev-pairing-status__body{min-width:0}.ev-pairing-status__title{color:var(--ink);margin:0 0 2px;font-size:14px;font-weight:600}.ev-pairing-status__desc{color:var(--mut);margin:0;font-size:12px;line-height:1.45}.ev-pairing-steps{color:var(--mut);margin:0 0 12px;padding-left:18px;font-size:12px;line-height:1.5}.ev-pairing-steps li+li{margin-top:4px}.vehicle-card__actions{margin-top:0;padding-bottom:4px}.vehicle-card__actions .btn,.vehicle-card__actions .pill{scroll-margin-bottom:calc(88px + env(safe-area-inset-bottom))}.vehicle-card .ev-range{margin-top:0}.ev-page__flash{margin-bottom:14px;display:inline-block}.config-section--account{margin-top:4px}.connection-site-row{grid-template-columns:1fr;align-items:end;gap:10px;margin-top:4px;display:grid}.connection-site-row__action{width:100%;min-height:44px}label{color:var(--mut);margin:10px 0 4px;font-size:12px;display:block}.field-save{vertical-align:middle;margin-left:6px;font-size:11px;font-weight:550;display:inline-block}.field-save.ok{color:var(--green)}.field-save.err{color:var(--red)}.field-cell.field-saved input,.field-cell.field-saved select{border-color:var(--green)}.field-cell.field-save-error input,.field-cell.field-save-error select{border-color:var(--red)}label.chk .field-save{margin-left:8px}input,select{background:var(--surface-inset);width:100%;color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:11px;font-size:16px}input:focus,select:focus{border-color:var(--accent);outline:none}.cols,.cols3{grid-template-columns:1fr;gap:12px;display:grid}.pw-wrap{position:relative}.pw-wrap input{padding-right:42px}.eye-btn{width:32px;height:32px;color:var(--mut);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;display:flex;position:absolute;top:50%;right:6px;transform:translateY(-50%)}.eye-btn:hover{color:var(--ink)}.eye-btn.on{color:var(--accent)}.eye-btn svg{width:18px;height:18px;display:block}.eye-btn .ico-off,.eye-btn.on .ico-on{display:none}.eye-btn.on .ico-off{display:block}.note,.intro{color:var(--mut);margin:6px 0 0;font-size:12px;line-height:1.45}.intro{margin:0 0 14px}.q{border:1px solid var(--line);background:var(--surface-inset);width:20px;height:20px;color:var(--mut);cursor:pointer;vertical-align:middle;border-radius:50%;flex:none;margin-left:5px;padding:0;font-size:12px;font-weight:700;line-height:1}.q:hover{color:var(--ink);border-color:var(--accent)}.hint{color:var(--mut);background:var(--surface-inset);border:1px solid var(--line);border-left:3px solid var(--accent);z-index:2;border-radius:8px;margin:6px 0 0;padding:8px 10px;font-size:12px;line-height:1.45;display:none;position:relative}.hint.show{animation:.2s fade;display:block;box-shadow:0 4px 14px #00000059}.hint code{color:var(--ink)}.linkish{color:var(--mut);cursor:pointer;background:0 0;border:0;margin-left:10px;padding:0;font-size:12px;text-decoration:underline}.linkish:hover{color:var(--ink)}.load-sites-wrap{align-items:flex-end;padding-bottom:34px;display:flex}.plan-day-ahead{padding-bottom:8px}.plan-page-header{margin-bottom:16px}.plan-page-header-top{justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px;display:flex}.plan-page-title{color:var(--ink);margin:0;font-size:20px;font-weight:700}.plan-page-badge{background:var(--pill-blue);color:var(--accent);border-radius:6px;align-items:center;gap:4px;padding:4px 8px;font-size:11px;font-weight:500;display:inline-flex}.plan-page-desc{color:var(--mut);margin:0;font-size:12px;line-height:1.5}.plan-day-selector{background:var(--bg);border:1px solid var(--line);border-radius:10px;gap:4px;margin-bottom:10px;padding:3px;display:flex}.plan-day-selector-btn{color:var(--mut);cursor:pointer;background:0 0;border:none;border-radius:8px;flex:1;padding:8px 12px;font-size:13px;font-weight:600}.plan-day-selector-btn.is-active{background:var(--card);color:var(--ink);box-shadow:0 1px 2px #0000000f}.plan-day-selector-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.plan-hero{gap:8px;margin-bottom:16px;display:flex}.plan-hero-card{background:var(--card);border:1px solid var(--line);border-radius:12px;flex-direction:column;flex:1;gap:2px;min-width:0;padding:10px 12px;display:flex}.plan-hero-label{color:var(--label);font-size:11px}.plan-hero-value{font-size:13px;font-weight:700}.plan-hero-sub{color:var(--mut);font-size:11px}.plan-hero-hw .plan-hero-value{color:var(--hw)}.plan-hero-ev .plan-hero-value{color:var(--ev)}.plan-hero-solar .plan-hero-value{color:var(--amber)}.plan-chart-card,.plan-load-card{background:var(--card);border:1px solid var(--line);border-radius:12px;margin-bottom:12px;padding:16px}.plan-chart-kicker,.plan-load-kicker{letter-spacing:.1em;text-transform:uppercase;color:var(--label);margin:0 0 4px;font-size:11px;font-weight:600}.plan-chart-empty-note{background:var(--pill-blue);color:var(--accent);border-radius:8px;margin:0 0 12px;padding:10px 12px;font-size:12px;line-height:1.45}.plan-chart-body{position:relative}.plan-chart-now{background:var(--accent);opacity:.9;z-index:3;pointer-events:none;width:2px;margin-left:-1px;position:absolute;top:0;bottom:0}.plan-chart-now-label{background:var(--accent);color:#fff;white-space:nowrap;border-radius:4px;padding:2px 6px;font-size:10px;font-weight:600;line-height:1.2;position:absolute;top:0;left:50%;transform:translate(-50%)}.plan-chart-solar--empty{min-height:48px}.plan-chart-strip--empty{background:repeating-linear-gradient(-45deg,#0000,#0000 6px,#00000008 6px 12px);border-radius:4px;min-height:20px}.plan-chart-subtitle,.plan-load-summary{color:var(--mut);margin:0 0 12px;font-size:12px;line-height:1.5}.plan-chart-row-label{color:var(--label);margin:0 0 4px;font-size:11px}.plan-chart-solar{background:var(--track-bg);border-radius:6px;height:48px;margin-bottom:12px;position:relative;overflow:hidden}.plan-chart-solar-bar{background:var(--solar);box-sizing:border-box;border-radius:2px;min-height:0;position:absolute;bottom:0}.plan-chart-daylight{background:var(--solar);opacity:.1;pointer-events:none;border-radius:4px;position:absolute;top:0;bottom:0}.plan-chart-strip{background:var(--track-bg);border-radius:6px;height:14px;margin-bottom:8px;position:relative;overflow:hidden}.plan-chart-seg{box-sizing:border-box;border-radius:2px;position:absolute;top:0;bottom:0}.plan-chart-lane{margin-bottom:6px}.plan-chart-lane-label{color:var(--label);margin-bottom:4px;font-size:11px;display:block}.plan-chart-lane-track{width:100%}.plan-chart-axis{height:14px;margin-top:4px;position:relative}.plan-chart-tick{color:var(--label);white-space:nowrap;font-size:9px;position:absolute;transform:translate(-50%)}.plan-load-head{align-items:center;gap:8px;margin-bottom:8px;display:flex}.plan-icon-hw{color:var(--hw)}.plan-icon-ev{color:var(--ev)}.plan-icon-batt{color:var(--batt)}.plan-icon-amber{color:var(--amber)}.plan-accent-hw{color:var(--hw)}.plan-accent-ev{color:var(--ev)}.plan-accent-batt,.plan-accent-charge{color:var(--green)}.plan-accent-discharge{color:var(--orange)}.plan-accent-amber{color:var(--amber)}.plan-load-note{color:var(--label);margin:0 0 8px;font-size:12px;font-style:italic}.plan-load-nested{background:var(--pill-blue);border-radius:8px;margin-top:8px;padding:10px 12px}.plan-load-nested-title{color:var(--ev);margin:0 0 6px;font-size:11px;font-weight:600}.plan-load-rows{margin:0;padding:0;list-style:none}.plan-load-row{border-bottom:1px solid var(--line-soft);justify-content:space-between;align-items:flex-start;gap:8px;padding:6px 0;display:flex}.plan-load-row:last-child{border-bottom:none}.plan-load-time{color:var(--ink);font-size:13px;font-weight:600}.plan-load-price{color:var(--label);margin-left:8px;font-size:11px}.plan-load-pill{background:var(--pill-muted);border-radius:6px;flex-shrink:0;padding:2px 8px;font-size:11px;font-weight:600}.plan-batt-section-title{margin:8px 0 4px;font-size:11px;font-weight:600}.plan-amber-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.plan-amber-cell{background:var(--track-bg);border-radius:8px;padding:8px 12px}.plan-amber-label{color:var(--label);margin-bottom:2px;font-size:11px;display:block}.plan-amber-value{font-size:13px;font-weight:700;display:block}.plan-amber-sub{color:var(--mut);font-size:11px;display:block}.plan-amber-green{color:var(--green)}.plan-amber-red{color:var(--red)}.plan-amber-amber{color:var(--amber)}.plan-amber-ink{color:var(--ink)}.plan-detail-chart{margin-top:8px}.plan-detail-chart summary{cursor:pointer;color:var(--accent);margin-bottom:8px;font-size:12px}@media (width<=479px){.plan-hero{flex-direction:column}}.config-back{margin:0 0 12px}.config-back a{color:var(--mut);font-size:13px;text-decoration:none}.config-back a:hover{color:var(--ink)}.config-hub-title{text-transform:uppercase;letter-spacing:.07em;color:var(--mut);margin:0 0 8px;font-size:11px}.config-hub-intro{margin-bottom:14px}.config-hub-list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.config-hub-card{background:var(--card);border:1px solid var(--line);color:inherit;border-radius:10px;flex-direction:column;gap:4px;padding:14px 16px;text-decoration:none;display:flex}.config-hub-card:hover{border-color:var(--accent)}.config-hub-card-title{color:var(--ink);font-size:14px;font-weight:600}.config-hub-card-desc{color:var(--mut);font-size:12px}.htl .mk.auto{border-color:var(--green)}.htl .mk.force-on{border-color:var(--accent)}.htl .mk.force-off{border-color:var(--red)}.lh{color:var(--green);margin:5px 0 0;font-size:12px;font-weight:550}.chk{align-items:center;gap:8px;margin-top:12px;display:flex}.chk input{width:auto;margin:0}.dashstats{margin-bottom:14px}.dayhead{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px;display:flex}.dayhead__left{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.daytitle{color:var(--ink);letter-spacing:-.2px;margin:0;font-size:17px;font-weight:650}.dayclock{color:var(--mut);margin:0;font-size:13px}.live-badge{color:var(--accent);white-space:nowrap;align-items:center;gap:5px;font-size:12px;font-weight:600;display:inline-flex}.live-badge__icon{justify-content:center;align-items:center;width:16px;height:16px;font-size:14px;line-height:1;display:inline-flex}.val.ev{color:var(--load-ev)}.val.daylight{color:var(--orange)}.dashstatgrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.dashstatgrid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.dashstat{min-width:0;padding:12px 14px}.dashstat .val{flex-wrap:wrap;align-items:baseline;gap:0;font-size:clamp(16px,4.5vw,20px);line-height:1.25;display:flex}.dashstat .val .dashstat-suffix{color:var(--mut);margin-left:.35em;font-size:.72em;font-weight:600}.flags{color:var(--mut);margin-top:8px;font-size:11px;line-height:1.4}.homemap{box-shadow:none;background:0 0;border:none;border-radius:0;margin-bottom:14px;padding:0}.homemap-stage{border-radius:10px;position:relative;overflow:hidden}.homemap .houseimg{border-radius:10px;width:100%;max-width:100%;height:auto;display:block}.homemap .badge{z-index:2;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);pointer-events:none;word-break:normal;overflow-wrap:normal;background:#0f1320e0;border:1px solid #262d3b;border-radius:10px;width:max-content;min-width:68px;max-width:min(46vw,148px);padding:6px 9px;font-size:10px;line-height:1.25;transition:border-color .3s,box-shadow .3s;position:absolute;left:auto;right:auto;transform:translateY(-50%)}.homemap .badge .bl{text-transform:uppercase;letter-spacing:.06em;color:#8b93a7;white-space:nowrap;margin-bottom:2px;font-size:9px;font-weight:600;display:block}.homemap .badge .bv{color:#e8eaf0;white-space:nowrap;font-size:clamp(10px,2.8vw,13px);font-weight:650;display:block}.homemap .badge .bs{color:#8b93a7;overflow-wrap:break-word;word-break:normal;margin-top:2px;font-size:9px;line-height:1.3;display:block}.homemap .badge .bs .buy.imp{color:#f87171}.homemap .badge .bs .sell.exp{color:#34d399}.homemap .badge.b-solar{top:10%;left:54%;transform:translate(-50%)}.homemap .badge.b-grid{max-width:min(48vw,148px);top:58%;left:6%;transform:translateY(-50%)}.homemap .badge.b-batt{top:30%;left:12%;transform:translateY(-50%)}.homemap .badge.b-load{top:48%;left:50%;transform:translate(-50%,-50%)}.homemap .badge.b-hw{top:42%;left:auto;right:8%}.homemap .badge.b-ev{top:65%;left:auto;right:28%}.homemap .badge.b-weather{z-index:3;border-top:0;border-right:0;border-radius:0 10px 0 8px;min-width:0;max-width:min(46vw,148px);padding:4px 7px;line-height:1.15;top:0;left:auto;right:0;transform:none}.homemap .badge .weather-bv{align-items:center;gap:5px;line-height:1;display:flex}.homemap .badge.b-weather .bv{font-size:clamp(10px,2.6vw,12px)}.homemap .badge.b-weather .bs{white-space:normal;margin-top:2px;font-size:8px;line-height:1.2}.homemap .badge .weather-icon{flex:none;display:block}.weather-icon.sun{animation:3s ease-in-out infinite weatherSunPulse}.weather-icon.cloud{animation:5s ease-in-out infinite weatherCloudDrift}.weather-icon.rain .rain-drop{animation:1.1s linear infinite weatherRainFall}.weather-icon.rain .rain-drop.d2{animation-delay:.25s}.weather-icon.rain .rain-drop.d3{animation-delay:.5s}.weather-icon.night{animation:4s ease-in-out infinite weatherMoonGlow}@keyframes weatherSunPulse{0%,to{filter:drop-shadow(0 0 2px #fbbf2466);transform:scale(1)}50%{filter:drop-shadow(0 0 6px #fbbf24bf);transform:scale(1.05)}}@keyframes weatherCloudDrift{0%,to{transform:translate(0)}50%{transform:translate(3px)}}@keyframes weatherRainFall{0%{opacity:.9;transform:translateY(0)}to{opacity:.2;transform:translateY(5px)}}@keyframes weatherMoonGlow{0%,to{opacity:.85}50%{opacity:1}}@media (prefers-reduced-motion:reduce){.weather-icon.sun,.weather-icon.cloud,.weather-icon.rain .rain-drop,.weather-icon.night{animation:none}}.homemap .badge.imp{border-color:#f871718c}.homemap .badge.exp{border-color:#34d3998c}.homemap .badge.chg{border-color:#22d3ee8c}.homemap .badge.dchg{border-color:#fbbf248c}.homemap .badge.load{border-color:#94a3b88c}.homemap .badge.on{border-color:#a78bfa8c}.homemap .badge.active{animation:2s ease-in-out infinite badgePulse}.homemap .badge.imp.active{animation-name:badgePulseImp}.homemap .badge.exp.active{animation-name:badgePulseExp}.homemap .badge.chg.active{animation-name:badgePulseChg}.homemap .badge.dchg.active{animation-name:badgePulseDchg}.homemap .badge.on.active{animation-name:badgePulseOn}@keyframes badgePulse{0%,to{box-shadow:0 0 #3b82f659}50%{box-shadow:0 0 0 7px #3b82f600}}@keyframes badgePulseImp{0%,to{box-shadow:0 0 #f8717159}50%{box-shadow:0 0 0 7px #f8717100}}@keyframes badgePulseExp{0%,to{box-shadow:0 0 #34d39959}50%{box-shadow:0 0 0 7px #34d39900}}@keyframes badgePulseChg{0%,to{box-shadow:0 0 #22d3ee59}50%{box-shadow:0 0 0 7px #22d3ee00}}@keyframes badgePulseDchg{0%,to{box-shadow:0 0 #fbbf2459}50%{box-shadow:0 0 0 7px #fbbf2400}}@keyframes badgePulseOn{0%,to{box-shadow:0 0 #a78bfa59}50%{box-shadow:0 0 0 7px #a78bfa00}}.plan{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:14px;padding:16px}.chart-scroll{-webkit-overflow-scrolling:touch;margin-top:14px;overflow-x:auto}.chart-inner{min-width:100%}.chart{align-items:flex-end;gap:3px;height:180px;padding-bottom:24px;display:flex;position:relative}.chart-axis{width:100%;margin-bottom:4px}.chart .col{flex-direction:column;flex:none;justify-content:flex-end;align-items:center;width:18px;height:100%;display:flex;position:relative}.chart.res-5{gap:2px}.chart.res-5 .col .tl{font-size:8px;bottom:-18px}.chart .col .bk{z-index:2;border-radius:4px 4px 0 0;width:100%;min-height:2px}.chart .col .tl{color:var(--mut);transform-origin:0 0;white-space:nowrap;font-size:9px;position:absolute;bottom:-20px;left:6px;transform:rotate(-50deg)}.chart .col.now{outline:2px solid var(--accent);outline-offset:1px;border-radius:5px}.chart .col.heat .bk{box-shadow:inset 0 0 0 2px #a78bfa}.chart .col.heat:after{content:"↑";color:#a78bfa;z-index:3;font-size:9px;position:absolute;top:-2px}.chart .col.day{background:linear-gradient(#facc1521,#facc1500)}.chart .col.ev .bk{outline-offset:-1px;outline:2px dashed #60a5fa}.chart .col.ev:before{content:"⚡";color:#60a5fa;z-index:3;font-size:8px;line-height:1;position:absolute;top:-2px;right:0}.solarline{pointer-events:none;z-index:1;height:100%;position:absolute;top:0;left:0}.lg{color:var(--mut);flex-wrap:wrap;gap:14px;margin-top:8px;font-size:12px;display:flex}.sw{vertical-align:-1px;border-radius:3px;width:11px;height:11px;margin-right:5px;display:inline-block}.htl{border:1px solid var(--line);background:var(--surface-inset);border-radius:8px;height:40px;margin-top:14px;position:relative;overflow:hidden}.htl .dayband{background:#facc1521;position:absolute;top:0;bottom:0}.htl .seg{z-index:2;border-radius:3px;min-width:2px;position:absolute;top:7px;bottom:7px}.htl .mk{border-left:2px dashed var(--mut);z-index:3;width:0;position:absolute;top:0;bottom:0}.haxis{height:14px;margin-top:3px;position:relative}.haxis span{color:var(--mut);white-space:nowrap;font-size:9px;position:absolute;transform:translate(-50%)}.hlist{color:var(--mut);margin-top:14px;font-size:12px;line-height:1.7}.toast{bottom:calc(74px + env(safe-area-inset-bottom));background:var(--green);color:#04210f;opacity:0;pointer-events:none;z-index:30;border-radius:10px;padding:10px 16px;font-weight:600;transition:all .3s;position:fixed;left:50%;transform:translate(-50%)translateY(20px)}.toast.show{opacity:1;transform:translate(-50%)translateY(0)}.auth-box{background:var(--panel);border:1px solid var(--line);border-radius:14px;max-width:400px;margin:48px auto;padding:24px}.auth-box input{width:100%;margin:8px 0 12px}.err{color:var(--red);font-size:13px}.device-list{margin:0;padding:0;list-style:none}.device-list li{margin-bottom:10px}.device-list a{background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:12px;padding:14px 16px;text-decoration:none;display:block}@media (width>=600px){.cols,.cols3{grid-template-columns:1fr 1fr}.connection-site-row{grid-template-columns:1fr auto;gap:12px}.connection-site-row__action{width:auto;min-width:7.5rem;margin-bottom:10px}.vehicle-card__actions .btn{flex:none}.vehicle-card__fields{grid-template-columns:1fr 1fr}.vehicle-card__fields .ev-range,.vehicle-card__fields .note{grid-column:1/-1}.load-card__body{gap:14px;padding:16px 18px}.load-card__aside{padding-top:14px}.load-card__metric{font-size:28px}.load-card__actions .btn{min-height:38px;padding:8px 12px;font-size:13px}.hwpanel,.evpanel{flex-direction:row;align-items:flex-start;gap:16px;padding:16px 18px}.dashstatgrid{grid-template-columns:repeat(3,minmax(0,1fr))}.dashstatgrid--two{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=860px){nav.device-nav{max-width:var(--layout-max);width:100%;margin:0 auto;left:50%;right:auto;transform:translate(-50%)}main.device-main{padding:18px 14px calc(78px + env(safe-area-inset-bottom))}.cols3{grid-template-columns:1fr 1fr 1fr}.toast{bottom:calc(74px + env(safe-area-inset-bottom))}}@media (width<=479px){.homemap .badge{min-width:72px;max-width:min(52vw,132px);padding:6px 8px;font-size:9px}.homemap .badge.b-solar{top:18%;left:56%}.homemap .badge.b-grid{top:54%;left:2%}.homemap .badge.b-batt{top:28%;left:6%}.homemap .badge.b-load{top:50%;left:50%}.homemap .badge.b-hw{top:44%;right:3%}.homemap .badge.b-ev{top:68%;right:22%}.homemap .badge.b-weather{min-width:0;max-width:min(50vw,132px);padding:3px 6px}.homemap .badge.b-weather .bs{font-size:7px}.dashstatgrid{grid-template-columns:1fr}}.learning-shadow-section{margin-top:0}.learning-shadow-grid{grid-template-columns:repeat(auto-fit,minmax(10rem,1fr));gap:.75rem 1rem;margin:.75rem 0;display:grid}.learning-shadow-grid .label{opacity:.75;font-size:.75rem;display:block}.learning-shadow-dl{grid-template-columns:auto 1fr;gap:.25rem .75rem;margin:.5rem 0 0;font-size:.9rem;display:grid}.learning-shadow-dl dt{opacity:.7}.learning-meta{margin:.5rem 0 0;font-size:.85rem}.learning-shadow-run{flex-direction:column;gap:2px;margin:0 0 12px;font-size:.85rem;display:flex}.learning-shadow-run .label{text-transform:uppercase;letter-spacing:.04em;color:var(--mut);font-size:.75rem}.learning-shadow-run-stale{color:var(--warn,#c9a227)}.learning-shadow-intro{margin:.25rem 0 .5rem}.learning-metric-hint{opacity:.65;margin-top:.15rem;font-size:.7rem;line-height:1.3;display:block}.learning-shadow-section .shadow-solar-captured,.learning-shadow-section .shadow-gap-better{color:var(--ok,#2d8a4e)}.learning-shadow-section .shadow-gap-worse{color:var(--muted-fg,#8a6b2d)}.history-day{padding-bottom:34px}.history-page-header{margin-bottom:16px}.history-page-header-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;display:flex}.history-page-title{color:var(--ink);margin:0;font-size:20px;font-weight:700}.history-page-desc{margin:0}.history-day-select{border:1px solid var(--line);background:var(--card);width:auto;min-width:7rem;color:var(--accent);border-radius:8px;padding:6px 10px;font-size:13px;font-weight:600}.history-summary{border:1px solid var(--line);background:var(--card);border-radius:12px;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;margin-bottom:16px;display:grid;overflow:hidden}@media (width>=560px){.history-summary{grid-template-columns:repeat(4,minmax(0,1fr))}}.history-summary-card{text-align:center;border-right:1px solid var(--line);flex-direction:column;align-items:center;padding:12px 8px;display:flex}.history-summary-card:last-child{border-right:none}@media (width<=559px){.history-summary-card:nth-child(2){border-right:none}.history-summary-card:first-child,.history-summary-card:nth-child(2){border-bottom:1px solid var(--line)}}.history-summary-label{text-transform:uppercase;letter-spacing:.04em;color:var(--label);margin-bottom:4px;font-size:9px;line-height:1.2}.history-summary-value{font-size:14px;font-weight:700;line-height:1.2}.history-summary-sub{color:var(--mut);margin-top:4px;font-size:9px}.history-summary-hw .history-summary-value{color:var(--hw)}.history-summary-bat .history-summary-value{color:var(--orange)}.history-summary-energy .history-summary-value{color:var(--green)}.history-summary-solar .history-summary-value{color:var(--solar)}.history-summary-ok .history-summary-value{color:var(--green)}.history-summary-warn .history-summary-value{color:var(--amber)}.history-timeline-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:4px;display:flex}.history-timeline-sub{color:var(--mut);font-size:12px}.history-chart-live-mask{pointer-events:none;z-index:2;background:#0000001f;border-radius:0 6px 6px 0;position:absolute;top:0;bottom:0;right:0}.history-chart-seg--ideal{box-sizing:border-box}.history-chart-empty-lane{color:var(--label);align-items:center;padding-left:8px;font-size:9px;display:flex;position:absolute;inset:0}.history-chart-price{height:26px}.history-chart-strip{position:relative}.history-lane-hw{color:var(--hw);font-weight:600}.history-lane-ev{color:var(--ev);font-weight:600}.history-lane-bat-charge{color:var(--green);font-weight:600}.history-lane-bat-discharge{color:var(--orange);font-weight:600}.history-gap-insight{background:color-mix(in srgb, var(--amber) 12%, var(--card));border:1px solid color-mix(in srgb, var(--amber) 35%, var(--line));border-radius:12px;margin-bottom:12px;padding:12px 14px}.history-gap-insight-title{color:var(--amber);margin:0 0 6px;font-size:12px;font-weight:600}.history-gap-insight-body{color:var(--mut);margin:0;font-size:12px;line-height:1.55}.history-mode-log{margin:0;padding:0;list-style:none}.history-mode-log-row{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:8px 0;font-size:12px;display:flex}.history-mode-log-row:last-child{border-bottom:none}.history-mode-log-time{width:36px;color:var(--label);flex-shrink:0;font-size:10px;font-weight:600}.history-mode-log-badge{border-radius:6px;flex-shrink:0;padding:2px 6px;font-size:10px;font-weight:500}.history-badge-hw{background:color-mix(in srgb, var(--hw) 15%, transparent);color:var(--hw)}.history-badge-ev{background:color-mix(in srgb, var(--ev) 15%, transparent);color:var(--ev)}.history-badge-bat{background:color-mix(in srgb, var(--orange) 15%, transparent);color:var(--orange)}.history-mode-log-desc{color:var(--mut)}.history-detail-section{margin-top:20px}.history-detail-section summary{cursor:pointer;color:var(--mut);margin-bottom:8px;font-size:13px}
