/* global React */ const { useState, useEffect, useRef } = React; // ============ HEADLINE OPTIONS ============ const HEADLINES = [ { hl: "Una comunidad para quienes nunca paran.", sub: "Tú mueves la ciudad. Ahora la ciudad te ve." }, { hl: "El oficio que mueve a México, ahora tiene su comunidad.", sub: "Conviértete a Gas Natural Vehicular y entra al primer piloto Zagaz." }, { hl: "Lo que mueves, te mueve.", sub: "Una comunidad construida por y para los transportistas." }, { hl: "Bienvenido a la comunidad Zagaz.", sub: "200 lugares. Una sola misión: dignificar el oficio del transporte." }, ]; const CTA_OPTIONS = [ "Agendar mi revisión gratis", "Quiero entrar a la comunidad", "Reservar mi lugar", "Empezar mi conversión", ]; // ============ HEADER ============ function Header({ tweaks, onCTA }) { return (
Zagaz
); } // ============ DECORATIVE NEON LINES ============ function NeonDeco({ variant }) { // Inspired by the FB campaign curved arches if (variant === "hero") { return ( ); } if (variant === "section") { return ( ); } if (variant === "section-alt") { return ( ); } if (variant === "form") { return ( ); } return null; } // ============ HERO ============ function Hero({ tweaks }) { const h = HEADLINES[tweaks.headlineIndex]; return (
Piloto · 200 lugares

{h.sub} Conviértete a Gas Natural Vehicular y entra a la primera comunidad construida para los que mueven el país.

Revisión gratuita
Sin compromiso
Cita en 24h
); } function HeroHeadline({ text }) { // Split on first period: first part normal, second part neon-accent gradient. const idx = text.indexOf('.'); if (idx < 0) return <>{text}; const a = text.slice(0, idx + 1); const b = text.slice(idx + 1).trim(); return ( <> {a} {b && <>
{b}} ); } function VideoShell() { return (
Animación · Zagaz Comunidad
¿Qué es el Gas Natural Vehicular?
[ video explicativo · pendiente de cargar ]
Conoce cómo funciona el GNV en tu unidad 02:14
); } // ============ BENEFITS ============ const TIERS = [ { name: "Día 1", sub: "Al activar tu unidad", items: [ { t: "Conversión a GNV", d: "Se paga sola con lo que ya gastas hoy en gasolina. Tu bolsillo no siente la diferencia — pero tu unidad ya es otra." }, { t: "Garantía de motor", d: "Tu motor convertido queda protegido igual que si lo hiciera el fabricante. Maneja tranquilo." }, { t: "Historial desde tu primera carga", d: "Cada litro de GNV suma. Tu historial crece con cada carga y con él, tus beneficios." }, { t: "Comunidad ZAGAZ", d: "Acceso al grupo privado de conductores del piloto en Puerto Vallarta. No estás solo." }, { t: "Soporte continuo", d: "Alguien responde cuando algo falla. Sin costo adicional, sin quedarte varado sin saber qué hacer." }, { t: "Capacitación GNV", d: "Todo lo que necesitas saber para que tu equipo dure más y rinda mejor. Desde el primer día." }, ], }, { name: "Mes 3", sub: "Tras tu primer trimestre activo", items: [ { t: "Créditos de liquidez", d: "Dinero disponible cuando lo necesitas, respaldado por tu historial en la comunidad." }, { t: "Créditos para tu unidad", d: "Repotencia tu vehículo sin descapitalizarte. Tu antigüedad en ZAGAZ abre la puerta." }, { t: "Créditos en combustible", d: "Carga gas y págalo después. Sin interrumpir tu día ni tu ingreso." }, { t: "Whitelist ZAGAZ", d: "Tu nombre en la lista de candidatos a una unidad 0 km. Solo para quienes mantienen su historial limpio." }, { t: "Talleres aliados", d: "Acceso preferencial a talleres certificados en Puerto Vallarta. Mantenimiento de confianza, sin buscar." }, { t: "Eventos de comunidad", d: "Desayunos, mesas de trabajo y encuentros exclusivos. Solo para los que están adentro." }, ], }, { name: "Año 1", sub: "Miembros consolidados", items: [ { t: "Ahorro completo", d: "El equipo ya está pagado. Desde aquí, la diferencia entre gasolina y GNV es tuya." }, { t: "Crédito para tu unidad 0 km", d: "Tu historial en ZAGAZ habla por ti donde el banco no te escucha." }, { t: "Caja de ahorro", d: "Tu dinero crece con rendimientos preferenciales. Sin bancos, sin trámites." }, { t: "App ZAGAZ", d: "Todo tu historial, tus beneficios y tu comunidad en un solo lugar. Desde tu celular." }, { t: "Seguro de vida", d: "Por primera vez, tu familia tiene respaldo si algo te pasa. Lo que el sistema nunca te dio." }, { t: "Telemedicina", d: "Consultas médicas para ti y tu familia, cuando las necesites. Sin filas, sin costo adicional." }, ], }, ]; function Benefits() { const [tier, setTier] = useState(0); return (
40+ Beneficios

Beneficios que se desbloquean
conforme creces con la comunidad.

No es una promesa vacía. Es un sistema progresivo: tus kilómetros, tu consumo y tu antigüedad abren puertas reales, desde la garantía de tu motor hasta el crédito para tu próxima unidad nueva, cada etapa del sistema trabaja para ti.

{TIERS.map((t, i) => ( ))}
{TIERS[tier].items.map((b, i) => (
{String(i + 1).padStart(2, '0')} · {TIERS[tier].name}

{b.t}

{b.d}

))}
Y más de 40 beneficios se van activando con tu antigüedad. Sin letra pequeña.
); } // ============ STEPS ============ const STEPS = [ { n: "01", t: "Agenda tu cita", d: "Llena el formulario. Te llamamos en 24 horas para confirmar fecha y lugar.", micro: "5 min" }, { n: "02", t: "Revisión gratuita", d: "Diagnosticamos tu unidad sin costo y te decimos si es viable convertirla a GNV.", micro: "Sin costo" }, { n: "03", t: "Instalación", d: "Conversión profesional con equipo certificado y garantía completa.", micro: "1–2 días" }, { n: "04", t: "Activa tus beneficios", d: "Recibes tu credencial de la comunidad y desbloqueas los beneficios del Día 1.", micro: "El mismo día" }, ]; function Steps() { return (
Cómo funciona

Cuatro pasos para entrar a la comunidad.

El proceso es simple, gratuito hasta la revisión, y diseñado para no parar tu jornada de trabajo.

{STEPS.map((s, i) => (
{s.n}

{s.t}

{s.d}

{s.micro}
))}
); } // ============ TESTIMONIALS ============ const TESTIMONIALS = [ { q: "Por primera vez siento que alguien construye algo pensando en nosotros, ya era hora.", n: "Salvador R.", r: "Taxi · Uruapan, Michoacán", img: "testimonial-1.png", }, { q: "Convertí la combi y bajé el gasto de combustible casi a la mitad. Y eso es solo el primer beneficio.", n: "Hugo T.", r: "Combi · Escobedo, Nuevo León", img: "testimonial-2.png", }, { q: "Mi familia ya usó la telemedicina dos veces. Eso solo, ya valió la pena entrar al piloto.", n: "Joel V.", r: "Bus · Ixtapaluca, Estado de México", img: "testimonial-3.png", }, ]; function Testimonials() { return (
Voces de la comunidad

Transportistas como tú, ya están dentro.

{TESTIMONIALS.map((t, i) => (
"
{t.q}
{t.n}
{t.n} {t.r}
))}
); } // ============ FORM ============ const ZAGAZ_WEBHOOK_URL = "https://pruebas-automatizacion-n8n.2ji6er.easypanel.host/webhook/zagaz-lead"; function CitaForm({ tweaks }) { const [data, setData] = useState({ nombre: "", telefono: "", email: "", tipo: "", marca: "", anio: "", ruta: "", }); const [errors, setErrors] = useState({}); const [sent, setSent] = useState(false); const [submitting, setSubmitting] = useState(false); const [origen] = useState(() => { try { const v = new URLSearchParams(window.location.search).get('origen'); return (v && v.trim()) ? v.trim().toLowerCase() : 'directo'; } catch (e) { return 'directo'; } }); const set = (k) => (e) => setData({ ...data, [k]: e.target.value }); const submit = async (e) => { e.preventDefault(); const errs = {}; if (!data.nombre.trim()) errs.nombre = "Tu nombre completo"; if (!/^[\d\s+\-()]{8,}$/.test(data.telefono)) errs.telefono = "Teléfono válido (mín. 8 dígitos)"; if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(data.email)) errs.email = "Email válido"; if (!data.tipo) errs.tipo = "Selecciona un tipo"; if (!data.marca.trim()) errs.marca = "Marca y modelo"; if (!/^\d{4}$/.test(data.anio) || +data.anio < 1990 || +data.anio > 2026) errs.anio = "Año (1990–2026)"; setErrors(errs); if (Object.keys(errs).length > 0) return; setSubmitting(true); try { const res = await fetch(ZAGAZ_WEBHOOK_URL, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ ...data, source: "landing", origen }), }); if (!res.ok) throw new Error(`HTTP ${res.status}`); setSent(true); } catch (err) { setErrors({ _global: "No pudimos enviar tu solicitud. Verifica tu conexión e inténtalo de nuevo." }); } finally { setSubmitting(false); } }; return (
Agenda tu revisión

Reserva tu lugar en el piloto.

200 lugares en tu ciudad. La revisión es gratis y sin compromiso. Te llamamos en 24h para coordinar.

Revisión · Gratis

Lo que incluye tu cita.

Un diagnóstico profesional de tu unidad, sin costo y sin compromiso de conversión.

Compresión de motor por cilindro
Sistema de encendido — bujías, bobinas y cables
Sensores de inyección y oxígeno en tiempo real
Análisis de gases de escape
Sistema de refrigeración completo
{sent ? (

Estás dentro del piloto.

Recibimos tu solicitud, {data.nombre.split(' ')[0]}. Te llamaremos al {data.telefono} en las próximas 24 horas para confirmar tu cita de revisión.

) : (
{errors.nombre && {errors.nombre}}
{errors.telefono && {errors.telefono}}
{errors.email && {errors.email}}
{errors.tipo && {errors.tipo}}
{errors.anio && {errors.anio}}
{errors.marca && {errors.marca}}
{errors._global && (
{errors._global}
)}
)}
); } function Check() { return ( ); } // ============ FOOTER ============ function Footer() { return ( ); } // ============ TWEAKS PANEL CONTENT ============ function ZagazTweaks({ tweaks, setTweak }) { const { TweaksPanel, TweakSection, TweakSlider, TweakSelect, TweakToggle } = window; return ( setTweak('headlineIndex', +v)} options={HEADLINES.map((h, i) => ({ value: String(i), label: `${i + 1}. ${h.hl.slice(0, 28)}…` }))} /> setTweak('ctaIndex', +v)} options={CTA_OPTIONS.map((c, i) => ({ value: String(i), label: c }))} /> setTweak('neonIntensity', +v)} /> setTweak('lightMode', v)} /> ); } // ============ APP ============ const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "headlineIndex": 0, "ctaIndex": 0, "neonIntensity": 1.0, "lightMode": false }/*EDITMODE-END*/; function App() { const { useTweaks } = window; const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS); // Apply visual tweaks to root useEffect(() => { document.documentElement.style.setProperty('--neon-intensity', tweaks.neonIntensity); document.body.classList.toggle('light-mode', tweaks.lightMode); }, [tweaks.neonIntensity, tweaks.lightMode]); const scrollToForm = () => { document.getElementById('agendar')?.scrollIntoView ? document.querySelector('#agendar').getBoundingClientRect() : null; const el = document.getElementById('agendar'); if (el) window.scrollTo({ top: el.offsetTop - 60, behavior: 'smooth' }); }; return ( <>