/* 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 ¿Movemostu 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. ) : ( <> Nombre Marca o proyecto Correo o WhatsApp Servicio de interés Elegí una opción Redes socialesBrandingProducción audiovisual FotografíaEdición de videoDiseño web CampañasAsesoríaOtro Mensaje No soy un robot {err && No se pudo enviar. Probá de nuevo o escribinos por WhatsApp.} {sending ? "Enviando…" : "Enviar consulta"} > )} ¿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 ( <> > ); } ReactDOM.createRoot(document.getElementById("root")).render();
{p.d}
Contanos qué querés construir. Nosotras te ayudamos a darle dirección, forma y presencia.
¡Gracias! Recibimos tu consulta. Te respondemos a la brevedad — o escribinos directo por WhatsApp.
No se pudo enviar. Probá de nuevo o escribinos por WhatsApp.
Agendá una videollamada de 30 minutos para contarnos tu proyecto en detalle.