:root{--ink: #17211d;--muted: #6f7d76;--line: #e5eae7;--paper: #ffffff;--canvas: #f3f6f4;--green: #16845b;--green-soft: #e5f4ed;--amber: #e59a22;--amber-soft: #fff1d8;--red: #cf5348;--grey: #89958f}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--canvas);color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}@keyframes fadeUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes glow{0%,to{opacity:.55;transform:scale(1)}50%{opacity:.85;transform:scale(1.06)}}.sidebar{position:fixed;inset:0 auto 0 0;width:244px;padding:30px 22px;background:#12251e;color:#fff;display:flex;flex-direction:column;z-index:3}.brand{display:flex;gap:12px;align-items:center;padding:0 8px 32px}.brand-mark{width:38px;height:38px;border:1px solid #557469;border-radius:12px;display:grid;place-items:center}.brand-mark span{width:14px;height:20px;border:3px solid #e5a637;border-radius:8px 8px 10px 10px;transform:rotate(15deg)}.brand strong,.brand small{display:block}.brand strong{font-size:17px;letter-spacing:.2px}.brand small{color:#8fa69d;margin-top:2px;font-size:11px;letter-spacing:1.5px;text-transform:uppercase}nav{display:grid;gap:7px}nav a{color:#a9b9b2;text-decoration:none;padding:12px 14px;border-radius:9px;font-size:14px;display:flex;gap:12px;align-items:center;transition:background .18s ease,color .18s ease,transform .18s ease}nav a:hover{color:#fff;background:#1c332b;transform:translate(2px)}nav a.active{color:#fff;background:#203a31}nav a span{color:#d9a746;font-size:17px}.user-card{border:1px solid #2d493f;border-radius:12px;padding:12px 14px;margin-top:auto;display:flex;gap:10px;align-items:center}.user-card .avatar{flex:none;width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,#e5a637,#cf7a2d);color:#241705;font-size:12px;font-weight:800;display:grid;place-items:center;letter-spacing:.3px}.user-card div{flex:1;min-width:0}.user-card strong{display:block;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-card small{display:block;color:#8fa69d;font-size:10.5px;margin-top:1px}.user-card button{flex:none;width:28px;height:28px;border-radius:8px;background:transparent;border:1px solid #2d493f;color:#a9b9b2;cursor:pointer;font-size:13px;line-height:1;padding:0;transition:background .18s ease,color .18s ease,border-color .18s ease}.user-card button:hover{background:#cf5348;border-color:#cf5348;color:#fff}.system-card{margin-top:12px;border:1px solid #2d493f;border-radius:12px;padding:14px;display:flex;gap:11px;align-items:flex-start}.system-card strong,.system-card small{display:block;font-size:12px}.system-card small{color:#8fa69d;margin-top:4px;line-height:1.4}.live-dot{flex:none;width:8px;height:8px;margin-top:4px;border-radius:50%;background:#4ed49b;box-shadow:0 0 0 4px #4ed49b1f;animation:glow 2.4s ease-in-out infinite}main{margin-left:244px;padding:38px clamp(24px,4vw,64px) 24px;max-width:1700px}header{display:flex;justify-content:space-between;gap:30px;align-items:flex-end;margin-bottom:28px}.eyebrow{color:var(--green);text-transform:uppercase;letter-spacing:1.7px;font-weight:750;font-size:10px;margin:0 0 7px}h1{font-size:clamp(28px,3vw,40px);letter-spacing:-1.3px;margin:0}h2{font-size:20px;letter-spacing:-.3px;margin:0}.subtitle{color:var(--muted);margin:8px 0 0;font-size:14px}.toolbar{position:relative;display:flex;align-items:center;gap:4px;background:var(--paper);border:1px solid var(--line);border-radius:11px;padding:7px;box-shadow:0 5px 18px #1830260a}.toolbar-label{font-size:11px;color:var(--muted);margin-left:6px;white-space:nowrap}.toolbar-divider{width:1px;align-self:stretch;background:var(--line);margin:0 2px}input,button{font:inherit}button{color:#fff;background:var(--green);border:0;border-radius:7px;padding:9px 15px;cursor:pointer;font-weight:650;font-size:12px;transition:background .16s ease,transform .12s ease,box-shadow .16s ease}button:hover{background:#116c4a}button:active{transform:scale(.97)}button:disabled{opacity:.6;cursor:default;transform:none}.month-filter{position:relative;display:flex;align-items:center;gap:2px}.month-nav{background:transparent;color:var(--muted);width:30px;height:30px;padding:0;border-radius:8px;font-size:15px;display:grid;place-items:center}.month-nav:hover:not(:disabled){background:var(--canvas);color:var(--ink)}.month-trigger{background:transparent;color:var(--ink);font-weight:650;font-size:12.5px;padding:7px 11px;border-radius:8px;display:flex;align-items:center;gap:7px;white-space:nowrap}.month-trigger:hover{background:var(--canvas)}.month-icon{font-size:12px}.month-popover{position:absolute;top:calc(100% + 10px);left:50%;transform:translate(-50%);background:var(--paper);border:1px solid var(--line);border-radius:14px;box-shadow:0 22px 48px #18302629;padding:14px;width:232px;z-index:20}.month-popover-year{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;font-size:13px}.month-popover-year button{background:transparent;color:var(--muted);width:26px;height:26px;padding:0;border-radius:7px}.month-popover-year button:hover:not(:disabled){background:var(--canvas);color:var(--ink)}.month-popover-year button:disabled{opacity:.3;cursor:not-allowed}.month-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.month-cell{background:var(--canvas);color:var(--ink);border-radius:8px;padding:8px 0;font-size:12px;font-weight:620;transition:background .12s ease,color .12s ease}.month-cell:hover:not(:disabled){background:var(--green-soft);color:#0d5c3d}.month-cell.selected{background:var(--green);color:#fff}.month-cell:disabled{opacity:.32;cursor:not-allowed}.month-today{margin-top:10px;width:100%;background:transparent;color:var(--green);border:1px dashed #b9dccc;font-size:11.5px;font-weight:650;padding:8px;border-radius:8px}.month-today:hover{background:var(--green-soft)}.range-filter{position:relative}.range-trigger{background:transparent;color:var(--ink);font-weight:650;font-size:12.5px;padding:7px 11px;border-radius:8px;display:flex;align-items:center;gap:7px;white-space:nowrap}.range-trigger:hover{background:var(--canvas)}.range-popover{position:absolute;top:calc(100% + 10px);left:0;background:var(--paper);border:1px solid var(--line);border-radius:14px;box-shadow:0 22px 48px #18302629;padding:6px;width:200px;z-index:20;display:grid;gap:2px;max-height:320px;overflow-y:auto}.range-option{background:transparent;color:var(--ink);text-align:left;border-radius:8px;padding:8px 10px;font-size:12.5px;font-weight:600}.range-option:hover{background:var(--canvas)}.range-option.selected{background:var(--green-soft);color:#0d5c3d}.estimate-note{display:block;color:#8169b2;font-style:italic}.stats-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:18px}.stat-card{position:relative;overflow:hidden;min-height:142px;padding:21px;background:var(--paper);border:1px solid var(--line);border-radius:13px;transition:box-shadow .2s ease}.stat-card:hover{box-shadow:0 14px 30px #18302614}.stat-card:before{content:"";position:absolute;left:0;top:22px;width:3px;height:45px;border-radius:0 4px 4px 0;background:var(--accent)}.stat-card:after{content:"";position:absolute;right:-34px;top:-34px;width:120px;height:120px;border-radius:50%;background:radial-gradient(circle,var(--accent) 0%,transparent 72%);opacity:.14;pointer-events:none}.stat-label{color:var(--muted);font-size:12px}.stat-card strong{display:block;margin:15px 0 3px;font-size:29px;letter-spacing:-1px;font-variant-numeric:tabular-nums}.stat-card small{color:#96a19c;font-size:11px}.accent-orange{--accent: #e69b28}.accent-green{--accent: #258d65}.accent-blue{--accent: #5386c6}.accent-purple{--accent: #8169b2}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:14px}.month-badge{display:inline-flex;align-items:center;background:var(--green-soft);color:#0d5c3d;font-size:11px;font-weight:700;padding:4px 10px;border-radius:99px;letter-spacing:.2px;vertical-align:middle;margin-left:8px}.report-heading-controls{display:flex;align-items:center;gap:10px}.panel{background:var(--paper);border:1px solid var(--line);border-radius:13px;margin-top:18px;overflow:hidden}.panel-heading{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px 22px;border-bottom:1px solid var(--line)}.legend{display:flex;gap:14px;color:var(--muted);font-size:11px}.legend span{display:flex;gap:6px;align-items:center}.legend i{width:7px;height:7px;border-radius:50%}.green{background:var(--green)}.amber{background:var(--amber)}.grey{background:var(--grey)}.site-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0}.site-card{padding:18px 22px;min-height:145px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);transition:background .16s ease}.site-card:hover{background:#fafbfa}.site-card:nth-child(3n){border-right:0}.site-title{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.site-title h3{margin:0;font-size:14px}.site-title p{margin:4px 0 0;color:var(--muted);font-size:11px}.power-pill{flex:none;border-radius:99px;padding:5px 8px;font-size:9px;font-weight:800;letter-spacing:.5px;text-transform:uppercase}.power-pill.zesa{color:#087149;background:var(--green-soft)}.power-pill.generator{color:#8b5a05;background:var(--amber-soft)}.power-pill.offline{color:#68736e;background:#edf0ee}.stale-note{margin:10px 0 0;font-size:10.5px;color:var(--grey)}.fuel-line{display:flex;justify-content:space-between;align-items:end;margin-top:23px;font-size:11px;color:var(--muted)}.fuel-line strong{color:var(--ink);font-size:17px}.gauge{height:5px;margin-top:8px;background:#edf1ef;border-radius:5px;overflow:hidden}.gauge span{display:block;height:100%;border-radius:inherit;background:var(--green);transition:width .5s ease}.search{display:flex;align-items:center;gap:6px;background:var(--canvas);padding:8px 11px;border-radius:8px;color:var(--muted)}.search input{border:0;outline:0;background:transparent;width:150px;font-size:12px}.table-wrap{overflow-x:auto}.cell-input{width:100%;min-width:110px;border:1px solid transparent;background:transparent;border-radius:7px;padding:6px 8px;font-size:12.5px;color:var(--ink);transition:border-color .15s ease,background .15s ease}.cell-input:hover{background:var(--canvas)}.cell-input:focus{outline:none;border-color:var(--green);background:var(--paper);box-shadow:0 0 0 3px var(--green-soft)}.cell-input::placeholder{color:#c3cac6}.active-toggle{background:#edf0ee;color:#68736e;font-size:11px;font-weight:700;padding:6px 12px;border-radius:99px}.active-toggle.on{background:var(--green-soft);color:#087149}.active-toggle:hover{opacity:.85}table{border-collapse:collapse;width:100%;min-width:1020px}th{color:#89948f;font-size:9px;text-transform:uppercase;letter-spacing:1px;text-align:left;padding:12px 18px;background:#fafbfa}tbody tr{transition:background .14s ease}tbody tr:hover{background:#fafbfa}td{border-top:1px solid #edf0ee;padding:15px 18px;font-size:12px;font-variant-numeric:tabular-nums}td strong{display:block;font-size:12px}td small{color:var(--muted);font-size:10px}.uptime{min-width:150px}.uptime-row{display:flex;gap:9px;align-items:center}.uptime .gauge{flex:1;margin:0}.uptime .gauge span{background:#3f8a68}.quality{color:var(--green);font-size:11.5px;font-weight:650}.muted{color:#b7bfba}.flag-stack{display:flex;flex-direction:column;gap:4px;align-items:flex-start}.quality-flag{display:inline-flex;align-items:center;font-size:10.5px;font-weight:700;padding:3px 8px;border-radius:99px;white-space:nowrap}.quality-flag.warn{color:#8b5a05;background:var(--amber-soft)}.quality-flag.danger{color:#a83f36;background:#fdeeec}.quality-flag.flag{color:#5b3fa8;background:#efe9fb}.empty{padding:36px!important;text-align:center;color:var(--muted);font-size:12px}footer{display:flex;justify-content:space-between;color:#8e9994;font-size:10px;padding:22px 2px 0}#toast-anchor{position:fixed;right:24px;bottom:24px;z-index:10}#toast{padding:12px 16px;color:#fff;background:#293b34;border-radius:9px;font-size:12px;box-shadow:0 10px 30px #14211b33}@media (max-width: 1050px){.stats-grid,.site-grid{grid-template-columns:repeat(2,1fr)}.site-card:nth-child(3n){border-right:1px solid var(--line)}.site-card:nth-child(2n){border-right:0}}@media (max-width: 760px){.sidebar{position:static;width:auto;padding:16px 20px;flex-direction:row;align-items:center}.brand{padding:0}.sidebar nav,.system-card,.user-card{display:none}main{margin:0;padding:24px 16px}header{align-items:flex-start;flex-direction:column}.toolbar{width:100%}.toolbar-label,.toolbar-divider{display:none}.month-popover{left:0;transform:none}.stats-grid,.site-grid{grid-template-columns:1fr}.site-card{border-right:0!important}.legend{display:none}.section-heading{flex-direction:column;align-items:flex-start;gap:8px}.report-heading{flex-direction:column;align-items:flex-start}.report-heading-controls{width:100%;flex-wrap:wrap}}.auth-body{margin:0}.auth-shell{min-height:100vh;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);background:var(--paper)}.auth-brand{position:relative;overflow:hidden;background:radial-gradient(120% 140% at 15% 0%,#1c3a2e,#12251e 55%,#0d1b16);color:#fff;padding:48px clamp(28px,5vw,72px);display:flex;flex-direction:column;justify-content:center}.auth-brand-inner{position:relative;z-index:2;max-width:460px;animation:fadeUp .6s ease both}.auth-brand .brand{padding:0 0 40px}.auth-brand h1{font-size:clamp(26px,3vw,36px);line-height:1.15;letter-spacing:-.8px;margin:0 0 16px}.auth-brand p{color:#b7c7bf;font-size:14px;line-height:1.6;margin:0 0 28px}.auth-points{list-style:none;margin:0;padding:0;display:grid;gap:13px}.auth-points li{display:flex;align-items:center;gap:11px;font-size:13px;color:#d7e2dc}.auth-points .dot{flex:none;width:8px;height:8px;border-radius:50%}.auth-points .dot.green{background:var(--green);box-shadow:0 0 0 4px #16845b38}.auth-points .dot.amber{background:var(--amber);box-shadow:0 0 0 4px #e59a2233}.auth-points .dot.blue{background:#5386c6;box-shadow:0 0 0 4px #5386c633}.auth-orb{position:absolute;width:560px;height:560px;right:-180px;bottom:-220px;border-radius:50%;background:radial-gradient(circle,rgba(213,167,70,.25),transparent 70%);animation:glow 5s ease-in-out infinite;z-index:1}.auth-panel{display:flex;align-items:center;justify-content:center;padding:32px}.auth-card{width:100%;max-width:380px;animation:fadeUp .5s ease .05s both}.auth-card h2{margin:6px 0;letter-spacing:-.6px}.auth-subtitle{color:var(--muted);font-size:13px;margin:0 0 28px}.field{display:block;margin-bottom:16px}.field span{display:block;font-size:12px;font-weight:650;color:var(--ink);margin-bottom:7px}.field input{width:100%;border:1px solid var(--line);border-radius:9px;padding:11px 13px;font-size:13px;color:var(--ink);background:var(--paper);transition:border-color .15s ease,box-shadow .15s ease}.field input:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}.password-field{position:relative}.password-field input{padding-right:58px}.password-field button{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:transparent;color:var(--muted);font-size:11px;font-weight:650;padding:6px 9px}.password-field button:hover{background:var(--canvas);color:var(--ink)}.auth-error{background:#fdeeec;color:#a83f36;border:1px solid #f7d4d0;border-radius:9px;padding:10px 13px;font-size:12.5px;margin:0 0 16px}.auth-submit{width:100%;padding:12px;font-size:13px;border-radius:9px;display:flex;align-items:center;justify-content:center;gap:9px}.auth-submit.is-loading span:after{content:"";width:13px;height:13px;margin-left:9px;border-radius:50%;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;display:inline-block;animation:spin .6s linear infinite;vertical-align:-2px}.auth-footnote{text-align:center;color:#9aa5a0;font-size:11.5px;margin:20px 0 0}@media (max-width: 860px){.auth-shell{grid-template-columns:1fr}.auth-brand{padding:36px 24px}.auth-orb{display:none}.auth-panel{padding:28px 22px 48px}}.spinner{display:inline-block;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;animation:spin .7s linear infinite}button:disabled .spinner{border-color:#ffffff59;border-top-color:#fff}.refetch-indicator{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:11.5px;font-weight:650;margin-bottom:12px}.refetch-indicator .spinner{border-color:var(--line);border-top-color:var(--green)}.period-content.is-refetching>*:not(.refetch-indicator){opacity:.55;transition:opacity .2s ease;pointer-events:none}.period-note{margin:10px 0 0;font-size:10px;color:#b2bbb6}.chart-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:14px;margin-top:18px}.chart-card{background:var(--paper);border:1px solid var(--line);border-radius:13px;padding:20px 22px}.chart-heading{margin-bottom:14px}.chart-heading h3{font-size:15px;margin:0;letter-spacing:-.2px}.donut-wrap{display:flex;align-items:center;gap:22px;flex-wrap:wrap}.donut-center-value{font-size:26px;font-weight:800;fill:var(--ink);font-family:inherit}.donut-center-label{font-size:10px;fill:var(--muted);font-family:inherit;text-transform:uppercase;letter-spacing:.6px}.chart-legend{list-style:none;margin:0;padding:0;display:grid;gap:10px;flex:1;min-width:160px}.chart-legend li{display:flex;align-items:center;gap:9px;font-size:12px;cursor:pointer;padding:4px;border-radius:8px;transition:opacity .15s ease,background .15s ease}.chart-legend li:hover{background:var(--canvas)}.chart-legend li.dim{opacity:.4}.legend-swatch{width:10px;height:10px;border-radius:3px;flex:none}.legend-label{flex:1;color:var(--ink);font-weight:600}.chart-legend strong{font-variant-numeric:tabular-nums}.chart-legend small{color:var(--muted);width:42px;text-align:right}.bar-chart{display:grid;gap:12px}.bar-row{display:grid;grid-template-columns:100px 1fr 68px;align-items:center;gap:10px;transition:opacity .15s ease}.bar-row.dim{opacity:.4}.bar-label{font-size:11.5px;color:var(--ink);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bar-track{height:14px;background:var(--canvas);border-radius:5px;overflow:hidden}.bar-fill{height:100%;border-radius:5px;transition:width .4s ease}.bar-value{font-size:11.5px;text-align:right;font-variant-numeric:tabular-nums;color:var(--ink)}@media (max-width: 1050px){.chart-row{grid-template-columns:1fr}}@media (max-width: 760px){.bar-row{grid-template-columns:74px 1fr 58px}}
