.teco-screen-root{position:relative;width:100%;height:100%;overflow:hidden;background:var(--bg);display:flex;align-items:center;justify-content:center;touch-action:none}.teco-screen-svg{display:block;user-select:none;-webkit-user-select:none;font-family:var(--font)}.teco-screen-svg text{pointer-events:none}.teco-screen-svg .teco-obj:focus{outline:none}.teco-screen-svg .teco-obj:focus-visible>.teco-focus-ring{stroke:var(--focus);stroke-width:2;fill:none}.teco-screen-svg .teco-focus-ring{stroke:none;fill:none;pointer-events:none}.teco-obj.clickable{cursor:pointer}.teco-obj.disabled{opacity:.45;cursor:not-allowed}.teco-obj.disabled *,.teco-obj.design-mode *{pointer-events:none}.teco-obj.design-mode>.teco-hit{pointer-events:all}.teco-bad{pointer-events:none}.teco-pipe-flow{animation:teco-flow .8s linear infinite}.teco-pipe-flow.reverse{animation-direction:reverse}@keyframes teco-flow{to{stroke-dashoffset:-24}}.teco-tooltip-anchor{pointer-events:none}.teco-fo{width:100%;height:100%;display:flex;align-items:stretch;font-family:var(--font);color:var(--text);overflow:hidden}.teco-fo *{box-sizing:border-box}.teco-io{width:100%;height:100%;display:flex;align-items:center;padding:0 6px;border:1px solid #3d4450;border-radius:3px;background:#1b1f24;color:#e6e9ef;font-variant-numeric:tabular-nums;overflow:hidden;white-space:nowrap}.teco-io.input{cursor:text}.teco-io.input:hover{border-color:var(--accent)}.teco-io.input:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.teco-io.invalid{border-color:var(--alarm)}.teco-io input{all:unset;width:100%;height:100%;font:inherit;color:inherit;text-align:inherit}.teco-io .unit{margin-left:4px;opacity:.7}.teco-io.editing{background:#0f1216}.teco-select{width:100%;height:100%;background:#1b1f24;color:#e6e9ef;border:1px solid #3d4450;border-radius:3px;padding:0 6px;font:inherit;cursor:pointer}.teco-select:disabled{opacity:.5;cursor:not-allowed}.teco-iframe{width:100%;height:100%;border:1px solid var(--border);background:#fff}.teco-alarmctl{display:flex;flex-direction:column;width:100%;height:100%;background:#1b1f24;border:1px solid #30363f;border-radius:4px;font-size:13px;color:#e6e9ef}.teco-alarmctl .ac-toolbar{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid #30363f;flex-wrap:wrap}.teco-alarmctl .ac-toolbar .spacer{flex:1}.teco-alarmctl .ac-body{flex:1;min-height:0;overflow:auto}.teco-alarmctl table{width:100%;border-collapse:collapse;table-layout:fixed}.teco-alarmctl th{position:sticky;top:0;background:#262b33;text-align:left;padding:0 8px;height:28px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:#9aa3b2;border-bottom:1px solid #30363f;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.teco-alarmctl td{padding:0 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-bottom:1px solid #262b33}.teco-alarmctl tr.selected td{outline:2px solid var(--accent);outline-offset:-2px}.teco-alarmctl tr{cursor:pointer}.teco-alarmctl .ac-footer{display:flex;align-items:center;gap:8px;padding:4px 8px;border-top:1px solid #30363f;font-size:12px;color:#9aa3b2}.teco-alarmctl .btn{height:26px}.teco-alarmline{display:flex;align-items:center;gap:10px;width:100%;height:100%;padding:0 12px;border-radius:4px;border:1px solid #30363f;background:#262b33;color:#e6e9ef;overflow:hidden;white-space:nowrap;cursor:pointer}.teco-alarmline .msg{flex:1;overflow:hidden;text-overflow:ellipsis;font-weight:600}.teco-alarmline .cnt{display:inline-flex;gap:6px;font-size:.85em}.teco-alarmline .cnt span{padding:1px 6px;border-radius:8px;background:#00000040}.teco-trend{width:100%;height:100%;display:flex;flex-direction:column;background:#1b1f24;border:1px solid #30363f;border-radius:4px;color:#e6e9ef;font-size:12px;overflow:hidden}.teco-trend .tr-toolbar{display:flex;align-items:center;gap:4px;padding:4px 6px;border-bottom:1px solid #30363f;flex-wrap:wrap}.teco-trend .tr-toolbar .spacer{flex:1}.teco-trend .tr-toolbar button{height:22px;padding:0 7px;font-size:11px;border-radius:3px;border:1px solid #3d4450;background:#262b33;color:#e6e9ef;cursor:pointer}.teco-trend .tr-toolbar button.active{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.teco-trend .tr-plot{flex:1;min-height:0;position:relative;cursor:crosshair}.teco-trend .tr-plot svg{display:block;width:100%;height:100%}.teco-trend .tr-legend{display:flex;gap:12px;flex-wrap:wrap;padding:4px 8px;border-top:1px solid #30363f;font-size:11px}.teco-trend .tr-legend .pen{display:inline-flex;align-items:center;gap:5px;cursor:pointer}.teco-trend .tr-legend .pen.off{opacity:.4;text-decoration:line-through}.teco-trend .tr-legend .sw{width:14px;height:3px;border-radius:2px}.teco-trend .tr-legend .val{font-variant-numeric:tabular-nums;color:#9aa3b2}.teco-popup-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:50}.teco-popup-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#00000073;pointer-events:auto}.teco-popup{position:absolute;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--border-strong);border-radius:4px;box-shadow:var(--shadow);pointer-events:auto;min-width:200px}.teco-popup .pp-title{display:flex;align-items:center;gap:8px;height:32px;padding:0 6px 0 12px;background:var(--panel-2);border-bottom:1px solid var(--border);cursor:move;-webkit-user-select:none;user-select:none;font-weight:600;font-size:13px;border-radius:4px 4px 0 0}.teco-popup .pp-title .grow{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.teco-popup .pp-body{position:relative;overflow:hidden}.teco-popup.active{border-color:var(--accent)}.teco-zoom-reset{position:absolute;right:10px;bottom:calc(10px + env(safe-area-inset-bottom,0px));height:32px;padding:0 10px;border-radius:16px;border:1px solid var(--border-strong);background:var(--panel);color:var(--text);font:inherit;font-size:12px;cursor:pointer;z-index:5;box-shadow:var(--shadow-sm)}.teco-reflow{position:relative;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;touch-action:pan-x pan-y;font-family:var(--font);padding:8px max(6px,env(safe-area-inset-right,0px)) calc(24px + env(safe-area-inset-bottom,0px)) max(6px,env(safe-area-inset-left,0px));box-sizing:border-box}.teco-rf-col{display:flex;flex-direction:column;gap:10px;width:100%;max-width:1100px;margin:0 auto;min-width:0}.teco-rf-section{display:flex;flex-direction:column;gap:8px;min-width:0}.teco-rf-section.panel{padding:6px;border:1px solid transparent;box-shadow:0 1px 2px #00000040}.teco-rf-row{display:flex;gap:8px;align-items:flex-start;min-width:0}.teco-rf-card{flex:none;max-width:100%;overflow:hidden;border-radius:4px}.teco-rf-card.scroll{flex:1 1 auto;width:100%;overflow-x:auto;overflow-y:hidden;touch-action:pan-x pan-y;scrollbar-width:thin}.teco-popup.sheet{left:0!important;right:0;top:auto!important;bottom:0;width:100%!important;max-height:92%;border-radius:14px 14px 0 0;border-width:1px 0 0 0;padding-bottom:env(safe-area-inset-bottom,0px);box-shadow:0 -6px 24px #00000080}.teco-popup.sheet .pp-title{height:48px;cursor:default;border-radius:14px 14px 0 0;padding:0 4px 0 16px;font-size:15px;position:relative}.teco-popup.sheet .pp-title:before{content:"";position:absolute;left:50%;top:6px;width:36px;height:4px;margin-left:-18px;border-radius:2px;background:var(--border-strong)}.teco-popup.sheet .pp-title .iconbtn{width:44px;height:44px}.teco-popup.sheet .pp-body{width:100%!important;overflow-y:auto}.teco-popup-layer.has-sheet .teco-popup-backdrop.sheet-backdrop{background:#00000080}.brand-logo{display:block;width:auto;max-height:100%;object-fit:contain;flex-shrink:0;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.login-brand{display:flex;flex-direction:column;align-items:center;gap:12px;padding:4px 0 6px;text-align:center}.login-brand .logo{justify-content:center}.splash .brand-logo{margin-bottom:4px}.home{min-height:100%;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;gap:28px;padding:calc(36px + env(safe-area-inset-top,0px)) 16px calc(20px + env(safe-area-inset-bottom,0px));overflow-y:auto;background:radial-gradient(1200px 600px at 20% 0%,rgba(0,153,153,.15),transparent),var(--bg)}.home-hero{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center}.home-hero h1{margin:0;font-size:30px;font-weight:700;letter-spacing:.08em}.home-hero h1 span{color:var(--accent)}.home-status{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 18px;color:var(--text-muted);font-size:var(--fs-sm)}.home-status>span{display:inline-flex;align-items:center;gap:6px}.home-user{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center;font-size:var(--fs-md)}.home-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;width:100%;max-width:980px}.home-tile{position:relative;display:flex;flex-direction:column;gap:10px;min-height:170px;padding:24px;background:var(--panel);border:1px solid var(--border-strong);border-radius:8px;color:var(--text);text-decoration:none;box-shadow:var(--shadow-sm);transition:border-color .15s,transform .15s,box-shadow .15s}.home-tile:hover,.home-tile:focus-visible{border-color:var(--accent);transform:translateY(-2px);box-shadow:var(--shadow);outline:none}.home-tile .ico{color:var(--accent)}.home-tile h2{margin:0;font-size:var(--fs-xl);font-weight:600}.home-tile p{margin:0;color:var(--text-muted);font-size:var(--fs-sm);line-height:1.45}.home-tile .tag{position:absolute;top:12px;right:12px;padding:2px 9px;border-radius:10px;background:var(--accent-soft);color:var(--accent);font-size:var(--fs-xs);font-weight:600;letter-spacing:.04em}.home .lic-banner.home-license{position:static;transform:none;max-width:980px;width:100%;box-sizing:border-box}.home-footer{margin-top:auto;padding-top:12px;color:var(--text-dim);font-size:var(--fs-xs);text-align:center;line-height:1.6}.home-footer a{color:inherit}@media (max-width: 767px){.home{gap:20px;padding-top:calc(24px + env(safe-area-inset-top,0px))}.home-hero .brand-logo{height:88px!important}.home-hero h1{font-size:22px}.home-tiles{grid-template-columns:minmax(0,1fr)}.home-tile{min-height:0;padding:18px 20px}}:root,:root[data-theme=dark]{color-scheme:dark;--bg: #1b1f24;--bg-elev: #20252b;--panel: #262b33;--panel-2: #2c323b;--border: #30363f;--border-strong: #3d4450;--text: #e6e9ef;--text-muted: #9aa3b2;--text-dim: #6b7484;--accent: #009999;--accent-hover: #00b3b3;--accent-text: #ffffff;--accent-soft: rgba(0, 153, 153, .18);--alarm: #ff3b3b;--alarm-soft: rgba(255, 59, 59, .18);--warning: #ffa500;--warning-soft: rgba(255, 165, 0, .18);--ok: #2ecc71;--ok-soft: rgba(46, 204, 113, .18);--info: #3b9eff;--bad-quality: #7a8290;--object-fill: #5a6270;--object-stroke: #ffffff;--focus: #00b3b3;--shadow: 0 6px 24px rgba(0, 0, 0, .45);--shadow-sm: 0 2px 8px rgba(0, 0, 0, .35);--radius: 4px;--font: Inter, "Segoe UI", system-ui, -apple-system, Roboto, Helvetica, Arial, sans-serif;--font-mono: "Cascadia Code", Consolas, "JetBrains Mono", monospace;--fs-xs: 11px;--fs-sm: 12px;--fs: 13px;--fs-md: 14px;--fs-lg: 16px;--fs-xl: 20px;--control-h: 28px;--control-h-lg: 36px;--topbar-h: 48px;--nav-w: 200px;--scrollbar: #3d4450}:root[data-theme=light]{color-scheme:light;--bg: #f1f3f6;--bg-elev: #ffffff;--panel: #ffffff;--panel-2: #f6f7f9;--border: #d5dae2;--border-strong: #b9c0cc;--text: #1c2129;--text-muted: #5c6675;--text-dim: #8b94a3;--accent: #008080;--accent-hover: #009999;--accent-text: #ffffff;--accent-soft: rgba(0, 128, 128, .14);--alarm: #e02424;--alarm-soft: rgba(224, 36, 36, .14);--warning: #e08a00;--warning-soft: rgba(224, 138, 0, .14);--ok: #1f9d55;--ok-soft: rgba(31, 157, 85, .14);--info: #1d6fd6;--bad-quality: #9aa3b2;--object-fill: #8a93a2;--object-stroke: #1c2129;--focus: #008080;--shadow: 0 6px 24px rgba(0, 0, 0, .18);--shadow-sm: 0 2px 8px rgba(0, 0, 0, .12);--scrollbar: #c3c9d3}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:var(--fs);line-height:1.4;-webkit-font-smoothing:antialiased;overflow:hidden}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button,input,select,textarea{font:inherit;color:inherit}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--scrollbar);border-radius:5px}::-webkit-scrollbar-track{background:transparent}:focus-visible{outline:2px solid var(--focus);outline-offset:1px}[hidden]{display:none!important}.mono{font-family:var(--font-mono)}.muted{color:var(--text-muted)}.dim{color:var(--text-dim)}.small{font-size:var(--fs-sm)}.row{display:flex;align-items:center;gap:8px}.col{display:flex;flex-direction:column;gap:8px}.grow{flex:1 1 auto;min-width:0}.wrap{flex-wrap:wrap}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.right{text-align:right}.center{text-align:center}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}[data-flash=off] .teco-flash{opacity:.25!important}[data-flash=off] .teco-flash-bg{background:transparent!important}[data-flash=off] .teco-flash-hide{visibility:hidden}.panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius)}.panel-title{font-size:var(--fs-sm);text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;padding:8px 12px;border-bottom:1px solid var(--border)}.panel-body{padding:12px}.toolbar{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--panel);flex-wrap:wrap}.page{display:flex;flex-direction:column;height:100%;min-height:0}.page-header{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--panel)}.page-header h1{font-size:var(--fs-lg);font-weight:600;margin:0}.page-body{flex:1;min-height:0;overflow:auto;padding:16px}.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px}.card h3{margin:0 0 6px;font-size:var(--fs-sm);color:var(--text-muted);font-weight:600;text-transform:uppercase;letter-spacing:.05em}.card .big{font-size:26px;font-weight:600;line-height:1.1}.form{display:grid;grid-template-columns:160px 1fr;gap:8px 12px;align-items:center}.form label{color:var(--text-muted);font-size:var(--fs-sm)}.form .full{grid-column:1 / -1}.badge{display:inline-flex;align-items:center;gap:4px;padding:1px 7px;border-radius:10px;font-size:var(--fs-xs);font-weight:600;background:var(--panel-2);border:1px solid var(--border)}.badge.ok{background:var(--ok-soft);color:var(--ok);border-color:transparent}.badge.alarm{background:var(--alarm-soft);color:var(--alarm);border-color:transparent}.badge.warning{background:var(--warning-soft);color:var(--warning);border-color:transparent}.badge.info{background:var(--accent-soft);color:var(--accent);border-color:transparent}.kv{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font-size:var(--fs-sm)}.kv dt{color:var(--text-muted)}.kv dd{margin:0}.empty{color:var(--text-dim);padding:24px;text-align:center}.dot{width:8px;height:8px;border-radius:50%;display:inline-block;background:var(--text-dim)}.dot.ok{background:var(--ok)}.dot.alarm{background:var(--alarm)}.dot.warning{background:var(--warning)}.dot.info{background:var(--info)}hr.sep{border:0;border-top:1px solid var(--border);margin:8px 0}pre.log{margin:0;font-family:var(--font-mono);font-size:var(--fs-sm);white-space:pre-wrap;word-break:break-all}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--control-h);padding:0 12px;border-radius:var(--radius);border:1px solid var(--border-strong);background:var(--panel-2);color:var(--text);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;transition:background .1s,border-color .1s}.btn:hover:not(:disabled){background:var(--border)}.btn:active:not(:disabled){transform:translateY(.5px)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.btn.primary:hover:not(:disabled){background:var(--accent-hover)}.btn.danger{background:var(--alarm);border-color:var(--alarm);color:#fff}.btn.danger:hover:not(:disabled){filter:brightness(1.1)}.btn.ghost{background:transparent;border-color:transparent}.btn.ghost:hover:not(:disabled){background:var(--panel-2)}.btn.sm{height:24px;padding:0 8px;font-size:var(--fs-sm)}.btn.lg{height:var(--control-h-lg);padding:0 18px;font-size:var(--fs-md)}.btn.active{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.iconbtn{display:inline-flex;align-items:center;justify-content:center;width:var(--control-h);height:var(--control-h);padding:0;border-radius:var(--radius);border:1px solid transparent;background:transparent;color:var(--text-muted);cursor:pointer}.iconbtn:hover:not(:disabled){background:var(--panel-2);color:var(--text)}.iconbtn:disabled{opacity:.4;cursor:not-allowed}.iconbtn.active{color:var(--accent);background:var(--accent-soft)}.iconbtn.sm{width:22px;height:22px}.input,.select,.textarea{height:var(--control-h);padding:0 8px;border-radius:var(--radius);border:1px solid var(--border-strong);background:var(--bg);color:var(--text);width:100%;min-width:0}.textarea{height:auto;padding:6px 8px;resize:vertical;font-family:inherit}.input:focus,.select:focus,.textarea:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 2px var(--accent-soft)}.input:disabled,.select:disabled{opacity:.5}.input.invalid{border-color:var(--alarm)}.input-wrap{position:relative;display:flex;align-items:center}.input-wrap>.input{padding-left:28px}.input-wrap>svg{position:absolute;left:8px;color:var(--text-dim);pointer-events:none}.field{display:flex;flex-direction:column;gap:4px}.field>span{font-size:var(--fs-sm);color:var(--text-muted)}.field .hint{font-size:var(--fs-xs);color:var(--text-dim)}.field .error{font-size:var(--fs-xs);color:var(--alarm)}.check{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.check input{position:absolute;opacity:0;width:0;height:0}.check .box{width:16px;height:16px;border-radius:3px;border:1px solid var(--border-strong);background:var(--bg);display:inline-flex;align-items:center;justify-content:center;color:var(--accent-text)}.check input:checked+.box{background:var(--accent);border-color:var(--accent)}.check input:focus-visible+.box{outline:2px solid var(--focus);outline-offset:1px}.check.disabled{opacity:.5;cursor:not-allowed}.toggle{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.toggle input{position:absolute;opacity:0;width:0;height:0}.toggle .track{width:34px;height:18px;border-radius:9px;background:var(--border-strong);position:relative;transition:background .15s}.toggle .track:after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:left .15s}.toggle input:checked+.track{background:var(--accent)}.toggle input:checked+.track:after{left:18px}.toggle input:focus-visible+.track{outline:2px solid var(--focus);outline-offset:1px}.toggle.disabled{opacity:.5;cursor:not-allowed}.tabs{display:flex;border-bottom:1px solid var(--border);gap:2px}.tabs .tab{padding:8px 14px;border:0;background:transparent;color:var(--text-muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;display:inline-flex;align-items:center;gap:6px}.tabs .tab:hover{color:var(--text)}.tabs .tab.active{color:var(--accent);border-bottom-color:var(--accent)}.tabs.vertical{flex-direction:column;border-bottom:0;border-right:1px solid var(--border)}.tabs.vertical .tab{border-bottom:0;border-right:2px solid transparent;margin:0 -1px 0 0;justify-content:flex-start}.tabs.vertical .tab.active{border-right-color:var(--accent)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px}.modal-backdrop.transparent{background:transparent;pointer-events:none}.modal{background:var(--panel);border:1px solid var(--border-strong);border-radius:var(--radius);box-shadow:var(--shadow);min-width:320px;max-width:min(96vw,1100px);max-height:92vh;display:flex;flex-direction:column;pointer-events:auto}.modal-header{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--border);font-weight:600;font-size:var(--fs-md)}.modal-header .grow{flex:1}.modal-body{padding:14px;overflow:auto;flex:1;min-height:0}.modal-footer{display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid var(--border)}.toasts{position:fixed;right:16px;bottom:16px;display:flex;flex-direction:column;gap:8px;z-index:2000;max-width:380px}.toast{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border-radius:var(--radius);background:var(--panel);border:1px solid var(--border-strong);box-shadow:var(--shadow);border-left:3px solid var(--info);animation:toast-in .15s ease-out}.toast.success{border-left-color:var(--ok)}.toast.warning{border-left-color:var(--warning)}.toast.error{border-left-color:var(--alarm)}.toast .msg{flex:1;white-space:pre-wrap}@keyframes toast-in{0%{transform:translateY(8px);opacity:0}to{transform:none;opacity:1}}.table-wrap{position:relative;overflow:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);height:100%;min-height:0}.table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:var(--fs-sm)}.table th,.table td{padding:0 10px;height:30px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.table th{position:sticky;top:0;background:var(--panel-2);z-index:1;font-weight:600;color:var(--text-muted);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.04em;-webkit-user-select:none;user-select:none}.table th.sortable{cursor:pointer}.table th.sortable:hover{color:var(--text)}.table tbody tr:hover td{background:var(--panel-2)}.table tbody tr.selected td{background:var(--accent-soft)}.table tbody tr.clickable{cursor:pointer}.table td.num,.table th.num{text-align:right;font-variant-numeric:tabular-nums}.tooltip{position:fixed;z-index:3000;background:var(--bg-elev);border:1px solid var(--border-strong);color:var(--text);padding:4px 8px;border-radius:var(--radius);font-size:var(--fs-sm);box-shadow:var(--shadow-sm);pointer-events:none;max-width:320px;white-space:pre-wrap}.splitter{display:flex;width:100%;height:100%;min-height:0;min-width:0}.splitter.vertical{flex-direction:column}.splitter>.pane{min-width:0;min-height:0;overflow:hidden}.splitter>.gutter{flex:0 0 5px;background:var(--border);cursor:col-resize;position:relative;z-index:1}.splitter>.gutter:hover,.splitter>.gutter.dragging{background:var(--accent)}.splitter.vertical>.gutter{cursor:row-resize}.tree{font-size:var(--fs-sm);-webkit-user-select:none;user-select:none}.tree-node{display:flex;align-items:center;gap:4px;height:26px;padding-right:8px;cursor:pointer;border-radius:var(--radius);white-space:nowrap}.tree-node:hover{background:var(--panel-2)}.tree-node.selected{background:var(--accent-soft);color:var(--accent)}.tree-node .twisty{width:16px;display:inline-flex;justify-content:center;color:var(--text-dim)}.tree-node .label{overflow:hidden;text-overflow:ellipsis}.ctxmenu{position:fixed;z-index:3000;min-width:180px;background:var(--panel);border:1px solid var(--border-strong);border-radius:var(--radius);box-shadow:var(--shadow);padding:4px}.ctxmenu .item{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:3px;cursor:pointer;font-size:var(--fs-sm)}.ctxmenu .item:hover{background:var(--accent-soft)}.ctxmenu .item.disabled{opacity:.4;pointer-events:none}.ctxmenu .item.danger{color:var(--alarm)}.ctxmenu .sep{border-top:1px solid var(--border);margin:4px 0}.ctxmenu .shortcut{margin-left:auto;color:var(--text-dim);font-size:var(--fs-xs)}.keypad{display:flex;flex-direction:column;gap:8px;width:280px}.keypad .display{height:44px;display:flex;align-items:center;justify-content:flex-end;padding:0 12px;font-size:22px;font-family:var(--font-mono);background:var(--bg);border:1px solid var(--border-strong);border-radius:var(--radius)}.keypad .display.invalid{border-color:var(--alarm);color:var(--alarm)}.keypad .limits{display:flex;justify-content:space-between;font-size:var(--fs-xs);color:var(--text-muted)}.keypad .keys{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.keypad .keys .btn{height:44px;font-size:var(--fs-lg)}.keypad .keys .span2{grid-column:span 2}.login-card{width:360px;background:var(--panel);border:1px solid var(--border-strong);border-radius:6px;box-shadow:var(--shadow);padding:28px;display:flex;flex-direction:column;gap:14px}.login-card h2{margin:0;font-size:var(--fs-xl);font-weight:600}.login-card .logo{display:flex;align-items:center;gap:10px;color:var(--accent);font-weight:700;letter-spacing:.08em}.tbadges{display:inline-flex;gap:3px;flex-wrap:wrap;align-items:center}.tbadge{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 6px;border-radius:10px;font-size:var(--fs-xs);font-weight:600;border:1px solid transparent;line-height:1;white-space:nowrap}.tbadge.compact{padding:0 5px}.tbadge .n{font-variant-numeric:tabular-nums}.tbadge.tone-green{background:var(--ok-soft);color:var(--ok)}.tbadge.tone-amber{background:var(--warning-soft);color:var(--warning)}.tbadge.tone-red{background:var(--alarm-soft);color:var(--alarm)}.tbadge.tone-teal{background:var(--accent-soft);color:var(--accent)}.tbadge.tone-blue{background:#3b9eff2e;color:var(--info)}.tbadge.tone-grey{background:var(--panel-2);color:var(--text-muted);border-color:var(--border)}.tbadge.tone-violet{background:#a78bfa33;color:#a78bfa}:root[data-theme=light] .tbadge.tone-violet{color:#6d4fd6}.chip{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 6px;border-radius:4px;font-size:var(--fs-xs);background:var(--panel-2);border:1px solid var(--border);color:var(--text-muted);white-space:nowrap;max-width:100%}.chip.mono{font-weight:600;letter-spacing:.02em}.chip.dt-bool{color:var(--info)}.chip.dt-float{color:var(--accent)}.chip.dt-int{color:var(--text)}.chip.dt-text{color:var(--warning)}.chip.dt-time{color:var(--text-muted)}.chip.device{color:var(--text)}.chip.device .drv{color:var(--text-dim);font-size:10px;text-transform:uppercase;letter-spacing:.04em;padding-left:5px;border-left:1px solid var(--border)}.chip.device.calc{border-color:#00999973;color:var(--accent)}.quality{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.quality .qdot{width:8px;height:8px;border-radius:50%;background:var(--text-dim);flex:none}.quality.q-good .qdot{background:var(--ok);box-shadow:0 0 0 2px var(--ok-soft)}.quality.q-good .qtext{color:var(--ok)}.quality.q-uncertain .qdot{background:var(--warning);box-shadow:0 0 0 2px var(--warning-soft)}.quality.q-uncertain .qtext{color:var(--warning)}.quality.q-bad .qdot{background:var(--alarm);box-shadow:0 0 0 2px var(--alarm-soft)}.quality.q-bad .qtext{color:var(--alarm)}.quality.q-none .qtext{color:var(--text-dim)}.popover{position:fixed;z-index:3100;background:var(--panel);border:1px solid var(--border-strong);border-radius:var(--radius);box-shadow:var(--shadow);padding:6px;display:flex;flex-direction:column;gap:6px;max-height:70vh;overflow:auto;font-size:var(--fs-sm)}.xe{display:flex;flex-direction:column;gap:6px;min-width:0}.xe-editor{position:relative;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--bg)}.xe-editor:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.xe-backdrop,.xe-input{margin:0;padding:8px 10px;font-family:var(--font-mono);font-size:13px;line-height:1.55;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;-moz-tab-size:2;tab-size:2;box-sizing:border-box}.xe-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none;color:var(--text)}.xe-input{position:relative;display:block;width:100%;min-height:72px;background:transparent;color:transparent;caret-color:var(--text);border:0;outline:none;resize:vertical}.xe-input::placeholder{color:var(--text-dim)}.xe-input::selection{background:#00999959}.xe-tag{background:var(--accent-soft);color:var(--accent);border-radius:4px;box-shadow:0 0 0 1px #00999959}.xe-tag-missing{background:var(--alarm-soft);color:var(--alarm);border-radius:4px;box-shadow:0 0 0 1px #ff3b3b66;text-decoration:underline dotted}.xe-str{color:var(--warning)}.xe-num{color:var(--info)}.xe-fn{color:#c792ea;font-weight:600}:root[data-theme=light] .xe-fn{color:#7c3aed}.xe-kw{color:var(--info);font-style:italic}.xe-op{color:var(--text-muted)}.xe-paren{color:var(--text-dim)}.xe-toolbar{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.xe-toolbar .grow{flex:1}.xe-fx{font-style:italic;font-family:var(--font-mono);font-weight:700}.xe-status{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-xs);border:0;background:transparent;padding:2px 4px;border-radius:var(--radius);color:inherit}.xe-status.ok{color:var(--ok)}.xe-status.err{color:var(--alarm);cursor:pointer;text-align:left}.xe-status.err:hover{background:var(--alarm-soft)}.xe-preview{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:6px 10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--panel-2)}.xe-preview-value{font-size:var(--fs-md);font-weight:600;color:var(--ok)}.xe-preview-value.bad{color:var(--bad-quality)}.xe-badq{font-size:var(--fs-xs);font-weight:400;color:var(--warning)}.xe-note{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-xs);color:var(--text-muted)}.xe-note.warn{color:var(--warning)}.xe-refs{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;font-size:var(--fs-sm)}.xe-ref{display:grid;grid-template-columns:minmax(0,1fr) 56px 110px 60px 130px;gap:8px;align-items:center;padding:3px 10px;min-height:28px;border-top:1px solid var(--border)}.xe-ref:first-child{border-top:0}.xe-ref.head{background:var(--panel-2);font-size:var(--fs-xs);color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.xe-ref.missing{background:var(--alarm-soft)}.xe-ref .right{text-align:right}.xe-fn-groups{display:flex;flex-wrap:wrap;gap:2px;border-bottom:1px solid var(--border);padding-bottom:4px}.xe-fn-group{border:0;background:transparent;color:var(--text-muted);padding:3px 8px;border-radius:var(--radius);cursor:pointer;font-size:var(--fs-xs);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.xe-fn-group.active{background:var(--accent-soft);color:var(--accent)}.xe-fn-list,.xe-tpl-list{display:flex;flex-direction:column;gap:1px;max-height:320px;overflow:auto}.xe-fn-item{display:grid;grid-template-columns:160px minmax(0,1fr) 14px;gap:8px;align-items:center;width:100%;text-align:left;padding:4px 8px;border:0;border-radius:3px;background:transparent;color:var(--text);cursor:pointer;font-size:var(--fs-sm)}.xe-fn-item:hover,.xe-fn-item:focus-visible,.xe-tpl-item:hover,.xe-tpl-item:focus-visible{background:var(--accent-soft)}.xe-fn-item .sig{color:var(--accent);font-size:var(--fs-xs)}.xe-fn-item .desc{color:var(--text-muted);font-size:var(--fs-xs)}.xe-tpl-item{display:flex;flex-direction:column;gap:1px;width:100%;text-align:left;padding:5px 8px;border:0;border-radius:3px;background:transparent;color:var(--text);cursor:pointer}.xe-tpl-item .lbl{font-weight:600;font-size:var(--fs-sm)}.xe-tpl-item .tpl{font-size:var(--fs-xs);color:var(--accent)}.xe-tpl-item .desc{font-size:var(--fs-xs);color:var(--text-muted)}@media (max-width: 767px){.xe-ref{grid-template-columns:minmax(0,1fr) 90px 90px}.xe-ref>:nth-child(2),.xe-ref>:nth-child(4){display:none}.xe-fn-item{grid-template-columns:minmax(0,1fr) 14px}.xe-fn-item .desc{display:none}}.msel{display:inline-flex;align-items:center;gap:4px;min-height:var(--control-h);max-width:100%;padding:2px 6px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--bg);color:var(--text);cursor:pointer;font-size:var(--fs-sm);-webkit-user-select:none;user-select:none;box-sizing:border-box}.msel:hover{border-color:var(--text-dim)}.msel:focus-visible,.msel.open{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.msel.disabled{opacity:.5;cursor:not-allowed}.msel-chips{display:flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0;flex-wrap:nowrap;overflow:hidden}.msel-placeholder{color:var(--text-muted);padding:0 2px;white-space:nowrap}.msel-chip{display:inline-flex;align-items:center;gap:2px;height:20px;padding:0 2px 0 6px;border-radius:10px;background:var(--accent-soft);color:var(--accent);font-size:var(--fs-xs);font-weight:600;max-width:160px;min-width:0;white-space:nowrap}.msel-chip.more{padding:0 7px;background:var(--panel-2);color:var(--text-muted);border:1px solid var(--border)}.msel-chip-x{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:0;border-radius:50%;background:transparent;color:inherit;cursor:pointer;padding:0}.msel-chip-x:hover{background:#00000040}.msel-clear{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:0;border-radius:50%;background:transparent;color:var(--text-dim);cursor:pointer;padding:0;flex:none}.msel-clear:hover{color:var(--text);background:var(--panel-2)}.msel-caret{color:var(--text-dim);flex:none;transition:transform .12s}.msel.open .msel-caret{transform:rotate(180deg)}.msel-pop{padding:8px;gap:0}.msel-pop-body{display:flex;flex-direction:column;gap:6px;min-height:0}.msel-actions{display:flex;align-items:center;gap:4px;padding:0 2px}.msel-list{max-height:min(46vh,360px);overflow:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg)}.msel-opt{display:flex;align-items:center;gap:8px;padding:5px 8px;cursor:pointer;font-size:var(--fs-sm);color:var(--text);border-bottom:1px solid var(--border)}.msel-opt:last-child{border-bottom:0}.msel-opt.active{background:var(--accent-soft)}.msel-opt.on .msel-lbl{font-weight:600}.msel-opt.disabled{opacity:.45;cursor:not-allowed}.msel-box{width:15px;height:15px;border-radius:3px;border:1px solid var(--border-strong);background:var(--panel);display:inline-flex;align-items:center;justify-content:center;color:var(--accent-text);flex:none}.msel-box.on{background:var(--accent);border-color:var(--accent)}.msel-lbl{flex:1 1 auto;min-width:0}.msel-meta{color:var(--text-dim);font-size:10px;text-transform:uppercase;letter-spacing:.04em}.msel-count{color:var(--text-muted);font-size:var(--fs-xs);min-width:2.5em;text-align:right;font-variant-numeric:tabular-nums}.msel-empty{padding:12px;text-align:center}@media (max-width: 767px){.msel{width:100%!important}.msel-chip{max-width:110px}}#root{height:100vh;height:100dvh;width:100%;overflow:hidden}.splash{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px}.splash-logo{font-size:28px;font-weight:700;letter-spacing:.08em}.splash-logo span{color:var(--accent)}.rt-app{display:grid;height:100%;grid-template-rows:auto minmax(0,1fr);grid-template-columns:var(--nav-w) minmax(0,1fr);background:var(--bg);min-width:0}.rt-app.nav-top{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr)}.rt-app.nav-none{grid-template-columns:minmax(0,1fr)}.rt-top{grid-column:1 / -1;min-width:0;overflow:hidden;display:flex;align-items:center;gap:10px;height:calc(var(--topbar-h) + env(safe-area-inset-top,0px));padding:env(safe-area-inset-top,0px) 12px 0 calc(12px + env(safe-area-inset-left,0px));background:var(--panel);border-bottom:1px solid var(--border)}.rt-brand{display:flex;align-items:center;gap:8px;font-weight:700;letter-spacing:.06em;white-space:nowrap}.rt-brand .accent{color:var(--accent)}.rt-brand img{height:28px}.rt-title{display:flex;flex-direction:column;min-width:0;line-height:1.15}.rt-title .t{font-size:var(--fs-md);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rt-title .crumb{font-size:var(--fs-xs);color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rt-alarmline{flex:1 1 auto;min-width:0;height:32px}.rt-top-right{display:flex;align-items:center;gap:4px;margin-left:auto;flex-shrink:0}.rt-clock{font-variant-numeric:tabular-nums;font-size:var(--fs-sm);white-space:nowrap;color:var(--text-muted);padding:0 6px}.rt-user{display:flex;align-items:center;gap:6px;font-size:var(--fs-sm);padding:0 6px;white-space:nowrap}.rt-user .countdown{color:var(--warning);font-variant-numeric:tabular-nums}.rt-conn{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-xs);color:var(--text-muted);padding:0 6px;white-space:nowrap}.rt-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:10px;background:var(--alarm);color:#fff;font-size:var(--fs-xs);font-weight:700}.rt-badge.none{background:var(--border-strong);color:var(--text-muted)}.rt-nav{background:var(--panel);border-right:1px solid var(--border);overflow-y:auto;padding:8px 0 calc(8px + env(safe-area-inset-bottom,0px)) env(safe-area-inset-left,0px);display:flex;flex-direction:column;gap:2px}.rt-app.nav-top .rt-nav{flex-direction:row;border-right:0;border-bottom:1px solid var(--border);padding:4px 8px;overflow-x:auto;overflow-y:hidden;gap:4px}.rt-navitem{display:flex;align-items:center;gap:10px;min-height:40px;padding:0 14px;color:var(--text-muted);border:0;background:transparent;cursor:pointer;text-align:left;border-left:3px solid transparent;font:inherit;white-space:nowrap}.rt-navitem:hover{background:var(--panel-2);color:var(--text)}.rt-navitem.active{color:var(--accent);border-left-color:var(--accent);background:var(--accent-soft)}.rt-navitem.child{padding-left:34px;min-height:34px;font-size:var(--fs-sm)}.rt-app.nav-top .rt-navitem{border-left:0;border-bottom:3px solid transparent;border-radius:var(--radius)}.rt-app.nav-top .rt-navitem.active{border-bottom-color:var(--accent)}.rt-navitem .lbl{flex:1;overflow:hidden;text-overflow:ellipsis}.rt-nav .rt-nav-footer{margin-top:auto;padding:8px 14px;font-size:var(--fs-xs);color:var(--text-dim);border-top:1px solid var(--border)}.rt-main{position:relative;min-height:0;min-width:0;overflow:hidden;background:var(--bg)}.rt-mobile-alarm,.rt-menu-btn,.rt-drawer-backdrop,.rt-drawer-head{display:none}.rt-notice{position:absolute;left:50%;top:8px;transform:translate(-50%);z-index:20;padding:6px 12px;border-radius:var(--radius);background:var(--warning);color:#000;font-size:var(--fs-sm);font-weight:600;box-shadow:var(--shadow)}.rt-app.compact,.rt-app.compact.nav-top{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr)}.rt-app.compact .rt-top .iconbtn{width:40px;height:40px}.rt-app.compact .rt-top-right{gap:0}.rt-app.compact .rt-top .rt-install{display:none!important}.rt-app.compact .rt-top{gap:4px;padding-left:calc(4px + env(safe-area-inset-left,0px));padding-right:calc(4px + env(safe-area-inset-right,0px));height:calc(48px + env(safe-area-inset-top,0px))}.rt-app.compact .rt-brand .txt,.rt-app.compact .rt-clock,.rt-app.compact .rt-user,.rt-app.compact .rt-conn,.rt-app.compact .rt-alarmline,.rt-app.compact .rt-title .crumb,.rt-app.compact .rt-desktop-only,.rt-app.compact .rt-wide-only{display:none!important}.rt-app.compact .rt-brand img{height:24px}.rt-app.compact .rt-menu-btn{display:inline-flex}.rt-app.compact .rt-title{flex:1}.rt-app.compact .rt-mobile-alarm{display:block;height:40px;margin:0;position:relative;z-index:3}.rt-app.compact .rt-mobile-alarm .teco-alarmline{border-radius:0;border-left:0;border-right:0;padding-left:calc(12px + env(safe-area-inset-left,0px));padding-right:calc(12px + env(safe-area-inset-right,0px))}.rt-app.compact .rt-nav{position:fixed;top:0;bottom:0;left:0;width:min(86vw,340px);z-index:1200;transform:translate(-105%);transition:transform .2s ease;box-shadow:var(--shadow);padding-top:env(safe-area-inset-top,0px);border-right:1px solid var(--border-strong);flex-direction:column!important;overflow-y:auto!important;overscroll-behavior:contain}.rt-app.compact.drawer-open .rt-nav{transform:none}.rt-app.compact .rt-drawer-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:1100;opacity:0;pointer-events:none;transition:opacity .2s}.rt-app.compact.drawer-open .rt-drawer-backdrop{opacity:1;pointer-events:auto}.rt-app.compact .rt-drawer-head{display:flex;flex-direction:column;gap:10px;padding:12px 14px;border-bottom:1px solid var(--border);font-size:var(--fs-sm)}.rt-app.compact .rt-drawer-head .rt-clock,.rt-app.compact .rt-drawer-head .rt-user,.rt-app.compact .rt-drawer-head .rt-conn{display:flex!important;padding:0}.rt-app.compact .rt-drawer-head .btn{min-height:40px}.rt-app.compact .rt-drawer-head .iconbtn{width:44px;height:44px}.rt-app.compact .rt-navitem{min-height:48px}.rt-app.compact .rt-navitem.child{min-height:44px}.rt-app.compact .rt-main{padding-bottom:0}.rt-app.compact .rt-notice{top:6px;max-width:calc(100% - 24px);text-align:center}@media (orientation: landscape) and (max-height: 500px){.rt-app.compact .rt-mobile-alarm{height:36px}.rt-app.compact .rt-top{height:calc(44px + env(safe-area-inset-top,0px))}}.rt-drawer-modes{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.rt-drawer-modes .muted{width:100%;font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.05em}.rt-modechip{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:0 12px;border-radius:20px;border:1px solid var(--border-strong);background:var(--panel-2);color:var(--text);font:inherit;font-size:var(--fs-sm);cursor:pointer}.rt-modechip.on{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.rt-modemenu{display:flex;flex-direction:column;gap:2px}.rt-modeitem{display:flex;align-items:center;gap:10px;min-height:44px;padding:6px 8px;border:0;border-radius:var(--radius);background:transparent;color:var(--text);font:inherit;text-align:left;cursor:pointer}.rt-modeitem:hover{background:var(--panel-2)}.rt-modeitem.on{color:var(--accent)}.rt-modeitem .grow{flex:1;display:flex;flex-direction:column;min-width:0}.rt-modeitem .l{font-weight:600}.rt-modeitem .h{font-size:var(--fs-xs);color:var(--text-muted)}.rt-modemenu-foot{padding:4px 8px 2px;font-size:var(--fs-xs);color:var(--text-dim);border-top:1px solid var(--border);margin-top:2px}.login-page{height:100%;display:flex;align-items:center;justify-content:center;padding:16px;background:radial-gradient(1200px 600px at 20% 0%,rgba(0,153,153,.15),transparent),var(--bg)}.login-page .login-card{max-width:100%}.ad-app{display:grid;height:100%;grid-template-columns:220px minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);min-width:0}.ad-top{grid-column:1 / -1;display:flex;align-items:center;gap:10px;height:calc(var(--topbar-h) + env(safe-area-inset-top,0px));padding:env(safe-area-inset-top,0px) 12px 0;background:var(--panel);border-bottom:1px solid var(--border)}.ad-nav{background:var(--panel);border-right:1px solid var(--border);overflow-y:auto;padding:8px 0 calc(8px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:2px}.ad-main{min-height:0;min-width:0;overflow:hidden;display:flex;flex-direction:column}.ad-menu-btn,.ad-drawer-backdrop{display:none}@media (max-width: 767px){.ad-app{grid-template-columns:minmax(0,1fr)}.ad-nav{position:fixed;top:0;bottom:0;left:0;width:min(84vw,300px);z-index:1200;transform:translate(-105%);transition:transform .2s ease;box-shadow:var(--shadow);padding-top:env(safe-area-inset-top,0px)}.ad-app.drawer-open .ad-nav{transform:none}.ad-menu-btn{display:inline-flex}.ad-drawer-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:1100;opacity:0;pointer-events:none;transition:opacity .2s}.ad-app.drawer-open .ad-drawer-backdrop{opacity:1;pointer-events:auto}.ad-desktop-only{display:none!important}.page-header{flex-wrap:wrap;padding:10px 12px}.page-body{padding:12px}.form{grid-template-columns:1fr}.form label{margin-top:4px}.toolbar{padding:6px 8px}}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}.dev-card{display:flex;flex-direction:column;gap:6px;border-left:4px solid var(--text-dim)}.dev-card.Connected{border-left-color:var(--ok)}.dev-card.Connecting{border-left-color:var(--warning)}.dev-card.Faulted{border-left-color:var(--alarm)}.dev-card.Disconnected{border-left-color:var(--text-dim)}.dev-card .name{font-weight:600;font-size:var(--fs-md);display:flex;align-items:center;gap:8px}.dev-card .meta{display:grid;grid-template-columns:1fr 1fr;gap:2px 10px;font-size:var(--fs-sm);color:var(--text-muted)}.q-good{color:var(--ok)}.q-bad{color:var(--alarm)}.q-unc{color:var(--warning)}.live-cell{font-variant-numeric:tabular-nums}.log-line{display:grid;grid-template-columns:150px 44px 110px 1fr;gap:8px;font-family:var(--font-mono);font-size:var(--fs-sm);padding:2px 8px;border-bottom:1px solid var(--border)}.log-line .lvl{font-weight:700}.log-line.Error .lvl,.log-line.Fatal .lvl{color:var(--alarm)}.log-line.Warning .lvl{color:var(--warning)}.log-line.Information .lvl{color:var(--ok)}.log-line.Debug .lvl,.log-line.Verbose .lvl{color:var(--text-dim)}@media (max-width: 767px){.log-line{grid-template-columns:1fr;gap:0;padding:6px 8px}}.wizard-steps{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}.wizard-steps .step{display:flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--text-muted)}.wizard-steps .step .n{width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:var(--panel-2);border:1px solid var(--border-strong);font-size:var(--fs-xs)}.wizard-steps .step.active{color:var(--accent)}.wizard-steps .step.active .n{background:var(--accent);color:#fff;border-color:var(--accent)}.dropzone{border:2px dashed var(--border-strong);border-radius:var(--radius);padding:28px;text-align:center;color:var(--text-muted);cursor:pointer}.dropzone:hover,.dropzone.over{border-color:var(--accent);color:var(--text)}@media (max-width: 767px){.table-wrap.cards .table,.table-wrap.cards .table tbody,.table-wrap.cards .table tr,.table-wrap.cards .table td{display:block;width:100%;height:auto}.table-wrap.cards .table thead,.table-wrap.cards .table colgroup{display:none}.table-wrap.cards .table tr{border-bottom:1px solid var(--border);padding:8px 10px}.table-wrap.cards .table tr[aria-hidden]{display:none}.table-wrap.cards .table td{display:flex;justify-content:space-between;gap:12px;padding:2px 0;border:0;white-space:normal;text-align:right;min-height:24px;align-items:center}.table-wrap.cards .table td:before{content:attr(data-label);color:var(--text-muted);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.04em;text-align:left;flex:0 0 38%}.table-wrap.cards .table td.num{text-align:right}.table-wrap.cards .table tr.selected td{background:transparent}.table-wrap.cards .table tr.selected{background:var(--accent-soft)}.modal{width:100vw!important;max-width:100vw;height:100dvh;max-height:100dvh;border-radius:0;border:0}.modal-body{padding:12px}.toasts{left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom,0px));max-width:none}.keypad{width:100%}.btn,.iconbtn{min-height:36px}.input,.select{height:36px}}html[data-kiosk="1"] .browser-only{display:none!important}.ad-main{position:relative}.lic-banner{position:absolute;left:50%;bottom:10px;transform:translate(-50%);z-index:20;display:flex;align-items:center;gap:8px;max-width:calc(100% - 24px);padding:6px 8px 6px 12px;border-radius:var(--radius);border:1px solid var(--border-strong);background:var(--panel);color:var(--text);font-size:var(--fs-sm);box-shadow:var(--shadow)}.lic-banner .txt{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lic-banner .lnk{border:0;background:none;color:var(--accent);cursor:pointer;font:inherit;text-decoration:underline;padding:0 2px;white-space:nowrap}.lic-banner.info{border-color:var(--accent)}.lic-banner.info svg:first-child{color:var(--accent)}.lic-banner.warning{border-color:var(--warning)}.lic-banner.warning svg:first-child{color:var(--warning)}.lic-banner.alarm{border-color:var(--alarm);background:var(--alarm-soft)}.lic-banner.alarm svg:first-child{color:var(--alarm)}@media (max-width: 767px){.lic-banner{bottom:calc(6px + env(safe-area-inset-bottom,0px))}.lic-banner .txt{white-space:normal}}
