:root{--bg: #FAFAFA;--panel: #FFFFFF;--panel-raised: #FDF1F0;--border: #E7E4E4;--border-soft: #EFECEC;--text: #1B1B1D;--text-muted: #6C6C70;--text-faint: #9C9C9F;--brand: #E2231A;--brand-dark: #B91912;--brand-soft: #FCEBEA;--gas: #C2570C;--gas-soft: #FBEEE2;--water: #0B7C8C;--water-soft: #E4F2F3;--ambient: #3E8E41;--ambient-soft: #E8F3E8;--accent: #E2231A;--danger: #DC2626;--danger-soft: #FCEAEA;--ok: #2E9B4F;--warn: #C77700;--font-ui: "IBM Plex Sans", system-ui, sans-serif;--font-mono: "IBM Plex Mono", "SFMono-Regular", monospace;--radius-sm: 4px;--radius-md: 6px;--shadow-card: 0 1px 2px rgba(20, 10, 10, .04), 0 1px 6px rgba(20, 10, 10, .04)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font-ui);-webkit-font-smoothing:antialiased}button,input,select{font-family:inherit}a{color:inherit;text-decoration:none}::selection{background:var(--brand-soft);color:var(--brand-dark)}a:focus-visible,button:focus-visible,input:focus-visible{outline:2px solid var(--brand);outline-offset:2px}@media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important}}.app-shell{display:flex;min-height:100vh}.sidebar{width:232px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--border-soft);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.sidebar-brand{display:flex;align-items:center;padding:18px 16px;border-bottom:1px solid var(--border-soft)}.sidebar-brand-link{display:block;width:100%;line-height:0;cursor:pointer}.sidebar-logo{width:100%;height:auto;display:block}.sidebar-nav{padding:12px 10px;flex:1;overflow-y:auto}.nav-row{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border-radius:var(--radius-sm);color:var(--text-muted);font-size:13px;background:none;border:none;cursor:pointer;text-align:left}.nav-row:hover{background:var(--panel-raised);color:var(--text)}.nav-row-active{background:var(--brand-soft);color:var(--brand);font-weight:500}.nav-row-active-parent{color:var(--text)}.nav-label{flex:1}.nav-chevron{flex-shrink:0;color:var(--text-faint)}.nav-children{padding-left:12px;border-left:1px solid var(--border-soft);margin:2px 0 4px 22px}.nav-child{padding-left:12px;font-size:12.5px}.nav-dot{width:4px;height:4px;border-radius:50%;background:currentColor;flex-shrink:0}.sidebar-foot{display:flex;align-items:center;gap:10px;padding:12px 14px;border-top:1px solid var(--border-soft)}.sidebar-foot-dot{width:8px;height:8px;border-radius:50%;background:var(--ok);flex-shrink:0;box-shadow:0 0 0 3px #2e9b4f26}.sidebar-foot-text{flex:1;min-width:0}.sidebar-foot-label{font-size:12px;font-weight:500}.sidebar-foot-sub{font-size:10.5px;color:var(--text-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-logout{background:none;border:1px solid var(--border);color:var(--text-muted);border-radius:var(--radius-sm);width:28px;height:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}.sidebar-logout:hover{border-color:var(--brand);color:var(--brand)}.topbar{display:flex;align-items:center;gap:10px;padding:10px 20px;border-bottom:1px solid var(--border-soft);background:var(--panel);position:sticky;top:0;z-index:15}.topbar-menu-btn{background:var(--panel-raised);border:1px solid var(--border);color:var(--text);border-radius:var(--radius-sm);width:34px;height:34px;display:none;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}.topbar-spacer{flex:1}.topbar-icon-btn{position:relative;background:none;border:none;color:var(--text-muted);width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}.topbar-icon-btn:hover{background:var(--panel-raised);color:var(--brand)}.topbar-badge{position:absolute;top:1px;right:1px;min-width:15px;height:15px;padding:0 3px;border-radius:999px;background:var(--brand);color:#fff;font-size:9.5px;font-weight:700;display:flex;align-items:center;justify-content:center;line-height:1}.topbar-profile{display:flex;align-items:center;gap:9px;padding:4px 10px 4px 4px;border-radius:999px;border:1px solid var(--border-soft);margin-left:4px}.topbar-avatar{width:28px;height:28px;border-radius:50%;background:var(--brand-soft);color:var(--brand-dark);font-family:var(--font-mono);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.topbar-profile-text{display:flex;flex-direction:column;line-height:1.25}.topbar-profile-name{font-size:12.5px;font-weight:600;color:var(--text);text-transform:capitalize}.topbar-profile-role{font-size:10.5px;color:var(--text-faint)}.mobile-scrim{display:none}.nav-badge{background:var(--brand);color:#fff;font-size:10px;font-weight:700;min-width:17px;height:17px;padding:0 4px;border-radius:999px;display:flex;align-items:center;justify-content:center;flex-shrink:0}@media (max-width: 780px){.topbar-menu-btn{display:flex}.topbar-profile-text{display:none}.sidebar{position:fixed;left:0;top:0;z-index:30;transform:translate(-100%);transition:transform .2s ease}.sidebar.open{transform:translate(0)}.mobile-scrim{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#04080a8c;border:none;z-index:25}}.main-col{flex:1;min-width:0;display:flex;flex-direction:column}.scroll-area{flex:1;overflow-y:auto;padding:28px 32px 56px}@media (max-width: 900px){.scroll-area{padding:20px 16px 40px}}.page-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:22px;flex-wrap:wrap}.page-head h1{font-size:21px;font-weight:600;margin:0 0 4px;letter-spacing:.01em}.page-head p{margin:0;color:var(--text-muted);font-size:13.5px;max-width:60ch}.page-head-meta{font-family:var(--font-mono);font-size:12px;color:var(--text-faint);text-align:right}.analyzer-section{border:1px solid var(--border-soft);background:var(--panel);border-radius:var(--radius-md);margin-bottom:20px;box-shadow:var(--shadow-card);overflow:hidden}.analyzer-section-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border-soft);gap:12px;flex-wrap:wrap}.analyzer-section-head-left{display:flex;align-items:center;gap:10px}.analyzer-bar{width:4px;align-self:stretch;border-radius:2px}.analyzer-title{font-size:14.5px;font-weight:600;margin:0}.analyzer-sub{font-size:12px;color:var(--text-muted);margin:2px 0 0}.status-pill{font-family:var(--font-mono);font-size:11px;padding:3px 9px;border-radius:999px;border:1px solid currentColor;display:inline-flex;align-items:center;gap:6px}.status-pill:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.param-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr))}.param-tile{padding:16px 18px;border-right:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft)}.param-label{font-size:11.5px;color:var(--text-muted);margin:0 0 10px;letter-spacing:.01em}.param-value-row{display:flex;align-items:baseline;gap:6px}.param-value{font-family:var(--font-mono);font-size:24px;font-weight:600;color:var(--text);line-height:1}.param-unit{font-family:var(--font-mono);font-size:12.5px;color:var(--text-faint)}.param-range{margin-top:8px;font-size:11px;color:var(--text-faint);font-family:var(--font-mono)}.param-tile.flag-warn .param-value{color:var(--warn)}.param-tile.flag-danger .param-value{color:var(--danger)}.param-tile.flag-ok .param-value{color:var(--text)}.panel-card{border:1px solid var(--border-soft);background:var(--panel);border-radius:var(--radius-md);padding:20px;margin-bottom:18px;box-shadow:var(--shadow-card)}.panel-card h2{font-size:15px;margin:0 0 4px;font-weight:600}.panel-card .sub{font-size:12.5px;color:var(--text-muted);margin:0 0 16px}table.data-table{width:100%;border-collapse:collapse;font-size:13px}table.data-table th{text-align:left;font-weight:500;color:var(--text-muted);font-size:11.5px;padding:8px 10px;border-bottom:1px solid var(--border)}table.data-table td{padding:10px;border-bottom:1px solid var(--border-soft);font-family:var(--font-mono);font-size:12.5px}table.data-table tr:last-child td{border-bottom:none}.btn{font-family:var(--font-ui);font-size:13px;font-weight:500;padding:8px 14px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--panel-raised);color:var(--text);cursor:pointer}.btn:hover{border-color:var(--brand)}.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn-primary:hover{opacity:.92}.tag{font-family:var(--font-mono);font-size:11px;padding:2px 8px;border-radius:3px;border:1px solid var(--border);color:var(--text-muted);display:inline-block}.two-col{display:grid;grid-template-columns:1.3fr 1fr;gap:18px}@media (max-width: 980px){.two-col{grid-template-columns:1fr}}.placeholder-block{border:1px dashed var(--border);border-radius:var(--radius-md);padding:36px 20px;text-align:center;color:var(--text-faint);font-size:13px}.camera-feed-frame{position:relative;border-radius:var(--radius-md);overflow:hidden;background:#0b0b0b;aspect-ratio:16 / 9}.camera-feed-img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .15s ease-out}.camera-feed-badge{position:absolute;top:12px;left:12px;display:flex;align-items:center;background:#0000008c;color:#fff;font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;padding:4px 9px;border-radius:4px}.camera-feed-timestamp{position:absolute;bottom:12px;right:12px;background:#0000008c;color:#fff;font-family:var(--font-mono);font-size:11px;padding:4px 9px;border-radius:4px}.ptz-zoom-row{display:flex;align-items:center;justify-content:center;gap:14px;margin-bottom:22px}.ptz-zoom-value{font-family:var(--font-mono);font-size:13px;color:var(--text-muted);min-width:34px;text-align:center}.ptz-pad{display:grid;grid-template-columns:repeat(3,48px);grid-template-rows:repeat(3,48px);gap:6px;justify-content:center;margin:0 auto}.ptz-btn{display:flex;align-items:center;justify-content:center;border:1px solid var(--border);background:var(--panel);border-radius:var(--radius-sm, 6px);color:var(--text-muted);cursor:pointer;transition:background .15s ease,color .15s ease}.ptz-btn:hover{background:var(--brand-soft, var(--gas-soft));color:var(--brand)}.ptz-center-dot{display:flex;align-items:center;justify-content:center}.ptz-center-dot:after{content:"";width:8px;height:8px;border-radius:50%;background:var(--border)}.site-strip{display:flex;gap:22px;flex-wrap:wrap;padding:12px 18px;border:1px solid var(--border-soft);background:var(--panel);border-radius:var(--radius-md);margin-bottom:22px;box-shadow:var(--shadow-card)}.site-strip-item{display:flex;flex-direction:column;gap:2px}.site-strip-item .k{font-size:10.5px;color:var(--text-faint);text-transform:none}.site-strip-item .v{font-family:var(--font-mono);font-size:13px}.login-error{background:var(--danger-soft);color:var(--danger);border:1px solid rgba(220,38,38,.25);font-size:12.5px;padding:8px 10px;border-radius:var(--radius-sm);margin-bottom:16px}.auth-page{position:relative;min-height:100vh;overflow:hidden;background:radial-gradient(circle at 12% 8%,var(--brand-soft) 0%,transparent 40%),linear-gradient(180deg,#fffdfd,#fff6f5 55%,#ffedec);display:flex;flex-direction:column}.auth-page:before{content:"";position:absolute;left:0;right:0;bottom:0;height:46%;background:radial-gradient(ellipse 90% 100% at 30% 100%,rgba(226,35,26,.95) 0%,rgba(226,35,26,.85) 45%,transparent 75%),radial-gradient(ellipse 70% 100% at 85% 100%,rgba(185,25,18,.9) 0%,transparent 70%);opacity:.94;pointer-events:none;z-index:0}.auth-dots{position:absolute;top:6%;right:12%;width:130px;height:100px;background-image:radial-gradient(rgba(226,35,26,.35) 1.6px,transparent 1.6px);background-size:16px 16px;z-index:0;pointer-events:none}.auth-shell{position:relative;z-index:1;flex:1;display:flex;align-items:center;gap:48px;max-width:1440px;width:100%;margin:0 auto;padding:35px 48px 0}.auth-brand{flex:1.15;min-width:0}.auth-brand-logo{height:46px;width:auto;display:block;margin-bottom:14px}.auth-brand-rule{display:block;width:46px;height:4px;background:var(--brand);border-radius:2px;margin-bottom:18px}.auth-brand-heading{font-size:34px;line-height:1.2;font-weight:800;color:#1c2530;margin:0 0 14px}.auth-brand-heading span{color:var(--brand)}.auth-brand-tagline{font-size:14px;line-height:1.6;color:var(--text-muted);max-width:460px;margin:0 0 26px}.auth-brand-tagline strong{color:var(--text);font-size:14.5px}.auth-feature-grid{display:grid;grid-template-columns:repeat(5,minmax(90px,1fr));gap:20px 16px;max-width:520px}.auth-feature{display:flex;flex-direction:column;align-items:flex-start;gap:10px}.auth-feature-icon{width:44px;height:44px;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:flex;align-items:center;justify-content:center;flex-shrink:0}.auth-feature-label{font-size:12.5px;font-weight:600;color:#1c2530;line-height:1.3}.auth-preview{position:relative;display:flex;align-items:flex-end;max-width:520px;height:220px;margin-top:8px}.auth-preview-laptop{width:100%;max-width:420px}.auth-preview-screen{background:#fff;border:6px solid #1C2530;border-bottom:none;border-radius:8px 8px 0 0;overflow:hidden;box-shadow:0 18px 34px #140a0a38}.auth-preview-topbar{background:#f4f5f7;padding:6px 8px;display:flex;gap:4px;border-bottom:1px solid var(--border-soft)}.auth-preview-dot{width:6px;height:6px;border-radius:50%;background:#d8dce2}.auth-preview-body{display:flex;height:132px}.auth-preview-sidebar{width:30%;background:var(--brand);padding:8px 6px;display:flex;flex-direction:column;gap:7px}.auth-preview-logo-chip{width:60%;height:6px;background:#ffffffd9;border-radius:3px;margin-bottom:4px}.auth-preview-nav-item{width:100%;height:5px;background:#ffffff52;border-radius:3px}.auth-preview-main{flex:1;padding:8px 10px;display:flex;flex-direction:column;gap:8px}.auth-preview-stats{display:flex;gap:6px}.auth-preview-stat{flex:1;background:var(--brand-soft);color:var(--brand-dark);border-radius:4px;font-size:9px;font-weight:700;display:flex;align-items:center;justify-content:center;gap:3px;padding:3px 0}.auth-preview-chart{flex:1;background:#fafafb;border:1px solid var(--border-soft);border-radius:4px;padding:3px 5px}.auth-preview-chart svg{width:100%;height:100%;display:block}.auth-preview-rows{display:flex;flex-direction:column;gap:4px}.auth-preview-row{height:5px;border-radius:3px;background:var(--border-soft)}.auth-preview-row.short{width:60%}.auth-preview-laptop-base{height:10px;background:#2b3542;border-radius:0 0 10px 10px;margin:0 -10px}.auth-preview-phone{position:absolute;left:-6px;bottom:-14px;width:92px;height:176px;background:#1c2530;border-radius:16px;padding:8px 6px;box-shadow:0 14px 26px #140a0a47}.auth-preview-phone-screen{background:#fff;height:100%;border-radius:10px;padding:8px 6px;display:flex;flex-direction:column;gap:6px}.auth-preview-phone .auth-preview-logo-chip{background:var(--brand)}.auth-preview-phone .auth-preview-nav-item{background:var(--brand-soft)}.auth-form-wrap{flex:.85;display:flex;justify-content:center}.auth-form-card{width:100%;max-width:400px;background:#fff;border-radius:20px;box-shadow:0 24px 60px #1e0a0a24;padding:40px 36px 32px}.auth-form-logo{height:42px;width:auto;display:block;margin:0 0 22px}.auth-form-title{font-size:26px;font-weight:800;color:#1c2530;margin:0 0 6px}.auth-form-sub{font-size:13.5px;color:var(--text-muted);margin:0 0 26px}.auth-input{position:relative;margin-bottom:16px}.auth-input-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--brand);pointer-events:none}.auth-input input{width:100%;padding:13px 40px;border:1px solid var(--border);border-radius:10px;background:#fafafa;color:var(--text);font-size:13.5px}.auth-input input:focus{border-color:var(--brand);outline:none;background:#fff;box-shadow:0 0 0 3px var(--brand-soft)}.auth-input-toggle{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--text-faint);width:28px;height:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:var(--radius-sm)}.auth-input-toggle:hover{color:var(--brand)}.auth-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}.auth-remember{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--text-muted);cursor:pointer}.auth-remember input{width:15px;height:15px;accent-color:var(--brand);cursor:pointer}.auth-forgot{font-size:12.5px;font-weight:600;color:var(--brand);text-decoration:none}.auth-forgot:hover{text-decoration:underline}.auth-submit{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;padding:13px 14px;font-size:14.5px;font-weight:700;color:#fff;background:var(--brand);border:none;border-radius:10px;cursor:pointer;transition:background .15s ease}.auth-submit:hover{background:var(--brand-dark)}.auth-submit:disabled{opacity:.7;cursor:default}.auth-divider{position:relative;text-align:center;margin:26px 0 4px;border-top:1px solid var(--border-soft)}.auth-divider span{position:relative;top:-9px;background:#fff;padding:0 12px;font-size:11.5px;letter-spacing:.03em;color:var(--text-faint)}.auth-demo-hint{text-align:center;font-size:11px;color:var(--text-faint)}.auth-demo-hint code{font-family:var(--font-mono);background:var(--panel-raised);padding:1px 5px;border-radius:3px;color:var(--text-muted)}.auth-footer-bar{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;gap:14px;padding:16px 24px 22px;color:#fff;font-size:12px;font-weight:600;letter-spacing:.08em}.auth-footer-bar i{width:4px;height:4px;border-radius:50%;background:#ffffffb3;font-style:normal}@media (max-width: 980px){.auth-shell{flex-direction:column;padding:32px 24px;gap:32px}.auth-brand{max-width:560px}.auth-preview{display:none}.auth-form-wrap{width:100%}}.data-toolbar{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap}.toolbar-btn{display:inline-flex;align-items:center;gap:6px;background:none;border:none;color:var(--brand);font-size:12.5px;font-weight:500;padding:6px 8px;border-radius:var(--radius-sm);cursor:pointer}.toolbar-btn:hover{background:var(--brand-soft)}.table-scroll{overflow-x:auto}table.data-table.compact td,table.data-table.compact th{padding:5px 10px}.table-foot{display:flex;align-items:center;justify-content:flex-end;gap:14px;margin-top:14px;font-size:12.5px;color:var(--text-muted)}.table-foot select{border:1px solid var(--border);border-radius:var(--radius-sm);padding:3px 6px;font-size:12.5px;background:#fff}.table-foot-nav{display:flex;gap:4px}.table-foot-nav button{border:1px solid var(--border);background:#fff;width:26px;height:26px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--text-muted)}.table-foot-nav button:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}.table-foot-nav button:disabled{opacity:.4;cursor:default}.row-action-btn{background:none;border:none;color:var(--brand);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:4px;border-radius:var(--radius-sm)}.row-action-btn:hover{background:var(--brand-soft)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px}@media (max-width: 780px){.form-grid{grid-template-columns:1fr}}.form-field{display:block}.form-field-label{display:block;font-size:12px;color:var(--text-muted);margin-bottom:6px;font-weight:500}.form-field input,.form-field select,.form-field textarea{width:100%;padding:9px 11px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text);font-size:13.5px}.form-field input:disabled,.form-field textarea:disabled{background:var(--panel-raised);color:var(--text-muted)}.form-field input:focus,.form-field select:focus,.form-field textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.form-field textarea{resize:vertical;min-height:120px}.form-actions{display:flex;gap:10px;margin-top:6px}.toggle-chip-row{display:flex;gap:10px;flex-wrap:wrap}.toggle-chip{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:999px;border:1.5px solid var(--border);background:#fff;color:var(--text-muted);font-size:13px;font-weight:500;cursor:pointer}.toggle-chip.on{border-color:var(--brand);background:var(--brand-soft);color:var(--brand-dark)}.toggle-chip .dot{width:8px;height:8px;border-radius:50%;background:currentColor;opacity:.4}.toggle-chip.on .dot{opacity:1}.valve-row{display:flex;gap:34px;align-items:flex-start;padding:26px 10px 10px;position:relative}.valve-row:before{content:"";position:absolute;top:46px;left:58px;right:58px;height:2px;background:repeating-linear-gradient(to right,var(--border) 0 8px,transparent 8px 14px);z-index:0}.valve-btn{position:relative;z-index:1;width:108px;display:flex;flex-direction:column;align-items:center;gap:9px;background:none;border:none;cursor:pointer;padding:0}.valve-btn:disabled{cursor:not-allowed;opacity:.42}.valve-btn-dial{width:76px;height:76px;border-radius:50%;background:radial-gradient(circle at 32% 28%,#ffffff,var(--panel-raised) 72%);border:3px solid var(--dial-color, var(--brand));display:flex;align-items:center;justify-content:center;position:relative;box-shadow:0 2px 5px #140a0a14;transition:box-shadow .25s ease,transform .15s ease}.valve-btn:not(:disabled):hover .valve-btn-dial{transform:translateY(-2px);box-shadow:0 6px 14px #140a0a1f}.valve-spokes{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;color:var(--dial-color, var(--brand));opacity:.55}.valve-rim{fill:none;stroke:currentColor;stroke-width:2;stroke-dasharray:3 7;opacity:.5}.valve-spoke-group line{stroke:currentColor;stroke-width:3;stroke-linecap:round}.valve-btn-icon{position:relative;z-index:2;width:42px;height:42px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;color:var(--dial-color, var(--brand));box-shadow:0 1px 3px #140a0a1f inset}.valve-ping{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:2px solid var(--dial-color, var(--brand));opacity:0}.valve-btn-label{font-size:13px;font-weight:600;color:var(--text)}.valve-btn-state{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-mono);font-size:10.5px;color:var(--text-faint);text-transform:uppercase;letter-spacing:.03em}.valve-btn-state-dot{width:6px;height:6px;border-radius:50%;background:var(--text-faint)}.valve-btn.running .valve-spoke-group{transform-origin:50px 50px;animation:valve-spin 2.4s linear infinite;opacity:.9}.valve-btn.running .valve-btn-dial{animation:valve-glow 1.6s ease-in-out infinite}.valve-btn.running .valve-ping{animation:valve-ping 1.8s cubic-bezier(.2,.6,.4,1) infinite}.valve-btn.running .valve-btn-icon{animation:valve-icon-breathe 1.6s ease-in-out infinite}.valve-btn.running .valve-btn-state-dot{background:var(--dial-color, var(--brand));animation:valve-dot-blink 1s ease-in-out infinite}.valve-btn.running .valve-btn-state{color:var(--dial-color, var(--brand))}.valve-btn.done .valve-btn-dial{background:radial-gradient(circle at 32% 28%,#ffffff,var(--ambient-soft) 72%)}.valve-btn.done .valve-btn-state-dot{background:var(--ok)}.valve-btn.done .valve-btn-state{color:var(--ok)}@keyframes valve-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes valve-glow{0%,to{box-shadow:0 0 color-mix(in srgb,var(--dial-color, var(--brand)) 45%,transparent),0 2px 5px #140a0a14}50%{box-shadow:0 0 0 9px color-mix(in srgb,var(--dial-color, var(--brand)) 0%,transparent),0 2px 5px #140a0a14}}@keyframes valve-ping{0%{transform:scale(1);opacity:.55}to{transform:scale(1.55);opacity:0}}@keyframes valve-icon-breathe{0%,to{transform:scale(1)}50%{transform:scale(1.08)}}@keyframes valve-dot-blink{0%,to{opacity:1}50%{opacity:.25}}@media (prefers-reduced-motion: reduce){.valve-btn.running .valve-spoke-group,.valve-btn.running .valve-btn-dial,.valve-btn.running .valve-ping,.valve-btn.running .valve-btn-icon,.valve-btn.running .valve-btn-state-dot{animation:none}}.run-panel{border:1px solid var(--border-soft);background:var(--panel);border-radius:var(--radius-md);padding:20px;margin-top:20px;box-shadow:var(--shadow-card)}.run-panel-head{display:flex;align-items:center;justify-content:space-between}.run-panel-head h3{margin:0;font-size:15px;font-weight:600}.run-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:16px 0}@media (max-width: 700px){.run-stats{grid-template-columns:repeat(2,1fr)}}.run-stat{border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:10px 12px;background:var(--bg)}.run-stat .k{display:block;font-size:11px;color:var(--text-muted);margin-bottom:4px}.run-stat .v{font-family:var(--font-mono);font-size:15px;font-weight:600}.run-chart{border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:8px 4px 0;background:var(--bg)}.run-done-note{font-size:12.5px;color:var(--ok);align-self:center;font-weight:500}.detail-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px 24px}@media (max-width: 900px){.detail-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 560px){.detail-grid{grid-template-columns:1fr}}.detail-item .k{display:block;font-size:11.5px;color:var(--text-muted);margin-bottom:4px}.detail-item .v{font-size:13.5px;font-weight:500}.detail-item .v.mono{font-family:var(--font-mono)}.multiselect{position:relative}.multiselect-control{width:100%;min-height:40px;display:flex;align-items:center;justify-content:space-between;gap:8px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;padding:6px 10px;cursor:pointer;text-align:left}.multiselect-chips{display:flex;flex-wrap:wrap;gap:6px;flex:1}.multiselect-placeholder{color:var(--text-faint);font-size:13.5px}.ms-chip{display:inline-flex;align-items:center;gap:5px;background:var(--panel-raised);color:var(--text);font-size:12px;padding:3px 6px 3px 9px;border-radius:999px}.ms-chip svg{cursor:pointer;color:var(--text-faint)}.ms-chip svg:hover{color:var(--danger)}.multiselect-caret{color:var(--text-faint);flex-shrink:0}.multiselect-menu{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:0 8px 20px #140a0a1a;z-index:30;max-height:220px;overflow-y:auto;padding:6px}.multiselect-option{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:var(--radius-sm);font-size:13px;cursor:pointer}.multiselect-option:hover{background:var(--panel-raised)}.report-banner{display:flex;gap:12px;border:1px solid var(--border-soft);background:var(--panel);border-radius:var(--radius-md);padding:14px 18px;margin-bottom:22px;box-shadow:var(--shadow-card);font-size:13px;color:var(--text-muted)}.report-banner strong{color:var(--text)}table.report-table thead tr{background:var(--brand)}table.report-table thead th{color:#fff;border-bottom:none;font-size:12px;text-transform:none;font-weight:600}table.report-table td{font-family:var(--font-mono)}.pager{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:16px;font-size:13px;color:var(--text-muted)}.checkbox-row{display:flex;align-items:center;gap:8px;font-size:13.5px;cursor:pointer}.checkbox-row input{width:16px;height:16px;accent-color:var(--brand)}.graph-legend-note{font-size:12px;color:var(--text-muted)}.site-status-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px;flex-wrap:wrap}.site-status-title{display:flex;flex-direction:column;gap:6px}.site-status-title h1{margin:0;font-size:21px;font-weight:700}.site-status-meta{display:flex;align-items:center;gap:14px;font-size:12.5px;color:var(--text-muted)}.site-status-meta .cat-badge{display:inline-flex;align-items:center;gap:6px;padding:2px 9px;border-radius:999px;font-family:var(--font-mono);font-size:11px;font-weight:600;border:1px solid currentColor}.site-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border-soft);margin-bottom:18px}.site-tab{padding:10px 4px;margin-right:22px;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted);font-size:13.5px;font-weight:500;cursor:pointer}.site-tab.active{color:var(--brand);border-color:var(--brand)}.site-status-body{display:flex;gap:22px}.site-substations{width:150px;flex-shrink:0;display:flex;flex-direction:column;gap:2px;border-right:1px solid var(--border-soft);padding-right:14px}.site-substation-btn{text-align:left;padding:9px 10px;border-radius:var(--radius-sm);background:none;border:none;color:var(--text-muted);font-size:13px;cursor:pointer;position:relative}.site-substation-btn.active{color:var(--brand);font-weight:600}.site-substation-btn.active:before{content:"";position:absolute;left:-14px;top:6px;bottom:6px;width:2px;background:var(--brand)}.site-param-grid{flex:1;display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:16px}.site-param-card{border:1px solid var(--border-soft);background:var(--panel);border-radius:var(--radius-md);padding:16px;box-shadow:var(--shadow-card)}.site-param-card .val-row{display:flex;align-items:baseline;gap:6px;font-family:var(--font-mono);font-size:21px;font-weight:700;margin-bottom:2px}.site-param-card .val-row .unit{font-size:12px;font-weight:500;color:var(--text-muted)}.site-param-card .param-name{font-size:13px;font-weight:600;margin-bottom:8px}.site-param-card .station-row{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-muted);margin-bottom:10px}.site-param-card .std-limit{display:inline-block;background:var(--panel-raised);color:var(--text-muted);font-size:11px;padding:2px 8px;border-radius:4px;margin-bottom:10px}.site-param-card .sync-row{font-size:11px;color:var(--text-faint);line-height:1.6}.quick-actions{display:flex;gap:10px;flex-wrap:wrap}.quick-action{display:inline-flex;align-items:center;gap:8px;background:var(--qa-color, var(--brand));color:#fff;border:none;padding:10px 16px;border-radius:var(--radius-sm);font-size:12.5px;font-weight:600;cursor:pointer;box-shadow:0 2px 6px #140a0a1f;transition:transform .15s ease,box-shadow .15s ease}.quick-action:hover{transform:translateY(-1px);box-shadow:0 4px 10px #140a0a29}.category-panel-body{display:grid;grid-template-columns:280px 1fr;gap:20px;padding:18px}@media (max-width: 860px){.category-panel-body{grid-template-columns:1fr}}.category-chart{border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:10px 6px 4px;background:var(--bg)}.category-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}.print-report{display:none}.print-header-bar{display:flex;align-items:center;gap:10px;background:#e2231a;color:#fff;font-size:16px;font-weight:700;padding:10px 14px}.print-logo-mark{height:22px;width:auto}.print-subtitle-bar{background:#fbdad8;color:#7a1410;font-size:12.5px;font-weight:600;padding:7px 14px}.print-meta-bar{background:#fcebea;color:#333;font-size:11px;padding:5px 14px}.print-section-title{font-size:12.5px;font-weight:700;color:#111;margin:18px 0 8px;padding:0 2px 4px;border-bottom:1px solid #ddd}table.print-table{width:100%;border-collapse:collapse;font-size:10.5px;margin-bottom:6px}table.print-table th{background:#f5c6c3;color:#5a0e0b;text-align:left;padding:6px 8px;font-weight:700}table.print-table td{padding:5px 8px;border-bottom:1px solid #eee}table.print-table tr:nth-child(2n) td{background:#fafafa}.print-status-ok{color:#2e9b4f;font-weight:600}.print-status-bad{color:#dc2626;font-weight:600}.print-note{font-size:10.5px;color:#666;font-style:italic;padding:0 2px}.print-footer-fixed{display:none}@media print{.app-shell{display:none!important}.print-report{display:block!important;font-family:var(--font-ui),Arial,sans-serif;color:#111;padding-bottom:24px}.print-footer-fixed{display:block;position:fixed;bottom:0;left:0;right:0;padding:6px 14px;font-size:9px;color:#888;text-align:center;border-top:1px solid #ddd;background:#fff}@page{margin:12mm 10mm 16mm}}.report-exceedance-banner{display:flex;gap:12px;border:1px solid rgba(220,38,38,.3);background:var(--danger-soft);color:var(--danger);border-radius:var(--radius-md);padding:14px 18px;margin-bottom:18px;font-size:13px}.report-exceedance-banner strong{font-weight:700}.form-grid-4{grid-template-columns:repeat(4,1fr)}@media (max-width: 1000px){.form-grid-4{grid-template-columns:repeat(2,1fr)}}@media (max-width: 560px){.form-grid-4{grid-template-columns:1fr}}.radio-group-row{display:flex;gap:48px;flex-wrap:wrap}.radio-row{display:flex;gap:18px;margin-top:8px}.radio-option{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;cursor:pointer}.radio-option input{accent-color:var(--brand);width:15px;height:15px}.schedule-fields-row{display:flex;gap:20px;flex-wrap:wrap;margin-top:18px;padding-top:16px;border-top:1px dashed var(--border)}.schedule-fields-row .form-field{min-width:170px}.calibration-action-row{display:flex;align-items:flex-start;gap:24px;flex-wrap:wrap}
