:root{--surface:#fcfcfb;--page:#f9f9f7;--ink:#0b0b0b;--ink-2:#52514e;--muted:#898781;--ring:#0b0b0b1a;--grid:#e1e0d9;--accent:#2a78d6;--good:#006300;--warn-bg:#fdf3d7;--warn-ink:#7a5a00;--genset:#e34948;--battery:#2a78d6;--solar:#eda100;--status-critical:#d03b3b;--status-serious:#ec835a;--status-warning:#fab219;--run-normal:#7d8fa3;--series-1:#2a78d6;--series-2:#1baf7a;--series-3:#eda100;--series-4:#008300;--series-5:#4a3aa7;--series-6:#e34948;--series-7:#e87ba4;--series-8:#eb6834}@media (prefers-color-scheme:dark){:root{--surface:#1a1a19;--page:#0d0d0d;--ink:#fff;--ink-2:#c3c2b7;--muted:#898781;--ring:#ffffff1a;--grid:#2c2c2a;--accent:#3987e5;--good:#0ca30c;--warn-bg:#33290a;--warn-ink:#e8c35c;--genset:#e66767;--battery:#3987e5;--solar:#c98500;--run-normal:#7f92a8;--series-1:#3987e5;--series-2:#199e70;--series-3:#c98500;--series-4:#008300;--series-5:#9085e9;--series-6:#e66767;--series-7:#d55181;--series-8:#d95926}}*{box-sizing:border-box}body{background:var(--page);color:var(--ink);margin:0;font:15px/1.5 system-ui,-apple-system,Segoe UI,sans-serif}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.eyebrow{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0 0 6px;font-size:11px;font-weight:600}h1{text-wrap:balance;margin:0 0 4px;font-size:24px;font-weight:650}.sub{color:var(--ink-2);margin:0}.badge-draft{background:var(--warn-bg);color:var(--warn-ink);letter-spacing:.06em;vertical-align:middle;border-radius:999px;margin-left:10px;padding:3px 8px;font-size:11px;font-weight:700;display:inline-block}.tiles{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;display:grid}.tile{background:var(--surface);border:1px solid var(--ring);border-radius:10px;padding:16px 18px}.tile .label{color:var(--ink-2);margin:0 0 2px;font-size:13px}.tile .value{margin:0;font-size:28px;font-weight:650}.tile .value small{color:var(--ink-2);margin-left:3px;font-size:15px;font-weight:500}.tile .note{color:var(--muted);margin:3px 0 0;font-size:12px}.tile.hero .value{color:var(--good)}.buckets{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;display:grid}.card{background:var(--surface);border:1px solid var(--ring);border-radius:10px;padding:18px}.card h2{margin:0 0 2px;font-size:15px;font-weight:650}.card .card-sub{color:var(--muted);margin:0 0 12px;font-size:13px}.stat-rows{flex-direction:column;gap:6px;display:flex}.stat-rows div{color:var(--ink-2);justify-content:space-between;gap:12px;font-size:14px;display:flex}.stat-rows b{color:var(--ink);font-variant-numeric:tabular-nums;font-weight:600}.embed-card{padding:18px 18px 8px}.embed-mount{min-height:400px}.embed-mount iframe{border:0;border-radius:6px;width:100%;height:760px}.embed-note{color:var(--muted);margin:8px 0;font-size:12px}.embed-error{border:1px dashed var(--grid);color:var(--ink-2);border-radius:8px;padding:24px;font-size:14px}.site-list{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;display:grid}.site-list a.card{color:inherit;display:block}.site-list a.card:hover{border-color:var(--accent);text-decoration:none}.footer-note{color:var(--muted);font-size:12px}.skeleton{color:var(--muted);text-align:center;padding:48px 0}.schematic{height:400px;position:relative}.schematic-wires{width:100%;height:calc(100% - 24px);position:absolute;inset:0}.wire{fill:none;stroke:var(--grid);stroke-width:2px;vector-effect:non-scaling-stroke}.wire.live{stroke:var(--baseline,var(--muted))}.node{background:var(--surface);border:1px solid var(--ring);border-radius:10px;width:30%;min-width:170px;padding:12px 14px 8px;position:absolute}.node-title{color:var(--ink-2);justify-content:space-between;align-items:center;gap:8px;margin:0;font-size:13px;display:flex}.node-value{margin:2px 0 4px;font-size:24px;font-weight:650}.node-value small{color:var(--muted);margin-left:4px;font-size:13px;font-weight:500}.node .spark{width:100%;height:26px;display:block}.node.generator{top:0;left:0}.node.battery{bottom:24px;left:0}.node.loads{top:0;right:0}.node.pv{bottom:24px;right:0}.node.inverter{text-align:center;background:var(--accent);color:#fff;border:none;width:86px;min-width:0;padding:10px 6px;top:50%;left:47%;transform:translate(-50%,-58%)}.node.inverter span{font-size:26px;line-height:1}.node.inverter p{margin:2px 0 0;font-size:12px;font-weight:600}.pill{background:var(--grid);color:var(--ink-2);border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700}.pill.running{background:var(--warn-bg);color:var(--warn-ink)}.schematic-asof{color:var(--muted);margin:0;font-size:12px;position:absolute;bottom:0;left:0}@media (max-width:720px){.schematic{gap:10px;height:auto;padding-bottom:20px;display:grid}.schematic-wires,.node.inverter{display:none}.node{width:auto;position:static}.schematic-asof{position:static}}.ax-grid{stroke:var(--grid);stroke-width:1px}.ax-baseline{stroke:var(--baseline,var(--muted));stroke-width:1px}.ax-text{fill:var(--muted);font-variant-numeric:tabular-nums;font-size:11px}.legend{flex-wrap:wrap;align-items:center;gap:8px 16px;display:flex}.legend span{color:var(--ink-2);white-space:nowrap;align-items:center;gap:6px;font-size:13px;display:inline-flex}.legend i{border-radius:3px;flex:none;width:12px;height:12px;display:inline-block}.chart-legend{margin:4px 0 8px}.panel-label{color:var(--ink-2);margin:14px 0 2px;font-size:13px;font-weight:600}.daynav{align-items:center}.day-switch{gap:6px;display:flex}.day-btn{border:1px solid var(--ring);color:var(--ink);background:var(--surface);border-radius:8px;padding:4px 12px;font-size:14px}.day-btn:hover{border-color:var(--accent);text-decoration:none}.day-btn.disabled{color:var(--muted);pointer-events:none}.analytics-embed{padding:8px}.analytics-embed .embed-mount iframe{height:1400px}.cal-scroll{overflow-x:auto}.cal-scroll svg{min-width:720px}.legend .legend-line{border-radius:2px;height:3px}.legend-hatch{background-image:repeating-linear-gradient(45deg, transparent 0 2px, var(--surface) 2px 3.5px)}.panel-pair{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;margin-top:14px;display:grid}.panel-callout{color:var(--ink-2);margin:4px 0 0;font-size:13px}.buckets.one-col{grid-template-columns:1fr}.buckets.one-col .card svg{max-width:700px}.topnav{z-index:20;background:var(--surface);border-bottom:1px solid var(--ring);align-items:center;gap:14px;padding:10px 20px;display:flex;position:sticky;top:0}.topnav .brand{color:var(--ink);font-size:15px;font-weight:650}.topnav .brand span{color:var(--muted);font-weight:500}.area-badge{text-transform:uppercase;letter-spacing:.06em;border-radius:999px;padding:3px 9px;font-size:11px;font-weight:600}.area-badge-ops{background:var(--warn-bg);color:var(--warn-ink)}.area-badge-report{background:var(--ring);color:var(--ink-2)}.site-switcher{margin-left:auto}.site-switcher select{border:1px solid var(--ring);background:var(--surface);max-width:340px;color:var(--ink);font:inherit;border-radius:8px;padding:6px 10px;font-size:13px}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.app-frame{flex-direction:column;min-height:100vh;display:flex}.content-grid{grid-template-columns:190px minmax(0,1fr);align-items:start;gap:24px;width:100%;max-width:1280px;margin:0 auto;padding:20px 20px 56px;display:grid}.content-grid>.main{flex-direction:column;gap:20px;min-width:0;display:flex}.content-single{flex-direction:column;gap:20px;width:100%;max-width:1280px;margin:0 auto;padding:20px 20px 56px;display:flex}.sidenav{flex-direction:column;gap:2px;display:flex;position:sticky;top:62px}.sidenav a{color:var(--ink-2);border-radius:8px;padding:7px 12px;font-size:14px}.sidenav a:hover{color:var(--ink);text-decoration:none}.sidenav a.active{color:var(--ink);background:var(--ring);font-weight:600}.card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px;display:flex}@media (max-width:860px){.content-grid{grid-template-columns:1fr;gap:14px}.sidenav{flex-direction:row;gap:6px;padding-bottom:4px;position:static;overflow-x:auto}.sidenav a{white-space:nowrap;border:1px solid var(--ring);border-radius:999px}.site-switcher select{max-width:170px}}.tbl-wrap{overflow-x:auto}.circuit-table{border-collapse:collapse;width:100%;font-size:14px}.circuit-table th{text-align:left;color:var(--muted);border-bottom:1px solid var(--grid);padding:6px 10px;font-size:12px;font-weight:600}.circuit-table td{border-bottom:1px solid var(--grid);color:var(--ink-2);padding:7px 10px}.circuit-table td:first-child{color:var(--ink);white-space:nowrap;font-weight:500}.circuit-table .num{text-align:right;font-variant-numeric:tabular-nums}.circuit-table .swatch{vertical-align:baseline;border-radius:3px;width:10px;height:10px;margin-right:8px;display:inline-block}.circuit-table .trend{width:120px}.circuit-table .trend .spark{width:100px;height:22px;display:block}@media (max-width:560px){.topnav{gap:10px}.topnav .brand span{display:none}}.sidenav .cta{border-top:1px solid var(--ring);color:var(--accent);border-radius:0;margin-top:10px;padding-top:12px;font-size:13px}.sidenav .cta:hover{color:var(--accent);background:0 0;text-decoration:underline}@media (max-width:860px){.sidenav .cta{border:1px solid var(--accent);border-radius:999px;margin-top:0;padding:7px 12px}}.topnav-link{color:var(--ink-2);font-size:13px;font-weight:600}.config-group{border:none;border-top:1px solid var(--grid);margin:0 0 8px;padding:12px 0 4px}.config-group legend{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding-right:10px;font-size:12px;font-weight:700}.config-field{grid-template-columns:minmax(220px,1fr) 180px minmax(90px,auto);align-items:center;gap:12px;padding:6px 0;display:grid}.config-field label{color:var(--ink);font-size:14px}.config-field .unit{color:var(--muted);font-size:12px;display:block}.config-field .field-note{color:var(--muted);font-size:12px;font-style:italic;display:block}.config-field input,.circuit-table input{border:1px solid var(--ring);background:var(--surface);color:var(--ink);font:inherit;border-radius:8px;width:100%;padding:6px 10px;font-size:14px}.config-field input::placeholder,.circuit-table input::placeholder{color:var(--muted)}.config-field .effective{color:var(--ink-2);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:13px}.form-foot{align-items:center;gap:14px;margin-top:14px;display:flex}.btn{background:var(--accent);color:#fff;font:inherit;cursor:pointer;border:none;border-radius:8px;padding:8px 16px;font-size:14px;font-weight:600}.btn:disabled{opacity:.6;cursor:default}.form-msg{margin:0;font-size:13px}.form-msg.ok{color:var(--good)}.form-msg.err{color:var(--status-critical)}@media (max-width:640px){.config-field{grid-template-columns:1fr;gap:4px}}.worst-days{flex-direction:column;gap:10px;display:flex}.worst-day{border:1px solid var(--ring);border-radius:8px;padding:10px 14px}.worst-day-head{flex-wrap:wrap;align-items:baseline;gap:12px;font-size:14px;display:flex}.worst-day-head span{color:var(--ink-2)}.worst-day-cost{font-variant-numeric:tabular-nums;margin-left:auto}.story-btn{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:none;margin-top:6px;padding:0;font-size:13px}.story-btn:hover{text-decoration:underline}.story-pending{color:var(--muted);margin-top:6px;font-size:13px;font-style:italic;display:inline-block}.day-story{color:var(--ink-2);border-left:3px solid var(--accent);margin:8px 0 0;padding-left:12px;font-size:14px}.week-summary-text{color:var(--ink-2);margin:0;font-size:15px;line-height:1.6}.schematic-rich{height:560px}.wire-flow{fill:none;stroke-width:2.5px;vector-effect:non-scaling-stroke;stroke-dasharray:5 11;stroke-linecap:round;animation:1s linear infinite wire-flow}@keyframes wire-flow{to{stroke-dashoffset:-16px}}@media (prefers-reduced-motion:reduce){.wire-flow{animation:none}}.node-rows{border-top:1px solid var(--grid);flex-direction:column;gap:3px;margin-top:8px;padding-top:6px;display:flex}.node-rows:empty{display:none}.node-rows div{color:var(--ink-2);justify-content:space-between;gap:8px;font-size:12px;display:flex}.node-rows b{color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600}.mppt-dot{border-radius:50%;width:7px;height:7px;margin-right:6px;display:inline-block}.schematic-rich .node.generator{top:0}.schematic-rich .node.battery{bottom:24px}@media (max-width:720px){.schematic-rich{height:auto}}.schematic-rich .node .spark{height:40px}.event-rows{flex-direction:column;gap:6px;display:flex}.event-row{color:var(--ink-2);justify-content:space-between;gap:12px;font-size:14px;display:flex}.event-row b{color:var(--ink);font-weight:600}.event-row-active{background:var(--warn-bg);border-radius:6px;margin:0 -8px;padding:4px 8px}.event-row-active b,.event-active-label{color:var(--warn-ink)}.event-when{white-space:nowrap;font-variant-numeric:tabular-nums}.event-kind{text-transform:uppercase;letter-spacing:.04em;color:var(--ink-3,var(--ink-2));margin-left:6px;font-size:11px}.event-more{color:var(--ink-2);margin:2px 0 0;font-size:13px}.health-tiles .tile .spark{width:100%;height:30px;margin-top:6px}.runs-table,.albert-table{border-collapse:collapse;width:100%;margin:6px 0 10px;font-size:13.5px}.runs-table th,.albert-table th{text-align:left;color:var(--ink-2);border-bottom:1px solid var(--grid);padding:5px 8px;font-weight:600}.runs-table td,.albert-table td{border-bottom:1px solid var(--grid);font-variant-numeric:tabular-nums;padding:6px 8px}.runs-table .num,.albert-table .num{text-align:right}.runs-table .warn-cell{color:var(--warn-ink);background:var(--warn-bg);border-radius:4px}.albert-table .note-cell{color:var(--ink-2);font-size:12.5px}.wf-label{font-weight:600}.pill.status-on-battery{background:var(--battery);color:#fff}.pill.status-generator{background:var(--genset);color:#fff}.pill.status-offline{background:var(--grid);color:var(--ink-2)}.chart-hover{position:relative}.chart-tip{background:var(--ink);color:var(--page);white-space:nowrap;pointer-events:none;z-index:30;border-radius:7px;padding:6px 10px;font-size:12.5px;line-height:1.35;position:absolute;transform:translate(-50%,calc(-100% - 10px));box-shadow:0 3px 12px #00000040}svg [data-tip]{cursor:default}svg rect[data-tip]:hover{stroke:var(--ink);stroke-width:1.25px}svg rect.hit[data-tip]{fill:#0000}svg rect.hit[data-tip]:hover{fill:var(--ring);stroke:none}svg path[data-tip]:hover{opacity:.6}.sankey-label{fill:var(--ink-2);font-weight:600}
