document.addEventListener('DOMContentLoaded', () => { const header = document.getElementById('site-header'); const backToTop = document.getElementById('backToTopBtn'); const toggle = document.getElementById('mobile-menu-toggle'); const mobileMenu = document.getElementById('mobile-menu'); const revealItems = document.querySelectorAll('.reveal'); const handleScroll = () => { const scrolled = window.scrollY > 24; if (header) { header.classList.toggle('is-scrolled', scrolled); } if (backToTop) { backToTop.classList.toggle('is-visible', window.scrollY > 380); } }; handleScroll(); window.addEventListener('scroll', handleScroll, { passive: true }); if (backToTop) { backToTop.addEventListener('click', () => { window.scrollTo({ top: 0, behavior: 'smooth' }); }); } if (toggle && mobileMenu) { const openIcon = toggle.querySelector('.menu-open-icon'); const closeIcon = toggle.querySelector('.menu-close-icon'); toggle.addEventListener('click', () => { const nextState = !mobileMenu.classList.contains('is-open'); mobileMenu.classList.toggle('is-open', nextState); toggle.setAttribute('aria-expanded', String(nextState)); openIcon?.classList.toggle('hidden', nextState); closeIcon?.classList.toggle('hidden', !nextState); }); mobileMenu.querySelectorAll('a').forEach((link) => { link.addEventListener('click', () => { mobileMenu.classList.remove('is-open'); toggle.setAttribute('aria-expanded', 'false'); openIcon?.classList.remove('hidden'); closeIcon?.classList.add('hidden'); }); }); } if ('IntersectionObserver' in window && revealItems.length) { const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { entry.target.classList.add('is-visible'); observer.unobserve(entry.target); } }); }, { threshold: 0.15, rootMargin: '0px 0px -40px 0px' }); revealItems.forEach((item) => observer.observe(item)); } else { revealItems.forEach((item) => item.classList.add('is-visible')); } });