/* TechUnity interactions — dependency-free; keyboard, touch and reduced-motion support. */
(function () {
    'use strict';
    var reduced = window.matchMedia('(prefers-reduced-motion: reduce)');
    var finePointer = window.matchMedia('(hover: hover) and (pointer: fine)');
    var header = document.querySelector('.header');
    var progress = document.querySelector('.scroll-progress');
    var scheduled = false;
    function updateScroll() {
        var max = document.documentElement.scrollHeight - window.innerHeight;
        progress.style.width = (max > 0 ? Math.min(100, window.scrollY / max * 100) : 0) + '%';
        header.classList.toggle('scrolled', window.scrollY > 20);
        scheduled = false;
    }
    window.addEventListener('scroll', function () {
        if (!scheduled) { scheduled = true; window.requestAnimationFrame(updateScroll); }
    }, { passive: true });
    window.addEventListener('resize', updateScroll);
    updateScroll();
    if ('IntersectionObserver' in window && !reduced.matches) {
        document.documentElement.classList.add('motion');
        var observer = new IntersectionObserver(function (entries) {
            entries.forEach(function (entry) {
                if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); }
            });
        }, { threshold: 0.08 });
        document.querySelectorAll('.reveal').forEach(function (element) { observer.observe(element); });
    }
    var typed = document.getElementById('typed');
    var words = ['growth.', 'manufacturing.', 'your people.', 'what’s next.'];
    var word = 0, length = words[0].length, deleting = true, typingTimer;
    function typeNext() {
        if (reduced.matches || document.hidden) { return; }
        length += deleting ? -1 : 1;
        typed.textContent = words[word].slice(0, Math.max(0, length));
        var delay = deleting ? 40 : 80;
        if (length <= 0) { deleting = false; word = (word + 1) % words.length; delay = 220; }
        else if (length === words[word].length) { deleting = true; delay = 2100; }
        typingTimer = window.setTimeout(typeNext, delay);
    }
    if (typed && !reduced.matches) { typingTimer = window.setTimeout(typeNext, 2300); }
    document.addEventListener('visibilitychange', function () {
        window.clearTimeout(typingTimer);
        if (!document.hidden && !reduced.matches) { typingTimer = window.setTimeout(typeNext, 400); }
    });
    reduced.addEventListener('change', function () {
        window.clearTimeout(typingTimer);
        if (reduced.matches) { typed.textContent = 'growth.'; document.documentElement.classList.remove('motion'); }
        else { word = 0; length = words[0].length; deleting = true; typed.textContent = words[0]; typingTimer = window.setTimeout(typeNext, 2300); }
    });
    var menuToggle = document.querySelector('.menu-toggle');
    var navigation = document.getElementById('navigation');
    var groups = document.querySelectorAll('.nav-group');
    function closeGroups(except) {
        groups.forEach(function (group) {
            if (group !== except) { group.classList.remove('open'); group.querySelector('button').setAttribute('aria-expanded', 'false'); }
        });
    }
    function closeMenu() {
        navigation.classList.remove('open'); menuToggle.setAttribute('aria-expanded', 'false'); menuToggle.setAttribute('aria-label', 'Open menu'); closeGroups();
    }
    menuToggle.addEventListener('click', function () {
        var open = navigation.classList.toggle('open');
        menuToggle.setAttribute('aria-expanded', String(open)); menuToggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');
    });
    groups.forEach(function (group) {
        var trigger = group.querySelector('.nav-trigger');
        function openGroup() { closeGroups(group); group.classList.add('open'); trigger.setAttribute('aria-expanded', 'true'); }
        trigger.addEventListener('click', function () {
            if (group.classList.contains('open')) { closeGroups(); } else { openGroup(); }
        });
        group.addEventListener('pointerenter', function () { if (finePointer.matches && window.innerWidth > 900) { openGroup(); } });
        group.addEventListener('pointerleave', function () { if (finePointer.matches && !group.contains(document.activeElement)) { closeGroups(); } });
        group.addEventListener('focusout', function (event) { if (!group.contains(event.relatedTarget)) { closeGroups(); } });
    });
    navigation.querySelectorAll('a').forEach(function (link) { link.addEventListener('click', closeMenu); });
    document.addEventListener('click', function (event) { if (!header.contains(event.target)) { closeMenu(); } });
    document.addEventListener('keydown', function (event) {
        if (event.key === 'Escape') {
            var focusedGroup = document.activeElement.closest('.nav-group');
            if (focusedGroup) { focusedGroup.querySelector('button').focus(); }
            else if (navigation.classList.contains('open')) { menuToggle.focus(); }
            closeMenu();
        }
    });
    var panels = Array.prototype.slice.call(document.querySelectorAll('.industry-panel'));
    var active = 0;
    function selectIndustry(index) {
        if (index === active) { return; }
        active = index;
        panels.forEach(function (panel, i) { panel.classList.toggle('active', i === index); panel.setAttribute('aria-pressed', String(i === index)); });
        var selected = panels[index];
        document.getElementById('industry-title').textContent = selected.dataset.title + '.';
        document.getElementById('industry-description').textContent = selected.dataset.description;
        document.getElementById('industry-link').textContent = 'Discuss ' + selected.dataset.solution.toLowerCase();
    }
    panels.forEach(function (panel, index) {
        panel.addEventListener('pointerenter', function () { if (finePointer.matches) { selectIndustry(index); } });
        panel.addEventListener('click', function () { selectIndustry(index); });
        panel.addEventListener('focus', function () { selectIndustry(index); });
        panel.addEventListener('keydown', function (event) {
            var next = index;
            if (event.key === 'ArrowRight' || event.key === 'ArrowDown') { next = (index + 1) % panels.length; }
            else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') { next = (index - 1 + panels.length) % panels.length; }
            else if (event.key === 'Home') { next = 0; }
            else if (event.key === 'End') { next = panels.length - 1; }
            else { return; }
            event.preventDefault(); panels[next].focus(); selectIndustry(next);
        });
    });
    document.querySelectorAll('.faqs details').forEach(function (item) {
        item.addEventListener('toggle', function () {
            if (item.open) { document.querySelectorAll('.faqs details').forEach(function (other) { if (other !== item) { other.open = false; } }); }
        });
    });
    var form = document.querySelector('.contact-form');
    form.addEventListener('submit', function () {
        var button = form.querySelector('button[type=submit]'); button.disabled = true; button.textContent = 'Sending your request…';
    });
    window.addEventListener('pageshow', function () {
        var button = form.querySelector('button[type=submit]'); button.disabled = false; button.textContent = 'Request a demo';
    });
}());
/* Theme and loading enhancements. Runs independently of the primary interactions. */
(function () {
    'use strict';
    var root = document.documentElement;
    var themeButton = document.querySelector('.theme-toggle');
    var motionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
    var hoverQuery = window.matchMedia('(hover: hover) and (pointer: fine)');
    function setTheme(theme) {
        theme = theme === 'light' ? 'light' : 'dark';
        root.setAttribute('data-theme', theme);
        var label = theme === 'dark' ? 'Switch to light theme' : 'Switch to dark theme';
        themeButton.setAttribute('aria-label', label);
        themeButton.setAttribute('title', label);
        themeButton.querySelector('.theme-symbol').textContent = theme === 'dark' ? '☀' : '☾';
        themeButton.querySelector('.theme-label').textContent = theme === 'dark' ? 'Light' : 'Dark';
        var color = document.querySelector('meta[name="theme-color"]');
        if (color) { color.setAttribute('content', theme === 'dark' ? '#081922' : '#ffffff'); }
    }
    setTheme(root.getAttribute('data-theme'));
    themeButton.addEventListener('click', function () {
        var theme = root.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
        setTheme(theme);
        try { window.localStorage.setItem('techunity-theme', theme); } catch (error) {}
    });
    window.addEventListener('storage', function (event) {
        if (event.key === 'techunity-theme') { setTheme(event.newValue); }
    });
    function ready() { root.classList.add('page-ready'); }
    if (document.readyState === 'complete') { ready(); }
    else { window.addEventListener('load', ready, { once: true }); }
    window.addEventListener('pageshow', ready);
    // Avoid waiting for slow offscreen resources; this is not a simulated percentage.
    window.setTimeout(ready, 1800);
    document.querySelectorAll('.loading-image').forEach(function (img) {
        var panel = img.closest('.industry-panel');
        function complete() {
            panel.classList.remove('image-pending');
            panel.classList.toggle('image-loaded', img.naturalWidth > 0);
            panel.classList.toggle('image-error', img.naturalWidth === 0);
            if (img.naturalWidth === 0 && !panel.querySelector('.image-fallback')) {
                var notice = document.createElement('span');
                notice.className = 'image-fallback'; notice.textContent = 'Photo unavailable';
                panel.appendChild(notice);
            }
        }
        img.addEventListener('load', complete, { once: true });
        img.addEventListener('error', complete, { once: true });
        if (img.complete) { complete(); } else { panel.classList.add('image-pending'); }
    });
    document.querySelectorAll('.solution-card').forEach(function (card) {
        var frame = 0, px = 0, py = 0;
        function paint() {
            frame = 0;
            if (!hoverQuery.matches || motionQuery.matches) { return; }
            var bounds = card.getBoundingClientRect();
            var x = Math.max(0, Math.min(bounds.width, px - bounds.left));
            var y = Math.max(0, Math.min(bounds.height, py - bounds.top));
            card.style.setProperty('--pointer-x', x + 'px');
            card.style.setProperty('--pointer-y', y + 'px');
            card.style.setProperty('--tilt-x', ((0.5 - y / bounds.height) * 3) + 'deg');
            card.style.setProperty('--tilt-y', ((x / bounds.width - 0.5) * 3) + 'deg');
        }
        card.addEventListener('pointermove', function (event) {
            if (!hoverQuery.matches || motionQuery.matches) { return; }
            px = event.clientX; py = event.clientY;
            if (!frame) { frame = window.requestAnimationFrame(paint); }
        }, { passive: true });
        card.addEventListener('pointerleave', function () {
            if (frame) { window.cancelAnimationFrame(frame); frame = 0; }
            card.style.setProperty('--tilt-x', '0deg'); card.style.setProperty('--tilt-y', '0deg');
        });
    });
}());
/* Client profiles stay on this page: no links, popups, or redirects. */
(function () {
    'use strict';
    var cards = Array.prototype.slice.call(document.querySelectorAll('.client-card'));
    var detail = document.getElementById('client-detail');
    if (!detail) { return; }
    cards.forEach(function (card) {
        card.addEventListener('click', function () {
            cards.forEach(function (other) { other.classList.toggle('selected', other === card); other.setAttribute('aria-pressed', String(other === card)); });
            document.getElementById('client-detail-name').textContent = card.dataset.name;
            document.getElementById('client-detail-sector').textContent = card.dataset.sector;
            document.getElementById('client-detail-description').textContent = card.dataset.description;
            document.getElementById('client-detail-category').textContent = card.dataset.category;
            detail.classList.remove('profile-changing');
            void detail.offsetWidth;
            detail.classList.add('profile-changing');
        });
        var img = card.querySelector('img');
        function imageFailed() { card.classList.add('logo-unavailable'); }
        img.addEventListener('error', imageFailed);
        if (img.complete && img.naturalWidth === 0) { imageFailed(); }
    });
}());
