···6767 with the label `📷 scan to connect` (accurate now that it decodes), plus
6868 - a hidden `<input type="file" accept="image/*" capture="environment">` used
6969 only for the fallback path.
7070- This single shared component already drives all three placements (profile,
7171- `/e/{token}` scan-landing, and `/events/{token}` event detail), so they all
7272- inherit the scanner automatically.
7070+ This single shared component drives all four placements (profile,
7171+ `/e/{token}` scan-landing, `/events/{token}` event detail, and the logged-in
7272+ home dashboard at `/`), so they all inherit the scanner automatically.
7373- **CSS** (`web/resources/static/css/terminal.css`) — new overlay/viewfinder
7474 styles. The existing mobile-only `.camera-scan` rule
7575 (`display:none` above 768px) is unchanged, keeping the button mobile-only.
···147147- `web/resources/static/js/qr-scan.js` — new module.
148148- `features/common/layouts/camerabutton.templ` — button markup change
149149 (+ regenerated `*_templ.go`).
150150+- `features/index/pages/index.templ` — add the shared button to the logged-in
151151+ home dashboard, under the QR flip card (+ regenerated `*_templ.go`).
150152- `features/common/layouts/base.templ` — script includes
151153 (+ regenerated `*_templ.go`).
152154- `web/resources/static/css/terminal.css` — overlay styles.