
:root{color-scheme:dark;--bg:#071019;--panel:#0d1a25;--panel2:#122331;--line:#203747;
--text:#eaf3f7;--muted:#91a8b5;--accent:#39d3a2;--accent2:#7ee8c6;
font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 85% 0,#123246 0,
var(--bg) 34rem);color:var(--text);font-size:16px;line-height:1.5;min-height:100vh}a{color:inherit}
.top{min-height:4.5rem;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 2rem;
gap:2.5rem;background:rgba(7,16,25,.9)}.brand{display:flex;align-items:center;gap:.75rem;font-weight:750;
text-decoration:none;white-space:nowrap}.mark{display:grid;place-items:center;width:2.1rem;height:2.1rem;
border-radius:.65rem;background:var(--accent);color:#042018;font-weight:900}.primary{display:flex;align-self:stretch;
align-items:stretch;gap:.35rem}.primary a{display:flex;align-items:center;text-decoration:none;padding:0 1rem;
color:var(--muted);border-bottom:2px solid transparent}.primary a.active{color:var(--text);border-color:var(--accent)}
.primary a[aria-disabled=true]{opacity:.45}.user{margin-left:auto;display:flex;align-items:center;gap:.75rem}.user-copy{display:grid;
line-height:1.15;text-align:right}.user-version{font-size:.72rem;color:var(--muted);font-weight:500;white-space:nowrap}
.avatar{display:grid;place-items:center;width:2rem;height:2rem;border-radius:50%;background:var(--panel2);
border:1px solid var(--line);font-weight:700}.shell{display:grid;grid-template-columns:16rem minmax(0,1fr);min-height:calc(100vh - 4.5rem)}
.side{padding:1.5rem;border-right:1px solid var(--line);background:rgba(8,19,28,.72)}.eyebrow{font-size:.78rem;
letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:750}.side a{display:block;margin-top:1rem;
padding:.7rem .8rem;text-decoration:none;border-radius:.55rem;background:var(--panel2);border:1px solid var(--line)}
.content{padding:clamp(1.25rem,2.5vw,2.5rem);max-width:100rem;width:100%}.title-row{display:flex;align-items:flex-start;
justify-content:space-between;gap:2rem}.title-row h1{font-size:clamp(1.8rem,4vw,3.3rem);line-height:1.05;
letter-spacing:-.045em;margin:.35rem 0 .8rem}.lede{color:var(--muted);max-width:43rem;margin:0}.badge{border:1px solid #276b58;
background:#0c2a24;color:var(--accent2);padding:.45rem .7rem;border-radius:999px;white-space:nowrap;font-size:.88rem}
.grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;margin-top:2.5rem}.card{background:linear-gradient(145deg,
var(--panel2),var(--panel));border:1px solid var(--line);border-radius:1rem;padding:1.25rem;min-height:9.5rem}
.card strong{display:block;font-size:1.35rem;margin:.55rem 0}.card p{color:var(--muted);margin:0}.status{display:flex;
align-items:center;gap:.55rem}.dot{width:.65rem;height:.65rem;border-radius:50%;background:var(--accent);box-shadow:0 0 1rem #39d3a299}
.action{display:inline-flex;margin-top:2.5rem;padding:.8rem 1rem;border:1px solid var(--accent);border-radius:.65rem;
color:var(--accent2);text-decoration:none;font-weight:700}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:1.25rem}
.login{width:min(28rem,100%);background:rgba(13,26,37,.96);border:1px solid var(--line);border-radius:1.2rem;
padding:clamp(1.4rem,5vw,2.4rem);box-shadow:0 2rem 5rem #0006}.login h1{font-size:2rem;letter-spacing:-.035em;margin:.9rem 0 .35rem}
.login p{color:var(--muted);margin:0 0 1.5rem}.field{display:grid;gap:.4rem;margin-top:1rem}.field label{font-size:.9rem;
font-weight:700}.field input{width:100%;border:1px solid var(--line);border-radius:.6rem;padding:.8rem;background:#071019;color:var(--text);
font:inherit}.button{width:100%;margin-top:1.35rem;padding:.85rem;border:0;border-radius:.65rem;background:var(--accent);
color:#042018;font:inherit;font-weight:800;cursor:pointer}.alert{padding:.75rem;border:1px solid #744928;background:#2b1d13;
color:#ffd39a;border-radius:.6rem;margin:1rem 0}.logout{margin:0}.logout button{border:1px solid var(--line);background:transparent;
color:var(--muted);border-radius:.5rem;padding:.45rem .65rem;cursor:pointer}.meta{font-size:.86rem;color:var(--muted);margin-top:1.5rem}
.inverter-select{width:100%;margin-top:.65rem;border:1px solid var(--line);border-radius:.55rem;padding:.7rem;background:#071019;color:var(--text);font:inherit}.inverter-menu{display:grid;gap:.4rem;margin-top:1rem}.inverter-menu button{appearance:none;text-align:left;border:1px solid transparent;border-radius:.55rem;padding:.65rem .7rem;background:transparent;color:var(--muted);font:inherit;cursor:pointer}.inverter-menu button.active{background:var(--panel2);border-color:var(--line);color:var(--text)}
.config-panel{margin-top:1.5rem;border:1px solid var(--line);border-radius:1rem;background:linear-gradient(145deg,var(--panel2),var(--panel));padding:1.25rem}.config-toolbar{display:flex;justify-content:space-between;align-items:center;gap:1rem;border-bottom:1px solid var(--line);padding-bottom:1rem}.config-actions{display:flex;gap:.6rem}.config-button{border:1px solid var(--accent);border-radius:.55rem;padding:.65rem .9rem;background:transparent;color:var(--accent2);font:inherit;font-weight:750;cursor:pointer}.config-button.primary{background:var(--accent);color:#042018}.config-button:disabled{opacity:.4;cursor:not-allowed}.config-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin-top:1rem}.config-field{display:grid;gap:.35rem}.config-field label{font-size:.82rem;color:var(--muted);font-weight:700}.config-field input,.config-field select{width:100%;border:1px solid var(--line);border-radius:.55rem;padding:.7rem;background:#071019;color:var(--text);font:inherit}.config-field input:disabled,.config-field select:disabled{opacity:.58}.config-wide{grid-column:1/-1}.config-note{color:var(--muted);font-size:.82rem}.config-status{min-height:1.5rem;margin-top:1rem;color:var(--muted)}.config-status.error{color:#ff9b94}.weekday-list{display:flex;flex-wrap:wrap;gap:.6rem}.weekday-list label{display:flex;align-items:center;gap:.35rem}.tou-grid{overflow:auto;grid-column:1/-1}.tou-grid table{width:100%;border-collapse:collapse;min-width:52rem}.tou-grid th,.tou-grid td{padding:.45rem;border-bottom:1px solid var(--line);text-align:left}.tou-grid input{min-width:5.5rem}.range-row{display:grid;grid-template-columns:1fr 7rem;gap:.75rem;align-items:center}.config-field input[type=range]{padding:0}.config-state{display:flex;align-items:center;gap:.55rem;margin-bottom:.35rem}.config-state[hidden]{display:none}.read-badge{display:inline-flex;border:1px solid var(--line);border-radius:999px;padding:.3rem .55rem;font-size:.76rem;color:var(--muted)}.config-state[data-state=live] .read-badge{border-color:#276b58;background:#0c2a24;color:var(--accent2)}.config-state-time{font-size:.76rem;color:var(--muted)}
.toggle-control{display:inline-flex;align-items:center;gap:.7rem;width:max-content;max-width:100%;cursor:pointer;color:var(--muted);font-weight:700}.toggle-control input{position:absolute;opacity:0;width:1px;min-width:0;height:1px;padding:0;margin:0;border:0}.toggle-track{position:relative;display:inline-block;flex:none;width:3.35rem;height:1.8rem;border:1px solid #506774;border-radius:999px;background:#263946;transition:background .18s,border-color .18s,opacity .18s}.toggle-track::after{content:"";position:absolute;left:.2rem;top:.2rem;width:1.3rem;height:1.3rem;border-radius:50%;background:#eef4f6;box-shadow:0 .12rem .35rem #0008;transition:transform .18s}.toggle-control input:checked+.toggle-track{border-color:var(--accent);background:var(--accent)}.toggle-control input:checked+.toggle-track::after{transform:translateX(1.53rem);background:#fff}.toggle-control input:focus-visible+.toggle-track{outline:2px solid var(--accent2);outline-offset:3px}.toggle-control input:disabled+.toggle-track{opacity:.42}.toggle-control:has(input:disabled){cursor:not-allowed;opacity:.7}.toggle-control.compact{display:flex;justify-content:center}.toggle-control.compact .toggle-track{width:2.55rem;height:1.4rem}.toggle-control.compact .toggle-track::after{left:.15rem;top:.15rem;width:1rem;height:1rem}.toggle-control.compact input:checked+.toggle-track::after{transform:translateX(1.15rem)}.tou-grid .toggle-control input{min-width:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media(max-width:800px){.top{height:auto;padding:.75rem 1rem;gap:.8rem;flex-wrap:wrap}.brand{margin-right:auto}
.primary{order:3;width:100%;overflow:auto}.primary a{padding:.55rem .75rem}.user{margin-left:0}.shell{display:block;min-height:0}
.side{border-right:0;border-bottom:1px solid var(--line);padding:1rem;display:flex;gap:1rem;align-items:center}.side a{margin:0}
.content{padding:1.5rem 1rem}.title-row{display:block}.badge{display:inline-block;margin-top:1rem}.grid{grid-template-columns:1fr;margin-top:1.5rem}.config-fields{grid-template-columns:1fr}.config-toolbar{align-items:flex-start;flex-direction:column}}

.flow-board{margin-top:2rem;border:1px solid var(--line);border-radius:1.25rem;padding:clamp(1rem,2.5vw,2rem);
background:linear-gradient(145deg,rgba(18,35,49,.94),rgba(9,21,30,.98));position:relative;overflow:hidden}
.flow-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}
.freshness{color:var(--muted);font-size:.9rem}.live-state{display:inline-flex;align-items:center;gap:.5rem;font-weight:750}
.live-state::before{content:"";width:.65rem;height:.65rem;border-radius:50%;background:var(--muted)}
.live-state[data-status=live]::before{background:var(--accent);box-shadow:0 0 1rem #39d3a299}
.live-state[data-status=stale]::before{background:#ffb454}.live-state[data-status=unavailable]::before{background:#ff766f}
.flow-map{display:grid;grid-template-columns:minmax(11rem,1fr) minmax(13rem,1.15fr) minmax(11rem,1fr);
grid-template-areas:"solar core grid" "battery core home";gap:1rem;align-items:stretch}
.flow-node{border:1px solid var(--line);background:#091620;border-radius:.9rem;padding:1.1rem;min-height:8.2rem;
display:flex;flex-direction:column;justify-content:space-between}.flow-node.solar{grid-area:solar}.flow-node.grid-side{grid-area:grid}
.flow-node.battery{grid-area:battery}.flow-node.home{grid-area:home}.flow-core{grid-area:core;display:grid;place-items:center;
text-align:center;border:1px solid #286c59;background:radial-gradient(circle,#123a32 0,#0a1b20 70%);border-radius:1rem;padding:1.5rem}
.node-icon{font-size:1.35rem;color:var(--accent2)}.node-label{color:var(--muted);font-size:.82rem;text-transform:uppercase;
letter-spacing:.1em;font-weight:750}.node-value{font-size:clamp(1.55rem,3vw,2.2rem);font-weight:800;letter-spacing:-.035em}
.node-detail{color:var(--muted);font-size:.88rem}.core-total{font-size:clamp(2rem,5vw,3.5rem);font-weight:850;letter-spacing:-.06em}
.inverter-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin-top:1rem}.inverter-card{border:1px solid var(--line);
border-radius:.8rem;padding:1rem;background:rgba(9,22,32,.75)}.inverter-card-head{display:flex;justify-content:space-between;gap:.75rem}
.inverter-status{text-transform:capitalize;color:var(--muted);font-size:.82rem}.inverter-power{font-size:1.35rem;font-weight:750;margin-top:.5rem}
.notice{border:1px solid #6d5929;background:#29230f;color:#ffe5a2;padding:.75rem 1rem;border-radius:.7rem;margin-top:1rem;display:none}
.notice.visible{display:block}.skeleton{color:var(--muted)}
@media(max-width:900px){.flow-map{grid-template-columns:1fr 1fr;grid-template-areas:"core core" "solar grid" "battery home"}}
@media(max-width:560px){.flow-map{display:flex;flex-direction:column}.flow-core{min-height:10rem;order:-1}.inverter-list{grid-template-columns:1fr}
.flow-head{align-items:flex-start;flex-direction:column}.flow-node{min-height:7rem}.user-name{display:none}}

.dashboard-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-areas:"solar ups grid" "battery status home";gap:1rem}.dashboard-tile{appearance:none;width:100%;
color:inherit;text-align:left;font:inherit;border:1px solid var(--line);background:#091620;border-radius:.9rem;padding:1.05rem;
min-height:10rem;display:flex;flex-direction:column;cursor:pointer;transition:transform .15s,border-color .15s,background .15s}
.dashboard-tile:hover,.dashboard-tile:focus-visible{transform:translateY(-2px);border-color:#39755f;background:#0b1c27;outline:none}
.tile-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.tile-head .node-icon{font-size:1.1rem}
.solar-tile{grid-area:solar}.battery-tile{grid-area:battery}.grid-tile{grid-area:grid}.home-tile{grid-area:home}.ups-tile{grid-area:ups}.status-tile{grid-area:status}
.solar-total{text-align:center;font-size:clamp(1.8rem,3vw,2.6rem);font-weight:850;letter-spacing:-.05em;padding:.4rem 0 .25rem}
.solar-progress{height:.48rem;border-radius:999px;overflow:hidden;background:#152733;border:1px solid #294150;margin:.2rem 0 .55rem}.solar-progress i{display:block;height:100%;width:0;transition:width .4s;background:#f6c453}.solar-progress.roof i{background:#f6c453}.solar-progress.ground i{background:#f08c46}
.solar-split{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--line);margin:0 -.25rem -.15rem}
.solar-part{padding:.65rem .65rem 0;text-align:center}.solar-part+ .solar-part{border-left:1px solid var(--line)}
.sub-label{display:block;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em}.sub-value{font-weight:750;font-size:1rem}
.battery-layout{display:grid;grid-template-columns:minmax(0,1fr) 5.6rem;gap:1rem;align-items:center;flex:1}.battery-soc{border-left:1px solid var(--line);
padding-left:1rem;display:grid;justify-items:center;gap:.4rem}.battery-icon{width:3.6rem;height:5.8rem;border:3px solid #6b8390;border-radius:.45rem;
padding:.25rem;display:flex;align-items:flex-end;position:relative}.battery-icon::before{content:"";position:absolute;width:1.5rem;height:.35rem;
background:#6b8390;border-radius:.2rem .2rem 0 0;top:-.58rem;left:50%;transform:translateX(-50%)}.battery-fill{width:100%;height:0;
background:var(--accent);border-radius:.18rem;transition:height .4s,background .3s}.soc-text{font-weight:800}
.direction-value{font-size:clamp(1.45rem,2.4vw,2rem);font-weight:800;letter-spacing:-.035em;margin:.55rem 0 .45rem}.direction-label{color:var(--muted);font-size:.78rem}.direction-bar+.direction-label{white-space:nowrap;font-size:.7rem}
.direction-bar{display:grid;grid-template-columns:1fr 1fr;height:.75rem;border-radius:999px;overflow:hidden;background:#152733;border:1px solid #294150}
.bar-half{position:relative}.bar-half:first-child{border-right:1px solid #73909c}.bar-fill{position:absolute;top:0;bottom:0;width:0;transition:width .4s}
.bar-half:first-child .bar-fill{right:0;background:#ff6f68}.bar-half:last-child .bar-fill{left:0;background:#3bd49f}
.ups-tile[data-alert=true]{border-color:#c5534d;background:linear-gradient(145deg,#32181a,#151821);box-shadow:0 0 1.25rem #d3433822}
.status-list{display:grid;gap:.6rem;margin-top:.75rem}.status-row{display:flex;align-items:center;justify-content:space-between;gap:.6rem;
padding:.45rem .55rem;background:#0d202b;border-radius:.5rem}.status-name{font-size:.8rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.status-config{display:inline-grid;place-items:center;width:1.7rem;height:1.7rem;border:1px solid var(--line);border-radius:.45rem;text-decoration:none;color:var(--muted)}
.status-pill{display:inline-flex;align-items:center;gap:.35rem;text-transform:capitalize;font-size:.75rem;color:var(--muted)}.status-pill::before{content:"";
width:.5rem;height:.5rem;border-radius:50%;background:#ff766f}.status-pill[data-status=live]::before{background:var(--accent)}.status-pill[data-status=stale]::before{background:#ffb454}
.today-section{margin-top:1.15rem}.section-head{display:flex;align-items:end;justify-content:space-between;margin-bottom:.65rem}.section-head h2{font-size:1rem;margin:0}
.today-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem}.energy-tile{min-height:7.4rem;padding:.85rem}.energy-tile .node-value{font-size:1.25rem;margin-top:.35rem}.energy-solar .solar-total{font-size:1.35rem;padding:.3rem 0 .45rem}.energy-solar .solar-part{padding:.5rem .35rem 0}.energy-split{display:grid;grid-template-columns:1fr 1fr;margin-top:.55rem;border-top:1px solid var(--line)}.energy-half{text-align:center;padding:.55rem .25rem 0}.energy-half+ .energy-half{border-left:1px solid var(--line)}.energy-half strong{display:block;margin-top:.25rem;font-size:1.05rem}
.detail-dialog{width:min(58rem,calc(100vw - 2rem));max-height:calc(100vh - 2rem);overflow:auto;border:1px solid var(--line);border-radius:1rem;
background:#091620;color:var(--text);padding:0;box-shadow:0 2rem 6rem #000b}.detail-dialog::backdrop{background:#02070dbb;backdrop-filter:blur(3px)}
.dialog-inner{padding:1.25rem}.dialog-head{display:flex;justify-content:space-between;align-items:center;gap:1rem;border-bottom:1px solid var(--line);padding-bottom:.8rem}
.dialog-head h2{margin:0;font-size:1.4rem}.dialog-close{border:1px solid var(--line);background:#112431;color:var(--text);font:inherit;border-radius:.5rem;
width:2.2rem;height:2.2rem;cursor:pointer}.detail-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.65rem;margin:1rem 0}
.detail-metric{background:#0d202b;border-radius:.55rem;padding:.65rem}.detail-metric strong{display:block;font-size:1.05rem;margin-top:.2rem}
.chart-wrap{position:relative;height:18rem;border:1px solid var(--line);border-radius:.65rem;background:#071019;padding:.6rem}.chart-wrap canvas{width:100%;height:100%;cursor:crosshair;touch-action:manipulation}
.chart-tooltip{position:absolute;z-index:2;display:grid;gap:.1rem;max-width:16rem;padding:.45rem .6rem;border:1px solid #4b6a7a;border-radius:.5rem;background:#102531;color:var(--text);box-shadow:0 .4rem 1rem #0008;font-size:.78rem;pointer-events:none}.chart-tooltip[hidden],.chart-marker[hidden]{display:none}.chart-tooltip strong{font-size:.84rem}.chart-tooltip time{color:var(--muted)}.chart-marker{position:absolute;z-index:1;width:.65rem;height:.65rem;border:2px solid #fff;border-radius:50%;box-shadow:0 0 0 3px #071019;transform:translate(-50%,-50%);pointer-events:none}
.chart-legend{display:flex;flex-wrap:wrap;gap:.45rem;margin:.65rem 0;font-size:.8rem;color:var(--muted)}.legend-toggle{appearance:none;border:1px solid var(--line);border-radius:999px;background:#0d202b;color:inherit;padding:.35rem .6rem;cursor:pointer}.legend-toggle[aria-pressed=false]{opacity:.42;text-decoration:line-through}.legend-swatch{display:inline-block;width:.65rem;height:.65rem;border-radius:50%;margin-right:.35rem}
.dialog-note{color:var(--muted);font-size:.82rem;margin:.8rem 0 0}.empty-chart{display:grid;place-items:center;height:100%;color:var(--muted);text-align:center}
@media(max-width:1100px){.dashboard-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:"solar ups" "battery status" "grid home"}.today-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.dashboard-grid,.today-grid{grid-template-columns:1fr}.detail-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.energy-tile{min-height:5.5rem}
.dashboard-grid{grid-template-areas:"solar" "battery" "ups" "status" "grid" "home"}
.user-copy{display:none}.chart-wrap{height:14rem}}
