Your cart

Adjust seats and finalize your enrollment.

Your cart is empty.

`; document.getElementById('site-header').innerHTML = headerHTML; document.getElementById('site-footer').innerHTML = footerHTML; // Theme toggle function toggleTheme() { if (document.documentElement.classList.contains('dark')) { document.documentElement.classList.remove('dark'); localStorage.setItem('gms-theme', 'light'); } else { document.documentElement.classList.add('dark'); localStorage.setItem('gms-theme', 'dark'); } } document.getElementById('btn-theme').addEventListener('click', function(e) { e.preventDefault(); toggleTheme(); }); document.getElementById('btn-theme-mobile').addEventListener('click', function(e) { e.preventDefault(); toggleTheme(); }); // Mobile menu const toggle = document.getElementById('mobile-menu-toggle'); const mobile = document.getElementById('mobile-menu'); toggle.addEventListener('click', () => { mobile.classList.toggle('hidden'); }); // Cookie banner const banner = document.getElementById('cookie-banner'); const acceptBtn = document.getElementById('cookie-accept'); const COOKIE_KEY = 'gm_cookie_consent'; function showBanner() { if (!localStorage.getItem(COOKIE_KEY)) { banner.classList.remove('hidden'); banner.classList.add('flex'); } } function hideBanner() { banner.classList.add('hidden'); banner.classList.remove('flex'); } if (acceptBtn) { acceptBtn.addEventListener('click', function() { localStorage.setItem(COOKIE_KEY, 'accepted'); hideBanner(); }); } setTimeout(showBanner, 1200); // Cart functionality function loadCart() { return JSON.parse(localStorage.getItem('gms-cart') || '[]'); } function saveCart(items) { localStorage.setItem('gms-cart', JSON.stringify(items)); } async function renderCart() { const items = loadCart(); const empty = document.getElementById('empty-cart'); const section = document.getElementById('cart-section'); const body = document.getElementById('cart-body'); const countEl = document.getElementById('cart-count'); const totalEl = document.getElementById('cart-total'); if (!items.length) { empty.classList.remove('hidden'); section.classList.add('hidden'); return; } try { const res = await fetch('./catalog.json'); const data = await res.json(); let total = 0; body.innerHTML = ''; items.forEach((it, idx) => { const c = data.find(d => d.id === it.id); if (!c) return; const subtotal = c.price * it.qty; total += subtotal; const tr = document.createElement('tr'); tr.innerHTML = `
${c.title}
${c.category} • ${c.level}
${c.format} USD $${c.price} USD $${subtotal} Remove `; const qtyInput = tr.querySelector('input'); qtyInput.addEventListener('change', (e) => { const v = Math.max(1, parseInt(e.target.value, 10) || 1); items[idx].qty = v; saveCart(items); renderCart(); }); const rm = tr.querySelector('a'); rm.addEventListener('click', (e) => { e.preventDefault(); items.splice(idx, 1); saveCart(items); renderCart(); }); body.appendChild(tr); }); countEl.textContent = items.reduce((s, i) => s + i.qty, 0); totalEl.textContent = total.toFixed(2); empty.classList.add('hidden'); section.classList.remove('hidden'); document.getElementById('checkout-btn').addEventListener('click', (e) => { e.preventDefault(); const m = document.getElementById('checkout-modal'); m.classList.remove('hidden'); m.classList.add('flex'); }); document.querySelectorAll('[data-close="checkout-modal"]').forEach(n => { n.addEventListener('click', () => { const m = document.getElementById('checkout-modal'); m.classList.add('hidden'); m.classList.remove('flex'); }); }); } catch (err) { console.error('Failed to load catalog'); } } document.addEventListener('DOMContentLoaded', renderCart); })();