document.addEventListener('DOMContentLoaded', () => { const navbar = document.querySelector('.site-navbar'); const onScroll = () => { if (navbar) { navbar.classList.toggle('scrolled', window.scrollY > 12); } }; document.addEventListener('scroll', onScroll, { passive: true }); onScroll(); if (window.bootstrap && typeof bootstrap.Toast === 'function') { document.querySelectorAll('.toast').forEach((toastElement) => { const toast = new bootstrap.Toast(toastElement, { delay: 5200 }); toast.show(); }); } const filterButtons = document.querySelectorAll('[data-service-filter]'); const serviceItems = document.querySelectorAll('[data-service-track]'); if (filterButtons.length && serviceItems.length) { filterButtons.forEach((button) => { button.addEventListener('click', () => { const filter = button.dataset.serviceFilter || 'all'; filterButtons.forEach((candidate) => candidate.classList.toggle('active', candidate === button)); serviceItems.forEach((item) => { const track = item.dataset.serviceTrack || ''; const visible = filter === 'all' || track === filter; item.classList.toggle('d-none', !visible); }); }); }); } document.querySelectorAll('[data-copy-target]').forEach((button) => { button.addEventListener('click', async () => { const target = document.querySelector(button.dataset.copyTarget || ''); if (!target) return; const originalText = button.textContent; try { await navigator.clipboard.writeText(target.textContent.trim()); button.textContent = 'Copied'; window.setTimeout(() => { button.textContent = originalText; }, 1600); } catch (error) { button.textContent = 'Unavailable'; window.setTimeout(() => { button.textContent = originalText; }, 1600); } }); }); document.querySelectorAll('[data-char-count]').forEach((textarea) => { const counter = document.querySelector(textarea.dataset.charCount || ''); if (!counter) return; const updateCount = () => { counter.textContent = `${textarea.value.length} / ${textarea.maxLength}`; }; textarea.addEventListener('input', updateCount); updateCount(); }); });