{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/tb-m-pdp.js?x=1794560347181"],
  "sourcesContent": ["/* Toybox product page and phone product cards (sections/tb-product, sections/tb-pcard, snippets/tb-pdp-phone).\n   Works per product: on the product page, and inside each card of the card viewer (assets/tb-m-pcard.js).\n   - Back (returns to the previous page when it was on this store), Share (share sheet, or copies the link),\n     View details (scrolls to the facts; in a card it also makes the card full screen).\n   - Keeps each sticky bar's variant, price, MRP, % off, stock limit and button in step with its variant picker.\n   - Gift wrap ticked: the bar's Add goes through that product's main form so the wrap and message are added too.\n     Otherwise the bar's Add is a quick add handled by assets/tb-m-shop.js (toast, then \"\u2212 1 +\").\n   - Product links on a phone open as a card over the page, with the rest of the category to swipe through.\n   window.TbPdp.init(root) wires a newly inserted card. */\n(() => {\n  if (window.TbPdp) return;\n  const $ = (s, r = document) => r.querySelector(s);\n  const reduce = () => window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  const money = (c) => '\u20B9' + (c / 100).toLocaleString('en-IN', { minimumFractionDigits: c % 100 ? 2 : 0, maximumFractionDigits: 2 });\n  const scope = (el) => el.closest('[data-pcard-body]') || el.closest('.tb-pv__card')?.querySelector('[data-pcard-body]') || el.closest('.tb-pdp') || document;\n  let toastT;\n  const toast = (msg) => {\n    let t = $('.tb-toast');\n    if (!t) { t = document.createElement('div'); t.className = 'tb-toast'; t.setAttribute('role', 'status'); document.body.appendChild(t); }\n    t.textContent = msg;\n    t.hidden = false;\n    clearTimeout(toastT);\n    toastT = setTimeout(() => { t.hidden = true; }, 1500);\n  };\n\n  document.addEventListener('click', (e) => {\n    const back = e.target.closest('[data-pdp-back]');\n    if (back) {\n      let same = false;\n      try { same = !!document.referrer && new URL(document.referrer).origin === location.origin; } catch (err) {}\n      if (same && history.length > 1) { e.preventDefault(); history.back(); }\n      return;\n    }\n    const share = e.target.closest('[data-pdp-share]');\n    if (share) {\n      e.preventDefault();\n      const root = scope(share);\n      const path = root.dataset?.url || location.pathname;\n      const url = location.origin + path;\n      const title = root.dataset?.title || $('.tb-buy__title', root === document ? document : root)?.textContent.trim() || document.title;\n      if (navigator.share) navigator.share({ title, url }).catch(() => {});\n      else if (navigator.clipboard) navigator.clipboard.writeText(url).then(() => toast('Link copied'), () => {});\n      return;\n    }\n    const det = e.target.closest('[data-pdp-details]');\n    if (det) {\n      const root = scope(det);\n      const t = $('.tb-facts', root) || $('.tb-details', root);\n      if (!t) return;\n      const card = det.closest('.tb-pv__scroll');\n      if (card) {\n        card.closest('.tb-pv')?.classList.add('is-full');\n        requestAnimationFrame(() => card.scrollTo({ top: t.offsetTop - 60, behavior: reduce() ? 'auto' : 'smooth' }));\n        return;\n      }\n      const head = parseFloat(getComputedStyle(document.body).getPropertyValue('--header-height')) || 64;\n      window.scrollTo({ top: t.getBoundingClientRect().top + window.scrollY - head - 12, behavior: reduce() ? 'auto' : 'smooth' });\n    }\n  });\n\n  // Gift wrap ticked: send the bar's Add through the main form (runs before tb-m-shop.js, which loads later).\n  document.addEventListener('submit', (e) => {\n    const f = e.target;\n    if (!f || !f.closest || !f.closest('.tb-pbar')) return;\n    const host = $('tb-product-form', scope(f));\n    const gift = host?.querySelector('[data-gift]');\n    const box = host?.querySelector('.tb-gift');\n    if (gift && gift.checked && box && !box.hidden) {\n      e.preventDefault();\n      e.stopImmediatePropagation();\n      const main = host.querySelector('form');\n      if (main?.requestSubmit) main.requestSubmit(); else main?.dispatchEvent(new Event('submit', { cancelable: true }));\n    }\n  }, true);\n\n  const init = (root) => {\n    const bar = $('[data-pbar]', root);\n    const host = $('tb-product-form', root);\n    const sel = host?.querySelector('[data-variant-select]');\n    if (!bar || !sel || sel.dataset.tbBar) return;\n    sel.dataset.tbBar = '1';\n    let variants = [];\n    try { variants = JSON.parse(host.querySelector('[data-variants]')?.textContent || '[]'); } catch (err) {}\n    sel.addEventListener('change', () => {\n      const v = variants.find((x) => String(x.id) === String(sel.value));\n      if (!v) return;\n      bar.querySelector('[data-pbar-id]').value = v.id;\n      bar.querySelector('[data-pbar-price]').textContent = money(v.price);\n      const deal = !!(v.compare_at_price && v.compare_at_price > v.price);\n      const mrp = bar.querySelector('[data-pbar-mrp]');\n      const off = bar.querySelector('[data-pbar-off]');\n      mrp.hidden = !deal;\n      off.hidden = !deal;\n      if (deal) {\n        mrp.querySelector('s').textContent = money(v.compare_at_price);\n        off.textContent = Math.floor((v.compare_at_price - v.price) * 100 / v.compare_at_price) + '% off';\n      }\n      const btn = bar.querySelector('.tb-pbar__btn');\n      btn.disabled = !v.available;\n      btn.textContent = v.available ? btn.dataset.label : 'Sold out';\n      const add = bar.querySelector('tb-add-to-cart');\n      if (v.inventory_management === 'shopify' && v.inventory_policy === 'deny' && typeof v.inventory_quantity === 'number') add.dataset.max = String(Math.max(0, v.inventory_quantity));\n      else delete add.dataset.max;\n      add.querySelector('.tb-step')?.remove();\n      add.classList.remove('has-qty');\n      document.dispatchEvent(new CustomEvent('tb:cards-added'));\n    });\n  };\n  const phone = window.matchMedia('(max-width: 749px)');\n\n  /* ---------- Product links on a phone open as a card (assets/tb-m-pcard.js) ----------\n     sections/tb-product hides the page (html.tb-pv-direct) before it paints; here the card opens over it, the\n     rest of the category is added around it, and closing goes to the category. ?full=1 shows the page. */\n  const pdpDirect = async () => {\n    const html = document.documentElement;\n    if (!html.classList.contains('tb-pv-direct')) return;\n    const pdp = document.querySelector('main .tb-pdp');\n    if (!phone.matches || !pdp || !window.TbPv) { html.classList.remove('tb-pv-direct'); return; }\n    const back = pdp.querySelector('[data-pdp-back]');\n    const closeTo = back ? back.href : '/collections/all';\n    const here = location.pathname.replace(/^.*(\\/products\\/[^/?#]+).*$/, '$1');\n    const title = pdp.querySelector('.tb-buy__title')?.textContent.trim() || '';\n    window.TbPv.open([{ url: here, title }], 0, { push: false, closeTo });\n    try {\n      const col = new URL(closeTo, location.href).pathname.replace(/\\/$/, '');\n      const r = await fetch(col + '/products.json?limit=60', { credentials: 'same-origin' });\n      const j = await r.json();\n      const list = (j.products || []).map((p) => ({ url: '/products/' + p.handle, title: p.title }));\n      let at = list.findIndex((x) => x.url === here);\n      if (at < 0) { list.unshift({ url: here, title }); at = 0; }\n      window.TbPv.setItems(list, at, 'Swipe sideways for more toys like this');\n    } catch (err) {}\n  };\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', pdpDirect); else pdpDirect();\n\n  window.TbPdp = { init };\n  const start = () => document.querySelectorAll('.tb-pdp').forEach(init);\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start); else start();\n})();"],
  "mappings": "CASC,IAAM,CACL,GAAI,OAAO,MAAO,OAClB,MAAM,EAAI,CAAC,EAAG,EAAI,WAAa,EAAE,cAAc,CAAC,EAC1C,OAAS,IAAM,OAAO,WAAW,kCAAkC,EAAE,QACrE,MAAS,GAAM,UAAO,EAAI,KAAK,eAAe,QAAS,CAAE,sBAAuB,EAAI,IAAM,EAAI,EAAG,sBAAuB,CAAE,CAAC,EAC3H,MAAS,IAAO,GAAG,QAAQ,mBAAmB,GAAK,GAAG,QAAQ,cAAc,GAAG,cAAc,mBAAmB,GAAK,GAAG,QAAQ,SAAS,GAAK,SACpJ,IAAI,OACJ,MAAM,MAAS,KAAQ,CACrB,IAAI,EAAI,EAAE,WAAW,EAChB,IAAK,EAAI,SAAS,cAAc,KAAK,EAAG,EAAE,UAAY,WAAY,EAAE,aAAa,OAAQ,QAAQ,EAAG,SAAS,KAAK,YAAY,CAAC,GACpI,EAAE,YAAc,IAChB,EAAE,OAAS,GACX,aAAa,MAAM,EACnB,OAAS,WAAW,IAAM,CAAE,EAAE,OAAS,EAAM,EAAG,IAAI,CACtD,EAEA,SAAS,iBAAiB,QAAU,GAAM,CAExC,GADa,EAAE,OAAO,QAAQ,iBAAiB,EACrC,CACR,IAAI,KAAO,GACX,GAAI,CAAE,KAAO,CAAC,CAAC,SAAS,UAAY,IAAI,IAAI,SAAS,QAAQ,EAAE,SAAW,SAAS,MAAQ,MAAc,CAAC,CACtG,MAAQ,QAAQ,OAAS,IAAK,EAAE,eAAe,EAAG,QAAQ,KAAK,GACnE,MACF,CACA,MAAM,MAAQ,EAAE,OAAO,QAAQ,kBAAkB,EACjD,GAAI,MAAO,CACT,EAAE,eAAe,EACjB,MAAM,KAAO,MAAM,KAAK,EAClB,KAAO,KAAK,SAAS,KAAO,SAAS,SACrC,IAAM,SAAS,OAAS,KACxB,MAAQ,KAAK,SAAS,OAAS,EAAE,iBAAkB,OAAS,SAAW,SAAW,IAAI,GAAG,YAAY,KAAK,GAAK,SAAS,MAC1H,UAAU,MAAO,UAAU,MAAM,CAAE,MAAO,GAAI,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,EAC1D,UAAU,WAAW,UAAU,UAAU,UAAU,GAAG,EAAE,KAAK,IAAM,MAAM,aAAa,EAAG,IAAM,CAAC,CAAC,EAC1G,MACF,CACA,MAAM,IAAM,EAAE,OAAO,QAAQ,oBAAoB,EACjD,GAAI,IAAK,CACP,MAAM,KAAO,MAAM,GAAG,EAChB,EAAI,EAAE,YAAa,IAAI,GAAK,EAAE,cAAe,IAAI,EACvD,GAAI,CAAC,EAAG,OACR,MAAM,KAAO,IAAI,QAAQ,gBAAgB,EACzC,GAAI,KAAM,CACR,KAAK,QAAQ,QAAQ,GAAG,UAAU,IAAI,SAAS,EAC/C,sBAAsB,IAAM,KAAK,SAAS,CAAE,IAAK,EAAE,UAAY,GAAI,SAAU,OAAO,EAAI,OAAS,QAAS,CAAC,CAAC,EAC5G,MACF,CACA,MAAM,KAAO,WAAW,iBAAiB,SAAS,IAAI,EAAE,iBAAiB,iBAAiB,CAAC,GAAK,GAChG,OAAO,SAAS,CAAE,IAAK,EAAE,sBAAsB,EAAE,IAAM,OAAO,QAAU,KAAO,GAAI,SAAU,OAAO,EAAI,OAAS,QAAS,CAAC,CAC7H,CACF,CAAC,EAGD,SAAS,iBAAiB,SAAW,GAAM,CACzC,MAAM,EAAI,EAAE,OACZ,GAAI,CAAC,GAAK,CAAC,EAAE,SAAW,CAAC,EAAE,QAAQ,UAAU,EAAG,OAChD,MAAM,KAAO,EAAE,kBAAmB,MAAM,CAAC,CAAC,EACpC,KAAO,MAAM,cAAc,aAAa,EACxC,IAAM,MAAM,cAAc,UAAU,EAC1C,GAAI,MAAQ,KAAK,SAAW,KAAO,CAAC,IAAI,OAAQ,CAC9C,EAAE,eAAe,EACjB,EAAE,yBAAyB,EAC3B,MAAM,KAAO,KAAK,cAAc,MAAM,EAClC,MAAM,cAAe,KAAK,cAAc,EAAQ,MAAM,cAAc,IAAI,MAAM,SAAU,CAAE,WAAY,EAAK,CAAC,CAAC,CACnH,CACF,EAAG,EAAI,EAEP,MAAM,KAAQ,MAAS,CACrB,MAAM,IAAM,EAAE,cAAe,IAAI,EAC3B,KAAO,EAAE,kBAAmB,IAAI,EAChC,IAAM,MAAM,cAAc,uBAAuB,EACvD,GAAI,CAAC,KAAO,CAAC,KAAO,IAAI,QAAQ,MAAO,OACvC,IAAI,QAAQ,MAAQ,IACpB,IAAI,SAAW,CAAC,EAChB,GAAI,CAAE,SAAW,KAAK,MAAM,KAAK,cAAc,iBAAiB,GAAG,aAAe,IAAI,CAAG,MAAc,CAAC,CACxG,IAAI,iBAAiB,SAAU,IAAM,CACnC,MAAM,EAAI,SAAS,KAAM,GAAM,OAAO,EAAE,EAAE,IAAM,OAAO,IAAI,KAAK,CAAC,EACjE,GAAI,CAAC,EAAG,OACR,IAAI,cAAc,gBAAgB,EAAE,MAAQ,EAAE,GAC9C,IAAI,cAAc,mBAAmB,EAAE,YAAc,MAAM,EAAE,KAAK,EAClE,MAAM,KAAO,CAAC,EAAE,EAAE,kBAAoB,EAAE,iBAAmB,EAAE,OACvD,IAAM,IAAI,cAAc,iBAAiB,EACzC,IAAM,IAAI,cAAc,iBAAiB,EAC/C,IAAI,OAAS,CAAC,KACd,IAAI,OAAS,CAAC,KACV,OACF,IAAI,cAAc,GAAG,EAAE,YAAc,MAAM,EAAE,gBAAgB,EAC7D,IAAI,YAAc,KAAK,OAAO,EAAE,iBAAmB,EAAE,OAAS,IAAM,EAAE,gBAAgB,EAAI,SAE5F,MAAM,IAAM,IAAI,cAAc,eAAe,EAC7C,IAAI,SAAW,CAAC,EAAE,UAClB,IAAI,YAAc,EAAE,UAAY,IAAI,QAAQ,MAAQ,WACpD,MAAM,IAAM,IAAI,cAAc,gBAAgB,EAC1C,EAAE,uBAAyB,WAAa,EAAE,mBAAqB,QAAU,OAAO,EAAE,oBAAuB,SAAU,IAAI,QAAQ,IAAM,OAAO,KAAK,IAAI,EAAG,EAAE,kBAAkB,CAAC,EAC5K,OAAO,IAAI,QAAQ,IACxB,IAAI,cAAc,UAAU,GAAG,OAAO,EACtC,IAAI,UAAU,OAAO,SAAS,EAC9B,SAAS,cAAc,IAAI,YAAY,gBAAgB,CAAC,CAC1D,CAAC,CACH,EACM,MAAQ,OAAO,WAAW,oBAAoB,EAK9C,UAAY,SAAY,CAC5B,MAAM,KAAO,SAAS,gBACtB,GAAI,CAAC,KAAK,UAAU,SAAS,cAAc,EAAG,OAC9C,MAAM,IAAM,SAAS,cAAc,cAAc,EACjD,GAAI,CAAC,MAAM,SAAW,CAAC,KAAO,CAAC,OAAO,KAAM,CAAE,KAAK,UAAU,OAAO,cAAc,EAAG,MAAQ,CAC7F,MAAM,KAAO,IAAI,cAAc,iBAAiB,EAC1C,QAAU,KAAO,KAAK,KAAO,mBAC7B,KAAO,SAAS,SAAS,QAAQ,8BAA+B,IAAI,EACpE,MAAQ,IAAI,cAAc,gBAAgB,GAAG,YAAY,KAAK,GAAK,GACzE,OAAO,KAAK,KAAK,CAAC,CAAE,IAAK,KAAM,KAAM,CAAC,EAAG,EAAG,CAAE,KAAM,GAAO,OAAQ,CAAC,EACpE,GAAI,CACF,MAAM,IAAM,IAAI,IAAI,QAAS,SAAS,IAAI,EAAE,SAAS,QAAQ,MAAO,EAAE,EAGhE,OADI,MADA,MAAM,MAAM,IAAM,0BAA2B,CAAE,YAAa,aAAc,CAAC,GACnE,KAAK,GACP,UAAY,CAAC,GAAG,IAAK,IAAO,CAAE,IAAK,aAAe,EAAE,OAAQ,MAAO,EAAE,KAAM,EAAE,EAC7F,IAAI,GAAK,KAAK,UAAW,GAAM,EAAE,MAAQ,IAAI,EACzC,GAAK,IAAK,KAAK,QAAQ,CAAE,IAAK,KAAM,KAAM,CAAC,EAAG,GAAK,GACvD,OAAO,KAAK,SAAS,KAAM,GAAI,wCAAwC,CACzE,MAAc,CAAC,CACjB,EACI,SAAS,aAAe,UAAW,SAAS,iBAAiB,mBAAoB,SAAS,EAAQ,UAAU,EAEhH,OAAO,MAAQ,CAAE,IAAK,EACtB,MAAM,MAAQ,IAAM,SAAS,iBAAiB,SAAS,EAAE,QAAQ,IAAI,EACjE,SAAS,aAAe,UAAW,SAAS,iBAAiB,mBAAoB,KAAK,EAAQ,MAAM,CAC1G,GAAG",
  "names": []
}
