- Lock viewport: position:fixed on html/body prevents iOS bounce scroll
- No zoom on input focus: maximum-scale=1, user-scalable=no
- Keyboard-responsive chat: visualViewport API detects keyboard, hides
tab bar, scrolls chat to bottom, scrollIntoView on input focus
- iOS HIG tab bar: 49pt height, vertical icon+label, safe-area-inset-bottom
- PWA fix: manifest start_url/scope/id changed from '/' to './' for
subpath deployment compatibility
- PlayerBar: variant prop (fixed/inline), inline on mobile above tab bar,
fixed on desktop. No more overlap with tab bar.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>