/** * FAQ Block - Frontend Interactions * Handles accordion functionality for FAQ items */ document.addEventListener('DOMContentLoaded', () => { const faqBlocks = document.querySelectorAll('.faq-block'); faqBlocks.forEach((block) => { const faqItems = block.querySelectorAll('.faq-item'); faqItems.forEach((item) => { const button = item.querySelector('.faq-item__question'); const answer = item.querySelector('.faq-item__answer'); if (!button || !answer) return; button.addEventListener('click', () => { const isExpanded = button.getAttribute('aria-expanded') === 'true'; // Toggle this item button.setAttribute('aria-expanded', !isExpanded); if (isExpanded) { // Collapse answer.style.height = answer.scrollHeight + 'px'; // Force reflow answer.offsetHeight; answer.style.height = '0'; setTimeout(() => { answer.style.display = 'none'; answer.style.height = ''; }, 300); item.classList.remove('faq-item--expanded'); } else { // Expand answer.style.display = 'block'; answer.style.height = '0'; // Force reflow answer.offsetHeight; answer.style.height = answer.scrollHeight + 'px'; setTimeout(() => { answer.style.height = 'auto'; }, 300); item.classList.add('faq-item--expanded'); } }); // Handle keyboard navigation button.addEventListener('keydown', (e) => { // Space or Enter triggers the button if (e.key === ' ' || e.key === 'Enter') { e.preventDefault(); button.click(); } }); }); }); // Optional: Add URL hash navigation // If URL has #faq-123, open that specific FAQ if (window.location.hash) { const hash = window.location.hash.substring(1); const targetItem = document.querySelector(`[data-faq-id="${hash}"]`); if (targetItem) { const button = targetItem.querySelector('.faq-item__question'); const isExpanded = button.getAttribute('aria-expanded') === 'true'; if (!isExpanded) { button.click(); } // Scroll to item after a short delay setTimeout(() => { targetItem.scrollIntoView({ behavior: 'smooth', block: 'center' }); }, 350); } } });