Continuous's month blocks make the boundaries legible, but the seams are exactly
what someone who wants a dense calendar doesn't want. Both are now offered:
- **Dense** is the old flowing layout, kept rather than replaced — one
uninterrupted stream of weeks with months running into each other, the 1st
naming its month, and the top bar keeping the full month title (there is no
sticky header to defer to).
- Continuous gains a **rule under its month label**, closing the header off
against the grid. On trial: it comes out again if it doesn't earn its place.
One provider query serves both. `ContinuousMonthUiState.Success` now carries the
same loaded window laid out twice — `monthsByIndex` clipped into blocks,
`weeksByIndex` left whole — rather than standing up a second flow and querying
the same range again. Both styles report *months* as they scroll, so the window
hysteresis is shared; `weekWindowFor` maps a month window onto the Dense rows it
covers, widened a week each side so boundary rows don't flicker.
The list state is keyed on style *and* week start: Dense indexes by week, which
the week-start preference moves, while Continuous indexes by month, which it
doesn't — carrying an offset between the two would land somewhere arbitrary.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>