{"version":3,"names":["init","nav","document","querySelector","root","documentElement","hamburger","items","Array","prototype","slice","call","querySelectorAll","closeTimer","desktop","window","matchMedia","scrollbarPad","forEach","item","btn","toggleOf","addEventListener","onToggleClick","onItemEnter","onItemLeave","isNavOpen","closeNav","openNav","setTimeout","matches","contains","activeElement","closeAll","e","key","focus","openedItem","filter","isOpen","closeItem","target","onBreakpointChange","addListener","hasAttribute","hasPanel","panelOf","openItem","setAttribute","getAttribute","replace","removeAttribute","except","currentTarget","closest","clearTimeout","innerWidth","clientWidth","body","style","paddingRight","trapFocus","removeEventListener","f","el","offsetParent","length","first","last","shiftKey","preventDefault","readyState"],"sourceRoot":"theme-10/","sources":["_html/common/body_tag_1.js"],"sourcesContent":["\n(function () {\n  'use strict';\n\n  function init() {\n  var nav = document.querySelector('[data-primary-nav]');\n  if (!nav) return;\n\n  var root        = document.documentElement;\n  var hamburger   = nav.querySelector('[data-nav-hamburger]');\n  var items       = Array.prototype.slice.call(nav.querySelectorAll('[data-nav-item]'));\n  var HOVER_CLOSE_DELAY = 120;   // ms grace before a hovered panel closes\n  var closeTimer  = null;\n\n  /* Desktop is where hover-to-open applies. Matches the CSS --breakpoint-xlarge\n     (1080px) so JS and CSS agree on when the nav is a bar vs. an overlay. */\n  var desktop = window.matchMedia('(min-width: 1080px)');\n\n  /* ---------------------------------------------------------------- helpers */\n  function toggleOf(item)  { return item.querySelector('[data-nav-toggle]'); }\n  function panelOf(item)   { return item.querySelector('[data-mega]'); }\n  function isOpen(item)    { return item.hasAttribute('data-open'); }\n  function hasPanel(item)  { return !!panelOf(item); }\n\n  function openItem(item) {\n    if (!hasPanel(item) || isOpen(item)) return;\n    var btn = toggleOf(item);\n    item.setAttribute('data-open', '');\n    if (btn) {\n      btn.setAttribute('aria-expanded', 'true');\n      btn.setAttribute('aria-label', btn.getAttribute('aria-label').replace(/^Show/, 'Hide'));\n    }\n  }\n\n  function closeItem(item) {\n    if (!isOpen(item)) return;\n    var btn = toggleOf(item);\n    item.removeAttribute('data-open');\n    if (btn) {\n      btn.setAttribute('aria-expanded', 'false');\n      btn.setAttribute('aria-label', btn.getAttribute('aria-label').replace(/^Hide/, 'Show'));\n    }\n  }\n\n  function closeAll(except) {\n    items.forEach(function (item) { if (item !== except) closeItem(item); });\n  }\n\n  /* ------------------------------------------------------- toggle-button click\n     Works on both desktop and mobile. On desktop it also enforces one-open. */\n  function onToggleClick(e) {\n    var btn  = e.currentTarget;\n    var item = btn.closest('[data-nav-item]');\n    if (isOpen(item)) {\n      closeItem(item);\n    } else {\n      closeAll(item);       // single-open on both breakpoints\n      openItem(item);\n    }\n  }\n\n  /* --------------------------------------------------------- desktop hovering */\n  function onItemEnter(e) {\n    if (!desktop.matches) return;\n    window.clearTimeout(closeTimer);\n    var item = e.currentTarget;\n    if (!hasPanel(item)) return;\n    closeAll(item);\n    openItem(item);\n  }\n  function onItemLeave(e) {\n    if (!desktop.matches) return;\n    var item = e.currentTarget;\n    window.clearTimeout(closeTimer);\n    closeTimer = window.setTimeout(function () { closeItem(item); }, HOVER_CLOSE_DELAY);\n  }\n\n  /* ------------------------------------------------------------- global close */\n  function onKeydown(e) {\n    if (e.key !== 'Escape' && e.key !== 'Esc') return;\n    if (isNavOpen()) { closeNav(); hamburger && hamburger.focus(); return; }\n    var openedItem = items.filter(isOpen)[0];\n    if (openedItem) {\n      closeItem(openedItem);\n      var btn = toggleOf(openedItem);\n      btn && btn.focus();\n    }\n  }\n  function onFocusOut() {\n    // Defer so the incoming focus target is known.\n    window.setTimeout(function () {\n      if (!desktop.matches) return;\n      if (!nav.contains(document.activeElement)) closeAll();\n    }, 0);\n  }\n  function onDocClick(e) {\n    if (desktop.matches && !nav.contains(e.target)) closeAll();\n  }\n\n  /* =============================================================== mobile nav */\n  var scrollbarPad = 0;\n\n  function isNavOpen() { return root.hasAttribute('data-nav-open'); }\n\n  function lockScroll() {\n    // Compensate for the scrollbar width so locking causes no layout shift.\n    scrollbarPad = window.innerWidth - root.clientWidth;\n    if (scrollbarPad > 0) document.body.style.paddingRight = scrollbarPad + 'px';\n    root.setAttribute('data-nav-open', '');\n  }\n  function unlockScroll() {\n    root.removeAttribute('data-nav-open');\n    document.body.style.paddingRight = '';\n  }\n\n  function openNav() {\n    lockScroll();\n    hamburger.setAttribute('aria-expanded', 'true');\n    hamburger.setAttribute('aria-label', 'Close menu');\n    document.addEventListener('keydown', trapFocus, true);\n  }\n  function closeNav() {\n    unlockScroll();\n    closeAll();\n    hamburger.setAttribute('aria-expanded', 'false');\n    hamburger.setAttribute('aria-label', 'Open menu');\n    document.removeEventListener('keydown', trapFocus, true);\n  }\n  function onHamburger() { isNavOpen() ? closeNav() : openNav(); }\n\n  /* Simple focus trap for the overlay. */\n  function focusables() {\n    return Array.prototype.slice.call(\n      nav.querySelectorAll('a[href], button:not([disabled])')\n    ).filter(function (el) { return el.offsetParent !== null; });\n  }\n  function trapFocus(e) {\n    if (e.key !== 'Tab' || !isNavOpen()) return;\n    var f = focusables();\n    if (!f.length) return;\n    var first = f[0], last = f[f.length - 1];\n    if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); }\n    else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); }\n  }\n\n  /* ====================================================== breakpoint changes */\n  function onBreakpointChange() {\n    // Leaving mobile with the overlay open, or entering it: reset everything.\n    if (desktop.matches && isNavOpen()) closeNav();\n    closeAll();\n  }\n\n  /* ==================================================================== wire */\n  items.forEach(function (item) {\n    var btn = toggleOf(item);\n    if (btn) btn.addEventListener('click', onToggleClick);\n    item.addEventListener('mouseenter', onItemEnter);\n    item.addEventListener('mouseleave', onItemLeave);\n  });\n\n  if (hamburger) hamburger.addEventListener('click', onHamburger);\n  nav.addEventListener('focusout', onFocusOut);\n  document.addEventListener('keydown', onKeydown);\n  document.addEventListener('click', onDocClick);\n\n  // matchMedia listener with legacy fallback (older Safari).\n  if (desktop.addEventListener) desktop.addEventListener('change', onBreakpointChange);\n  else if (desktop.addListener) desktop.addListener(onBreakpointChange);\n  }\n\n  /* Run whether the script loads in <head>, gets bundled early, or sits at the\n     end of <body>. Without this, an early-executing bundle finds no nav in the\n     DOM yet, bails, and the hamburger becomes a dead button. */\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n\n"],"mappings":"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"}