/** * Hook to detect if user prefers reduced motion * Respects prefers-reduced-motion media query for accessibility */ import { useEffect, useState } from 'react'; export function usePrefersReducedMotion(): boolean { const [prefersReducedMotion, setPrefersReducedMotion] = useState(false); useEffect(() => { // Check if window is defined (SSR safety) if (typeof window === 'undefined') { return; } const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)'); setPrefersReducedMotion(mediaQuery.matches); // Listen for changes const handleChange = (event: MediaQueryListEvent) => { setPrefersReducedMotion(event.matches); }; mediaQuery.addEventListener('change', handleChange); return () => { mediaQuery.removeEventListener('change', handleChange); }; }, []); return prefersReducedMotion; }