// Enhanced smooth scrolling with offset document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function(e) { e.preventDefault(); const targetId = this.getAttribute('href'); const targetElement = document.querySelector(targetId); if (targetElement) { window.scrollTo({ top: targetElement.offsetTop - 80, behavior: 'smooth' }); } }); }); // Typewriter effect for hero const typeWriter = (element, text, speed = 50) => { let i = 0; const typing = () => { if (i < text.length) { element.innerHTML += text.charAt(i); i++; setTimeout(typing, speed); } }; typing(); }; document.addEventListener('DOMContentLoaded', () => { const heroSubtitle = document.querySelector('#home p:nth-of-type(1)'); if (heroSubtitle) { const text = heroSubtitle.textContent; heroSubtitle.textContent = ''; typeWriter(heroSubtitle, text); } }); // Active navigation highlighting window.addEventListener('scroll', () => { const sections = document.querySelectorAll('section'); const navLinks = document.querySelectorAll('nav a'); let current = ''; sections.forEach(section => { const sectionTop = section.offsetTop; const sectionHeight = section.clientHeight; if (pageYOffset >= (sectionTop - 100)) { current = section.getAttribute('id'); } }); navLinks.forEach(link => { link.classList.remove('active'); if (link.getAttribute('href') === `#${current}`) { link.classList.add('active'); } }); }); // Form submission handler const contactForm = document.querySelector('form'); if (contactForm) { contactForm.addEventListener('submit', (e) => { e.preventDefault(); alert('Thank you for your message! I will get back to you soon.'); contactForm.reset(); }); }