const toggle = document.querySelector('.menu-toggle'); const nav = document.querySelector('.nav-links'); if (toggle && nav) { toggle.addEventListener('click', () => { const open = toggle.getAttribute('aria-expanded') === 'true'; toggle.setAttribute('aria-expanded', String(!open)); nav.classList.toggle('open', !open); document.body.classList.toggle('menu-open', !open); }); nav.querySelectorAll('a').forEach((link) => link.addEventListener('click', () => { toggle.setAttribute('aria-expanded', 'false'); nav.classList.remove('open'); document.body.classList.remove('menu-open'); })); } const revealItems = document.querySelectorAll('.reveal'); if ('IntersectionObserver' in window && !window.matchMedia('(prefers-reduced-motion: reduce)').matches) { const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); } }); }, { threshold: 0.12 }); revealItems.forEach((item) => observer.observe(item)); } else { revealItems.forEach((item) => item.classList.add('visible')); } const year = document.querySelector('[data-year]'); if (year) year.textContent = new Date().getFullYear(); const contactForm = document.querySelector('[data-contact-form]'); if (contactForm) { contactForm.addEventListener('submit', (event) => { event.preventDefault(); const data = new FormData(contactForm); const name = data.get('name') || ''; const company = data.get('company') || ''; const email = data.get('email') || ''; const projectType = data.get('project-type') || ''; const message = data.get('message') || ''; const subject = encodeURIComponent(`Project conversation — ${company || name}`); const body = encodeURIComponent( `Name: ${name}\nCompany: ${company}\nEmail: ${email}\nProject type: ${projectType}\n\nProject overview:\n${message}` ); window.location.href = `mailto:charlesmorgan@usa.com?subject=${subject}&body=${body}`; }); }