Petchi Bloom

The working shelf

Find your next floral study.

Each course is built around a specific studio question, from making a meadow arrangement hold its shape to designing flowers for an intimate table.

Open Fallows
Ask about a learning path
Go to cart
`; document.querySelector('header').innerHTML=headerHTML; document.querySelector('footer').innerHTML=footerHTML; const tailwindScript=document.createElement('script'); tailwindScript.src='https://cdn.tailwindcss.com'; document.head.appendChild(tailwindScript); const state={items:[],filtered:[],page:1,size:6}; const favoritesKey='petchi-favorites',cartKey='petchi-cart'; function initHeaderFooter(){ const banner=document.querySelector('[data-cookie-banner]'); const closeBtn=document.querySelector('[data-cookie-close]'); if(banner&&closeBtn){ if(!localStorage.getItem('petchi-cookie-consent')){banner.classList.remove('hidden');banner.classList.add('flex');} closeBtn.onclick=()=>{localStorage.setItem('petchi-cookie-consent','true');banner.classList.remove('flex');banner.classList.add('hidden');}; } document.querySelectorAll('[data-theme-toggle]').forEach(btn=>btn.onclick=()=>{ document.documentElement.classList.toggle('dark'); localStorage.setItem('petchi-theme',document.documentElement.classList.contains('dark')?'dark':'light'); }); if(localStorage.getItem('petchi-theme')==='dark')document.documentElement.classList.add('dark'); const mobileNav=document.querySelector('[data-mobile-menu]'); const toggleBtn=document.querySelector('[data-menu-toggle]'); if(toggleBtn&&mobileNav)toggleBtn.onclick=()=>mobileNav.classList.toggle('hidden'); document.querySelectorAll('[data-login-open]').forEach(b=>b.onclick=()=>{const m=document.createElement('dialog');m.innerHTML=`

Log in to Petchi Bloom

`;document.body.appendChild(m);m.showModal();m.querySelector('[data-close]').onclick=()=>m.close();}); document.querySelectorAll('[data-register-open]').forEach(b=>b.onclick=()=>{const m=document.createElement('dialog');m.innerHTML=`

Create your account

`;document.body.appendChild(m);m.showModal();m.querySelector('[data-close]').onclick=()=>m.close();}); } fetch('./catalog.json').then(r=>r.json()).then(items=>{state.items=items;populateCategories();render();}).catch(()=>{document.querySelector('[data-course-grid]').innerHTML='

The catalog could not be loaded. Please contact Petchi Bloom.

';}); function populateCategories(){const s=document.querySelector('[data-category]');[...new Set(state.items.map(x=>x.category))].forEach(x=>s.insertAdjacentHTML('beforeend',``));} function render(){const q=(document.querySelector('[data-search]').value||'').toLowerCase(),c=document.querySelector('[data-category]').value;state.filtered=state.items.filter(x=>(c==='all'||x.category===c)&&(`${x.title} ${x.summary} ${x.season}`).toLowerCase().includes(q));const start=(state.page-1)*state.size;document.querySelector('[data-course-grid]').innerHTML=state.filtered.slice(start,start+state.size).map(card).join('');const pages=Math.ceil(state.filtered.length/state.size);document.querySelector('[data-pagination]').innerHTML=Array.from({length:pages},(_,i)=>``).join('');bindCards();} function card(x){const fav=JSON.parse(localStorage.getItem(favoritesKey)||'[]').includes(x.id);return `

${x.category} · ${x.level}

${x.title}

${x.summary}

$${x.price.toFixed(2)} · ${x.duration}