2D sprite viewport: snapshot in, pixels out.
The UI builds a [FrameInput] per frame (plain data, cheap to rebuild
during composition) and mounts [Viewport2d] as a Repose view, which
draws the snapshot through a dp-space contain-fit and reports pointer
picks back in world coords. Unit discipline lives here, once:
games work purely in world/dp units and never touch physical px.
Camera state lives in Repose signals, never in the renderer.