Use visualViewport API to dynamically resize the app container when the
virtual keyboard opens, ensuring the input bar stays visible above the
keyboard instead of being hidden behind it.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Clients can get stuck in outdated state due to dropped packets or
missed WebSocket updates. Now forces a full frame refresh every 5
seconds instead of only sending diffs, ensuring clients resync.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>