A friendly reply is close
Bring us your knitting question.
`;
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();
});