- api/auth.js: zero-dep OIDC authorization-code flow with PKCE against
Authentik; HMAC-signed HttpOnly session cookies (SESSION_SECRET)
- requireAdmin now accepts an OIDC session in the admin group; legacy
ADMIN_SECRET bearer kept for n8n and scripts
- New client endpoints: GET /api/my-bookings, owner-gated contract download
- Bookings created while signed in are bound to the client's OIDC sub
- Dashboard: "Sign in with SSO" alongside passphrase fallback
- New /my-bookings portal page (nginx route + themed page)
- Fix booking modal: content area now scrolls; nav no longer overlaps the
calendar on short viewports (was swallowing clicks on date cells)
- 10 new Playwright tests; suite green at 67
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>