Calendar grid

All copy is placeholder. Real strings come from the i18n layer.

Both layouts

Narrow is the base; chips are added at the breakpoint. The grid says where; a list beneath it says what.

narrow — count in the cell

August 2026

wide — chips carry the detail

August 2026
The 14th is today — an accent bar on the leading edge, never a colour fill alone. The 19th is selected — a filled day number, and aria-pressed on the button.

What the component cannot decide

The first day of the week comes from the locale. Monday in much of the world, Sunday in much of the rest, Saturday in some. Same for the month and weekday names: locale data, which no translation catalogue reaches — recompute them when the language changes. The prototype computed them once at load and they stayed English.

Grouping is by the record's own calendar day, not by an instant. An Event at 00:30 belongs to the day it is on at its Venue. Converting an instant back to a day with toISOString lands it on the previous day for anything east of UTC — which is the bug this screen is most likely to have.

A busy day, and an empty month

A cell that grew to fit twelve items would reflow the month, so overflow is a "+2 more" that scrolls the list beneath to that day. A month with nothing in it keeps its grid — it still has to be navigable — and says so underneath.