v5.9 — April 17, 2026

Added

  • VacationPage grid — day number sub-header — sticky row at 'top: 22' showing day numbers 5, 10, 15, 20, 25 per month ('fontSize: 8, color: rgba(255,255,255,0.35)'). Year-boundary spacer mirrored from person rows for exact alignment. Dormant numbers 30/31 excluded via 'dayNum < 30'.
  • CP Settings — timezone dropdown — 9 zones in order: Europe/Belgrade, Europe/Sarajevo, Europe/Podgorica, Europe/Zagreb, Europe/Ljubljana, Europe/Berlin, Europe/Vienna, Europe/London, UTC. Auto-saves on change ('UPDATE tenants SET timezone'), reverts on error. Default: 'Europe/Belgrade'.
  • 'tenants.timezone' column — migration '042_tenant_timezone.sql' ('ADD COLUMN IF NOT EXISTS timezone text DEFAULT 'Europe/Belgrade'').

Fixed

  • VacationPage toolbar legend — all shapes updated to 10×10 rounded squares ('borderRadius: 2') matching grid cells: '#EF9F27' vacation, 'rgba(255,255,255,0.35)' civil holiday, 'rgba(255,255,255,0.25)' border pending civil, 'rgba(255,255,255,0.04)' weekend.
  • CompanyHolidaysModal + MyVacationModal — removed duplicate footer close button (Cancel / Discard). Only header ✕ remains; 'Modal' wrapper handles unsaved-changes guard via 'hasUnsavedChanges' prop.
  • Grid + modal shapes unified — all holiday and vacation shapes are 10×10 rounded squares across grid cells, CompanyHolidaysModal row dots, MyVacationModal row dots and footer legend. Colors: vacation '#EF9F27', state/civil 'rgba(255,255,255,0.35)', religious '#c084fc', pending outline only.