:root{--bg:#f5f5f7;--surface:#fff;--surface-2:#fafafb;--surface-3:#ededf0;--border:#e3e3e8;--border-strong:#c7c7cc;--text:#1d1d1f;--text-2:#48484c;--text-3:#636366;--accent:#227a33;--accent-hover:#1b6629;--accent-fg:#fff;--accent-soft:#e6f3e5;--brand:#4fae4d;--brand-ink:#041d23;--focus:#4fae4d;--material:#fafafcc7;--equip-fill:#e9ecef;--equip-stroke:#7d8790;--equip-run:#33475b;--duct:#dde3e8;--duct-label:#46555f;--media-heat:#d9482b;--media-heat-soft:#fce8e3;--media-cool:#1f7ae0;--media-cool-soft:#e3eefb;--state-ok:#1d7a57;--state-ok-soft:#e1f2ea;--state-off:#5e6a76;--state-off-soft:#eceff2;--state-warning:#a35a0b;--state-warning-soft:#fcefd9;--alarm-1:#c42b2b;--alarm-1-soft:#fbe4e4;--alarm-2:#b04508;--alarm-2-soft:#fce9dc;--alarm-3:#7e5d00;--alarm-3-soft:#fbf1cf;--quality-bad:#8441a8;--quality-bad-soft:#f2e6f8;--stale:#5e6b78;--shadow:#00000014;--font-sans:-apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", "DejaVu Sans", Arial, sans-serif;--font-mono:ui-monospace, "SF Mono", "SFMono-Regular", Menlo, "DejaVu Sans Mono", Consolas, monospace;--text-xs:.75rem;--text-sm:.8125rem;--text-md:.9375rem;--text-lg:1.0625rem;--text-xl:1.375rem;--text-2xl:1.75rem;--text-3xl:2.25rem;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--radius-sm:8px;--radius-md:12px;--radius-lg:18px;--radius-xl:22px;--sidebar:264px;--topbar:56px;--ease:cubic-bezier(.22, 1, .36, 1);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#041d23;--surface:#0b2c33;--surface-2:#0f343c;--surface-3:#143e47;--border:#1c4851;--border-strong:#2d5e68;--text:#eef5f5;--text-2:#c3d3d5;--text-3:#9fb7bb;--accent:#5cc45a;--accent-hover:#6fd06c;--accent-fg:#041d23;--accent-soft:#123f2a;--brand:#4fae4d;--brand-ink:#041d23;--focus:#5cc45a;--material:#08262dc7;--equip-fill:#18434c;--equip-stroke:#7fa0a6;--equip-run:#c7dadc;--duct:#17414a;--duct-label:#b5c9cc;--media-heat:#ff7a5c;--media-heat-soft:#3a2420;--media-cool:#5cc45a;--media-cool-soft:#14324a;--state-ok:#4cc38a;--state-ok-soft:#123b2e;--state-off:#9fb2b6;--state-off-soft:#173f47;--state-warning:#f0a84b;--state-warning-soft:#3a2c14;--alarm-1:#ff6b6b;--alarm-1-soft:#3d1c1f;--alarm-2:#ff9257;--alarm-2-soft:#3c2618;--alarm-3:#e9c24f;--alarm-3-soft:#38311a;--quality-bad:#c792ea;--quality-bad-soft:#2e2340;--stale:#97a4b1;--shadow:#00000059;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#041d23;--surface:#0b2c33;--surface-2:#0f343c;--surface-3:#143e47;--border:#1c4851;--border-strong:#2d5e68;--text:#eef5f5;--text-2:#c3d3d5;--text-3:#9fb7bb;--accent:#5cc45a;--accent-hover:#6fd06c;--accent-fg:#041d23;--accent-soft:#123f2a;--brand:#4fae4d;--brand-ink:#041d23;--focus:#5cc45a;--material:#08262dc7;--equip-fill:#18434c;--equip-stroke:#7fa0a6;--equip-run:#c7dadc;--duct:#17414a;--duct-label:#b5c9cc;--media-heat:#ff7a5c;--media-heat-soft:#3a2420;--media-cool:#5cc45a;--media-cool-soft:#14324a;--state-ok:#4cc38a;--state-ok-soft:#123b2e;--state-off:#9fb2b6;--state-off-soft:#173f47;--state-warning:#f0a84b;--state-warning-soft:#3a2c14;--alarm-1:#ff6b6b;--alarm-1-soft:#3d1c1f;--alarm-2:#ff9257;--alarm-2-soft:#3c2618;--alarm-3:#e9c24f;--alarm-3-soft:#38311a;--quality-bad:#c792ea;--quality-bad-soft:#2e2340;--stale:#97a4b1;--shadow:#00000059;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);min-width:320px;color:var(--text);font-family:var(--font-sans);font-size:var(--text-md);letter-spacing:-.008em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;line-height:1.47}h1,h2,h3{text-wrap:balance;margin:0}h1{font-size:var(--text-3xl);letter-spacing:-.026em;font-weight:700;line-height:1.1}h2{font-size:var(--text-xl);letter-spacing:-.018em;font-weight:650}h3{font-size:var(--text-lg);letter-spacing:-.012em;font-weight:600}p{text-wrap:pretty}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}img{max-width:100%}.num,table td,.kpi-value,.readout-value,.metric-value{font-variant-numeric:tabular-nums}.muted{color:var(--text-3)}.small{font-size:var(--text-sm)}.mono{font-family:var(--font-mono);font-size:var(--text-sm)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}:focus-visible{outline:3px solid color-mix(in srgb, var(--focus) 55%, transparent);outline-offset:2px;border-radius:var(--radius-sm)}::selection{background:color-mix(in srgb, var(--brand) 30%, transparent)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.btn{min-height:34px;font:inherit;letter-spacing:-.01em;cursor:pointer;white-space:nowrap;transition:background .2s var(--ease), transform .12s var(--ease), box-shadow .2s var(--ease);border:none;border-radius:980px;justify-content:center;align-items:center;gap:6px;padding:0 16px;font-weight:590;display:inline-flex;text-decoration:none!important}.btn:active:not(:disabled){transform:scale(.97)}.btn-sm{min-height:28px;font-size:var(--text-sm);padding:0 12px}.btn-lg{min-height:44px;font-size:var(--text-lg);padding:0 22px}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:var(--accent);color:var(--accent-fg)}.btn-primary:not(:disabled):hover{background:var(--accent-hover)}.btn-secondary{background:var(--surface-3);color:var(--accent)}.btn-secondary:not(:disabled):hover{background:color-mix(in srgb, var(--surface-3) 70%, var(--border-strong))}.btn-danger{background:var(--alarm-1);color:#fff}.btn-danger:not(:disabled):hover{filter:brightness(1.08)}.btn-ghost{color:var(--text-2);background:0 0}.btn-ghost:not(:disabled):hover{background:var(--surface-3);color:var(--text)}.btn-icon{width:34px;padding:0}button.link{color:var(--accent);cursor:pointer;font:inherit;background:0 0;border:none;padding:0}input,select,textarea{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);max-width:100%;min-height:36px;transition:border-color .2s var(--ease), box-shadow .2s var(--ease);border-radius:10px;padding:0 12px}select{padding-right:28px}textarea{width:100%;min-height:84px;padding:8px 12px}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--focus) 22%, transparent);outline:none}input[type=search]{background:var(--surface-3);border-color:#0000}label{font-size:var(--text-sm);color:var(--text-2);flex-direction:column;gap:6px;font-weight:510;display:flex}label.check{align-items:center;gap:var(--space-2);color:var(--text);flex-direction:row;font-weight:400}input[type=checkbox]{min-height:0;accent-color:var(--accent);width:16px;height:16px}.narrow{width:7.5rem}.grow{flex:16rem}.shell{grid-template-columns:var(--sidebar) minmax(0, 1fr);min-height:100%;display:grid}.sidebar{background:var(--material);-webkit-backdrop-filter:saturate(180%)blur(30px);backdrop-filter:saturate(180%)blur(30px);border-right:.5px solid var(--border);gap:var(--space-5);padding:var(--space-5) var(--space-3) var(--space-4);z-index:5;flex-direction:column;height:100vh;display:flex;position:sticky;top:0;overflow-y:auto}.brand{color:var(--text);padding:0 var(--space-2);align-items:center;gap:12px;display:flex;text-decoration:none!important}.brand-logo{width:40px;height:40px;box-shadow:0 1px 2px var(--shadow), 0 0 0 .5px #0000000f;object-fit:cover;border-radius:10px;display:block}.brand-name{letter-spacing:-.02em;font-size:1.0625rem;font-weight:700;line-height:1.15;display:block}.brand-sub{font-size:var(--text-xs);color:var(--text-3);font-weight:500;display:block}.nav-group{flex-direction:column;gap:1px;display:flex}.nav-label{font-size:var(--text-xs);color:var(--text-3);padding:0 var(--space-3) 6px;letter-spacing:.01em;font-weight:600}.nav-link{color:var(--text);transition:background .18s var(--ease);border-radius:10px;align-items:center;gap:10px;padding:6px 10px;font-weight:500;display:flex;text-decoration:none!important}.nav-link:hover{background:color-mix(in srgb, var(--surface-3) 80%, transparent)}.nav-link.active{background:var(--surface-3);font-weight:600}.nav-tile{color:#fff;background:var(--tile,var(--state-off));background-image:linear-gradient(#ffffff38,#fff0 60%);border-radius:7px;flex:none;place-items:center;width:26px;height:26px;display:grid;box-shadow:inset 0 0 0 .5px #00000014}.nav-count{font-size:var(--text-xs);color:#fff;background:var(--alarm-1);border-radius:999px;margin-left:auto;padding:0 7px;font-weight:700;line-height:18px}.sidebar-foot{gap:var(--space-2);flex-direction:column;margin-top:auto;display:flex}.user-chip{padding:var(--space-2);background:color-mix(in srgb, var(--surface) 60%, transparent);border-radius:12px;align-items:center;gap:10px;min-width:0;display:flex}.user-chip .avatar,.avatar{width:34px;height:34px;font-weight:700;font-size:var(--text-sm);color:#fff;background:linear-gradient(160deg, #2e7d32, var(--brand-ink));letter-spacing:.02em;font-size:var(--text-sm);border-radius:50%;flex:none;place-items:center;display:grid}.user-chip .who{min-width:0}.user-chip strong{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-weight:600;font-size:var(--text-sm);display:block;overflow:hidden}.user-chip span{font-size:var(--text-xs);color:var(--text-3)}.tools-row{align-items:center;gap:6px;display:flex}.tools-row select{background:var(--surface-3);border-color:#0000;flex:1;min-width:0;min-height:32px}.main{flex-direction:column;min-width:0;display:flex}.topbar{align-items:center;gap:var(--space-3);padding:0 var(--space-4);height:var(--topbar);background:var(--material);-webkit-backdrop-filter:saturate(180%)blur(30px);backdrop-filter:saturate(180%)blur(30px);border-bottom:.5px solid var(--border);z-index:20;display:none;position:sticky;top:0}.topbar .brand-logo{border-radius:8px;width:32px;height:32px}.content{padding:var(--space-6) var(--space-6) var(--space-7);gap:var(--space-5);flex-direction:column;width:100%;max-width:1560px;margin:0 auto;display:flex}.demo-banner{align-items:center;gap:var(--space-2);padding:7px var(--space-4);background:var(--brand-ink);color:#dff3de;font-size:var(--text-sm);text-align:center;flex-wrap:wrap;justify-content:center;font-weight:560;display:flex}.demo-banner svg{color:var(--brand)}.page-head{justify-content:space-between;align-items:flex-end;gap:var(--space-4);flex-wrap:wrap;display:flex}.page-head p{color:var(--text-3);font-size:var(--text-lg);margin:6px 0 0}.page-head .crumbs{font-size:var(--text-sm);color:var(--text-3);margin-bottom:6px;font-weight:500}.page-head .crumbs a{color:var(--accent)}.page-head-meta{gap:var(--space-2);margin-top:var(--space-3);flex-wrap:wrap;align-items:center;display:flex}.page-actions{gap:var(--space-2);flex-wrap:wrap;display:flex}.card,.panel{background:var(--surface);border-radius:var(--radius-lg);min-width:0;box-shadow:0 0 0 .5px var(--border), 0 1px 2px var(--shadow);position:relative}.card-tone:after{content:"";border-radius:inherit;pointer-events:none;box-shadow:inset 0 0 0 1.5px var(--tone);position:absolute;inset:0}.card-alarm1{--tone:var(--alarm-1)}.card-alarm2{--tone:var(--alarm-2)}.card-alarm3{--tone:var(--alarm-3)}.card-warning{--tone:var(--state-warning)}.card-stopped{--tone:var(--state-off)}.card-ok{--tone:transparent}.card-head{justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding:18px 20px 0;display:flex}.card-titles{min-width:0}.card-title{font-size:var(--text-lg);letter-spacing:-.015em;font-weight:650}.card-subtitle{color:var(--text-3);font-size:var(--text-sm);margin:2px 0 0}.card-actions{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.card-body{padding:16px 20px 20px}.card-body.flush{padding:8px 0 6px}.panel{gap:var(--space-3);flex-direction:column;padding:20px;display:flex}.panel h2{font-size:var(--text-lg)}.panel-head{justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.grid{gap:var(--space-4);display:grid}.grid-main{grid-template-columns:minmax(0,1fr) minmax(320px,400px);align-items:start}.grid-2{gap:var(--space-4);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.stack{gap:var(--space-4);flex-direction:column;min-width:0;display:flex}.kpis{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.toolbar{gap:var(--space-3);flex-wrap:wrap;align-items:flex-end;display:flex}.row-between{justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.facts{gap:10px var(--space-5);grid-template-columns:minmax(10rem,max-content) 1fr;margin:0;display:grid}.facts dt{color:var(--text-3);font-size:var(--text-sm)}.facts dd{margin:0}.list{margin:0;padding:0;list-style:none}.list li{border-bottom:.5px solid var(--border);padding:12px 0}.list li:last-child{border-bottom:none}.presets{gap:var(--space-1);flex-wrap:wrap;display:flex}.kpi{background:var(--surface);border-radius:var(--radius-lg);box-shadow:0 0 0 .5px var(--border), 0 1px 2px var(--shadow);flex-direction:column;gap:6px;padding:16px 18px;display:flex}.kpi-label{color:var(--text-2);font-size:var(--text-sm);align-items:center;gap:8px;font-weight:560;display:flex}.kpi-label svg{color:var(--kpi,var(--text-3))}.kpi-value{letter-spacing:-.03em;color:var(--kpi-value,var(--text));align-items:baseline;gap:4px;font-size:2.125rem;font-weight:650;line-height:1.05;display:flex}.kpi-unit{font-size:var(--text-md);color:var(--text-3);letter-spacing:0;font-weight:500}.kpi-hint{font-size:var(--text-xs);color:var(--text-3)}.kpi-alarm1{--kpi:var(--alarm-1);--kpi-value:var(--alarm-1)}.kpi-alarm2{--kpi:var(--alarm-2);--kpi-value:var(--alarm-2)}.kpi-alarm3{--kpi:var(--alarm-3);--kpi-value:var(--alarm-3)}.kpi-warning{--kpi:var(--state-warning);--kpi-value:var(--state-warning)}.kpi-ok{--kpi:var(--state-ok)}.kpi-stopped{--kpi:var(--state-off)}.pill{font-size:var(--text-xs);white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:3px 10px 3px 8px;font-weight:650;line-height:1.45;display:inline-flex}.pill-ok,.pill-running{color:var(--state-ok);background:var(--state-ok-soft)}.pill-stopped{color:var(--state-off);background:var(--state-off-soft)}.pill-warning{color:var(--state-warning);background:var(--state-warning-soft)}.pill-alarm1{color:var(--alarm-1);background:var(--alarm-1-soft)}.pill-alarm2{color:var(--alarm-2);background:var(--alarm-2-soft)}.pill-alarm3{color:var(--alarm-3);background:var(--alarm-3-soft)}.pill-ack{color:var(--text-2);background:var(--surface-3)}.pill-bad{color:var(--quality-bad);background:var(--quality-bad-soft)}.pill-stale,.pill-unknown{color:var(--stale);background:var(--surface-3)}.pill-solid.pill-alarm1{background:var(--alarm-1);color:#fff}.readout{flex-direction:column;gap:2px;min-width:0;display:flex}.readout-label{font-size:var(--text-xs);color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;font-weight:560;overflow:hidden}.readout-value{color:var(--text);letter-spacing:-.02em;align-items:baseline;gap:4px;font-weight:650;display:flex}.readout-sm .readout-value{font-size:var(--text-md)}.readout-md .readout-value{font-size:var(--text-xl)}.readout-lg .readout-value{font-size:var(--text-3xl)}.readout-unit{font-size:var(--text-xs);color:var(--text-3);letter-spacing:0;font-weight:500}.q-bad .readout-value{color:var(--quality-bad)}.q-stale .readout-value{color:var(--stale);font-style:italic}.q-none .readout-value{color:var(--text-3)}.spark{display:block;overflow:visible}.spark-grid{stroke:var(--border);stroke-dasharray:2 3}.spark-area{fill:color-mix(in srgb, var(--spark,var(--accent)) 14%, transparent);stroke:none}.spark-line{fill:none;stroke:var(--spark,var(--accent));stroke-width:1.6px;stroke-linejoin:round;stroke-linecap:round}.spark-dot{fill:var(--spark,var(--accent));stroke:var(--surface);stroke-width:1.5px}.spbar{flex-direction:column;gap:4px;min-width:120px;display:flex}.spbar-track{background:var(--surface-3);border-radius:3px;height:6px;position:relative}.spbar-fill{background:var(--accent);border-radius:3px;height:100%}.spbar-sp{background:var(--text);border-radius:1px;width:2px;position:absolute;top:-4px;bottom:-4px}.spbar-scale{color:var(--text-3);justify-content:space-between;font-size:10px;display:flex}.alarm-list{flex-direction:column;display:flex}.alarm-row{gap:var(--space-3);align-items:center;padding:12px 20px;display:flex;position:relative}.alarm-row+.alarm-row:before{content:"";border-top:.5px solid var(--border);position:absolute;top:0;left:60px;right:0}.alarm-prio{width:30px;height:30px;font-weight:750;font-size:var(--text-sm);color:#fff;background:var(--state-off);border-radius:9px;flex:none;place-items:center;display:grid}.alarm-alarm1 .alarm-prio{background:var(--alarm-1)}.alarm-alarm2 .alarm-prio{background:var(--alarm-2)}.alarm-alarm3 .alarm-prio{background:var(--alarm-3)}.alarm-ack .alarm-prio{color:var(--text-2);box-shadow:inset 0 0 0 2px var(--border-strong);background:0 0}.alarm-ok .alarm-prio{color:var(--state-ok);box-shadow:inset 0 0 0 2px var(--state-ok);background:0 0}.alarm-active .alarm-prio{animation:alarm-pulse 1.8s var(--ease) infinite}@keyframes alarm-pulse{50%{box-shadow:0 0 0 6px var(--alarm-1-soft)}}.alarm-main{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.alarm-message{font-weight:560}.alarm-meta{gap:var(--space-2);color:var(--text-3);font-size:var(--text-sm);flex-wrap:wrap;align-items:center;display:flex}.alarm-time{margin-left:auto}.alarm-action{flex:none}.table-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:.5px solid var(--border);vertical-align:middle;padding:10px 16px}th{font-size:var(--text-xs);color:var(--text-3);white-space:nowrap;background:0 0;font-weight:600}tbody tr{transition:background .15s var(--ease)}tbody tr:hover{background:var(--surface-2)}tbody tr:last-child td{border-bottom:none}td.right,th.right{text-align:right}.segmented{background:var(--surface-3);border-radius:9px;flex-wrap:wrap;gap:0;padding:2px;display:inline-flex}.segmented button{color:var(--text);font:inherit;font-size:var(--text-sm);cursor:pointer;min-height:28px;transition:background .2s var(--ease), box-shadow .2s var(--ease);background:0 0;border:none;border-radius:7px;padding:3px 14px;font-weight:520}.segmented button.on{background:var(--surface);font-weight:620;box-shadow:0 3px 8px #0000001f,0 0 0 .5px #0000000a}.points{border-radius:var(--radius-md);background:var(--surface-2);gap:6px var(--space-4);padding:var(--space-3) var(--space-4);border:none;grid-template-columns:repeat(auto-fill,minmax(15rem,1fr));margin:0;display:grid}.points legend{padding:0 var(--space-2);font-size:var(--text-sm);color:var(--text-2);font-weight:600}.site-grid{gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(340px,1fr));display:grid}.site-card{color:inherit;transition:transform .35s var(--ease), box-shadow .35s var(--ease);flex-direction:column;display:flex;overflow:hidden;text-decoration:none!important}.site-card:hover{box-shadow:0 0 0 .5px var(--border), 0 18px 40px var(--shadow);transform:translateY(-2px)}.site-card-plan{background:var(--surface-2);border-bottom:.5px solid var(--border);aspect-ratio:16/8;max-width:100%;display:block}.site-card-body{flex-direction:column;gap:12px;padding:16px 18px 18px;display:flex}.site-card-head{justify-content:space-between;gap:var(--space-2);align-items:flex-start;display:flex}.site-name{font-weight:650;font-size:var(--text-lg);letter-spacing:-.015em}.site-code{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-3)}.site-stats{gap:var(--space-2);grid-template-columns:repeat(3,1fr);display:grid}.site-stat{flex-direction:column;gap:0;display:flex}.site-stat strong{font-size:var(--text-xl);font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-weight:650}.site-stat span{font-size:var(--text-xs);color:var(--text-3)}.stat-alarm{color:var(--alarm-1)}.stat-warning{color:var(--state-warning)}.pager{gap:var(--space-2);flex-wrap:wrap;justify-content:flex-end;align-items:center;display:flex}.plan-card{overflow:hidden}.plan-toolbar{gap:var(--space-3);flex-wrap:wrap;justify-content:space-between;align-items:center;padding:16px 20px 0;display:flex}.plan-wrap{padding:8px 12px 12px;position:relative;overflow-x:auto}.plan{width:100%;min-width:760px;height:auto;font-family:var(--font-sans);-webkit-user-select:none;user-select:none;display:block}.plan-ground{fill:var(--surface-2)}.plan-zone{fill:url(#plan-hatch);stroke:var(--border-strong);stroke-dasharray:6 5;stroke-width:1.2px}.plan-zone-label{fill:var(--text-3);letter-spacing:.02em;font-size:13px;font-weight:600}.plan-room{stroke:none;transition:fill .8s var(--ease);cursor:default}.plan-walls{fill:none;stroke:var(--text);stroke-width:7px;stroke-linejoin:miter;opacity:.86}.plan-inner-wall{fill:none;stroke:var(--text);stroke-width:3.5px;opacity:.7}.plan-door{stroke:var(--surface);stroke-width:9px}.plan-door-arc{fill:none;stroke:var(--text-3);stroke-width:1px;stroke-dasharray:3 3}.plan-pool{fill:url(#plan-water);stroke:color-mix(in srgb, var(--media-cool) 60%, var(--text));stroke-width:2px}.plan-pool-ripple{fill:none;stroke:#ffffff8c;stroke-width:1.4px;animation:6s ease-in-out infinite ripple}@keyframes ripple{0%,to{opacity:.4;transform:translate(0)}50%{opacity:.85;transform:translate(14px)}}.plan-room-name{fill:var(--text);letter-spacing:-.01em;font-size:15px;font-weight:650}.plan-room-metric{fill:var(--text-2);font-variant-numeric:tabular-nums;font-size:13px;font-weight:520}.plan-room-big{fill:var(--text);letter-spacing:-.03em;font-variant-numeric:tabular-nums;font-size:30px;font-weight:650}.plan-room-big .u{fill:var(--text-3);font-size:15px;font-weight:500}.plan-equip{cursor:pointer;outline:none}.plan-equip-body{fill:var(--surface);stroke:var(--border-strong);stroke-width:1px;filter:drop-shadow(0 4px 10px #00000029);transition:transform .3s var(--ease)}.plan-equip:hover .plan-equip-body,.plan-equip:focus-visible .plan-equip-body{stroke:var(--accent);stroke-width:2px}.plan-equip.selected .plan-equip-body{stroke:var(--accent);stroke-width:2.5px}.plan-equip-icon{color:var(--equip-tile,var(--state-off))}.plan-equip-name{fill:var(--text);font-size:13px;font-weight:650}.plan-equip-value{fill:var(--text-2);font-variant-numeric:tabular-nums;font-size:12px;font-weight:520}.plan-equip-dot{stroke:var(--surface);stroke-width:2px}.plan-equip-dot.st-run{fill:var(--state-ok)}.plan-equip-dot.st-off{fill:var(--state-off)}.plan-equip-dot.st-alarm{fill:var(--alarm-1)}.plan-equip-dot.st-bad{fill:var(--quality-bad)}.plan-equip-halo{fill:none;stroke:var(--alarm-1);stroke-width:2.5px;opacity:0;pointer-events:none}.plan-equip.alarm .plan-equip-halo{animation:halo 1.8s var(--ease) infinite}@keyframes halo{0%{opacity:.95;stroke-width:2px}to{opacity:0;stroke-width:16px}}.plan-legend{font-size:var(--text-xs);color:var(--text-3);align-items:center;gap:10px;display:flex}.plan-legend-bar{border-radius:4px;width:140px;height:8px}.plan-airflow{fill:none;stroke:color-mix(in srgb, var(--media-cool) 40%, transparent);stroke-width:1.6px;stroke-dasharray:2 10;stroke-linecap:round;animation:1.6s linear infinite flow}@keyframes flow{to{stroke-dashoffset:-24px}}.equip-grid{gap:var(--space-3);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));display:grid}.equip-tile{text-align:left;font:inherit;color:inherit;cursor:pointer;background:var(--surface);border-radius:var(--radius-lg);box-shadow:0 0 0 .5px var(--border), 0 1px 2px var(--shadow);transition:transform .3s var(--ease), box-shadow .3s var(--ease);border:none;flex-direction:column;gap:10px;padding:14px 16px;display:flex}.equip-tile:hover{box-shadow:0 0 0 .5px var(--border), 0 12px 28px var(--shadow);transform:translateY(-2px)}.equip-tile-head{align-items:center;gap:10px;display:flex}.equip-tile-name{font-weight:620;line-height:1.25}.equip-tile-type{font-size:var(--text-xs);color:var(--text-3)}.equip-tile-values{gap:var(--space-4);flex-wrap:wrap;display:flex}.equip-tile.alarm{box-shadow:0 0 0 1.5px var(--alarm-1), 0 1px 2px var(--shadow)}.sheet-backdrop{z-index:60;animation:fade .3s var(--ease);background:#00000047;position:fixed;inset:0}.sheet{z-index:61;background:var(--material);-webkit-backdrop-filter:saturate(180%)blur(40px);backdrop-filter:saturate(180%)blur(40px);border-left:.5px solid var(--border);width:min(1240px,100vw);animation:sheet-in .45s var(--ease);padding-top:env(safe-area-inset-top,0px);flex-direction:column;display:flex;position:fixed;top:0;bottom:0;right:0;box-shadow:-24px 0 60px #0000002e}@keyframes sheet-in{0%{opacity:0;transform:translate(40px)}}@keyframes fade{0%{opacity:0}}.sheet-head{align-items:flex-start;gap:14px;padding:20px 24px 12px;display:flex}.sheet-head h2{letter-spacing:-.024em;font-size:1.625rem}.sheet-head p{color:var(--text-3);font-size:var(--text-sm);margin:2px 0 0}.sheet-close{background:var(--surface-3);width:32px;height:32px;color:var(--text-2);cursor:pointer;border:none;border-radius:50%;flex:none;place-items:center;margin-left:auto;display:grid}.sheet-close:hover{color:var(--text)}.sheet-body{gap:var(--space-4);flex-direction:column;flex:1;min-height:0;padding:4px 24px 32px;display:flex;overflow-y:auto}.sheet-body>*{flex-shrink:0}.sheet-status{gap:var(--space-2);flex-wrap:wrap;align-items:center;padding:0 24px 8px;display:flex}.equip-icon-tile{color:#fff;background:var(--equip-tile,var(--state-off));background-image:linear-gradient(#ffffff3d,#fff0 65%);border-radius:12px;flex:none;place-items:center;width:44px;height:44px;display:grid}.equip-icon-tile.sm{border-radius:8px;width:30px;height:30px}.group{flex-direction:column;gap:6px;display:flex}.group-title{font-size:var(--text-xs);color:var(--text-3);letter-spacing:.01em;padding:0 16px;font-weight:600}.group-list{background:var(--surface);border-radius:var(--radius-md);box-shadow:0 0 0 .5px var(--border);overflow:hidden}.point-row{align-items:center;gap:var(--space-3);grid-template-columns:minmax(0,1fr) auto 96px;min-height:48px;padding:10px 16px;display:grid;position:relative}.point-row+.point-row:before{content:"";border-top:.5px solid var(--border);position:absolute;top:0;left:16px;right:0}.point-name{min-width:0}.point-name strong{font-weight:520;font-size:var(--text-md);text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.point-name span{font-size:var(--text-xs);color:var(--text-3);font-family:var(--font-mono);display:block}.point-value{font-weight:650;font-size:var(--text-lg);letter-spacing:-.02em;text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}.point-value .u{font-size:var(--text-xs);color:var(--text-3);letter-spacing:0;margin-left:3px;font-weight:500}.point-value.q-bad{color:var(--quality-bad)}.point-value.q-stale{color:var(--stale);font-style:italic}.point-value.q-none{color:var(--text-3)}.point-trend{width:96px;height:28px}.point-state{justify-content:flex-end;display:inline-flex}.scene-wrap{border-radius:var(--radius-lg);background:radial-gradient(120% 90% at 50% 0%, var(--surface) 0%, var(--surface-2) 55%, var(--surface-3) 100%);box-shadow:0 0 0 .5px var(--border);overflow:hidden}.scene{width:100%;height:auto;font-family:var(--font-sans);display:block}.scene-label{fill:var(--text-3);letter-spacing:.01em;font-size:13px;font-weight:600}.scene-value{fill:var(--text);font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-size:20px;font-weight:680}.scene-value .u{fill:var(--text-3);font-size:13px;font-weight:500}.scene-value.q-bad{fill:var(--quality-bad)}.scene-value.q-stale{fill:var(--stale);font-style:italic}.scene-chip{fill:var(--surface);stroke:var(--border);stroke-width:.8px;filter:drop-shadow(0 2px 6px #0000001f)}.scene-casing{stroke:color-mix(in srgb, var(--equip-stroke) 70%, var(--text));stroke-width:1.4px}.scene-duct-wall{fill:none;stroke:color-mix(in srgb, var(--equip-stroke) 80%, transparent);stroke-width:1.2px}.scene-flow{fill:none;stroke-width:3px;stroke-linecap:round;stroke-dasharray:3 18;animation:flow-x var(--flow-dur,1.2s) linear infinite;opacity:.9}.scene-flow.off{opacity:.18;animation:none}@keyframes flow-x{to{stroke-dashoffset:-21px}}.scene-water{fill:none;stroke-width:5px;stroke-linecap:round;stroke-dasharray:8 10;animation:flow-x var(--flow-dur,1.4s) linear infinite}.scene-water.off{opacity:.35;animation:none}.scene-rotor{transform-box:fill-box;transform-origin:50%;animation:spin var(--spin-dur,1s) linear infinite}.scene-rotor.off{animation:none}@keyframes spin{to{transform:rotate(360deg)}}.scene-wheel{transform-box:fill-box;transform-origin:50%;animation:spin var(--spin-dur,6s) linear infinite}.scene-wheel.off{animation:none}.scene-led{stroke:#0000002e;stroke-width:1px}.scene-led.on{fill:var(--state-ok);filter:drop-shadow(0 0 4px var(--state-ok))}.scene-led.off{fill:var(--state-off);opacity:.5}.scene-led.alarm{fill:var(--alarm-1);filter:drop-shadow(0 0 5px var(--alarm-1));animation:1s steps(2,end) infinite blink}@keyframes blink{50%{opacity:.35}}.scene-alarm-ring{fill:none;stroke:var(--alarm-1);stroke-width:3px;animation:1.2s steps(2,end) infinite blink}.scene-bubble{fill:#ffffffb3;animation:rise var(--rise,4s) ease-in infinite}@keyframes rise{0%{opacity:.8;transform:translateY(0)}to{opacity:0;transform:translateY(-40px)}}.scene-paused *{animation-play-state:paused!important}.dw-wrap{border-radius:var(--radius-lg);box-shadow:0 0 0 .5px var(--border);background:var(--dw-paper);overflow:auto}.dw{width:100%;min-width:760px;height:auto;font-family:var(--font-sans);--dw-ink:color-mix(in srgb, var(--text) 82%, transparent);display:block}:root{--dw-paper:#fbfcfd;--dw-grid:#1f7ae00f;--dw-grid-major:#1f7ae01f}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--dw-paper:#06242b;--dw-grid:#78c8dc0f;--dw-grid-major:#78c8dc1f}}:root[data-theme=dark]{--dw-paper:#06242b;--dw-grid:#78c8dc0f;--dw-grid-major:#78c8dc1f}.dw-paper{fill:var(--dw-paper)}.dw-grid-minor{fill:none;stroke:var(--dw-grid);stroke-width:.6px}.dw-grid-major{fill:none;stroke:var(--dw-grid-major);stroke-width:.8px}.dw-frame{fill:none;stroke:var(--dw-ink);stroke-width:1.6px}.dw-tb{fill:var(--dw-paper);stroke:var(--dw-ink);stroke-width:1.4px}.dw-tb-line{stroke:var(--dw-ink);stroke-width:.8px}.dw-tb-title{fill:var(--text);letter-spacing:-.01em;font-size:16px;font-weight:700}.dw-tb-key{fill:var(--accent);letter-spacing:.08em;font-size:14px;font-weight:800}.dw-tb-val{fill:var(--text-2);font-size:12.5px;font-family:var(--font-mono)}.dw-arrowhead{fill:var(--dw-ink)}.dw-caption{fill:var(--text-2);letter-spacing:.01em;font-size:14px;font-weight:600}.dw-note{fill:var(--text-3);font-size:12px;font-weight:560}.dw-pipe{fill:none;stroke:var(--dw-medium);stroke-width:6px;stroke-linejoin:round;stroke-linecap:round}.dw-pipe-edge{fill:none;stroke:color-mix(in srgb, var(--dw-medium) 55%, #0b1114);stroke-linejoin:round;stroke-linecap:round}.dw-pipe-hl{fill:none;stroke:#ffffff6b;stroke-linejoin:round;stroke-linecap:round}.dw-pipe-insul{fill:none;stroke:#23272b;stroke-linejoin:round;stroke-linecap:round;opacity:.9}.dw-flow{fill:none;stroke:#ffffffd9;stroke-width:2px;stroke-dasharray:2 14;stroke-linecap:round;animation:.9s linear infinite flow}.dw-flow.off{display:none}.dw-discharge{--dw-medium:#d9482b}.dw-liquid{--dw-medium:#e58a1f}.dw-twophase{--dw-medium:#6fb3e8}.dw-twophase .dw-pipe,.dw-twophase .dw-pipe-hl{stroke-dasharray:10 6}.dw-suction{--dw-medium:#1f7ae0}.dw-chilled{--dw-medium:#2ba3c9}.dw-chilledReturn{--dw-medium:#7fa9b8}.dw-hot{--dw-medium:#e2533d}.dw-hotReturn{--dw-medium:#e99a86}.dw-air{--dw-medium:#8bc48a}.dw-airReturn{--dw-medium:#c7b27a}.dw-outside{--dw-medium:#5fa8e6}.dw-exhaust{--dw-medium:#a69b8c}.dw-pool{--dw-medium:#23a6d9}.dw-signal{--dw-medium:var(--text-3)}.dw-signal .dw-pipe{stroke-width:1.2px;stroke-dasharray:6 4}.dw-equip .dw-body{fill:var(--dw-paper);stroke:var(--dw-ink);stroke-width:2px}.dw-equip .dw-body-outline{fill:none;stroke:var(--dw-ink);stroke-width:2px}.dw-equip .dw-sym{fill:none;stroke:var(--dw-ink);stroke-width:2px;stroke-linejoin:round}.dw-equip .dw-sym-thin,.dw-sym-thin{fill:none;stroke:var(--dw-ink);stroke-width:1.3px}.dw-coil-condenser .dw-sym,.dw-coil-heating .dw-sym{stroke:#d9482b}.dw-coil-evaporator .dw-sym,.dw-coil-cooling .dw-sym{stroke:#1f7ae0}.dw-compressor.run .dw-body{fill:color-mix(in srgb, var(--state-ok) 18%, var(--dw-paper))}.dw-run-ring{fill:none;stroke:var(--state-ok);stroke-width:2px;stroke-dasharray:4 8;opacity:0}.dw-compressor.run .dw-run-ring{opacity:1;transform-box:fill-box;transform-origin:50%;animation:6s linear infinite spin}.dw-equip.alarm .dw-body,.dw-equip.alarm .dw-body-outline{stroke:var(--alarm-1);stroke-width:3px}.dw-blade{fill:color-mix(in srgb, var(--dw-ink) 70%, transparent)}.dw-rotor{transform-box:fill-box;transform-origin:50%}.dw-fan.run .dw-rotor{animation:1s linear infinite spin}.dw-sight-ok{fill:var(--state-ok)}.dw-duct-body{stroke:#7d868c;stroke-width:1.2px}.dw-flange{fill:#b3bbc1;stroke:#6f787e;stroke-width:.8px}.dw-duct-band{fill:none;stroke:var(--dw-medium);stroke-width:7px;stroke-linecap:round;opacity:.9}.dw-duct-head{fill:var(--dw-medium);stroke:color-mix(in srgb, var(--dw-medium) 55%, #0b1114);stroke-width:1px}.dw-casing-outline{fill:none;stroke:#4b545b;stroke-width:2.4px}.dw-casing-panel{stroke:#8a949a;stroke-width:.8px}.dw-frame-rail{stroke:#3a4045;stroke-width:.8px}.dw-shell-outline{stroke:#1a1e21;stroke-width:1.2px}.dw-led{fill:#3b4248}.dw-compressor.run .dw-led{fill:#34d058;filter:drop-shadow(0 0 3px #34d058)}.dw-run-glow{fill:var(--state-ok);opacity:0}.dw-compressor.run .dw-run-glow{opacity:.35}.dw-alarm-outline{fill:none;stroke:#0000;stroke-width:3px}.dw-equip.alarm .dw-alarm-outline{stroke:var(--alarm-1)}.dw-guard circle,.dw-guard line{fill:none;stroke:#e1e6eabf;stroke-width:1.1px}.dw-bend{fill:none;stroke:#c27a45;stroke-width:2.6px}.dw-coil-header{fill:#c27a45}.dw-coil-condenser .dw-coil-header,.dw-coil-heating .dw-coil-header{fill:#d9482b}.dw-coil-evaporator .dw-coil-header,.dw-coil-cooling .dw-coil-header{fill:#1f7ae0}.dw-code-inv{fill:#f2f4f5}.dw-wheel-seg{stroke:#282c3073;stroke-width:1.4px}.dw-wheel.run .dw-wheel-move{animation:1.2s linear infinite dw-wheel}@keyframes dw-wheel{0%{transform:translateY(0)}to{transform:translateY(14px)}}@media (prefers-reduced-motion:reduce){.dw-wheel.run .dw-wheel-move{animation:none}}.dw-sight-off{fill:var(--border-strong)}.dw-open-bar{fill:var(--accent)}.dw-lead{stroke:var(--dw-ink);stroke-width:1px;stroke-dasharray:3 3}.dw-bubble{fill:var(--dw-paper);stroke:var(--dw-ink);stroke-width:1.6px}.dw-bubble-line{stroke:var(--dw-ink);stroke-width:1.2px}.dw-code{fill:var(--text);letter-spacing:.02em;font-size:12px;font-weight:750}.dw-tag{fill:var(--text-2);font-size:11.5px;font-weight:600;font-family:var(--font-mono)}.dw-value-box{fill:var(--surface);stroke:var(--border-strong);stroke-width:1px;filter:drop-shadow(0 2px 4px #00000014)}.dw-value{fill:var(--text);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:15px;font-weight:700}.dw-unit{fill:var(--text-3);font-size:11.5px;font-weight:500}.dw-inst.unbound .dw-bubble{stroke-dasharray:4 3;stroke:var(--border-strong)}.dw-inst.unbound .dw-value{fill:var(--text-3);font-size:12px;font-weight:560}.dw-inst.unbound .dw-value-box{fill:#0000;stroke-dasharray:4 3;filter:none}.dw-inst.q-bad .dw-value{fill:var(--quality-bad)}.dw-inst.q-stale .dw-value{fill:var(--stale);font-style:italic}.dw-inst.alarm .dw-bubble{stroke:var(--alarm-1);stroke-width:2.5px;fill:var(--alarm-1-soft)}.dw-inst.alarm .dw-value{fill:var(--alarm-1)}.dw-derived-box{fill:color-mix(in srgb, var(--accent) 8%, var(--surface));stroke:color-mix(in srgb, var(--accent) 45%, transparent);stroke-width:1px}.dw-derived-value{fill:var(--text);font-variant-numeric:tabular-nums;font-size:19px;font-weight:700}.dw-derived.unbound .dw-derived-value{fill:var(--text-3);font-size:13px;font-weight:560}.dw-alarm-ring{fill:none;stroke:var(--alarm-1);stroke-width:3px;animation:1.2s steps(2,end) infinite blink}.dw-pool-water{fill:color-mix(in srgb, #23a6d9 35%, var(--dw-paper));stroke:#1c86b3;stroke-width:2px}.dw-pool-rim{fill:#eef1f2;stroke:#b9c1c7;stroke-width:1.5px;filter:drop-shadow(0 3px 4px #00000026)}.dw-casing{fill:none;stroke:var(--dw-ink);stroke-width:1.4px;stroke-dasharray:10 6}.dw-tray{fill:url(#dw-steel-h);stroke:#59626a;stroke-width:.8px}.dw-table-box{fill:var(--surface);stroke:var(--dw-ink);stroke-width:1.2px}.dw-table-title{fill:var(--text);font-size:13px;font-weight:700}.dw-row-tag{fill:var(--text-2);font-size:11.5px;font-weight:700;font-family:var(--font-mono)}.dw-row-name{fill:var(--text-2);font-size:12px}.dw-row-value{fill:var(--text);font-variant-numeric:tabular-nums;font-size:13px;font-weight:700}.dw-row-dot{fill:#0000}.dw-row-on .dw-row-dot,.dw-row-ok .dw-row-dot{fill:var(--state-ok)}.dw-row-off .dw-row-dot{fill:var(--state-off)}.dw-row-alarm .dw-row-dot{fill:var(--alarm-1);animation:1s steps(2,end) infinite blink}.dw-row-alarm .dw-row-value{fill:var(--alarm-1)}.dw-row-unbound .dw-row-value,.dw-row-unbound .dw-row-name{fill:var(--text-3);font-weight:500}.three-wrap{border-radius:var(--radius-lg);box-shadow:0 0 0 .5px var(--border);background:radial-gradient(110% 80% at 50% 10%, var(--surface) 0%, var(--surface-2) 55%, var(--surface-3) 100%);position:relative;overflow:hidden}.three-stage{touch-action:none;cursor:grab;width:100%;height:min(62vh,560px);min-height:360px}.three-stage:active{cursor:grabbing}.three-credits{margin:var(--space-2) 0 0;overflow-wrap:anywhere}.three-credits a{color:inherit;text-underline-offset:2px;text-decoration:underline}.three-stage canvas{display:block;width:100%!important;height:100%!important}.three-labels{pointer-events:none;position:absolute;inset:0}.three-label{background:var(--material);-webkit-backdrop-filter:blur(18px)saturate(180%);backdrop-filter:blur(18px)saturate(180%);box-shadow:0 0 0 .5px var(--border), 0 6px 18px #00000024;white-space:nowrap;border-radius:10px;flex-direction:column;gap:0;max-width:170px;padding:4px 9px 5px;transition:opacity .2s;display:flex;position:absolute;top:0;left:0}.three-label:after{content:"";background:inherit;width:9px;height:9px;box-shadow:.5px .5px 0 0 var(--border);position:absolute;bottom:-5px;left:50%;transform:translate(-50%)rotate(45deg)}.three-label-name{text-transform:none;color:var(--text-3);text-overflow:ellipsis;font-size:10px;font-weight:600;overflow:hidden}.three-label-value{color:var(--text);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:14px;font-weight:700}.three-label.q-bad .three-label-value{color:var(--quality-bad)}.three-label.q-stale .three-label-value{color:var(--stale);font-style:italic}.three-toolbar{justify-content:space-between;align-items:center;gap:var(--space-3);pointer-events:none;display:flex;position:absolute;bottom:12px;left:12px;right:12px}.three-toolbar>*{pointer-events:auto}.three-fallback{align-items:center;gap:var(--space-2);padding:var(--space-6);color:var(--text-3);text-align:center;border-radius:var(--radius-lg);background:var(--surface-2);flex-direction:column;display:flex}.sheet-tabs{padding:0 24px 8px}@media (max-width:640px){.sheet-tabs{padding:0 16px 8px}}.mnemo-wrap{background:var(--surface-2);border-radius:var(--radius-md);overflow-x:auto}.mnemo{width:100%;min-width:640px;height:auto;font-family:var(--font-sans);display:block}.mnemo-duct{fill:var(--duct)}.mnemo-pipe-supply{fill:var(--media-cool);opacity:.55}.mnemo-pipe-return{fill:var(--equip-stroke);opacity:.45}.mnemo-duct-label,.mnemo-label{fill:var(--duct-label);font-size:12px}.mnemo-point-label{fill:var(--text-3);font-size:11px}.mnemo-value{fill:var(--text);font-variant-numeric:tabular-nums;font-size:15px;font-weight:650}.mnemo-value .mnemo-unit{fill:var(--text-3);font-size:11px;font-weight:500}.mnemo-value.q-bad{fill:var(--quality-bad)}.mnemo-value.q-stale{fill:var(--stale);font-style:italic}.eq-body{fill:var(--equip-fill);stroke:var(--equip-stroke);stroke-width:2px}.eq-line{fill:none;stroke:var(--equip-stroke);stroke-width:2px}.eq-run .eq-body{fill:var(--equip-run)}.eq-run .eq-rotor{fill:var(--surface)}.eq-rotor{fill:var(--equip-stroke)}.eq-run .eq-spin{transform-box:fill-box;transform-origin:50%;animation:1.4s linear infinite spin}.eq-heat{stroke:var(--media-heat)}.eq-cool{stroke:var(--media-cool)}.eq-alarm .eq-body{stroke:var(--alarm-1);stroke-width:3px}.ind{stroke-width:1.5px}.ind-ok{fill:var(--state-ok);stroke:var(--state-ok)}.ind-off{fill:var(--surface);stroke:var(--state-off)}.ind-alarm{fill:var(--alarm-1);stroke:var(--alarm-1)}.ind-bad{fill:var(--surface);stroke:var(--quality-bad);stroke-dasharray:2 2}.ind-text{fill:var(--surface);font-size:9px;font-weight:800}.ind-off+.ind-text,.ind-bad+.ind-text{fill:var(--state-off)}.hmi{border-radius:var(--radius-md);background:var(--surface-2);border:none;width:100%;height:70vh;min-height:420px}.chart{width:100%}.empty{align-items:center;gap:var(--space-2);padding:var(--space-6) var(--space-4);color:var(--text-3);text-align:center;flex-direction:column;display:flex}.empty svg{color:var(--border-strong)}.empty-title{color:var(--text-2);font-weight:600;font-size:var(--text-lg)}.skeleton{padding:var(--space-2) 0;flex-direction:column;gap:10px;display:flex}.skeleton-line{background:linear-gradient(90deg, var(--surface-3), var(--surface-2), var(--surface-3));background-size:200% 100%;border-radius:6px;height:12px;animation:1.4s infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}.toasts{right:max(16px, env(safe-area-inset-right,0px));bottom:calc(16px + env(safe-area-inset-bottom,0px));gap:var(--space-2);z-index:80;flex-direction:column;max-width:min(420px,100vw - 32px);display:flex;position:fixed}.toast{background:var(--material);-webkit-backdrop-filter:blur(30px);backdrop-filter:blur(30px);box-shadow:0 0 0 .5px var(--border), 0 12px 32px var(--shadow);animation:sheet-in .4s var(--ease);border-radius:14px;align-items:center;gap:10px;padding:12px 16px;font-weight:560;display:flex}.toast-ok svg{color:var(--state-ok)}.toast-warning svg{color:var(--state-warning)}.toast-alarm1 svg{color:var(--alarm-1)}.toast-info svg{color:var(--accent)}.error{color:var(--alarm-1);gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.warning{color:var(--state-warning);font-weight:600}.notice{background:var(--state-ok-soft);color:var(--state-ok);border-radius:12px;padding:10px 14px}.callout{gap:var(--space-3);background:var(--state-warning-soft);color:var(--state-warning);border-radius:14px;align-items:flex-start;padding:14px 16px;font-weight:560;display:flex}.dialog{border-radius:var(--radius-xl);padding:var(--space-5);background:var(--surface);width:min(460px,100vw - 32px);color:var(--text);box-shadow:0 30px 80px #0000004d, 0 0 0 .5px var(--border);border:none}.dialog[open]{animation:pop .35s var(--ease)}@keyframes pop{0%{opacity:0;transform:scale(.96)}}.dialog::backdrop{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#00000052}.dialog h2{margin-bottom:var(--space-3)}.dialog-body{gap:var(--space-3);flex-direction:column;display:flex}.dialog-actions{justify-content:flex-end;gap:var(--space-2);margin-top:var(--space-5);flex-wrap:wrap;display:flex}.login{min-height:100%;padding:var(--space-6) max(16px, env(safe-area-inset-right,0px)) var(--space-6) max(16px, env(safe-area-inset-left,0px));background:radial-gradient(60% 50% at 20% 10%, color-mix(in srgb, var(--brand) 18%, transparent), transparent 70%), radial-gradient(50% 40% at 90% 90%, color-mix(in srgb, var(--brand-ink) 14%, transparent), transparent 70%), var(--bg);place-items:center;display:grid}.login-card{gap:var(--space-4);border-radius:var(--radius-xl);flex-direction:column;width:100%;max-width:440px;padding:36px 32px;display:flex}.login-card .brand{padding:0}.login-logo{width:72px;height:72px;box-shadow:0 10px 30px color-mix(in srgb, var(--brand) 35%, transparent);border-radius:18px}.login-card h1{font-size:var(--text-2xl)}.role-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.role-btn{text-align:left;background:var(--surface-2);box-shadow:inset 0 0 0 .5px var(--border);color:var(--text);cursor:pointer;font:inherit;transition:transform .25s var(--ease), box-shadow .25s var(--ease), background .25s var(--ease);border:none;border-radius:14px;flex-direction:column;align-items:flex-start;gap:4px;padding:14px;display:flex}.role-btn:hover{background:var(--accent-soft);box-shadow:inset 0 0 0 1.5px var(--accent);transform:translateY(-1px)}.role-btn strong{font-weight:640}.role-btn span{font-size:var(--text-xs);color:var(--text-3);line-height:1.35}.swatches{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;display:grid}.swatch{font-size:var(--text-xs);box-shadow:0 0 0 .5px var(--border);border-radius:12px;overflow:hidden}.swatch-color{height:48px}.swatch-name{font-family:var(--font-mono);padding:8px 10px}.showcase-row{gap:var(--space-3);flex-wrap:wrap;align-items:center;display:flex}.showcase-row .btn{white-space:normal;text-align:start;overflow-wrap:anywhere;min-width:0;max-width:100%}.icon-grid{gap:var(--space-2);grid-template-columns:repeat(auto-fill,minmax(96px,1fr));display:grid}.icon-cell{color:var(--text-2);font-size:10px;font-family:var(--font-mono);background:var(--surface-2);border-radius:12px;flex-direction:column;align-items:center;gap:6px;padding:10px;display:flex}.key-values{gap:var(--space-3);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));display:grid}.key-value{justify-content:space-between;align-items:flex-end;gap:var(--space-3);background:var(--surface-2);border-radius:14px;min-width:0;padding:14px;display:flex}.metrics{gap:var(--space-3);grid-template-columns:repeat(auto-fill,minmax(170px,1fr));display:grid}.metric{background:var(--surface);box-shadow:0 0 0 .5px var(--border), 0 1px 2px var(--shadow);border-radius:16px;flex-direction:column;gap:4px;min-width:0;padding:14px 16px;display:flex}.metric-label{font-size:var(--text-xs);color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;font-weight:560;overflow:hidden}.metric-value{font-size:var(--text-2xl);letter-spacing:-.03em;font-weight:650;line-height:1.1}.metric-value .u{font-size:var(--text-sm);color:var(--text-3);letter-spacing:0;margin-left:3px;font-weight:500}.metric-sub{font-size:var(--text-xs);color:var(--text-3)}@media (max-width:1180px){.grid-main{grid-template-columns:minmax(0,1fr)}}@media (max-width:900px){.shell{grid-template-columns:minmax(0,1fr)}.sidebar{z-index:40;width:min(86vw,300px);transition:transform .35s var(--ease);box-shadow:0 0 60px var(--shadow);padding-top:calc(var(--space-5) + env(safe-area-inset-top,0px));background:var(--surface);position:fixed;inset:0 auto 0 0;transform:translate(-102%)}.sidebar.open{transform:none}.scrim{z-index:30;animation:fade .3s var(--ease);background:#0000004d;position:fixed;inset:0}.topbar{top:env(safe-area-inset-top,0px);display:flex}.content{padding:var(--space-5) max(16px, env(safe-area-inset-right,0px)) var(--space-7) max(16px, env(safe-area-inset-left,0px))}.grid-2{grid-template-columns:minmax(0,1fr)}.sheet{border-left:none;border-radius:22px 22px 0 0;width:100vw;height:92vh;padding-top:0;animation-name:sheet-up;top:auto;left:0}@keyframes sheet-up{0%{opacity:0;transform:translateY(60px)}}}@media (max-width:640px){h1{font-size:var(--text-2xl)}.page-head p{font-size:var(--text-md)}.toolbar>*{flex:100%}.toolbar .btn{width:100%}.facts,.site-grid{grid-template-columns:minmax(0,1fr)}th,td{padding:10px 12px}.alarm-row{flex-wrap:wrap;padding:12px 16px}.alarm-time{margin-left:0}.point-row{grid-template-columns:minmax(0,1fr) auto}.point-trend{display:none}.sheet-head,.sheet-status{padding-left:16px;padding-right:16px}.sheet-body{padding:4px 16px 24px}.card-head{padding:16px 16px 0}.card-body{padding:14px 16px 16px}.plan-toolbar{padding:14px 16px 0}.kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.kpi{padding:12px 14px}.kpi-value{font-size:1.75rem}.plan{min-width:620px}}.onboarding-safety{align-items:flex-start;gap:var(--space-3);color:var(--text-2);background:color-mix(in oklab, var(--accent) 8%, var(--surface));flex-direction:row}.onboarding-safety svg{color:var(--accent);flex:none;margin-top:2px}.onboarding-form{flex-wrap:wrap;align-items:flex-end}.onboarding-form input:not([type=file]){min-width:0}.onboarding-file{align-items:center;gap:var(--space-2);border:1px dashed var(--border-strong);border-radius:var(--radius-md);cursor:pointer;min-width:0;max-width:100%;padding:10px 14px;position:relative;flex-direction:row!important}.onboarding-file span{overflow-wrap:anywhere}.onboarding-file input{opacity:0;cursor:pointer;position:absolute;inset:0}.onboarding-file:focus-within{outline:2px solid var(--accent);outline-offset:2px}.onboarding-samples{align-items:center;gap:var(--space-2);flex-wrap:wrap;flex-basis:100%;display:flex}.onboarding-samples .btn.active{border-color:var(--accent);color:var(--accent)}.onboarding-warnings{color:var(--state-warning);font-size:var(--text-sm);margin:0;padding-left:1.2em}.onboarding-equip{gap:var(--space-2);flex-direction:column;display:flex}.onboarding-equip-head{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}.onboarding-table td{vertical-align:top}.onboarding-table select{width:100%;max-width:280px}.onboarding-table tr.level-review td:first-child{box-shadow:inset 3px 0 0 var(--state-warning)}.onboarding-table tr.level-none td:first-child{box-shadow:inset 3px 0 0 var(--state-off)}.onboarding-table tr.level-manual td:first-child{box-shadow:inset 3px 0 0 var(--accent)}.onboarding-verify{border-radius:var(--radius-md);border:1px solid var(--border);flex-direction:column;gap:4px;padding:12px 14px;display:flex}.onboarding-verify.ok{border-color:var(--state-ok)}.onboarding-verify.fail{border-color:var(--state-warning)}.onboarding-yaml{border-radius:var(--radius-md);background:var(--surface-2);max-height:420px;font-family:var(--font-mono);white-space:pre;margin:0;padding:12px 14px;font-size:12px;line-height:1.5;overflow:auto}.onboarding-meaning{max-width:280px;margin-top:4px}.onboarding-auto{color:var(--accent);align-items:baseline;gap:4px;font-style:italic;display:flex}.library-summary{flex-direction:column;gap:4px}.library-equip h3{font-size:var(--text-sm);text-transform:uppercase;letter-spacing:.04em;color:var(--text-3);margin:8px 0 6px}.library-list{gap:var(--space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.library-scenario{border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;gap:6px;padding:12px 14px;display:flex}.library-scenario-head{justify-content:space-between;gap:var(--space-3);flex-wrap:wrap;align-items:flex-start;display:flex}.library-scenario-head>div:first-child{flex:260px;min-width:0}.library-scenario-actions{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.library-checks,.library-mini{font-size:var(--text-sm);flex-direction:column;gap:3px;margin:0;padding:0;list-style:none;display:flex}.library-checks li,.library-mini li{color:var(--text-2);align-items:baseline;gap:6px;display:flex}.library-checks li svg,.library-mini li svg{flex:none;transform:translateY(2px)}.library-checks li.ok,.library-mini li.ok{color:var(--state-ok)}.library-checks li.fail{color:var(--alarm-1,var(--state-warning))}.library-mini li.off{color:var(--text-3)}.library-run{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.library-logic{gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(260px,1fr));display:grid}.library-derived{display:contents}.journal-table td{vertical-align:top}.journal-complete{align-items:center;gap:8px;display:inline-flex}.journal-complete-bar{background:var(--surface-3);border-radius:3px;width:64px;height:6px;overflow:hidden}.journal-complete-bar>span{background:var(--accent);border-radius:3px;height:100%;display:block}.journal-card-grid{gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));align-items:start;display:grid}.journal-card-grid>.panel{min-width:0}.journal-facts{gap:12px var(--space-4);grid-template-columns:repeat(auto-fit,minmax(min(100%,170px),1fr));margin:0;display:grid}.journal-facts>div{flex-direction:column;gap:2px;min-width:0;display:flex}.journal-facts dt{color:var(--text-3);font-size:var(--text-sm)}.journal-facts dd{overflow-wrap:anywhere;margin:0}.journal-form{gap:var(--space-3);flex-direction:column;display:flex}.journal-form-grid{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));display:grid}.journal-span-2{grid-column:span 2}@media (max-width:520px){.journal-span-2{grid-column:auto}}.journal-contact{gap:var(--space-2) var(--space-3);flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex}.journal-docs{gap:var(--space-3);flex-direction:column;display:flex}.journal-doc-list,.journal-grants,.journal-mine,.journal-history{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.journal-doc{border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;gap:6px;padding:10px 12px;display:flex}.journal-doc.archived{opacity:.7}.journal-doc-head{gap:var(--space-3);align-items:flex-start;display:flex}.journal-doc-main{overflow-wrap:anywhere;flex-direction:column;gap:2px;min-width:0;display:flex}.journal-doc-icon{border-radius:var(--radius-sm);background:var(--surface-3);width:32px;height:32px;color:var(--accent);flex:none;place-items:center;display:grid}.journal-doc-actions,.journal-docs-foot{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.journal-docs-foot{justify-content:space-between}.journal-upload{cursor:pointer;color:inherit;flex-direction:row;align-items:center}.journal-versions{font-size:var(--text-sm);overflow-wrap:anywhere;flex-direction:column;gap:2px;margin:0;padding-left:20px;display:flex}.journal-qr-body{gap:var(--space-4);flex-wrap:wrap;align-items:flex-start;display:flex}.journal-qr-body>.stack{flex:200px;min-width:0}.qr-code{border-radius:var(--radius-sm);border:1px solid var(--border);background:#fff;flex:none;max-width:100%;height:auto}.journal-qr-url{font-size:var(--text-xs,12px);overflow-wrap:anywhere;color:var(--text-2)}.journal-grants li,.journal-mine li{gap:var(--space-3);border-bottom:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;padding:8px 0;display:flex}.journal-grants li>.grow{min-width:0}.journal-history li{border-left:2px solid var(--border);flex-direction:column;gap:2px;padding-left:10px;display:flex}.journal-equip-pick{border:1px solid var(--border);border-radius:var(--radius-md);grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:6px;margin:0;padding:10px 12px;display:grid}.journal-equip-pick legend{font-size:var(--text-sm);color:var(--text-2);padding:0 4px}.journal-qr-landing h1{overflow-wrap:anywhere;margin:0}.service-kpis{margin-bottom:var(--space-4)}.service-plan-list,.service-levels,.service-visits,.service-defects,.service-items{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.service-plan-list li,.service-levels li{gap:var(--space-2) var(--space-3);border-bottom:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;padding:8px 0;display:flex}.service-plan-equip{min-width:0;color:inherit;flex-direction:column;text-decoration:none;display:flex}.service-plan-badge{flex-wrap:wrap;align-items:center;gap:6px 8px;display:inline-flex}.service-visit-row{gap:var(--space-3);text-align:left;border:1px solid var(--border);border-radius:var(--radius-md);width:100%;color:inherit;font:inherit;cursor:pointer;background:0 0;align-items:center;padding:10px 12px;display:flex}.service-visit-row:hover{background:var(--surface-3)}.service-visit-row .grow{overflow-wrap:anywhere;flex-direction:column;min-width:0;display:flex}.service-defect{border:1px solid var(--border);border-left:4px solid var(--state-warning);border-radius:var(--radius-md);flex-direction:column;gap:6px;padding:10px 12px;display:flex}.service-defect.sev-high,.service-defect.sev-critical{border-left-color:var(--alarm-1,var(--state-warning))}.service-defect.sev-low{border-left-color:var(--accent)}.service-defect-head{flex-wrap:wrap;align-items:center;gap:6px 8px;display:flex}.service-actions,.service-photos,.service-status{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.service-thumbs{flex-wrap:wrap;gap:8px;display:flex}.service-thumbs a{font-size:var(--text-xs,12px);color:var(--text-2);flex-direction:column;align-items:center;gap:2px;text-decoration:none;display:flex}.service-thumbs img{object-fit:cover;border-radius:var(--radius-sm);border:1px solid var(--border);width:72px;height:72px}.service-item{border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;gap:8px;padding:12px;display:flex}.service-item.st-done{border-color:color-mix(in srgb, var(--state-ok) 55%, var(--border))}.service-item.st-not_done{border-color:color-mix(in srgb, var(--state-warning) 60%, var(--border))}.service-item.missing{box-shadow:inset 3px 0 0 var(--state-warning)}.service-item-head{gap:var(--space-2);justify-content:space-between;align-items:flex-start;display:flex}.service-item-text{overflow-wrap:anywhere;font-weight:560}.service-item-text .req{color:var(--state-warning);margin-right:4px}.service-lockout{font-size:var(--text-xs,12px);color:var(--state-warning);flex:none;align-items:center;gap:4px;display:inline-flex}.service-status .btn{min-height:40px}.service-measure{gap:var(--space-2);flex-wrap:wrap;align-items:flex-end;display:flex}.service-measure input{width:120px}.service-inline{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.service-inline input{flex:160px;min-width:0}.service-out{color:var(--alarm-1,var(--state-warning));font-size:var(--text-sm);align-items:center;gap:4px;display:inline-flex}.service-if-fail,.service-missing{color:var(--state-warning)}.service-comment{width:100%}.service-photo-btn{cursor:pointer;color:inherit;flex-direction:row;align-items:center;min-height:40px}.service-photo-btn.disabled{opacity:.5;pointer-events:none}.service-progress{gap:var(--space-3);margin:var(--space-2) 0 var(--space-4);align-items:center;display:flex}.service-progress-bar{background:var(--surface-3);border-radius:4px;flex:1;height:8px;overflow:hidden}.service-progress-bar>span{background:var(--accent);height:100%;display:block}.service-sign{gap:var(--space-3);flex-direction:column;display:flex}.signature-pad{aspect-ratio:10/3;border:1px dashed var(--border);border-radius:var(--radius-md);touch-action:none;cursor:crosshair;background:#fff;width:100%;max-width:600px;height:auto}.service-cancel{margin-top:var(--space-3)}.service-cancel summary{cursor:pointer;color:var(--text-2);font-size:var(--text-sm)}.service-lockout-note{gap:var(--space-2);margin-bottom:var(--space-3);align-items:center;display:flex}.service-codes{gap:var(--space-3);margin-block:var(--space-3);display:grid}.service-code-search{flex:220px;gap:4px;max-width:320px;display:grid}.service-code{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-3);gap:8px;min-width:0;display:grid}.service-code h4{color:var(--text-3);text-transform:uppercase;letter-spacing:.04em;margin:4px 0 0;font-size:.85rem}.service-code ul,.service-code ol{gap:2px;margin:0;padding-left:1.2rem;display:grid}.service-code-head{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.service-code-id{font-family:var(--font-mono);background:var(--surface-2);border-radius:6px;padding:2px 8px;font-weight:700}.service-code-note{color:var(--text-3);font-size:.9rem}.service-code-foot{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.service-code-link{color:var(--accent);font:inherit;font-family:var(--font-mono);cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.service-levels li .btn{white-space:normal;text-align:left;min-width:0;max-width:100%}
