/** * Browser-only room-access/passkey UI entry (Material 3 Expressive — `@m3e/web`). * * This is the ONLY module in the passkey UI that imports `@m3e/web/*`, * touches `document`/`window`/`navigator`, or constructs DOM. `logic.ts` * holds every pure, DOM-free function this file consumes and is unit * tested under Vitest's Node environment; this file is verified only by * Playwright (see `packages/e2e/tests/passkey-room-access.spec.ts`) — see * `docs/superpowers/specs/2026-07-11-passkey-ui-m3e-design.md`. * * Built by a SEPARATE Vite config (`vite.passkey.config.ts`), not part of * `player.js`'s bundle: `boot.ts` never imports `@m3e/web/*` and instead * constructs ``/`` markup by tag name, relying on * the custom elements this file registers (see the design doc's Build * pipeline + "Cold-load upgrade race" sections for why the passkey * entry's `