// Hero.jsx const { useRef: useHeroRef, useEffect: useHeroEffect } = React; function Hero() { const ref = useHeroRef(); const canvasRef = useHeroRef(); useReveal(ref); // Particle canvas useHeroEffect(() => { const canvas = canvasRef.current; if (!canvas) return; const ctx = canvas.getContext('2d'); let raf; let W, H; const resize = () => { W = canvas.width = canvas.offsetWidth; H = canvas.height = canvas.offsetHeight; }; resize(); window.addEventListener('resize', resize); const particles = Array.from({ length: 48 }, () => ({ x: Math.random(), y: Math.random(), r: 1.5 + Math.random() * 2.5, vx: (Math.random() - 0.5) * 0.0003, vy: -0.0003 - Math.random() * 0.0003, alpha: 0.15 + Math.random() * 0.35, })); const draw = () => { ctx.clearRect(0, 0, W, H); particles.forEach(p => { p.x += p.vx; p.y += p.vy; if (p.y < -0.05) { p.y = 1.05; p.x = Math.random(); } if (p.x < 0) p.x = 1; if (p.x > 1) p.x = 0; ctx.beginPath(); ctx.arc(p.x * W, p.y * H, p.r, 0, Math.PI * 2); ctx.fillStyle = `rgba(217,123,150,${p.alpha})`; ctx.fill(); }); raf = requestAnimationFrame(draw); }; draw(); return () => { cancelAnimationFrame(raf); window.removeEventListener('resize', resize); }; }, []); function scrollTo(id) { const el = document.getElementById(id); if (!el) return; const top = el.getBoundingClientRect().top + window.scrollY - 80; window.scrollTo({ top, behavior: 'smooth' }); } const kpis = [ { val: '+10 anos', lbl: 'Atleta profissional' }, { val: 'Corpo · Mente · Espírito', lbl: 'Método completo integrado' }, { val: 'Brasil & EUA', lbl: 'Mulheres transformadas' }, ]; return (
{/* Left — copy */}
Método Conectadas Fitness — Taty Vaillant

Você não precisa de mais uma dieta.{' '} Você precisa de transformação real de dentro para fora.

O método Conectadas Fitness une corpo, mente e identidade para que você finalmente sustente os resultados. Porque quando você entende quem você é, nada te para.

{kpis.map((k, i) => (
{k.val} {k.lbl}
))}
{/* Right — photo */}
Taty Vaillant — Personal Trainer e Atleta Profissional
); } Object.assign(window, { Hero });