The timeline's hour lines become a per-hour grid, in the month grid's visual
language: 24 rounded cells on surfaceContainer, separated by a 2dp gap that
reveals the surface behind them, so the hour boundary is negative space rather
than a stroke. The column's Card takes surface and the container colour moves
onto the cells.
- `HourLines.kt` becomes `HourGrid.kt`: `hourGridCells` draws the cells in the
same `drawBehind` the lines used, under the blocks and above the column.
- The cell corner is the event chip's 4dp, not the month grid's 12dp, and is
clamped to half the shorter side so a fit-the-day sliver or a narrow week
column can't round into a lozenge.
- The hour gutter's label lift comes off its own line height instead of a
hardcoded -6dp, so label and seam line up at any font scale.
- The preference keeps its stored key and its string keys; only the English
source text and the Kotlin names change (`showHourLines` → `showHourGrid`).
Block placement is not left untouched, as the issue expected: a block gives up
the same half-gap at each end the cells do, or an on-the-hour event overhangs
the seam into its neighbours' cells. That inset follows through to the drag —
the floating copy takes the same gap off, so it stays the size of the block it
lifted off (#267), and the grab is measured off the placement rather than the
seated position. An end cut at midnight keeps none of it and stays against the
column edge.
Closes#113