Input / 01
One
rectangle.
Start with an explicit viewport. Size, content, and constraints
drive geometry; scroll remains an explicit presentation input.
viewport + content + constraints
Resolve / 02
Layout becomes
data.
Flow, padding, clipping, and transforms resolve into one
immutable snapshot with stable IDs.
same inputs → same snapshot
Signal / 03
Scroll is just
another input.
The page does not chase the scrollbar. It samples progress and
deterministically presents the matching state.
enter → hold → exit
Project / 04
One snapshot.
Any renderer.
DOM and Three.js consume the same geometry. A custom renderer
can join without redefining layout.
DOM / Three.js / custom