:root{font-family:"Avenir Next","PingFang SC",sans-serif;color:#192d29;background:#f0f4f3;font-size:14px;--green:#167455;--line:#dbe5e1;--muted:#62746d}*{box-sizing:border-box}body{margin:0}button,a,input{touch-action:manipulation}a{color:var(--green);text-decoration:none}button{font:inherit;background:#fff;border:1px solid #b8cac2;border-radius:5px;padding:8px 13px;cursor:pointer;color:#24463c}button:hover{background:#e7f3ed}button:disabled{cursor:default;opacity:.45}.primary,button.selected{background:#167455;color:white;border-color:#167455}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid #c28a27;outline-offset:3px}.topbar{height:65px;background:#102822;color:white;display:flex;align-items:center;justify-content:space-between;padding:0 28px;gap:20px}.brand{font-weight:800;font-size:21px;color:white}.brand span{font-size:15px;color:#7cddb0}.topbar nav{display:flex;gap:24px}.topbar nav a{color:#b7cec5;padding:21px 0}.topbar nav a.current{color:white;border-bottom:3px solid #80dcb0}.badge{padding:5px 9px;background:#f8efd8;color:#71551c;border-radius:4px;font-size:11px;white-space:nowrap}.workspace{max-width:1500px;margin:auto;padding:26px 30px}.page-heading{display:flex;justify-content:space-between;align-items:center;gap:18px;margin-bottom:22px}h1{font-size:28px;margin:6px 0 8px}h2{font-size:16px;margin:0}h3{font-size:15px}.page-heading p{color:var(--muted);margin:0;font-size:13px}.page-heading .eyebrow{font-size:10px;font-weight:700;color:#167455}.clock{text-align:right;white-space:nowrap}.clock strong{display:block;font-size:28px;font-variant-numeric:tabular-nums}.clock small{color:var(--muted);font-size:11px}.scenario-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-bottom:16px}.scenario-bar>span{font-weight:700;margin-right:5px}.scenario-buttons{display:flex;gap:7px;flex-wrap:wrap;flex:1}.scenario-buttons button{font-size:12px}.mode-banner{display:flex;align-items:center;gap:15px;background:#e1eee7;border-left:3px solid #167455;padding:12px 15px;margin-bottom:20px;font-size:12px}.mode-banner>span:first-child{font-weight:800;white-space:nowrap}.mode-banner p{flex:1;margin:0;line-height:1.6}.mode-banner>span:last-child{white-space:nowrap}.mode-banner.warning{background:#fff0d8;border-color:#b77721}.kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:15px;margin-bottom:20px}.kpis article{background:white;border:1px solid var(--line);padding:20px;border-radius:6px;min-width:0}.kpis strong{display:block;font-size:30px;font-variant-numeric:tabular-nums;font-weight:650;margin:10px 0}.kpis span,.kpis small{color:var(--muted);font-size:12px}.kpis small{font-size:10px}.dashboard-grid{display:grid;grid-template-columns:1.75fr 1fr;gap:20px}.panel{background:white;border:1px solid var(--line);border-radius:6px;padding:20px;margin-bottom:20px;min-width:0}.panel-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px;gap:12px}.panel-title>span,.panel-title>a{font-size:11px;color:var(--muted)}.legend{display:flex;gap:20px;font-size:11px}.legend span:before{content:"";display:inline-block;width:9px;height:9px;margin-right:6px;background:var(--c)}.legend .load{--c:#273f37}.legend .pv{--c:#b57915}.legend .battery{--c:#17825c}.legend .grid{--c:#3d83b5}#trend{display:block;width:100%;height:225px;margin-top:12px}.balance{font-size:12px;color:var(--muted);line-height:1.6}.control-panel dl{margin:0 0 18px}.control-panel dl>div{display:flex;justify-content:space-between;padding:7px 0;gap:15px}.control-panel dt{color:var(--muted)}.control-panel dd{margin:0;text-align:right}.control-panel button{font-size:12px}.setpoint{display:block;margin:18px 0 0;font-size:12px}.setpoint output{float:right}.setpoint input{display:block;width:100%;accent-color:var(--green);margin-top:12px}.muted{color:var(--muted);font-size:11px;line-height:1.6}.device-list{display:flex;flex-wrap:wrap;gap:8px}.device-list button{font-size:12px;display:flex;align-items:center;gap:8px}.device-list button:before{content:"";width:6px;height:6px;border-radius:50%;background:#46b37c}.device-list button.selected:before{background:#baf7d7}.device-detail{border-top:1px solid var(--line);margin-top:16px;padding-top:16px;font-size:13px;line-height:1.7;min-height:105px}.device-detail h3{margin:0 0 8px}.device-detail p{margin:4px 0;color:#52665e}.device-detail strong{color:#167455}.log-table{max-height:250px;overflow:auto}.log-row{display:grid;grid-template-columns:55px 70px 1fr;gap:12px;font-size:12px;padding:10px 0;border-bottom:1px solid #edf1ef;line-height:1.6}.log-row time{color:var(--muted);font-variant-numeric:tabular-nums}.log-row b{color:#167455;font-size:10px}.log-row.warn b{color:#a46813}footer{color:#75857e;font-size:11px;padding:10px 0 18px;line-height:1.8}.site-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.scene-area{position:relative;min-width:0;background:#dce8e5;height:610px;overflow:hidden}#world{width:100%;height:100%;position:relative}#world canvas{display:block;width:100%;height:100%}.scene-toolbar{position:absolute;top:14px;left:14px;display:flex;flex-wrap:wrap;gap:7px;align-items:center}.scene-toolbar button,.scene-toolbar label{font-size:11px;background:rgba(255,255,255,.94);padding:8px;border-radius:4px}.scene-toolbar input{accent-color:var(--green)}.scene-key{position:absolute;bottom:14px;left:14px;display:flex;gap:12px;flex-wrap:wrap;background:rgba(255,255,255,.94);padding:10px;font-size:10px;border-radius:4px}.power-key:before,.data-key:before{content:"";display:inline-block;width:16px;height:3px;background:#bb8221;margin-right:5px;vertical-align:middle}.data-key:before{background:#098daa}#scene-error{position:absolute;top:130px;left:25px;right:25px;background:#fff;padding:20px;line-height:1.8}.site-inspector{padding:20px;background:white;border-left:1px solid var(--line)}.inspector-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.inspector-title span{font-size:11px;color:var(--muted)}.site-inspector .device-list{gap:6px}.site-inspector .device-list button{font-size:11px;padding:7px 8px}.ems-action{border-top:1px solid var(--line);margin-top:16px;padding-top:6px}.ems-action ol{padding-left:20px;font-size:12px;line-height:1.7;color:var(--muted)}.ems-action li{margin:5px 0}.ems-action button{font-size:11px;padding:8px}.site-summary{display:flex;flex-wrap:wrap;justify-content:space-between;padding:8px 20px;background:white;border-bottom:1px solid var(--line);gap:8px}.site-summary p{font-size:12px}.site-summary strong{font-size:19px;margin:0 5px;font-variant-numeric:tabular-nums}@media(max-width:950px){.topbar{padding:0 16px}.topbar .badge{display:none}.workspace{padding:20px 16px}.kpis{grid-template-columns:repeat(3,1fr)}.dashboard-grid{grid-template-columns:1fr}.site-layout{grid-template-columns:1fr}.site-inspector{border-left:0;border-top:1px solid var(--line)}.scene-area{height:540px}.site-inspector .device-detail{min-height:0}.ems-action ol{display:grid;grid-template-columns:1fr 1fr;gap:0 25px}}@media(max-width:560px){.topbar{height:auto;min-height:65px;flex-wrap:wrap;padding:12px 16px;gap:9px}.topbar nav{gap:18px;font-size:12px}.topbar nav a{padding:4px 0}.brand{font-size:19px}.page-heading{align-items:flex-start}h1{font-size:22px}.page-heading p{font-size:11px;line-height:1.7}.clock strong{font-size:22px}.clock small{font-size:9px}.kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.kpis article{padding:13px}.kpis strong{font-size:25px}.kpis article:last-child{grid-column:1/-1}.scenario-bar>span{display:none}.scenario-buttons{flex-basis:100%}.mode-banner{flex-wrap:wrap;gap:8px}.mode-banner p{flex-basis:100%;order:2}.mode-banner>span:last-child{margin-left:auto}.panel{padding:15px}.panel-title{flex-wrap:wrap}.scene-area{height:450px}.scene-key{right:10px;font-size:9px;gap:8px}.scene-toolbar{left:10px;right:10px;gap:5px}.scene-toolbar label{font-size:10px}.ems-action ol{display:block}.legend{gap:12px}.log-row{grid-template-columns:44px 52px 1fr;gap:5px;font-size:11px}.site-summary{padding:6px 12px;justify-content:flex-start;gap:6px 18px}.site-summary strong{font-size:17px}}
