Zoom levels and sub-hour ticks
Three zoom levels — 56, 112, or 224 px per hour. Sub-hour gridlines and gutter labels scale together: 30-min at 1×, 15-min at 2×, 5-min at 4×. Snap granularity tightens to 5 min at the highest zoom.
A 60-minute hour is 56 pixels tall by default. That’s enough to
see the day at a glance but tight if you’re trying to squeeze a
15-minute follow-up between two existing bookings. The zoom control
in the toolbar — [−] [1× / 2× / 4×] [+] — switches between three
hour-heights, with sub-hour gridlines that scale to match.
Three levels
| Zoom | Height per hour | Sub-hour gridlines | Gutter labels | Snap |
|---|---|---|---|---|
| 1× | 56 px | 30 min (subtle) | hour only | 15 min |
| 2× | 112 px | 30 + 15 min | + :30 | 15 min |
| 4× | 224 px | 30 + 15 + 5 min | + :15 :30 :45 | 5 min |
Each tier of gridline is rendered at slightly different opacity (stronger at :30, fainter at :15 / :45, even fainter at the 5-min ticks) so the half-hour reads first when you scan the column.
When to use each
- 1× — typical day. You want a 9-to-6 day visible without scrolling.
- 2× — when several appointments are within 15-minute boundaries of each other and you want to read the gaps.
- 4× — when you’re booking back-to-back into 5-minute gaps (chiropractic adjustments, sales calls). The snap also tightens to 5 minutes here so the cursor lines up with the visible ticks.
Keyboard
+or=— zoom in−— zoom out
Either toolbar button or keyboard shortcut writes the zoom to your calendar prefs (per-tenant localStorage).
What scales, what doesn’t
Scales with zoom:
- Row height (56 / 112 / 224 px)
- Gridline density
- Gutter label density
- Hover preview block height (matches snap granularity)
- Snap granularity
Stays the same:
- Card paddings + font sizes — the card content doesn’t get bigger with zoom; you just have more vertical space
- Status pill, resize handle, accent stripe widths
- Toolbar, toolbar fonts
Tip
If you spend most of your day at 2× zoom and want the calendar to boot at that level, the zoom preference is per-tenant — set it once and it sticks across reloads + devices that share your browser profile.