/* ════════════════════════════════════════════════ Halaman Toko Buku — katalog + detail buku ════════════════════════════════════════════════ */ function TokoPage({ navigate }) { const [books, setBooks] = useState(((window.MQA || {}).buku || []).filter(b => b.active !== false)); const [cat, setCat] = useState('Semua'); const [detail, setDetail] = useState(null); useEffect(() => { const b = window.__openBuku; if (b && b.id) { window.__openBuku = null; setTimeout(() => setDetail(b), 120); } }, []); useEffect(() => { api.get('content.php?action=get_section§ion=buku').then(r => { const arr = (r.ok && r.data && Array.isArray(r.data.items)) ? r.data.items : null; if (arr && arr.length) setBooks(arr.filter(b => b.active !== false)); }).catch(() => {}); }, []); const allCats = ['Semua', ...new Set(books.flatMap(b => b.categories || []))]; const list = cat === 'Semua' ? books : books.filter(b => (b.categories || []).includes(cat)); return (