html,body{margin:0;padding:0;background:#e8edf2;-webkit-font-smoothing:antialiased}*,*:before,*:after{box-sizing:border-box}button,input{font:inherit;color:inherit}a{color:var(--tealInk)}a:hover{color:var(--text)}[data-theme]{--bg: #E8EDF2;--side: #F7F9FB;--surface: #FFFFFF;--surface2: #E8EDF2;--track: #EEF2F5;--line: rgba(11,18,32,.08);--text: #0B1220;--text2: #3D495C;--text3: #5B677A;--cell: #E8EDF2;--overlay: rgba(11,18,32,.45);--tealInk: #087A70;--amberInk: #935600;--redInk: #BB3027;--tealTint: rgba(23,195,178,.16);--amberTint: rgba(240,167,58,.18);--redTint: rgba(239,90,79,.13);--needle: #0B1220;--btn: #0B1220;--btnText: #F7F9FB;--shadow: 0 1px 2px rgba(11,18,32,.05), 0 6px 20px rgba(11,18,32,.04);--teal: #17C3B2;--amber: #F0A73A;--red: #EF5A4F;--tealDeep: #0E9486;--amberDeep: #D9891C;--redDeep: #D63F35}[data-theme=dark]{--bg: #0B1220;--side: #0E1626;--surface: #121B2C;--surface2: #1B2740;--track: #18233A;--line: rgba(232,237,242,.08);--text: #F7F9FB;--text2: #A9B4C4;--text3: #7F8A9B;--cell: #18233A;--overlay: rgba(4,7,14,.72);--tealInk: #17C3B2;--amberInk: #F0A73A;--redInk: #F26B61;--tealTint: rgba(23,195,178,.14);--amberTint: rgba(240,167,58,.14);--redTint: rgba(239,90,79,.15);--needle: #F7F9FB;--btn: #17C3B2;--btnText: #0B1220;--shadow: none}.app-root{min-height:100vh;background:var(--bg);color:var(--text);font-family:Archivo,system-ui,sans-serif;font-variant-numeric:tabular-nums}.mono{font-family:JetBrains Mono,monospace}.layout{display:flex;align-items:stretch;min-height:100vh}.sidebar{flex:0 0 232px;background:var(--side);border-right:1px solid var(--line);padding:18px 14px;display:flex;flex-direction:column;gap:22px;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:10px;padding:0 6px}.brand-mark{width:28px;height:28px;border-radius:7px;background:#0b1220;display:flex;align-items:center;justify-content:center;box-shadow:inset 0 0 0 1px #e8edf21f}.brand-mark span{width:10px;height:10px;border-radius:50%;background:#17c3b2}.brand-name{font-weight:800;font-size:18px;font-stretch:120%;letter-spacing:-.01em}.nav{display:flex;flex-direction:column;gap:2px}.nav-item,.nav-item-active{text-align:left;min-height:38px;padding:0 10px;border:0;border-radius:8px;background:transparent;cursor:pointer;font-size:14px;color:var(--text2)}.nav-item-active{background:var(--surface2);box-shadow:inset 3px 0 #17c3b2;font-weight:600;color:var(--text)}.nav-item:hover{background:var(--surface2)}.sites-label{font-family:JetBrains Mono,monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--text3);padding:0 10px 8px}.sites{display:flex;flex-direction:column;gap:2px;padding-top:16px;border-top:1px solid var(--line)}.site-tab{display:flex;align-items:center;gap:10px;min-height:38px;padding:0 10px;border:0;border-radius:8px;background:transparent;cursor:pointer;font-size:14px;text-align:left;color:var(--text2)}.site-tab.is-active{background:var(--surface2);font-weight:700;color:var(--text)}.site-dot{width:8px;height:8px;border-radius:50%;flex:none}.site-name{flex:1}.site-pct{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text3)}.sidebar-foot{display:flex;flex-direction:column;gap:2px;padding:0 10px}.main-col{flex:1 1 auto;min-width:0;display:flex;flex-direction:column}.main{padding:22px 24px 48px;display:flex;flex-direction:column;gap:14px;max-width:1440px;width:100%}@media(max-width:960px){.main{padding:16px 14px 40px}}.topbar{background:var(--side);border-bottom:1px solid var(--line)}.topbar-head{display:flex;align-items:center;gap:10px;padding:10px 16px}.topbar-tabs{display:flex;gap:4px;overflow-x:auto;padding:0 12px;scrollbar-width:none}.topbar-tab{flex:none;display:flex;align-items:center;gap:8px;min-height:44px;padding:0 12px;border:0;border-bottom:2px solid transparent;background:transparent;cursor:pointer;color:var(--text2);font-size:14px;white-space:nowrap}.topbar-tab.is-active{border-bottom-color:#17c3b2;color:var(--text);font-weight:700}.icon-btn{width:44px;height:44px;border-radius:10px;border:1px solid var(--line);background:var(--surface);cursor:pointer;font-size:20px}.menu{position:absolute;right:0;top:50px;z-index:30;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:6px;min-width:200px;box-shadow:0 12px 32px #0003;display:flex;flex-direction:column}.menu button{text-align:left;min-height:44px;padding:0 12px;border:0;background:transparent;border-radius:8px;cursor:pointer;font-size:15px}.menu button:hover{background:var(--surface2)}.page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;flex-wrap:wrap}.page-title{margin:0;font-size:clamp(22px,3vw,28px);font-weight:700;font-stretch:110%;letter-spacing:-.015em}.page-sub{font-size:13px;color:var(--text3)}.header-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.pill{display:flex;align-items:center;gap:8px;min-height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--line);background:var(--surface);cursor:pointer;font-size:12px;white-space:nowrap}.pill-dot{width:8px;height:8px;border-radius:50%}.pill-tag{font-family:JetBrains Mono,monospace;letter-spacing:.08em;font-weight:600}.pill-text{color:var(--text2)}.switch-btn{display:flex;align-items:center;gap:8px;min-height:36px;padding:0 10px 0 12px;border-radius:8px;border:1px solid var(--line);background:var(--surface);cursor:pointer;font-size:13px;color:var(--text2)}.switch-track{position:relative;width:36px;height:20px;border-radius:999px;transition:background .2s ease;flex:none}.switch-thumb{position:absolute;top:2px;width:16px;height:16px;border-radius:50%;background:#f7f9fb;box-shadow:0 1px 3px #0b122059;transition:left .2s ease}.btn-primary{min-height:36px;padding:0 16px;border-radius:8px;border:0;background:var(--btn);color:var(--btnText);cursor:pointer;font-size:13px;font-weight:700}.alerts{display:flex;flex-direction:column;gap:8px}.alert{display:flex;align-items:flex-start;gap:12px;padding:12px 12px 12px 14px;border-radius:10px}.alert-dot{width:10px;height:10px;margin-top:5px;flex:none;transform:rotate(45deg)}.alert-body{flex:1;min-width:0}.alert-title{font-weight:700;font-size:15px}.alert-text{font-size:13px;color:var(--text2);margin-top:2px}.alert-actions{display:flex;gap:4px;flex:none}.alert-actions button{min-height:32px;padding:0 10px;border-radius:8px;border:1px solid var(--line);background:var(--surface);cursor:pointer;font-size:13px;font-weight:600}.alert-dismiss{width:32px;height:32px;border:0!important;background:transparent!important;font-size:18px;color:var(--text2)}.alerts-more{align-self:flex-start;border:0;background:transparent;color:var(--tealInk);cursor:pointer;font-size:13px;font-weight:600;padding:2px 4px}.grid{display:grid;gap:14px}.grid--wide{grid-template-columns:repeat(3,minmax(0,1fr)) minmax(300px,340px);grid-template-areas:"chart chart chart now" "chart chart chart next" "k1 k2 k3 k4" "heat heat heat data" "risk risk fcast2 fcast2"}.grid--mid{grid-template-columns:repeat(6,minmax(0,1fr));grid-template-areas:"now now now next next next" "chart chart chart chart chart chart" "k1 k1 k1 k2 k2 k2" "k3 k3 k3 k4 k4 k4" "heat heat heat heat heat heat" "data data data data data data" "risk risk risk fcast2 fcast2 fcast2"}.grid--narrow{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:"now now" "next next" "chart chart" "k1 k2" "k3 k4" "heat heat" "data data" "risk risk" "fcast2 fcast2"}.card{min-width:0;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:12px}.area-chart{grid-area:chart;padding:18px 20px 16px;display:flex;flex-direction:column;gap:14px}.area-now{grid-area:now;padding:18px 20px;display:flex;flex-direction:column;gap:14px}.area-next{grid-area:next;padding:16px 20px;display:flex;flex-direction:column;gap:6px}.area-k1{grid-area:k1}.area-k2{grid-area:k2}.area-k3{grid-area:k3}.area-k4{grid-area:k4}.area-heat{grid-area:heat;padding:18px 20px;display:flex;flex-direction:column;gap:14px}.area-data{grid-area:data;padding:18px 20px;display:flex;flex-direction:column;gap:14px}.area-risk{grid-area:risk;padding:18px 20px;display:flex;flex-direction:column;gap:14px}.area-fcast2{grid-area:fcast2;padding:16px 20px;display:flex;flex-direction:column;gap:6px}.card-label{font-family:JetBrains Mono,monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--text3)}.chart-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.chart-title-group{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1 1 220px}.chart-title{font-size:17px;font-weight:700}.chart-sub{font-size:13px;color:var(--text3)}.chart-controls{display:flex;gap:8px;align-items:flex-start;max-width:100%;min-width:0}.day-tabs{display:flex;gap:4px;overflow-x:auto;max-width:100%;scrollbar-width:none}.day-tab{flex:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;min-width:48px;min-height:44px;padding:0 8px;border-radius:8px;border:1px solid var(--line);background:transparent;color:var(--text2);cursor:pointer}.day-tab.is-active{background:var(--btn);color:var(--btnText);border-color:transparent}.day-tab-label{font-size:12px;font-weight:700}.expand-btn{flex:none;width:44px;height:44px;border-radius:8px;border:1px solid var(--line);background:var(--surface);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text2)}.expand-btn:hover{background:var(--surface2)}.chart-frame{display:flex;gap:8px}.chart-plot{position:relative;flex:1 1 auto;min-width:0;height:220px;margin-top:14px;touch-action:pan-y}@media(min-width:640px){.chart-plot{height:260px}}@media(min-width:1000px){.chart-plot{height:280px}}.chart-plot--expanded{height:calc(100vh - 260px)!important}.chart-bars{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:stretch;gap:5px}.chart-bar{flex:1 1 0;min-width:0;position:relative;border-radius:4px 4px 2px 2px;background:var(--track);overflow:hidden}.chart-bar-fill{position:absolute;left:0;right:0;bottom:0;border-radius:4px 4px 0 0}.chart-bar--gap{background:repeating-linear-gradient(135deg,rgba(240,167,58,.4) 0 4px,transparent 4px 9px)}.chart-comfy-line{position:absolute;left:0;right:0;border-top:1.5px dashed #F0A73A;pointer-events:none}.chart-comfy-label{position:absolute;left:0;transform:translateY(-100%);font-family:JetBrains Mono,monospace;font-size:10.5px;color:var(--amberInk);padding-bottom:3px;pointer-events:none}.chart-now-line{position:absolute;top:-14px;bottom:0;border-left:1.5px dashed var(--text2);pointer-events:none}.chart-now-label{position:absolute;top:-18px;transform:translate(-50%);display:flex;gap:6px;align-items:baseline;background:var(--surface);padding:0 6px;font-family:JetBrains Mono,monospace;font-size:11px;white-space:nowrap}.chart-axis{position:relative;height:14px;font-family:JetBrains Mono,monospace;font-size:10.5px;color:var(--text3);margin-top:4px}.chart-axis span{position:absolute;transform:translate(-50%)}.chart-tooltip{position:absolute;top:16px;pointer-events:none;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:12px;white-space:nowrap;box-shadow:0 8px 24px #0b12202e;z-index:2}.chart-tooltip-time{font-weight:700}.chart-tooltip-l1{color:var(--text2)}.chart-tooltip-l2{color:var(--text3)}.chart-foot{display:flex;justify-content:space-between;align-items:center;gap:8px 16px;flex-wrap:wrap;font-size:12px;color:var(--text2)}.chart-legend{display:flex;gap:14px;flex-wrap:wrap}.legend-item{display:flex;align-items:center;gap:6px}.legend-swatch{width:10px;height:10px;border-radius:2px}.chart-expand-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:var(--overlay)}.chart-expanded{position:fixed;top:16px;left:16px;right:16px;bottom:16px;z-index:45;overflow:auto}@media(max-width:640px){.chart-expanded{top:0;left:0;right:0;bottom:0}}.now-count-row{display:flex;align-items:baseline;gap:8px;white-space:nowrap}.now-count{font-size:clamp(48px,5vw,60px);line-height:.9;font-weight:750;font-stretch:108%;letter-spacing:-.03em}.now-cap{font-size:16px;color:var(--text2)}.now-status-row{display:flex;align-items:center;gap:10px}.now-pct-pill{font-size:12px;font-weight:700;padding:5px 10px;border-radius:999px;color:#0b1220}.now-status-text{font-size:14px;color:var(--text2)}.now-bar{height:8px;border-radius:4px;background:var(--track);overflow:hidden}.now-bar-fill{height:100%;border-radius:4px}.now-stats{display:flex;flex-direction:column;border-top:1px solid var(--line);padding-top:4px}.now-stat-row{display:flex;justify-content:space-between;gap:12px;padding:8px 0;font-size:14px}.now-stat-row span:first-child{color:var(--text2)}.now-stat-row span:last-child{font-weight:600}.next-list{display:flex;flex-direction:column}.next-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:7px 0;font-size:14px}.next-row .label{color:var(--text2)}.next-row .values{display:flex;gap:8px;align-items:baseline}.next-row .count{font-weight:600}.next-row .sep{color:var(--text3)}.next-row .pct{font-weight:600;min-width:36px;text-align:right}.next-caption{font-size:12px;color:var(--text3)}.kpi-tile{padding:16px 18px;display:flex;flex-direction:column;gap:6px}.kpi-value-row{display:flex;align-items:baseline;gap:8px}.kpi-value{font-size:clamp(22px,2.4vw,28px);font-weight:700;font-stretch:108%;letter-spacing:-.01em}.kpi-delta{font-size:12px;font-weight:700;color:var(--tealInk)}.kpi-sub{font-size:13px;color:var(--text3)}.heat-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap}.heat-title{font-size:17px;font-weight:700}.heat-sub{font-size:12px;color:var(--text3)}.heat-grid{display:flex;flex-direction:column;gap:3px}.heat-row{display:grid;gap:3px;align-items:center}.heat-row-label{font-size:12px}.heat-hour-label{font-family:JetBrains Mono,monospace;font-size:10px;color:var(--text3)}.heat-cell{border-radius:4px}.heat-legend{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text3)}.heat-legend-bar{width:120px;height:8px;border-radius:4px;background:linear-gradient(90deg,var(--cell),#17C3B2)}.heat-legend-now{display:flex;align-items:center;gap:6px;margin-left:8px}.heat-legend-now span:first-child{width:10px;height:10px;border-radius:2px;box-shadow:inset 0 0 0 2px var(--text)}.ds-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.ds-status{font-size:11px;font-weight:700;padding:3px 8px;border-radius:999px}.ds-rows{display:flex;flex-direction:column;font-size:13px}.ds-row{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid var(--line)}.ds-row:last-child{border-bottom:0}.ds-row span:first-child{color:var(--text2)}.ds-row span:last-child{font-weight:600}.ds-note{font-size:13px;line-height:1.45;color:var(--text2)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:var(--overlay);display:flex;align-items:center;justify-content:center;padding:24px}@media(max-width:640px){.modal-overlay{align-items:flex-end;padding:0}}.modal{width:100%;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:22px;display:flex;flex-direction:column;gap:16px;max-height:88vh;overflow:auto}@media(max-width:640px){.modal{border-radius:16px 16px 0 0}}.modal--capacity{max-width:560px}.modal--export{max-width:480px;gap:18px}.modal-head{display:flex;justify-content:space-between;align-items:center}.modal-title{font-size:20px;font-weight:700;font-stretch:110%}.modal-close{width:44px;height:44px;border:0;background:transparent;cursor:pointer;font-size:22px;color:var(--text2)}.modal-hint{font-size:13px;color:var(--text2);line-height:1.45}.cap-row{display:grid;grid-template-columns:minmax(0,1fr) 96px 110px;gap:10px;align-items:end;padding-bottom:12px;border-bottom:1px solid var(--line)}.cap-name{font-weight:600;font-size:15px;padding-bottom:12px}.cap-field{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--text3)}.cap-field input{height:44px;border-radius:8px;border:1px solid var(--line);background:var(--bg);padding:0 10px;font-size:16px;width:100%}.cap-field input.has-error{border-color:var(--redInk)}.cap-err{grid-column:1 / -1;font-size:12px;color:var(--redInk)}.modal-actions{display:flex;gap:10px;justify-content:flex-end}.btn-ghost{min-height:44px;padding:0 18px;border-radius:8px;border:1px solid var(--line);background:transparent;cursor:pointer;font-weight:600}.export-group{display:flex;flex-direction:column;gap:6px}.export-options{display:flex;gap:4px;padding:4px;border-radius:10px;background:var(--bg);border:1px solid var(--line)}.export-option{flex:1;min-height:40px;border-radius:7px;border:0;cursor:pointer;font-size:14px;font-weight:600;background:transparent;color:var(--text)}.export-option.is-active{background:var(--btn);color:var(--btnText)}.export-summary{font-size:13px;color:var(--text2)}.btn-download{min-height:48px;border-radius:8px;border:0;background:var(--btn);color:var(--btnText);cursor:pointer;font-size:15px;font-weight:700}.auth-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--bg)}.auth-card{width:100%;max-width:400px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:12px;padding:28px;display:flex;flex-direction:column;gap:18px}.auth-title{margin:0;font-size:22px;font-weight:700;font-stretch:110%;letter-spacing:-.015em}.auth-form{display:flex;flex-direction:column;gap:14px}.auth-field{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--text2)}.auth-field input,.auth-field select{height:44px;border-radius:8px;border:1px solid var(--line);background:var(--bg);padding:0 10px;font-size:16px;width:100%}.auth-error{font-size:13px;color:var(--redInk);background:var(--redTint);border-radius:8px;padding:8px 10px}.auth-hint{font-size:14px;color:var(--text2);line-height:1.5;margin:0}.auth-links{display:flex;justify-content:space-between;gap:12px;font-size:13px;flex-wrap:wrap}.onboarding-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--bg)}.onboarding-card{width:100%;max-width:480px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:12px;padding:28px;display:flex;flex-direction:column;gap:16px;max-height:88vh;overflow:auto}.onboarding-progress{display:flex;gap:6px}.onboarding-step-dot{flex:1;height:4px;border-radius:2px;background:var(--track)}.onboarding-step-dot.is-active,.onboarding-step-dot.is-done{background:var(--teal)}.onboarding-step-label{font-family:JetBrains Mono,monospace;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--text3)}.door-list{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow:auto}.door-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}.door-name{font-size:14px;font-weight:600}.door-row select{height:36px;border-radius:8px;border:1px solid var(--line);background:var(--bg);padding:0 8px;font-size:13px}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);z-index:60;max-width:calc(100% - 32px);background:var(--text);color:var(--bg);padding:12px 16px;border-radius:10px;font-size:14px;font-weight:600;box-shadow:0 10px 30px #0000004d}
