document.addEventListener('DOMContentLoaded', () => { // Theme toggle const themeToggle = document.getElementById('theme-toggle'); const htmlElement = document.documentElement; // Set initial theme based on saved preference or system setting if (localStorage.getItem('theme') === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) { htmlElement.classList.add('dark'); } else { htmlElement.classList.remove('dark'); } themeToggle.addEventListener('click', () => { if (htmlElement.classList.contains('dark')) { htmlElement.classList.remove('dark'); localStorage.setItem('theme', 'light'); } else { htmlElement.classList.add('dark'); localStorage.setItem('theme', 'dark'); } }); // Scroll animations const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('fade-in-up-visible'); } }); }, { threshold: 0.1 }); document.querySelectorAll('.fade-in-up').forEach(el => { observer.observe(el); }); });