// ============================================ // Sections — Grupo Luna // ============================================ const { useEffect: useEffect2, useRef: useRef2, useState: useState2 } = React; // ---- Reveal hook: adds .in class when scrolled into view ---- function useReveal() { useEffect2(() => { const els = document.querySelectorAll('[data-reveal]'); const io = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } }); }, { threshold: 0.12, rootMargin: '0px 0px -80px 0px' }); els.forEach(el => io.observe(el)); return () => io.disconnect(); }); } // ---- Counter ---- function Counter({ to, suffix = '', plus = false, duration = 1800 }) { const ref = useRef2(null); const [val, setVal] = useState2(0); useEffect2(() => { if (!ref.current) return; let raf; const io = new IntersectionObserver((entries) => { if (entries[0].isIntersecting) { const start = performance.now(); const tick = (t) => { const p = Math.min(1, (t - start) / duration); const eased = 1 - Math.pow(1 - p, 3); setVal(Math.round(to * eased)); if (p < 1) raf = requestAnimationFrame(tick); }; raf = requestAnimationFrame(tick); io.disconnect(); } }, { threshold: 0.4 }); io.observe(ref.current); return () => { io.disconnect(); cancelAnimationFrame(raf); }; }, [to, duration]); return ( {plus && +} {val} {suffix && {suffix}} ); } // ---- HERO ---- function Hero({ t, variant, scrollY, mouseX, mouseY }) { return (
{t.hero.eyebrow}

{t.hero.titleA}
{t.hero.titleC}

{t.hero.sub}

{t.hero.ctaPrimary} {t.hero.ctaSecondary}
+ {t.hero.metaAlbl}
+ {t.hero.metaBlbl}
+ {t.hero.metaClbl}
{t.hero.scrollHint}
); } // ---- NOSOTROS ---- function Nosotros({ t }) { const valueIcons = [ , , , , ]; return (
{t.nosotros.num}

{t.nosotros.h2A} {t.nosotros.h2B}
{t.nosotros.h2C}

{t.nosotros.p1} {t.nosotros.p2}
{[ ['v1t','v1d'],['v2t','v2d'],['v3t','v3d'],['v4t','v4d'] ].map(([k, dk], i) => (
{valueIcons[i]}

{t.nosotros[k]}

{t.nosotros[dk]}

))}
); } // ---- SERVICIOS ---- function Servicios({ t }) { return (
{t.servicios.num}

{t.servicios.h2A}
{t.servicios.h2B}

{t.servicios.lead}

{t.servicios.items.map((s, i) => (
0{i + 1}
{s.title} {s.titleB}
{s.desc}
))}
); } // ---- PROYECTO CARRUSEL ---- function ProyectoCarrusel({ t }) { const slides = [ { src: 'assets/proyecto-jujuy-obra.webp', label: t.proyectos.p4slide1 }, { src: 'assets/proyecto-jujuy-final.webp', label: t.proyectos.p4slide2 }, ]; const [idx, setIdx] = useState2(0); const [prev, setPrev] = useState2(null); const [dir, setDir] = useState2(1); const goTo = (next) => { if (next === idx) return; setDir(next > idx ? 1 : -1); setPrev(idx); setIdx(next); setTimeout(() => setPrev(null), 600); }; // Auto-advance useEffect2(() => { const t = setInterval(() => goTo((idx + 1) % slides.length), 5000); return () => clearInterval(t); }, [idx]); return (
{/* Slides */} {slides.map((s, i) => ( {s.label} ))} {/* Overlay */}
{t.proyectos.p4tag}
{t.proyectos.p4title}
{t.proyectos.p4loc}
{/* Slide label badge */}
{slides[idx].label}
{/* Arrows */} {/* Dots */}
{slides.map((_, i) => (
); } function arrowStyle(side) { return { position: 'absolute', top: '50%', [side]: 16, transform: 'translateY(-50%)', zIndex: 4, background: 'rgba(255,255,255,0.1)', backdropFilter: 'blur(12px)', WebkitBackdropFilter: 'blur(12px)', border: '1px solid rgba(255,255,255,0.2)', borderRadius: '50%', width: 40, height: 40, display: 'flex', alignItems: 'center', justifyContent: 'center', cursor: 'pointer', transition: 'background .25s, transform .25s', }; } // ---- PROYECTOS ---- function Proyectos({ t }) { return (
{t.proyectos.num}

{t.proyectos.h2A} {t.proyectos.h2B}
{t.proyectos.h2C}

{t.proyectos.lead}

Farmacia La Esquina
{t.proyectos.p1tag}
{t.proyectos.p1title}
{t.proyectos.p1loc}
Club Quimsa
{t.proyectos.p2tag}
{t.proyectos.p2title}
{t.proyectos.p2loc}
Quinta Tres Algarrobos
{t.proyectos.p3tag}
{t.proyectos.p3title}
{t.proyectos.p3loc}
); } // ---- STATS ---- function Stats({ t, scrollY }) { return (
{t.stats.num}

{t.stats.h2A} {t.stats.h2B}
{t.stats.h2C}

{t.stats.lead}

{t.stats.s1l}
{t.stats.s2l}
{t.stats.s3l}
{t.stats.s4l}
); } // ---- CLIENTES ---- function Clientes({ t }) { const clients = [ { mark: 'Q', name: 'Club Quimsa' }, { mark: 'LE', name: 'La Esquina' }, { mark: 'M', name: 'Municipalidad SdE' }, { mark: 'TR', name: 'Tres Algarrobos' }, { mark: 'GP', name: 'Gob. Pcia. Santiago' }, { mark: 'TH', name: 'Termas Río Hondo' }, { mark: 'C', name: 'Constructora Norte' }, { mark: 'A', name: 'Aguas Santiagueñas' }, { mark: 'F', name: 'Forestal SA' }, { mark: 'IN', name: 'INTA Regional' }, ]; return (
{t.clientes.num}

{t.clientes.h2A}
{t.clientes.h2B}

{t.clientes.lead}

{[...clients, ...clients].map((c, i) => (
{c.mark} {c.name}
))}
); } // ---- CONTACTO ---- function Contacto({ t }) { const [sent, setSent] = useState2(false); const submit = (e) => { e.preventDefault(); setSent(true); }; return (
{t.contacto.num}

{t.contacto.h2A} {t.contacto.h2B}{t.contacto.h2C}

{t.contacto.lead}

grupoluna.consultora@gmail.com +54 385 433-9504 {t.contacto.addr} {t.contacto.ig}
{sent ? (

{t.contacto.form.sent}

{t.contacto.form.sentMsg}

) : (

{t.contacto.form.title}