Primelake Atelier

Cart

Continue Shopping
Subtotal
$0.00

Shipping and taxes calculated at checkout.

View Fallows
`; document.querySelector('header').innerHTML = headerHTML; document.querySelector('footer').innerHTML = footerHTML; initAllScripts(); } function initAllScripts() { // Theme const root = document.documentElement; if (!localStorage.getItem('pa-theme') && window.matchMedia('(prefers-color-scheme: dark)').matches) { root.classList.add('dark'); } if (localStorage.getItem('pa-theme') === 'dark') root.classList.add('dark'); document.addEventListener('click', function(e) { const toggle = e.target.closest('[data-theme-toggle]'); if (toggle) { const isDark = root.classList.toggle('dark'); localStorage.setItem('pa-theme', isDark ? 'dark' : 'light'); } const mobileBtn = e.target.closest('[data-mobile-toggle]'); if (mobileBtn) { const mm = document.getElementById('mobile-menu'); if (mm) mm.classList.toggle('hidden'); } if (e.target.closest('[data-open="login"]')) openModal('#modal-login'); if (e.target.closest('[data-open="signup"]')) openModal('#modal-signup'); if (e.target.closest('[data-close-modal]') || e.target.classList.contains('modal-backdrop')) { closeAllModals(); } const accept = e.target.closest('[data-accept]'); if (accept) { document.cookie = 'cookie_consent=accepted; max-age='+(60*60*24*365)+'; path=/'; document.getElementById('cookie-banner').classList.add('hidden'); } }); // Cookie banner const banner = document.getElementById('cookie-banner'); if (banner && !document.cookie.includes('cookie_consent=accepted')) { banner.classList.remove('hidden'); banner.classList.add('flex'); } // Cart logic initCart(); } function openModal(sel) { const modal = document.querySelector(sel); if (modal) { modal.classList.remove('hidden'); modal.classList.add('flex'); } } function closeAllModals() { $$('.fixed.inset-0.z-50').forEach(m => { m.classList.add('hidden'); m.classList.remove('flex'); }); } function initCart() { let cart = []; try { cart = JSON.parse(localStorage.getItem('cart')) || []; } catch(e) { cart = []; } const listEl = document.getElementById('cartList'); const subtotalEl = document.getElementById('subtotal'); const emptyEl = document.getElementById('empty'); const summaryEl = document.getElementById('summary'); const checkoutBtn = document.getElementById('checkoutBtn'); function saveCart() { localStorage.setItem('cart', JSON.stringify(cart)); } function calculateTotal() { let total = 0; cart.forEach(item => total += item.price * item.qty); subtotalEl.textContent = '$' + total.toFixed(2); return total; } function render() { listEl.innerHTML = ''; if (!cart.length) { emptyEl.classList.remove('hidden'); summaryEl.style.display = 'none'; return; } else { emptyEl.classList.add('hidden'); summaryEl.style.display = 'block'; } cart.forEach((item, idx) => { const row = document.createElement('div'); row.className = `p-5 border border-neutral-200 dark:border-neutral-800 rounded-xl bg-white dark:bg-neutral-900 xk9h7 flex flex-col sm:flex-row sm:items-center justify-between gap-4`; row.innerHTML = `
${item.name}
$${item.price} each
${item.qty}
$${(item.price * item.qty).toFixed(2)}
`; listEl.appendChild(row); }); calculateTotal(); listEl.querySelectorAll('button[data-action]').forEach(btn => { btn.onclick = () => { const idx = parseInt(btn.dataset.idx); const action = btn.dataset.action; if (action === 'inc') { cart[idx].qty++; } else if (action === 'dec') { if (cart[idx].qty > 1) cart[idx].qty--; } else if (action === 'remove') { cart.splice(idx, 1); } saveCart(); render(); }; }); } // Initial render render(); // Checkout checkoutBtn.onclick = () => { if (!cart.length) return; const modal = document.getElementById('modal-checkout'); modal.classList.remove('hidden'); modal.classList.add('flex'); // Clear cart on confirm (demo) modal.querySelector('[data-close-modal]').onclick = () => { cart = []; saveCart(); modal.classList.add('hidden'); modal.classList.remove('flex'); render(); }; }; } // Boot loadHeaderFooter(); })();