:root{--bg: #0b1220;--bg-soft: #121b2e;--card: #16203a;--border: #253352;--text: #e8edf7;--muted: #94a3b8;--accent: #38bdf8;--accent-strong: #0ea5e9;--ok: #34d399;--warn: #fbbf24;--danger: #f87171;--radius: 14px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:radial-gradient(1200px 600px at 50% -10%,#1b2947 0%,var(--bg) 55%);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;-webkit-font-smoothing:antialiased}.app{min-height:100%;max-width:720px;margin:0 auto;padding:20px 16px 48px;display:flex;flex-direction:column;gap:20px}.topbar{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.brand{background:none;border:0;padding:0;color:var(--text);font-size:22px;font-weight:700;letter-spacing:.3px;cursor:pointer}.brand:before{content:"📡 "}.tag{color:var(--muted);font-size:13px}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px}.card+.card{margin-top:14px}h2{margin:0 0 12px;font-size:17px}p{margin:0 0 10px;line-height:1.6}.muted{color:var(--muted);font-size:13px}.row{display:flex;gap:10px;flex-wrap:wrap}.choices{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media(max-width:480px){.choices{grid-template-columns:1fr}}.choice{border:1px solid var(--border);background:var(--bg-soft);border-radius:var(--radius);padding:18px;text-align:left;color:var(--text);cursor:pointer;transition:border-color .15s,transform .15s}.choice:hover:not(:disabled){border-color:var(--accent);transform:translateY(-1px)}.choice strong{display:block;font-size:16px;margin-bottom:6px}button{font:inherit}.btn{border:0;border-radius:10px;padding:10px 16px;background:var(--accent-strong);color:#04121f;font-weight:600;cursor:pointer}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.ghost{background:transparent;border:1px solid var(--border);color:var(--text);font-weight:500}.btn.ghost:hover:not(:disabled){border-color:var(--accent)}input[type=text],textarea{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:10px;color:var(--text);padding:11px 13px;font:inherit;outline:none}input[type=text]:focus,textarea:focus{border-color:var(--accent)}textarea{resize:vertical;min-height:90px}.code-input{letter-spacing:6px;text-align:center;font-size:22px;font-weight:700;text-transform:uppercase}.code-display{font-size:30px;font-weight:700;letter-spacing:6px;text-align:center;margin:6px 0 14px;color:var(--accent)}.qr{display:block;margin:0 auto 12px;background:#fff;padding:10px;border-radius:12px;width:260px;height:260px}.status{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--muted)}.dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex:none}.dot.ok{background:var(--ok);box-shadow:0 0 8px var(--ok)}.dot.busy{background:var(--warn);animation:pulse 1.2s ease-in-out infinite}.dot.bad{background:var(--danger)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}.alert{border-radius:10px;padding:12px 14px;font-size:14px;line-height:1.6;border:1px solid}.alert.error{background:#f871711a;border-color:#f8717173;color:#fecaca}.alert.info{background:#38bdf814;border-color:#38bdf859;color:#bae6fd}.alert.ok{background:#34d3991a;border-color:#34d39966;color:#a7f3d0}.badge{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:3px 9px;border-radius:999px;border:1px solid var(--border);color:var(--muted)}.badge.ok{border-color:#34d39980;color:var(--ok)}.filelist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.filelist li{display:flex;align-items:center;gap:10px;background:var(--bg-soft);border:1px solid var(--border);border-radius:10px;padding:10px 12px;font-size:14px}.filelist .name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filelist .size{color:var(--muted);font-size:12px;flex:none}.filelist .mark{flex:none;font-size:12px}.mark.ok{color:var(--ok)}.mark.bad{color:var(--danger)}.progress{height:8px;background:var(--bg);border-radius:999px;overflow:hidden;margin:10px 0 8px}.progress>span{display:block;height:100%;background:linear-gradient(90deg,var(--accent-strong),var(--accent));transition:width .2s}.metrics{display:flex;justify-content:space-between;font-size:13px;color:var(--muted)}.text-box{background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:12px;white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;max-height:260px;overflow:auto}footer{margin-top:auto;color:var(--muted);font-size:12px;line-height:1.7;text-align:center}
