'use client'; import { useEffect, useRef, useState } from 'react'; import { motion } from 'framer-motion'; import { usePrefersReducedMotion } from '@/lib/motion'; // A literal small illustration of the section's own idea: a business grows, // hits its inflection point (the dot), and from there either drifts flat // without direction (grey, dashed) or keeps climbing with a clear strategy // (dorado). Draws itself in once scrolled into view; a decorative aside, not // data, so it stays purely presentational. export function IlustracionInflexion({ className = '' }: { className?: string }) { const reduced = usePrefersReducedMotion(); const ref = useRef(null); const [inView, setInView] = useState(false); useEffect(() => { const el = ref.current; if (!el || reduced) return; const observer = new IntersectionObserver( ([entry]) => { if (entry.isIntersecting) { setInView(true); observer.unobserve(el); } }, { threshold: 0.4 }, ); observer.observe(el); return () => observer.disconnect(); }, [reduced]); // `motion.path` applies its own dash-based pathLength scaffolding even with // no initial/animate props, which left the lines invisible for // reduced-motion users — so that branch renders plain, non-motion s // instead of trying to neutralise the animated ones. if (reduced) { return ( ); } const draw = (delay: number) => ({ initial: { pathLength: 0 }, animate: inView ? { pathLength: 1 } : { pathLength: 0 }, transition: { duration: 1.1, delay, ease: [0.22, 1, 0.36, 1] as const }, }); return ( ); }