- Add Documents module entry (new in v0.32.0)
- Update Tasks with archive and inline reminder presets
- Update Calendar with overlapping events and file attachments
- Update Family with phone/email/birthday fields and sync details
- Correct language count from 14 to 15, add Ukrainian (uk)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Overlapping timed events in week/day views now render side-by-side using a column-layout algorithm
- Calendar events support optional file attachments (images, PDFs, documents up to 5 MB)
- Attachment images shown in event popup; other files as download links
- Birthday modal redesigned with photo/avatar side-by-side with name/date fields
- DB migration 27: adds attachment_name, attachment_mime, attachment_size, attachment_data columns to calendar_events
- Server-side MIME allowlist and size validation for attachments
- i18n: all 15 locales include new attachment keys (de properly translated)
Co-Authored-By: Rafael Foster <rafaelfoster@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace innerHTML with replaceChildren/insertAdjacentHTML in birthdays.js and calendar.js (hook compliance)
- Translate calendar attachment i18n keys to German in de.json
- Fix missing diacritical marks in pt.json attachment strings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removes the sequential fade-out → wait → fade-in pattern that causes
a visible black flash in dark mode between page transitions. Replaces
with immediate crossfade (new page fades in over old content, no wait).
Changes:
- layout.css: Add page-crossfade-in keyframe (0.18s) + prefers-reduced-motion override
- router.js: Remove outClass/inClass direction logic and oldPage fadeout wait
The new approach:
1. Old page remains visible until new page renders
2. New page fades in (0.18s) with full opacity, overlaying old content
3. No 120ms delay = no visible flash in dark mode
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>