Two fixes for residual mobile chat issues:
1) Textarea touch-action: none was preventing iOS from registering a
clean tap-to-focus, causing the keyboard to flash up via the
programmatic focus() in onTouchStart and then auto-dismiss because
iOS never saw the gesture complete. Switching to manipulation
allows tap while still blocking pan/zoom — the composer stays
anchored thanks to overscroll-behavior: contain on its container.
2) On switch-away-and-back the visualViewport metrics could get
stuck in a half-state (composer pushed up, or blank pane covering
it). Adding a visibilitychange / pageshow handler on ChatView that
force-blurs and re-focuses the active textarea makes iOS resync
the keyboard / vv metrics cleanly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>