Replace the separate Screen.VideoDetail page + MinibarOverlay with one
ExpandablePlayer container that morphs continuously between the full
video page and the bottom minibar, in both directions. The old flow just
made the minibar appear/vanish; this is a true shared-element transition.
- One fraction (0=minibar, 1=full page) drives a graphicsLayer
scale+translate on a single mounted TextureView PlayerView. The
transform runs in the render phase (reads the Animatable inside the
layer block) so the morph is smooth without recomposing the detail
body, and the same video surface stays live across the whole range.
- 100dp collapsed player is 16:9, same as expanded, so the morph is a
pure uniform scale (no aspect distortion).
- Opening a video sets OpenVideo + expands instead of pushing a screen;
the browse screen stays underneath so collapsing returns you there.
- New OpenVideo singleton (open video) distinct from NowPlaying (playing
video); the two are kept in sync while collapsed so autoplay-next
doesn't leave the open page stale.
- VideoDetailBody extracted from VideoDetailScreen; the inline player
surface + resolve/play wiring became InlinePlayerSurface inside
ExpandablePlayer. VideoDetailScreen + MinibarOverlay deleted.
- Back: fullscreen pops, then expanded collapses, then browse stack.
- Unchanged: shared controller, NowPlaying, setPlayingFrom, SponsorBlock,
autoplay-next, PiP, background audio, and true-fullscreen Player (⛶).