.status-dot{background:var(--danger);border-radius:50%;flex:none;block-size:9px;inline-size:9px;position:relative}.status-dot.is-online{background:var(--success)}.status-dot.is-online:after{content:"";box-shadow:0 0 0 0 color-mix(in srgb, var(--success) 45%, transparent);border-radius:50%;animation:.9s ease-out dot-ping;position:absolute;inset:0}@keyframes dot-ping{to{box-shadow:0 0 0 7px color-mix(in srgb, var(--success) 0%, transparent)}}:root,[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-base:#f3f5fa;--bg-card:#fff;--bg-elev:#f8fafc;--bg-input:#f1f5f9;--bg-dark:#0f172a;--surface-2:#eef2f7;--text:#0f172a;--text-sec:#64748b;--text-mute:#94a3b8;--border:#e2e8f0;--border-subtle:#eef2f6;--border-strong:#cbd5e1;--primary:#4f46e5;--primary-700:#4338ca;--primary-50:#eef2ff;--primary-100:#e0e7ff;--primary-fill:#4f46e5;--primary-fill-hover:#4338ca;--primary-fill-active:#3730a3;--on-primary:#fff;--accent:#06b6d4;--success:#10b981;--success-bg:#d1fae5;--success-bd:#a7f3d0;--warn:#f59e0b;--warn-bg:#fef3c7;--warn-bd:#fde68a;--danger:#ef4444;--danger-bg:#fee2e2;--danger-bd:#fecaca;--info:#4f46e5;--info-bg:#eef2ff;--info-bd:#c7d2fe;--neutral-bg:#f1f5f9;--neutral-bd:#e2e8f0;--success-ink:#047857;--warn-ink:#b45309;--danger-ink:#b91c1c;--info-ink:#4338ca;--success-solid:#059669;--on-success:#fff;--danger-solid:#dc2626;--on-danger:#fff;--warn-solid:#f59e0b;--on-warn:#451a03;--fill-shade:#000;--log-bg:#0d1420;--code-fg:#ccd6e4;--code-dim:#7b89a0;--code-ok:#4ade80;--code-warn:#fbbf24;--code-err:#ff8a85;--code-info:#7fb0ff;--code-rail:#22314a;--font:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang TC", "Noto Sans TC", "Microsoft JhengHei", "Heiti TC", "Apple LiGothic", sans-serif;--mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Cascadia Mono", "Liberation Mono", "Noto Sans Mono CJK TC", monospace;--fs-100:.6875rem;--fs-200:.75rem;--fs-300:.8125rem;--fs-400:.875rem;--fs-500:.9375rem;--fs-600:1.0625rem;--fs-700:1.3125rem;--fs-800:1.625rem;--fw-normal:400;--fw-medium:500;--fw-semi:600;--fw-bold:700;--lh-tight:1.25;--lh-snug:1.4;--lh-base:1.55;--lh-mono:1.62;--sp-0:2px;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--r-xs:4px;--r-sm:6px;--r:10px;--r-lg:14px;--r-pill:999px;--shadow-sm:0 1px 2px #1018280d;--shadow:0 1px 2px #1018280d, 0 6px 16px -6px #1018281a;--shadow-lg:0 2px 6px #1018280f, 0 14px 36px -10px #1018282e;--shadow-focus:0 0 0 3px #4f46e533;--ease:cubic-bezier(.2, 0, 0, 1);--t-fast:.11s cubic-bezier(.2, 0, 0, 1);--t-base:.18s cubic-bezier(.2, 0, 0, 1);--shell-max:1200px;--caret:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%234f46e5' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>")}[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-base:#0b1120;--bg-card:#141c2e;--bg-elev:#1c2439;--bg-input:#0f1626;--bg-dark:#060a14;--surface-2:#182033;--text:#e2e8f0;--text-sec:#94a3b8;--text-mute:#8593a8;--border:#ffffff14;--border-subtle:#ffffff0d;--border-strong:#ffffff38;--primary:#818cf8;--primary-700:#c7d2fe;--primary-50:#1e1b4b;--primary-100:#312e81;--primary-fill:#4f46e5;--primary-fill-hover:#6366f1;--primary-fill-active:#4338ca;--on-primary:#fff;--accent:#22d3ee;--success:#34d399;--success-bg:#052e23;--success-bd:#10603f;--warn:#fbbf24;--warn-bg:#2e2205;--warn-bd:#78561a;--danger:#f87171;--danger-bg:#2f1212;--danger-bd:#7f2d2d;--info:#818cf8;--info-bg:#1e1b4b;--info-bd:#3730a3;--neutral-bg:#1b2334;--neutral-bd:#2a3446;--success-ink:#6ee7b7;--warn-ink:#fcd34d;--danger-ink:#fca5a5;--info-ink:#c7d2fe;--success-solid:#059669;--on-success:#fff;--danger-solid:#dc2626;--on-danger:#fff;--warn-solid:#f59e0b;--on-warn:#451a03;--fill-shade:#fff;--log-bg:#060a14;--shadow-sm:0 1px 2px #00000080;--shadow:0 1px 2px #00000080, 0 6px 16px -6px #0009;--shadow-lg:0 2px 8px #00000080, 0 16px 40px -10px #000000b3;--shadow-focus:0 0 0 3px #818cf857;--caret:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23818cf8' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>")}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-base:#0b1120;--bg-card:#141c2e;--bg-elev:#1c2439;--bg-input:#0f1626;--bg-dark:#060a14;--surface-2:#182033;--text:#e2e8f0;--text-sec:#94a3b8;--text-mute:#8593a8;--border:#ffffff14;--border-subtle:#ffffff0d;--border-strong:#ffffff38;--primary:#818cf8;--primary-700:#c7d2fe;--primary-50:#1e1b4b;--primary-100:#312e81;--primary-fill:#4f46e5;--primary-fill-hover:#6366f1;--primary-fill-active:#4338ca;--on-primary:#fff;--accent:#22d3ee;--success:#34d399;--success-bg:#052e23;--success-bd:#10603f;--warn:#fbbf24;--warn-bg:#2e2205;--warn-bd:#78561a;--danger:#f87171;--danger-bg:#2f1212;--danger-bd:#7f2d2d;--info:#818cf8;--info-bg:#1e1b4b;--info-bd:#3730a3;--neutral-bg:#1b2334;--neutral-bd:#2a3446;--success-ink:#6ee7b7;--warn-ink:#fcd34d;--danger-ink:#fca5a5;--info-ink:#c7d2fe;--success-solid:#059669;--on-success:#fff;--danger-solid:#dc2626;--on-danger:#fff;--warn-solid:#f59e0b;--on-warn:#451a03;--fill-shade:#fff;--log-bg:#060a14;--shadow-sm:0 1px 2px #00000080;--shadow:0 1px 2px #00000080, 0 6px 16px -6px #0009;--shadow-lg:0 2px 8px #00000080, 0 16px 40px -10px #000000b3;--shadow-focus:0 0 0 3px #818cf857;--caret:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23818cf8' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>")}}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}html{overflow-x:clip}body{font-family:var(--font);font-size:var(--fs-400);line-height:var(--lh-base);background:var(--bg-base);color:var(--text);padding:var(--sp-5) var(--sp-5) 72px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;overflow-x:clip}.container{max-width:var(--shell-max);margin:0 auto}.hidden{display:none!important}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{box-shadow:var(--shadow-focus);border-color:var(--primary);outline:none}::selection{background:color-mix(in srgb, var(--primary) 26%, transparent);color:var(--text)}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:color-mix(in srgb, var(--border-strong) 55%, transparent);border-radius:var(--r-pill);background-clip:content-box;border:2px solid #0000}::-webkit-scrollbar-thumb:hover{background-color:var(--border-strong)}h1,h2,h3{line-height:var(--lh-tight);letter-spacing:-.01em;color:var(--text);font-weight:var(--fw-semi)}pre,.mono{font-family:var(--mono);font-size:var(--fs-200);font-variant-numeric:tabular-nums}pre{max-width:100%;overflow:auto}.small{font-size:var(--fs-200);color:var(--text-sec);line-height:var(--lh-snug)}.mono{overflow-wrap:anywhere}.header{align-items:center;gap:var(--sp-3);padding:var(--sp-1) var(--sp-1) var(--sp-4);border-bottom:1px solid var(--border);margin-bottom:var(--sp-5);display:flex}.header .brand{align-items:center;gap:var(--sp-3);flex:1;min-width:0;display:flex}.header .brand img.logo{flex-shrink:0;width:30px;height:30px}.header h1{font-size:var(--fs-700);font-weight:var(--fw-semi);letter-spacing:-.02em;color:var(--text)}.header .meta{align-items:center;gap:var(--sp-2);font-size:var(--fs-200);color:var(--text-sec);flex-shrink:0;display:flex}.header .meta strong{color:var(--text);font-weight:var(--fw-semi)}.err-msg{color:var(--danger-ink);font-size:var(--fs-300);margin-top:var(--sp-2);font-weight:var(--fw-medium)}label{font-size:var(--fs-100);color:var(--text-sec);margin:var(--sp-3) 0 var(--sp-1);font-weight:var(--fw-semi);letter-spacing:.05em;text-transform:uppercase;display:block}input,select,textarea{width:100%;padding:8px var(--sp-3);border:1px solid var(--border-strong);border-radius:var(--r-sm);font-size:var(--fs-400);font-family:inherit;line-height:var(--lh-snug);background:var(--bg-input);color:var(--text);transition:border-color var(--t-fast), box-shadow var(--t-fast), background var(--t-fast)}input:hover:not(:disabled),select:hover:not(:disabled),textarea:hover:not(:disabled){border-color:var(--text-sec)}input:focus,select:focus,textarea:focus{background:var(--bg-card);border-color:var(--primary);box-shadow:var(--shadow-focus);outline:none}input::placeholder,textarea::placeholder{color:var(--text-mute);opacity:1}input:disabled,select:disabled,textarea:disabled{background:var(--neutral-bg);border-color:var(--border);color:var(--text-mute);cursor:not-allowed}input[type=checkbox],input[type=radio]{width:auto;accent-color:var(--primary-fill);cursor:pointer}textarea{line-height:var(--lh-base);resize:vertical}select.gw-picker{appearance:none;padding:10px 38px 10px var(--sp-3);font-size:var(--fs-400);font-weight:var(--fw-semi);background-color:var(--bg-card);background-image:var(--caret);background-repeat:no-repeat;background-position:right var(--sp-3) center;border:1px solid var(--border-strong);cursor:pointer}select.gw-picker:hover{border-color:var(--primary);background-color:var(--bg-card)}select.gw-picker:focus{background-color:var(--bg-card);background-image:var(--caret);border-color:var(--primary)}select.gw-picker option{font-weight:var(--fw-normal);padding:var(--sp-2);background:var(--bg-card);color:var(--text)}button{width:100%;padding:8px var(--sp-4);background:var(--primary-fill);color:var(--on-primary);border-radius:var(--r-sm);cursor:pointer;font-size:var(--fs-400);font-weight:var(--fw-semi);font-family:inherit;line-height:var(--lh-snug);letter-spacing:.005em;transition:background var(--t-fast), border-color var(--t-fast), color var(--t-fast), box-shadow var(--t-fast);justify-content:center;align-items:center;gap:var(--sp-2);border:1px solid #0000;display:inline-flex}button:hover:not(:disabled){background:var(--primary-fill-hover)}button:active:not(:disabled){background:var(--primary-fill-active)}button:disabled{background:var(--neutral-bg);color:var(--text-mute);border-color:var(--neutral-bd);cursor:not-allowed;box-shadow:none;opacity:1}button.success{background:var(--success-solid);color:var(--on-success)}button.success:hover:not(:disabled){background:color-mix(in srgb, var(--success-solid) 84%, var(--fill-shade))}button.danger{background:var(--danger-solid);color:var(--on-danger)}button.danger:hover:not(:disabled){background:color-mix(in srgb, var(--danger-solid) 84%, var(--fill-shade))}button.warn{background:var(--warn-solid);color:var(--on-warn)}button.warn:hover:not(:disabled){background:color-mix(in srgb, var(--warn-solid) 84%, var(--fill-shade))}button.ghost{background:var(--bg-card);color:var(--text);border:1px solid var(--border-strong)}button.ghost:hover:not(:disabled){background:var(--bg-elev);border-color:var(--text-sec)}button.ghost:disabled{background:var(--neutral-bg);color:var(--text-mute);border-color:var(--neutral-bd)}button.ic-only{border-radius:var(--r-sm);flex:none;width:32px;height:32px;padding:0}.ic{flex-shrink:0;width:16px;height:16px}.row{gap:var(--sp-3);display:flex}.row>*{flex:1;min-width:0}.pill{align-items:center;gap:var(--sp-1);padding:2px var(--sp-2);border-radius:var(--r-pill);font-size:var(--fs-100);font-weight:var(--fw-semi);letter-spacing:.02em;white-space:nowrap;background:var(--neutral-bg);border:1px solid var(--neutral-bd);color:var(--text-sec);line-height:1.6;display:inline-flex}.pill.ok{background:var(--success-bg);border-color:var(--success-bd);color:var(--success-ink)}.pill.err{background:var(--danger-bg);border-color:var(--danger-bd);color:var(--danger-ink)}.pill.warn{background:var(--warn-bg);border-color:var(--warn-bd);color:var(--warn-ink)}.pill.info{background:var(--info-bg);border-color:var(--info-bd);color:var(--info-ink)}.pill .dot{background:currentColor;border-radius:50%;flex:none;width:6px;height:6px}.pill.ok .dot{background:var(--success)}.pill.err .dot{background:var(--danger)}.pill.warn .dot{background:var(--warn)}.pill.info .dot{background:var(--info)}.pill.ok .dot{box-shadow:0 0 0 3px color-mix(in srgb, var(--success) 20%, transparent)}.dot.connected,.led.connected,.connected>.dot,.connected>.led{background:var(--success);box-shadow:0 0 0 3px color-mix(in srgb, var(--success) 22%, transparent)}.pill.connected,#status-pill.connected{background:var(--success-bg);border-color:var(--success-bd);color:var(--success-ink)}#status-pill{gap:var(--sp-1);padding:2px var(--sp-2) 2px 6px}.pill.offline,.dot.offline,.led.offline,.stat-chip.offline{background:var(--danger-bg);border-color:var(--danger-bd);color:var(--danger-ink)}.dot.offline,.led.offline{background:var(--danger);box-shadow:none}.mi-fw{font-variant-numeric:tabular-nums}.ver-badge{align-items:center;gap:var(--sp-1);border-radius:var(--r-pill);font-size:var(--fs-100);font-weight:var(--fw-semi);background:var(--warn-bg);color:var(--warn-ink);border:1px solid var(--warn-bd);white-space:nowrap;padding:1px 7px;display:inline-flex}.ver-badge.latest{background:var(--success-bg);color:var(--success-ink);border-color:var(--success-bd)}.own-badge{align-items:center;gap:var(--sp-1);padding:1px var(--sp-2);border-radius:var(--r-pill);font-size:var(--fs-100);font-weight:var(--fw-semi);letter-spacing:.02em;white-space:nowrap;border:1px solid var(--neutral-bd);background:var(--neutral-bg);color:var(--text-sec);flex-shrink:0;display:inline-flex}.own-badge svg{width:10px;height:10px}.own-badge.mine{background:var(--info-bg);border-color:var(--info-bd);color:var(--primary-700)}.own-badge.shared{background:color-mix(in srgb, var(--accent) 12%, var(--bg-card));border-color:color-mix(in srgb, var(--accent) 34%, transparent);color:var(--accent)}.own-badge.others{background:var(--neutral-bg);border-color:var(--neutral-bd);color:var(--text-sec)}.own-badge.free{background:var(--warn-bg);border-color:var(--warn-bd);color:var(--warn-ink)}.copy-btn{width:auto;min-height:0;margin-left:var(--sp-1);border:1px solid var(--border-strong);border-radius:var(--r-xs);color:var(--text-sec);cursor:pointer;font-size:var(--fs-100);vertical-align:middle;background:0 0;flex:none;align-items:center;gap:3px;padding:1px 5px;line-height:1.5;display:inline-flex}.copy-btn:hover:not(:disabled){color:var(--primary);border-color:var(--primary);background:var(--primary-50)}.copy-btn svg{width:11px;height:11px}.filter-chips{gap:var(--sp-1);flex-wrap:wrap;display:inline-flex}.filter-chips button{width:auto;padding:5px var(--sp-3);font-size:var(--fs-300);font-weight:var(--fw-medium);background:var(--bg-card);color:var(--text-sec);border:1px solid var(--border-strong);border-radius:var(--r-pill)}.filter-chips button:hover:not(:disabled){background:var(--bg-elev);color:var(--text);border-color:var(--text-sec)}.filter-chips button.on{background:var(--primary-fill);color:var(--on-primary);border-color:var(--primary-fill);font-weight:var(--fw-semi)}.filter-chips button.on:hover:not(:disabled){background:var(--primary-fill-hover);color:var(--on-primary);border-color:var(--primary-fill-hover)}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-5);margin-bottom:var(--sp-4);box-shadow:var(--shadow-sm)}.card h2{font-size:var(--fs-500);font-weight:var(--fw-semi);color:var(--text);margin-bottom:var(--sp-4);padding-bottom:var(--sp-3);border-bottom:1px solid var(--border-subtle);align-items:center;gap:var(--sp-2);display:flex}.card h2 .ic{width:16px;height:16px;color:var(--text-sec)}.card .card-head{align-items:center;gap:var(--sp-3);display:flex}.stat-grid{gap:var(--sp-3);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));display:grid}.tab-bar{gap:var(--sp-0);padding:var(--sp-1);margin-bottom:var(--sp-5);background:var(--bg-elev);border-radius:var(--r);border:1px solid var(--border);display:inline-flex}.tab-bar button{color:var(--text-sec);padding:6px var(--sp-4);font-weight:var(--fw-medium);font-size:var(--fs-400);border-radius:var(--r-sm);background:0 0;border:none;align-items:center;gap:6px;width:auto;display:inline-flex}.tab-bar button:hover:not(.active):not(:disabled){color:var(--text);background:var(--bg-card)}.tab-bar button .ic{width:14px;height:14px}.tab-bar button.active{background:var(--primary-fill);color:var(--on-primary);font-weight:var(--fw-semi);box-shadow:var(--shadow-sm)}.tab-bar button.active:hover{background:var(--primary-fill);color:var(--on-primary)}.tab-content{animation:fade-in .2s var(--ease)}#batch-bar{align-items:center;gap:var(--sp-2);margin:var(--sp-3) 0;padding:var(--sp-2) var(--sp-3);background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r);font-size:var(--fs-300);color:var(--text-sec);flex-wrap:wrap;display:flex}#batch-bar.hidden{display:none}#batch-bar button{width:auto;padding:5px var(--sp-3);font-size:var(--fs-300)}#batch-bar .sep{background:var(--border);align-self:stretch;width:1px}.gw-select{width:16px;height:16px;accent-color:var(--primary-fill);cursor:pointer;flex:none;margin:0}.health-toolbar{margin-bottom:var(--sp-4);gap:var(--sp-3);flex-direction:column;display:flex}.health-stats{gap:var(--sp-2);flex-wrap:wrap;display:flex}.health-stats .stat-chip{padding:5px var(--sp-3);border-radius:var(--r-sm);background:var(--bg-card);border:1px solid var(--border);font-size:var(--fs-300);font-weight:var(--fw-medium);color:var(--text-sec);box-shadow:var(--shadow-sm);align-items:center;gap:6px;display:inline-flex}.health-stats .stat-chip .n{font-size:var(--fs-500);font-weight:var(--fw-bold);color:var(--text);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.health-stats .stat-chip .dot{border-radius:50%;flex:none;width:7px;height:7px}.health-stats .stat-chip.on .dot{background:var(--success)}.health-stats .stat-chip.off .dot{background:var(--danger)}.health-stats .stat-chip.free .dot{background:var(--warn)}.health-controls{gap:var(--sp-2);flex-wrap:wrap;align-items:center;display:flex}.health-controls select{flex:none;width:auto}.health-search{flex:1;min-width:180px;position:relative}.health-search svg{left:var(--sp-3);width:15px;height:15px;color:var(--text-mute);pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.health-search input{padding-left:34px}.gw-grid{gap:var(--sp-3);grid-template-columns:1fr;display:grid}.gw-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);transition:border-color var(--t-base);flex-direction:column;display:flex;overflow:hidden;container-type:inline-size}.gw-card:hover{border-color:var(--border-strong)}.gw-card .gw-head{align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4) var(--sp-3) var(--sp-4);background:var(--bg-elev);border-bottom:1px solid var(--border);color:var(--text);display:flex;position:relative}.gw-card .gw-head:before{content:"";background:var(--success);width:3px;position:absolute;top:0;bottom:0;left:0}.gw-card.offline{border-color:var(--danger-bd)}.gw-card.offline .gw-head{background:var(--danger-bg);border-bottom-color:var(--danger-bd)}.gw-card.offline .gw-head:before{background:var(--danger)}.gw-card .gw-head .led{background:var(--success);width:8px;height:8px;box-shadow:0 0 0 3px color-mix(in srgb, var(--success) 20%, transparent);border-radius:50%;flex-shrink:0}.gw-card.offline .gw-head .led{background:var(--danger);box-shadow:none;opacity:1}.gw-card .gw-mac{font-family:var(--mono);font-weight:var(--fw-semi);font-size:var(--fs-400);color:var(--text);text-overflow:ellipsis;white-space:nowrap;letter-spacing:.01em;flex:1;min-width:0;overflow:hidden}.gw-card .gw-pill{font-size:var(--fs-100);padding:1px var(--sp-2);border-radius:var(--r-pill);background:var(--success-bg);border:1px solid var(--success-bd);color:var(--success-ink);font-weight:var(--fw-semi);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;flex-shrink:0}.gw-card.offline .gw-pill{background:color-mix(in srgb, var(--danger) 12%, var(--bg-card));border-color:var(--danger-bd);color:var(--danger-ink)}.gw-card .gw-head .own-badge{background:var(--bg-card);border-color:var(--border);color:var(--text-sec)}.gw-card .gw-head .copy-btn{border-color:var(--border-strong);color:var(--text-sec)}.gw-card .gw-head .copy-btn:hover{border-color:var(--primary);color:var(--primary)}.gw-card .gw-rename{width:auto;min-height:0;color:var(--text-mute);cursor:pointer;border-radius:var(--r-xs);font-size:var(--fs-300);background:0 0;border:1px solid #0000;flex:none;padding:2px 6px;line-height:1.4}.gw-card .gw-rename:hover{background:var(--bg-card);border-color:var(--border-strong);color:var(--text)}.gw-card .gw-body{padding:var(--sp-3) var(--sp-4)}.gw-card .gw-meta{font-size:var(--fs-200);color:var(--text-sec);margin-bottom:var(--sp-3);gap:var(--sp-3);flex-wrap:wrap;align-items:center;display:flex}.gw-card .gw-meta .mi{align-items:center;gap:var(--sp-1);display:inline-flex}.gw-card .gw-meta .mi-mac{font-family:var(--mono);color:var(--text-sec);background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--r-xs);letter-spacing:.01em;padding:0 6px}.gw-card .stat-list{background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--r-sm);padding:var(--sp-1);flex-direction:column;gap:1px;display:flex}.gw-card .stat{align-items:center;gap:var(--sp-3);padding:6px var(--sp-2);border-radius:var(--r-xs);font-size:var(--fs-300);transition:background var(--t-fast);display:flex}.gw-card .stat:hover{background:var(--bg-card)}.gw-card .stat .ic{width:16px;height:16px;color:var(--text-mute);flex-shrink:0}.gw-card .stat .label{color:var(--text-sec);font-weight:var(--fw-normal);flex-shrink:0;width:68px}.gw-card .stat .val{font-weight:var(--fw-semi);color:var(--text);font-variant-numeric:tabular-nums;text-align:right;flex-shrink:0;margin-left:auto}.gw-card .stat .extra{color:var(--text-mute);font-size:var(--fs-200);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.sigbars{flex-shrink:0;align-items:flex-end;gap:2px;width:18px;height:14px;display:inline-flex}.sigbars span{opacity:.24;width:3px;transition:opacity var(--t-base);background:currentColor;border-radius:1px}.sigbars span:first-child{height:28%}.sigbars span:nth-child(2){height:50%}.sigbars span:nth-child(3){height:75%}.sigbars span:nth-child(4){height:100%}.sigbars span.on{opacity:1}.battfig{border:1.5px solid;border-radius:2px;flex-shrink:0;width:22px;height:12px;display:inline-block;position:relative}.battfig:after{content:"";background:currentColor;border-radius:0 1px 1px 0;width:2px;height:4px;position:absolute;top:3px;right:-3px}.battfig .fill{transition:width var(--t-base);background:currentColor;border-radius:1px;position:absolute;top:0;bottom:0;left:0}.signal-strong{color:var(--success-ink)}.signal-weak{color:var(--warn-ink)}.signal-none{color:var(--text-mute)}.gw-card .gw-sensors{margin-top:var(--sp-3);padding:var(--sp-2) var(--sp-3) var(--sp-3);background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--r-sm)}.gw-card .gw-sensors .lbl{color:var(--text-sec);font-weight:var(--fw-semi);font-size:var(--fs-100);text-transform:uppercase;letter-spacing:.06em;margin-bottom:var(--sp-2);justify-content:space-between;align-items:center;display:flex}.gw-card .gw-sensors .lbl .count{text-transform:none;letter-spacing:0;color:var(--text);font-weight:var(--fw-bold);font-size:var(--fs-300);font-variant-numeric:tabular-nums}.gw-card .sensor-row{align-items:center;gap:var(--sp-2);padding:3px var(--sp-1);font-size:var(--fs-300);border-radius:var(--r-xs);display:flex}.gw-card .sensor-row .slot-pill{width:24px;height:18px;font-size:var(--fs-100);font-weight:var(--fw-bold);background:var(--neutral-bg);color:var(--text-mute);border:1px solid var(--neutral-bd);border-radius:var(--r-xs);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.gw-card .sensor-row.active .slot-pill{background:var(--success);color:var(--on-success);border-color:var(--success)}.gw-card .sensor-row .mac{font-family:var(--mono);font-size:var(--fs-200);text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-sec);flex:1;overflow:hidden}.gw-card .sensor-row .badge{font-size:var(--fs-100);color:var(--text-mute);flex-shrink:0}.gw-card .sensor-row.active .badge{color:var(--success-ink);font-weight:var(--fw-semi)}.gw-card .sensor-row.active .mac{color:var(--text)}.gw-card .sensor-row.empty .mac{color:var(--text-mute);font-style:italic}.gw-card .gw-actions{gap:var(--sp-1);padding:var(--sp-3) var(--sp-4);border-top:1px solid var(--border);background:var(--bg-elev);flex-wrap:wrap;display:flex}.gw-card .gw-actions button{width:auto;padding:5px var(--sp-3);font-size:var(--fs-200);border-radius:var(--r-sm);flex:1;min-width:0}.gw-card .gw-actions button.full{flex:100%}.gw-card .gw-actions .sep{border-top:1px solid var(--border);margin:var(--sp-1) 0 0;flex:100%}.gw-card .period-row{align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-top:1px solid var(--border);background:var(--bg-elev);font-size:var(--fs-300);flex-wrap:wrap;display:flex}.gw-card .period-row label{text-transform:none;letter-spacing:0;color:var(--text-sec);font-weight:var(--fw-normal);font-size:var(--fs-300);margin:0;display:inline}.gw-card .period-row input{width:76px;padding:4px var(--sp-2);font-size:var(--fs-300);flex:none}.gw-card .period-row button{width:auto;padding:4px var(--sp-3);font-size:var(--fs-200);flex:none}.gw-card .period-row .spacer{flex:1}.gw-card .period-row .ps-toggle.danger{background:var(--danger-bg);color:var(--danger-ink);border-color:var(--danger-bd)}.gw-card .period-row .ps-toggle.danger:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 16%, var(--bg-card));color:var(--danger-ink)}.gw-card .wifi-set{padding:var(--sp-3) var(--sp-4);border-top:1px solid var(--border);background:var(--bg-card)}.gw-card .wifi-set .ws-title{font-size:var(--fs-100);color:var(--text-sec);font-weight:var(--fw-semi);text-transform:uppercase;letter-spacing:.06em;margin-bottom:var(--sp-2);align-items:center;gap:6px;display:flex}.gw-card .wifi-set .ws-row{grid-template-columns:1fr 1fr auto;align-items:center;gap:6px;display:grid}.gw-card .wifi-set input{padding:6px var(--sp-2);font-size:var(--fs-300);min-width:0}.gw-card .wifi-set button{padding:6px var(--sp-4);font-size:var(--fs-300);white-space:nowrap}.gw-card .wifi-trial{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);background:var(--warn-bg);border:1px solid var(--warn-bd);color:var(--warn-ink);font-size:var(--fs-300);font-weight:var(--fw-medium);display:flex}.gw-card .wifi-trial .countdown{font-family:var(--mono);font-weight:var(--fw-bold);font-size:var(--fs-400);color:var(--warn-ink);text-align:right;font-variant-numeric:tabular-nums;min-width:34px}.gw-card .wifi-trial .ws-spinner{border:2px solid;border-right-color:#0000;border-radius:50%;flex:none;width:12px;height:12px;animation:.9s linear infinite spin}.gw-card .wifi-rolled{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);background:var(--danger-bg);color:var(--danger-ink);border:1px solid var(--danger-bd);font-size:var(--fs-300);font-weight:var(--fw-semi);display:flex}.gw-card .wifi-rolled .x{cursor:pointer;opacity:.7;margin-left:auto}.gw-card .wifi-rolled .x:hover{opacity:1}@container (width<=520px){.gw-card .wifi-set .ws-row{grid-template-columns:1fr}}.gw-msgs{margin:0 var(--sp-4) var(--sp-4);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);background:var(--log-bg);border:1px solid var(--code-rail);max-height:200px;font-family:var(--mono);font-size:var(--fs-200);line-height:var(--lh-mono);scrollbar-gutter:stable;overflow:auto}.gw-msgs .m-row{gap:var(--sp-2);align-items:baseline;display:flex}.gw-msgs .m-ts{color:var(--code-dim);font-variant-numeric:tabular-nums;flex:none}.gw-msgs .m-topic{color:var(--code-info);flex:none}.gw-msgs .m-body{color:var(--code-fg);word-break:break-all;min-width:0}.gw-msgs .m-empty{color:var(--code-dim);font-style:italic}.gw-history{margin-top:var(--sp-3);padding:var(--sp-2) var(--sp-3);background:var(--log-bg);color:var(--code-fg);border-radius:var(--r-sm);border:1px solid var(--code-rail);font-family:var(--mono);font-size:var(--fs-200);max-height:220px;line-height:var(--lh-mono);scrollbar-gutter:stable;overflow:auto}.gw-history .h-row{gap:var(--sp-2);white-space:nowrap;padding:1px var(--sp-1);border-radius:2px;display:flex}.gw-history .h-row .t{color:var(--code-dim)}.gw-history .h-row.changed{background:color-mix(in srgb, var(--code-warn) 16%, transparent);color:var(--code-warn)}.gw-history .h-empty{color:var(--code-dim);font-style:italic}.fw-list{flex-direction:column;gap:6px;display:flex}.fw-item{align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-3);background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--r-sm);font-size:var(--fs-300);transition:background var(--t-fast), border-color var(--t-fast);display:flex}.fw-item:hover{background:var(--bg-card);border-color:var(--border-strong)}.fw-item.selected{background:var(--primary-50);border-color:var(--primary);box-shadow:inset 3px 0 0 var(--primary)}.fw-item .name{min-width:0;font-weight:var(--fw-semi);cursor:pointer;color:var(--text);flex:1}.fw-item .meta{color:var(--text-sec);font-family:var(--mono);font-size:var(--fs-200)}.fw-item .note{color:var(--text-sec);font-size:var(--fs-200);white-space:pre-wrap;word-break:break-word;margin-top:3px}.fw-item button{width:auto;padding:4px var(--sp-3);font-size:var(--fs-200)}.log{background:var(--log-bg);color:var(--code-fg);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);height:220px;font-family:var(--mono);font-size:var(--fs-200);line-height:var(--lh-mono);border:1px solid var(--code-rail);scrollbar-gutter:stable;overflow:auto}.log .ts{color:var(--code-dim)}.log .ok{color:var(--code-ok)}.log .err{color:var(--code-err)}.log .warn{color:var(--code-warn)}.log::-webkit-scrollbar{width:10px}.log::-webkit-scrollbar-thumb{background:var(--code-rail);border-radius:var(--r-pill)}#drop{border:1px dashed var(--border-strong);border-radius:var(--r);padding:var(--sp-6) var(--sp-4);text-align:center;background:var(--bg-elev);color:var(--text-sec);cursor:pointer;-webkit-user-select:none;user-select:none;transition:border-color var(--t-base), background var(--t-base), color var(--t-base)}#drop:hover,#drop.dragover{border-color:var(--primary);background:var(--primary-50);color:var(--primary-700);border-style:solid}#drop .drop-ic{width:28px;height:28px;margin:0 auto var(--sp-2);color:var(--text-mute)}#drop:hover .drop-ic,#drop.dragover .drop-ic{color:var(--primary)}#drop button{width:auto;padding:7px var(--sp-4);margin-top:var(--sp-3)}.slot-row{gap:var(--sp-2);align-items:center;margin-top:6px;display:flex}.slot-row .slot-num{width:56px;padding:4px var(--sp-2);font-size:var(--fs-100);font-weight:var(--fw-bold);text-transform:uppercase;color:var(--primary-700);background:var(--primary-50);border:1px solid var(--info-bd);border-radius:var(--r-sm);text-align:center;letter-spacing:.05em;flex-shrink:0}.slot-row input{flex:1;min-width:0}.prof-entry{border:1px solid var(--border);border-radius:var(--r-sm);padding:var(--sp-2) var(--sp-3);background:var(--bg-elev);margin-bottom:6px}.prof-entry .head{align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-1);display:flex}.prof-entry .name{min-width:0;font-weight:var(--fw-semi);font-size:var(--fs-400);flex:1}.prof-entry .head button{width:auto;padding:3px var(--sp-3);font-size:var(--fs-200)}.prof-entry .macs{font-family:var(--mono);font-size:var(--fs-200);color:var(--text-sec);overflow-wrap:anywhere}.prof-entry .macs .empty{color:var(--text-mute);font-style:italic}body.no-auth{min-height:100vh;padding:var(--sp-5);flex-direction:column;justify-content:center;align-items:center;display:flex}#login-shell{align-items:center;gap:var(--sp-5);flex-direction:column;width:100%;max-width:400px;display:flex}#login-hero{border-radius:var(--r-lg);background:var(--primary-fill);width:64px;height:64px;box-shadow:var(--shadow);justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}#login-hero:after{content:none}#login-hero img{z-index:1;filter:brightness(0)invert();width:36px;height:36px;position:relative}#login-tagline{text-align:center;color:var(--text);font-size:var(--fs-800);font-weight:var(--fw-bold);letter-spacing:-.02em;margin:calc(var(--sp-2) * -1) 0}#login-card{width:100%;padding:var(--sp-6) var(--sp-6) var(--sp-5);box-shadow:var(--shadow-lg);border-radius:var(--r-lg);border:1px solid var(--border);background:var(--bg-card)}#login-card .subtitle{text-align:center;color:var(--text-sec);margin-bottom:var(--sp-5);font-size:var(--fs-300)}#login-card label.row-cb{align-items:center;gap:var(--sp-2);margin:var(--sp-4) 0 0;padding:var(--sp-2) var(--sp-3);background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--r-sm);text-transform:none;font-weight:var(--fw-normal);font-size:var(--fs-300);letter-spacing:0;color:var(--text);cursor:pointer;display:flex}#login-card label.row-cb input{flex:none;width:auto}#login-card label.row-cb select{padding:4px var(--sp-2);font-size:var(--fs-300);flex:1}#login-footer{color:var(--text-mute);font-size:var(--fs-200);text-align:center}.modal-backdrop{z-index:50;padding:var(--sp-5);background:color-mix(in srgb, var(--bg-dark) 62%, transparent);-webkit-backdrop-filter:blur(3px);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-lg);width:min(560px,100%);box-shadow:var(--shadow-lg);padding:var(--sp-5);max-height:calc(100vh - var(--sp-6) * 2);overflow:auto}.modal-card h3{font-size:var(--fs-600);margin-bottom:var(--sp-2);align-items:center;gap:var(--sp-2);display:flex}.modal-card .modal-file{color:var(--text-sec);font-family:var(--mono);font-size:var(--fs-200);overflow-wrap:anywhere;margin-bottom:var(--sp-4)}.modal-actions{gap:var(--sp-3);margin-top:var(--sp-5);display:flex}.modal-actions button{flex:1}#toast-host{top:var(--sp-4);right:var(--sp-4);z-index:200;gap:var(--sp-2);max-width:min(380px, calc(100vw - var(--sp-6)));pointer-events:none;flex-direction:column;display:flex;position:fixed}.toast{pointer-events:auto;align-items:flex-start;gap:var(--sp-3);padding:var(--sp-3);border-radius:var(--r);background:var(--bg-card);color:var(--text);border:1px solid var(--border);border-left:3px solid var(--text-mute);box-shadow:var(--shadow-lg);font-size:var(--fs-300);line-height:var(--lh-snug);animation:toast-in .2s var(--ease);display:flex}.toast.leaving{animation:toast-out .14s var(--ease) forwards}.toast .tic{flex-shrink:0;width:16px;height:16px;margin-top:1px}.toast .tmsg{word-break:break-word;white-space:pre-wrap;flex:1;min-width:0}.toast .tx{cursor:pointer;color:var(--text-mute);font-size:var(--fs-400);flex-shrink:0;line-height:1.2}.toast .tx:hover{color:var(--text)}.toast.ok{border-left-color:var(--success)}.toast.ok .tic{color:var(--success-ink)}.toast.err{border-left-color:var(--danger)}.toast.err .tic{color:var(--danger-ink)}.toast.warn{border-left-color:var(--warn)}.toast.warn .tic{color:var(--warn-ink)}.toast.info{border-left-color:var(--primary)}.toast.info .tic{color:var(--primary)}.user-row{align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-3);background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--r-sm);font-size:var(--fs-300);margin-bottom:6px;display:flex}.user-row .uname{font-weight:var(--fw-semi);align-items:center;gap:var(--sp-2);min-width:0;display:flex}.user-row .uname .avatar{width:26px;height:26px;font-size:var(--fs-200);font-weight:var(--fw-bold);color:var(--on-primary);background:var(--primary-fill);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.user-row .role-tag{font-size:var(--fs-100);font-weight:var(--fw-semi);padding:1px var(--sp-2);border-radius:var(--r-pill);letter-spacing:.02em;border:1px solid var(--neutral-bd);flex-shrink:0;align-items:center;gap:3px;display:inline-flex}.user-row .role-tag.admin{background:var(--info-bg);border-color:var(--info-bd);color:var(--primary-700)}.user-row .role-tag.user{background:var(--neutral-bg);border-color:var(--neutral-bd);color:var(--text-sec)}.user-row .umeta{color:var(--text-mute);font-size:var(--fs-200)}.user-row .uspacer{flex:1}.user-row button{width:auto;padding:4px var(--sp-3);font-size:var(--fs-200)}.role-pick{border:1px solid var(--border-strong);border-radius:var(--r-sm);background:var(--bg-card);gap:0;display:inline-flex;overflow:hidden}.role-pick button{width:auto;padding:7px var(--sp-4);font-size:var(--fs-300);font-weight:var(--fw-medium);color:var(--text-sec);background:0 0;border:none;border-radius:0}.role-pick button:hover:not(.on):not(:disabled){background:var(--bg-elev);color:var(--text)}.role-pick button.on{background:var(--primary-fill);color:var(--on-primary);font-weight:var(--fw-semi)}#btn-theme{background:var(--bg-card);width:32px;height:32px;color:var(--text-sec);border:1px solid var(--border-strong);flex:none;padding:0}#btn-theme:hover:not(:disabled){background:var(--bg-elev);color:var(--text)}.msg-toolbar{gap:var(--sp-3);margin-bottom:var(--sp-4);flex-direction:column;display:flex}.msg-stats{gap:var(--sp-2);flex-wrap:wrap;align-items:center;display:flex}.msg-stats .stat{padding:4px var(--sp-3);border-radius:var(--r-sm);background:var(--bg-card);border:1px solid var(--border);box-shadow:var(--shadow-sm);font-size:var(--fs-300);color:var(--text-sec);white-space:nowrap;align-items:baseline;gap:6px;display:inline-flex}.msg-stats .stat b{font-size:var(--fs-500);font-weight:var(--fw-bold);color:var(--text);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.msg-paused{padding:3px var(--sp-3);border-radius:var(--r-sm);background:var(--warn-bg);border:1px solid var(--warn-bd);color:var(--warn-ink);font-weight:var(--fw-semi);font-size:var(--fs-300);white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.msg-paused:before{content:"";background:currentColor;border-radius:1px;flex:none;width:7px;height:7px}.msg-ctl{gap:var(--sp-2);flex-wrap:wrap;align-items:center;display:flex}.msg-ctl select,.msg-ctl input,.msg-ctl button{flex:none;width:auto}.msg-search{flex:1;min-width:200px;position:relative}.msg-search input{width:100%;padding-left:34px}.msg-search svg{left:var(--sp-3);width:15px;height:15px;color:var(--text-mute);pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.msg-list{border:1px solid var(--border);border-radius:var(--r);background:var(--bg-card);box-shadow:var(--shadow-sm);overflow-anchor:auto;scrollbar-gutter:stable;overscroll-behavior:contain;max-height:min(68vh,820px);overflow:hidden auto}.msg-item{border-bottom:1px solid var(--border-subtle);animation:.2s linear msg-enter;position:relative}.msg-item:last-child{border-bottom:none}.msg-item:before{content:"";background:var(--primary);opacity:0;pointer-events:none;width:2px;animation:msg-flash 1.4s var(--ease) forwards;position:absolute;top:0;bottom:0;left:0}.msg-head{align-items:baseline;gap:var(--sp-3);padding:7px var(--sp-4) 7px var(--sp-3);cursor:pointer;font-size:var(--fs-300);line-height:var(--lh-snug);min-height:32px;transition:background var(--t-fast);display:flex}.msg-head:hover{background:var(--bg-elev)}.msg-time{color:var(--text-mute);font-family:var(--mono);font-size:var(--fs-200);font-variant-numeric:tabular-nums;letter-spacing:-.01em;flex:0 0 4.75rem}.msg-tag{min-width:5.25rem;padding:1px var(--sp-2);border-radius:var(--r-xs);font-size:var(--fs-100);font-weight:var(--fw-semi);letter-spacing:.03em;white-space:nowrap;border:1px solid #0000;flex:none;justify-content:center;align-self:center;align-items:center;line-height:1.6;display:inline-flex}.msg-tag.t-server{background:var(--info-bg);border-color:var(--info-bd);color:var(--primary-700)}.msg-tag.t-health{background:var(--success-bg);border-color:var(--success-bd);color:var(--success-ink)}.msg-tag.t-control{background:var(--warn-bg);border-color:var(--warn-bd);color:var(--warn-ink)}.msg-tag.t-other{background:var(--neutral-bg);border-color:var(--neutral-bd);color:var(--text-sec)}.msg-who{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:var(--fw-medium);color:var(--text);flex:0 0 9rem;overflow:hidden}.msg-sum{color:var(--text-sec);text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.msg-item:has(.msg-json:not(.hidden)){background:var(--bg-elev)}.msg-item:has(.msg-json:not(.hidden)) .msg-head{background:0 0}.msg-item:has(.msg-json:not(.hidden)) .msg-who{color:var(--text);font-weight:var(--fw-semi)}.msg-json{padding:var(--sp-3) var(--sp-4) var(--sp-4) var(--sp-4);background:var(--log-bg);color:var(--code-fg);font-family:var(--mono);font-size:var(--fs-200);line-height:var(--lh-mono);white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;tab-size:2;border-top:1px solid var(--border);max-height:360px;box-shadow:inset 3px 0 0 var(--code-rail);scrollbar-gutter:stable;margin:0;overflow:auto}.msg-json .k{color:var(--code-info)}.msg-json .s{color:var(--code-ok)}.msg-json .n{color:var(--code-warn)}.msg-json .b{color:var(--code-err);font-weight:600}.msg-empty{padding:var(--sp-6) var(--sp-4);text-align:center;color:var(--text-mute);font-size:var(--fs-300);line-height:var(--lh-base);background:var(--bg-card);border-radius:var(--r)}.msg-empty:before{content:"";width:32px;height:32px;margin:0 auto var(--sp-3);border:2px dashed var(--border-strong);opacity:.55;border-radius:50%;display:block}@keyframes spin{to{transform:rotate(360deg)}}.ic-spin{animation:1.2s linear infinite spin}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes pulse-ok{0%,to{box-shadow:0 0 0 0 color-mix(in srgb, var(--success) 55%, transparent)}50%{box-shadow:0 0 0 5px color-mix(in srgb, var(--success) 0%, transparent)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}@keyframes toast-in{0%{opacity:0;transform:translate(12px)}to{opacity:1;transform:none}}@keyframes toast-out{to{opacity:0;transform:translate(12px)}}@keyframes msg-enter{0%{opacity:0}to{opacity:1}}@keyframes msg-flash{0%{opacity:.85}to{opacity:0}}@media (width<=1024px){body{padding:var(--sp-4) var(--sp-4) 56px}}@media (width<=880px){.container{max-width:100%;padding:0}.stat-grid{grid-template-columns:1fr 1fr}.msg-who{flex:0 0 7rem}}@media (width<=640px){body{padding:var(--sp-3) var(--sp-2) 40px}.container{padding:0}.header{gap:var(--sp-2);padding:var(--sp-1) var(--sp-1) var(--sp-3);margin-bottom:var(--sp-4);flex-wrap:wrap}.header h1{font-size:var(--fs-600)}.header .meta{font-size:var(--fs-200);flex-wrap:wrap;gap:6px}.header .brand img.logo{width:26px;height:26px}.card{padding:var(--sp-4);border-radius:var(--r)}.card h2{font-size:var(--fs-400)}.tab-bar{justify-content:space-around;width:100%}.tab-bar button{padding:8px var(--sp-2);font-size:var(--fs-300);flex:1}.row{flex-direction:column}.row>*{width:100%}.stat-grid,.gw-card .wifi-set .ws-row{grid-template-columns:1fr}.gw-card .gw-actions button{font-size:var(--fs-200);padding:6px var(--sp-2)}button,input,select{min-height:40px;font-size:var(--fs-400)}button.ghost,button.danger,button.success,button.warn{min-height:40px}.slot-row .slot-num{width:44px;font-size:var(--fs-100)}#drop{padding:var(--sp-5) var(--sp-3)}.gw-card .stat{padding:6px var(--sp-2)}.log{height:160px}pre,.mono{word-break:break-all}.msg-head{gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);flex-wrap:wrap}.msg-who{flex:none;max-width:45%}.msg-sum{flex:1 0 100%;padding-left:0}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.ic-spin,.ws-spinner{animation-duration:1.2s!important;animation-iteration-count:infinite!important}}@media (prefers-contrast:more){:root{--border:var(--border-strong);--border-subtle:var(--border-strong)}}*,:before,:after{box-sizing:border-box}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){html{--lightningcss-light: ;--lightningcss-dark:initial}}body{background:var(--bg-base);color:var(--text);font-family:var(--font);font-size:var(--fs-400);line-height:var(--lh-base);-webkit-font-smoothing:antialiased;margin:0}.shell{max-width:var(--shell-max);padding:var(--sp-5) var(--sp-4);margin:0 auto}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--shadow-sm)}.mono{font-family:var(--mono);font-size:var(--fs-200)}.muted{color:var(--text-sec)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.gw-card .gw-actions button{flex:0 auto;gap:5px}.gw-card .gw-actions{gap:var(--sp-2)}.sensor-row.empty .mac{visibility:hidden}.sensor-list.all-empty{padding:6px var(--sp-2);color:var(--text-mute);font-size:var(--fs-200);display:block}.sensor-list.all-empty .sensor-row{display:none}.sensor-list.all-empty:before{content:"尚未配置 sensor"}.fw-item .note{-webkit-line-clamp:2;line-clamp:2;cursor:pointer;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.fw-item .note.expanded{-webkit-line-clamp:none;line-clamp:none;max-height:40vh;padding:var(--sp-2);margin-top:var(--sp-1);background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-xs);display:block;overflow:auto}.fw-item .note:not(.expanded):hover{color:var(--text)}.fw-item .meta{white-space:nowrap;flex:none}.fw-item .name{overflow:hidden}.fw-item .name>:first-child{overflow-wrap:anywhere}.fw-item.selected .name{color:var(--primary-700)}.header .meta>.small{white-space:nowrap;align-items:center;gap:4px;display:inline-flex}.sig rect{transition:fill var(--t-base), opacity var(--t-base)}.sig rect.off{fill:var(--border-strong);opacity:.45}.sig-strong rect.on,.sig-ok rect.on{fill:var(--success)}.sig-weak rect.on{fill:var(--warn)}.sig-none rect.on{fill:var(--text-mute)}.batt{align-items:center;gap:6px;display:inline-flex}.batt .shell{fill:none;stroke:var(--border-strong);stroke-width:1px}.batt .cap{fill:var(--border-strong)}.batt .fill{transition:width var(--t-base), fill var(--t-base)}.batt-ok .fill{fill:var(--success)}.batt-warn .fill{fill:var(--warn)}.batt-low .fill{fill:var(--danger)}.batt.is-charging .fill{animation:2.4s ease-in-out infinite batt-breathe}@keyframes batt-breathe{50%{opacity:.55}}.skeleton{gap:var(--sp-2);padding:var(--sp-2) 0;display:grid}.sk-row{border-radius:var(--r-xs);background:linear-gradient(90deg, var(--bg-elev) 0%, var(--neutral-bg) 50%, var(--bg-elev) 100%);background-size:200% 100%;height:14px;animation:1.4s ease-in-out infinite sk-shimmer}.sk-row:nth-child(2){width:82%}.sk-row:nth-child(3){width:64%}@keyframes sk-shimmer{to{background-position:-200% 0}}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.gw-card{animation:card-in .26s var(--ease) both}@keyframes card-in{0%{opacity:0;transform:translateY(4px)}}.pill.ok .dot{animation:2.6s ease-in-out infinite live-pulse}@keyframes live-pulse{50%{opacity:.5}}@media (width<=900px){.shell{padding:var(--sp-3) var(--sp-3)}.header{gap:var(--sp-2);flex-wrap:wrap}.header .meta{flex-wrap:wrap;justify-content:flex-end;width:100%}.tab-bar{scrollbar-width:none;flex-wrap:nowrap;overflow-x:auto}.tab-bar::-webkit-scrollbar{display:none}.tab-btn{white-space:nowrap;flex:none}.header .meta{gap:var(--sp-1) var(--sp-2)}.gw-card .stat-list{grid-template-columns:1fr 1fr;gap:1px;display:grid}.msg-ctl{flex-direction:column;align-items:stretch}.msg-ctl>*{width:100%}.filter-chips{overflow-x:auto}#batch-bar{bottom:var(--sp-2);z-index:20;box-shadow:var(--shadow-lg);flex-wrap:wrap;position:sticky}}@media (width<=620px){.row{flex-direction:column}.row>*{width:100%}.gw-card .stat-list{grid-template-columns:1fr}.gw-card .gw-actions button{flex:1 1 calc(50% - var(--sp-2));padding:8px var(--sp-2);justify-content:center}.msg-head{flex-wrap:wrap;row-gap:2px}.msg-sum{flex:100%}.header .brand h1{font-size:var(--fs-600)}}.ver-dist{gap:var(--sp-2);display:grid}.ver-row{align-items:center;gap:var(--sp-3);font-size:var(--fs-200);grid-template-columns:190px 1fr minmax(96px,auto);display:grid}.ver-name{color:var(--text);white-space:nowrap;align-items:center;display:flex;overflow:hidden}.ver-bar{border-radius:var(--r-pill);background:var(--neutral-bg);height:8px;overflow:hidden}.ver-fill{border-radius:var(--r-pill);background:var(--text-mute);height:100%;transition:width var(--t-base);display:block}.ver-fill.is-latest{background:var(--primary)}.ver-count{text-align:right;color:var(--text-sec);white-space:nowrap}@media (width<=620px){.ver-row{grid-template-columns:1fr auto}.ver-bar{grid-column:1/-1}}.sz-ok{color:var(--text-sec)}.sz-tight{color:var(--warn-ink);font-weight:var(--fw-semi);cursor:help}.sz-over{color:var(--danger-ink);font-weight:var(--fw-bold);cursor:help;-webkit-text-decoration:underline wavy var(--danger);text-decoration:underline wavy var(--danger);text-underline-offset:3px}.fw-item .fw-del{color:var(--text-mute)}.fw-item .fw-del:hover:not(:disabled){color:var(--danger-ink);background:var(--danger-bg);border-color:var(--danger-bd)}.auth{min-height:100vh;margin:calc(-1 * var(--sp-5)) calc(-1 * var(--sp-5)) -72px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);display:grid}.auth-brand{justify-content:space-between;gap:var(--sp-6);padding:var(--sp-6);color:#fff;isolation:isolate;background:#14113a;flex-direction:column;display:flex;position:relative;overflow:hidden}.mesh{z-index:-1;position:absolute;inset:0;overflow:hidden}.mesh span{filter:blur(70px);opacity:.85;will-change:transform;border-radius:50%;position:absolute}.mesh-a{aspect-ratio:1;background:#4f46e5;inline-size:60%;animation:19s ease-in-out infinite drift-a;inset-block-start:-12%;inset-inline-start:-8%}.mesh-b{aspect-ratio:1;opacity:.6;background:#0891b2;inline-size:52%;animation:23s ease-in-out infinite drift-b;inset-block-end:-10%;inset-inline-start:18%}.mesh-c{aspect-ratio:1;opacity:.65;background:#7c3aed;inline-size:46%;animation:29s ease-in-out infinite drift-c;inset-block-start:34%;inset-inline-end:-14%}@keyframes drift-a{0%,to{transform:translate(0,0)scale(1)}33%{transform:translate(6%,4%)scale(1.08)}66%{transform:translate(-3%,7%)scale(.96)}}@keyframes drift-b{0%,to{transform:translate(0,0)scale(1)}40%{transform:translate(8%,-5%)scale(1.1)}70%{transform:translate(-5%,-2%)scale(.94)}}@keyframes drift-c{0%,to{transform:translate(0,0)scale(1)}50%{transform:translate(-7%,6%)scale(1.06)}}.auth-brand-top{align-items:center;gap:var(--sp-3);animation:auth-in .46s var(--ease) both;display:flex;position:relative}.auth-logo{background:#ffffff24;border:1px solid #fff3;border-radius:10px;justify-content:center;align-items:center;block-size:38px;inline-size:38px;display:flex}.auth-logo img{block-size:21px;inline-size:21px}.auth-wordmark{font-weight:var(--fw-bold);font-size:var(--fs-500);letter-spacing:.01em}.auth-brand-inner{max-width:30rem;position:relative}.auth-brand h1{color:#fff;margin:0 0 var(--sp-4);font-size:clamp(1.6rem,2.6vw,2.35rem);font-weight:var(--fw-bold);letter-spacing:-.02em;max-width:16em;animation:auth-in .46s var(--ease) 70ms both;line-height:1.32}.auth-tag{margin:0 0 var(--sp-6);color:#ffffffbd;max-width:30em;font-size:var(--fs-400);line-height:var(--lh-base);animation:auth-in .46s var(--ease) .13s both}.auth-stats{padding:var(--sp-3) var(--sp-4);border-radius:var(--r);-webkit-backdrop-filter:blur(10px);width:max-content;max-width:100%;animation:auth-in .46s var(--ease) .19s both;background:#ffffff12;border:1px solid #ffffff21;align-items:stretch;gap:0;display:inline-flex}.auth-stats>div{padding-inline:var(--sp-4);border-inline-end:1px solid #ffffff29;flex-direction:column;gap:2px;display:flex}.auth-stats>div:first-child{padding-inline-start:0}.auth-stats>div:last-child{border-inline-end:0;padding-inline-end:0}.auth-stats strong{font-size:1.35rem;font-weight:var(--fw-bold);font-variant-numeric:tabular-nums;line-height:1.1}.auth-stats span{font-size:var(--fs-200);color:#ffffffa8;white-space:nowrap}.auth-foot{color:#ffffff80;font-size:var(--fs-200);position:relative}.auth-panel{padding:var(--sp-6) var(--sp-5);background:var(--bg-card);justify-content:center;align-items:center;display:flex}.auth-form{width:min(360px,100%);animation:auth-in .46s var(--ease) .12s both;margin-block-end:6vh}.auth-form h2{font-size:var(--fs-700);font-weight:var(--fw-bold);margin:0 0 4px}.auth-form .subtitle{margin:0 0 var(--sp-5);color:var(--text-sec);font-size:var(--fs-400);text-align:start}.auth-form label{margin-top:var(--sp-3)}.auth-form input,.auth-form select{background:var(--bg-input)}.auth-form label.row-cb{align-items:center;gap:var(--sp-2);margin:var(--sp-4) 0 0;padding:var(--sp-2) var(--sp-3);background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--r-sm);text-transform:none;font-weight:var(--fw-normal);font-size:var(--fs-300);letter-spacing:0;color:var(--text);cursor:pointer;display:flex}.auth-form label.row-cb input{flex:none;width:auto;margin:0}.auth-form label.row-cb select{padding:4px var(--sp-2);font-size:var(--fs-300);flex:1;margin:0}.auth-submit{width:100%;margin-top:var(--sp-5);padding:11px var(--sp-4);font-size:var(--fs-400);transition:transform var(--t-fast), box-shadow var(--t-fast), background var(--t-fast)}.auth-submit:hover:not(:disabled){box-shadow:var(--shadow);transform:translateY(-1px)}.auth-submit:active:not(:disabled){transform:translateY(0)}@keyframes auth-in{0%{opacity:0;transform:translateY(10px)}}.auth-mhead{align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-5);display:none}.auth-mhead .auth-logo{background:var(--primary-fill);border:0;border-radius:11px;block-size:42px;inline-size:42px}.auth-mhead-name{font-weight:var(--fw-bold);font-size:var(--fs-500);color:var(--text);display:block}@media (width<=860px){.auth{min-height:100dvh;margin:calc(-1 * var(--sp-5)) calc(-1 * var(--sp-5)) -72px;background:radial-gradient(120% 42% at 50% 0%, color-mix(in srgb, var(--primary) 12%, transparent), transparent 70%), var(--bg-base);grid-template-columns:1fr}.auth-brand{display:none}.auth-panel{padding:var(--sp-5) var(--sp-4);background:0 0;justify-content:center;align-items:center;min-block-size:100dvh}.auth-form{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-lg);width:min(420px,100%);padding:var(--sp-5) var(--sp-4);box-shadow:var(--shadow);margin-block-end:0;margin-inline:auto}.auth-mhead{display:flex}.auth-form h2{font-size:var(--fs-600)}.auth-form .subtitle{margin-bottom:var(--sp-4)}.auth-form input,.auth-form select{min-block-size:48px}.auth-submit{min-block-size:50px;font-size:var(--fs-500);margin-top:var(--sp-5)}.auth-partners{margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:1px solid var(--border);align-items:center;display:flex}.auth-partners-label{color:var(--text-mute);text-align:center}.auth-partners-row{width:100%;box-shadow:none;background:0 0;border:0;justify-content:center;padding:0}.auth-partners-row img[alt^=翔安]{block-size:26px}.auth-partners-row img[alt^=利善美]{block-size:34px}}.gwp{position:relative}.gwp-trigger{align-items:center;gap:var(--sp-2);width:100%;padding:8px var(--sp-3);background:var(--bg-input);border:1px solid var(--border-strong);border-radius:var(--r-sm);color:var(--text);font-size:var(--fs-400);text-align:start;display:flex}.gwp-trigger:hover:not(:disabled){background:var(--bg-elev)}.gwp-trigger.is-open{border-color:var(--primary);box-shadow:var(--shadow-focus)}.gwp-caret{color:var(--text-sec);flex:none;margin-inline-start:auto}.gwp-placeholder{color:var(--text-mute)}.gwp-dot{background:var(--text-mute);border-radius:50%;flex:none;block-size:8px;inline-size:8px}.gwp-dot.is-online{background:var(--success);box-shadow:0 0 0 3px color-mix(in srgb, var(--success) 22%, transparent)}.gwp-label{font-weight:var(--fw-medium);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.gwp-mac{color:var(--text-mute);font-size:var(--fs-200);flex:none}.gwp-menu{inset-inline:0;z-index:40;background:var(--bg-card);border:1px solid var(--border-strong);border-radius:var(--r);box-shadow:var(--shadow-lg);animation:gwp-in .12s var(--ease) both;position:absolute;top:calc(100% + 4px);overflow:hidden}@keyframes gwp-in{0%{opacity:0;transform:translateY(-4px)}}.gwp-search{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--border);color:var(--text-sec);display:flex}.gwp-search input{color:var(--text);font-size:var(--fs-300);background:0 0;border:0;flex:1;padding:0}.gwp-search input:focus-visible{box-shadow:none;outline:none}.gwp-hint{padding:6px var(--sp-3);color:var(--text-sec);background:var(--bg-elev);border-bottom:1px solid var(--border)}.gwp-list{max-height:320px;overflow:auto}.gwp-item{align-items:center;gap:var(--sp-2);width:100%;padding:7px var(--sp-3);color:var(--text);font-size:var(--fs-300);text-align:start;background:0 0;border:0;border-radius:0;display:flex}.gwp-item:hover:not(:disabled){background:var(--primary-50)}.gwp-item.is-picked{background:var(--primary-50);font-weight:var(--fw-semi)}.gwp-item.is-offline .gwp-label{color:var(--text-sec)}.gwp-age{color:var(--text-mute);flex:none;margin-inline-start:auto}.gwp-check{color:var(--primary);flex:none}.gwp-sep{padding:4px var(--sp-3);color:var(--text-mute);background:var(--bg-elev);border-block:1px solid var(--border);position:sticky;top:0}.gwp-empty{padding:var(--sp-3);color:var(--text-sec)}.tab-content .metric-strip,.dash-grid>.card,.dash-full{padding:var(--sp-4)}.dash-grid>.card>h2,.dash-full>h2{margin-bottom:var(--sp-3);padding-bottom:var(--sp-2)}.metric-strip{margin-bottom:var(--sp-3);grid-template-columns:1.4fr 1fr 1fr 1fr;padding:0;display:grid;overflow:hidden}.metric{gap:var(--sp-1);padding:var(--sp-4);border-inline-end:1px solid var(--border);flex-direction:column;min-width:0;display:flex}.metric:last-child{border-inline-end:0}.metric-label{font-size:var(--fs-200);font-weight:var(--fw-medium);color:var(--text-sec);align-items:center;gap:6px;display:inline-flex}.metric-label svg{color:var(--text-mute)}.metric-value{font-size:1.75rem;font-weight:var(--fw-bold);letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--text);line-height:1.1}.metric-sub{font-size:var(--fs-200);color:var(--text-mute)}.metric-ok .metric-value{color:var(--success-ink)}.metric-warn .metric-value{color:var(--warn-ink)}.metric-danger .metric-value{color:var(--danger-ink)}.metric-ok .metric-label svg{color:var(--success)}.metric-warn .metric-label svg{color:var(--warn)}.metric-danger .metric-label svg{color:var(--danger)}.metric-hero{background:var(--primary-50);border-inline-end-color:var(--primary-100)}.metric-hero .metric-label{color:var(--primary-700)}.metric-hero .metric-label svg{color:var(--primary)}.metric-hero .metric-value{color:var(--text);font-size:2.5rem}.metric-hero .metric-value .metric-total{font-size:1.125rem;font-weight:var(--fw-medium);color:var(--text-sec);letter-spacing:0}.metric-hero .metric-sub{color:var(--primary-700)}.metric-bar{height:6px;margin-top:var(--sp-1);border-radius:var(--r-pill);background:var(--bg-card);overflow:hidden}.metric-bar>span{border-radius:var(--r-pill);background:var(--primary);height:100%;transition:width var(--t-base);display:block}.dash-grid{gap:var(--sp-3);grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);align-items:start;display:grid}.dash-grid>.card{margin:0}.dash-side{top:var(--sp-3);position:sticky}.issue-list{gap:var(--sp-2);display:grid}.issue{align-items:flex-start;gap:var(--sp-3);padding:var(--sp-3);border-radius:var(--r-sm);border:1px solid var(--border);background:var(--bg-elev);transition:border-color var(--t-fast), background var(--t-fast);display:flex}.issue:hover{border-color:var(--border-strong);background:var(--bg-card)}.issue-ic{border-radius:var(--r-sm);background:var(--bg-card);border:1px solid var(--border);flex:none;justify-content:center;align-items:center;block-size:28px;inline-size:28px;display:inline-flex}.issue-warn .issue-ic{color:var(--warn-ink);border-color:var(--warn-bd);background:var(--warn-bg)}.issue-danger .issue-ic{color:var(--danger-ink);border-color:var(--danger-bd);background:var(--danger-bg)}.issue-body{flex:1;min-width:0}.issue-title{align-items:center;gap:var(--sp-2);font-weight:var(--fw-semi);font-size:var(--fs-400);color:var(--text);display:flex}.issue-count{font-size:var(--fs-100);font-weight:var(--fw-semi);border-radius:var(--r-pill);font-variant-numeric:tabular-nums;padding:1px 7px}.issue-warn .issue-count{color:var(--warn-ink);background:var(--warn-bg);border:1px solid var(--warn-bd)}.issue-danger .issue-count{color:var(--danger-ink);background:var(--danger-bg);border:1px solid var(--danger-bd)}.issue-hint{color:var(--text-sec);margin-top:2px}.issue-tags{margin-top:var(--sp-2);flex-wrap:wrap;gap:6px;display:flex}.issue-tag{border-radius:var(--r-pill);background:var(--bg-card);border:1px solid var(--border);font-size:var(--fs-200);color:var(--text);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:5px;max-width:22ch;padding:2px 8px;display:inline-flex;overflow:hidden}.dev-table-wrap{scrollbar-gutter:stable;margin:0 calc(var(--sp-1) * -1);overflow-x:auto}.dev-table{border-collapse:collapse;width:100%;font-size:var(--fs-300)}.dev-table th{z-index:1;background:var(--bg-card);text-align:left;font-size:var(--fs-200);font-weight:var(--fw-medium);color:var(--text-sec);padding:0 var(--sp-2) var(--sp-2);border-bottom:1px solid var(--border);white-space:nowrap;position:sticky;top:0}.dev-table td{padding:6px var(--sp-2);border-bottom:1px solid var(--border-subtle);vertical-align:middle}.dev-table tr:last-child td{border-bottom:0}.dev-table tbody tr{transition:background var(--t-fast)}.dev-table tbody tr:hover{background:var(--bg-elev)}.dev-table .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.dev-table .col-name{font-weight:var(--fw-medium);white-space:nowrap}.dev-table .col-mac{color:var(--text-sec)}.gauge-cell{align-items:center;gap:var(--sp-2);justify-content:flex-end;display:flex}.gauge{border-radius:var(--r-pill);background:var(--neutral-bg);flex:0 56px;height:5px;overflow:hidden}.gauge>span{border-radius:var(--r-pill);background:var(--text-mute);height:100%;transition:width var(--t-base);display:block}.gauge-ok>span{background:var(--success)}.gauge-warn>span{background:var(--warn)}.gauge-danger>span{background:var(--danger)}.gauge-num{font-family:var(--mono);font-size:var(--fs-200);font-variant-numeric:tabular-nums;color:var(--text-sec);text-align:right;min-width:7ch}.gauge-ok~.gauge-num,.gauge-warn~.gauge-num{color:var(--text)}.gauge-danger~.gauge-num{color:var(--danger-ink);font-weight:var(--fw-medium)}@media (width<=1000px){.dash-grid{grid-template-columns:1fr}.dash-side{position:static}}@media (width<=900px){.metric-strip{grid-template-columns:repeat(3,1fr)}.metric-hero{border-inline-end:0;border-block-end:1px solid var(--primary-100);padding-block:var(--sp-3);grid-column:1/-1}.metric-hero .metric-bar{max-width:420px}.metric:last-child{border-inline-end:0}}@media (width<=620px){.metric{padding:var(--sp-3) var(--sp-2)}.metric-value{font-size:1.375rem}.metric-hero{padding:var(--sp-3)}.metric-hero .metric-value{font-size:1.875rem}.metric-hero .metric-value .metric-total{font-size:1rem}.metric:not(.metric-hero) .metric-sub{-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.issue{flex-wrap:wrap}.issue>button{width:100%}.dev-table .col-mac,.dev-table th.col-mac{display:none}.dev-table th,.dev-table td{padding-inline:var(--sp-1)}.gauge{flex-basis:40px}}.fw-item{cursor:pointer;padding-block:var(--sp-3);align-items:flex-start}.fw-item:focus-visible{border-color:var(--primary);box-shadow:var(--shadow-focus);outline:none}.fw-radio{border:1.5px solid var(--border-strong);background:var(--bg-card);color:#fff;block-size:18px;inline-size:18px;transition:background var(--t-fast), border-color var(--t-fast);border-radius:50%;flex:none;justify-content:center;align-items:center;margin-top:1px;display:flex}.fw-item:hover .fw-radio{border-color:var(--primary)}.fw-item.selected .fw-radio{background:var(--primary-fill);border-color:var(--primary-fill)}.fw-item.selected{border-color:var(--primary);box-shadow:inset 3px 0 0 var(--primary)}.fw-fname{font-weight:var(--fw-semi)}.fw-picked-tag{border-radius:var(--r-pill);background:var(--primary-fill);color:var(--on-primary);font-size:var(--fs-100);font-weight:var(--fw-semi);margin-inline-start:6px;padding:1px 7px}.fw-note-toggle{border:1px solid var(--border);border-radius:var(--r-pill);width:auto;color:var(--text-sec);font-size:var(--fs-100);background:0 0;margin-top:4px;padding:2px 8px}.fw-note-toggle:hover:not(:disabled){background:var(--bg-card);border-color:var(--border-strong);color:var(--text)}.fw-item .note{cursor:default}.fw-item button{cursor:pointer}@media (width<=620px){.fw-item{flex-wrap:wrap}.fw-item .name{flex:100%;order:1}.fw-item .fw-radio{order:0}.fw-item .meta{white-space:normal;flex:100%;order:2}.fw-item button{order:3}}.gw-mark{stroke:#ffffffe6;stroke-width:2px;block-size:auto;inline-size:min(420px,100%);animation:auth-in .62s var(--ease) .16s both}.gw-mark .gm-cloud,.gw-mark .gm-uplink path{stroke:#ffffff80}.gw-mark .gm-device rect{stroke:#ffffffeb}.gw-mark .gm-screen{fill:#ffffff14}.gw-mark .gm-bed path{stroke:#ffffff61}.gw-mark .gm-led{fill:none;stroke:#ffffff73;stroke-width:1.6px}.gw-mark .gm-led-on{fill:#4ade80;stroke:#4ade80}.gw-mark .gm-ecg{stroke:#7dd3fc;stroke-width:2.2px;stroke-dasharray:90;stroke-dashoffset:90px;animation:3.6s ease-in-out infinite gm-trace}@keyframes gm-trace{0%{stroke-dashoffset:90px}45%{stroke-dashoffset:0}75%{stroke-dashoffset:0;opacity:1}to{stroke-dashoffset:0;opacity:0}}.gw-mark .gm-waves path{stroke:#ffffff8c;stroke-width:2px;transform-origin:50%}.gw-mark .gm-w1{animation:3s ease-in-out infinite gm-pulse}.gw-mark .gm-w2{animation:3s ease-in-out .35s infinite gm-pulse}.gw-mark .gm-w3{animation:3s ease-in-out .7s infinite gm-pulse}@keyframes gm-pulse{0%,to{opacity:.18}40%{opacity:.9}}.gw-mark .gm-led-on{animation:2.8s ease-in-out infinite gm-blink}@keyframes gm-blink{50%{opacity:.45}}:root{--font:-apple-system, BlinkMacSystemFont, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang TC", "Noto Sans TC", "Microsoft JhengHei UI", "Microsoft JhengHei", "Heiti TC", "Apple LiGothic", sans-serif}body{letter-spacing:0;text-rendering:optimizelegibility;line-height:1.7}h1,h2,h3{letter-spacing:0;line-height:1.4}p,li{line-height:1.75}.mono,.metric-value,.kpi-value,.ver-count,.auth-stats strong{font-variant-numeric:tabular-nums}body{text-spacing-trim:space-all}.push-panel .ws-title{align-items:baseline;gap:var(--sp-2);flex-wrap:wrap;display:flex}.push-cur-inline{color:var(--text-sec);font-weight:var(--fw-normal)}.push-cur-inline strong{color:var(--text);font-family:var(--mono)}.push-go{gap:var(--sp-2);flex-wrap:wrap;align-items:center;display:flex}.push-go input{flex:160px;margin:0}.push-go button{flex:none;width:auto}.push-warn{gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-3);border-radius:var(--r-sm);background:var(--warn-bg);border:1px solid var(--warn-bd);color:var(--warn-ink);font-size:var(--fs-200);line-height:var(--lh-snug);align-items:flex-start;display:flex}.push-warn svg{flex:none;margin-top:2px}.push-list{max-height:190px;margin-bottom:var(--sp-3);border:1px solid var(--border);border-radius:var(--r-sm);background:var(--bg-elev);gap:4px;padding:3px;display:grid;overflow:auto}.push-item{align-items:center;gap:var(--sp-2);width:100%;padding:7px var(--sp-2);background:var(--bg-card);border-radius:var(--r-xs);color:var(--text);font-size:var(--fs-300);text-align:start;border:1px solid #0000;display:flex}.push-item:hover:not(:disabled){border-color:var(--border-strong)}.push-item.is-picked{border-color:var(--primary);background:var(--primary-50)}.push-radio{border:1.5px solid var(--border-strong);color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;block-size:15px;inline-size:15px;display:flex}.push-item.is-picked .push-radio{background:var(--primary-fill);border-color:var(--primary-fill)}.push-name{min-width:0;font-family:var(--mono);font-size:var(--fs-200);text-overflow:ellipsis;white-space:nowrap;flex-direction:column;flex:1;gap:1px;display:flex;overflow:hidden}.push-note{font-family:var(--font);color:var(--text-sec);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.push-size,.push-age{font-family:var(--mono);font-size:var(--fs-200);flex:none}.push-age{color:var(--text-mute)}.auth-partners{gap:var(--sp-2);animation:auth-in .46s var(--ease) .25s both;flex-direction:column;display:flex;position:relative}.auth-partners-label{font-size:var(--fs-100);letter-spacing:.08em;text-transform:uppercase;color:#ffffff8c}.auth-partners-row{align-items:center;gap:var(--sp-5);padding:var(--sp-3) var(--sp-5);border-radius:var(--r);background:#fffffff0;border:1px solid #ffffff80;width:max-content;max-width:100%;display:inline-flex;box-shadow:0 6px 20px -8px #00000073}[data-theme=dark] .auth-partners-row{box-shadow:none;background:#e2e8f0e0;border-color:#ffffff24}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .auth-partners-row{box-shadow:none;background:#e2e8f0e0;border-color:#ffffff24}}.auth-partners-row img{object-fit:contain;inline-size:auto;display:block}.auth-partners-row img[alt^=翔安]{block-size:34px}.auth-partners-row img[alt^=利善美]{block-size:46px}.auth-partners-sep{background:var(--border);align-self:stretch;inline-size:1px}@media (width<=860px){.auth-partners{display:none}}.auth-partners-mobile{display:none}@media (width<=860px){.auth-partners-desktop{display:none}.auth-partners-mobile{display:flex}}.auth-form label{font-size:var(--fs-300);font-weight:var(--fw-medium);letter-spacing:0;text-transform:none;color:var(--text);margin:0 0 6px;display:block}.auth-form input[type=text],.auth-form input[type=password],.auth-form input:not([type]){width:100%;margin:0 0 var(--sp-4);padding:11px var(--sp-3);background:var(--bg-card);border:1px solid var(--border-strong);border-radius:var(--r-sm);font-size:var(--fs-400);color:var(--text);transition:border-color var(--t-fast), box-shadow var(--t-fast)}.auth-form input::placeholder{color:var(--text-mute)}.auth-form input:hover:not(:disabled){border-color:var(--text-mute)}.auth-form input:focus-visible{border-color:var(--primary);box-shadow:var(--shadow-focus);outline:none}.auth-remember{justify-content:space-between;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-2);display:flex}.auth-remember label{font-weight:var(--fw-normal);color:var(--text-sec);cursor:pointer;align-items:center;gap:8px;margin:0;display:inline-flex}.auth-remember input[type=checkbox]{width:17px;height:17px;accent-color:var(--primary-fill);cursor:pointer;margin:0}.auth-remember select{width:auto;padding:5px var(--sp-2);font-size:var(--fs-300);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-sec);background:0 0;margin:0}.auth-remember select:disabled{opacity:.5}.pw-wrap{position:relative}.pw-wrap input{padding-inline-end:44px}.pw-toggle{inline-size:40px;border-radius:0 var(--r-sm) var(--r-sm) 0;width:auto;color:var(--text-mute);cursor:pointer;transition:color var(--t-fast);background:0 0;border:0;justify-content:center;align-items:center;margin:0;padding:0;display:flex;position:absolute;inset-block:1px;inset-inline-end:1px}.pw-toggle:hover{color:var(--text);background:0 0}.pw-toggle:active{background:0 0}.pw-toggle:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}.err-msg:empty{display:none}.err-box{align-items:flex-start;gap:var(--sp-2);margin-top:var(--sp-3);padding:var(--sp-2) var(--sp-3);background:var(--danger-bg);border:1px solid var(--danger-bd);border-radius:var(--r-sm);color:var(--danger-ink);font-size:var(--fs-300);line-height:var(--lh-snug);animation:err-in .18s var(--ease) both;display:flex}.err-box svg{flex:none;margin-top:1px}@keyframes err-in{0%{opacity:0;transform:translateY(-3px)}}.auth-form h2{margin-bottom:2px}.auth-form .subtitle{margin-bottom:var(--sp-5);font-size:var(--fs-300)}.auth-mhead{margin-bottom:var(--sp-4)}.auth-mhead .auth-logo{border-radius:9px;block-size:34px;inline-size:34px}.auth-mhead .auth-logo img{block-size:19px;inline-size:19px}.auth-mhead-name{font-size:var(--fs-400)}.auth-partners-mobile .auth-partners-row{box-shadow:none;background:0 0;border:0;padding:0}.auth-partners-mobile .auth-partners-label{font-size:var(--fs-100);color:var(--text-mute)}.auth-brand:after{content:"";pointer-events:none;opacity:.16;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/></filter><rect width='140' height='140' filter='url(%23n)' opacity='0.5'/></svg>");position:absolute;inset:0}.auth-panel{background-color:var(--bg-card);background-image:radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--text) 7%, transparent) 1px, transparent 0);background-size:22px 22px;position:relative}.auth-panel:before{content:"";pointer-events:none;background:radial-gradient(52% 46% at 50% 50%, var(--bg-card) 40%, color-mix(in srgb, var(--bg-card) 55%, transparent) 72%, transparent 100%);position:absolute;inset:0}.auth-form{position:relative}@media (width<=860px){.auth{background:radial-gradient(120% 42% at 50% 0%, color-mix(in srgb, var(--primary) 12%, transparent), transparent 70%), var(--bg-base);animation:16s ease-in-out infinite tint-breathe}.auth-panel{background-image:none}.auth-panel:before{display:none}}@keyframes tint-breathe{50%{background-size:118% 120%,auto}}@media (prefers-reduced-motion:reduce){.mesh span,.auth{animation:none!important}}.mesh-light{display:none}.mesh-dark .mesh-a{background:#4f46e5}.mesh-dark .mesh-b{background:#0891b2}.mesh-dark .mesh-c{background:#7c3aed}@media (width<=860px){.mesh-light{z-index:0;pointer-events:none;display:block;position:absolute;inset:0;overflow:hidden}.mesh-light span{filter:blur(80px);opacity:.5}.mesh-light .mesh-a{background:color-mix(in srgb, var(--primary) 55%, transparent);inline-size:90%;inset-block-start:-18%;inset-inline-start:-22%}.mesh-light .mesh-b{background:color-mix(in srgb, var(--accent) 45%, transparent);opacity:.42;inline-size:78%;inset-block-end:-14%;inset-inline-start:8%}.mesh-light .mesh-c{opacity:.34;background:#7c3aed73;inline-size:70%;inset-block-start:42%;inset-inline-end:-26%}.auth-panel>.auth-form{z-index:1;position:relative}.auth{background:var(--bg-base);animation:none}}.mesh-dark span{filter:blur(70px)}
