/* ========================= Año en footer ========================= */ const yEl = document.getElementById('y'); if (yEl) yEl.textContent = new Date().getFullYear(); /* ========================= Navbar transparente -> sólida al hacer scroll ========================= */ // fiab.js const topnav = document.getElementById('topnav'); const logo = document.getElementById('logo-fiab'); const navmenu = document.getElementById('navmenu'); var menuBtn = document.querySelector('.menu-btn'); var nav = document.querySelector('nav'); var lineOne = document.querySelector('nav .menu-btn .line--1'); var lineTwo = document.querySelector('nav .menu-btn .line--2'); var lineThree = document.querySelector('nav .menu-btn .line--3'); var link = document.querySelector('nav .nav-links'); var line = document.querySelectorAll('nav .menu-btn .line'); /*menuBtn.addEventListener('click', () => { nav.classList.toggle('nav-open'); lineOne.classList.toggle('line-cross'); lineTwo.classList.toggle('line-fade-out'); lineThree.classList.toggle('line-cross'); link.classList.toggle('fade-in'); })*/ const setNavState = () => { if (!topnav) return; const solid = window.scrollY > 40; // Navbar topnav.classList.toggle('navbar-solid', solid); topnav.classList.toggle('navbar-transparent', !solid); topnav.classList.toggle('navbar-dark', !solid); topnav.classList.toggle('navbar-light', solid); // Lines del menú hamburguesa lineOne.classList.toggle('line-dark', solid); lineOne.classList.toggle('line-light', !solid); lineTwo.classList.toggle('line-dark', solid); lineTwo.classList.toggle('line-light', !solid); lineThree.classList.toggle('line-dark', solid); lineThree.classList.toggle('line-light', !solid); // Logo if (logo) logo.src = solid ? 'logo_fiab_negro.png' : 'logo-fiab.png'; // Offcanvas: sincroniza tema if (navmenu) { navmenu.classList.toggle('offcanvas-theme-light', solid); navmenu.classList.toggle('offcanvas-theme-dark', !solid); } }; setNavState(); window.addEventListener('scroll', setNavState); /* ========================= Lightbox de galería ========================= */ const lightboxModal = document.getElementById('lightboxModal'); if (lightboxModal) { lightboxModal.addEventListener('show.bs.modal', (event) => { const trigger = event.relatedTarget; const imgSrc = trigger?.getAttribute('data-img'); const img = document.getElementById('lightboxImg'); if (img) img.src = imgSrc || ''; }); } /* ========================= Scroll suave con offset (para botones específicos) - Mantengo tu comportamiento en #btnRegister ========================= */ const btnRegister = document.getElementById('btnRegister'); if (btnRegister) { btnRegister.addEventListener('click', (e) => { const target = document.getElementById('registro'); if (!target) return; // Si el botón está dentro del offcanvas, cerrarlo primero if (navmenu) { const oc = bootstrap.Offcanvas.getInstance(navmenu); if (oc) oc.hide(); } // Previene el salto inmediato y hace scroll suave e.preventDefault(); // Calcula offset considerando la altura del navbar fijo (si existe) const navHeight = topnav ? topnav.getBoundingClientRect().height : 50; const targetPosition = window.scrollY + target.getBoundingClientRect().top - (navHeight + 10); window.scrollTo({ top: targetPosition, behavior: 'smooth' }); }); } /* ========================= Offcanvas Bootstrap (fullscreen móvil) - Cierra al tocar cualquier - Asegura que no quede abierto al cambiar el viewport ========================= */ if (navmenu) { // Cerrar al hacer click en links internos navmenu.addEventListener('click', (e) => { const a = e.target.closest('a[href^="#"]'); if (!a) return; // Cierra el offcanvas (si está abierto) const oc = bootstrap.Offcanvas.getInstance(navmenu) || new bootstrap.Offcanvas(navmenu); oc.hide(); // Si el link apunta a una sección, aplicamos scroll suave con offset de navbar const hash = a.getAttribute('href'); if (hash && hash.length > 1) { const section = document.querySelector(hash); if (section) { e.preventDefault(); const navHeight = topnav ? topnav.getBoundingClientRect().height : 50; const y = window.scrollY + section.getBoundingClientRect().top - (navHeight + 10); window.scrollTo({ top: y, behavior: 'smooth' }); } } }); // Oculta el offcanvas si redimensionas a >= md para evitar estados raros const closeOffcanvasOnWide = () => { const oc = bootstrap.Offcanvas.getInstance(navmenu); if (window.innerWidth >= 768 && oc) oc.hide(); }; window.addEventListener('resize', closeOffcanvasOnWide); } var $form = $("#EntityFormControl_12d5e81f536e4bb7a0d5b218305997a7"); var $honeypot = $("#cr75c_identificador"); if ($form.length && $honeypot.length) { $form.on("submit", function (e) { if ($.trim($honeypot.val()).length > 0) { e.preventDefault(); alert("Bot detectado. El formulario no se enviará."); } }); } /* ========================= (Opcional) Scroll suave global para anchors - Si prefieres que TODOS los hagan scroll con offset, descomenta el bloque siguiente. ========================= */ /* document.addEventListener('click', (e) => { const a = e.target.closest('a[href^="#"]'); if (!a) return; const hash = a.getAttribute('href'); if (!hash || hash.length <= 1) return; const section = document.querySelector(hash); if (!section) return; e.preventDefault(); const navHeight = topnav ? topnav.getBoundingClientRect().height : 50; const y = window.scrollY + section.getBoundingClientRect().top - (navHeight + 10); window.scrollTo({ top: y, behavior: 'smooth' }); }); */ // ===== Patrocinadores: animación de entrada + scroll helpers ===== (() => { const prefersReduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; // Animación de entrada suave al aparecer if (!prefersReduce) { const cards = document.querySelectorAll('.sponsor-card'); const io = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) { e.target.style.transform = 'translateY(0)'; e.target.style.opacity = '1'; io.unobserve(e.target); } }); }, {rootMargin: '0px 0px -10% 0px', threshold: 0.15}); cards.forEach(c => { c.style.transform = 'translateY(6px)'; c.style.opacity = '0'; io.observe(c); }); } // Métrica básica de clics (extensible a App Insights / Web Tracking) document.addEventListener('click', (ev) => { const el = ev.target.closest('[data-track="sponsor-click"]'); if (!el) return; const sponsor = el.getAttribute('data-sponsor') || ''; const tier = el.getAttribute('data-tier') || ''; // Ejemplo: integrar con Application Insights o Power Pages web tracking console.debug('sponsor_click', { sponsor, tier }); }); // Hint visual al scrollear horizontal const walls = document.querySelectorAll('.sponsor-wall'); walls.forEach(w => { w.addEventListener('scroll', () => { w.classList.toggle('is-scrolling', w.scrollLeft > 0); }); }); })();