.spk-side,.dialog,.toast{--bg:#f4f6f8;--panel:#fff;--ink:#1d2733;--muted:#637083;--line:#d9dee5;--bar:#37474f;--accent:#0f8b8d;--warn-bg:#fff4e6;--err-bg:#fff0f0;--err-ink:#a51d1d;--ok-bg:#ebfbee;--ok-ink:#1f6b33;color:var(--ink);box-sizing:border-box;font-family:Microsoft JhengHei,PingFang TC,Noto Sans TC,system-ui,sans-serif}.spk-side *,.dialog *{box-sizing:border-box}.spk-side button,.dialog button{font:inherit;color:var(--ink);cursor:pointer;box-shadow:none;background:#fff;border:1px solid #b0bec5;border-radius:4px;padding:4px 10px;font-size:13px}.spk-side button:disabled,.dialog button:disabled{opacity:.5;cursor:default}.spk-side select,.spk-side input,.dialog select,.dialog input,.dialog textarea{font:inherit;font-size:13px}.spk-side{background:var(--panel);border-left:1px solid var(--line);z-index:8500;flex-direction:column;width:min(440px,96vw);display:flex;position:fixed;top:29px;bottom:0;right:0;box-shadow:-6px 0 18px #0000001f}.spk-side-head{border-bottom:1px solid var(--line);background:#eceff1;justify-content:space-between;align-items:center;gap:8px;padding:6px 8px;display:flex}.spk-side-tabs{gap:4px;display:flex}.spk-side-tabs button.active{border-color:var(--accent);font-weight:700}.spk-side-body{flex:1;padding:10px;font-size:13px;overflow:auto}#spk-btn-stop{color:#fff;cursor:pointer;background:#f44336;border:none;border-radius:4px;width:100%;margin-top:4px;padding:6px 0}#spk-btn-stop:disabled{color:#78909c;cursor:default;background:#cfd8dc}.spk-side .muted,.dialog .muted{color:var(--muted);font-size:13px}.spk-side .section-title,.dialog .section-title{align-items:center;gap:8px;margin:12px 0 6px;font-weight:700;display:flex}.spk-side .row,.dialog .row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.spk-side .port-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.spk-side .port-card{border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:4px;min-width:0;padding:8px;display:flex}.spk-side .port-head{align-items:center;gap:6px;display:flex}.spk-side .port-letter{background:var(--bar);color:#fff;text-align:center;border-radius:4px;width:22px;font-weight:700}.spk-side .port-card select{width:100%;padding:3px 4px}.spk-side .port-detected{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.spk-side .port-values{background:var(--bg);word-break:break-all;border-radius:4px;max-height:120px;padding:4px;font-family:Consolas,Courier New,monospace;font-size:12px;overflow:auto}.spk-side .port-values .k{color:var(--muted)}.spk-side .port-card.mismatch{background:var(--warn-bg);border-color:#f08c00}.spk-side .hub-live{grid-template-columns:auto 1fr;gap:2px 10px;margin-top:6px;display:grid}.spk-side .drivebase{border:1px solid var(--line);border-radius:8px;grid-template-columns:auto 1fr;align-items:center;gap:6px 8px;padding:8px;display:grid}.spk-side .drivebase input[type=number]{width:90px}.spk-side .ext-item{border:1px solid var(--line);border-radius:8px;margin-bottom:8px;padding:8px}.spk-side .ext-item .swatch{border-radius:3px;width:12px;height:12px;display:inline-block}.spk-side .badge,.dialog .badge{background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:1px 8px;font-size:11px}.dialog textarea.json-editor{width:100%;min-height:320px;font-family:Consolas,Courier New,monospace;font-size:12.5px;line-height:1.45}.spk-side .err-list,.dialog .err-list{color:var(--err-ink);background:var(--err-bg);border-radius:6px;margin:6px 0;padding:6px 10px 6px 26px}.spk-side .ok-box,.dialog .ok-box{color:var(--ok-ink);background:var(--ok-bg);border-radius:6px;margin:6px 0;padding:6px 10px}.dialog .code-view{border:1px solid var(--line);white-space:pre;background:#fbfcfd;border-radius:6px;max-height:50vh;margin:0;padding:8px;font-family:Consolas,Courier New,monospace;font-size:12.5px;line-height:1.5;overflow:auto}.toast{color:#fff;z-index:100001;background:#263238;border-radius:8px;max-width:80vw;padding:10px 16px;font-size:14px;position:fixed;bottom:40px;left:50%;transform:translate(-50%);box-shadow:0 6px 18px #00000040}.toast.error{background:#a51d1d}.dialog{border:none;border-radius:10px;width:min(760px,94vw);max-height:88vh;padding:0;box-shadow:0 12px 40px #0000004d}.dialog::backdrop{background:#10161d73}.dialog-head{border-bottom:1px solid var(--line);padding:12px 16px;font-size:16px;font-weight:700}.dialog-body{max-height:calc(88vh - 120px);padding:12px 16px;font-size:14px;line-height:1.6;overflow:auto}.dialog-foot{border-top:1px solid var(--line);justify-content:flex-end;gap:8px;padding:10px 16px;display:flex}.spk-side[hidden],.toast[hidden]{display:none!important}.fw-wizard p{margin:6px 0}.fw-step{gap:10px;margin:12px 0;display:flex}.fw-step-n{background:var(--accent);color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;width:26px;height:26px;font-weight:700;display:flex}.fw-step-title{margin-bottom:2px;font-weight:700}.fw-step ol,.fw-step ul{margin:4px 0;padding-left:20px}.fw-name{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.fw-name input{width:280px;padding:4px 6px}.dialog button.fw-start{color:#fff;background:#2e7d32;border-color:#2e7d32;padding:8px 16px;font-size:14px;font-weight:700}.dialog button.fw-start:disabled{background:#a5d6a7;border-color:#a5d6a7}.fw-progress{margin-top:10px}.fw-bar{background:#e0e0e0;border-radius:6px;height:12px;overflow:hidden}.fw-bar-fill{background:#1e88e5;width:0;height:100%;transition:width .2s}.fw-bar-fill.ok{background:#2e7d32}.fw-bar-fill.err{background:#c62828}.fw-status{margin-top:4px;font-size:13px}.fw-result{background:var(--bg);border-radius:6px;margin-top:8px;padding:8px 10px}.fw-help{margin-top:12px;font-size:13px}.fw-help summary{cursor:pointer;color:var(--muted)}
