{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/global.js?rev=4"],
  "sourcesContent": ["/* global.js \u2014 site chrome behaviour (vanilla, deferred).\n   Drawers (mobile nav + cart), mega-menu keyboard support, sticky header,\n   generic disclosures. Exposes window.theme.drawers for cart.js. */\n(function () {\n  'use strict';\n  var theme = (window.theme = window.theme || {});\n\n  var FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\n  /* ---------------- Drawer manager ---------------- */\n  var lastFocus = null;\n\n  function openDrawer(id) {\n    var drawer = document.getElementById(id);\n    if (!drawer) return;\n    // cart.js re-opens the cart drawer after every add, also from inside the\n    // open drawer, where the clicked button has just been re-rendered away and\n    // focus sits on <body>. Keep the element that first opened it.\n    if (drawer.getAttribute('aria-hidden') !== 'false') lastFocus = document.activeElement;\n    drawer.setAttribute('aria-hidden', 'false');\n    document.body.classList.add('drawer-open');\n    // reflect on any toggles\n    document.querySelectorAll('[data-drawer-toggle=\"' + id + '\"]').forEach(function (t) {\n      t.setAttribute('aria-expanded', 'true');\n    });\n    var panel = drawer.querySelector('.drawer__panel');\n    var first = panel && panel.querySelector(FOCUSABLE);\n    if (first) window.requestAnimationFrame(function () { first.focus(); });\n    drawer.dispatchEvent(new CustomEvent('drawer:open', { bubbles: true }));\n  }\n\n  function closeDrawer(drawer) {\n    if (typeof drawer === 'string') drawer = document.getElementById(drawer);\n    if (!drawer) return;\n    drawer.setAttribute('aria-hidden', 'true');\n    if (!document.querySelector('.drawer[aria-hidden=\"false\"]')) {\n      document.body.classList.remove('drawer-open');\n    }\n    document.querySelectorAll('[data-drawer-toggle=\"' + drawer.id + '\"]').forEach(function (t) {\n      t.setAttribute('aria-expanded', 'false');\n    });\n    if (lastFocus && typeof lastFocus.focus === 'function') lastFocus.focus();\n    drawer.dispatchEvent(new CustomEvent('drawer:close', { bubbles: true }));\n  }\n\n  function closeAllDrawers() {\n    document.querySelectorAll('.drawer[aria-hidden=\"false\"]').forEach(closeDrawer);\n  }\n\n  theme.drawers = { open: openDrawer, close: closeDrawer, closeAll: closeAllDrawers };\n\n  document.addEventListener('click', function (e) {\n    var toggle = e.target.closest('[data-drawer-toggle]');\n    if (toggle) {\n      e.preventDefault();\n      openDrawer(toggle.getAttribute('data-drawer-toggle'));\n      return;\n    }\n    var closer = e.target.closest('[data-drawer-close]');\n    if (closer) {\n      e.preventDefault();\n      closeDrawer(closer.closest('.drawer'));\n      return;\n    }\n    // A link in a drawer to a spot on this same page (the menu's\n    // /#find-your-piece on the home page) only scrolls: close the drawer so\n    // the spot isn't hidden behind it.\n    var jump = e.target.closest('.drawer a[href*=\"#\"]');\n    if (jump && jump.hash && jump.pathname === window.location.pathname) closeAllDrawers();\n  });\n\n  /* Focus trap + Escape */\n  document.addEventListener('keydown', function (e) {\n    if (e.key === 'Escape') {\n      closeAllDrawers();\n      // close any open mega panel by releasing focus\n      var openMega = document.querySelector('.mega-menu.is-open');\n      if (openMega) {\n        openMega.classList.remove('is-open');\n        var parentLink = openMega.parentElement.querySelector('[data-mega-toggle]');\n        if (parentLink) parentLink.setAttribute('aria-expanded', 'false');\n      }\n      if (document.activeElement && document.activeElement.closest('.has-mega')) {\n        document.activeElement.blur();\n      }\n      return;\n    }\n    if (e.key === 'Tab') {\n      var drawer = document.querySelector('.drawer[aria-hidden=\"false\"]');\n      if (!drawer) return;\n      var panel = drawer.querySelector('.drawer__panel');\n      var nodes = Array.prototype.slice.call(panel.querySelectorAll(FOCUSABLE)).filter(function (n) {\n        return n.offsetParent !== null;\n      });\n      if (!nodes.length) return;\n      var firstEl = nodes[0], lastEl = nodes[nodes.length - 1];\n      if (e.shiftKey && document.activeElement === firstEl) { e.preventDefault(); lastEl.focus(); }\n      else if (!e.shiftKey && document.activeElement === lastEl) { e.preventDefault(); firstEl.focus(); }\n    }\n  });\n\n  /* ---------------- Mega-menu (touch / click fallback) ----------------\n     Desktop opens on hover/focus via CSS. This adds explicit toggling so\n     touch + keyboard users can open without navigating away immediately. */\n  // Room between the panel's top (the header's bottom edge, which moves as the\n  // announcement bar scrolls away) and the bottom of the window. base.css caps\n  // the panel's inner box at this, so a tall menu scrolls instead of running\n  // off-screen where the sticky header makes it unreachable.\n  var fitMega = function (panel) {\n    var room = window.innerHeight - panel.getBoundingClientRect().top - 8;\n    panel.style.setProperty('--mega-room', Math.max(240, Math.floor(room)) + 'px');\n  };\n  document.querySelectorAll('[data-mega-parent]').forEach(function (item) {\n    var panel = item.querySelector('[data-mega-panel]');\n    if (!panel) return;\n    item.addEventListener('pointerenter', function () { fitMega(panel); });\n    item.addEventListener('focusin', function () { fitMega(panel); });\n  });\n  document.querySelectorAll('[data-mega-toggle]').forEach(function (link) {\n    link.addEventListener('click', function (e) {\n      // Only intercept on coarse pointers (touch); fine pointers use hover.\n      if (window.matchMedia('(hover: none)').matches && window.innerWidth >= 961) {\n        var panel = link.parentElement.querySelector('[data-mega-panel]');\n        if (panel && !panel.classList.contains('is-open')) {\n          e.preventDefault();\n          document.querySelectorAll('.mega-menu.is-open').forEach(function (p) { p.classList.remove('is-open'); });\n          panel.classList.add('is-open');\n          link.setAttribute('aria-expanded', 'true');\n        }\n      }\n    });\n  });\n  document.addEventListener('click', function (e) {\n    if (!e.target.closest('.has-mega')) {\n      document.querySelectorAll('.mega-menu.is-open').forEach(function (p) {\n        p.classList.remove('is-open');\n        var l = p.parentElement.querySelector('[data-mega-toggle]');\n        if (l) l.setAttribute('aria-expanded', 'false');\n      });\n    }\n  });\n\n  /* ---------------- Sticky header: shadow + auto-hide ----------------\n     Adds the drop-shadow once scrolled, and on mobile hides the header when\n     scrolling down / reveals it when scrolling up (a \"reverse sticky\" so the\n     menu is out of the way while reading but one flick away). Desktop keeps the\n     header pinned \u2014 the auto-hide only arms under the mobile media query. */\n  var header = document.querySelector('[data-header].header--sticky');\n  if (header) {\n    var lastY = window.scrollY;\n    // Must match the sticky query in sections/header.liquid.\n    var mobile = window.matchMedia('(max-width: 960px) and (min-height: 500px)');\n    // Don't hide until the user is clearly past the header, so it can't flicker\n    // near the top of the page.\n    var revealAbove = 140;\n    var searchInUse = function () {\n      var open = header.querySelector('[data-predictive-results]:not([hidden])');\n      return !!open || header.contains(document.activeElement) && document.activeElement.matches('input');\n    };\n\n    var onScroll = function () {\n      // iOS reports scrollY past the end during the bottom bounce; clamped,\n      // the spring back doesn't read as a scroll up and flash the header.\n      var maxY = Math.max(0, document.documentElement.scrollHeight - window.innerHeight);\n      var y = Math.min(Math.max(window.scrollY, 0), maxY);\n      header.classList.toggle('is-scrolled', y > 8);\n\n      var goingDown = y > lastY;\n      // Keep the header visible near the top, while any drawer is open, or on desktop.\n      // Also while the shopper is using the header search: opening the phone\n      // keyboard, or scrolling the suggestions to their end, scrolls the page,\n      // and tucking then slid the box and its suggestions off the screen.\n      if (!mobile.matches || document.body.classList.contains('drawer-open') || y < revealAbove || searchInUse()) {\n        header.classList.remove('header--tucked');\n      } else if (goingDown && y - lastY > 4) {\n        header.classList.add('header--tucked');\n      } else if (!goingDown && lastY - y > 4) {\n        header.classList.remove('header--tucked');\n      }\n      lastY = y;\n    };\n    window.addEventListener('scroll', onScroll, { passive: true });\n    // Tabbing onto a header link while it is tucked away brings it back.\n    header.addEventListener('focusin', function () { header.classList.remove('header--tucked'); });\n    // A resize into desktop must clear any tucked state.\n    mobile.addEventListener('change', function () { if (!mobile.matches) header.classList.remove('header--tucked'); });\n    onScroll();\n  }\n\n  /* ---------------- Generic disclosure (accordions) ----------------\n     <button data-toggle aria-controls=\"ID\" aria-expanded=\"false\"> ... <div id=\"ID\"> */\n  document.addEventListener('click', function (e) {\n    var trigger = e.target.closest('[data-toggle]');\n    if (!trigger) return;\n    var id = trigger.getAttribute('aria-controls');\n    var panel = id && document.getElementById(id);\n    if (!panel) return;\n    var expanded = trigger.getAttribute('aria-expanded') === 'true';\n    trigger.setAttribute('aria-expanded', String(!expanded));\n    panel.hidden = expanded;\n  });\n\n})();\n"],
  "mappings": "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",
  "names": []
}
