:root{--bg:#f4f5f7;--card:#fff;--line:#dfe3e8;--text:#1f2933;--sub:#6b7785;--main:#2563eb;--danger:#dc2626;--ok:#16a34a}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text);font:15px/1.6 -apple-system,"PingFang SC","Microsoft YaHei",sans-serif}
.wrap{max-width:1100px;margin:0 auto;padding:28px 20px}
h1{font-size:26px;margin:0 0 4px}
.sub{color:var(--sub);margin:0 0 22px}
.card{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:20px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
input{height:40px;padding:0 12px;border:1px solid var(--line);border-radius:6px;font-size:15px;min-width:200px}
button{height:40px;padding:0 18px;border:1px solid var(--line);border-radius:6px;background:#fff;font-size:15px;cursor:pointer;color:var(--text)}
button.primary{background:var(--main);border-color:var(--main);color:#fff;font-weight:600}
button.danger{background:var(--danger);border-color:var(--danger);color:#fff}
button:disabled{opacity:.45;cursor:not-allowed}
.stage{margin-top:18px;background:#0f172a;border-radius:8px;aspect-ratio:16/9;display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}
.stage video{width:100%;height:100%;object-fit:contain;background:#000}
.stage .tip{color:#94a3b8}
.status{margin-top:14px;color:var(--sub);font-size:14px;display:flex;gap:18px;flex-wrap:wrap}
.status b{color:var(--text)}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#9ca3af;margin-right:6px}
.dot.on{background:var(--ok)}.dot.bad{background:var(--danger)}
.err{color:var(--danger);margin-top:10px;min-height:22px}
