'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 = '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.
'; } }