/* global React, ReactDOM, I18N, LINKS, Icon, BrandMark, Hero, Services, Manifesto, MediaStrip, Process, FaqBook, AboutModal, TestimonialsModal, CredentialsModal */ const { useState, useEffect } = React; /* ============== Nav ============== */ function Nav({ lang, setLang, t, openModal }) { const [scrolled, setScrolled] = useState(false); const [menuOpen, setMenuOpen] = useState(false); useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 20); window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, []); useEffect(() => { document.body.style.overflow = menuOpen ? "hidden" : ""; return () => { document.body.style.overflow = ""; }; }, [menuOpen]); const close = () => setMenuOpen(false); const openM = (k) => { close(); openModal(k); }; return ( <>
>); } /* ============== Footer ============== */ function Footer({ t, lang, openModal }) { return ( ); } /* ============== App ============== */ function App() { const [lang, setLang] = useState(() => { const saved = typeof localStorage !== "undefined" && localStorage.getItem("gg_lang"); return saved === "en" ? "en" : "es"; }); const [modal, setModal] = useState(null); // null | 'about' | 'testimonials' | 'credentials' const [cur, setCur] = useState(() => detectCurrency()); useEffect(() => { try { localStorage.setItem("gg_lang", lang); } catch (_) {} document.documentElement.lang = lang; }, [lang]); useEffect(() => { try { localStorage.setItem("gg_cur", cur); } catch (_) {} }, [cur]); const t = I18N[lang]; const openModal = (k) => setModal(k); const closeModal = () => setModal(null); return ( <>