// Top nav bar with language + theme toggles + mobile hamburger menu const { useState: useStateNav, useEffect: useEffectNav } = React; function Nav({ theme, lang, setLang, t, onBook, scrolled }) { const [menuOpen, setMenuOpen] = useStateNav(false); // Lock body scroll while menu is open useEffectNav(() => { if (menuOpen) { const prev = document.body.style.overflow; document.body.style.overflow = 'hidden'; return () => { document.body.style.overflow = prev; }; } }, [menuOpen]); // Close on Escape useEffectNav(() => { if (!menuOpen) return; const onKey = (e) => { if (e.key === 'Escape') setMenuOpen(false); }; window.addEventListener('keydown', onKey); return () => window.removeEventListener('keydown', onKey); }, [menuOpen]); const onReserveClick = (e) => { e.preventDefault(); setMenuOpen(false); const el = document.getElementById('contact'); if (el) el.scrollIntoView({ behavior: 'smooth', block: 'start' }); }; const links = [ { href: '#classes', label: t.nav.classes }, { href: '#social', label: t.nav.social }, { href: '#events', label: t.nav.events }, { href: '#about', label: t.nav.about }, { href: '#contact', label: t.nav.contact }, ]; const handleLinkClick = (e, href) => { e.preventDefault(); setMenuOpen(false); // Wait a tick so body scroll lock is removed before scrolling setTimeout(() => { const el = document.querySelector(href); if (el) el.scrollIntoView({ behavior: 'smooth', block: 'start' }); }, 50); }; return ( {links.map((l) => ( {l.label} ))} {['es', 'en'].map((l) => ( setLang(l)} style={{ padding: '6px 10px', border: 'none', background: lang === l ? '#f5efe2' : 'transparent', color: lang === l ? '#0a0806' : '#f5efe2', fontFamily: 'inherit', fontSize: 'inherit', letterSpacing: 'inherit', cursor: 'pointer', borderRadius: theme.radius, textTransform: 'uppercase' }}>{l} ))} {t.nav.reserve} ↓ {/* Hamburger button — only visible on mobile via CSS */} setMenuOpen(!menuOpen)} style={{ display: 'none', // overridden by mobile CSS width: '40px', height: '40px', padding: 0, border: '1px solid rgba(255,255,255,0.18)', background: 'transparent', borderRadius: theme.radius, cursor: 'pointer', alignItems: 'center', justifyContent: 'center', flexDirection: 'column', gap: '5px', }} > {/* Mobile menu overlay */} {links.map((l, i) => ( handleLinkClick(e, l.href)} style={{ color: '#f5efe2', textDecoration: 'none', fontFamily: theme.display, fontStyle: theme.displayItalic ? 'italic' : 'normal', fontWeight: theme.displayWeight, fontSize: '40px', letterSpacing: '-0.025em', lineHeight: 1.15, padding: '14px 0', borderBottom: i < links.length - 1 ? '1px solid rgba(255,255,255,0.08)' : 'none', display: 'flex', justifyContent: 'space-between', alignItems: 'baseline', }}> {l.label} 0{i + 1} ))} setMenuOpen(false)} style={{ padding: '18px 22px', background: '#25D366', color: '#fff', borderRadius: theme.radius, textDecoration: 'none', fontFamily: theme.body, fontWeight: 600, fontSize: '16px', display: 'flex', alignItems: 'center', justifyContent: 'space-between', }} > WhatsApp ↗ Idioma · Language {['es', 'en'].map((l) => ( setLang(l)} style={{ padding: '8px 14px', border: 'none', background: lang === l ? '#f5efe2' : 'transparent', color: lang === l ? '#0a0806' : '#f5efe2', fontFamily: 'inherit', fontSize: 'inherit', letterSpacing: 'inherit', cursor: 'pointer', borderRadius: theme.radius, textTransform: 'uppercase' }}>{l} ))} ); } function LogoMark({ theme, size = 32 }) { return ( ); } Object.assign(window, { Nav, LogoMark });