{
  "version": 3,
  "sources": ["/cdn/shop/t/26/assets/tdhq-quick-view.js?b=20260923d"],
  "sourcesContent": ["/* ============================================================\n   TDHQ QUICK VIEW - choosing a size without leaving the list.\n\n   \"Choose options\" on a product card was a full page load, a decision, then\n   Back and a re-scroll. It now opens the buy box over the grid: the product's\n   pictures, its price, THE SAME option picker and size guide the product page\n   renders (snippets/tdhq-option-picker), driven by the same engine\n   (assets/tdhq-variants.js), and Add to basket hands over to the same basket\n   drawer as everywhere else.\n\n   PROGRESSIVE ENHANCEMENT: the control is a real link to the product page.\n   Without this file - or if the fetch fails, or the browser has no <dialog> -\n   the link does what it always did. Ctrl/cmd/middle click still opens the\n   product page in a new tab.\n\n   The markup is fetched on demand from the Section Rendering API:\n     /products/<handle>?section_id=tdhq-quick-view\n   so a listing page carries nothing for it until a shopper asks.\n   ============================================================ */\n(function () {\n  'use strict';\n\n  if (!('fetch' in window) || typeof DOMParser === 'undefined') { return; }\n  var dlgProto = window.HTMLDialogElement && window.HTMLDialogElement.prototype;\n  if (!dlgProto || typeof dlgProto.showModal !== 'function') { return; }\n\n  /* \"Choose options\" and the Quick view eye on every card open the popup, and\n     so do the \"In Stock Now\" suggestions on a sold-out product page (U.59): a\n     shopper looks through them without losing the page they came from. */\n  var CTA = 'a.tdhq-pcard__cta[href*=\"/products/\"], a.tdhq-pcard__qv[href*=\"/products/\"], a.dtc-pdp__instock-link[href*=\"/products/\"]';\n  var cache = {};\n  var dialog = null;\n  var content = null;\n  var lastFocus = null;\n  var currentToken = 0;\n\n  function handleOf(href) {\n    try {\n      var u = new URL(href, window.location.origin);\n      var m = u.pathname.split('/products/')[1];\n      return m ? m.split('/')[0].split('?')[0] : '';\n    } catch (e) { return ''; }\n  }\n\n  function fetchView(handle) {\n    if (cache[handle]) { return cache[handle]; }\n    var url = '/products/' + encodeURIComponent(handle) + '?section_id=tdhq-quick-view';\n    cache[handle] = fetch(url, { credentials: 'same-origin', headers: { 'Accept': 'text/html' } })\n      .then(function (r) {\n        if (!r.ok) { throw new Error('HTTP ' + r.status); }\n        return r.text();\n      });\n    cache[handle].catch(function () { delete cache[handle]; });\n    return cache[handle];\n  }\n\n  function build() {\n    if (dialog) { return; }\n    dialog = document.createElement('dialog');\n    dialog.className = 'tdhq-qv__dialog';\n    dialog.setAttribute('aria-label', 'Quick view');\n    dialog.innerHTML =\n      '<button type=\"button\" class=\"tdhq-qv__close\" data-qv-close aria-label=\"Close quick view\">' +\n      '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\" focusable=\"false\">' +\n      '<path d=\"M6 6l12 12M18 6L6 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>' +\n      '</button><div class=\"tdhq-qv__content\" data-qv-content></div>';\n    /* the site's own close icon (layout template), like every other close\n       button; the hand-drawn cross stays only as the fallback (REQ-VIS-10) */\n    var closeTpl = document.getElementById('tdhq-close-icon');\n    if (closeTpl && closeTpl.content && closeTpl.content.firstElementChild) {\n      var cb = dialog.querySelector('[data-qv-close]');\n      cb.textContent = '';\n      cb.appendChild(closeTpl.content.firstElementChild.cloneNode(true));\n    }\n    document.body.appendChild(dialog);\n    content = dialog.querySelector('[data-qv-content]');\n    content.setAttribute('tabindex', '-1');\n\n    dialog.addEventListener('click', function (e) {\n      if (e.target === dialog || (e.target.closest && e.target.closest('[data-qv-close]'))) { close(); }\n    });\n    if (window.ResizeObserver) {\n      new ResizeObserver(function () { if (Date.now() - openedAt < 900) { centre(); } else { keepOnScreen(); } }).observe(dialog);\n    }\n    window.addEventListener('resize', centre);\n    dialog.addEventListener('close', function () {\n      document.documentElement.classList.remove('tdhq-qv-open');\n      if (lastFocus && lastFocus.focus) { lastFocus.focus({ preventScroll: true }); }\n      lastFocus = null;\n    });\n  }\n\n  function close() {\n    if (dialog && dialog.open) { dialog.close(); }\n  }\n\n  /* LANDS IN THE MIDDLE, THEN HOLDS STILL (desktop). The panel opens centred\n     on the screen (client, 2026-10-10); its top then stays where it landed, so\n     an option that changes the panel's height grows it downwards instead of\n     moving the whole popup (client, 2026-09-23). It moves up only when it\n     would run off the bottom of the screen. The phone sheet keeps its bottom\n     edge (no inline margin below 900px). */\n  var wide = window.matchMedia ? window.matchMedia('(min-width: 900px)') : null;\n  var openedAt = 0;\n  function centre() {\n    if (!dialog) { return; }\n    if (!dialog.open || !wide || !wide.matches) { dialog.style.marginTop = ''; return; }\n    dialog.style.marginTop = Math.max(24, Math.round((window.innerHeight - dialog.offsetHeight) / 2)) + 'px';\n  }\n  function keepOnScreen() {\n    if (!dialog || !dialog.open || !wide || !wide.matches || !dialog.style.marginTop) { return; }\n    var room = window.innerHeight - 24 - dialog.offsetHeight;\n    if (parseFloat(dialog.style.marginTop) > room) { dialog.style.marginTop = Math.max(24, Math.round(room)) + 'px'; }\n  }\n\n  /* The picture in the frame is swapped only once the new one has decoded, so\n     the frame never goes blank - the same rule the product page follows. */\n  function wireThumbs(root) {\n    var stage = root.querySelector('.tdhq-qv__img');\n    if (!stage) { return; }\n    var thumbs = [].slice.call(root.querySelectorAll('[data-tdhq-qv-thumb]'));\n    var token = 0;\n    thumbs.forEach(function (btn) {\n      btn.addEventListener('click', function () {\n        var src = btn.getAttribute('data-tdhq-qv-thumb');\n        if (!src) { return; }\n        thumbs.forEach(function (b) { b.removeAttribute('aria-current'); });\n        btn.setAttribute('aria-current', 'true');\n        var mine = ++token;\n        /* warmed and shown at the size the stage uses, not the full 900px file (TdhqImg) */\n        var next = window.TdhqImg.warm(stage, src);\n        var show = function () {\n          if (mine !== token) { return; }\n          fade(stage, function () {\n            window.TdhqImg.swap(stage, src);\n            /* this picture's own framing, not the last one's */\n            if (window.tdhqFit && window.tdhqFit.reset) { window.tdhqFit.reset(stage); }\n          });\n        };\n        (window.tdhqImgReady || function (i, ok) { if (i.complete) { ok(); } else { i.onload = ok; i.onerror = ok; } })(next, show);\n      });\n    });\n  }\n\n  /* A LOGO DRAWN WHITE for dark packaging vanishes on the white tile. The\n     product page's sampler (snippets/tdhq-logo-well) is an inline script,\n     which never runs in markup inserted here, so the same test runs here: a\n     logo whose see-through edges surround light artwork gets the dark plate. */\n  function lightLogo(root) {\n    var well = root.querySelector('[data-brand-logo-well]');\n    var img = well && well.querySelector('img');\n    if (!img) { return; }\n    function sample() {\n      try {\n        var c = document.createElement('canvas'); c.width = 40; c.height = 20;\n        var x = c.getContext('2d'); x.drawImage(img, 0, 0, 40, 20);\n        var d = x.getImageData(0, 0, 40, 20).data, sum = 0, n = 0, edge = 0, edgeN = 0;\n        for (var py = 0; py < 20; py++) {\n          for (var px = 0; px < 40; px++) {\n            if (py > 0 && py < 19 && px > 0 && px < 39) { continue; }\n            edgeN++; if (d[(py * 40 + px) * 4 + 3] > 128) { edge++; }\n          }\n        }\n        if (edge / edgeN > 0.9) { return; }\n        for (var i = 0; i < d.length; i += 4) { if (d[i + 3] > 40) { sum += (d[i] + d[i + 1] + d[i + 2]) / 3; n++; } }\n        if (n && sum / n > 200) { well.classList.add('is-light-logo'); }\n      } catch (e) { /* unreadable: keep the white tile */ }\n    }\n    if (img.complete && img.naturalWidth) { sample(); } else { img.addEventListener('load', sample, { once: true }); }\n  }\n\n  /* The same fade the product page's gallery uses (assets/tdhq-variants.js). */\n  function fade(img, swap) {\n    if (window.TdhqVariants && window.TdhqVariants.fadeSwap) { window.TdhqVariants.fadeSwap(img, swap); }\n    else { swap(); }\n  }\n\n  /* The ring marks the picture the stage is SHOWING. It was left on the\n     first thumb while the stage showed the chosen colour (audit pdp-12:\n     sand hoodie ringed, blue hoodie shown), and never moved on a colour\n     change. Matched by pathname: the JSON and the markup spell the same CDN\n     file two ways. */\n  function pathOf(u) {\n    try { return new URL(u, window.location.origin).pathname; } catch (e) { return String(u || ''); }\n  }\n  function ringFor(root, src) {\n    var want = pathOf(src);\n    [].slice.call(root.querySelectorAll('[data-tdhq-qv-thumb]')).forEach(function (b) {\n      if (pathOf(b.getAttribute('data-tdhq-qv-thumb')) === want) { b.setAttribute('aria-current', 'true'); }\n      else { b.removeAttribute('aria-current'); }\n    });\n  }\n\n  /* The dialog's ceiling follows its variant, exactly as the product page's\n     does. Called on open and after every option change. */\n  function syncQtyCeiling(root) {\n    if (!window.TdhqQty) { return; }\n    var input = root.querySelector('#QvQty');\n    if (!input) { return; }\n    /* The card pickers post the variant id from radios that live outside the\n       form, so the id is resolved by the module rather than looked up here. */\n    var vid = window.TdhqQty.variantOf(input);\n    if (!vid) { return; }\n    var known = window.TdhqQty.stock(vid);\n    if (known !== null) { input.setAttribute('max', known); }\n    else { input.removeAttribute('max'); }\n    var min = parseInt(input.getAttribute('min'), 10) || 1;\n    input.value = window.TdhqQty.allowed(vid, input.value, 'add', min).value;\n    window.TdhqQty.paint(input);\n  }\n\n  function wireQuantity(root) {\n    [].slice.call(root.querySelectorAll('[data-pdp-step]')).forEach(function (btn) {\n      btn.addEventListener('click', function () {\n        var input = root.querySelector('#QvQty');\n        if (!input) { return; }\n        var min = parseInt(input.getAttribute('min'), 10) || 1;\n        var next = (parseInt(input.value, 10) || min) + parseInt(btn.getAttribute('data-pdp-step'), 10);\n        /* Same clamp as the product page: the stock, less what the basket\n           already holds. Quick view is a buy box and must not be the one\n           place a shopper can ask for ten of three. */\n        if (window.TdhqQty) {\n          input.value = window.TdhqQty.allowed(\n            window.TdhqQty.variantOf(input), next, 'add', min).value;\n          window.TdhqQty.paint(input);\n        } else {\n          input.value = Math.max(min, next);\n        }\n      });\n    });\n  }\n\n  /* Adding hands over to the basket drawer, exactly as a product card's quick\n     add and the product page do: post, announce, let the drawer show it. */\n  /* One request at a time (20 Oct, DA02): a second Enter or click while an add\n     is running does nothing, and the button is disabled until it settles. A\n     failure is said inside the dialog. The form is never re-submitted by the\n     script: a lost reply does not mean the first add failed, so a retry could\n     put the item in the basket twice. Without JavaScript the form still posts\n     normally. */\n  function wireAdd(root) {\n    var form = root.querySelector('#QvForm');\n    var btn = root.querySelector('[data-pdp-add]');\n    if (!form || !btn) { return; }\n    var pending = false;\n    function say(msg) {\n      /* over the bottom of the main picture, in the site's notification style (window.TdhqNote, 23 Oct 2026) */\n      var stage = root.querySelector('.tdhq-qv__stage');\n      if (window.TdhqNote && stage) {\n        if (msg) { window.TdhqNote.show(stage, msg); } else { window.TdhqNote.clear(stage); }\n        return;\n      }\n      var box = form.querySelector('.tdhq-qv__err');\n      if (!msg) {\n        if (box) { box.textContent = ''; box.hidden = true; }\n        return;\n      }\n      if (!box) {\n        box = document.createElement('p');\n        box.className = 'tdhq-qv__err';\n        box.setAttribute('role', 'alert');\n        form.appendChild(box);\n      }\n      box.hidden = false;\n      box.textContent = msg;\n      if (window.TdhqMotion) { window.TdhqMotion.show(box); }\n    }\n    function settle() {\n      pending = false;\n      btn.classList.remove('is-adding');\n      btn.removeAttribute('aria-busy');\n      btn.disabled = btn.getAttribute('data-buyable') === 'false';\n    }\n    form.addEventListener('submit', function (e) {\n      e.preventDefault();\n      if (pending || btn.disabled) { return; }\n      pending = true;\n      btn.disabled = true;\n      btn.setAttribute('aria-busy', 'true');\n      btn.classList.add('is-adding');\n      say('');\n      /* A battery kit built from its parts (data-tdhq-kit-items, snippets/tdhq-kit-items.liquid) adds the parts as\n         separate basket lines, each times the quantity, never the kit itself (owner + Simon, 20 Oct 2026). */\n      var kitList = null;\n      try { kitList = JSON.parse((form.getAttribute('data-tdhq-kit-items') || '').trim() || 'null'); } catch (err) { kitList = null; }\n      if (!Array.isArray(kitList) || !kitList.length) { kitList = null; }\n      var kitQty = parseInt((form.querySelector('input[name=\"quantity\"]') || {}).value, 10) || 1;\n      fetch('/cart/add.js', kitList ? {\n        method: 'POST',\n        body: JSON.stringify({ items: kitList.map(function (p) { return { id: p[0], quantity: p[1] * kitQty }; }) }),\n        credentials: 'same-origin',\n        headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }\n      } : {\n        method: 'POST',\n        body: new FormData(form),\n        credentials: 'same-origin',\n        headers: { 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }\n      }).then(function (r) {\n        if (!r.ok) {\n          return r.json().catch(function () { return {}; }).then(function (err) {\n            var fail = new Error(err.description || err.message || '');\n            fail.fromShop = true;\n            throw fail;\n          });\n        }\n        return r.json();\n      }).then(function (item) {\n        settle();\n        close();\n        document.dispatchEvent(new CustomEvent('tdhq:cart:added', {\n          detail: { productId: item && (item.product_id || (item.items && item.items[0] && item.items[0].product_id)), item: item }\n        }));\n      }).catch(function (err) {\n        settle();\n        say(err && err.fromShop && err.message\n          ? err.message\n          : 'We could not confirm the add. Please check your basket before trying again.');\n        /* a refused kit add may still have put some of its parts in the basket */\n        if (kitList && window.TdhqQty && window.TdhqQty.reconcile) { window.TdhqQty.reconcile(); }\n      });\n    });\n  }\n\n  function paintFromVariant(root, v) {\n    if (!v) { return; }\n    var addText = root.querySelector('[data-pdp-add-text]');\n    var addBtn = root.querySelector('[data-pdp-add]');\n    var priceEl = root.querySelector('[data-pdp-price]');\n    var stockEl = root.querySelector('[data-pdp-stock]');\n    var stockText = root.querySelector('[data-pdp-stock-text]');\n    var unitEl = root.querySelector('[data-pdp-unit]');\n    if (priceEl) {\n      var html = '<span class=\"dtc-pdp__now' + (v.compare_at ? ' dtc-pdp__now--sale' : '') + '\">' + v.price + '</span>';\n      if (v.compare_at) { html += ' <s class=\"dtc-pdp__was\" aria-hidden=\"true\">' + v.compare_at + '</s>'; }\n      if (v.saving) { html += ' <span class=\"dtc-pdp__saving\">Save ' + v.saving + '</span>'; }\n      var priceWas = priceEl.textContent;\n      priceEl.innerHTML = html;\n      if (priceWas !== priceEl.textContent && window.TdhqMotion) { window.TdhqMotion.figure(priceEl); }\n    }\n    if (unitEl) {\n      var unitVal = unitEl.querySelector('[data-pdp-unit-value]');\n      if (unitVal) { unitVal.textContent = v.unit_price || ''; }\n      unitEl.hidden = !v.unit_price;\n    }\n    if (stockEl) {\n      stockEl.className = 'dtc-pdp__stockline dtc-pdp__stockline--' + (v.stock_state || (v.available ? 'in' : 'out'));\n      if (stockText) { stockText.textContent = v.stock_label || (v.available ? 'In stock' : 'Out of stock'); }\n      stockEl.hidden = !(v.stock_label || !v.available);\n    }\n    /* THE PRODUCT PAGE'S SOLD-OUT STATE: no quantity box beside \"Out of\n       stock\", the two ways on instead, and no Click & Collect line for what\n       cannot be bought. The SKU and the offer flag follow the choice too. */\n    var buyrow = root.querySelector('[data-pdp-buyrow]');\n    if (buyrow) { buyrow.classList.toggle('is-soldout', !v.available); }\n    var soldhelp = root.querySelector('[data-pdp-soldhelp]');\n    if (soldhelp) { soldhelp.hidden = !!v.available; }\n    var backask = root.querySelector('[data-qv-backask]');\n    if (backask && v.id) { backask.setAttribute('href', backask.getAttribute('href').replace(/variant=\\d+/, 'variant=' + v.id)); }\n    /* Click & Collect keeps its place: an option that cannot be collected\n       shows the panel's quiet state (snippets/tdhq-pickup.liquid) */\n    var pickup = root.querySelector('[data-pdp-pickup]');\n    if (pickup) {\n      pickup.classList.toggle('is-off', !v.pickup);\n      /* U.61: the JSON's \"no\" is only certain for the option the box was rendered with; ask Shopify for the rest. */\n      pickup.setAttribute('data-pickup-for', v.id);\n      if (!v.pickup && v.available && window.tdhqPickupFor) {\n        window.tdhqPickupFor(v.id).then(function (on) {\n          if (on && pickup.getAttribute('data-pickup-for') === String(v.id)) { pickup.classList.remove('is-off'); }\n        });\n      }\n    }\n    /* the rewards line gives way to the sold-out links, as on the product page */\n    var qvPoints = root.querySelector('[data-qv-points]');\n    if (qvPoints && typeof v.points === 'number') {\n      qvPoints.hidden = v.points <= 0;\n      var qvN = qvPoints.querySelector('[data-qv-points-n]');\n      var qvW = qvPoints.querySelector('[data-qv-points-word]');\n      if (qvN) { qvN.textContent = v.points; }\n      if (qvW) { qvW.textContent = v.points === 1 ? 'point' : 'points'; }\n    }\n    var sku = root.querySelector('[data-pdp-sku]');\n    if (sku) {\n      var skuVal = sku.querySelector('[data-pdp-sku-value]');\n      if (skuVal) { skuVal.textContent = v.sku || ''; }\n      sku.hidden = !v.sku;\n    }\n    var flag = root.querySelector('[data-qv-flag]');\n    if (flag) {\n      flag.hidden = !v.save_pct;\n      if (v.save_pct) { flag.textContent = 'Save ' + v.save_pct + '%'; }\n    }\n    if (addBtn) {\n      addBtn.setAttribute('data-buyable', v.buyable ? 'true' : 'false');\n      addBtn.disabled = !v.buyable || addBtn.getAttribute('aria-busy') === 'true';\n      if (addText) {\n        addText.textContent = v.buyable\n          ? (addBtn.getAttribute('data-in-label') || 'Add to basket')\n          : (v.available ? (addBtn.getAttribute('data-poa-label') || 'Price on request')\n                         : (addBtn.getAttribute('data-sold-label') || 'Out of stock'));\n      }\n    }\n    /* A picture for the chosen variant, when it has one of its own. */\n    var stage = root.querySelector('.tdhq-qv__img');\n    if (stage && v.image) {\n      ringFor(root, v.image);\n      if (pathOf(stage.currentSrc || stage.src) === pathOf(v.image)) { return; }\n      var mine = root.__qvPic = (root.__qvPic || 0) + 1;\n      var next = window.TdhqImg.warm(stage, v.image);\n      var show = function () {\n        if (mine !== root.__qvPic) { return; }\n        fade(stage, function () {\n          window.TdhqImg.swap(stage, v.image);\n          if (window.tdhqFit && window.tdhqFit.reset) { window.tdhqFit.reset(stage); }\n        });\n      };\n      (window.tdhqImgReady || function (i, ok) { if (i.complete) { ok(); } else { i.onload = ok; i.onerror = ok; } })(next, show);\n    }\n  }\n\n  /* A GIFT CARD OPENS THE GIFT CARD POPUP (22 Oct 2026, owner: its quick view showed the card's own amounts, not the\n     Digital / Physical choice). Both cards are bought through the one gift card box, in its popup, which the product\n     page's gift line fetches on demand (snippets/tdhq-pdp-aside.liquid): same request, same script, opened on the\n     card's own format. The popup's script wires a popup that arrives after it loaded. */\n  var giftBusy = false;\n  function openGift(fmt, js, link) {\n    var go = function () { window.tdhqGiftCard.open(fmt, null, null); };\n    if (document.querySelector('[data-gcx-popup]') && window.tdhqGiftCard && window.tdhqGiftCard.open) { go(); return; }\n    if (giftBusy || !js) { if (!js) { window.location.href = link.href; } return; }\n    giftBusy = true;\n    link.classList.add('is-loading');\n    fetch('/?section_id=tdhq-gift-popup', { credentials: 'same-origin' })\n      .then(function (r) { if (!r.ok) { throw new Error('HTTP ' + r.status); } return r.text(); })\n      .then(function (html) {\n        var holder = document.createElement('div');\n        holder.innerHTML = html;\n        if (!holder.querySelector('[data-gcx-popup]')) { throw new Error('no popup'); }\n        holder.querySelectorAll('script').forEach(function (s) { s.parentNode.removeChild(s); });\n        document.body.appendChild(holder);\n        var css = holder.querySelector('link[rel=\"stylesheet\"]');\n        var cssReady = new Promise(function (res) {\n          if (!css || css.sheet) { res(); return; }\n          css.addEventListener('load', res); css.addEventListener('error', res); setTimeout(res, 3000);\n        });\n        var jsReady = new Promise(function (res, rej) {\n          if (window.tdhqGiftCard && window.tdhqGiftCard.open) { res(); return; }\n          var s = document.createElement('script'); s.src = js; s.onload = res; s.onerror = rej; document.head.appendChild(s);\n        });\n        return Promise.all([cssReady, jsReady]);\n      })\n      .then(go)\n      .catch(function () { window.location.href = link.href; })\n      .then(function () { giftBusy = false; link.classList.remove('is-loading'); });\n  }\n\n  function open(link, byKey) {\n    var handle = handleOf(link.getAttribute('href'));\n    if (!handle) { window.location.href = link.href; return; }\n    build();\n    lastFocus = link;\n    var mine = ++currentToken;\n    link.classList.add('is-loading');\n    fetchView(handle).then(function (html) {\n      link.classList.remove('is-loading');\n      if (mine !== currentToken) { return; }\n      var doc = new DOMParser().parseFromString(html, 'text/html');\n      var view = doc.querySelector('[data-tdhq-qv]');\n      if (!view) { window.location.href = link.href; return; }\n      var giftFmt = view.getAttribute('data-qv-giftcard');\n      if (giftFmt) { openGift(giftFmt, view.getAttribute('data-qv-gcjs'), link); return; }\n      content.innerHTML = '';\n      content.appendChild(document.importNode(view, true));\n      var root = content.firstElementChild;\n      if (window.TdhqVariants) {\n        window.TdhqVariants.init(root, { onChange: function (v) {\n          paintFromVariant(root, v);\n          /* The chosen variant's stock, before the shopper can ask for more\n             of it than exists. */\n          if (window.TdhqQty && v && v.id) { window.TdhqQty.remember(v.id, v.qty_max || 0); }\n          syncQtyCeiling(root);\n        } });\n      }\n      wireThumbs(root);\n      wireQuantity(root);\n      lightLogo(root);\n      /* THE CEILING HOLDS FROM THE FIRST PRESS. The stock module learns a\n         ceiling only from a box Liquid rendered at page load, or from a\n         variant CHANGE - and opening quick view is neither, so the box lost\n         the max its own markup carried and \"+\" went to 9 of 4 (audit pdp-02,\n         measured on a fresh listing). Every variant's ceiling is handed over\n         from the picker's data before the box is judged. A listing also never\n         reads the basket, so 4 already in it still allowed 4 more: the basket\n         is read now and the box judged again when it answers. */\n      var vdata = root.querySelector('[data-pdp-variants]');\n      if (window.TdhqQty && vdata) {\n        try {\n          JSON.parse(vdata.textContent).forEach(function (vv) { window.TdhqQty.remember(vv.id, vv.qty_max || 0); });\n        } catch (err) {}\n      }\n      syncQtyCeiling(root);\n      if (window.TdhqQty && window.TdhqQty.readBasket) {\n        window.TdhqQty.readBasket().then(function () {\n          if (mine === currentToken && content.contains(root)) { syncQtyCeiling(root); }\n        });\n      }\n      wireAdd(root);\n      /* saved state on the Save for later button, which arrived after load */\n      if (window.tdhqWishPaint) { window.tdhqWishPaint(root); }\n      if (window.tdhqFit) { window.tdhqFit.scan(); }\n      document.documentElement.classList.add('tdhq-qv-open');\n      dialog.showModal();\n      content.scrollTop = 0;\n      openedAt = Date.now();\n      centre();\n      /* LONG OPTION LISTS STAY ONE ROW: the tiles become the site's own rail\n         (drag, snap, and the bar and arrows, which appear only when the row\n         overflows). Wired once the popup is open, so the rail measures its\n         real width. */\n      root.querySelectorAll('.tdhq-opt__vals--tiles, .tdhq-opt__vals--priced').forEach(function (el) {\n        el.setAttribute('data-dtc-drag', '');\n      });\n      if (window.dtcRevealRefresh) { window.dtcRevealRefresh(); }\n      /* FOCUS WHERE IT HELPS. Opened from the keyboard, focus goes to the\n         first choice (or Add to basket) and shows its ring. Opened with a\n         pointer, the panel itself takes focus and no control is ringed: the\n         yellow ring sat on Add to basket after every click (client\n         screenshot). Tab still starts inside the popup. */\n      var first = byKey ? root.querySelector('.tdhq-opt__v input, [data-pdp-add]') : null;\n      if (first && first.focus) { first.focus({ preventScroll: true }); }\n      else { content.focus({ preventScroll: true }); }\n    }).catch(function () {\n      link.classList.remove('is-loading');\n      window.location.href = link.href;\n    });\n  }\n\n  document.addEventListener('click', function (e) {\n    if (e.defaultPrevented || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) { return; }\n    var link = e.target && e.target.closest ? e.target.closest(CTA) : null;\n    if (!link || link.target === '_blank') { return; }\n    e.preventDefault();\n    /* a click with no pointer (detail 0) came from Enter on the link */\n    open(link, e.detail === 0);\n  });\n\n  /* Warm the view on intent, so the popup opens on the click. */\n  function prefetch(e) {\n    var link = e.target && e.target.closest ? e.target.closest(CTA) : null;\n    if (!link) { return; }\n    var handle = handleOf(link.getAttribute('href'));\n    if (handle && !cache[handle]) { fetchView(handle).catch(function () {}); }\n  }\n  document.addEventListener('pointerenter', prefetch, true);\n  document.addEventListener('focusin', prefetch);\n})();\n"],
  "mappings": "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",
  "names": []
}
