(function() { 'use strict'; const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches; // Mobile Navigation const mobileToggle = document.querySelector('.mobile-toggle'); const navLinks = document.querySelector('.nav-links'); if (mobileToggle && navLinks) { mobileToggle.addEventListener('click', () => { const isExpanded = mobileToggle.getAttribute('aria-expanded') === 'true'; mobileToggle.setAttribute('aria-expanded', !isExpanded); mobileToggle.classList.toggle('active'); navLinks.classList.toggle('active'); if (!isExpanded) { const firstLink = navLinks.querySelector('a'); if (firstLink) firstLink.focus(); } }); navLinks.querySelectorAll('a').forEach(link => { link.addEventListener('click', () => { mobileToggle.setAttribute('aria-expanded', 'false'); mobileToggle.classList.remove('active'); navLinks.classList.remove('active'); }); }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && navLinks.classList.contains('active')) { mobileToggle.setAttribute('aria-expanded', 'false'); mobileToggle.classList.remove('active'); navLinks.classList.remove('active'); mobileToggle.focus(); } }); } // Header scroll effect const header = document.querySelector('.site-header'); function handleScroll() { const currentScroll = window.pageYOffset; if (currentScroll > 100) { header.classList.add('scrolled'); } else { header.classList.remove('scrolled'); } } window.addEventListener('scroll', handleScroll, { passive: true }); // Reveal on scroll const revealElements = document.querySelectorAll('.reveal'); if (prefersReducedMotion) { revealElements.forEach(el => el.classList.add('visible')); } else { const revealObserver = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); } }); }, { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }); revealElements.forEach(el => revealObserver.observe(el)); } // Smooth scroll for anchor links document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function(e) { const targetId = this.getAttribute('href'); if (targetId === '#') return; const target = document.querySelector(targetId); if (target) { e.preventDefault(); target.scrollIntoView({ behavior: prefersReducedMotion ? 'auto' : 'smooth' }); target.setAttribute('tabindex', '-1'); target.focus({ preventScroll: true }); } }); }); // Current year in footer const yearSpan = document.querySelector('.current-year'); if (yearSpan) { yearSpan.textContent = new Date().getFullYear(); } })();