/* ========================================================== YAPPY. — Shop + Product page ========================================================== */ function Shop() { useReveal(); return (
Shop

Set your
status.

Don’t have a prescription?
Consult our doctor for free.
Book now
); } function PDP({ id }) { const p = PRODUCTS[id]; const { add, setCartOpen } = useStore(); const [view, setView] = React.useState(0); const [qty, setQty] = React.useState(1); const [added, setAdded] = React.useState(false); const adm = useAdmin(); const oos = adm.stock[id] === false; React.useEffect(() => { setView(0); setQty(1); }, [id]); if (!p) return ; const views = [ { k: 'Pack', render: () => }, { k: 'Studio', render: () => {`${p.name} }, { k: 'Detail', render: () => {`${p.name} }, { k: 'Back', render: () =>
Back of pack

Approved artwork to be supplied.

}, ]; const addToCart = () => { add(id, qty); setAdded(true); setTimeout(() => setAdded(false), 1500); setCartOpen(true); }; const buyNow = () => { add(id, qty); go('/checkout'); }; const others = SKU_ORDER.filter((k) => k !== id); const dot = p.id === 'dnd' ? 'var(--cream)' : 'var(--signal)'; return (
{views[view].render()}
{views.map((v, i) => ( ))}
Shop/{p.name}.
{PACK.descriptor}
{PACK.count}

{p.line}

setQty(Math.max(1, Math.min(9, q)))} dark={p.onDark} />
Prescription required. Upload it after checkout — we ship once it’s verified.
No prescription? Consult our doctor for free.

{VARIANT_NOTE}

The other statuses
{others.map((k) => { const o = PRODUCTS[k]; return (
{o.pct} Variant*
); })}
{p.name}.
{fmtPrice(priceFor(id).now) || 'Price TBC'}
); } function NotFound() { return (

Nothing here.

Just quiet. Let’s get you back.

Home
); } Object.assign(window, { Shop, PDP, NotFound });