b4bc90372d39a73397735fe699421d1677ea69c3
Opening a video put an empty black player up at once and spun at the viewer until the first frame arrived -- which, between resolving the formats and the first bytes of a stream, is routinely a couple of seconds of nothing to look at. The session now starts off-screen: everything is built and loading, but the card that was clicked keeps its own spinner, the page stays where it was, and the player appears when the video has something to show. Failures reveal it too, since the error and its retry live inside the player, and so does a five-second timeout -- a stream that is merely slow is better watched from inside a player that can be closed than from a card that looks stuck. The video is muted while it loads out of sight and restored on the way in, because nothing should be heard from a player that isn't there. It is hidden with opacity rather than display:none: iOS won't load a display:none video, and the HUD's children opt back into pointer events, so they are told not to as well -- an invisible close button must not eat a card's click. isActive() replaces the checks that asked "is the player open?" and meant "is there a session": a pending one owns the same history entry, the same card spinner and the same requests, so Escape cancels it, the back gesture cancels it, another video takes over from it, and an update can't reload the page out from under it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MPZFnNdHbPGDTqQUNiE4ZN
Description
A webclient for hottub
Languages
JavaScript
65%
Python
22.5%
CSS
10.1%
HTML
1.9%
Shell
0.4%