v1.8.1
LatestCamera recording showed black screen on mobile — video element didn't exist in the DOM when the stream was attached; now re-attaches via useEffect when the preview mounts
Video not playing after scrubbing on mobile — pausing the video on drag start then calling play() on release failed because pointerup on range inputs isn't a trusted gesture on mobile; removed pause/resume entirely
Video freezing when scrubbing on mobile — was setting videoEl.currentTime on every drag frame, overwhelming the decoder; now only seeks once on pointer release (mediabunny pattern)
Subtitles showing stale position during seek drag — now calls onTimeUpdate during drag so subtitles and transcript stay in sync with the scrub position
Video not buffering fully on mobile — added preload="auto" so mobile browsers load the complete video instead of lazy-loading
Replaced <input type="range"> seek bar with custom div-based progress bar using pointer events and setPointerCapture — eliminates all mobile range input quirks and provides reliable touch tracking even when finger drifts off the bar
Progress bar fill and time display update via refs during drag (zero re-renders while scrubbing, Vercel React best practice: useRef for transient values)
Added keyboard support (left/right arrows ±5s) and ARIA slider attributes to custom progress bar for accessibility
Video timeupdate events are ignored during seek drag to prevent the video's stale position from overriding the user's scrub position