/* ============================================================ PELOTARIS ADVISORY — main.js ============================================================ */ (function () { 'use strict'; // ── Navbar: cambio de estilo al hacer scroll ────────────── const navbar = document.getElementById('navbar'); function handleNavbarScroll() { navbar.classList.toggle('scrolled', window.scrollY > 60); } window.addEventListener('scroll', handleNavbarScroll, { passive: true }); handleNavbarScroll(); // run once on load // ── Mobile nav toggle ───────────────────────────────────── const navToggle = document.getElementById('navToggle'); const navMenu = document.getElementById('navMenu'); function openNav() { navMenu.classList.add('open'); navToggle.classList.add('open'); navToggle.setAttribute('aria-expanded', 'true'); document.body.style.overflow = 'hidden'; } function closeNav() { navMenu.classList.remove('open'); navToggle.classList.remove('open'); navToggle.setAttribute('aria-expanded', 'false'); document.body.style.overflow = ''; } navToggle.addEventListener('click', () => { navMenu.classList.contains('open') ? closeNav() : openNav(); }); // Cerrar al hacer click en un enlace navMenu.querySelectorAll('.nav-link').forEach(link => { link.addEventListener('click', closeNav); }); // Cerrar al hacer click fuera del menú document.addEventListener('click', (e) => { if (navMenu.classList.contains('open') && !navMenu.contains(e.target) && !navToggle.contains(e.target)) { closeNav(); } }); // Cerrar con Escape document.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeNav(); }); // ── Active nav link según sección visible ───────────────── const sections = document.querySelectorAll('section[id]'); const navLinks = document.querySelectorAll('.nav-link'); function updateActiveLink() { let current = ''; sections.forEach(sec => { if (window.scrollY >= sec.offsetTop - 120) { current = sec.getAttribute('id'); } }); navLinks.forEach(link => { link.classList.toggle( 'active', link.getAttribute('href') === `#${current}` ); }); } window.addEventListener('scroll', updateActiveLink, { passive: true }); updateActiveLink(); // ── Scroll-triggered fade-in animations ─────────────────── const fadeEls = document.querySelectorAll('.fade-in'); if ('IntersectionObserver' in window) { const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); } }); }, { threshold: 0.12 }); fadeEls.forEach(el => observer.observe(el)); } else { // Fallback: mostrar todo sin animación fadeEls.forEach(el => el.classList.add('visible')); } // ── Formulario de contacto ──────────────────────────────── // // Para envío real, conectá una de estas opciones: // 1. Formspree: cambiá action del