:root{--bg:#fafafa;--text:#111;--text-soft:#525252;--text-muted:#737373;--border:#e5e5e5;--code-bg:#f0f0f0;color:var(--text);background-color:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-weight:400;line-height:1.5}@media (prefers-color-scheme:dark){:root{--bg:#0a0a0a;--text:#fafafa;--text-soft:#a3a3a3;--text-muted:#737373;--border:#262626;--code-bg:#171717}}*,:before,:after{box-sizing:border-box}body{min-width:320px;margin:0}#root{min-height:100svh}.cms-login-page{color:#e2e8f0;background:linear-gradient(145deg,#0b1220 0%,#122336 38%,#0d3d4d 100%);justify-content:center;align-items:center;min-height:100vh;padding:2rem;display:flex}.cms-login-card{color:#0f172a;background:#f1f5f9;border:1px solid #ffffff1f;border-radius:14px;width:min(22rem,100%);padding:2rem 1.75rem 1.75rem;box-shadow:0 24px 48px -12px #00000073,inset 0 0 0 1px #ffffff14}.cms-login-title{letter-spacing:-.03em;color:#0f172a;margin:0;font-size:1.65rem;font-weight:700}.cms-login-tagline{color:#64748b;margin:.35rem 0 1.5rem;font-size:.875rem;font-weight:500}.cms-login-field{flex-direction:column;gap:.4rem;margin-bottom:1rem;display:flex}.cms-login-label{color:#334155;font-size:.78rem;font-weight:600}.cms-login-input{font:inherit;color:#0f172a;background:#fff;border:1px solid #cbd5e1;border-radius:9px;padding:.6rem .75rem;transition:border-color .15s,box-shadow .15s}.cms-login-input:hover:not(:disabled){border-color:#94a3b8}.cms-login-input:focus{border-color:#0d9488;outline:none;box-shadow:0 0 0 3px #0d948838}.cms-login-input:disabled{opacity:.65;cursor:not-allowed}.cms-login-card .cms-login-submit{cursor:pointer;color:#f0fdfa;background:linear-gradient(#14b8a6 0%,#0d9488 100%);border:none;border-radius:9px;width:100%;margin-top:.35rem;padding:.7rem 1rem;font-weight:600;transition:transform .12s,filter .12s;box-shadow:0 4px 14px #0d948866}.cms-login-submit:hover:not(:disabled){filter:brightness(1.05)}.cms-login-submit:active:not(:disabled){transform:translateY(1px)}.cms-login-submit:disabled{opacity:.7;cursor:not-allowed}.cms-login-error{border-radius:8px;margin-top:1rem!important;margin-bottom:0!important}.cms-auth-loading{min-height:100vh;color:var(--text-soft);justify-content:center;align-items:center;display:flex}.app{flex-direction:column;min-height:100svh;display:flex}.header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:1rem;padding:1rem 1.5rem;display:flex}.logo{letter-spacing:.02em;color:var(--text-muted);font-size:.875rem;font-weight:600}.header-actions{align-items:center;gap:.5rem;display:flex}.main{box-sizing:border-box;flex-direction:column;flex:1;justify-content:flex-start;width:100%;max-width:1200px;margin:0 auto;padding:1.25rem 1.25rem 3rem;display:flex}.layout-two-col{grid-template-columns:minmax(280px,400px) minmax(0,1fr);align-items:start;gap:1.5rem 2rem;width:100%;display:grid}.layout-col-list{min-width:0;max-height:calc(100svh - 1.5rem);padding-right:.25rem;position:sticky;top:.75rem;overflow-y:auto}.layout-col-list .title{margin-bottom:.65rem;font-size:clamp(1.35rem,3.5vw,1.75rem)}.layout-col-list .lead{margin-bottom:1rem;font-size:.88rem}.layout-col-list .device-list{margin-bottom:0}.layout-col-list .net-panel{margin-top:1.25rem;padding-top:1.25rem}.layout-col-detail{flex-direction:column;gap:.75rem;min-width:0;display:flex}.detail-title{letter-spacing:-.02em;color:var(--text);flex-wrap:wrap;align-items:baseline;gap:.5rem .75rem;margin:0;font-size:1.15rem;font-weight:600;display:flex}.detail-title-device{color:var(--text);font-size:1rem;font-weight:600}.detail-title-peer{color:var(--text-soft);background:var(--code-bg);border-radius:6px;padding:.15rem .45rem;font-size:.82rem;font-weight:500}.detail-tabs{margin:.15rem 0 .35rem}.detail-tab-panel{flex-direction:column;gap:.75rem;min-width:0;display:flex}.detail-tab-panel-empty{min-height:2rem}.layout-col-detail .detail-tab-panel .firmware-panel,.layout-col-detail .detail-tab-panel .vari-panel{margin-top:0}.detail-lead{color:var(--text-soft);margin:0 0 .25rem;font-size:.88rem;line-height:1.55}.detail-video-wrap{min-width:0}.detail-video-wrap .hls-player-wrap{margin-top:0;margin-bottom:0}.detail-video-placeholder{border:1px dashed var(--border);border-radius:10px;margin:0;padding:1rem;font-size:.88rem}.video-channel-row{flex-wrap:wrap;align-items:center;gap:.6rem 1rem;margin-top:.25rem;display:flex}.video-channel-label{color:var(--text-soft);font-size:.88rem;font-weight:500}.video-channel-select{border:1px solid var(--border);background:var(--surface);min-width:8rem;color:var(--text);border-radius:8px;padding:.45rem .65rem;font-size:.88rem}.video-channel-select:disabled{opacity:.55;cursor:not-allowed}.layout-col-detail .actions{margin-top:.35rem}.layout-col-detail .vari-panel{margin-top:1rem;padding-top:1.25rem}.net-table-wrap{margin:0 -.25rem;padding:0 .25rem;overflow-x:auto}@media (width<=880px){.layout-two-col{grid-template-columns:1fr}.layout-col-list{max-height:none;padding-right:0;position:static;overflow-y:visible}}.title{letter-spacing:-.03em;color:var(--text);margin:0 0 1rem;font-size:clamp(1.75rem,5vw,2.25rem);font-weight:600}.lead{color:var(--text-soft);margin:0;font-size:1rem;line-height:1.6}.lead code{background:var(--code-bg);color:var(--text);border-radius:4px;padding:.15em .4em;font-size:.9em}.muted{color:var(--text-soft)}.banner{border-radius:8px;margin:0 0 1rem;padding:.75rem 1rem;font-size:.9rem;line-height:1.45}.banner.error{color:#b91c1c;background:#dc26261f}.banner.ok{color:#15803d;background:#16a34a1f}.device-list{flex-direction:column;gap:.5rem;margin:0 0 1.5rem;padding:0;list-style:none;display:flex}.device-list-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:.75rem;display:flex}.device-list-select-all{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:.5rem;font-size:.85rem;display:flex}.device-list-clear{padding:.25rem .5rem;font-size:.8rem}.device-row-wrap{border:1px solid var(--border);border-radius:8px;align-items:stretch;min-width:0;display:flex;overflow:hidden}.device-row-wrap.selected{border-color:var(--text-soft);box-shadow:0 0 0 2px #0000000f}.device-row-wrap.firmware-outdated{background:#ff4d4f1a;border-color:#ff4d4f8c}.device-row-wrap.firmware-outdated .device-row-check{background:#ff4d4f14}.device-row-wrap.firmware-outdated.selected{border-color:#ff4d4fbf;box-shadow:0 0 0 2px #ff4d4f2e}.device-row-wrap.firmware-outdated .device-row:hover{background:#ff4d4f0f}.device-app-ver-outdated{color:#cf1322;font-weight:600}@media (prefers-color-scheme:dark){.device-row-wrap.firmware-outdated{background:#ff4d4f24;border-color:#ff787580}.device-app-ver-outdated{color:#ff7875}}.firmware-target-panel{padding:.25rem 0}.firmware-target-title{margin:0 0 .35rem;font-size:1rem;font-weight:600}.firmware-target-form{flex-wrap:wrap;align-items:flex-end;gap:.75rem 1rem;margin-top:.75rem;display:flex}.firmware-target-label{color:var(--text-soft);flex-direction:column;flex:14rem;gap:.35rem;min-width:min(100%,14rem);font-size:.85rem;font-weight:500;display:flex}.firmware-target-input{font:inherit;border:1px solid var(--border);background:var(--surface,var(--bg));color:var(--text);border-radius:8px;padding:.5rem .65rem;font-size:.95rem}.firmware-target-actions{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.firmware-target-feedback{margin-top:.75rem}.firmware-target-summary{border:1px solid var(--border);background:var(--code-bg);border-radius:8px;margin-top:1rem;padding:.75rem .85rem}.firmware-target-current{margin:0 0 .35rem;font-size:.9rem}.firmware-target-stats{color:var(--text-soft);margin:0;font-size:.85rem}.firmware-target-outdated-count{color:#cf1322;font-weight:600}.firmware-target-ok{color:#389e0d;font-weight:500}.firmware-target-hint{margin:.75rem 0 0;font-size:.85rem}.network-stats-panel{padding:.15rem 0}.network-stats-title{margin:0 0 .35rem;font-size:1rem;font-weight:600}.network-stats-summary{color:var(--text-soft);flex-wrap:wrap;gap:.35rem 1.25rem;margin-bottom:.75rem;font-size:.88rem;display:flex}.network-stats-chart-wrap{border:1px solid var(--border);background:var(--code-bg);box-sizing:border-box;border-radius:10px;width:100%;min-height:280px;padding:.5rem}.network-stats-loading{text-align:center;margin:0;padding:2rem 1rem}.network-stats-chart{width:100%;height:auto;display:block}.network-stats-chart-bg{fill:var(--bg);stroke:none}.network-stats-grid-line{stroke:var(--border);stroke-width:1px;stroke-dasharray:4 4}.network-stats-axis-label{fill:var(--text-muted,var(--text-soft));font-size:11px}.network-stats-line-total{stroke:#1677ff;stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round}.network-stats-area-total{fill:#1677ff1f;stroke:none}.network-stats-axis-unit{fill:var(--text-muted,var(--text-soft));font-size:10px;font-weight:600}.network-stats-legend-single{color:var(--text-soft);align-items:center;gap:.5rem;margin:.85rem 0 0;font-size:.85rem;display:flex}.network-stats-legend-swatch{border-radius:2px;flex-shrink:0;width:10px;height:10px}.network-stats-legend-swatch-total{background:#1677ff}.device-row-check{background:var(--code-bg);cursor:pointer;flex-shrink:0;align-items:center;padding:0 .5rem 0 .75rem;display:flex}.device-row{text-align:left;width:100%;min-width:0;color:inherit;font:inherit;cursor:pointer;background:0 0;border:none;border-radius:0;flex-direction:column;flex:1;align-items:stretch;gap:.45rem;padding:.75rem 1rem;display:flex}.device-row-top{justify-content:space-between;align-items:flex-start;gap:.5rem;min-width:0;display:flex}.device-row-bottom{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;min-width:0;display:flex}.device-row:hover{background:var(--code-bg)}.device-row-wrap.selected .device-row{background:0 0}.device-op-col{text-align:right;flex-shrink:0}.device-op-badge{text-transform:uppercase;letter-spacing:.02em;white-space:nowrap;border-radius:4px;padding:.15rem .4rem;font-size:.65rem;font-weight:600;display:inline-block}.device-op-pending{color:#64748b;background:#64748b26}.device-op-running{color:#a16207;background:#eab30826}.device-op-success{color:#15803d;background:#16a34a26}.device-op-error{color:#b91c1c;background:#dc26261f}.device-op-progress-wrap{padding:0 .75rem .5rem 2.5rem}.device-op-progress-track{background:var(--border);border-radius:2px;height:4px;overflow:hidden}.device-op-progress-fill{background:#2563eb;height:100%;transition:width .25s}.confirm-overlay{z-index:1000;background:#00000073;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.confirm-dialog{background:var(--bg,#fff);border-radius:10px;width:100%;max-width:28rem;padding:1.25rem 1.5rem;box-shadow:0 8px 32px #0003}.confirm-dialog-title{margin:0 0 .75rem;font-size:1.1rem}.confirm-dialog-message{color:var(--text-soft);margin:0 0 1.25rem;font-size:.92rem;line-height:1.5}.confirm-dialog-actions{justify-content:flex-end;gap:.5rem;display:flex}.ops-history-panel{border-top:1px solid var(--border);margin-top:1.5rem;padding-top:1rem}.ops-history-header{justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:.5rem;display:flex}.ops-history-title{margin:0;font-size:1rem}.ops-history-filter{cursor:pointer;align-items:center;gap:.4rem;margin-bottom:.75rem;font-size:.82rem;display:flex}.ops-history-table-wrap{max-height:16rem;overflow:auto}.ops-history-table{font-size:.78rem}.ops-history-row-click{cursor:pointer}.ops-history-row-click:hover{background:var(--code-bg)}.ops-history-peer{font-size:.72rem;display:block}.ops-history-did{color:var(--text-soft);font-size:.68rem;display:block}.ops-history-detail{padding:.5rem 0}.ops-history-pre{background:var(--code-bg);white-space:pre-wrap;word-break:break-word;border-radius:6px;max-height:10rem;margin:.5rem 0 0;padding:.75rem;font-size:.72rem;overflow:auto}.ops-history-err{color:#b91c1c;margin:.25rem 0}.device-peer-block{text-align:left;flex:1;min-width:0}.device-peer{word-break:break-all;font-family:ui-monospace,monospace;font-size:.8rem;display:block}.device-stream-line{margin-top:.3rem;font-size:.68rem;font-weight:500;line-height:1.3;display:block}.device-stream-off{color:var(--text-soft)}.device-stream-wait{color:#a16207}.device-stream-live{color:#166534}.device-id{font-weight:600}.device-id-block{text-align:left;flex-direction:column;flex:1;align-items:flex-start;gap:.2rem;min-width:0;display:flex}.device-app-ver{color:var(--text-soft);text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-family:ui-monospace,monospace;font-size:.65rem;font-weight:600;line-height:1.25;overflow:hidden}.device-net{text-align:right;flex-shrink:0;min-width:4.5rem;font-family:ui-monospace,monospace}.device-net-total{color:var(--text);font-size:.78rem;font-weight:600;line-height:1.25;display:block}.device-net-rate{color:var(--text-soft);font-size:.68rem;line-height:1.2;display:block}.device-net-none{color:var(--text-soft);font-size:.8rem}.pill{text-transform:uppercase;letter-spacing:.04em;border-radius:999px;padding:.2rem .5rem;font-size:.7rem}.pill.yes{color:#166534;background:#16a34a2e}.pill.no{color:var(--text-soft);background:#71717a40}.actions{flex-wrap:wrap;gap:.75rem;display:flex}.btn{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:8px;padding:.55rem 1.1rem;font-weight:500}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.primary{background:var(--text);color:var(--bg);border-color:var(--text)}.btn.secondary{color:var(--text);border-color:var(--text-soft);background:0 0}.btn.secondary:hover:not(:disabled){background:var(--code-bg)}.btn.danger{color:#b91c1c;background:0 0;border-color:#dc26266b}.btn.danger:hover:not(:disabled){background:#dc262614}.btn.danger.reboot{border-style:dashed}.btn.compact{padding:.35rem .65rem;font-size:.78rem}.btn.ghost{padding:.35rem .75rem;font-size:.8rem}.vari-panel{border-top:1px solid var(--border);margin-top:2rem;padding-top:1.5rem}.vari-panel-title{color:var(--text);margin:0 0 .5rem;font-size:1.05rem;font-weight:600}.vari-panel-hint{color:var(--text-soft);margin:0 0 .75rem;font-size:.85rem;line-height:1.5}.vari-preset-bar{flex-wrap:wrap;align-items:center;gap:.4rem .5rem;margin-bottom:.65rem;display:flex}.vari-preset-label{color:var(--text-muted);margin-right:.15rem;font-size:.78rem;font-weight:600}.vari-preset-btn{padding:.3rem .55rem;font-size:.75rem}.vari-textarea{box-sizing:border-box;border:1px solid var(--border);background:var(--bg);width:100%;color:var(--text);resize:vertical;border-radius:8px;min-height:10rem;margin-bottom:.75rem;padding:.65rem .75rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.8rem;line-height:1.45}.vari-textarea:disabled{opacity:.55;cursor:not-allowed}.vari-wait-label{color:var(--text-soft);align-items:center;gap:.5rem;margin-bottom:.75rem;font-size:.85rem;display:flex}.vari-wait-input{border:1px solid var(--border);background:var(--bg);width:4.5rem;color:var(--text);border-radius:6px;padding:.35rem .5rem;font-size:.85rem}.vari-response-block{margin-top:1rem}.vari-response-title{color:var(--text);margin:0 0 .5rem;font-size:.95rem;font-weight:600}.vari-response-xml{border:1px solid var(--border);background:color-mix(in srgb, var(--bg) 88%, var(--border));max-height:22rem;color:var(--text);white-space:pre-wrap;word-break:break-word;border-radius:8px;margin:0;padding:.75rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.75rem;line-height:1.45;overflow:auto}.vari-actions{flex-wrap:wrap;gap:.5rem;margin-bottom:.5rem;display:flex}.vari-muted{margin:0 0 .5rem;font-size:.85rem}.vari-feedback{margin-top:.75rem;margin-bottom:0}.encoder-panel{margin-top:.25rem}.encoder-chn-title{color:var(--text);margin:1.25rem 0 .5rem;font-size:.95rem;font-weight:600}.encoder-chn-table-wrap{border:1px solid var(--border);background:color-mix(in srgb, var(--bg) 92%, var(--border));border-radius:8px;margin-bottom:1rem;overflow-x:auto}.encoder-chn-table{border-collapse:collapse;width:100%;font-size:.78rem}.encoder-chn-table th,.encoder-chn-table td{border-bottom:1px solid var(--border);vertical-align:middle;text-align:left;padding:.35rem .45rem}.encoder-chn-table th{color:var(--text-muted);white-space:nowrap;font-size:.68rem;font-weight:600}.encoder-chn-table tr:last-child td{border-bottom:none}.cfg-input-table{min-width:4.5rem;max-width:8rem;padding:.25rem .35rem;font-size:.75rem}.encoder-col-hint{color:var(--text-soft);margin-top:.15rem;font-size:.62rem;display:block}.cfg-field-check-tight{justify-content:center;margin:0}.osd-flags-grid{grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));gap:.35rem 1rem;display:grid}.general-panel{margin-top:.25rem}.general-subheading{color:var(--text-muted);grid-column:1/-1;margin:.75rem 0 .25rem;font-size:.8rem;font-weight:600}.cfg-field-row-actions .cfg-inline-buttons{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.general-other-grid{margin-top:.5rem}.vari-example-line{word-break:break-word}.vari-example-xml{word-break:break-all;font-size:.75rem;display:inline}.cfg-plate-channels{grid-column:1/-1}.cfg-plate-chbits{flex-wrap:wrap;gap:.5rem 1rem;margin:.35rem 0;display:flex}.ai1400-panel{margin-top:.25rem}.net-panel{border-top:1px solid var(--border);margin-top:2.5rem;padding-top:1.5rem}.net-panel-title{color:var(--text);margin:0 0 .5rem;font-size:1.1rem;font-weight:600}.net-panel-hint{color:var(--text-soft);margin:0 0 1rem;font-size:.85rem;line-height:1.5}.net-table{border-collapse:collapse;width:100%;font-size:.85rem}.net-table th,.net-table td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:.5rem .6rem}.net-table th{color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;font-size:.72rem;font-weight:600}.net-row-selected{background:#16a34a14}.net-host{word-break:break-all;font-size:.8rem;display:block}.net-device-id{color:var(--text-soft);margin-top:.2rem;font-size:.75rem;font-weight:600;display:block}.net-total{color:var(--text-soft);margin:1rem 0 0;font-size:.88rem;line-height:1.5}.net-total strong{color:var(--text);font-weight:600}.hls-player-wrap{border:1px solid var(--border);background:#0a0a0c;border-radius:10px;margin:1.25rem 0 1.5rem;overflow:hidden}.hls-player-head{border-bottom:1px solid var(--border);background:#ffffff0a;flex-direction:column;gap:.35rem;padding:.65rem .85rem;display:flex}.hls-player-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-size:.72rem;font-weight:600}.hls-player-status{color:var(--text-soft);font-size:.78rem;line-height:1.4}.hls-player-status-err{color:#b91c1c}.hls-player-status-warn{color:#c97a06}@media (prefers-color-scheme:dark){.hls-player-status-warn{color:#fbbf24}}.hls-player-src{color:var(--text-soft);word-break:break-all;max-width:100%;font-size:.65rem;line-height:1.35;display:block}.hls-video{aspect-ratio:16/9;object-fit:contain;vertical-align:middle;background:#000;width:100%;max-height:min(50vh,22rem);display:block}.device-config-panel{margin-top:1rem;padding-top:1.25rem}.config-tabs{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:.35rem;margin:.75rem 0 1rem;padding-bottom:.35rem;display:flex}.config-tab{font:inherit;color:var(--text-soft);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px 8px 0 0;padding:.45rem .9rem;font-size:.88rem;font-weight:500}.config-tab:hover{color:var(--text);background:var(--code-bg)}.config-tab.active{color:var(--text);border-color:var(--border);background:var(--bg);border-bottom-color:#0000;margin-bottom:-1px}.config-tab-panel{min-width:0}.config-toolbar{flex-wrap:wrap;align-items:center;gap:.65rem 1rem;margin-bottom:1rem;display:flex}.cfg-wait-inline{color:var(--text-soft);align-items:center;gap:.45rem;margin-left:auto;font-size:.85rem;display:inline-flex}.cfg-fieldset{border:1px solid var(--border);border-radius:10px;min-width:0;margin:0 0 1rem;padding:.85rem 1rem 1rem}.cfg-legend{color:var(--text);padding:0 .35rem;font-size:.82rem;font-weight:600}.cfg-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.65rem 1rem;display:grid}.cfg-field{flex-direction:column;gap:.25rem;min-width:0;display:flex}.cfg-field-label{color:var(--text);font-size:.78rem;font-weight:500}.cfg-field-key{color:var(--text-muted);word-break:break-all;font-family:ui-monospace,monospace;font-size:.65rem}.cfg-input{border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:6px;padding:.4rem .55rem;font-family:ui-monospace,monospace;font-size:.82rem}.cfg-encoder-playback-hint{color:var(--text-soft);grid-column:1/-1;margin:0;font-size:.76rem;line-height:1.45}.network-header-bar{border:1px solid var(--border);background:color-mix(in srgb, var(--bg) 92%, var(--border));border-radius:10px;margin-bottom:1rem;padding:.85rem 1rem}.network-header-fields{flex-wrap:wrap;align-items:flex-end;gap:1rem 1.5rem;display:flex}.network-subtabs{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:.35rem;margin:0 0 1rem;padding:.25rem 0;display:flex}.network-subtab{font:inherit;color:var(--text-soft);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px 6px 0 0;padding:.4rem .75rem;font-size:.82rem;font-weight:500}.network-subtab:hover{color:var(--text);background:var(--code-bg)}.network-subtab.active{color:var(--text);border-color:var(--border);border-bottom-color:var(--bg);background:var(--bg);margin-bottom:-1px}.cfg-advanced{margin-top:.75rem;font-size:.85rem}.cfg-advanced summary{cursor:pointer;color:var(--text-soft);font-weight:500}.cfg-grid-tight{margin-top:.65rem}.cfg-field-hint{color:var(--text-muted);font-size:.72rem}.cfg-field-check{flex-direction:row;align-items:center;gap:.5rem}.cfg-field-check .cfg-field-label{margin:0}.cfg-field-ip .cfg-field-label,.cfg-field-ip .cfg-field-key{display:block}.cfg-ip-quads{flex-wrap:wrap;align-items:center;gap:.15rem;display:flex}.cfg-ip-seg{align-items:center;gap:.15rem;display:inline-flex}.cfg-ip-octet{text-align:center;width:3.1rem;padding-left:.25rem;padding-right:.25rem}.cfg-ip-dot{color:var(--text-muted);-webkit-user-select:none;user-select:none;font-weight:600}.cfg-fieldset-active{margin-top:.5rem}.cfg-device-id-hint{color:var(--text-soft);margin:0 0 .75rem;font-size:.85rem}.config-toolbar-footer{margin-bottom:1rem}.firmware-panel{border-top:1px solid var(--border);margin-top:.5rem;padding-top:.75rem}.firmware-form{flex-wrap:wrap;align-items:flex-end;gap:.65rem 1rem;display:flex}.firmware-file-label{flex-direction:column;flex:12rem;gap:.3rem;min-width:0;font-size:.82rem;display:flex}.firmware-label-text{color:var(--text-soft)}.firmware-progress-wrap{flex-direction:column;gap:.5rem;margin-top:.75rem;font-size:.78rem;display:flex}.firmware-progress-row{grid-template-columns:minmax(7rem,1fr) 1fr auto;align-items:center;gap:.5rem;display:grid}.firmware-progress-caption{color:var(--text-soft);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.firmware-progress-track{background:var(--border);border-radius:4px;min-width:0;height:8px;overflow:hidden}.firmware-progress-fill{background:linear-gradient(90deg,#0ea5e9,#2563eb);border-radius:4px;height:100%;transition:width .2s}.firmware-progress-fill-device{background:linear-gradient(90deg,#16a34a,#15803d)}.firmware-progress-pct{color:var(--text-muted);font-variant-numeric:tabular-nums;text-align:right;min-width:2.25rem}.firmware-ota-status{color:var(--text-soft);margin:.15rem 0 0;font-size:.76rem;line-height:1.35}.firmware-subtabs{margin-bottom:.75rem}.firmware-tab-panel{margin-top:.35rem}.firmware-hint{color:var(--text-soft);margin:0 0 .75rem;font-size:.82rem;line-height:1.45}.firmware-toolbar{margin-bottom:.5rem}.firmware-lib-table-wrap{margin-bottom:.85rem}.firmware-lib-col-radio{width:2rem}.firmware-lib-col-actions{text-align:right;width:5.5rem}.firmware-lib-actions{text-align:right;vertical-align:middle}.firmware-lib-empty{color:var(--text-muted);font-size:.82rem}.firmware-lib-date{font-variant-numeric:tabular-nums;color:var(--text-soft);font-size:.8rem}.firmware-code,.firmware-code-name{word-break:break-all;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.78rem}.firmware-form-inline{margin-bottom:1rem}.firmware-save-block{border-top:1px dashed var(--border);margin-top:.5rem;padding-top:.85rem}.firmware-save-legend{color:var(--text-muted);margin:0 0 .5rem;font-size:.8rem;font-weight:600}.recording-timeline-panel{border:1px solid var(--border);background:var(--code-bg,#00000005);border-radius:10px;margin-top:.5rem;padding:1rem 1rem 1.1rem}.recording-timeline-title{margin:0 0 .35rem;font-size:1rem;font-weight:600}.recording-timeline-lead{color:var(--text-soft);margin:0 0 .85rem;font-size:.82rem;line-height:1.45}.recording-timeline-controls{flex-wrap:wrap;align-items:flex-end;gap:.75rem 1rem;display:flex}.recording-timeline-label{color:var(--text-muted);flex-direction:column;gap:.25rem;font-size:.78rem;font-weight:600;display:flex}.recording-timeline-input{font:inherit;border:1px solid var(--border);border-radius:6px;min-width:0;padding:.35rem .5rem;font-size:.85rem}.recording-timeline-channel{width:4rem}.recording-timeline-err{margin-top:.65rem}.recording-timeline-table-wrap{border:1px solid var(--border);border-radius:8px;margin-top:.75rem;overflow-x:auto}.recording-timeline-table{border-collapse:collapse;width:100%;font-size:.82rem}.recording-timeline-table th,.recording-timeline-table td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:.5rem .65rem}.recording-timeline-table th{background:#00000008;font-size:.78rem;font-weight:600}.recording-timeline-table tr:last-child td{border-bottom:none}.recording-path{word-break:break-all;font-size:.76rem}.recording-download-cell{vertical-align:middle;min-width:9rem}.recording-download-action{flex-direction:column;align-items:flex-start;gap:.35rem;display:flex}.recording-download-btn{white-space:nowrap}.recording-download-progress{background:#00000014;border-radius:2px;width:100%;max-width:8rem;height:4px;overflow:hidden}.recording-download-progress-bar{background:var(--accent,#2563eb);height:100%;transition:width .2s}.recording-download-err{color:#b91c1c;text-overflow:ellipsis;white-space:nowrap;max-width:10rem;font-size:.72rem;overflow:hidden}.recording-download-ok{font-size:.72rem}.playback-panel{margin-top:1rem}.playback-controls{align-items:flex-end}.playback-path-label{flex:220px;min-width:0}.playback-path-input{width:100%;max-width:100%}.playback-hint{margin-top:.65rem}.playback-video-wrap{margin-top:.5rem}.recording-timeline-visual{border-top:1px solid var(--border);margin-top:1rem;padding-top:.85rem}.recording-timeline-visual-title{margin:0 0 .65rem;font-size:.92rem;font-weight:600}.recording-timeline-chart-empty{margin:.35rem 0 0;font-size:.82rem}.recording-timeline-chart-axis{color:var(--text-muted);font-variant-numeric:tabular-nums;justify-content:space-between;margin-bottom:.35rem;font-size:.72rem;display:flex}.recording-timeline-rail{border:1px solid var(--border);cursor:crosshair;background:linear-gradient(#0000000a 0%,#00000005 100%);border-radius:8px;height:3.25rem;position:relative;overflow:hidden}.recording-timeline-rail.is-disabled{opacity:.55;cursor:not-allowed}.recording-timeline-chunk{cursor:pointer;background:linear-gradient(#3b82f6 0%,#2563eb 100%);border:none;border-radius:4px;min-width:2px;padding:0;transition:filter .12s,box-shadow .12s;position:absolute;top:.45rem;bottom:.45rem;overflow:hidden;box-shadow:inset 0 1px #ffffff40}.recording-timeline-chunk:hover{filter:brightness(1.08);z-index:2}.recording-timeline-chunk.is-selected{z-index:3;background:linear-gradient(#60a5fa 0%,#1d4ed8 100%);box-shadow:0 0 0 2px #2563eb59,inset 0 1px #ffffff4d}.recording-timeline-chunk-label{color:#fffffff2;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;padding:.15rem .25rem;font-size:.62rem;font-weight:600;display:block;overflow:hidden}.recording-timeline-playhead{pointer-events:none;z-index:4;background:#f59e0b;width:2px;margin-left:-1px;position:absolute;top:0;bottom:0;box-shadow:0 0 0 1px #f59e0b59}.recording-timeline-chart-hint{margin:.45rem 0 0;font-size:.76rem;line-height:1.4}.recording-timeline-selection{margin-top:.75rem}.recording-timeline-selection-summary{margin:0 0 .55rem;font-size:.82rem;line-height:1.45}.recording-timeline-selection-actions{flex-wrap:wrap;align-items:flex-end;gap:.65rem .85rem;display:flex}.recording-timeline-window-label{margin:0}.recording-timeline-selection-empty{margin:0;font-size:.82rem}.recording-timeline-row-selected td{background:#2563eb14}.recording-timeline-table tbody tr{cursor:pointer}.recording-timeline-table tbody tr:hover td{background:#00000005}
