:root{--bg: #f6f7f4;--surface: #ffffff;--text: #1d2420;--muted: #5d6a63;--border: #d9ded9;--accent: #d97706;--accent-text: #ffffff;--error: #b42318;--load: #2563eb;--battery: #15803d;--rating-good: #bbe5c8;--rating-fair: #fbdf9d;--rating-poor: #f6b3a8;--rating-text: #1d2420;color-scheme:light}@media(prefers-color-scheme:dark){:root{--bg: #121614;--surface: #1b211e;--text: #e8ece9;--muted: #9aa69f;--border: #2e3732;--accent: #f59e0b;--accent-text: #1b1300;--error: #f97066;--load: #60a5fa;--battery: #4ade80;--rating-good: #1f5a38;--rating-fair: #6e5316;--rating-poor: #7c2d24;--rating-text: #f2f5f3;color-scheme:dark}}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}h1{font-size:1.6rem;margin:0 0 .5rem}h2{font-size:1.15rem;margin:0 0 .5rem}a{color:var(--accent)}.muted{color:var(--muted)}.card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1rem 1.25rem;margin:0 0 1rem}.narrow{max-width:24rem;margin:2rem auto}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;color:inherit;background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:.5rem .6rem}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:6px;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}.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}.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%}button.destructive{background:var(--error);color:#fff}.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}.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}.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)}.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}.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}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-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)}.savings-notes{margin-top:1rem;font-size:.9rem;color:var(--muted)}.savings-notes summary{cursor:pointer;color:var(--text)}.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}.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}.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)}.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}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}
