:root{--bg: #f5f7fa;--fg: #1f2329;--muted: #646a73;--card: #fff;--border: #e4e7ec;--primary: #1664ff;--danger: #e5484d;--good: #2ba471;--fair: #e3a008;--poor: #e5484d;--stage: #111418;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;color:var(--fg);background:var(--bg)}*{box-sizing:border-box}body{margin:0}h1{font-size:20px;margin:0 0 8px}h2{font-size:18px;margin:0 0 12px}h3{font-size:15px;margin:0 0 8px}p{margin:6px 0}button{border:1px solid var(--border);background:#fff;color:var(--fg);border-radius:6px;padding:8px 16px;font-size:14px;cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--primary);border-color:var(--primary);color:#fff}button.danger{background:var(--danger);border-color:var(--danger);color:#fff}select{margin-left:8px;padding:4px 8px;max-width:70%}.hint{color:var(--muted);font-size:13px}.card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:20px}.center{max-width:520px;margin:12vh auto;text-align:center}.page{max-width:720px;margin:24px auto;padding:0 16px;display:flex;flex-direction:column;gap:16px}.row{display:flex;gap:8px}.tip{padding:8px 12px;border-radius:6px;background:#eef3ff;font-size:14px}.tip.warn{background:#fff7e6}.tip.error{background:#fdecec;color:#b42318}.steps{display:flex;list-style:none;padding:0;margin:0;gap:8px}.steps li{flex:1;text-align:center;padding:8px 0;border-bottom:3px solid var(--border);color:var(--muted);font-size:13px}.steps li.done{border-color:#9dbcff}.steps li.active{border-color:var(--primary);color:var(--primary);font-weight:600}.consent ul{padding-left:20px;color:var(--muted);font-size:14px}.consent fieldset{border:1px solid var(--border);border-radius:8px;margin:12px 0}.check{display:flex;gap:8px;align-items:center;margin:8px 0}.device-check{display:flex;flex-direction:column;gap:10px}.preview{position:relative;aspect-ratio:16 / 9;background:var(--stage);border-radius:8px;overflow:hidden}.preview video{width:100%;height:100%;object-fit:cover}.meter{height:8px;background:var(--border);border-radius:4px;overflow:hidden}.meter div{height:100%;background:var(--good);transition:width .08s}.mirrored{transform:scaleX(-1)}.spinner{width:32px;height:32px;margin:16px auto;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.room{height:100vh;display:flex;flex-direction:column;background:var(--stage);color:#fff}.room .tip{margin:8px 16px 0;color:var(--fg)}.room-top{display:flex;gap:12px;align-items:center;padding:12px 16px;flex-wrap:wrap}.room-body{flex:1;display:flex;min-height:0}.stage{position:relative;flex:1;margin:12px 16px;min-height:0}.side{width:280px;padding:12px 16px 12px 0;display:flex;flex-direction:column;gap:12px;color:var(--fg)}.tile{position:relative;width:100%;height:100%;background:#000;border-radius:10px;overflow:hidden}.tile video{width:100%;height:100%;object-fit:contain}.tile-small{position:absolute;right:16px;bottom:16px;width:22%;min-width:160px;height:auto;aspect-ratio:16 / 9;border:2px solid #333}.tile-small video{object-fit:cover}.tile-placeholder{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:#9aa0a6;font-size:14px}.tile-label{position:absolute;left:8px;bottom:8px;font-size:12px;background:#00000080;padding:2px 8px;border-radius:4px}.toolbar{display:flex;justify-content:center;gap:12px;padding:12px}.badge{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:2px 10px;border-radius:999px;background:#ffffff1f}.badge .dot{width:8px;height:8px;border-radius:50%;background:#9aa0a6}.net-good .dot{background:var(--good)}.net-fair .dot{background:var(--fair)}.net-poor .dot{background:var(--poor)}.timer{margin-left:auto;font-variant-numeric:tabular-nums}.disclaimer{margin:0 16px;font-size:12px;color:#c9cdd4}.dialog-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:grid;place-items:center}.dialog{width:360px;color:var(--fg)}@media(max-width:720px){.room-body{flex-direction:column}.side{width:auto;padding:0 16px 12px}.tile-small{width:34%;min-width:110px}}
