@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/noto-sans-thai-400.woff2)format("woff2");unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/noto-sans-thai-600.woff2)format("woff2");unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/noto-sans-thai-700.woff2)format("woff2");unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}:root{--bg:#faf8f5;--panel:#fff;--surface:#f1eeea;--panel-hi:#e8e4df;--line:#83888a;--line-soft:#e3e0dd;--line-strong:#64696a;--text:#423d38;--muted:#726961;--dim:#726961;--ok:#016630;--ok-dim:#2f8f52;--uncertain:#874b00;--over:#a03c00;--bad:#ba1a1a;--dead:#676c6c;--info:#1447e6;--primary:#ff6b00;--primary-strong:#f97015;--primary-warm:#ffb74d;--on-banner:#fff;--primary-btn:#c2410c;--primary-btn-hover:#9a3412;--on-primary-btn:#fff;--on-primary:#2b2622;--panel-solid:#fff;--track:#423d3814;--shell:#2f2a26;--on-shell:#fff;--on-shell-muted:#ffffffad;--shell-line:#ffffff1a;--card-shadow:0 1px 0 #423d380d, 0 10px 24px -18px #423d3859;--lift-shadow:0 2px 0 #423d380f, 0 24px 48px -24px #423d3873;--focus-ring:0 0 0 2px var(--bg), 0 0 0 4px var(--primary);--r-xs:2px;--r-sm:3px;--r-md:4px;--r-card:3px;--r-pill:9999px;--mono:ui-monospace, "DejaVu Sans Mono", "JetBrains Mono", "Cascadia Mono", monospace;--sans:"Segoe UI", system-ui, -apple-system, "Noto Sans Thai", "Noto Sans", sans-serif;--shell-h:64px;--detail-w:clamp(420px, 38vw, 620px);--card-min:20rem}:root[data-theme=dark]{--bg:#33302c;--card-shadow:0 1px 0 #00000040, 0 10px 24px -18px #000000b3;--lift-shadow:0 2px 0 #0000004d, 0 24px 48px -24px #000c;--panel:#ffffff0a;--surface:#413830;--panel-hi:#ffffff12;--panel-solid:#413830;--line:#fff6;--line-soft:#ffffff14;--line-strong:#ffffff80;--text:#fafaf9;--muted:#b9b3ac;--dim:#b9b3ac;--ok:#00ffc2;--ok-dim:#00e1ab;--uncertain:#ffba20;--over:#ff9d3d;--bad:#ffb4ab;--dead:#aba39a;--info:#a2c9ff;--primary:#fe6e00;--primary-strong:#ff8933;--primary-warm:#ffb74d;--on-banner:#2b2622;--primary-btn:#fe6e00;--primary-btn-hover:#ff8933;--on-primary-btn:#2b2622;--track:#ffffff1a}*{box-sizing:border-box}body{color:var(--text);font-family:var(--sans);background:var(--bg);-webkit-font-smoothing:antialiased;margin:0}body,.card,.card-rail,.dev,.gdot,.detail,.d-cfg,.d-hero,.d-timeline,.conf-track,.tag,.v-num,.v-text,.d-value-num,.d-icon-btn,.theme-toggle button{transition:background-color .2s,color .2s,border-color .2s}@media (prefers-reduced-motion:reduce){body,.card,.card-rail,.dev,.gdot,.detail,.d-cfg,.d-hero,.d-timeline,.conf-track,.tag,.v-num,.v-text,.d-value-num,.d-icon-btn,.theme-toggle button{transition:none}}.liquid-bg{z-index:-1;background:var(--bg);position:fixed;inset:0}.blob{display:none}.shell{z-index:20;background:var(--shell);color:var(--on-shell);border-bottom:1px solid var(--shell-line);position:sticky;top:0}.shell-inner{max-width:1560px;height:var(--shell-h);justify-content:space-between;align-items:center;gap:16px;margin:0 auto;padding:0 32px;display:flex}.brand{align-items:center;gap:12px;min-width:0;display:flex}.brand-logo{width:auto;height:40px;display:block}@media (width<=720px){.brand-logo{height:30px}}.brand-name{letter-spacing:.16em;font-size:.938rem;font-weight:700}.shell-right{flex:none;align-items:center;gap:10px;display:flex}.pages{border-radius:var(--r-sm);background:#ffffff14;gap:2px;margin-left:28px;padding:2px;display:flex}.pages button{color:var(--on-shell-muted);font:inherit;border-radius:var(--r-xs);cursor:pointer;background:0 0;border:0;padding:6px 14px;font-size:.812rem;font-weight:600;transition:background .12s,color .12s}.pages button:hover{color:var(--on-shell)}.pages button.on{background:var(--primary);color:var(--on-primary)}@media (width<=720px){.pages{margin-left:12px}.pages button{padding:6px 10px}}.user-chip{border-radius:var(--r-sm);color:var(--on-shell);background:#ffffff14;align-items:center;gap:8px;padding:4px 4px 4px 12px;font-size:.781rem;display:flex}.user-name{font-weight:600}.user-role{color:var(--on-shell-muted)}.user-logout{font:inherit;color:var(--on-shell-muted);border-radius:var(--r-xs);cursor:pointer;background:0 0;border:0;padding:4px 8px}.user-logout:hover{color:var(--on-shell);background:#ffffff14}.user-logout:focus-visible{outline:2px solid var(--primary);outline-offset:1px}@media (width<=720px){.user-role{display:none}}.login-page{background:var(--bg);grid-template-columns:minmax(0,2fr) minmax(0,3fr);min-height:100vh;display:grid}.login-side{background:var(--shell);color:var(--on-shell);border-right:3px solid var(--primary);flex-direction:column;justify-content:center;gap:20px;padding:clamp(32px,6vw,88px);display:flex}.login-logo{width:min(100%,24rem);height:auto;display:block}.login-main{place-items:center;padding:40px 24px;display:grid}.login{width:min(100%, var(--login-w,22rem));flex-direction:column;gap:18px;display:flex}.login-title{color:var(--text);margin:0 0 6px;font-size:1.75rem;font-weight:700}.login-notice{color:var(--uncertain);margin:0;font-size:.875rem}.login>label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);flex-direction:column;gap:6px;font-size:.656rem;font-weight:700;display:flex}.login input{font:inherit;letter-spacing:0;text-transform:none;border-radius:var(--r-md);border:1px solid var(--line);background:var(--panel-solid);color:var(--text);padding:11px 12px;font-size:1rem}.login input:focus{outline:2px solid var(--primary);outline-offset:-1px;border-color:#0000}.login-err{color:var(--bad);margin:0;font-size:.875rem}.login-submit{justify-content:center;margin-top:4px;padding-block:12px;font-size:.938rem}@media (width<=720px){.login-page{grid-template-rows:auto 1fr;grid-template-columns:1fr}.login-side{border-right:0;border-bottom:3px solid var(--primary);flex-direction:row;justify-content:flex-start;align-items:center;gap:12px;padding:16px 20px}.login-logo{width:auto;height:36px}.login-main{place-items:start center;padding-top:48px}}.conn{border-radius:var(--r-sm);color:var(--on-shell-muted);background:#ffffff14;align-items:center;gap:8px;padding:6px 12px;font-size:.781rem;font-weight:600;display:flex}.conn-dot{background:currentColor;border-radius:50%;flex:none;width:7px;height:7px}.conn-live{color:#4ade80}.conn-connecting{color:#fcd34d}.conn-lost{color:#fca5a5;background:#fb2c3629}.conn-lost .conn-dot{animation:1.1s steps(2,end) infinite blink}@media (width<=600px){.shell-inner{gap:8px;padding:0 16px}.brand-logo{height:26px}.shell-right{gap:6px}.conn{gap:0;padding:9px;font-size:0}.conn-dot{width:9px;height:9px}.user-chip{gap:0;padding-left:4px}.user-name{font-size:0}}@keyframes blink{50%{opacity:.2}}.theme-toggle{border-radius:var(--r-sm);background:#ffffff14;gap:2px;padding:2px;display:flex}.theme-toggle button{color:var(--on-shell-muted);border-radius:var(--r-xs);cursor:pointer;background:0 0;border:0;place-items:center;padding:5px 9px;transition:background .12s,color .12s;display:grid}.theme-toggle button:hover{color:var(--on-shell)}.theme-toggle button.on{background:var(--primary);color:var(--on-primary)}.app{max-width:1560px;margin:0 auto;padding:32px}.page-head{justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:28px;display:flex}.page-head h1{letter-spacing:-.02em;margin:0;font-size:1.75rem;font-weight:700}.page-sub{color:var(--muted);margin:6px 0 0;font-size:.875rem}.page-stats{flex:none;align-items:flex-end;gap:28px;display:flex}.page-stat{text-align:right;flex:none}.page-stat-alarm .page-stat-num,.page-stat-alarm .page-stat-label{color:var(--bad)}.page-stat-num{font-family:var(--mono);letter-spacing:-.02em;font-size:1.875rem;font-weight:600}.page-stat-of{color:var(--muted);font-size:1.188rem}.page-stat-label{letter-spacing:.08em;color:var(--muted);margin-top:2px;font-size:.656rem;font-weight:600;display:block}.err{border-radius:var(--r-card);background:color-mix(in srgb, var(--bad) 6%, transparent);border:1px solid color-mix(in srgb, var(--bad) 35%, transparent);color:var(--bad);align-items:center;gap:12px;margin:14px 0;padding:12px 16px;animation:.15s ease-out fadein;display:flex}@keyframes fadein{0%{opacity:0}}@media (prefers-reduced-motion:reduce){.err{animation:none}}.empty{color:var(--muted)}.dev{background:var(--surface);border-radius:var(--r-card);border-top:2px solid var(--dead);padding:18px 20px}.dev.dev-add{border:1px dashed var(--line);color:var(--muted);font:inherit;cursor:pointer;text-align:left;background:0 0;border-top-width:1px;font-size:.938rem}.dev.dev-add:hover{color:var(--text);border-color:var(--text)}.dev.dev-form{border-top-color:var(--primary);flex-direction:column;grid-column:span 2;gap:8px;animation:.15s ease-out fadeslide;display:flex}@media (width<=599px){.dev.dev-form{grid-column:1/-1}}@media (prefers-reduced-motion:reduce){.dev.dev-form{animation:none}}.dev-form-head{align-items:baseline;gap:10px;margin-bottom:4px;font-size:.938rem;font-weight:600;display:flex}.dev-form label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);flex-direction:column;gap:4px;font-size:.656rem;font-weight:700;display:flex}.dev-form input,.dev-form select{font:inherit;letter-spacing:0;text-transform:none;border-radius:var(--r-md);border:1px solid var(--line);background:var(--panel);color:var(--text);min-width:0;padding:7px 10px;font-size:.875rem;font-weight:400}.dev-form input:focus,.dev-form select:focus{outline:2px solid var(--primary);outline-offset:-1px;border-color:#0000}.dev-form-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.dev-form .d-cfg-actions{margin-top:6px}.dev-form-err{color:var(--bad);margin:0;font-size:.812rem}.dev-form-note{color:var(--uncertain);margin:0;font-size:.812rem}.d-cfg select{font:inherit;letter-spacing:0;text-transform:none;border-radius:var(--r-md);border:1px solid var(--line);background:var(--panel);color:var(--text);padding:9px 11px;font-size:.938rem;font-weight:400}.d-cfg select:focus{outline:2px solid var(--primary);outline-offset:-1px;border-color:#0000}.d-cfg select:disabled{opacity:.7}.groups{flex-direction:column;gap:36px;display:flex}.group{min-width:0}.pack{grid-template-columns:repeat(auto-fill, minmax(min(100%, var(--card-min)), 1fr));gap:36px 16px;display:grid}.ghead{flex-wrap:wrap;align-items:center;gap:8px 12px;min-height:34px;margin:0 0 14px;display:flex}.ghead .sp{flex:1}.gname{font:inherit;letter-spacing:-.01em;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;border-bottom:1px dashed #0000;padding:0;font-size:1.188rem;font-weight:700;transition:border-color .15s}.gname:hover{border-bottom-color:var(--line)}.gname-static,.gname-static:hover{cursor:default;border-bottom-color:#0000}.gname:focus-visible{outline:2px solid var(--primary);outline-offset:3px;border-radius:var(--r-xs)}.grename{flex:auto;align-items:center;gap:8px;min-width:0;display:flex}.grename .btn{flex:none}.grename input{font:inherit;border-radius:var(--r-md);border:1px solid var(--line);background:var(--panel);width:0;min-width:0;max-width:20rem;color:var(--text);flex:auto;padding:6px 10px;font-size:1rem}.grename input:focus{outline:2px solid var(--primary);outline-offset:-1px;border-color:#0000}.gstat{white-space:nowrap;align-items:center;gap:8px;font-size:.781rem;font-weight:600;display:inline-flex}.gdot{background:var(--ok);width:10px;height:10px;box-shadow:0 0 0 3px color-mix(in srgb, var(--ok) 18%, transparent);border-radius:50%;flex:none}.gstat-quiet{color:var(--uncertain)}.gstat-quiet .gdot{background:var(--uncertain);box-shadow:0 0 0 3px color-mix(in srgb, var(--uncertain) 20%, transparent)}.gstat-offline{color:var(--bad)}.gstat-offline .gdot{background:var(--bad);box-shadow:0 0 0 3px color-mix(in srgb, var(--bad) 18%, transparent)}.gconfirm{align-items:center;gap:6px;display:inline-flex}.gask,.gerr{color:var(--bad);text-align:right;margin:-8px 0 12px;font-size:.781rem}.gerr{text-align:left}.gempty{border:1px dashed var(--line);border-radius:var(--r-card);color:var(--muted);flex-wrap:wrap;align-items:center;gap:10px 16px;padding:22px 20px;font-size:.875rem;display:flex}.gempty p{flex:240px;margin:0}.gpanel{margin:0 0 16px}.gpanel-form{max-width:35rem}.group-id{color:var(--muted);font-size:.75rem;font-family:var(--mono);font-weight:400}.grid{grid-template-columns:repeat(auto-fill, minmax(min(100%, var(--card-min)), 1fr));gap:16px;display:grid}.card{background:var(--surface);border-radius:var(--r-card);position:relative;overflow:hidden}.card-rail{background:var(--ok);height:2px;position:absolute;inset:0 0 auto}.card-uncertain .card-rail{background:var(--uncertain)}.card-over .card-rail{background:var(--over)}.card-unreadable .card-rail{background:var(--bad)}.card-alarm .card-rail{background:var(--bad);height:4px}.card-offline .card-rail,.card-stale .card-rail{background:var(--dead)}.card-never .card-rail{background:var(--line)}.card-unconfigured .card-rail{background:var(--info)}.card-inner{flex-direction:column;gap:14px;padding:18px 20px 16px;display:flex}.card-head{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.card-head-text{min-width:0}.card-head h2{letter-spacing:-.005em;margin:0;font-size:1rem;font-weight:700;line-height:1.3}.card-id{color:var(--muted);font-size:.688rem;font-family:var(--mono);margin-top:3px;display:block}.tag{letter-spacing:.05em;text-transform:uppercase;border-radius:var(--r-pill);white-space:nowrap;flex:none;padding:4px 9px;font-size:.656rem;font-weight:700}.tag-alarm{background:var(--bad);color:var(--on-banner)}.tag-unreadable{background:color-mix(in srgb, var(--bad) 13%, transparent);color:var(--bad)}.tag-over{background:color-mix(in srgb, var(--over) 13%, transparent);color:var(--over)}.tag-uncertain{background:color-mix(in srgb, var(--uncertain) 15%, transparent);color:var(--uncertain)}.tag-offline,.tag-stale{background:var(--panel-hi);color:var(--muted)}.tag-new,.tag-unconfigured{background:color-mix(in srgb, var(--info) 12%, transparent);color:var(--info)}.card-body{justify-content:space-between;align-items:center;gap:14px;display:flex}.card-value{align-items:baseline;gap:6px;min-width:0;display:flex}.v-num{font-family:var(--mono);letter-spacing:-.02em;font-size:2.5rem;font-weight:600;line-height:1}.v-unit{font-family:var(--mono);color:var(--muted);font-size:.938rem}.v-text{font-family:var(--mono);word-break:break-word;font-size:1.625rem;font-weight:600;line-height:1.1}.v-unreadable{color:var(--uncertain);font-size:1.25rem;font-weight:700}.v-none{color:var(--dim);font-size:1rem}.card-stale .v-num,.card-offline .v-num,.card-never .v-num,.card-stale .v-text,.card-offline .v-text{color:var(--dead)}.card-uncertain .v-num{color:var(--uncertain)}.card-over .v-num{color:var(--over)}.card-alarm .v-num,.card-alarm .v-text{color:var(--bad)}.rowvals{flex:1;grid-template-columns:auto minmax(0,1fr);align-items:baseline;gap:.375rem 1rem;min-width:0;margin:0;display:grid}.rowvals dt{color:var(--muted);align-items:center;gap:5px;font-size:.812rem;display:inline-flex}.rowvals dd{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;margin:0;font-size:1.375rem;font-weight:600}.rowvals dt.is-alarm{color:var(--bad);font-weight:600}.rowvals dd.is-alarm{color:var(--bad)}.rowvals dd.is-empty{color:var(--muted);font-weight:400}.rowvals-lg dd{font-size:1.75rem}.rowvals-thr{font-family:var(--sans);color:var(--muted);font-size:.688rem;font-weight:400;display:block}.card-value:has(>.rowvals){flex:1}.card-stale .rowvals dd,.card-offline .rowvals dd,.card-stale .rowvals dt.is-alarm,.card-offline .rowvals dt.is-alarm{color:var(--dead)}.d-nochart{border:1px dashed var(--line-soft);border-radius:var(--r-md);color:var(--muted);text-align:center;margin:20px 0 0;padding:12px;font-size:.812rem}.card-thumb{object-fit:cover;border-radius:var(--r-sm);background:var(--panel-hi);flex:none;width:64px;height:64px}.conf{margin-top:2px}.conf-row{justify-content:space-between;align-items:baseline;margin-bottom:6px;display:flex}.conf-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-size:.656rem;font-weight:700}.conf-pct{font-family:var(--mono);font-size:.812rem;font-weight:600}.conf-track{border-radius:var(--r-pill);background:var(--track);height:4px;overflow:hidden}.conf-fill{border-radius:var(--r-pill);height:100%;transition:width .3s,background-color .2s;display:block}@media (prefers-reduced-motion:reduce){.conf-fill{transition:background-color .2s}}.card-foot{border-top:1px solid var(--line-soft);font-size:.75rem;font-family:var(--mono);color:var(--muted);justify-content:space-between;align-items:baseline;gap:10px;padding-top:12px;display:flex}.card-range{color:var(--dim)}@media (width>=1600px){.v-num{font-size:2.875rem}:root{--card-min:21.25rem}}.app-detail{padding-right:calc(var(--detail-w) + 20px)}@media (width<=1200px){.app-detail{padding-right:28px}}.card-clickable{cursor:pointer;transition:background .12s,box-shadow .12s}.card-clickable:hover{background:var(--panel-hi)}.card-clickable:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.card-selected{box-shadow:inset 0 0 0 2px var(--primary)}.detail{top:var(--shell-h);width:var(--detail-w);z-index:10;background:var(--bg);border-left:1px solid var(--line-soft);max-width:100vw;padding:24px 28px 32px;animation:.18s ease-out slidein;position:fixed;bottom:0;right:0;overflow-y:auto;box-shadow:-12px 0 32px #00000012;container:detail/inline-size}:root[data-theme=dark] .detail{box-shadow:-12px 0 32px #00000047}@keyframes slidein{0%{opacity:0;transform:translate(24px)}}@media (prefers-reduced-motion:reduce){.detail{animation:none}}.d-head{border-bottom:1px solid var(--line-soft);justify-content:space-between;align-items:flex-start;gap:16px;padding-bottom:20px;display:flex}.d-head-title{min-width:0}.d-head h2{letter-spacing:-.015em;margin:0;font-size:1.625rem;font-weight:700;line-height:1.2}.d-id{color:var(--muted);flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px;font-size:.812rem;display:flex}.d-id-mono{font-family:var(--mono)}.d-id-sep{color:var(--line-strong)}.d-unconfigured{color:var(--info);border-radius:var(--r-pill);background:color-mix(in srgb, var(--info) 10%, transparent);padding:2px 8px;font-size:.75rem;font-weight:600}.d-actions{flex:none;align-items:center;gap:4px;display:flex}.d-icon-btn{color:var(--muted);border-radius:var(--r-md);cursor:pointer;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;width:34px;height:34px;font-size:1rem;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.d-icon-btn:hover{background:var(--panel-hi);color:var(--text)}.d-icon-btn[aria-expanded=true]{background:color-mix(in srgb, var(--primary) 12%, transparent);color:var(--primary-strong);border-color:color-mix(in srgb, var(--primary) 30%, transparent)}.d-cfg{border-radius:var(--r-card);background:var(--surface);flex-direction:column;gap:12px;margin:20px 0;padding:20px;animation:.15s ease-out fadeslide;display:flex}@keyframes fadeslide{0%{opacity:0;transform:translateY(-6px)}}@media (prefers-reduced-motion:reduce){.d-cfg{animation:none}}.d-cfg label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);flex-direction:column;gap:5px;font-size:.656rem;font-weight:700;display:flex}.d-cfg input{width:100%;min-width:0;font:inherit;letter-spacing:0;text-transform:none;border-radius:var(--r-md);border:1px solid var(--line);background:var(--panel);color:var(--text);padding:9px 11px;font-size:.938rem;font-weight:400}.d-cfg input:focus{outline:2px solid var(--primary);outline-offset:-1px;border-color:#0000}.d-cfg-scale{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.d-cfg-group{border:0;border-top:1px solid var(--line-soft);min-width:0;margin:4px 0 0;padding:12px 0 0}.d-cfg-group legend{color:var(--text);padding:0 0 8px;font-size:.875rem;font-weight:600}.d-rows{border-top:1px solid var(--line-soft);flex-direction:column;gap:.625rem;min-width:0;margin-top:4px;padding-top:12px;display:flex}.d-rows-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.d-rows-head h3{color:var(--text);margin:0;font-size:.875rem;font-weight:600}.d-rows-count{color:var(--muted);align-items:center;gap:8px;font-size:.812rem;display:inline-flex}.d-stepper{border-radius:var(--r-md);background:var(--panel);grid-template-columns:40px 2rem 40px;align-items:center;display:inline-grid}.d-stepper button{border-radius:var(--r-md);min-height:40px;color:var(--text);font:inherit;cursor:pointer;background:0 0;border:0;font-size:1rem}.d-stepper button:hover:not(:disabled){background:var(--panel-hi)}.d-stepper button:disabled{color:var(--muted);opacity:.4;cursor:default}.d-stepper button:focus-visible{box-shadow:var(--focus-ring);outline:none}.d-stepper output{text-align:center;font-family:var(--mono);font-size:.938rem;font-weight:600}.d-rows-list{background:var(--panel);border-radius:var(--r-md);min-width:0;box-shadow:0 1px #423d380f}.d-row+.d-row{border-top:1px solid var(--line-soft)}.d-row-sum{width:100%;min-height:52px;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;grid-template-columns:1.25rem minmax(0,1fr) auto 1rem;align-items:center;gap:12px;padding:0 14px;display:grid}.d-row-sum:hover{background:var(--panel-hi)}.d-row-sum:focus-visible{box-shadow:inset 0 0 0 2px var(--primary);outline:none}.d-row-num{font-family:var(--mono);color:var(--muted);font-size:.75rem}.d-row-name{text-overflow:ellipsis;white-space:nowrap;font-size:1rem;font-weight:600;overflow:hidden}.d-row-name.unset{color:var(--muted);font-weight:400}.d-row-meta{flex-direction:column;align-items:flex-end;gap:1px;display:flex}.d-row-val{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:1rem;font-weight:600}.d-row-rng{color:var(--muted);white-space:nowrap;font-size:.688rem}.d-row-chev{color:var(--muted);transition:transform .15s}.d-row.open .d-row-chev{transform:rotate(180deg)}@media (prefers-reduced-motion:reduce){.d-row-chev{transition:none}}.d-row-edit{grid-template-columns:5rem minmax(0,1fr);align-items:center;gap:12px 14px;padding:4px 14px 16px 46px;display:grid}.d-row-solo{padding:14px}.d-row-edit>span{color:var(--muted);font-size:.812rem}.d-range{color:var(--muted);flex-wrap:wrap;align-items:center;gap:8px;display:flex}.d-cfg .d-range input{width:6.5rem;font-family:var(--mono);flex:none}.d-range small{font-size:.75rem}@container detail (width<=26rem){.d-row-edit{grid-template-columns:minmax(0,1fr);gap:6px;padding-left:14px}.d-row-edit>span:not(:first-child){margin-top:6px}}.d-segbar{flex-wrap:wrap;gap:4px;display:flex}.d-segbar button{border-radius:var(--r-sm);min-height:40px;color:var(--muted);font:inherit;font-family:var(--mono);cursor:pointer;background:0 0;border:0;padding:0 10px;font-size:.938rem;box-shadow:inset 0 -2px #0000}.d-segbar button:hover:not(.on){background:var(--panel-hi);color:var(--text)}.d-segbar button.on{background:var(--panel-hi);color:var(--text);box-shadow:inset 0 -2px 0 var(--primary);font-weight:700}.d-segbar button:focus-visible{box-shadow:var(--focus-ring);outline:none}.d-cfg-actions{gap:8px;margin-top:4px;display:flex}.d-cfg-delete{border-top:1px solid var(--line-soft);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-top:8px;padding-top:12px;display:flex}.d-cfg-ask{color:var(--bad);flex:12rem;margin:0;font-size:.812rem}.d-calib-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.d-calib-stage{display:flex}.d-calib-imgwrap{align-self:flex-start;max-width:100%;display:inline-block;position:relative}.d-calib-img{border-radius:var(--r-md);cursor:crosshair;outline:1px dashed var(--line);outline-offset:-1px;max-width:100%;transition:outline-color .15s;display:block}.d-calib-img:hover{outline-color:var(--primary)}.d-calib-cue{color:#fff;border-radius:var(--r-pill);pointer-events:none;white-space:nowrap;background:#0000009e;padding:7px 12px;font-size:.781rem;font-weight:600;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.d-calib-dot{background:var(--primary);color:#fff;pointer-events:none;border-radius:50%;place-items:center;width:22px;height:22px;margin-top:-11px;margin-left:-11px;font-size:.75rem;font-weight:700;animation:.15s ease-out dot-pop;display:grid;position:absolute;box-shadow:0 0 0 2px #ffffffd9}@keyframes dot-pop{0%{opacity:0;transform:scale(.4)}}@media (prefers-reduced-motion:reduce){.d-calib-dot{animation:none}}.d-calib-list{flex-direction:column;gap:8px;display:flex}.d-calib-item{align-items:center;gap:10px;display:flex}.d-calib-num{background:var(--primary);color:#fff;cursor:help;border-radius:50%;flex:none;place-items:center;width:22px;height:22px;font-size:.75rem;font-weight:700;display:grid}.d-calib-field{flex:1;align-items:center;min-width:0;display:flex;position:relative}.d-calib-field input{width:100%;font:inherit;border-radius:var(--r-md);border:1px solid var(--line);background:var(--panel);color:var(--text);min-width:0;padding:8px 10px;font-size:.875rem}.d-calib-field input:focus{outline:2px solid var(--primary);outline-offset:-1px;border-color:#0000}.d-calib-field input::placeholder{color:var(--dim)}.d-calib-unit{font-family:var(--mono);color:var(--muted);pointer-events:none;font-size:.75rem;position:absolute;right:10px}.d-calib-rm{color:var(--dim);border-radius:var(--r-md);cursor:pointer;background:0 0;border:0;flex:none;place-items:center;width:28px;height:28px;transition:background-color .15s,color .15s;display:grid}.d-calib-rm:hover{color:var(--bad);background:color-mix(in srgb, var(--bad) 10%, transparent)}.d-hero{background:var(--surface);border-radius:var(--r-card);grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:20px;margin:20px 0;padding:20px;display:grid}.d-hero-value{flex-direction:column;gap:12px;min-width:0;display:flex}.d-value-wrap{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.d-value-num{font-family:var(--mono);letter-spacing:-.02em;color:var(--text);font-size:4rem;font-weight:600;line-height:1}.d-value-unit{font-family:var(--mono);color:var(--muted);font-size:1.375rem}.d-value-text{font-family:var(--mono);word-break:break-word;font-size:2.75rem;font-weight:600;line-height:1.1}.d-value-none{color:var(--dim);font-size:1.375rem}.v-unreadable-big{color:var(--uncertain);font-size:2rem;font-weight:700}.d-need-calib{flex-direction:column;align-items:flex-start;gap:10px;display:flex}.d-hero-meta{color:var(--muted);flex-wrap:wrap;gap:12px;font-size:.938rem;display:flex}.d-hero-meta>span{align-items:center;display:inline-flex}.d-hero-meta>span+span:before{content:"·";color:var(--line-strong);margin-right:12px}.d-meta-warn{color:var(--bad);font-weight:600}.d-hero-image{position:relative}.d-hero-actions{align-items:center;gap:8px;margin-top:8px;display:flex}.d-hero-err{color:var(--bad);font-size:.812rem}.d-hero-live img,.d-hero-live video{object-fit:contain;max-height:360px}.lightbox{z-index:100;cursor:zoom-out;background:#0a0806f0;place-items:center;animation:.12s ease-out fadein;display:grid;position:fixed;inset:0}@media (prefers-reduced-motion:reduce){.lightbox{animation:none}}.lightbox img,.lightbox video{object-fit:contain;border-radius:var(--r-md);background:#000;max-width:96vw;max-height:90vh}.lightbox-cap{text-align:center;color:#ffffffb8;font-size:.875rem;position:absolute;bottom:18px;left:0;right:0}.lightbox-frame{cursor:default;line-height:0;position:relative}.probe{pointer-events:none;position:absolute;transform:translate(-50%,-50%)}.probe-dot{border-radius:var(--r-pill);border:2px solid #fff;width:14px;height:14px;display:block;box-shadow:0 0 0 2px #0009}.probe-label{white-space:nowrap;border-radius:var(--r-sm);color:#fff;font:600 .938rem/1.2 var(--mono);background:#0a0806e0;padding:5px 8px;position:absolute;bottom:18px;left:50%;transform:translate(-50%)}.probe-below .probe-label{top:18px;bottom:auto}.d-hotcold{color:var(--muted);margin-top:8px;font-size:.812rem}.d-hotcold b{color:var(--text);font-family:var(--mono);font-weight:600}.d-hero-image img,.d-hero-image video{object-fit:cover;border-radius:var(--r-md);background:var(--panel-hi);width:100%;max-height:170px;display:block}.d-hero-zoom{border-radius:var(--r-md);width:100%;font:inherit;cursor:zoom-in;background:0 0;border:0;padding:0;display:block;position:relative}.d-hero-zoom:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.d-hero-zoom-hint{border-radius:var(--r-sm);color:#fff;opacity:0;pointer-events:none;background:#0a0806b8;align-items:center;gap:.25rem;padding:.3125rem .5rem;font-size:.75rem;font-weight:600;line-height:1;transition:opacity .15s;display:inline-flex;position:absolute;bottom:.5rem;right:.5rem}.d-hero-zoom:hover .d-hero-zoom-hint,.d-hero-zoom:focus-visible .d-hero-zoom-hint{opacity:1}@media (hover:none){.d-hero-zoom-hint{opacity:.85}}@media (prefers-reduced-motion:reduce){.d-hero-zoom-hint{transition:none}}.d-hero-nopic{aspect-ratio:16/10;border:1px dashed var(--line);border-radius:var(--r-md);color:var(--dim);justify-content:center;align-items:center;font-size:.875rem;display:flex}@container detail (width<=560px){.d-hero{grid-template-columns:1fr}}.d-timeline{background:var(--surface);border-radius:var(--r-card);margin:20px 0;padding:4px 20px 16px}.d-tabs{border-bottom:1px solid var(--track);flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:12px;display:flex}.d-tab{white-space:nowrap;font:inherit;color:var(--muted);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;flex:none;margin-bottom:-1px;padding:8px 12px;font-size:.875rem;transition:color .15s,border-bottom-color .15s}.d-tab:hover{color:var(--text)}.d-tab-on{color:var(--primary-strong);border-bottom-color:var(--primary);font-weight:600}.d-tab-summary{color:var(--muted);margin-left:auto;padding-right:4px;font-size:.812rem}.q-ok-text{color:var(--ok);font-weight:700}.q-unc-text{color:var(--uncertain);font-weight:700}.q-bad-text{color:var(--bad);font-weight:700}.d-meta{border-top:1px solid var(--line-soft);color:var(--muted);font-size:.75rem;font-family:var(--mono);flex-wrap:wrap;align-items:baseline;gap:10px 20px;margin-top:20px;padding-top:16px;display:flex}.d-meta b{color:var(--text);font-weight:600}.d-meta-auto{color:var(--dim);margin-left:auto}.hc{width:100%;height:150px;display:block}.hc-grid{stroke:var(--track)}.hc-axis{fill:var(--dim);font-size:.562rem;font-family:var(--mono)}.hc-line{fill:none;stroke:var(--ok-dim);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.hc-band{stroke:none}.hc-band-top{stop-color:var(--ok-dim);stop-opacity:.22}.hc-band-bottom{stop-color:var(--ok-dim);stop-opacity:0}.hc-unreadable{fill:var(--uncertain)}.hc-empty{height:150px;color:var(--dim);justify-content:center;align-items:center;font-size:.812rem;display:flex}.hc-empty-text{text-align:center;flex-direction:column;gap:4px}.hc-empty-text strong{font-family:var(--mono);color:var(--text);font-size:1.375rem;font-weight:700}.hc-empty-sub{font-size:.719rem}.d-err{border-radius:var(--r-md);background:color-mix(in srgb, var(--bad) 8%, transparent);color:var(--bad);margin:8px 0;padding:10px 12px;font-size:.812rem}.d-snap{border:1px dashed var(--line);border-radius:var(--r-md);text-align:center;color:var(--dim);padding:14px;font-size:.812rem}.toasts{z-index:60;pointer-events:none;flex-direction:column;gap:10px;width:min(380px,100vw - 40px);display:flex;position:fixed;bottom:20px;right:20px}.toast{pointer-events:auto;border-radius:var(--r-card);background:var(--panel-solid);color:var(--text);text-align:left;font:inherit;cursor:pointer;box-shadow:inset 4px 0 0 var(--bad);border:0;align-items:flex-start;gap:12px;padding:13px 15px;animation:.22s ease-out toast-in;display:flex}.toast-ok{box-shadow:inset 4px 0 0 var(--ok)}.toast:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.toast-icon{color:var(--bad);flex:none;margin-top:1px}.toast-ok .toast-icon{color:var(--ok)}.toast-body{flex-direction:column;gap:2px;min-width:0;display:flex}.toast-kicker{letter-spacing:.08em;text-transform:uppercase;color:var(--bad);font-size:.656rem;font-weight:700}.toast-ok .toast-kicker{color:var(--ok)}.toast-title{overflow-wrap:anywhere;font-size:1rem;font-weight:700;line-height:1.3}.toast-meta{color:var(--muted);font-size:.812rem;line-height:1.5}.toast-meta b{font-family:var(--mono);color:var(--text);font-weight:600}@keyframes toast-in{0%{opacity:0;transform:translate(24px)}}@media (prefers-reduced-motion:reduce){.toast{animation:none}}.btn{font:inherit;border-radius:var(--r-md);color:var(--text);cursor:pointer;background:0 0;border:1px solid #0000;align-items:center;gap:7px;padding:8px 14px;font-size:.844rem;font-weight:600;line-height:1.2;transition:background-color .12s,color .12s,border-color .12s;display:inline-flex}.btn:focus-visible{box-shadow:var(--focus-ring);outline:none}.btn:disabled{opacity:.5;cursor:default}.btn-sm{padding:6px 11px;font-size:.781rem}.btn-primary{background:var(--primary-btn);color:var(--on-primary-btn)}.btn-primary:hover:not(:disabled){background:var(--primary-btn-hover)}.btn-secondary{background:var(--panel);color:var(--text);border-color:var(--line-soft);box-shadow:0 1px #423d380f}.btn-secondary:hover:not(:disabled){background:var(--panel-hi)}.btn-secondary.on{background:var(--primary-btn);color:var(--on-primary-btn);border-color:#0000}.btn-quiet{color:var(--muted);padding-inline:6px;font-weight:500}.btn-quiet:hover:not(:disabled){color:var(--text);text-underline-offset:3px;text-decoration:underline}.btn-danger{color:var(--bad);margin-left:auto;padding-inline:6px}.btn-danger:hover:not(:disabled){background:color-mix(in srgb, var(--bad) 10%, transparent);padding-inline:14px}.btn-danger.solid{background:var(--bad);color:#fff;margin-left:0;padding-inline:14px}.btn-danger.solid:hover:not(:disabled){background:color-mix(in srgb, var(--bad) 85%, #000)}.d-cfg-actions,.d-hero-actions,.d-calib-row{gap:8px}.d-calib-row .btn-quiet{margin-left:auto}.card{box-shadow:var(--card-shadow)}.dev{box-shadow:var(--card-shadow);border-top-width:3px}.dev.dev-add{box-shadow:none;border-top-width:1px}.dev.dev-form,.detail,.toast{box-shadow:var(--lift-shadow)}.d-cfg{box-shadow:var(--card-shadow)}.card-rail{height:3px}.card-alarm{background:color-mix(in srgb, var(--bad) 6%, var(--surface))}.card-alarm .card-rail{height:5px}.v-num,.d-value-num,.page-stat-num,.gstat,.card-foot,.d-hero-meta{font-variant-numeric:tabular-nums}.v-num{font-size:2.75rem;font-weight:700}.d-value-num{font-weight:700}.d-cfg input,.d-cfg select,.dev-form input,.dev-form select,.grename input{border-color:var(--line-soft);box-shadow:inset 0 1px #00000005}.d-cfg input:focus,.d-cfg select:focus,.dev-form input:focus,.dev-form select:focus,.grename input:focus{border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--primary) 22%, transparent);outline:none}.roi-panel{background:var(--surface);border-radius:var(--r-card);border-top:2px solid var(--primary);box-shadow:var(--lift-shadow);flex-direction:column;grid-column:1/-1;gap:14px;min-width:0;padding:18px 20px 20px;animation:.15s ease-out fadeslide;display:flex}@media (prefers-reduced-motion:reduce){.roi-panel{animation:none}}.roi-head{flex-wrap:wrap;align-items:baseline;gap:6px 12px;display:flex}.roi-head .sp{flex:1}.roi-title{font-size:.938rem;font-weight:600}.roi-age{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.781rem}.roi-body{grid-template-columns:minmax(0,1fr) minmax(18.75rem,23.75rem);align-items:start;gap:20px;display:grid}@media (width<=900px){.roi-body{grid-template-columns:minmax(0,1fr)}}.roi-left{min-width:0}.roi-stage{border-radius:var(--r-md);cursor:crosshair;-webkit-user-select:none;user-select:none;touch-action:none;background:#000;line-height:0;position:relative;overflow:hidden}.roi-stage:focus-visible{box-shadow:var(--focus-ring);outline:none}.roi-stage img{pointer-events:none;width:100%;height:auto;display:block}.roi-stage-empty{aspect-ratio:16/9;background:var(--panel-hi);cursor:default;place-items:center;display:grid}.roi-stage-note{color:var(--muted);text-align:center;padding:0 24px;font-size:.844rem;line-height:1.5}.roi-cue{color:#fff;border-radius:var(--r-pill);pointer-events:none;white-space:nowrap;background:#0000009e;padding:7px 12px;font-size:.781rem;font-weight:600;line-height:1.3;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.roi-box{cursor:move;border:2px solid #fff;position:absolute;box-shadow:0 0 0 1px #0000008c,inset 0 0 0 1px #00000059}.roi-box.sel{border-color:var(--primary);z-index:2;box-shadow:0 0 0 1px #0000008c,0 0 0 9999px #00000047}.roi-chip{background:var(--shell);color:var(--on-shell);border-radius:var(--r-xs) var(--r-xs) 0 0;white-space:nowrap;align-items:center;gap:6px;padding:4px 7px;font-size:.719rem;font-weight:600;line-height:1;display:flex;position:absolute;top:-2px;left:-2px;transform:translateY(-100%)}.roi-box.sel .roi-chip{background:var(--primary);color:var(--on-primary)}.roi-box.chip-in .roi-chip{border-radius:0 0 var(--r-xs) 0;transform:none}.roi-chip-num{font-family:var(--mono);font-weight:700}.roi-h{background:var(--primary);border-radius:var(--r-xs);border:2px solid #fff;width:16px;height:16px;position:absolute}.roi-h.nw{cursor:nwse-resize;top:-9px;left:-9px}.roi-h.ne{cursor:nesw-resize;top:-9px;right:-9px}.roi-h.sw{cursor:nesw-resize;bottom:-9px;left:-9px}.roi-h.se{cursor:nwse-resize;bottom:-9px;right:-9px}.roi-stage-foot{color:var(--muted);flex-wrap:wrap;gap:4px 14px;margin-top:8px;font-size:.781rem;display:flex}.roi-list{flex-direction:column;gap:10px;min-width:0;display:flex}.roi-msg{color:var(--muted);margin:0;font-size:.844rem;line-height:1.5}.roi-msg.err{color:var(--bad)}.roi-row{background:var(--panel);border-radius:var(--r-md);border:1px solid #0000;grid-template-columns:26px minmax(0,1fr) auto;gap:8px;padding:12px;display:grid}.roi-row.sel{border-color:var(--primary)}.roi-row-num{background:var(--shell);width:22px;height:22px;color:var(--on-shell);font-family:var(--mono);border-radius:50%;place-items:center;margin-top:5px;font-size:.75rem;font-weight:700;display:grid}.roi-row.sel .roi-row-num{background:var(--primary);color:var(--on-primary)}.roi-row-main{flex-direction:column;gap:8px;min-width:0;display:flex}.roi-row-fields{grid-template-columns:minmax(0,1.3fr) minmax(0,.7fr);gap:8px;display:grid}.roi-fld{letter-spacing:.08em;text-transform:uppercase;min-width:0;color:var(--muted);flex-direction:column;gap:4px;font-size:.656rem;font-weight:700;display:flex}.roi-fld input,.roi-fld select{font:inherit;letter-spacing:0;text-transform:none;border-radius:var(--r-md);border:1px solid var(--line);background:var(--panel);width:100%;min-width:0;color:var(--text);padding:7px 10px;font-size:.875rem;font-weight:400}.roi-fld input:focus,.roi-fld select:focus{outline:2px solid var(--primary);outline-offset:-1px;border-color:#0000}.roi-fld input::placeholder{color:var(--dim)}.roi-fld select:disabled{opacity:.65;cursor:not-allowed}.roi-row-cal{color:var(--muted);flex-wrap:wrap;align-items:center;gap:8px;font-size:.781rem;display:flex}.roi-row-cal .warn{color:var(--uncertain);font-weight:600}.roi-row-id{font-family:var(--mono);color:var(--muted);overflow-wrap:anywhere;font-size:.719rem}.roi-cal{background:var(--panel);border-radius:var(--r-md);flex-direction:column;gap:10px;padding:12px;display:flex}.roi-cal-head{align-items:baseline;gap:8px;font-size:.875rem;font-weight:600;display:flex}.roi-cal-head .btn-quiet{margin-left:auto}.roi-cal-wrap{border-radius:var(--r-md);outline:1px dashed var(--line);outline-offset:-1px;line-height:0;position:relative;overflow:hidden}.roi-cal-wrap:hover{outline-color:var(--primary)}.roi-cal-wrap canvas{cursor:crosshair;width:100%;height:auto;display:block}.roi-cal-cue{color:var(--muted);font-size:.781rem;line-height:1.5}.roi-foot{border-top:1px solid var(--line-soft);flex-wrap:wrap;align-items:center;gap:8px 12px;padding-top:14px;display:flex}.roi-hint{min-width:0;color:var(--muted);flex:280px;font-size:.781rem;line-height:1.5}.roi-foot .roi-msg{flex:1 0 100%}.roi-confirm{flex-wrap:wrap;flex:1 0 100%;align-items:center;gap:8px 10px;display:flex}.roi-confirm-ask{min-width:0;color:var(--bad);flex:280px;font-size:.812rem;line-height:1.5}
