document.addEventListener('DOMContentLoaded', () => { // --- Intersection Observer for Scroll Animations --- const observerOptions = { root: null, rootMargin: '0px', threshold: 0.1 }; const observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('is-visible'); // Stop observing once visible observer.unobserve(entry.target); } }); }, observerOptions); document.querySelectorAll('.fade-in-section').forEach(section => { observer.observe(section); }); // --- Populate Skills Dynamically --- const skills = [ { name: "JavaScript", level: "Expert" }, { name: "React.js", level: "Advanced" }, { name: "Tailwind CSS", level: "Expert" }, { name: "Node.js", level: "Intermediate" }, { name: "TypeScript", level: "Advanced" }, { name: "UI/UX Design", level: "Advanced" }, { name: "HTML5 & CSS3", level: "Expert" }, { name: "Git & GitHub", level: "Advanced" }, { name: "Python", level: "Intermediate" }, { name: "SQL", level: "Intermediate" }, ]; const skillsContainer = document.getElementById('skills-container'); if(skillsContainer) { skills.forEach(skill => { const badge = document.createElement('div'); // Styling the badge manually to ensure it matches the design without creating a new component badge.className = ` group relative px-6 py-4 bg-surface/40 border border-white/5 rounded-xl hover:border-primary/50 hover:bg-surface/80 transition-all duration-300 cursor-default `; badge.innerHTML = `