:root{--canvas:#070b12;--canvas-bar:#0c131f;--bar-border:#1e293b;--brand-navy:#14213e;--ticket-surface:#f4f7fa;--ticket-ink:#0f172a;--ticket-meta:#475569;--ticket-rule:#e2e8f0;--pager-fill:#fba707;--pager-ink:#141b2e;--age-calm:#64748b;--age-late:#b91c1c;--band-offline:#b91c1c;--dot-live:#22c55e;--takeover-body:#cbd5e1;--fail-surface:#1a0e0e;--fail-ink:#fca5a5;--fail-body:#f87171;--fail-edge:#7f1d1d;--font:"Be Vietnam Pro", system-ui, sans-serif;--setup-heading:60px;--setup-body:28px;--setup-body-vi:24px;--pair-digit:88px;--clock:26px;--rounded-lg:12px;--rounded-xl:14px;--rounded-2xl:20px;--gutter:24px}*{box-sizing:border-box}html,body{background:var(--canvas);min-height:100%;font-family:var(--font);margin:0}body{min-height:100dvh}.canvas,.setup,.connected{min-height:100dvh;color:var(--ticket-surface);place-items:center;display:grid}.setup{padding:var(--gutter)}.card{border-radius:var(--rounded-2xl);text-align:center;background:var(--ticket-surface);width:min(1080px,100%);color:var(--ticket-ink);padding:64px 72px 60px}.brand{letter-spacing:.18em;text-transform:uppercase;color:var(--brand-navy);font-size:24px;font-weight:700}.brand .t{color:var(--pager-fill)}h1{font-size:var(--setup-heading);letter-spacing:-.03em;margin:26px 0 0;font-weight:700}p{font-size:var(--setup-body);color:var(--ticket-meta);margin:16px 0 0;font-weight:400;line-height:1.45}.vi{font-size:var(--setup-body-vi);color:var(--age-calm);margin-top:8px}.heading-vi{margin-top:10px;font-size:34px}.digits{gap:18px;margin:44px 0 10px;display:inline-flex}.digits span{background:var(--brand-navy);color:#fff;width:112px;height:140px;font-size:var(--pair-digit);letter-spacing:-.03em;border-radius:16px;font-weight:700;line-height:140px}.hint{color:var(--age-calm);margin-top:22px;font-size:22px}.waiting{color:var(--ticket-meta);justify-content:center;align-items:center;gap:14px;margin-top:34px;font-size:24px;font-weight:600;display:flex}.waiting i{background:var(--dot-live);border-radius:50%;width:14px;height:14px;animation:1.4s ease-in-out infinite pulse}.unavailable .card{background:var(--fail-surface);color:var(--fail-ink);border:2px solid var(--fail-edge)}.unavailable h1{color:var(--fail-ink)}.unavailable p,.unavailable .vi,.unavailable .brand,.unavailable .brand .t{color:var(--fail-body)}.unavailable .hint{color:var(--age-late)}.connected{grid-template-columns:1fr auto;place-items:end start;padding:64px}.connected strong{letter-spacing:-.03em;font-size:62px;font-weight:600;display:block}.connected span,.connected p{color:var(--takeover-body);display:block}.connected time{font-size:52px;font-weight:700}@keyframes pulse{50%{opacity:.35}}
