/* SISMO one-page — Proceso, Contacto, Footer, App */ const { useEffect: useEffectBot, useRef: useRefBot, useState: useStateBot } = React; const PASOS = [ { n: "01", t: "Escuchamos", d: "Conocemos el proyecto, los objetivos y lo que hoy necesita la marca." }, { n: "02", t: "Investigamos", d: "Analizamos el contexto, la audiencia, la competencia y las oportunidades." }, { n: "03", t: "Definimos una dirección", d: "Construimos la estrategia, el concepto y el sistema visual o comunicacional." }, { n: "04", t: "Producimos", d: "Diseñamos, grabamos, fotografiamos, desarrollamos y editamos." }, { n: "05", t: "Activamos", d: "Publicamos, implementamos o lanzamos cada pieza en los canales adecuados." }, { n: "06", t: "Analizamos", d: "Revisamos el rendimiento, aprendemos y hacemos ajustes." }, ]; function Proceso() { const wrapRef = useRefBot(null); const lineRef = useRefBot(null); useEffectBot(() => { const reduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches; const steps = wrapRef.current.querySelectorAll(".pstep"); const io = new IntersectionObserver(es => es.forEach(e => e.target.classList.toggle("active", e.isIntersecting)), { rootMargin: "-30% 0px -30% 0px" }); steps.forEach(s => io.observe(s)); let raf = 0; const onScroll = () => { cancelAnimationFrame(raf); raf = requestAnimationFrame(() => { const r = wrapRef.current.getBoundingClientRect(); const vh = window.innerHeight; const p = Math.min(1, Math.max(0, (vh * .65 - r.top) / r.height)); if (lineRef.current) lineRef.current.style.height = (p * 100) + "%"; }); }; if (!reduced) { window.addEventListener("scroll", onScroll, { passive: true }); onScroll(); } else if (lineRef.current) lineRef.current.style.height = "100%"; return () => { io.disconnect(); window.removeEventListener("scroll", onScroll); }; }, []); return (
Nuestro proceso

Primero entendemos.
Después hacemos que pase.

{PASOS.map(p => (
{p.n}

{p.t}

{p.d}

))}
); } const WA_URL = "https://wa.me/5492964525368"; const IconWa = () => ( ); function Contacto() { const [sent, setSent] = useStateBot(false); const [sending, setSending] = useStateBot(false); const [err, setErr] = useStateBot(false); const submit = async e => { e.preventDefault(); setSending(true); setErr(false); try { const res = await fetch("https://formspree.io/f/mnjenvwq", { method: "POST", headers: { Accept: "application/json" }, body: new FormData(e.target), }); if (!res.ok) throw new Error(); setSent(true); } catch { setErr(true); } setSending(false); }; return (
Hablemos

¿Movemos
tu marca?

Contanos qué querés construir. Nosotras te ayudamos a darle dirección, forma y presencia.

Hablemos por WhatsApp

Enviar una consulta

{sent ? (

¡Gracias! Recibimos tu consulta.
Te respondemos a la brevedad — o escribinos directo por WhatsApp.

) : ( <>
{err &&

No se pudo enviar. Probá de nuevo o escribinos por WhatsApp.

} )}

¿Preferís una llamada?

Agendá una videollamada de 30 minutos para contarnos tu proyecto en detalle.

Agendar llamada gratuita
); } function Footer() { return ( ); } function App() { useReveal(); return ( <>