:root{--bg-0:#0a0e1a;--bg-1:#111726;--bg-2:#1a2235;--bg-3:#232d44;--border:#2a3650;--border-strong:#3a4866;--text-0:#f5f7fb;--text-1:#c9d2e3;--text-2:#8b97b0;--text-3:#5d6a85;--brand:#4ade80;--brand-dim:#166534;--cold:#38bdf8;--cold-dim:#075985;--hot:#f97316;--hot-dim:#7c2d12;--elec:#a78bfa;--thermal:#2dd4bf;--savings:#4ade80;--warn:#facc15;--danger:#f87171;--mode-manual:#64748b;--mode-cold-charge:#38bdf8;--mode-cold-discharge:#0ea5e9;--mode-hot-charge:#fb923c;--mode-hot-discharge:#f97316;--mode-peak:#a78bfa;--mode-arbitrage:#4ade80;--mode-dr:#facc15;--mode-optimal:#2dd4bf;--r-sm:6px;--r-md:10px;--r-lg:14px;--r-xl:20px;--shadow-1:0 1px 2px #0000004d,0 0 0 1px var(--border);--shadow-2:0 6px 24px #00000059,0 0 0 1px var(--border)}*{box-sizing:border-box}#root,body,html{background:#0a0e1a;background:var(--bg-0);color:#f5f7fb;color:var(--text-0);height:100%;margin:0;padding:0}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5}button{background:none;border:none;cursor:pointer;font-family:inherit}a,button{color:inherit}a{text-decoration:none}::-webkit-scrollbar{height:10px;width:10px}::-webkit-scrollbar-track{background:#0000}::-webkit-scrollbar-thumb{background:#232d44;background:var(--bg-3);border-radius:6px}::-webkit-scrollbar-thumb:hover{background:#3a4866;background:var(--border-strong)}.app{display:grid;grid-template-columns:260px minmax(0,1fr);height:100vh;overflow:hidden}.sidebar{background:#111726;background:var(--bg-1);border-right:1px solid #2a3650;border-right:1px solid var(--border);display:flex;flex-direction:column;overflow-y:auto}.sidebar-brand{align-items:center;display:flex;gap:10px;padding:20px 20px 14px}.sidebar-brand-mark{display:block;filter:drop-shadow(0 2px 6px rgba(96,165,250,.25));height:36px;object-fit:contain;width:36px}.sidebar-brand-name{font-weight:700;letter-spacing:.3px}.sidebar-brand-sub,.sidebar-section-label{color:#5d6a85;color:var(--text-3);font-size:11px}.sidebar-section-label{letter-spacing:1px;padding:18px 20px 6px;text-transform:uppercase}.site-switcher{background:#1a2235;background:var(--bg-2);border:1px solid #2a3650;border:1px solid var(--border);border-radius:10px;border-radius:var(--r-md);margin:4px 12px 12px;overflow:hidden}.site-switcher-btn{align-items:center;border-bottom:1px solid #2a3650;border-bottom:1px solid var(--border);display:flex;font-size:13px;gap:10px;padding:10px 12px;text-align:left;width:100%}.site-switcher-btn:last-child{border-bottom:none}.site-switcher-btn.active,.site-switcher-btn:hover{background:#232d44;background:var(--bg-3)}.site-switcher-btn.active{box-shadow:inset 3px 0 0 #4ade80;box-shadow:inset 3px 0 0 var(--brand)}.site-dot{background:#5d6a85;background:var(--text-3);border-radius:50%;height:8px;width:8px}.site-dot.online{background:#4ade80;background:var(--brand);box-shadow:0 0 8px #4ade80;box-shadow:0 0 8px var(--brand)}.site-dot.warn{background:#facc15;background:var(--warn)}.site-meta{display:flex;flex-direction:column;min-width:0}.site-name{color:#f5f7fb;color:var(--text-0);font-weight:600}.site-loc{color:#5d6a85;color:var(--text-3);font-size:11px}.nav{display:flex;flex-direction:column;gap:2px;padding:4px 8px 16px}.nav-link{align-items:center;border-radius:10px;border-radius:var(--r-md);color:#c9d2e3;color:var(--text-1);display:flex;font-size:13px;gap:10px;padding:9px 12px}.nav-link:hover{background:#1a2235;background:var(--bg-2)}.nav-link.active,.nav-link:hover{color:#f5f7fb;color:var(--text-0)}.nav-link.active{background:#232d44;background:var(--bg-3)}.sidebar-foot{border-top:1px solid #2a3650;border-top:1px solid var(--border);color:#5d6a85;color:var(--text-3);font-size:11px;margin-top:auto;padding:12px 20px}.main{min-width:0;overflow-y:auto;padding:24px 28px 80px}.page-head{align-items:flex-end;display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;margin-bottom:20px}.page-title{font-size:22px;font-weight:700;margin:0}.page-sub{color:#8b97b0;color:var(--text-2);font-size:13px;margin-top:4px}.range-control{align-items:center;display:inline-flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.period-picker,.range-picker{background:#1a2235;background:var(--bg-2);border:1px solid #2a3650;border:1px solid var(--border);border-radius:10px;border-radius:var(--r-md);display:flex;overflow:hidden}.period-picker button,.range-picker button{align-items:center;border-right:1px solid #2a3650;border-right:1px solid var(--border);color:#8b97b0;color:var(--text-2);display:inline-flex;font-size:12px;justify-content:center;padding:7px 12px}.period-picker button{padding:7px;width:34px}.period-picker button:disabled{color:#5d6a85;color:var(--text-3);cursor:default;opacity:.45}.period-picker button:last-of-type,.range-picker button:last-child{border-right:none}.period-picker button:not(:disabled):hover,.range-picker button.active,.range-picker button:hover{color:#f5f7fb;color:var(--text-0)}.range-picker button.active{background:#232d44;background:var(--bg-3)}.period-label{align-items:center;border-left:1px solid #2a3650;border-left:1px solid var(--border);color:#8b97b0;color:var(--text-2);display:inline-flex;font-size:11px;padding:0 10px;white-space:nowrap}.card{background:#111726;background:var(--bg-1);border:1px solid #2a3650;border:1px solid var(--border);border-radius:14px;border-radius:var(--r-lg);min-width:0;padding:18px}.card-head{justify-content:space-between;margin-bottom:12px}.card-head,.card-title{align-items:center;display:flex}.card-title{color:#c9d2e3;color:var(--text-1);font-size:13px;font-weight:600;gap:8px}.card-sub{color:#5d6a85;color:var(--text-3);font-size:11px}.grid{grid-gap:16px;display:grid;gap:16px}.grid>*{min-width:0}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-2-1{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}.grid-1-2{grid-template-columns:minmax(0,1fr) minmax(0,2fr)}@media (max-width:1100px){.grid-3,.grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-1-2,.grid-2,.grid-2-1{grid-template-columns:1fr}}@media (max-width:700px){.app,.grid-3,.grid-4{grid-template-columns:1fr}.sidebar{display:none}}.kpi-value{align-items:baseline;display:flex;font-size:26px;font-weight:700;gap:6px;letter-spacing:-.5px}.kpi-unit{font-size:13px;font-weight:500}.kpi-delta,.kpi-unit{color:#8b97b0;color:var(--text-2)}.kpi-delta{font-size:12px;margin-top:4px}.kpi-delta.pos{color:#4ade80;color:var(--brand)}.kpi-delta.neg{color:#f87171;color:var(--danger)}.pill{align-items:center;background:#232d44;background:var(--bg-3);border-radius:999px;color:#c9d2e3;color:var(--text-1);display:inline-flex;font-size:11px;font-weight:600;gap:6px;padding:3px 9px}.pill .dot{background:currentColor;border-radius:50%;height:6px;width:6px}.tank-wrap{align-items:stretch;display:flex;gap:24px}.tank-block{display:flex;flex:1 1;flex-direction:column;gap:10px}.tank-block .tank-title{color:#8b97b0;color:var(--text-2);font-size:12px;letter-spacing:1px;text-transform:uppercase}.tank-soc{font-size:22px;font-weight:700}.tank-readouts{color:#8b97b0;color:var(--text-2);display:flex;flex-wrap:wrap;font-size:11px;gap:6px}.tank-probe{background:#232d44;background:var(--bg-3);border-radius:4px;padding:3px 7px}.mode-timeline{background:#1a2235;background:var(--bg-2);border-radius:6px;border-radius:var(--r-sm);display:flex;height:28px;overflow:hidden;position:relative}.mode-timeline-seg{height:100%;position:relative}.mode-timeline-seg:hover:after{background:#232d44;background:var(--bg-3);border:1px solid #2a3650;border:1px solid var(--border);border-radius:6px;bottom:100%;color:#f5f7fb;color:var(--text-0);content:attr(data-label);font-size:11px;left:50%;padding:4px 8px;pointer-events:none;position:absolute;transform:translateX(-50%);white-space:nowrap;z-index:10}.mode-legend{color:#8b97b0;color:var(--text-2);display:flex;flex-wrap:wrap;font-size:11px;gap:12px;margin-top:8px}.mode-legend .chip{align-items:center;display:inline-flex;gap:6px}.mode-legend .chip .sq{border-radius:2px;height:10px;width:10px}.valve-grid{grid-gap:10px;display:grid;gap:10px;grid-template-columns:repeat(5,1fr)}.valve{align-items:center;background:#1a2235;background:var(--bg-2);border:1px solid #2a3650;border:1px solid var(--border);border-radius:10px;border-radius:var(--r-md);color:#8b97b0;color:var(--text-2);display:flex;flex-direction:column;font-family:inherit;font-size:11px;gap:6px;padding:12px 8px;position:relative;text-align:center;width:100%}.valve.clickable{cursor:pointer;transition:transform .08s ease,border-color .15s ease,background .15s ease}.valve.clickable:hover{background:#232d44;background:var(--bg-3);border-color:#3a4866;border-color:var(--border-strong)}.valve.clickable:active{transform:scale(.97)}.valve:disabled{cursor:default}.valve .v-led{background:#232d44;background:var(--bg-3);border:1px solid #3a4866;border:1px solid var(--border-strong);border-radius:50%;height:14px;transition:background .15s ease,box-shadow .15s ease;width:14px}.valve.on .v-led{background:#4ade80;background:var(--brand);border-color:#4ade80;border-color:var(--brand);box-shadow:0 0 8px #4ade80;box-shadow:0 0 8px var(--brand)}.valve .v-name{color:#c9d2e3;color:var(--text-1);font-weight:600}.valve .v-state{font-size:10px}.valve.modified{border-color:#facc15;border-color:var(--warn);box-shadow:inset 0 0 0 1px #facc15;box-shadow:0 0 0 1px var(--warn) inset}.valve .v-mod{color:#facc15;color:var(--warn);font-size:9px;font-weight:700;letter-spacing:.5px;position:absolute;right:6px;text-transform:uppercase;top:4px}.seg{background:#1a2235;background:var(--bg-2);border:1px solid #2a3650;border:1px solid var(--border);border-radius:10px;border-radius:var(--r-md);display:inline-flex;overflow:hidden}.seg button{border-right:1px solid #2a3650;border-right:1px solid var(--border);color:#8b97b0;color:var(--text-2);font-size:12px;font-weight:600;padding:6px 14px;transition:background .15s ease,color .15s ease}.seg button:last-child{border-right:none}.seg button.active,.seg button:hover{background:#232d44;background:var(--bg-3);color:#f5f7fb;color:var(--text-0)}.seg button.active.hot{box-shadow:inset 0 -2px 0 #f97316;box-shadow:inset 0 -2px 0 var(--hot);color:#f97316;color:var(--hot)}.seg button.active.cold{box-shadow:inset 0 -2px 0 #38bdf8;box-shadow:inset 0 -2px 0 var(--cold);color:#38bdf8;color:var(--cold)}.mode-picker-wrap{position:relative}.mode-pill{background:#0000;cursor:pointer;font-family:inherit;transition:background .15s ease}.mode-pill:hover{background:#1a2235;background:var(--bg-2)}.mode-pill .mode-pill-tag{background:#facc15;background:var(--warn);border-radius:3px;color:#1a1a1a;font-size:9px;letter-spacing:.5px;margin-left:6px;padding:1px 6px;text-transform:uppercase}.mode-picker-menu{background:#1a2235;background:var(--bg-2);border:1px solid #3a4866;border:1px solid var(--border-strong);border-radius:10px;border-radius:var(--r-md);box-shadow:0 6px 24px #00000059,0 0 0 1px #2a3650;box-shadow:var(--shadow-2);display:flex;flex-direction:column;min-width:220px;padding:4px;position:absolute;right:0;top:calc(100% + 6px);z-index:50}.mode-picker-item{align-items:center;border-radius:6px;color:#c9d2e3;color:var(--text-1);display:flex;font-family:inherit;font-size:13px;gap:10px;padding:8px 10px;text-align:left}.mode-picker-item.active,.mode-picker-item:hover{background:#232d44;background:var(--bg-3);color:#f5f7fb;color:var(--text-0)}.mode-picker-item.active{font-weight:600}.mode-picker-sq{border-radius:3px;flex-shrink:0;height:12px;width:12px}.mode-picker-divider{background:#2a3650;background:var(--border);height:1px;margin:4px 0}.mode-buttons{grid-gap:10px;display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.mode-btn{align-items:center;background:#1a2235;background:var(--bg-2);border:1px solid #2a3650;border:1px solid var(--border);border-radius:10px;border-radius:var(--r-md);cursor:pointer;display:flex;font-family:inherit;font-size:13px;font-weight:600;gap:10px;padding:12px 14px;text-align:left;transition:background .15s ease,border-color .15s ease}.mode-btn.active,.mode-btn:hover{background:#232d44;background:var(--bg-3)}.mode-btn.active{border-width:2px;padding:11px 13px}.mode-btn-sq{border-radius:3px;flex-shrink:0;height:14px;width:14px}.link-btn{align-items:center;border:1px solid #2a3650;border:1px solid var(--border);border-radius:6px;color:#8b97b0;color:var(--text-2);cursor:pointer;display:inline-flex;font-family:inherit;font-size:11px;gap:5px;padding:4px 8px;transition:background .15s ease,color .15s ease}.link-btn:hover{background:#232d44;background:var(--bg-3);color:#f5f7fb;color:var(--text-0)}.muted{color:#8b97b0;color:var(--text-2)}.row{align-items:center;display:flex;flex-wrap:wrap;gap:10px}.spacer{flex:1 1}.divider{background:#2a3650;background:var(--border);height:1px;margin:12px 0}.skeleton{animation:shimmer 1.4s infinite;background:linear-gradient(90deg,#1a2235,#232d44,#1a2235);background:linear-gradient(90deg,var(--bg-2),var(--bg-3),var(--bg-2));background-size:200% 100%;border-radius:6px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.chart-box{height:280px}.chart-box,.chart-box-lg{min-height:0;min-width:0;width:100%}.chart-box-lg{height:360px}.recharts-default-tooltip{background:#232d44!important;background:var(--bg-3)!important;border:1px solid #3a4866!important;border:1px solid var(--border-strong)!important;border-radius:10px!important;border-radius:var(--r-md)!important;font-size:12px}.recharts-cartesian-axis-tick text{fill:#5d6a85;fill:var(--text-3)}.recharts-cartesian-axis-line,.recharts-cartesian-grid line{stroke:#2a3650;stroke:var(--border)}.recharts-tooltip-cursor{stroke:#3a4866;stroke:var(--border-strong)}.recharts-legend-item-text{color:#c9d2e3!important;color:var(--text-1)!important;font-size:12px}table.list{border-collapse:collapse;font-size:13px;width:100%}table.list td,table.list th{border-bottom:1px solid #2a3650;border-bottom:1px solid var(--border);padding:9px 10px;text-align:left}table.list th{color:#5d6a85;color:var(--text-3);font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase}table.list tr:last-child td{border-bottom:none}table.list tbody tr:hover{background:#1a2235;background:var(--bg-2)}
/*# sourceMappingURL=main.7a20eccf.css.map*/