- Month view now draws multi-day events as continuous bars (lane packing,
per-week column span clipped at week boundaries, +N overflow) instead of a
chip on every day; events bucketed per week once + memoized packing for
smooth scrolling
- Startup: core-splashscreen covers the window from frame 0 (no warm-start
flash); the in-app splash stays until the first events finish loading (loading
starts behind the splash via an early-obtained CalendarViewModel + ready flow),
so you no longer enter a laggy app
- Background load shows a small spinner in the top bar (removed the linear bar)
- Week/Day titles wrap to two smaller lines (no more truncation)
- Event detail opens with a slide+fade animation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 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>