Contact VoxHarvest

We answer most messages within two business days. For billing or enrollment, include your order email.

Read FAQ Browse catalog
Office hours: Mon–Fri, 9:00–17:00 PT
Best time to reach us is mid-week mornings
`; } if (footerEl) { footerEl.outerHTML = ` `; } // Re-init after header injection setTimeout(initAll, 50); } function initDelegation() { document.addEventListener('click', (e) => { const t = e.target; if (t.matches('[data-toggle="nav"]')) { const mobileNav = document.getElementById('mobile-nav'); if (mobileNav) mobileNav.classList.toggle('hidden'); } if (t.matches('[data-open="login"]')) { document.getElementById('login-modal')?.classList.remove('hidden'); } if (t.matches('[data-open="theme"]')) { document.getElementById('theme-modal')?.classList.remove('hidden'); } if (t.matches('[data-close="modal"]')) { t.closest('.fixed.inset-0')?.classList.add('hidden'); } if (t.matches('[data-theme]')) { const theme = t.getAttribute('data-theme'); localStorage.setItem(THEME_KEY, theme); applyTheme(theme); document.getElementById('theme-modal')?.classList.add('hidden'); } if (t.matches('[data-action="accept-cookies"]')) { localStorage.setItem('vh_cookie_ok', '1'); document.getElementById('cookie-banner')?.classList.add('hidden'); } }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { document.querySelectorAll('.fixed.inset-0').forEach(m => m.classList.add('hidden')); } }); } function initContactForm() { const form = document.getElementById('contact-form'); const errorModal = document.getElementById('error-modal'); const errorList = document.getElementById('error-list'); if (!form) return; form.addEventListener('submit', function(e) { const errors = []; const name = form.querySelector('input[name="name"]'); const email = form.querySelector('input[name="email"]'); const message = form.querySelector('textarea[name="message"]'); if (name && !name.value.trim()) errors.push('Name is required'); if (email && !email.value.trim()) errors.push('Email is required'); if (email && email.value && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.value)) errors.push('Please enter a valid email address'); if (message && !message.value.trim()) errors.push('Message is required'); if (errors.length > 0) { e.preventDefault(); errorList.innerHTML = ''; errors.forEach(err => { const li = document.createElement('li'); li.textContent = err; errorList.appendChild(li); }); errorModal.classList.remove('hidden'); return false; } }); } function initCookieBanner() { const banner = document.getElementById('cookie-banner'); if (!banner) return; if (!localStorage.getItem('vh_cookie_ok')) { banner.classList.remove('hidden'); } } function initAll() { initDelegation(); initContactForm(); initCookieBanner(); } function bootstrap() { initTheme(); injectHeaderFooter(); } window.addEventListener('load', bootstrap); })();