// Magnetic cursor effect document.addEventListener('DOMContentLoaded', () => { const cursorDot = document.createElement('div'); const cursorOutline = document.createElement('div'); cursorDot.classList.add('cursor-dot'); cursorOutline.classList.add('cursor-outline'); document.body.appendChild(cursorDot); document.body.appendChild(cursorOutline); window.addEventListener('mousemove', (e) => { const posX = e.clientX; const posY = e.clientY; cursorDot.style.left = `${posX}px`; cursorDot.style.top = `${posY}px`; // Smooth outline movement cursorOutline.animate({ left: `${posX}px`, top: `${posY}px` }, { duration: 500, fill: 'forwards' }); }); // Hover effects const hoverElements = document.querySelectorAll('a, button, .card-hover'); hoverElements.forEach(el => { el.addEventListener('mouseenter', () => { cursorDot.classList.add('hover'); cursorOutline.classList.add('hover'); }); el.addEventListener('mouseleave', () => { cursorDot.classList.remove('hover'); cursorOutline.classList.remove('hover'); }); }); // Scroll progress bar const progressBar = document.createElement('div'); progressBar.classList.add('progress-bar'); document.body.appendChild(progressBar); window.addEventListener('scroll', () => { const scrollTop = window.scrollY; const docHeight = document.body.scrollHeight - window.innerHeight; const scrollPercent = (scrollTop / docHeight) * 100; progressBar.style.width = `${scrollPercent}%`; }); // Smooth scroll for anchor links document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function(e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); if (target) { window.scrollTo({ top: target.offsetTop - 80, behavior: 'smooth' }); } }); }); });