const sections = document.querySelectorAll('.section-bg');
const observer = new IntersectionObserver((entries) => {
    entries.forEach((entry, index) => {
        if (entry.isIntersecting) {
            entry.target.style.transform = 'translateY(0)';
            entry.target.style.opacity = '1';
            entry.target.style.transitionDelay = `${index * 0.1}s`;
        }
    });
}, { threshold: 0.1 });

sections.forEach(section => {
    section.style.transform = 'translateY(30px)';
    section.style.opacity = '0';
    section.style.transition = 'transform 0.7s ease-out, opacity 0.7s ease-out';
    observer.observe(section);
});

const PARTICLE_POOL_SIZE = 50;
const particlePool = [];
const activeParticles = new Set();

function createParticleElement() {
    const particle = document.createElement('div');
    particle.classList.add('particle');
    if (Math.random() > 0.6) particle.classList.add('large');
    return particle;
}

function initializeParticlePool() {
    for (let i = 0; i < PARTICLE_POOL_SIZE; i++) {
        particlePool.push(createParticleElement());
    }
}

function resetParticle(particle) {
    particle.style.left = `${Math.random() * 100}%`;
    particle.style.top = `${Math.random() * 100}%`;
    particle.style.animationDelay = `${Math.random() * 8}s`;
    particle.style.animationDuration = `${8 + Math.random() * 6}s`;
    particle.classList.remove('fade-out');
    return particle;
}

function spawnParticle() {
    if (particlePool.length === 0 || activeParticles.size >= PARTICLE_POOL_SIZE) return;

    const particle = resetParticle(particlePool.pop());
    if (!particle.parentNode) document.body.appendChild(particle);
    activeParticles.add(particle);

    setTimeout(() => {
        particle.classList.add('fade-out');
        setTimeout(() => {
            activeParticles.delete(particle);
            particlePool.push(particle);
        }, 500);
    }, 14000);
}

function animate() {
    if (Math.random() < 0.1) spawnParticle(); // Reduced spawn frequency
    requestAnimationFrame(animate);
}

// Initialize and start
setTimeout(() => {
    initializeParticlePool();
    animate();
}, 500);

function throttle(fn, wait) {
    let lastTime = 0;
    return function (...args) {
        const now = Date.now();
        if (now - lastTime >= wait) {
            fn.apply(this, args);
            lastTime = now;
        }
    };
}


const buttons = document.querySelectorAll('.btn-minecraft');
buttons.forEach(button => {
    button.addEventListener('mousemove', (e) => {
        const rect = button.getBoundingClientRect();
        const x = e.clientX - rect.left;
        const y = e.clientY - rect.top;
        button.style.setProperty('--x', `${x}px`);
        button.style.setProperty('--y', `${y}px`);
    });
});

// Hamburger Menu Toggle
const hamburger = document.querySelector('.hamburger');
const mobileNav = document.querySelector('[data-mobile-nav]');
const navLinks = mobileNav.querySelectorAll('a');

// Debounce function to prevent rapid clicks
function debounce(fn, wait) {
    let timeout;
    return function (...args) {
        clearTimeout(timeout);
        timeout = setTimeout(() => fn.apply(this, args), wait);
    };
}

hamburger.addEventListener('click', debounce(() => {
    console.log('Hamburger clicked, toggling menu');
    mobileNav.classList.toggle('active');
    hamburger.classList.toggle('active');
}, 100));

navLinks.forEach(link => {
    link.addEventListener('click', () => {
        console.log('Nav link clicked, closing menu');
        mobileNav.classList.remove('active');
        hamburger.classList.remove('active');
    });
});

document.addEventListener('click', (e) => {
    if (!mobileNav.contains(e.target) && !hamburger.contains(e.target) && mobileNav.classList.contains('active')) {
        console.log('Clicked outside, closing menu');
        mobileNav.classList.remove('active');
        hamburger.classList.remove('active');
    }
});

