'use strict'; document.addEventListener('DOMContentLoaded', async () => { await SHOP.loadContext(); await Promise.all([loadCategoryTiles(), loadFeatured()]); window.addEventListener('currencyChanged', loadFeatured); }); async function loadCategoryTiles() { const grid = document.getElementById('category-grid'); if (!grid) return; try { const data = await SHOP.fetchJSON('/api/category-tree?root_only=true'); const cats = (data.categories || []).slice(0, 12); if (!cats.length) { grid.innerHTML = '

No categories yet.

'; return; } grid.innerHTML = cats.map(c => ` ${SHOP.escapeHtml(c.name)} `).join(''); } catch (e) { console.warn('[categories]', e); grid.innerHTML = '

Could not load categories.

'; } } async function loadFeatured() { const grid = document.getElementById('product-grid'); if (!grid) return; grid.innerHTML = '
Loading…
'; try { // pull a page from a random root category to vary the hero strip const tree = await SHOP.fetchJSON('/api/category-tree?root_only=true'); const roots = tree.categories || []; if (!roots.length) { grid.innerHTML = '

No products yet.

'; return; } const pick = roots[Math.floor(Math.random() * roots.length)]; const data = await SHOP.fetchJSON(`/api/category/${pick.id}?limit=12`); const products = data.products || []; grid.innerHTML = products.length ? products.map(SHOP.productCard).join('') : '

Nothing in this category yet.

'; } catch (e) { console.warn('[featured]', e); grid.innerHTML = '

Could not load products.

'; } }