:root{--bg:#f8fafc;--surface:#ffffff;--text:#0f172a;--muted:#475569;--line:#cbd5e1;--brand:#0a7c59;--brand-text:#ffffff;--danger:#b42318;--ok:#067647;--focus:#1d4ed8}@media (prefers-color-scheme:dark){:root{--bg:#0b1220;--surface:#111a2e;--text:#e2e8f0;--muted:#a3b1c6;--line:#2a3a55;--focus:#93c5fd}}*{box-sizing:border-box}body,html{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}main{padding:16px}header.shell,main{max-width:560px;margin:0 auto}header.shell{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 16px}header.shell .brand{font-weight:700}.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px;margin:12px 0}h1{font-size:1.5rem}h1,h2{margin:0 0 8px}h2{font-size:1.15rem}.muted,p.muted{color:var(--muted)}label{display:block;font-weight:600;margin:12px 0 4px}input,select{width:100%;padding:12px;border:1px solid var(--line)}button,input,select{font-size:1rem;border-radius:8px;background:var(--surface);color:var(--text)}button{min-height:48px;padding:0 16px;font-weight:600;border:1px solid var(--line);cursor:pointer}button.primary{background:var(--brand);color:var(--brand-text);border-color:var(--brand);width:100%;margin-top:12px}button.danger{color:var(--danger)}button:disabled{opacity:.55;cursor:not-allowed}:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.row>*{flex:1 1 auto}.code{font:700 2.6rem/1.1 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.18em;text-align:center;margin:12px 0}.dots{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.dot{width:22px;height:22px;border-radius:50%;border:2px solid var(--brand)}.dot.on{background:var(--brand)}.ok{color:var(--ok);font-weight:700}.error{color:var(--danger)}.pill{display:inline-block;font-size:.85rem;padding:2px 8px;border-radius:999px;border:1px solid var(--line)}ul.plain{list-style:none;padding:0;margin:0}ul.plain li{padding:10px 0;border-bottom:1px solid var(--line)}.queue-item .code{font-size:2rem;text-align:left;margin:4px 0}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.qr svg,img.qr{width:220px;height:220px;background:#fff;display:block;margin:8px auto}