Catalog

Find your next workshop or template. Save to Fallows to track items you want to revisit.

0 items
`; headerEl.innerHTML = headerHTML; footerEl.innerHTML = footerHTML; function applyTheme(pref) { const root = document.documentElement; if (pref === 'dark') root.classList.add('dark'); else if (pref === 'light') root.classList.remove('dark'); else root.classList.toggle('dark', window.matchMedia('(prefers-color-scheme: dark)').matches); } applyTheme(localStorage.getItem('theme') || 'system'); const h = headerEl; const loginModal = h.querySelector('.js-modal-login'); h.querySelector('.js-open-login')?.addEventListener('click', () => { loginModal.classList.remove('hidden'); loginModal.classList.add('flex'); }); h.querySelector('.js-close-login')?.addEventListener('click', () => { loginModal.classList.add('hidden'); loginModal.classList.remove('flex'); }); const themeModal = h.querySelector('.js-modal-theme'); h.querySelector('.js-open-theme')?.addEventListener('click', () => { themeModal.classList.remove('hidden'); themeModal.classList.add('flex'); }); h.querySelector('.js-close-theme')?.addEventListener('click', () => { themeModal.classList.add('hidden'); themeModal.classList.remove('flex'); }); h.querySelectorAll('.js-choose-theme').forEach(b => b.addEventListener('click', () => { const t = b.getAttribute('data-theme'); localStorage.setItem('theme', t); applyTheme(t); themeModal.classList.add('hidden'); themeModal.classList.remove('flex'); })); h.querySelector('.js-open-menu')?.addEventListener('click', () => { const m = h.querySelector('.js-mobile-nav'); m.classList.toggle('hidden'); }); const f = footerEl; const cookie = f.querySelector('.js-cookie'); if (localStorage.getItem('cookieConsent') !== 'yes') cookie.classList.remove('hidden'); f.querySelector('.js-cookie-accept')?.addEventListener('click', () => { localStorage.setItem('cookieConsent', 'yes'); cookie.classList.add('hidden'); }); })(); const state = { data: [], page: 1, perPage: 9, q: '', cat: '', lvl: '',<|eos|>