// Reusable section components // THEME_URI is defined globally in data.jsx (loaded before this file) const useReveal = () => { React.useEffect(() => { const els = document.querySelectorAll('.reveal:not(.in)'); const io = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) { const el = e.target; const delay = parseFloat(el.dataset.delay || 0); setTimeout(() => el.classList.add('in'), delay * 1000); io.unobserve(el); } }); }, { threshold: 0.12, rootMargin: '0px 0px 10% 0px' }); els.forEach(el => io.observe(el)); return () => io.disconnect(); }, []); }; const BlurText = ({ text, className = '', startDelay = 0, perWord = 0.08 }) => { const [shown, setShown] = React.useState(false); React.useEffect(() => { const t = setTimeout(() => setShown(true), startDelay * 1000); return () => clearTimeout(t); }, [startDelay]); const words = text.split(' '); return ( {words.map((w, i) => ( {w}{i < words.length - 1 ? ' ' : ''} ))} ); }; const Navbar = ({ onContact, activePage = 'inicio' }) => { const [open, setOpen] = React.useState(false); React.useEffect(() => { if (!open) return; const close = (e) => { if (!e.target.closest('nav.top')) setOpen(false); }; window.addEventListener('click', close); return () => window.removeEventListener('click', close); }, [open]); const ligaHref = activePage === 'inicio' ? '#liga' : '/#liga'; return ( ); }; const Hero = () => { const heroTitulo = (window.WP_DATA && window.WP_DATA.hero_titulo) ? window.WP_DATA.hero_titulo : null; const heroSubtitulo = (window.WP_DATA && window.WP_DATA.hero_subtitulo) ? window.WP_DATA.hero_subtitulo : null; return (
Agencia de Marketing y Publicidad

{heroTitulo ? ( ) : ( <>
{' '} )}

{heroSubtitulo || 'Estrategias digitales, publicidad radial y presencia de marca para empresas que quieren crecer.'}

WhatsApp directo WhatsApp Ver servicios
CEO Ing. Edison Ramírez
CEO — Ing. EDISON "BOCHA" RAMÍREZ
); }; const Services = ({ onOpen }) => (
01 — Servicios

Lo que hacemos,
en orden de impacto.

Cinco prácticas con un mismo propósito: que tu marca sea reconocible, recordable y elegida. Cada servicio se vende solo y se integra con los demás.

{SERVICES.map((s, i) => (
{/* IZQUIERDA — título + mini-grid de sub-servicios + CTA */}
{s.num}

{s.title} {s.titleItalic}

{s.services.map((srv, j) => (
0{j + 1}
{srv.name}
{srv.desc}
))}
Saber más
{/* DERECHA — imagen */}
{s.title}
))}
); const LduSection = ({ onOpen }) => (
Nicho deportivo · Producto estrella

Va por ti,
Liga.

Una revista mensual sobre Liga Deportiva Universitaria, distribuida directamente vía WhatsApp a 9,500 hinchas autoidentificados. Tu marca dentro del contexto editorial que la audiencia abre porque quiere — no porque le interrumpe.

9.5K
Hinchas activos
71%
Tasa apertura
3
Formatos pauta
onOpen(SERVICES[5])}> Ver paquetes Saber más
N° 47 · Mayo 2026 USD 0.00
Va por ti Liga.
"Un equipo, un país, una historia que aún se escribe."
edición especial el bocha · 047
); const StatsBlock = () => (
02 — Track record

Nueve años
transformando marcas

{STATS.map((s, i) => (
{s.v}{s.sub}
{s.l}
))}
{TESTIMONIALS.map((t, i) => (
{t.quote}
{t.initial}
{t.name} {t.role}
))}
{[...LOGOS, ...LOGOS].map((logo, i) => (
Logo marca
))}
); const Conversion = () => { const [form, setForm] = React.useState({ name: '', service: '', message: '' }); const [errors, setErrors] = React.useState({}); const [sent, setSent] = React.useState(false); const submit = (e) => { e.preventDefault(); const errs = {}; if (!form.name.trim()) errs.name = 'Cuéntanos cómo te llamas.'; if (!form.service) errs.service = 'Elige un servicio.'; if (form.message.trim().length < 10) errs.message = 'Un poco más de contexto, por favor.'; setErrors(errs); if (Object.keys(errs).length) return; const txt = `Hola, soy ${form.name}. Me interesa: ${form.service}. ${form.message}`; const url = `https://wa.me/593991810190?text=${encodeURIComponent(txt)}`; window.open(url, '_blank'); setSent(true); setTimeout(() => setSent(false), 4000); }; return (
04 — Hablemos

¿Listo para
transformar
tu negocio?

Cuéntanos en una línea qué necesitas y te respondemos por WhatsApp en menos de 24 horas hábiles. Sin formularios eternos, sin tickets.

Av. París N41-164 e Isla Floreana, Quito – Ecuador
info@agenciaelbocha.com
+593 99 181 0190
setForm({...form, name: e.target.value})} placeholder="Tu nombre completo"/> {errors.name && {errors.name}}
{errors.service && {errors.service}}
{errors.message && {errors.message}}
); }; const Footer = () => { const isHome = window.location.pathname === '/'; const trackRecordHref = isHome ? '#track-record' : '/#track-record'; const handleTrackRecord = (e) => { if (!isHome) return; e.preventDefault(); const el = document.getElementById('track-record'); if (el) window.scrollTo({ top: el.getBoundingClientRect().top + window.scrollY - 90, behavior: 'smooth' }); }; return ( ); }; const ServiceModal = ({ svc, onClose }) => { React.useEffect(() => { const onEsc = (e) => { if (e.key === 'Escape') onClose(); }; document.addEventListener('keydown', onEsc); return () => document.removeEventListener('keydown', onEsc); }, [onClose]); if (!svc) return null; const hasDetails = svc.details && Object.keys(svc.details).length > 0; return (
{svc && (
e.stopPropagation()}>
{svc.num} — {svc.tag}

{svc.title} {svc.titleItalic}

{hasDetails ? (
{Object.entries(svc.details).map(([key, desc], i) => (

{key}

{desc}

))}
) : ( <>

{svc.long}

Qué incluye

)}
Cotizar por WhatsApp WhatsApp
)}
); }; const QuienesSomos = () => (
03 — Quiénes somos

El equipo
detrás del resultado.

Más de 10 años construyendo marcas en Ecuador. Somos estrategas, creativos y comunicadores con un solo norte: que tu inversión regrese multiplicada.

Equipo Agencia El Bocha
{VALUES.map((v, i) => (
{v.num}
{v.name}
{v.desc}
))} Conocer el equipo
); const WaFloat = () => ( WhatsApp ); Object.assign(window, { useReveal, BlurText, Navbar, Hero, Services, LduSection, StatsBlock, QuienesSomos, Conversion, Footer, ServiceModal, WaFloat });