:root{--bg:#0d1017;--panel:#151a23;--panel-2:#1b2130;--border:#262e3f;--text:#e6e9f0;--muted:#8a93a6;--accent:#5b8cff;--accent-text:#fff;--live:#2ecc8f;--warn:#f2b84b;--danger:#ff6b6b;--direct:#2ecc8f;--relay:#f2b84b;--radius:12px;--mono:ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:light){:root{--bg:#f5f6f9;--panel:#fff;--panel-2:#f0f2f6;--border:#dfe3ea;--text:#151a23;--muted:#5d667a;--accent:#3866e8;--live:#149a68;--warn:#b7791f;--danger:#d64545;--direct:#149a68;--relay:#b7791f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;margin:0;font:14px/1.45 -apple-system,BlinkMacSystemFont,Segoe UI,Inter,system-ui,sans-serif}h2,h3,h4{margin:0;font-weight:600}h2{font-size:18px}h3{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-size:13px}h4{margin-bottom:8px;font-size:14px}code,.mono{font-family:var(--mono);font-size:12.5px}.subtle{color:var(--muted)}.small{font-size:12px}.pad{padding:10px 2px}.truncate{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.app{flex-direction:column;min-height:100vh;display:flex}.header{z-index:2;background:color-mix(in srgb, var(--bg) 85%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:12px 20px;display:flex;position:sticky;top:0}.brand{white-space:nowrap;flex:none;align-items:center;gap:8px;font-size:15px;font-weight:650;display:flex}.logo{background:var(--accent);width:28px;height:28px;color:var(--accent-text);border-radius:8px;place-items:center;font-size:16px;display:grid}.status{align-items:center;gap:8px;min-width:0;display:flex}.status-label{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-weight:550;overflow:hidden}.dot{background:var(--muted);border-radius:50%;flex:none;width:8px;height:8px}.dot-connected{background:var(--live);box-shadow:0 0 0 3px color-mix(in srgb, var(--live) 25%, transparent)}.dot-connecting,.dot-loading{background:var(--warn);animation:1s infinite alternate pulse}.dot-error{background:var(--danger)}.layout{flex:1;grid-template-columns:340px 1fr;align-content:start;align-items:start;gap:16px;width:100%;max-width:1280px;margin:0 auto;padding:16px 20px 32px;display:grid}.sidebar,.content{flex-direction:column;gap:16px;min-width:0;display:flex}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:12px;padding:16px;display:flex}.card-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.stack{flex-direction:column;gap:10px;display:flex}.inline{gap:8px;display:flex}.inline input{flex:1;min-width:0}.field{flex-direction:column;gap:6px;display:flex}.field>span{color:var(--muted);font-size:12px}.hint{color:var(--muted);overflow-wrap:anywhere;font-size:12px}.hint.bad{color:var(--danger)}.linkbtn{font:inherit;color:var(--accent);cursor:pointer;background:0 0;border:0;align-self:flex-start;padding:0;font-size:12px}.linkbtn:disabled{opacity:.5;cursor:default}.idrow{background:var(--panel-2);border-radius:8px;align-items:center;gap:8px;padding:6px 6px 6px 10px;display:flex}.idrow code{flex:1}input,select{font:inherit;color:var(--text);background:var(--panel-2);border:1px solid var(--border);border-radius:8px;outline:none;padding:8px 10px}input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 25%, transparent)}input:disabled{opacity:.6}.check{color:var(--muted);align-items:center;gap:6px;font-size:12.5px;display:flex}.btn{font:inherit;cursor:pointer;border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:8px 14px;font-weight:550;transition:filter .12s,background .12s;display:inline-flex}.btn:hover:not(:disabled){filter:brightness(1.12)}.btn:disabled{opacity:.5;cursor:default}.btn-sm{padding:5px 10px;font-size:12.5px}.btn-primary{background:var(--accent);color:var(--accent-text)}.btn-secondary{background:var(--panel-2);color:var(--text);border-color:var(--border)}.btn-ghost{color:var(--accent);background:0 0}.btn-live{background:color-mix(in srgb, var(--live) 18%, transparent);color:var(--live);border-color:color-mix(in srgb, var(--live) 45%, transparent)}.chip{background:var(--panel-2);border:1px solid var(--border);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;max-width:320px;padding:3px 9px;font-size:12px;overflow:hidden}.chip-sm{padding:1px 7px;font-size:11px}.chip-fixed{flex:none;max-width:none}.chip-direct{color:var(--direct);border-color:color-mix(in srgb, var(--direct) 45%, transparent)}.chip-relay{color:var(--relay);border-color:color-mix(in srgb, var(--relay) 45%, transparent)}.chips{flex-wrap:wrap;place-content:flex-start flex-end;align-items:flex-start;gap:4px;display:flex}.alert{background:color-mix(in srgb, var(--danger) 12%, transparent);color:var(--text);border:1px solid color-mix(in srgb, var(--danger) 40%, transparent);overflow-wrap:anywhere;border-radius:8px;padding:8px 10px}.ok{color:var(--live)}.devices{flex-direction:column;gap:2px;max-height:420px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.devices li{border-radius:8px;align-items:center;gap:10px;padding:8px;display:flex}.devices li:hover{background:var(--panel-2)}.devices li.current{background:color-mix(in srgb, var(--accent) 14%, transparent)}.dev-main{flex:1;min-width:0}.dev-name{text-overflow:ellipsis;white-space:nowrap;font-weight:550;overflow:hidden}.dev-meta{color:var(--muted);font-size:11.5px}.bars{flex:none;align-items:flex-end;gap:2px;width:22px;display:inline-flex}.bars span{background:var(--border);border-radius:1px;width:4px}.bars span.on{background:var(--accent)}.device h2{margin-bottom:2px}.service{border-top:1px solid var(--border);padding-top:14px}.chars{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;display:grid}.char{background:var(--panel-2);border:1px solid var(--border);border-radius:10px;flex-direction:column;gap:10px;min-width:0;padding:12px;display:flex}.char.live{border-color:color-mix(in srgb, var(--live) 55%, transparent)}.char-head{justify-content:space-between;align-items:flex-start;gap:8px;display:flex}.char-name{font-weight:600}.char-body{justify-content:space-between;align-items:flex-end;gap:8px;min-height:44px;display:flex}.value{flex-direction:column;gap:2px;min-width:0;display:flex}.decoded{letter-spacing:-.01em;overflow-wrap:anywhere;font-size:22px;font-weight:650}.raw{overflow-wrap:anywhere;flex-wrap:wrap;gap:8px;display:flex}.trend{color:var(--live);flex-direction:column;flex:none;align-items:flex-end;display:flex}.spark{display:block}.char-actions{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.write{flex:1;gap:6px;min-width:200px;display:flex}.write input{flex:1;min-width:0;padding:5px 8px}.write select{padding:5px 6px}.empty{text-align:center;align-items:center;padding:48px 24px}.empty p{color:var(--muted);max-width:420px;margin:0}.empty-icon{background:color-mix(in srgb, var(--accent) 16%, transparent);width:56px;height:56px;color:var(--accent);border-radius:16px;place-items:center;font-size:28px;display:grid}.log ul{max-height:220px;margin:0;padding:0;font-size:12.5px;list-style:none;overflow-y:auto}.log li{border-bottom:1px dashed var(--border);overflow-wrap:anywhere;padding:3px 0}.log-warn{color:var(--warn)}.log-error{color:var(--danger)}.spinner{vertical-align:-2px;border:2px solid;border-right-color:#0000;border-radius:50%;width:12px;height:12px;animation:.8s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{0%{opacity:.4}to{opacity:1}}@media (max-width:860px){.layout{grid-template-columns:1fr;padding:12px 16px 24px}.header{padding:10px 16px}.chip-addr{display:none}.chip{flex:none}.brand .subtle{display:none}}
