An event companion and onboarding experience for the ATmosphere (alpha) atmo.quest

feat(event): step 5 — public scan-to-checkin flow master

- port internal/event (Record/CreateInput/Cache/Get/Put/LookupByQRToken/IsOngoing) - port internal/checkin (Put + Current) - features/event/{handlers,routes}.go: EventScan, EventQR, EventScanCheckin, EventFlushLocal - features/event/pages/event.templ: EventScanView landing page - wire TargetCurrentEvent + also-checkin into features/connect: * Connect handler queries checkin.Current + event.Get to populate event chip * ConnectConfirm re-validates claimed event_uri server-side then writes checkin * connection record carries event_uri when also-checkin is honored - router: register event.SetupRoutes after connect routes (all unauthed responses match step 4 pattern): - GET /e/{token} -> 404 unknown / 200 landing - GET /e/{token}/qr.svg -> 404 unknown / SVG - POST /e/{token}/checkin -> 302 /signin (unauthed) / 303 /?checkedin=1 - POST /event/flush-local -> 302 /signin (unauthed) / 200 JSON admin event CRUD intentionally deferred to step 6. tests: internal/event + internal/checkin pass.