@charset "UTF-8";:root{--bg: #f6f7f4;--surface: #ffffff;--surface-sunk: #eff1ec;--text: #1d2420;--muted: #5d6a63;--border: #d9ded9;--accent: #d97706;--accent-text: #ffffff;--accent-soft: #fdf1e1;--error: #b42318;--load: #2563eb;--solar: var(--accent);--battery: #15803d;--good: #15803d;--good-soft: #e3f4e8;--warn: #92400e;--warn-soft: #fff4d6;--rating-good: #bbe5c8;--rating-fair: #fbdf9d;--rating-poor: #f6b3a8;--rating-text: #1d2420;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.5rem;--space-6: 2rem;--radius-sm: 6px;--radius: 10px;--radius-lg: 14px;--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--text-lg: 1.15rem;--text-xl: 1.5rem;--text-figure: 1.9rem;--page-width: 52rem;--gutter: .75rem;--tab-bar-height: 3.75rem;color-scheme:light}@media(min-width:40rem){:root{--gutter: 1rem}}@media(prefers-color-scheme:dark){:root{--bg: #121614;--surface: #1b211e;--surface-sunk: #161b18;--text: #e8ece9;--muted: #9aa69f;--border: #2e3732;--accent: #f59e0b;--accent-text: #1b1300;--accent-soft: #3a2a10;--error: #f97066;--load: #60a5fa;--battery: #4ade80;--good: #4ade80;--good-soft: #173a26;--warn: #fcd34d;--warn-soft: #3b2f10;--rating-good: #1f5a38;--rating-fair: #6e5316;--rating-poor: #7c2d24;--rating-text: #f2f5f3;color-scheme:dark}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;overflow-wrap:break-word}h1{font-size:var(--text-xl);line-height:1.2;margin:0 0 var(--space-2)}h2{font-size:var(--text-lg);line-height:1.3;margin:0 0 var(--space-2)}a{color:var(--accent)}img,svg{max-width:100%}.muted{color:var(--muted)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-4);margin:0 0 var(--space-3)}@media(min-width:40rem){.card{padding:var(--space-4) var(--space-5);margin-bottom:var(--space-4)}}.narrow{max-width:24rem;margin:2rem auto}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}a:focus-visible,button:focus-visible,summary:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}fieldset.card legend{font-weight:600;padding:0 .25rem}form{display:flex;flex-direction:column;gap:.75rem}.row{display:flex;flex-wrap:wrap;gap:.75rem;align-items:end}.row>label{flex:1 1 10rem}label{display:flex;flex-direction:column;gap:.25rem;font-size:.9rem;margin-bottom:.5rem}input,select{font:inherit;font-size:var(--text-base);color:inherit;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:.5rem .6rem;min-height:2.5rem;max-width:100%}input.ng-touched.ng-invalid{border-color:var(--error)}label.choice{flex-direction:row;align-items:flex-start;gap:.6rem}label.choice>span{display:flex;flex-direction:column}button{font:inherit;font-weight:600;border:none;border-radius:var(--radius-sm);padding:.6rem 1.1rem;background:var(--accent);color:var(--accent-text);cursor:pointer;align-self:flex-start}button:disabled{opacity:.6;cursor:default}button.secondary{background:transparent;color:var(--text);border:1px solid var(--border)}button.link{background:none;color:var(--accent);padding:0;font-weight:400;text-align:left}.array{border-bottom:1px dashed var(--border);padding-bottom:.75rem;margin-bottom:.75rem}.field-error,.form-error{color:var(--error);font-size:.9rem;margin:0}button.destructive{background:var(--error);color:#fff}.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(10rem,1fr));gap:1rem;margin-bottom:1rem}.tile{display:flex;flex-direction:column;margin:0}.tile strong{font-size:1.4rem}.notice{border-left:3px solid var(--accent);background:var(--surface);padding:.5rem .75rem;margin:0 0 1rem}.privacy ul{margin:0;padding-left:1.2rem}.privacy ul li+li{margin-top:.35rem}.api-usage{font-size:.9rem;color:var(--muted);border-left:3px solid var(--border);padding-left:.75rem;margin:0}.job{display:flex;flex-direction:column;gap:.25rem;margin:0 0 1rem}.job.failed{color:var(--error)}.job progress{width:100%}.day-picker{max-width:12rem;margin-bottom:1rem}.day-stepper{display:flex;align-items:center;justify-content:space-between;gap:.75rem;max-width:26rem;margin:0 auto 1rem}.day-stepper button{min-width:2.75rem;min-height:2.75rem;padding:0;font-size:1.5rem;line-height:1}.day-stepper button:disabled{opacity:.35;cursor:default}.day-stepper-label{display:flex;flex-direction:column;align-items:center;flex:1;min-height:2.75rem;text-align:center}.day-stepper-label strong{font-size:1.1rem}.day-stepper-label span{font-size:.85rem}.eyebrow{display:flex;justify-content:space-between;align-items:center;gap:var(--space-2);margin:0 0 var(--space-1);font-size:var(--text-xs);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}.figure{margin:0;font-size:var(--text-figure);font-weight:700;line-height:1.1}.figure small{font-size:var(--text-base);font-weight:500;color:var(--muted)}.badge{display:inline-block;padding:.1rem .6rem;border-radius:99px;font-size:var(--text-xs);font-weight:600;vertical-align:middle;background:var(--surface-sunk);color:var(--muted)}.badge.good{background:var(--good-soft);color:var(--good)}.badge.warn{background:var(--warn-soft);color:var(--warn)}details.disclosure>summary{display:flex;justify-content:space-between;align-items:center;gap:var(--space-2);min-height:2.75rem;margin:calc(-1 * var(--space-2)) 0;font-weight:600;cursor:pointer;list-style:none}details.disclosure>summary::-webkit-details-marker{display:none}details.disclosure>summary:after{content:"\25b8";color:var(--muted);transition:transform .15s}details.disclosure[open]>summary{margin-bottom:var(--space-2)}details.disclosure[open]>summary:after{transform:rotate(90deg)}.card>.status{margin:var(--space-2) 0 0}.pair{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4)}.pair .figure{font-size:var(--text-xl)}.pair .label{font-size:var(--text-xs);color:var(--muted)}.range{position:relative;height:6px;margin:var(--space-2) 0 2px;border-radius:3px;background:var(--surface-sunk)}.range span{position:absolute;top:0;bottom:0;border-radius:3px;opacity:.45}.range span.load{background:var(--load)}.range span.solar{background:var(--solar)}.range i{position:absolute;top:-3px;width:2px;height:12px;background:var(--text)}.soc-bar{height:10px;margin-top:var(--space-2);border-radius:5px;background:var(--surface-sunk);overflow:hidden}.soc-bar span{display:block;height:100%;background:var(--battery)}.weather-line{display:flex;align-items:center;gap:var(--space-2);margin:var(--space-3) 0 0;padding:var(--space-2) var(--space-3);border-radius:var(--radius);background:var(--surface-sunk);font-size:var(--text-sm)}.weather-line .icon{font-size:1.25rem;line-height:1}.card-link{margin:var(--space-2) 0 0;font-size:var(--text-sm);font-weight:600}.card-link a{text-decoration:none}details.chart-disclosure{margin-top:var(--space-3);padding-top:var(--space-2);border-top:1px dashed var(--border)}details.chart-disclosure>summary{margin:0;min-height:2.25rem;font-size:var(--text-sm);color:var(--muted)}.lock-line{margin:0 0 var(--space-2);font-size:var(--text-sm)}.lock-line a{margin-left:var(--space-1)}.forecast-chart{width:100%;height:auto;display:block}.forecast-chart .grid{stroke:var(--border)}.forecast-chart .axis{fill:var(--muted);font-size:11px}.forecast-chart .series{fill:none;stroke-width:2}.forecast-chart .band{stroke:none;opacity:.18}.forecast-chart .load{stroke:var(--load);fill:var(--load)}.forecast-chart .solar{stroke:var(--accent);fill:var(--accent)}.forecast-chart .series.load,.forecast-chart .series.solar{fill:none}.forecast-chart .series.battery{stroke:var(--battery)}.forecast-chart .crosshair{stroke:var(--muted);stroke-dasharray:2 3}.forecast-chart .hit{fill:transparent}.forecast-chart .dot{stroke:var(--surface);stroke-width:2}.forecast-chart .dot.battery{fill:var(--battery)}.forecast-chart .dot.load{fill:var(--load)}.forecast-chart .dot.solar{fill:var(--accent)}.forecast-chart .series.battery-assumed{stroke:var(--battery);stroke-dasharray:2 4}.forecast-chart .force{fill:var(--battery);opacity:.18}.forecast-chart .hold{fill:var(--load);opacity:.14}.forecast-chart .limit{stroke:var(--muted);stroke-dasharray:2 3}.forecast-chart .limit.target{stroke:var(--battery);stroke-dasharray:5 3}.legend{font-size:.9rem;margin:.5rem 0 0}.chart-readout{min-height:1.5rem;margin:.5rem 0 0;font-size:.9rem}.chart-toggles{display:flex;flex-wrap:wrap;gap:.25rem 1rem;margin-top:.5rem}.chart-toggles label{flex-direction:row;align-items:center;gap:.4rem;margin-bottom:0;cursor:pointer}.chart-toggles input{width:auto;margin:0}.key{display:inline-block;width:.8rem;height:.8rem;border-radius:2px;vertical-align:-.1rem}.key.load{background:var(--load)}.key.solar,.key.export{background:var(--accent)}.key.import{background:var(--load)}.key.battery{background:var(--battery)}.key.force{background:color-mix(in srgb,var(--battery) 25%,transparent)}.key.hold{background:color-mix(in srgb,var(--load) 25%,transparent)}.key.best{background:transparent;border-top:2px dashed var(--muted);height:0;vertical-align:.2rem}.key.in-progress{background:transparent;border:1px dashed var(--muted)}.key.lead-up{background:color-mix(in srgb,var(--muted) 18%,transparent)}.key.rating-good{background:var(--rating-good)}.key.rating-fair{background:var(--rating-fair)}.key.rating-poor{background:var(--rating-poor)}.key.ss{background:var(--muted)}.key.cheap{background:var(--border)}.flow-chart,.week-chart{width:100%;height:auto;display:block}.flow-chart .grid,.week-chart .grid{stroke:var(--border)}.flow-chart .axis,.flow-chart .value,.week-chart .axis,.week-chart .value{fill:var(--muted);font-size:11px}.flow-chart .value,.week-chart .value{fill:var(--text)}.flow-chart .divider,.week-chart .divider{stroke:var(--border);stroke-dasharray:2 3}.flow-chart .cheap,.week-chart .cheap{fill:var(--border);opacity:.45}.flow-chart .soc,.week-chart .soc{fill:none;stroke:var(--battery);stroke-width:2}.flow-chart .lead-up,.week-chart .lead-up{fill:var(--muted);opacity:.12}.flow-chart .soc.best,.week-chart .soc.best{stroke:var(--muted);stroke-dasharray:4 3;stroke-width:1.5}.flow-chart .import,.week-chart .import{fill:var(--load)}.flow-chart .export,.week-chart .export{fill:var(--accent)}.flow-chart .ss,.week-chart .ss{fill:var(--muted);opacity:.55}.flow-chart .soc-range,.week-chart .soc-range{stroke:var(--battery);stroke-width:2}.flow-chart .soc-end,.week-chart .soc-end{fill:var(--battery);stroke:var(--surface);stroke-width:2}.flow-chart .crosshair,.week-chart .crosshair{stroke:var(--muted)}.flow-chart .hit,.week-chart .hit{fill:transparent}.savings-chart{width:100%;height:auto;display:block}.savings-chart .grid{stroke:var(--border)}.savings-chart .zero{stroke:var(--muted)}.savings-chart .axis,.savings-chart .value{fill:var(--muted);font-size:11px}.savings-chart .value{fill:var(--text);font-weight:600}.savings-chart .avoided{fill:var(--battery)}.savings-chart .income{fill:var(--accent)}.savings-chart .grid-only{fill:var(--muted);opacity:.6}.savings-chart .paid{fill:var(--load)}.savings-chart .line{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round;opacity:1}.savings-chart .line.grid-only{stroke:var(--muted)}.savings-chart .line.paid{stroke:var(--load)}.savings-chart .gap{fill:var(--battery);opacity:.14}.savings-chart .week-bar{cursor:pointer}.savings-chart .week-bar.dim rect:not(.hit){opacity:.35}.savings-chart .hit{fill:transparent}.key.avoided{background:var(--battery)}.key.income{background:var(--accent)}.key.grid-only{background:var(--muted)}.key.paid{background:var(--load)}.data-freshness{min-height:1.5rem}.home-result{margin-top:.75rem}.good-solar{display:block}.verdict{font-size:1.05rem;margin:0 0 .75rem}.night-verdict{margin:.25rem 0 0;padding:.25rem .5rem;border-radius:6px}.night-verdict.rating-good{background:var(--rating-good);color:var(--rating-text)}.night-verdict.rating-fair{background:var(--rating-fair);color:var(--rating-text)}.night-verdict.rating-poor{background:var(--rating-poor);color:var(--rating-text)}.calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.25rem}.calendar-weekday{text-align:center;font-size:.8rem}.calendar-day{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:3.25rem;min-width:0;padding:.15rem;border:2px solid transparent;border-radius:6px;color:var(--rating-text);font-size:.85rem;line-height:1.2}.calendar-day.good{background:var(--rating-good)}.calendar-day.fair{background:var(--rating-fair)}.calendar-day.poor{background:var(--rating-poor)}.calendar-day.empty{background:var(--border);opacity:.45}.calendar-day.in-progress{background:transparent;border:2px dashed var(--muted);color:var(--text)}.calendar-day.selected{border-color:var(--text)}.calendar-date{font-size:.75rem}.look-back h3{margin:1.25rem 0 .5rem}dialog.modal{width:min(52rem,100vw - 2rem);max-height:calc(100vh - 2rem);overflow:auto;padding:1.25rem 1.5rem;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--text)}dialog.modal::backdrop{background:#00000073}dialog.modal h3{margin:1.25rem 0 .25rem;font-size:1.05rem}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:1rem}.modal-head h2{margin:0}.savings-controls{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1rem;margin:1rem 0 .5rem}.savings-controls .week-pick{width:auto;margin:0}.switch{display:inline-flex;border:1px solid var(--border);border-radius:6px;overflow:hidden}.switch button{border-radius:0;padding:.4rem .9rem;font-weight:400;background:transparent;color:var(--muted)}.switch button+button{border-left:1px solid var(--border)}.switch button[aria-pressed=true]{background:var(--accent);color:var(--accent-text);font-weight:600}.better{color:var(--battery)}.worse{color:var(--error)}.savings-notes{margin-top:1rem;font-size:.9rem;color:var(--muted)}.savings-notes summary{cursor:pointer;color:var(--text)}.history-week .tiles{grid-template-columns:repeat(auto-fit,minmax(8.5rem,1fr));gap:var(--space-3);margin-bottom:0}.history-week .tile{padding:var(--space-2) 0}.savings-open{width:100%}@media(min-width:40rem){.savings-open{width:auto}}.data-status .tiles{grid-template-columns:repeat(auto-fit,minmax(8.5rem,1fr));gap:var(--space-3);margin-bottom:0}.plan-modes{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:1rem;margin-bottom:1rem}.plan-modes .chosen{border-color:var(--accent);border-width:2px}.plan-modes .downsides{border-left:3px solid var(--accent);padding-left:.75rem;margin:.75rem 0;font-size:.9rem}.plan-modes .downsides ul{margin:.25rem 0 0;padding-left:1.1rem}.plan-modes .target{font-size:2rem;font-weight:700;line-height:1.1}table.plan-table{width:100%;border-collapse:collapse;font-size:.9rem;margin-bottom:.5rem}table.plan-table th,table.plan-table td{text-align:right;padding:.3rem .5rem;border-bottom:1px solid var(--border)}table.plan-table th:first-child,table.plan-table td:first-child{text-align:left;padding-left:0}.table-scroll{overflow-x:auto}.soc-input{max-width:16rem}ul.plain{margin:0;padding-left:1.2rem}table.backtest{width:100%;border-collapse:collapse;font-size:.9rem;margin-bottom:.5rem}table.backtest th,table.backtest td{text-align:left;padding:.3rem .5rem .3rem 0;border-bottom:1px solid var(--border);vertical-align:top}table.backtest .bar{display:block;height:.35rem;border-radius:2px;margin-bottom:2px}table.backtest .bar.load{background:var(--load)}table.backtest .bar.solar{background:var(--accent)}table.backtest .bar.predicted{opacity:.45}.usage-selector{max-width:26rem;margin:0 auto 1rem;text-align:center}.usage-selector .segmented{display:grid;grid-template-columns:repeat(4,1fr);gap:.25rem}.usage-selector .segmented button{min-height:2.5rem;padding:.25rem .5rem}.usage-selector .usage-hint{margin:.4rem 0 0;font-size:.9rem}.usage-selector .car-charge,.usage-selector .holiday{margin-top:.75rem;text-align:left}.usage-selector .holiday .row{margin-top:.5rem}.usage-note{margin:.25rem 0 .5rem}.usage-mark{display:block;font-size:.7rem;line-height:1;color:var(--muted)}.mark-past{margin:.75rem 0}.mark-past .usage-selector{margin:.5rem 0 0;max-width:22rem}.tariff h3{font-size:1rem;margin:.5rem 0}.tariff .hint{font-size:.85rem;margin:0 0 .5rem}.tariff .band>label{flex:1 1 6rem}.tariff .band>button.link{margin-bottom:1rem}.rate-section{border-bottom:1px dashed var(--border);padding-bottom:.75rem;margin-bottom:.75rem}.timeline{margin-top:.75rem;font-size:.8rem}.timeline-row{display:grid;grid-template-columns:5rem 1fr;align-items:center;gap:.5rem;margin-bottom:2px}.timeline .cells{display:grid;grid-template-columns:repeat(48,1fr);height:1.1rem;border-radius:3px;overflow:hidden}.timeline .cells span{background:var(--accent)}.timeline .cells.export span{background:var(--load)}.timeline .cells span.gap{background:repeating-linear-gradient(45deg,var(--error),var(--error) 2px,transparent 2px,transparent 4px)}.timeline-axis{display:flex;justify-content:space-between;margin-left:5.5rem}.setup .save-bar{position:sticky;bottom:calc(var(--tab-bar-height) + env(safe-area-inset-bottom));z-index:5;margin:var(--space-4) calc(-1 * var(--gutter)) 0;padding:var(--space-3) var(--gutter);background:var(--bg);border-top:1px solid var(--border)}.setup .save-bar button{width:100%}@media(min-width:48rem){.setup .save-bar{bottom:0;margin-inline:0;padding-inline:0}.setup .save-bar button{width:auto}}.opt-in ul,.test-steps{padding-left:1.25rem}.test-steps{list-style:none;padding-left:0}.test-steps li{display:flex;gap:.75rem;align-items:flex-start}.test-steps .tick{font-weight:700;width:1rem}.test-steps li.passed .tick{color:var(--accent)}.test-steps p{margin:.15rem 0 .75rem}.preview{margin-top:1rem}.preview tr.removed td{text-decoration:line-through;opacity:.7}.preview pre{overflow-x:auto;font-size:.8rem}.preview table.plan-table th,.preview table.plan-table td,table.control-log th,table.control-log td{text-align:left}.control-log pre{overflow-x:auto;font-size:.75rem;max-width:40rem}.result-mismatch,.result-failed{border-left-color:var(--error)}ol.api-calls{padding-left:1.5rem}ol.api-calls li{margin:.5rem 0;padding-left:.5rem;border-left:3px solid var(--border)}ol.api-calls li.writes{border-left-color:var(--accent)}ol.api-calls .badge{display:inline-block;margin-right:.4rem;padding:0 .4rem;border:1px solid var(--border);border-radius:.6rem;font-size:.75rem;color:var(--muted)}ol.api-calls li.writes .badge{border-color:var(--accent);color:var(--accent)}ol.api-calls code{overflow-wrap:anywhere}@media(max-width:40rem){table.control-log thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}table.control-log tr,table.control-log td{display:block}table.control-log tr{padding:var(--space-2) 0;border-bottom:1px solid var(--border)}table.control-log td{border:0;padding:.15rem 0}table.control-log td[data-label]:before{content:attr(data-label) ": ";color:var(--muted)}table.control-log td[data-label=Details]:before{display:block}.control-log pre{max-width:calc(100vw - 4rem)}}
