Pollux Bloomworks

Your selected learning path

Learning basket

Subtotal $0

No payment required for this demonstration

Review basket questions Contact Pollux Bloomworks
`; const footerHTML = ` `; headerEl.innerHTML = headerHTML; footerEl.innerHTML = footerHTML; setTimeout(() => { initHeaderScripts(); initFooterScripts(); initCartLogic(); }, 50); } function initHeaderScripts() { const mobileToggle = document.getElementById('mobile-menu-toggle'); const mobileMenu = document.getElementById('mobile-menu'); if (mobileToggle && mobileMenu) { mobileToggle.addEventListener('click', () => { mobileMenu.classList.toggle('hidden'); }); } const themeBtn = document.getElementById('theme-toggle'); if (themeBtn) { themeBtn.addEventListener('click', () => { const isDark = document.documentElement.classList.toggle('dark'); localStorage.setItem('polluxBloomworksTheme', isDark ? 'dark' : 'light'); }); } const loginBtn = document.getElementById('login-open'); const registerBtn = document.getElementById('register-open'); const authModal = document.getElementById('auth-modal'); if (!authModal) { const modalHTML = ``; document.body.insertAdjacentHTML('beforeend', modalHTML); } function openAuth(title) { const modal = document.getElementById('auth-modal'); const titleEl = document.getElementById('auth-title'); if (modal && titleEl) { titleEl.textContent = title; modal.classList.remove('hidden'); modal.classList.add('flex'); } } function closeAuth() { const modal = document.getElementById('auth-modal'); if (modal) { modal.classList.remove('flex'); modal.classList.add('hidden'); } } if (loginBtn) loginBtn.addEventListener('click', () => openAuth('Sign in to Pollux Bloomworks')); if (registerBtn) registerBtn.addEventListener('click', () => openAuth('Create your account')); document.addEventListener('click', (e) => { if (e.target && e.target.id === 'auth-close') closeAuth(); if (e.target && e.target.id === 'auth-modal') closeAuth(); }); } function initFooterScripts() { const banner = document.getElementById('cookie-banner'); const acceptBtn = document.getElementById('accept-cookies'); const storageKey = 'polluxBloomworksCookiesAccepted'; function showBanner() { if (banner && !localStorage.getItem(storageKey)) { banner.style.display = 'flex'; } } function hideBanner() { if (banner) banner.style.display = 'none'; localStorage.setItem(storageKey, 'true'); } if (acceptBtn) acceptBtn.addEventListener('click', hideBanner); setTimeout(showBanner, 1200); function syncTheme() { const isDark = localStorage.getItem('polluxBloomworksTheme') === 'dark'; if (isDark) document.documentElement.classList.add('dark'); else document.documentElement.classList.remove('dark'); } syncTheme(); window.addEventListener('storage', syncTheme); } function initCartLogic() { const cartList = document.getElementById('cart-list'); const cartSummary = document.getElementById('cart-summary'); const cartEmpty = document.getElementById('cart-empty'); const cartTotalEl = document.getElementById('cart-total'); const checkoutOpen = document.getElementById('checkout-open'); const checkoutModal = document.getElementById('checkout-modal'); const checkoutClose = document.getElementById('checkout-close'); const checkoutCloseBtn = document.getElementById('checkout-close-btn'); const CART_KEY = 'polluxBloomworksCart'; let cart = JSON.parse(localStorage.getItem(CART_KEY) || '[]'); let catalog = []; function saveCart() { localStorage.setItem(CART_KEY, JSON.stringify(cart)); } function updateTotal() { let total = 0; cart.forEach(item => { const prod = catalog.find(p => p.id === item.id); if (prod) total += prod.price * item.quantity; }); cartTotalEl.textContent = '$' + total.toFixed(0); } function renderCart() { cartList.innerHTML = ''; if (cart.length === 0) { cartSummary.style.display = 'none'; cartEmpty.classList.remove('hidden'); cartEmpty.style.display = 'block'; return; } cartSummary.style.display = 'block'; cartEmpty.style.display = 'none'; cartEmpty.classList.add('hidden'); cart.forEach((item, index) => { const prod = catalog.find(p => p.id === item.id); if (!prod) return; const lineTotal = (prod.price * item.quantity).toFixed(0); const card = document.createElement('div'); card.className = `m4v8q flex flex-col justify-between rounded-3xl border border-[#C8D5C4] bg-white p-8 md:flex-row md:items-center`; card.innerHTML = `

${prod.title}

${prod.description}

$${prod.price}
${item.quantity}
$${lineTotal}
`; cartList.appendChild(card); }); cartList.querySelectorAll('button').forEach(btn => { btn.addEventListener('click', () => { const idx = parseInt(btn.dataset.index); const action = btn.dataset.action; if (action === 'plus') { cart[idx].quantity++; } else if (action === 'minus') { if (cart[idx].quantity > 1) cart[idx].quantity--; } else if (action === 'remove') { cart.splice(idx, 1); } saveCart(); renderCart(); updateTotal(); }); }); updateTotal(); } async function loadCatalogAndRender() { try { const res = await fetch('./catalog.json'); catalog = await res.json(); } catch (e) { catalog = [ {id:1,title:"Spring Wildflower Design",price:245,description:"Learn seasonal bouquet construction"}, {id:2,title:"Advanced Floral Sculpting",price:390,description:"Create sculptural centerpieces"}, {id:3,title:"Botanical Wedding Mastery",price:310,description:"Design wedding installations"} ]; } renderCart(); } function openCheckoutModal() { checkoutModal.classList.remove('hidden'); checkoutModal.classList.add('flex'); } function closeCheckoutModal() { checkoutModal.classList.remove('flex'); checkoutModal.classList.add('hidden'); } if (checkoutOpen) checkoutOpen.addEventListener('click', openCheckoutModal); if (checkoutClose) checkoutClose.addEventListener('click', closeCheckoutModal); if (checkoutCloseBtn) checkoutCloseBtn.addEventListener('click', closeCheckoutModal); checkoutModal.addEventListener('click', (e) => { if (e.target === checkoutModal) closeCheckoutModal(); }); loadCatalogAndRender(); initTailwind(); } loadHeaderFooter(); })();