/* SISMO one-page — Nav, Hero, Manifiesto */ const { useState, useEffect, useRef } = React; /* hooks */ function useReveal() { useEffect(() => { const els = document.querySelectorAll('.rv'); const io = new IntersectionObserver(es => es.forEach(e => { if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } }), { threshold: .15 }); els.forEach(el => io.observe(el)); return () => io.disconnect(); }, []); } const NAV_LINKS = [ ["inicio", "Inicio"], ["nosotras", "Nosotras"], ["servicios", "Servicios"], ["trabajos", "Trabajos"], ["proceso", "Proceso"], ["contacto", "Contacto"], ]; function Nav() { const [scrolled, setScrolled] = useState(false); const [open, setOpen] = useState(false); const [active, setActive] = useState("inicio"); useEffect(() => { const ids = NAV_LINKS.map(([id]) => id); let raf = 0; const onScroll = () => { cancelAnimationFrame(raf); raf = requestAnimationFrame(() => { setScrolled(window.scrollY > 40); const pos = window.scrollY + window.innerHeight * .35; let cur = ids[0]; for (const id of ids) { const el = document.getElementById(id); if (el && el.getBoundingClientRect().top + window.scrollY <= pos) cur = id; } setActive(cur); }); }; onScroll(); window.addEventListener("scroll", onScroll, { passive: true }); window.addEventListener("resize", onScroll); return () => { window.removeEventListener("scroll", onScroll); window.removeEventListener("resize", onScroll); cancelAnimationFrame(raf); }; }, []); const go = () => setOpen(false); return ( <>
{NAV_LINKS.map(([id, label], i) => {label})} Hablemos por WhatsApp
); } function GridBg() { /* deformed / curved reticle */ const lines = []; for (let i = 0; i <= 14; i++) { const y = i * 60; lines.push(); } for (let i = 0; i <= 22; i++) { const x = i * 90; lines.push(); } return ( ); } function HeroVideo() { const ref = useRef(null); useEffect(() => { const v = ref.current; if (!v) return; v.muted = true; v.defaultMuted = true; v.setAttribute("muted", ""); const tryPlay = () => v.play().catch(() => {}); tryPlay(); // reintento al primer toque/scroll si el navegador lo bloqueó const kick = () => { tryPlay(); window.removeEventListener("touchstart", kick); window.removeEventListener("scroll", kick); }; window.addEventListener("touchstart", kick, { passive: true, once: true }); window.addEventListener("scroll", kick, { passive: true, once: true }); return () => { window.removeEventListener("touchstart", kick); window.removeEventListener("scroll", kick); }; }, []); return ; } function Hero() { return (
#ContenidoConImpacto

Estrategia, identidad
y contenido para marcas
que quieren moverse.

En SISMO combinamos estrategia, creatividad, diseño y producción audiovisual para construir marcas con una presencia clara, profesional y con personalidad.

Desde Tierra del Fuego, acompañamos a negocios, profesionales e instituciones a dejar de improvisar y empezar a comunicar con intención.

Scroll ↓
); } const WORDS = ["Estrategia", "Identidad", "Contenido", "Movimiento", "Resultados"]; function Manifiesto() { return (
Manifiesto

Tu marca no necesita hacer más ruido.
Necesita tener algo claro para decir.

No hacemos contenido por cumplir. Pensamos qué comunicar, cómo mostrarlo y cómo hacerlo llegar a las personas correctas.

{WORDS.map((w, i) => ( {w} ))}
Todo tiene una intención detrás.
); } Object.assign(window, { useReveal, Nav, Hero, Manifiesto });