- CalEvent parsing: handle Android's JSONObject.optString JSON-null quirk that
returned the string "null" — this made every event blue (color "null" →
fallback) and showed "null" for empty location/description. Now null-safe.
- Event detail: copy-to-calendar action; calendar row uses a calendar icon
(was identical to the notes icon); empty location/notes rows hidden
- Event editor: copy mode (prefill from an existing event, save as new)
- Settings: hour height, text/line contrast are now button chips (like the
cache range); color picker wraps, shows the current colour and a check mark
- Month scroll perf: precompute a day→events index once per change and only
reload when the visible month actually changes (was filtering every cell
every frame → laggy)
- Splash: dark window/splash background + inset launcher icon (was an ugly
white box on startup)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Month view rewritten as a continuous vertical scroll (iOS-style): no
prev/next buttons, compact fixed-height week rows, month label on the 1st,
top-bar title follows the visible month, Today scrolls back to today
- Long-press a day opens the event editor pre-filled with that date
- Theme: green container/tint colors so the FAB and accents are no longer the
Material default purple
- Event colors: parse #RGB shorthand, and fall back to a stable per-calendar
palette colour instead of a constant blue when the server omits a colour
- Top bar hides prev/next arrows in month view (scroll instead)
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>