Description
Navigating between routes currently produces abrupt, instant swaps that feel disconnected and jarring, particularly when moving between the invoice list and the invoice detail page. Smooth enter/exit transitions improve perceived performance and make the app feel polished and intentional.
Technical Context
Transitions implemented using the browser's View Transitions API, gated by a document.startViewTransition feature-detect utility at src/lib/transitions.ts. A TransitionProvider component in src/components/layout/TransitionProvider.tsx wraps the root layout in src/app/layout.tsx and fires transitions on usePathname changes via a useEffect. CSS keyframes for fade-slide enter/exit are defined in src/styles/transitions.css and imported globally. For browsers without View Transitions API support, the component renders children immediately with no animation, ensuring zero-regression fallback.
Acceptance Criteria
Description
Navigating between routes currently produces abrupt, instant swaps that feel disconnected and jarring, particularly when moving between the invoice list and the invoice detail page. Smooth enter/exit transitions improve perceived performance and make the app feel polished and intentional.
Technical Context
Transitions implemented using the browser's View Transitions API, gated by a
document.startViewTransitionfeature-detect utility atsrc/lib/transitions.ts. ATransitionProvidercomponent insrc/components/layout/TransitionProvider.tsxwraps the root layout insrc/app/layout.tsxand fires transitions onusePathnamechanges via auseEffect. CSS keyframes for fade-slide enter/exit are defined insrc/styles/transitions.cssand imported globally. For browsers without View Transitions API support, the component renders children immediately with no animation, ensuring zero-regression fallback.Acceptance Criteria
prefers-reduced-motionsee no animation at all; routes swap instantly