// Dark mode is permanent document.body.classList.add("dark"); // Fade-in on scroll const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) entry.target.classList.add("show"); }); }, { threshold: 0.1 }); document.querySelectorAll(".fade-in").forEach(el => observer.observe(el)); // Hamburger nav toggle const navToggle = document.querySelector(".nav-toggle"); const navLinks = document.querySelector(".nav-links"); if (navToggle && navLinks) { navToggle.addEventListener("click", () => { const isOpen = navLinks.classList.toggle("open"); navToggle.setAttribute("aria-expanded", isOpen); navToggle.classList.toggle("active", isOpen); // Lock body scroll when menu is open (prevents background scrolling) document.body.style.overflow = isOpen ? "hidden" : ""; }); // Close menu when a nav link is tapped navLinks.querySelectorAll("a").forEach(link => { link.addEventListener("click", () => { navLinks.classList.remove("open"); navToggle.setAttribute("aria-expanded", false); navToggle.classList.remove("active"); // Restore body scroll document.body.style.overflow = ""; }); }); } // Sticky header styling on scroll const header = document.querySelector(".main-header"); if (header) { const checkScroll = () => { if (window.scrollY > 20) { header.classList.add("scrolled"); } else { header.classList.remove("scrolled"); } }; window.addEventListener("scroll", checkScroll); // Run on initial load in case page is refreshed while scrolled checkScroll(); } // Contact Form Handling & Validation const contactForm = document.getElementById("contact-form"); const successModal = document.getElementById("success-modal"); const modalCloseBtn = document.getElementById("modal-close-btn"); if (contactForm && successModal && modalCloseBtn) { contactForm.addEventListener("submit", (e) => { e.preventDefault(); let isValid = true; // Check built-in HTML5 constraints if (!contactForm.checkValidity()) { contactForm.reportValidity(); isValid = false; } if (isValid) { // Simulate successful form submission successModal.classList.add("active"); contactForm.reset(); } }); // Modal actions modalCloseBtn.addEventListener("click", () => { successModal.classList.remove("active"); }); successModal.addEventListener("click", (e) => { if (e.target === successModal) { successModal.classList.remove("active"); } }); }