{"product_id":"rechargeable-hot-water-bottles","title":"Rechargeable Hot Water Bottles \u0026 Portable Heat Packs","description":"\u003cdiv class=\"wb23-details\"\u003e\u003cdiv id=\"psc-description-dba74d42c570d975\" class=\"psc-product-description\"\u003e\n\u003ch2 style=\"text-align:center;color:rgb(255,128,0)\"\u003eRechargeable hot water bottles\u003c\/h2\u003e\n\u003cp style=\"text-align:center;color:rgb(38,70,6)\"\u003eThis Rechargeable Hot Water Bottle \u0026amp; Heat Pack heats up rapidly and keeps you cosy for hours!\u003c\/p\u003e\n\u003cp style=\"text-align:center;color:rgb(38,70,6)\"\u003eIt delivers soothing warmth to ease period cramps, back soreness, stiff neck tension, cold feet — ideal for those\u003c\/p\u003e\n\u003cp style=\"text-align:center;color:rgb(38,70,6)\"\u003e cold winter nights curled up on the sofa 🛋️💛\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0780\/5747\/2245\/files\/1_1b378c4e-9719-42e7-90a1-066911dcd2b6-7cbd38d257d9.png?v=1792997365\" alt=\"\"\u003e\u003c\/p\u003e\n\u003ch3 style=\"color:rgb(255,128,0)\"\u003eRechargeable \u0026amp; cordless design — No boiling water, zero mess\u003c\/h3\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0780\/5747\/2245\/files\/2_bcf01958-0be7-419c-a6c5-74af2b44a593-c20148eb7e2f.png?v=1792997388\" alt=\"\"\u003e\u003c\/p\u003e\n\u003ch3 style=\"color:rgb(255,128,0)\"\u003eExplosion-proof with multiple safety protections, use with total peace of mind\u003c\/h3\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0780\/5747\/2245\/files\/3_80cf585f-2bd3-4c3b-9404-b992973b3026-8e76d56694a0.png?v=1792997414\" alt=\"\"\u003e\u003c\/p\u003e\n\u003ch3 style=\"color:rgb(255,128,0)\"\u003eUltra-soft skin-friendly cover, gentle against your body\u003c\/h3\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0780\/5747\/2245\/files\/4_7e937776-4488-4aad-838a-0cae2a2c28ab-d51538ed263c.png?v=1792997428\" alt=\"\"\u003e\u003c\/p\u003e\n\u003ch3 style=\"color:rgb(255,128,0)\"\u003eReusable portable heat pad: great for home, office, travel\u003c\/h3\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0780\/5747\/2245\/files\/5_d7f55369-a05f-45d8-9ed2-ed49b5389152-945c2755210d.png?v=1792997440\" alt=\"\"\u003e\u003c\/p\u003e\n\u003ch3 style=\"color:rgb(255,128,0)\"\u003e Fast heating — instant warmth whenever discomfort hits\u003c\/h3\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0780\/5747\/2245\/files\/6_cdacb71d-a875-4a50-9df2-2d2dcad3a244-d884113910a5.png?v=1792997451\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0780\/5747\/2245\/files\/vs_-7-0f4532ce2da8.png?v=1792997469\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0780\/5747\/2245\/files\/8_65d4a38c-ba7b-44f9-a339-1007e007912b-aab8cc812229.png?v=1792997482\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0780\/5747\/2245\/files\/9_7d42f298-5409-4402-9bbd-6d7dedf2240a-9148b386252e.png?v=1792997499\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0780\/5747\/2245\/files\/Giftsaleuk_Christmas_Gift_Shop_Banner-92c048f7f1d5.png?v=1792997510\" alt=\"\"\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/div\u003e\u003cstyle\u003e.wb26-purchase{width:100%;margin:18px 0}.wb26-heading{text-align:center;letter-spacing:1px}.wb26-tier{border:2px solid #d1bddc;border-radius:12px;margin:12px 0;overflow:hidden}.wb26-tier.is-selected{border-color:#71358c;background:#f1eaf5}.wb26-bar{display:flex;align-items:center;gap:14px;padding:18px;cursor:pointer}.wb26-bar strong{font-size:19px}.wb26-bar small{display:block}.wb26-prices{margin-left:auto;text-align:right;white-space:nowrap}.wb26-prices b{display:block;color:#71358c;font-size:21px}.wb26-prices s{font-size:15px}.wb26-options{padding:0 18px 15px}.wb26-options[hidden]{display:none}.wb26-item{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0}.wb26-item label{flex:1;min-width:100px;font-size:13px}.wb26-item select{display:block;width:100%;padding:9px;border:1px solid #aaa;border-radius:4px;background:white;color:#222}.wb26-error{color:#b42318}.wb26-atc{background:#71358c;color:#fff;margin:18px 0 10px}.wb26-buy{background:white;color:#71358c;border:2px solid #71358c}.wb26-single-quantity input{width:75px;padding:10px}.wb26-product variant-selects,.wb26-product variant-radios,.wb26-product quantity-breaks,.wb26-product [id^=\"sticky-atc-\"]{display:none!important}.wb23-details{overflow-wrap:anywhere}.wb23-details img,.wb23-details video{max-width:100%;height:auto}.wb23-details .animate-item,.wb23-details .animate--hidden{opacity:1!important;visibility:visible!important;transform:none!important}\u003c\/style\u003e\u003cscript\u003e(() =\u003e {\n  const cfg={\"id\": \"15477920301149\", \"options\": [{\"name\": \"Color❤️‍🔥Buy More Save More\", \"values\": [\"🩶Grey\", \"🩷Pink\", \"🤎Brown\", \"💚Green\"]}], \"variants\": [{\"id\": \"67841048903773\", \"price\": 1999, \"compare\": 3999, \"options\": [\"🩶Grey\"], \"imageIndex\": 0}, {\"id\": \"67841048936541\", \"price\": 1999, \"compare\": 3999, \"options\": [\"🩷Pink\"], \"imageIndex\": 1}, {\"id\": \"67841048969309\", \"price\": 1999, \"compare\": 3999, \"options\": [\"🤎Brown\"], \"imageIndex\": 4}, {\"id\": \"67841049002077\", \"price\": 1999, \"compare\": 3999, \"options\": [\"💚Green\"], \"imageIndex\": 2}], \"tiers\": [{\"q\": 1, \"percent\": 0, \"title\": \"Buy 1\", \"selected\": true}, {\"q\": 2, \"percent\": 10, \"title\": \"Buy 2 Get 10% OFF\", \"selected\": false}, {\"q\": 3, \"percent\": 15, \"title\": \"Buy 3 Get 15% OFF\", \"selected\": false}]};\n  if(cfg.options.length===1\u0026\u0026cfg.options[0].name==='Title'\u0026\u0026cfg.options[0].values.length===1\u0026\u0026cfg.options[0].values[0]==='Default Title')cfg.options=[];\n  const original=document.querySelector('product-form.main-product-form');\n  if(!original||original.querySelector('[name=\"product-id\"]')?.value!==cfg.id)return;\n  const esc=s=\u003eString(s).replace(\/[\u0026\u003c\u003e\"']\/g,c=\u003e({'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;','\"':'\u0026quot;',\"'\":'\u0026#39;'}[c]));\n  const money=n=\u003enew Intl.NumberFormat('en-US',{style:'currency',currency:'USD'}).format(n\/100);\n  const host=document.createElement('div');host.className='wb26-purchase';\n  const form=document.createElement('form');form.action='\/cart\/add';form.method='post';\n  host.appendChild(form);original.replaceWith(host);\n  const section=host.closest('[id^=\"MainProduct-\"]')||document;\n  section.querySelectorAll('variant-selects,variant-radios,quantity-breaks,[id^=\"sticky-atc-\"]').forEach(x=\u003ex.hidden=true);\n  let selected=Math.max(0,cfg.tiers.findIndex(x=\u003ex.selected));\n  if(!cfg.tiers.length)cfg.tiers=[{q:1,title:'Quantity',plain:true}];\n  const optionsMarkup=(tier,i)=\u003eArray.from({length:tier.q},(_,j)=\u003e'\u003cdiv class=\"wb26-item\"\u003e\u003cspan\u003eItem '+(j+1)+'\u003c\/span\u003e'+cfg.options.map((o,k)=\u003e'\u003clabel\u003e'+esc(o.name)+'\u003cselect data-item=\"'+j+'\" data-option=\"'+k+'\" aria-label=\"Item '+(j+1)+' '+esc(o.name)+'\"\u003e'+o.values.map(v=\u003e'\u003coption value=\"'+esc(v)+'\"\u003e'+esc(v)+'\u003c\/option\u003e').join('')+'\u003c\/select\u003e\u003c\/label\u003e').join('')+'\u003c\/div\u003e').join('');\n  form.innerHTML=(cfg.tiers[0].plain?'':'\u003ch3 class=\"wb26-heading\"\u003eBUNDLE \u0026amp; SAVE\u003c\/h3\u003e')+cfg.tiers.map((t,i)=\u003e'\u003cdiv class=\"wb26-tier\"\u003e\u003clabel class=\"wb26-bar\"\u003e\u003cinput type=\"radio\" name=\"wb26-tier\" value=\"'+i+'\" '+(i===selected?'checked':'')+'\u003e\u003cspan\u003e\u003cstrong\u003e'+esc(t.title)+'\u003c\/strong\u003e\u003csmall class=\"wb26-saving\"\u003e\u003c\/small\u003e\u003c\/span\u003e\u003cspan class=\"wb26-prices\"\u003e\u003cb\u003e\u003c\/b\u003e\u003cs\u003e\u003c\/s\u003e\u003c\/span\u003e\u003c\/label\u003e\u003cdiv class=\"wb26-options\" '+(i===selected?'':'hidden')+'\u003e'+optionsMarkup(t,i)+'\u003c\/div\u003e\u003c\/div\u003e').join('')+(cfg.tiers[0].plain?'\u003clabel class=\"wb26-single-quantity\"\u003eQuantity \u003cinput type=\"number\" name=\"quantity\" value=\"1\" min=\"1\" max=\"99\"\u003e\u003c\/label\u003e':'')+'\u003cp class=\"wb26-error\" role=\"alert\" hidden\u003e\u003c\/p\u003e\u003cbutton type=\"submit\" class=\"button button--full-width wb26-atc\"\u003eADD TO CART\u003c\/button\u003e\u003cbutton type=\"button\" class=\"button button--full-width wb26-buy\"\u003eBUY IT NOW\u003c\/button\u003e';\n  const tierEls=[...form.querySelectorAll('.wb26-tier')];\n  const initial=cfg.variants.find(v=\u003ev.id===new URLSearchParams(location.search).get('variant'))||cfg.variants[0];\n  form.querySelectorAll('select[data-option]').forEach(s=\u003es.value=initial.options[Number(s.dataset.option)]);\n  function chosen(i){return [...tierEls[i].querySelectorAll('.wb26-item')].map(row=\u003e{const vals=[...row.querySelectorAll('select')].map(x=\u003ex.value);return vals.length?cfg.variants.find(v=\u003ev.options.every((x,k)=\u003ex===vals[k])):cfg.variants[0];});}\n  function update(){tierEls.forEach((el,i)=\u003e{const t=cfg.tiers[i],vs=chosen(i);let base=vs.reduce((n,v)=\u003en+(v?.price||0),0),compare=vs.reduce((n,v)=\u003en+(v?.compare||v?.price||0),0),total=t.total??vs.reduce((n,v)=\u003en+(v?v.price-Math.floor(v.price*(t.percent||0)\/100):0),0);el.querySelector('.wb26-prices b').textContent=money(total);el.querySelector('.wb26-prices s').textContent=compare\u003etotal?money(compare):'';el.querySelector('.wb26-saving').textContent=compare\u003etotal?'You save '+money(compare-total):'';el.classList.toggle('is-selected',i===selected);el.querySelector('.wb26-options').hidden=i!==selected;el.dataset.total=total;});}\n  form.addEventListener('change',e=\u003e{if(e.target.name==='wb26-tier')selected=Number(e.target.value);update();const v=chosen(selected)[Number(e.target.dataset.item)||0];if(v){if(v.imageIndex!==undefined)section.querySelector('[aria-label=\"Load image '+(v.imageIndex+1)+' in gallery view\"]')?.click();const price=section.querySelector('[id^=\"main-price-\"]');price?.querySelectorAll('.main-price').forEach(x=\u003ex.textContent=money(v.price));const compare=price?.querySelector('.main-comapre-price');if(compare)compare.textContent=money(v.compare);price?.classList.toggle('price--on-sale',v.compare\u003ev.price);const badge=price?.querySelector('.badge__percentage-saved');if(badge)badge.textContent=String(Math.round((v.compare-v.price)\/v.compare*100));}});update();\n  let checkout=false;\n  form.querySelector('.wb26-buy').addEventListener('click',()=\u003e{checkout=true;form.requestSubmit();});\n  form.addEventListener('submit',async e=\u003e{e.preventDefault();e.stopImmediatePropagation();const buttons=[...form.querySelectorAll('button')],error=form.querySelector('.wb26-error');if(buttons.some(x=\u003ex.disabled))return;error.hidden=true;const t=cfg.tiers[selected],vs=chosen(selected);if(vs.some(x=\u003e!x)){error.textContent='Please choose an available combination for each item.';error.hidden=false;checkout=false;return;}const q=t.plain?Number(form.elements.quantity.value):1;if(!Number.isInteger(q)||q\u003c1||q\u003e99){error.textContent='Please enter a quantity from 1 to 99.';error.hidden=false;checkout=false;return;}const items=[];vs.forEach(v=\u003e{const row=items.find(x=\u003ex.id===v.id);if(row)row.quantity+=q;else items.push({id:v.id,quantity:q});});buttons.forEach(x=\u003ex.disabled=true);let added=false;try{const cart=document.querySelector('cart-drawer'),sections=cart?.getSectionsToRender?.().map(x=\u003ex.id)||[];const res=await fetch('\/cart\/add.js',{method:'POST',headers:{'Content-Type':'application\/json','Accept':'application\/json'},body:JSON.stringify({items,sections,sections_url:location.pathname})});let result=await res.json();if(!res.ok||result.status)throw new Error(result.description||'Unable to add this selection.');added=true;if(t.code){const r=await fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json','Accept':'application\/json'},body:JSON.stringify({discount:t.code,sections,sections_url:location.pathname})});const updated=await r.json();if(!r.ok)throw new Error('Items added. Please check the bundle discount in your cart before checkout.');result=updated;}if(checkout){location.assign('\/checkout');return;}if(cart?.renderContents\u0026\u0026result.sections){cart.setActiveElement?.(buttons[0]);cart.classList.remove('is-empty');cart.renderContents(result);}else location.assign('\/cart');}catch(failure){error.textContent=(added?'Items are in your cart. ':'')+(failure.message||'Unable to add this selection.');error.hidden=false;}finally{buttons.forEach(x=\u003ex.disabled=false);checkout=false;}});\n  const details=document.querySelector('.wb23-details'),main=document.querySelector('[id^=\"MainProduct-\"]');\n  if(details\u0026\u0026main){const full=document.createElement('div');full.className='page-width wb26-full-details';main.after(full);full.appendChild(details);}\n  document.body.classList.add('wb26-product');host.dataset.ready='true';\n})();\n\u003c\/script\u003e","brand":"Lumiieren","offers":[{"title":"🩶Grey","offer_id":67841048903773,"sku":"ZWP2610263616-热水袋-熊头款【石墨灰】","price":19.99,"currency_code":"USD","in_stock":true},{"title":"🩷Pink","offer_id":67841048936541,"sku":"ZWP2610263616-热水袋-熊头款【少女粉】","price":19.99,"currency_code":"USD","in_stock":true},{"title":"🤎Brown","offer_id":67841048969309,"sku":"ZWP2610263616-热水袋-熊头款【绅士棕】","price":19.99,"currency_code":"USD","in_stock":true},{"title":"💚Green","offer_id":67841049002077,"sku":"ZWP2610263616-热水袋-熊头款【珊瑚绿】","price":19.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0683\/0748\/4765\/files\/pt-image-e0b9d8834899.png?v=1793003159","url":"https:\/\/www.lumiieren.com\/products\/rechargeable-hot-water-bottles","provider":"Lumiieren","version":"1.0","type":"link"}