A route swap wrapper that holds the outgoing view until the incoming one is ready, cross-fades or slides the change, restores each route's scroll offset before paint and moves focus into the new view's heading — reduced to an instant swap under prefers-reduced-motion.
npx shadcn@latest add @zyeon/page-transitionZyeon UI limits how often it can be asked, and Page Transition hasn't had its turn. Its source will show here once it has.