Create Omni/Cal/Web.hs as a Wai application. Mount it at /cal in Omni/Web/Core.hs.
Routes:
- GET /cal → waterfall timeline (default view)
- GET /cal/agenda → plain agenda list
- GET /cal/week → rolling week grid
- GET /cal/search?q=... → search results
- GET /cal/events?from=DATE&to=DATE → htmx partial for infinite scroll
Query params for all views:
- calendars= comma-separated calendar names to show (persisted via cookie)
- from= start date (default: today)
Include a sidebar/header with:
- Calendar toggle checkboxes (which calendars are visible)
- View switcher links
- Search box
Use Omni.Web.Style design system (sharedShell, CSS custom properties, dark/light mode).
Ava verified: commit found in live history referencing this task/feature. Moving to Verified.