// Composants UI partagés const { useEffect, useRef, useState } = React; // Reveal-on-scroll wrapper const Reveal = ({ children, delay = 0, className = '' }) => { const ref = useRef(null); const [shown, setShown] = useState(false); useEffect(() => { const el = ref.current; if (!el) return; const io = new IntersectionObserver((entries) => { entries.forEach((e) => { if (e.isIntersecting) {setShown(true);io.disconnect();} }); }, { threshold: 0.12, rootMargin: '0px 0px -80px 0px' }); io.observe(el); return () => io.disconnect(); }, []); return (
{lede}