Radiant Stitch

Welcome to Radiant Stitch

Account access is prepared for the community experience. No payment or password is collected in this demo.

A friendly reply is close

Bring us your knitting question.

Reach Radiant Stitch

Ask about course fit, materials, learning pace, or making your online experience more accessible. Our team reviews messages during studio hours.

+1 (415) 555-0186

[email protected]

Read common questions Browse our courses

Please check your message

Message sent

Thank you. Our team will reply within 48 hours.

`; document.getElementById('site-header').innerHTML = headerHTML; document.getElementById('site-footer').innerHTML = footerHTML; function initTheme() { const toggle = document.getElementById('theme-toggle'); if (!toggle) return; if (localStorage.getItem('radiantTheme') === 'dark') document.documentElement.classList.add('dark'); toggle.addEventListener('click', () => { document.documentElement.classList.toggle('dark'); localStorage.setItem('radiantTheme', document.documentElement.classList.contains('dark') ? 'dark' : 'light'); }); } function initAuth() { const loginBtn = document.getElementById('login-open'); const regBtn = document.getElementById('register-open'); const modal = document.getElementById('auth-modal'); const closeBtn = document.getElementById('auth-close'); if (!modal || !closeBtn) return; function open() { modal.showModal(); } function close() { modal.close(); } if (loginBtn) loginBtn.addEventListener('click', open); if (regBtn) regBtn.addEventListener('click', open); closeBtn.addEventListener('click', close); modal.addEventListener('click', e => { if (e.target === modal) close(); }); } function initCookies() { const banner = document.getElementById('cookie-banner'); const close = document.getElementById('cookie-close'); if (!banner || !close) return; if (localStorage.getItem('radiantStitchCookies') === 'accepted') banner.style.display = 'none'; close.addEventListener('click', () => { localStorage.setItem('radiantStitchCookies', 'accepted'); banner.style.display = 'none'; }); } const form = document.getElementById('contact-form'); const errorModal = document.getElementById('form-error-modal'); const errorText = document.getElementById('form-error-text'); const closeError = document.getElementById('close-form-error'); const successModal = document.getElementById('success-modal'); const closeSuccess = document.getElementById('close-success'); function showError(msg) { errorText.textContent = msg; errorModal.showModal(); } closeError.addEventListener('click', () => errorModal.close()); closeSuccess.addEventListener('click', () => successModal.close()); form.addEventListener('submit', function(e) { e.preventDefault(); const name = form.name.value.trim(); const email = form.email.value.trim(); const phone = form.phone.value.trim(); const message = form.message.value.trim(); if (name.length < 2) { showError('Name must be at least 2 characters.'); return; } if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { showError('Please enter a valid email address.'); return; } if (phone && !/^[\d\s\-\+\(\)]{7,20}$/.test(phone)) { showError('Phone format looks invalid.'); return; } if (message.length < 10) { showError('Message must be at least 10 characters.'); return; } errorModal.close(); form.reset(); successModal.showModal(); }); document.addEventListener('DOMContentLoaded', function() { initTheme(); initAuth(); initCookies(); });