design polish: bug fixes, token migration, a11y touch targets
- GlassSurface: derive shadow geometry from shape (pill/circle now curve correctly)
new shape-aware kaizenShadow(stack, shape) overload in Shadow.kt
drop cornerRadius parameter from GlassSurface and all 8 call sites
- EmptyHero: replace remember { LocalDateTime.now() } with produceState that
re-emits on minute boundaries; clock no longer freezes on first composition
- ChatScreen + MeshBackground: skip blob layer + dither while LiveCallOverlay
is up (renderBlobs flag); avoids two animated MeshBackgrounds compositing
in parallel
- Color tokens: add KaizenSemanticColors.warning/warningDeep,
KaizenNeutralWashes (idle/hover/selected), KaizenGlassTint
(darkTop/darkBottom/lightTop/lightBottom)
- Migrate inline Color(0xFF...) literals to tokens in LiveCallOverlay,
ChatScreen (version-skew banner), Sidebar (4x neutral washes),
LoginScreen / PasswordUnlockDialog / SecuritySection (glass tints),
GlassSurface (use KaizenGlassTint)
- New ui/theme/Spacing.kt: KaizenSpacing scale (xxs-xxl),
KaizenTouch (minTouch/comfortable/hero), KaizenIconSize (xs-xl)
- Accessibility touch targets:
Sidebar Settings/Logout 30 -> 44dp
Sidebar New-Chat 34 -> 44dp
Sidebar history kebab 28 -> 44dp
ChatInput Plus/Tune/Mic/Send/Call/Stop 40 -> 48dp
- Remove no-op pointerInput(Unit) {} on KaizenOrb
- Expose SquircleShape.radius (val instead of private) so shadow can read it