VoxVerdant

A useful conversation

Tell us what you are planning.

Share your appliance type, room context, experience, or course question. Our team will respond with practical information and clear boundaries.

Prefer to browse first?

View the catalog
`; const footerHTML = ` `; document.getElementById('site-header').innerHTML = headerHTML; document.getElementById('site-footer').innerHTML = footerHTML; })(); const form = document.getElementById('contact-form'); const errorModal = document.getElementById('error-modal'); const successModal = document.getElementById('success-modal'); const errorText = document.getElementById('error-text'); form.addEventListener('submit', function(e) { e.preventDefault(); const errors = []; if (form.name.value.trim().length < 2) errors.push('Please enter your name.'); if (!form.email.validity.valid) errors.push('Please enter a valid email address.'); if (form.phone.value.replace(/\D/g, '').length < 7) errors.push('Please enter a reachable phone number.'); if (form.message.value.trim().length < 20) errors.push('Please write at least 20 characters in your message.'); if (errors.length) { errorText.textContent = errors.join(' '); errorModal.classList.remove('hidden'); errorModal.classList.add('flex'); } else { successModal.classList.remove('hidden'); successModal.classList.add('flex'); form.reset(); } }); document.querySelectorAll('[data-close-error]').forEach(btn => btn.addEventListener('click', () => { errorModal.classList.remove('flex'); errorModal.classList.add('hidden'); })); document.querySelectorAll('[data-close-success]').forEach(btn => btn.addEventListener('click', () => { successModal.classList.remove('flex'); successModal.classList.add('hidden'); })); (function(){ const header = document.getElementById('site-header'); const menuToggle = header.querySelector('[data-menu-toggle]'); const mobileNav = header.querySelector('[data-mobile-nav]'); menuToggle.addEventListener('click', () => { const isOpen = !mobileNav.classList.contains('hidden'); mobileNav.classList.toggle('hidden'); menuToggle.setAttribute('aria-expanded', !isOpen); }); const themeBtn = header.querySelector('[data-theme-toggle]'); themeBtn.addEventListener('click', () => { document.body.classList.toggle('bg-[#20332B]'); document.body.classList.toggle('text-[#F7F3E8]'); }); const loginBtn = header.querySelector('[data-open-login]'); const registerBtn = header.querySelector('[data-open-register]'); const loginModal = document.createElement('div'); loginModal.innerHTML = ``; document.body.appendChild(loginModal.firstChild); const regModal = document.createElement('div'); regModal.innerHTML = ``; document.body.appendChild(regModal.firstChild); loginBtn.addEventListener('click', () => document.querySelector('[data-auth-modal]').classList.remove('hidden') && document.querySelector('[data-auth-modal]').classList.add('flex')); registerBtn.addEventListener('click', () => document.querySelector('[data-register-modal]').classList.remove('hidden') && document.querySelector('[data-register-modal]').classList.add('flex')); document.querySelectorAll('[data-close-modal]').forEach(b => b.addEventListener('click', () => { document.querySelectorAll('[data-auth-modal],[data-register-modal]').forEach(m => { m.classList.remove('flex'); m.classList.add('hidden'); }); })); })();