import { useSyncExternalStore } from "react"; const QUERY = "(prefers-reduced-motion: reduce)"; function subscribe(onChange: () => void): () => void { const media = window.matchMedia(QUERY); media.addEventListener("change", onChange); return () => media.removeEventListener("change", onChange); } /** True when the visitor asked for less motion. Server render assumes motion is reduced. */ export function useReducedMotion(): boolean { return useSyncExternalStore( subscribe, () => window.matchMedia(QUERY).matches, () => true, ); }