:root{--bg:#f5f6f8;--surface:#fff;--text:#16181d;--muted:#646b78;--border:#e2e5ea;--accent:#2856f0;--good:#1a8a4a;--warn:#b7791f;--bad:#c53030;color:var(--text);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}@media (prefers-color-scheme:dark){:root{--bg:#111317;--surface:#1b1e24;--text:#eceef2;--muted:#9aa1ad;--border:#2c3039;--accent:#6d8dff;--good:#48c27c;--warn:#e0a84a;--bad:#f07070}}*{box-sizing:border-box}body{background:var(--bg);margin:0}h1{margin:0 0 .75rem;font-size:1.5rem}h2{margin:0 0 .75rem;font-size:1.1rem}.muted{color:var(--muted)}.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px}button,input{font:inherit}input{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;padding:10px 12px}button{cursor:pointer;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;padding:10px 16px}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}button.ghost{background:0 0}button:disabled{opacity:.5;cursor:default}.verify{max-width:480px;margin:0 auto;padding:24px 16px}.tips{color:var(--muted);padding-left:1.2rem}.tips li{margin-bottom:4px}.consent{align-items:flex-start;gap:8px;margin:16px 0;display:flex}.verify button.primary{width:100%;padding:14px}.capture{color:#fff;background:#000;flex-direction:column;height:100dvh;display:flex}.stage{flex:1;position:relative;overflow:hidden}.stage video{object-fit:cover;width:100%;height:100%;transform:scaleX(-1)}.oval{border:4px solid #fff9;border-radius:50%;width:210px;height:280px;transition:border-color .2s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 100vmax #00000073}.oval.ok{border-color:#48c27c}.prompt{padding:16px 16px calc(16px + env(safe-area-inset-bottom));text-align:center}.instruction{margin:8px 0 4px;font-size:1.35rem;font-weight:600}.prompt .hint{color:#c4c8d0;min-height:1.4em;margin:0}.steps{justify-content:center;gap:8px;display:flex}.steps span{background:#444;border-radius:3px;width:28px;height:6px}.steps span.active{background:#fff}.steps span.done{background:#48c27c}.steps span.failed{background:#f07070}.result{text-align:center}.result-icon{margin-bottom:12px;font-size:3rem;font-weight:700;line-height:1}.result.ok .result-icon{color:var(--good)}.result.fail .result-icon{color:var(--bad)}button.cancel{width:100%;color:var(--muted);border:none;margin-top:8px}.capture button.cancel{color:#c4c8d0;background:0 0;width:auto;padding:6px 12px}
