- Single system splash (core-splashscreen) kept on screen until the first
events load (StartupState), then reveals the ready app — removes the
two-stage 'icon then title' splash and the laggy half-loaded entry
- Month scrolling: dropped per-row BoxWithConstraints (measured grid width once
via onSizeChanged) and resolve bar colours once during packing instead of
every recomposition → much smoother scroll
- Serialize all event loads behind a Mutex and skip redundant state writes so
scroll-triggered month loads no longer pile up / thrash the UI
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Theme primary now the iOS brand green (#20A050), fixed app-wide (was tied
to the server's blue primary_color)
- Launcher icon generated from the iOS AppIcon across all densities;
dropped the placeholder adaptive icon
- PasswordField: eye toggle + brief last-character reveal; used on login,
profile and CalDAV password inputs
- Login now surfaces the server's actual error detail (verified the JSON
contract against the live server; a 401 is a genuine credential mismatch)
- CLAUDE.md: correct prod base URL to calendar.scarriffle.com
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>