const reduced = matchMedia('(prefers-reduced-motion: reduce)'); const toggle = document.getElementById('motion-toggle'); let paused = reduced.matches; function updateMotion() { const stopped = paused || document.hidden; for (const node of document.querySelectorAll('.hero-media > img, .ticker > div')) node.style.animationPlayState = stopped ? 'paused' : 'running'; if (!toggle) return; toggle.setAttribute('aria-pressed', String(paused)); toggle.setAttribute('aria-label', paused ? 'Play background animation' : 'Pause background animation'); toggle.querySelector('span').textContent = paused ? '▶' : 'Ⅱ'; } toggle?.addEventListener('click', () => { paused = !paused; updateMotion(); }); reduced.addEventListener('change', () => { paused = reduced.matches; updateMotion(); }); document.addEventListener('visibilitychange', updateMotion); updateMotion();