const menuButton = document.querySelector('[data-menu-button]'); const mobileMenu = document.querySelector('[data-mobile-menu]'); menuButton?.addEventListener('click', () => { const isOpen = mobileMenu.classList.toggle('open'); menuButton.setAttribute('aria-expanded', String(isOpen)); }); document.querySelectorAll('[data-mobile-link]').forEach((link) => { link.addEventListener('click', () => { mobileMenu.classList.remove('open'); menuButton?.setAttribute('aria-expanded', 'false'); }); }); const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); } }); }, { threshold: 0.12 }); document.querySelectorAll('.reveal').forEach((element) => observer.observe(element)); document.querySelector('[data-year]').textContent = new Date().getFullYear();