"use client"; import { useEffect, useRef, useState, type ReactNode } from "react"; import { motion, useInView, useReducedMotion as useReducedMotionRaw, useScroll, useSpring, useTransform, type Variants, } from "motion/react"; /** * Motion's hook returns `boolean | null` — null until the media query * resolves. Narrow it to a plain boolean so callers can pass it straight * into props; an unresolved preference means "motion allowed". */ export function useReducedMotion(): boolean { return useReducedMotionRaw() === true; } const EASE_OUT = [0.22, 1, 0.36, 1] as const; const EASE_MASK = [0.16, 1, 0.3, 1] as const; /* ------------------------------------------------------------------ * * Reveal * ------------------------------------------------------------------ */ export function Reveal({ children, delay = 0, className, y = 24, }: { children: ReactNode; delay?: number; className?: string; y?: number; }) { const reduced = useReducedMotion(); return ( {children} ); } /** List-item variant, so Reveal never breaks