- Fix WebSocket reconnect bug: catch block in connectStatusWs() returned
without scheduling a retry, causing permanent OFFLINE on constructor
failure. Now retries with exponential backoff.
- Change OFFLINE label to "Reconnecting..." — more accurate and friendlier
since we always attempt to reconnect automatically.
- Add WebGL support detection before Three.js renderer init — shows
text-only fallback view with mood/activity for unsupported browsers.
- Add mobile detection (coarse pointer + small viewport) — shows the
same friendly fallback rather than a broken 3D scene.
- Add webglcontextlost / webglcontextrestored handlers — shows "Timmy is
taking a quick break" overlay with auto-retry on context loss; halts
the animation loop to avoid cascading errors and resumes cleanly on
restore.
- Keep fallback view in sync with live state (mood/activity from WS).
Fixes#811
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>