"use client"; import { useEffect, useRef } from "react"; import { gsap } from "gsap"; import KineticText from "./KineticText"; import PillMark from "./PillMark"; import Magnetic from "./Magnetic"; export default function Hero() { const root = useRef(null); useEffect(() => { const el = root.current; if (!el) return; if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return; const ctx = gsap.context(() => { const tl = gsap.timeline({ defaults: { ease: "power4.out" } }); tl.from(".hero__eyebrow", { y: 18, opacity: 0, duration: 0.9, delay: 0.15 }) .from(".hero__sub", { y: 22, opacity: 0, duration: 0.9 }, "-=0.2") .from( ".hero__actions > *", { y: 20, opacity: 0, stagger: 0.1, duration: 0.7 }, "-=0.5" ) .from(".hero__meta", { opacity: 0, duration: 0.8 }, "-=0.4"); // parallax on the floating mark as you scroll the hero out gsap.to(".hero__mark", { yPercent: -22, ease: "none", scrollTrigger: { trigger: el, start: "top top", end: "bottom top", scrub: true, }, }); gsap.to(".hero__display", { yPercent: 12, opacity: 0.25, ease: "none", scrollTrigger: { trigger: el, start: "top top", end: "bottom top", scrub: true, }, }); }, el); return () => ctx.revert(); }, []); return (

herramientas.

Estrategia humana sobre nuestra propia plataforma de IA. Web, SEO, ads y contenido — más rápido, más medible y a mejor coste que una agencia tradicional.

Habla con nosotros Ver qué hacemos
Entrega
en días, no semanas
Reporting
cada acción medida
Infraestructura
propia, no alquilada
scroll
); }