{
  "version": 3,
  "sources": ["/cdn/shop/t/73/assets/custom-collection.js?cb=10593"],
  "sourcesContent": ["document.addEventListener('DOMContentLoaded', function() {\r\n  // The \"Filter:\" heading and the desktop product count are hidden visually in\r\n  // custom-collection.css but kept in the page: the heading names the filter\r\n  // region (aria-labelledby=\"verticalTitle\") and the count is the role=\"status\"\r\n  // live region that announces results after filtering.\r\n\r\n  document.querySelectorAll('.js-filter').forEach(function(detail) {\r\n    detail.setAttribute('open', 'open');\r\n  });\r\n\r\n  document.querySelectorAll('.show-more-item.hidden').forEach(function(item) {\r\n    item.classList.remove('hidden');\r\n  });\r\n  document.querySelectorAll('show-more-button').forEach(function(btn) {\r\n    btn.remove();\r\n  });\r\n\r\n  document.querySelectorAll('.price .price-item').forEach(function(price) {\r\n    price.textContent = price.textContent.replace(/From\\s*/i, '').replace(/\\s[A-Z]{3}$/, '').trim();\r\n  });\r\n});\r\n\n/*\n * Restore scroll position when returning to the collection page via the browser's\n * back button. On iOS (all browsers are WebKit, no back/forward cache outside\n * Safari) every back-tap is a full reload, and WebKit's own late scroll\n * restoration lands at the top on this lazy-loading grid.\n *\n * - history.scrollRestoration = 'manual': the browser's own (late, sometimes\n *   zero-valued) restoration can't fight ours \u2014 this script owns it on this page.\n * - The scroll offset is stored in the history entry itself (replaceState) on\n *   pagehide and product-link taps; sessionStorage is the fallback. Fresh visits\n *   have no stored state, so they correctly start at the top.\n * - Restore waits for the lazy-loading grid to grow tall enough, jumps instantly,\n *   then briefly guards against late scripts yanking the page back to the top.\n */\n(function () {\n  if ('scrollRestoration' in history) {\n    try {\n      history.scrollRestoration = 'manual';\n    } catch (e) {\n      /* ignore */\n    }\n  }\n\n  function sessionKey() {\n    return 'collection-scroll:' + location.pathname + location.search;\n  }\n\n  function jump(top) {\n    try {\n      window.scrollTo({ top: top, behavior: 'instant' });\n    } catch (e) {\n      window.scrollTo(0, top);\n    }\n  }\n\n  function saveToHistory() {\n    try {\n      var state = Object.assign({}, history.state, { customScrollY: Math.round(window.scrollY) });\n      history.replaceState(state, '');\n    } catch (e) {\n      /* replaceState unavailable or rate-limited \u2014 sessionStorage still covers us */\n    }\n  }\n\n  function saveToSession() {\n    try {\n      sessionStorage.setItem(sessionKey(), String(Math.round(window.scrollY)));\n    } catch (e) {\n      /* storage unavailable */\n    }\n  }\n\n  // Save when leaving the page and when tapping a product link (belt & braces \u2014\n  // pagehide is unreliable in some mobile browsers).\n  window.addEventListener('pagehide', function () {\n    saveToHistory();\n    saveToSession();\n  });\n  document.addEventListener(\n    'click',\n    function (event) {\n      var link = event.target && event.target.closest && event.target.closest('a[href*=\"/products/\"]');\n      if (link) {\n        saveToHistory();\n        saveToSession();\n      }\n    },\n    true\n  );\n  // Keep sessionStorage fresh while scrolling. No replaceState here \u2014 iOS\n  // rate-limits it and facets.js also writes history state.\n  var saveTimer = null;\n  window.addEventListener(\n    'scroll',\n    function () {\n      if (saveTimer) return;\n      saveTimer = setTimeout(function () {\n        saveTimer = null;\n        saveToSession();\n      }, 400);\n    },\n    { passive: true }\n  );\n\n  function restoreTarget() {\n    var state = history.state || {};\n    if (typeof state.customScrollY === 'number' && state.customScrollY > 0) {\n      return state.customScrollY;\n    }\n    var nav = performance.getEntriesByType('navigation')[0];\n    if (nav && nav.type === 'back_forward') {\n      var saved = parseInt(sessionStorage.getItem(sessionKey()), 10);\n      if (saved > 0) return saved;\n    }\n    return 0;\n  }\n\n  window.addEventListener('pageshow', function () {\n    var target = restoreTarget();\n    if (!target) return;\n\n    // If the user starts scrolling or moving focus themselves (wheel, touch, keys, Tab), stop fighting them.\n    var userScrolled = false;\n    var markUserScroll = function () {\n      userScrolled = true;\n    };\n    window.addEventListener('wheel', markUserScroll, { passive: true, once: true });\n    window.addEventListener('touchmove', markUserScroll, { passive: true, once: true });\n    window.addEventListener('keydown', markUserScroll, { once: true });\n    document.addEventListener('focusin', markUserScroll, { once: true });\n\n    // Phase 1: wait (max 6s) until the grid is tall enough, then jump.\n    // Phase 2: for 3s after jumping, re-assert if anything yanks us back toward top.\n    var start = performance.now();\n    var restoredAt = 0;\n    (function attempt() {\n      if (userScrolled) return;\n      var now = performance.now();\n      var maxScroll = document.documentElement.scrollHeight - window.innerHeight;\n\n      if (!restoredAt) {\n        if (maxScroll >= target) {\n          jump(target);\n          restoredAt = now;\n        } else if (now - start > 6000) {\n          if (maxScroll > 0) jump(maxScroll);\n          return;\n        }\n      } else {\n        if (window.scrollY < target - 100) jump(target);\n        if (now - restoredAt > 3000) return;\n      }\n      requestAnimationFrame(attempt);\n    })();\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
