const toggle = document.querySelector('.nav-toggle'); const nav = document.getElementById('main-nav'); if (toggle && nav) { toggle.addEventListener('click', () => { const open = nav.getAttribute('aria-hidden') === 'false'; nav.setAttribute('aria-hidden', String(open ? true : false)); toggle.setAttribute('aria-expanded', String(!open)); }); nav.addEventListener('click', (e) => { if (e.target.closest('a')) { nav.setAttribute('aria-hidden', 'true'); toggle.setAttribute('aria-expanded', 'false'); } }); } document.addEventListener('click', e => { const btn = e.target.closest('.star'); if (!btn) return; const icon = btn.querySelector('i'); icon.classList.toggle('fa-regular'); icon.classList.toggle('fa-solid'); }); const modal = document.getElementById('loginModal'); const openBtn = document.getElementById('loginBtn'); const closeBtns = modal.querySelectorAll('[data-close]'); function openModal() { modal.classList.add('is-open'); modal.setAttribute('aria-hidden', 'false'); document.body.style.overflow = 'hidden'; } function closeModal() { modal.classList.remove('is-open'); modal.setAttribute('aria-hidden', 'true'); document.body.style.overflow = ''; } openBtn.addEventListener('click', openModal); closeBtns.forEach(btn => btn.addEventListener('click', closeModal)); modal.addEventListener('click', (e) => { if (e.target === modal) closeModal(); }); window.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeModal(); }); const regModal = document.getElementById('registerModal'); const regBtn = document.getElementById('registerBtn'); function openReg() { regModal.classList.add('is-open'); regModal.setAttribute('aria-hidden', 'false'); document.body.style.overflow = 'hidden'; } function closeReg() { regModal.classList.remove('is-open'); regModal.setAttribute('aria-hidden', 'true'); document.body.style.overflow = ''; } if (regBtn) regBtn.addEventListener('click', (e) => { e.preventDefault(); openReg(); }); regModal.addEventListener('click', (e) => { if (e.target === regModal || e.target.matches('[data-close]')) closeReg(); }); window.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeReg(); }); const form = document.getElementById('registerForm'); const submitBtn = document.getElementById('registerSubmit'); const agreeTerms = document.getElementById('agreeTerms'); const agreeAge = document.getElementById('agreeAge'); const pass1 = document.getElementById('pass1'); const pass2 = document.getElementById('pass2'); const dob = document.getElementById('dob'); function isAdult(dateStr) { const d = new Date(dateStr); if (isNaN(d)) return false; const today = new Date(); const adult = new Date(d.getFullYear() + 18, d.getMonth(), d.getDate()); return adult <= today; } function updateSubmitState() { const allRequired = form.checkValidity() && pass1.value === pass2.value && isAdult(dob.value); submitBtn.classList.toggle('enabled', agreeTerms.checked && agreeAge.checked && allRequired); submitBtn.disabled = !(agreeTerms.checked && agreeAge.checked && allRequired); } ['input', 'change'].forEach(ev => { form.addEventListener(ev, updateSubmitState); }); function showMsg(input, text = '') { const msg = input.parentElement.querySelector('.msg'); if (msg) msg.textContent = text; } pass2.addEventListener('input', () => { showMsg(pass2, pass1.value !== pass2.value ? 'Passwords do not match' : ''); }); dob.addEventListener('change', () => { showMsg(dob, isAdult(dob.value) ? '' : 'You must be 18+'); }); form.addEventListener('submit', (e) => { e.preventDefault(); updateSubmitState(); if (submitBtn.disabled) return; alert('Registration submitted ✅'); closeReg(); form.reset(); updateSubmitState(); }); document.getElementById('contactForm').addEventListener('submit', (e) => { e.preventDefault(); if (!e.target.checkValidity()) { e.target.reportValidity(); return; } alert('Message sent ✅'); e.target.reset(); });