// BlurText — word-by-word blur-in triggered when 10% visible. // Splits by spaces; staggers each word; 3-step keyframes per word. const { useEffect, useRef, useState } = React; const { motion } = window.Motion; function BlurText({ text, className, stepDuration = 0.35 }) { const ref = useRef(null); const [visible, setVisible] = useState(false); useEffect(() => { const el = ref.current; if (!el) return; const io = new IntersectionObserver( (entries) => { entries.forEach((e) => { if (e.isIntersecting) { setVisible(true); io.disconnect(); } }); }, { threshold: 0.1 } ); io.observe(el); return () => io.disconnect(); }, []); const words = (text || '').split(/\s+/).filter(Boolean); return (
{words.map((w, i) => (