patx/afterdarklabs

(function () {
    const activeClasses = ['text-[#ccff00]', 'font-semibold'];
    const navLinks = Array.from(document.querySelectorAll('nav a[href]')).filter(link =>
        ['Mobile Apps', 'Business Websites', 'Shopify Stores', 'Our Work', 'About', 'Contact'].includes(link.textContent.trim())
    );

    if (!navLinks.length) return;

    const pageClusters = {
        'mobile-apps.html': 'index.html#mobile-apps',
        'mobile-app-branding-ui-ux.html': 'index.html#mobile-apps',
        'backend-api-integration.html': 'index.html#mobile-apps',
        'app-store-launch-support.html': 'index.html#mobile-apps',
        'influencer-marketing-social-media.html': 'index.html#mobile-apps',

        'websites.html': 'index.html#business-websites',
        'business-websites.html': 'index.html#business-websites',
        'small-business-website-design.html': 'index.html#business-websites',
        'service-business-website-design.html': 'index.html#business-websites',
        'fort-lauderdale-business-website-design.html': 'index.html#business-websites',
        'custom-business-website-development.html': 'index.html#business-websites',
        'custom-web-development-ecommerce.html': 'index.html#business-websites',
        'ecommerce-business-websites.html': 'index.html#business-websites',
        'booking-website-for-business.html': 'index.html#business-websites',
        'online-bookings-appointments-memberships.html': 'index.html#business-websites',
        'business-website-seo.html': 'index.html#business-websites',
        'seo-performance-optimization.html': 'index.html#business-websites',
        'brand-positioning-creative-strategy.html': 'index.html#business-websites',
        'generative-engine-optimization.html': 'index.html#business-websites',

        'shopify-stores.html': 'index.html#shopify-stores',
        'shopify-store-design.html': 'index.html#shopify-stores',
        'shopify-seo-optimization.html': 'index.html#shopify-stores',
        'shopify-migration-optimization.html': 'index.html#shopify-stores',

        'about.html': 'index.html#about',
    };

    const homeSections = [
        { id: 'mobile-apps', href: 'index.html#mobile-apps' },
        { id: 'business-websites', href: 'index.html#business-websites' },
        { id: 'shopify-stores', href: 'index.html#shopify-stores' },
        { id: 'work', href: 'index.html#work' },
        { id: 'about', href: 'index.html#about' },
        { id: 'contact', href: 'index.html#contact' },
    ];

    function setActive(href) {
        navLinks.forEach(link => {
            const isActive = link.getAttribute('href') === href;
            link.classList.toggle(activeClasses[0], isActive);
            link.classList.toggle(activeClasses[1], isActive);

            if (isActive) {
                link.setAttribute('aria-current', 'page');
            } else {
                link.removeAttribute('aria-current');
            }
        });
    }

    function normalizedPage() {
        const page = window.location.pathname.split('/').pop();
        return page || 'index.html';
    }

    function updateHomeActive() {
        const offset = window.innerHeight * 0.35;
        let currentHref = '';

        for (const section of homeSections) {
            const element = document.getElementById(section.id);
            if (!element) continue;

            if (element.getBoundingClientRect().top <= offset) {
                currentHref = section.href;
            }
        }

        setActive(currentHref);
    }

    function hrefForCurrentHash() {
        const section = homeSections.find(item => `#${item.id}` === window.location.hash);
        return section ? section.href : '';
    }

    const page = normalizedPage();

    if (page === 'index.html') {
        setActive(hrefForCurrentHash());
        requestAnimationFrame(updateHomeActive);
        window.addEventListener('load', updateHomeActive);
        window.addEventListener('scroll', updateHomeActive, { passive: true });
        window.addEventListener('hashchange', () => {
            setActive(hrefForCurrentHash());
            requestAnimationFrame(updateHomeActive);
        });
        return;
    }

    setActive(pageClusters[page] || '');
})();