{"product_id":"build-your-own-gummy-lab-bundle-mix-moulds","title":"Build Your Own Gummy Lab Bundle – Mix + Moulds","description":"\u003csection id=\"gummy-lab\" class=\"ll-gummy-lab\" aria-labelledby=\"ll-gummy-lab-title\"\u003e\n  \u003cdiv class=\"ll-gummy-lab__head\"\u003e\n    \u003cp class=\"ll-gummy-lab__eyebrow\"\u003eMix \u0026amp; match gummy deals\u003c\/p\u003e\n    \u003ch2 id=\"ll-gummy-lab-title\"\u003eBuild your own Gummy Lab\u003c\/h2\u003e\n    \u003cp\u003ePick every mix flavour and every mould design yourself. Repeat your favourites or try a different combination for each batch.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cform data-lab-form\u003e\n    \u003cfieldset class=\"ll-gummy-lab__tiers\"\u003e\n      \u003clegend\u003eChoose your bundle size\u003c\/legend\u003e\n      \u003clabel\u003e\u003cinput type=\"radio\" name=\"lab-size\" value=\"1\" checked\u003e\u003cspan\u003e\u003cb\u003eStarter\u003c\/b\u003e\u003cstrong\u003e$39.99\u003c\/strong\u003e\u003csmall\u003e1 mix + 1 tray\u003c\/small\u003e\u003csmall\u003eSave $6.00\u003c\/small\u003e\u003c\/span\u003e\u003c\/label\u003e\n      \u003clabel\u003e\u003cinput type=\"radio\" name=\"lab-size\" value=\"2\"\u003e\u003cspan\u003e\u003cb\u003eDouble\u003c\/b\u003e\u003cstrong\u003e$69.98\u003c\/strong\u003e\u003csmall\u003e2 mixes + 2 trays\u003c\/small\u003e\u003csmall\u003eSave $22.00\u003c\/small\u003e\u003c\/span\u003e\u003c\/label\u003e\n      \u003clabel\u003e\u003cinput type=\"radio\" name=\"lab-size\" value=\"3\"\u003e\u003cspan\u003e\u003cb\u003eTriple · Best value\u003c\/b\u003e\u003cstrong\u003e$99.99\u003c\/strong\u003e\u003csmall\u003e3 mixes + 3 trays\u003c\/small\u003e\u003csmall\u003eSave $37.98\u003c\/small\u003e\u003c\/span\u003e\u003c\/label\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv data-lab-picks class=\"ll-gummy-lab__picks\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"ll-gummy-lab__summary\"\u003e\n      \u003cdiv\u003e\n\u003cspan\u003eBundle total\u003c\/span\u003e \u003cstrong data-lab-total\u003e$39.99 AUD\u003c\/strong\u003e\u003csmall\u003eAUD, before shipping. Savings apply automatically to eligible mixes and trays in your cart and at checkout. One Gummy Lab offer per order; cannot be combined with other discounts.\u003c\/small\u003e\n\u003c\/div\u003e\n      \u003cbutton type=\"submit\" data-lab-submit disabled\u003eAdd my bundle to cart\u003c\/button\u003e\n    \u003c\/div\u003e\n    \u003cp data-lab-status role=\"status\" aria-live=\"polite\"\u003e\u003c\/p\u003e\n  \u003c\/form\u003e\n  \u003cnoscript\u003e\u003cp\u003eEnable JavaScript to choose a bundle, or shop the individual products: \u003ca href=\"\/products\/diy-gummy-mix-90g-2\"\u003eDIY Gummy Mix 90g - LeafLock\u003c\/a\u003e · \u003ca href=\"\/products\/leaflock-gummy-mould-tray-70-cavities-3-ml\"\u003eGummy Mould Tray – 70 Cavities × 3 mL\u003c\/a\u003e\u003c\/p\u003e\u003c\/noscript\u003e\n  \u003cscript type=\"application\/json\" data-lab-labels\u003e{\"mix\":\"Mix __NUMBER__ flavour\",\"tray\":\"Tray __NUMBER__ design\",\"choose\":\"Choose an option\",\"soldOut\":\"Sold out\",\"stockError\":\"One of your choices has insufficient stock. Choose another option or a smaller bundle.\",\"adding\":\"Adding your bundle…\",\"add\":\"Add my bundle to cart\",\"error\":\"Your bundle could not be added. Check stock and try again.\"}\u003c\/script\u003e\n  \u003cscript type=\"application\/json\" data-lab-products\u003e{\"mix\":[{\"id\":45054404067443,\"title\":\"Blue Raspberry\",\"price\":2999,\"available\":true,\"quantity\":278,\"tracked\":true,\"continueSelling\":false,\"image\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/3232\/3955\/files\/LeafLockGummyMix1.png?v=1780014860\"},{\"id\":45133570670707,\"title\":\"Grape\",\"price\":2999,\"available\":true,\"quantity\":280,\"tracked\":true,\"continueSelling\":false,\"image\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/3232\/3955\/files\/LeafLockGummyMix1.png?v=1780014860\"},{\"id\":45133570703475,\"title\":\"Strawberry\",\"price\":2999,\"available\":true,\"quantity\":279,\"tracked\":true,\"continueSelling\":false,\"image\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/3232\/3955\/files\/LeafLockGummyMix1.png?v=1780014860\"},{\"id\":45133570736243,\"title\":\"Create your flavour\",\"price\":2999,\"available\":true,\"quantity\":280,\"tracked\":true,\"continueSelling\":false,\"image\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/3232\/3955\/files\/LeafLockGummyMix1.png?v=1780014860\"}],\"tray\":[{\"id\":66845288300659,\"title\":\"Leaf\",\"price\":1600,\"available\":true,\"quantity\":40,\"tracked\":true,\"continueSelling\":false,\"image\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/3232\/3955\/files\/LEAF70X3MLLLGUMMYTRAY.png?v=1791866629\"},{\"id\":66845288333427,\"title\":\"Owl\",\"price\":1600,\"available\":true,\"quantity\":20,\"tracked\":true,\"continueSelling\":false,\"image\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/3232\/3955\/files\/OWL70X3MLLLGUMMYTRAY.png?v=1791866628\"},{\"id\":66845288366195,\"title\":\"Ghost\",\"price\":1600,\"available\":true,\"quantity\":20,\"tracked\":true,\"continueSelling\":false,\"image\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0679\/3232\/3955\/files\/GHOST70X3MLLLGUMMYTRAY.png?v=1791866628\"}]}\u003c\/script\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e\nbody:has(#gummy-lab) [id^='product-info-'] \u003e .hdt-product__variant-picker,body:has(#gummy-lab) [id^='product-info-'] \u003e .hdt-product__buy-button,body:has(#gummy-lab) [id^='product-info-'] \u003e .hdt-product-info__item:has([id^='Quantity-Form-']),body:has(#gummy-lab) .leaflock-smart-bundle,body:has(#gummy-lab) [id^='form-product-sticky']{display:none!important}\n.ll-gummy-lab__pair{grid-template-columns:1fr}.ll-gummy-lab{padding:20px;margin:20px 0}.ll-gummy-lab__head h2{font-size:26px}.ll-gummy-lab__summary{flex-direction:column;align-items:stretch}\n\n.ll-gummy-lab{max-width:1300px;margin:24px auto 48px;padding:28px;border:1px solid #8fbd58;border-radius:16px;background:#121713;color:#f5f5ef;scroll-margin-top:100px}.ll-gummy-lab__head{max-width:820px;margin-bottom:24px}.ll-gummy-lab__eyebrow{color:#b6e36a;font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.ll-gummy-lab h2{font-size:clamp(26px,4vw,38px);margin:8px 0 12px;color:inherit}.ll-gummy-lab p{line-height:1.55}.ll-gummy-lab fieldset{padding:0;border:0;margin:0 0 24px}.ll-gummy-lab legend{font-weight:700;margin-bottom:12px}.ll-gummy-lab__tiers{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.ll-gummy-lab__tiers label{position:relative;cursor:pointer}.ll-gummy-lab__tiers input{position:absolute;top:14px;right:14px;accent-color:#b6e36a}.ll-gummy-lab__tiers label\u003espan{display:flex;height:100%;box-sizing:border-box;flex-direction:column;gap:6px;border:1px solid #4b5945;border-radius:12px;padding:18px 30px 18px 16px}.ll-gummy-lab__tiers input:checked+span{border-color:#b6e36a;background:#263421;box-shadow:inset 0 0 0 1px #b6e36a}.ll-gummy-lab__tiers strong{font-size:25px;color:#b6e36a}.ll-gummy-lab__tiers small{font-size:13px}.ll-gummy-lab__picks{display:grid;gap:16px}.ll-gummy-lab__pair{display:grid;grid-template-columns:1fr 1fr;gap:16px;padding:18px;border:1px solid #3c4b37;border-radius:12px}.ll-gummy-lab__pick{display:grid;grid-template-columns:64px 1fr;align-items:center;gap:12px}.ll-gummy-lab__pick img{width:64px;height:64px;object-fit:contain;border-radius:6px;background:#fff}.ll-gummy-lab__pick label{display:block;font-size:14px;margin-bottom:7px;font-weight:600}.ll-gummy-lab select{width:100%;min-height:46px;background:#1d251b;color:#fff;border:1px solid #72866a;border-radius:6px;padding:10px}.ll-gummy-lab select:focus-visible,.ll-gummy-lab button:focus-visible,.ll-gummy-lab input:focus-visible+span{outline:3px solid #b6e36a;outline-offset:3px}.ll-gummy-lab__summary{display:flex;justify-content:space-between;gap:20px;align-items:center;margin-top:24px}.ll-gummy-lab__summary strong{display:block;font-size:28px;color:#b6e36a}.ll-gummy-lab__summary small{display:block;max-width:620px;font-size:12px;margin-top:6px}.ll-gummy-lab button{background:#b6e36a;color:#111;border:0;border-radius:8px;padding:15px 28px;min-height:50px;font-weight:700;cursor:pointer}.ll-gummy-lab button:disabled{opacity:.55;cursor:not-allowed}.ll-gummy-lab [data-lab-status]{margin:12px 0 0;color:#f2d492}@media(max-width:749px){.ll-gummy-lab{margin:16px 0 32px;padding:18px}.ll-gummy-lab__tiers{gap:7px}.ll-gummy-lab__tiers label\u003espan{padding:30px 10px 12px}.ll-gummy-lab__tiers strong{font-size:21px}.ll-gummy-lab__tiers small{font-size:11px}.ll-gummy-lab__pair{grid-template-columns:1fr;padding:12px}.ll-gummy-lab__summary{flex-direction:column;align-items:stretch}.ll-gummy-lab__summary button{width:100%}}\n\n.ll-gummy-lab__pair{grid-template-columns:1fr}.ll-gummy-lab{padding:20px;margin:20px 0}.ll-gummy-lab__head h2{font-size:26px}.ll-gummy-lab__summary{flex-direction:column;align-items:stretch}\n\u003c\/style\u003e\n\u003cscript\u003e\n(async function(){\n  const root=document.getElementById('gummy-lab');\n  if(!root||root.dataset.ready)return;\n  root.dataset.ready='true';\n  const info=document.querySelector('[id^=\"product-info-\"]');\n  if(info){const price=info.querySelector('.hdt-product__price');if(price)price.after(root);else info.append(root);}\n\n  const products=JSON.parse(root.querySelector('[data-lab-products]').textContent);\n  try {\n    const basePath=(window.Shopify\u0026\u0026window.Shopify.routes\u0026\u0026window.Shopify.routes.root)||'\/';\n    const handles=['diy-gummy-mix-90g-2','leaflock-gummy-mould-tray-70-cavities-3-ml'];\n    const fresh=await Promise.all(handles.map(async handle=\u003e{const r=await fetch(basePath+'products\/'+handle+'.js',{headers:{Accept:'application\/json'}});if(!r.ok)throw Error('Product availability could not be loaded. Please refresh this page.');return r.json();}));\n    for(const [index,kind] of ['mix','tray'].entries())for(const v of products[kind]){const current=fresh[index].variants.find(item=\u003eitem.id===v.id);v.available=!!current\u0026\u0026current.available;v.tracked=false;if(current\u0026\u0026current.price!==v.price)throw Error('These bundle prices are currently unavailable. Please shop the individual products.');}\n    if(window.Shopify\u0026\u0026window.Shopify.currency\u0026\u0026window.Shopify.currency.active!=='AUD')throw Error('Please select AUD to shop Gummy Lab bundle deals.');\n  } catch(error) {root.querySelector('[data-lab-status]').textContent=error.message;return;}\n  const labels=JSON.parse(root.querySelector('[data-lab-labels]').textContent);\n  const form=root.querySelector('[data-lab-form]'), picks=root.querySelector('[data-lab-picks]'), submit=root.querySelector('[data-lab-submit]'), status=root.querySelector('[data-lab-status]');\n  const prices={1:3999,2:6998,3:9999};\n  const money=new Intl.NumberFormat('en-AU',{style:'currency',currency:'AUD'});\n  let busy=false;\n  function size(){return Number(form.querySelector('[name=\"lab-size\"]:checked').value);}\n  function selected(){return Array.from(picks.querySelectorAll('select')).map(s=\u003eproducts[s.dataset.kind].find(v=\u003eString(v.id)===s.value));}\n  function valid(){\n    const choices=selected();\n    if(choices.length!==size()*2||choices.some(v=\u003e!v||!v.available))return false;\n    const counts=new Map();\n    for(const v of choices)counts.set(v.id,(counts.get(v.id)||0)+1);\n    return choices.every(v=\u003e!v.tracked||v.continueSelling||counts.get(v.id)\u003c=v.quantity);\n  }\n  function update(){submit.disabled=busy||!valid();root.querySelector('[data-lab-total]').textContent=money.format(prices[size()]\/100)+' AUD';}\n  function render(){\n    const previous=Array.from(picks.querySelectorAll('select')).map(s=\u003es.value);\n    picks.replaceChildren();\n    for(let i=1;i\u003c=size();i++){\n      const pair=document.createElement('div');pair.className='ll-gummy-lab__pair';\n      for(const kind of ['mix','tray']){\n        const wrap=document.createElement('div');wrap.className='ll-gummy-lab__pick';\n        const img=document.createElement('img');img.src=products[kind][0].image;img.alt='';img.width=64;img.height=64;\n        const controls=document.createElement('div'),label=document.createElement('label'),select=document.createElement('select');\n        select.id='lab-'+kind+'-'+i;select.dataset.kind=kind;select.required=true;label.htmlFor=select.id;label.textContent=labels[kind].replace('__NUMBER__',i);\n        select.add(new Option(labels.choose,''));\n        for(const v of products[kind]){const option=new Option(v.title+(v.available?'':' — '+labels.soldOut),String(v.id));option.disabled=!v.available;select.add(option);}\n        const prev=previous[(i-1)*2+(kind==='tray'?1:0)];if(prev\u0026\u0026products[kind].some(v=\u003eString(v.id)===prev\u0026\u0026v.available))select.value=prev;\n        const refresh=()=\u003e{const v=products[kind].find(v=\u003eString(v.id)===select.value);img.src=(v||products[kind][0]).image;status.textContent='';update();};\n        select.addEventListener('change',refresh);controls.append(label,select);wrap.append(img,controls);pair.append(wrap);refresh();\n      }\n      picks.append(pair);\n    }\n    status.textContent='';update();\n  }\n  form.querySelectorAll('[name=\"lab-size\"]').forEach(r=\u003er.addEventListener('change',()=\u003e{render();if(info){const price=info.querySelector('.hdt-product__price');if(price)price.textContent=money.format(prices[size()]\/100);}}));\n  form.addEventListener('submit',async event=\u003e{\n    event.preventDefault();if(busy||!form.reportValidity())return;if(!valid()){status.textContent=labels.stockError;return;}\n    busy=true;update();submit.textContent=labels.adding;status.textContent='';\n    const quantities=new Map();for(const v of selected())quantities.set(v.id,(quantities.get(v.id)||0)+1);\n    const items=Array.from(quantities,([id,quantity])=\u003e({id,quantity}));\n    const shopRoot=(window.Shopify\u0026\u0026window.Shopify.routes\u0026\u0026window.Shopify.routes.root)||'\/';\n    try{\n      const response=await fetch(shopRoot+'cart\/add.js',{method:'POST',headers:{'Content-Type':'application\/json','Accept':'application\/json'},body:JSON.stringify({items})});\n      const result=await response.json();if(!response.ok)throw new Error(result.description||labels.error);\n      window.location.assign(shopRoot+'cart');\n    }catch(error){status.textContent=error.message||labels.error;busy=false;submit.textContent=labels.add;update();}\n  });\n  render();\n})();\n\u003c\/script\u003e","brand":"LeafLock","offers":[{"title":"Starter – 1 Mix + 1 Tray","offer_id":66940538486899,"sku":"LL-GLAB-STARTER","price":39.99,"currency_code":"AUD","in_stock":true},{"title":"Double – 2 Mixes + 2 Trays","offer_id":66940538519667,"sku":"LL-GLAB-DOUBLE","price":69.98,"currency_code":"AUD","in_stock":true},{"title":"Triple – 3 Mixes + 3 Trays","offer_id":66940538552435,"sku":"LL-GLAB-TRIPLE","price":99.99,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0679\/3232\/3955\/files\/LeafLockGummyMix1_54c36ff5-a84f-4610-931e-35ab6352a9c3.png?v=1792457082","url":"https:\/\/www.leaflock.com.au\/products\/build-your-own-gummy-lab-bundle-mix-moulds","provider":"LeafLock","version":"1.0","type":"link"}