Navigating between months on my old Android phone takes almost a second, the animation stutters badly.— user feedback, support ticket #482
Reproduced on a throttled 4x CPU profile. Each month navigation re-renders 42 day cells plus the header, and every cell recomputes its formatter.
Intl.DateTimeFormat instance is created per cell per render — hoist and reusebox-shadow (paint-heavy), switch to transform/opacityHoisting the formatter alone cuts scripting from 610ms to 180ms. The rest is the shadow animation.
Design is fine with a simple opacity crossfade on low-end devices — we can key it on prefers-reduced-motion too.