{
  "version": 3,
  "sources": ["/cdn/shop/t/18/assets/mobile-card-switch.js?bust=36402599"],
  "sourcesContent": ["/*\n  Mobile product-card image preview \u2014 press & hold.\n\n  Adapts the desktop mouse-hover to touch: press and HOLD a product image to\n  reveal the second (back / alternate) image; lift the finger to restore the\n  first. No dots, arrows, labels, or icons.\n\n  How it stays out of the way:\n  - Uses Pointer Events (touch/pen only); desktop mouse keeps its CSS :hover.\n  - Listeners are passive and NEVER call preventDefault on down/move, so vertical\n    page scrolling, horizontal carousels, and normal links all keep working.\n  - The back image only reveals after a short ~150ms press, so a quick tap is\n    left alone and opens the product in one tap.\n  - Any finger movement past a small threshold = scroll / carousel swipe, which\n    cancels the preview.\n  - After a real hold, the release's click is suppressed once, so holding to\n    preview does NOT navigate (mirrors desktop hover). The back image is always\n    removed on release / cancel \u2014 it never stays stuck.\n  - The crossfade and prefers-reduced-motion are handled in CSS via the\n    .is-showing-secondary class. Not applied to the product-detail gallery.\n*/\n(function () {\n  'use strict';\n\n  var HOLD_DELAY = 150; // ms of press before the back image reveals\n  var MOVE_CANCEL = 10; // px of movement that counts as a scroll / swipe\n\n  function cardOf(el) {\n    if (!el || !el.closest) return null;\n    return el.closest('.card-wrapper') || el.closest('.md-card');\n  }\n  function mediaOf(card) {\n    return card && (card.querySelector('.media--hover-effect') || card.querySelector('.md-card__media'));\n  }\n  function hasSecondary(media) {\n    if (!media) return false;\n    if (media.querySelector('.md-card__img--secondary')) return true;\n    return media.querySelectorAll('img').length > 1;\n  }\n  function inRect(r, x, y) {\n    return x >= r.left && x <= r.right && y >= r.top && y <= r.bottom;\n  }\n  function show(media) { if (media) media.classList.add('is-showing-secondary'); }\n  function hide(media) { if (media) media.classList.remove('is-showing-secondary'); }\n\n  var active = null; // { media, x, y, timer, held }\n\n  function clearActive() {\n    if (!active) return;\n    clearTimeout(active.timer);\n    hide(active.media);\n    active = null;\n  }\n\n  /* Suppress exactly one upcoming click (the one after a hold) so previewing\n     doesn't open the product. One-shot; auto-cleaned after 500ms in case the\n     browser fires no click (e.g. the touch ended with movement). */\n  function suppressNextClick() {\n    var t;\n    function handler(ev) { ev.preventDefault(); ev.stopPropagation(); cleanup(); }\n    function cleanup() { document.removeEventListener('click', handler, true); clearTimeout(t); }\n    document.addEventListener('click', handler, true);\n    t = setTimeout(cleanup, 500);\n  }\n\n  function begin(target, x, y) {\n    var media = mediaOf(cardOf(target));\n    if (!media || !hasSecondary(media)) return;\n    if (!inRect(media.getBoundingClientRect(), x, y)) return; // press must start on the image\n    clearActive();\n    active = { media: media, x: x, y: y, held: false, timer: null };\n    active.timer = setTimeout(function () {\n      if (active) { active.held = true; show(active.media); }\n    }, HOLD_DELAY);\n  }\n\n  function move(x, y) {\n    if (!active) return;\n    if (Math.abs(x - active.x) > MOVE_CANCEL || Math.abs(y - active.y) > MOVE_CANCEL) {\n      clearActive(); // scroll / carousel swipe \u2014 abandon the preview\n    }\n  }\n\n  function release() {\n    if (!active) return;\n    var held = active.held;\n    clearActive();\n    if (held) suppressNextClick(); // releasing a hold shouldn't navigate\n  }\n\n  if (window.PointerEvent) {\n    document.addEventListener('pointerdown', function (e) {\n      if (e.pointerType !== 'touch' && e.pointerType !== 'pen') return; // mouse uses :hover\n      begin(e.target, e.clientX, e.clientY);\n    }, { passive: true });\n    document.addEventListener('pointermove', function (e) { move(e.clientX, e.clientY); }, { passive: true });\n    document.addEventListener('pointerup', release, { passive: true });\n    document.addEventListener('pointercancel', clearActive, { passive: true });\n  } else {\n    // Legacy touch fallback (older browsers without Pointer Events).\n    document.addEventListener('touchstart', function (e) {\n      if (e.touches.length !== 1) return;\n      begin(e.target, e.touches[0].clientX, e.touches[0].clientY);\n    }, { passive: true });\n    document.addEventListener('touchmove', function (e) {\n      if (e.touches.length === 1) move(e.touches[0].clientX, e.touches[0].clientY);\n    }, { passive: true });\n    document.addEventListener('touchend', release, { passive: true });\n    document.addEventListener('touchcancel', clearActive, { passive: true });\n  }\n})();\n\n/* v2 */\n"],
  "mappings": "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",
  "names": []
}
