{
  "version": 3,
  "sources": ["/cdn/shop/t/113/assets/ada-app-popups.js?theme_ada=20261021-1"],
  "sourcesContent": ["(() => {\n  const placeChatAfterHeader = () => {\n    const chat = document.querySelector(\"#gorgias-chat-container\");\n    const header = document.querySelector(\n      \".shopify-section--header, store-header, header\"\n    );\n    if (!chat || !header || header.nextElementSibling === chat) return;\n    header.after(chat);\n  };\n\n  // Gorgias keeps its closed chat window and empty engagement widget as zero-size iframes that still take a\n  // tab stop (focus disappears into an invisible frame). Take them out of the tab order and accessibility tree\n  // while they have no size, and give the stop back once Gorgias shows them.\n  const sizeObserver = new ResizeObserver((entries) => {\n    entries.forEach((entry) => syncGorgiasFrame(entry.target));\n  });\n  const observedFrames = new WeakSet();\n\n  const syncGorgiasFrame = (frame) => {\n    const { width, height } = frame.getBoundingClientRect();\n    const isEmpty = width === 0 || height === 0;\n\n    if (isEmpty && frame.dataset.themeHidden !== \"true\") {\n      frame.dataset.themeHidden = \"true\";\n      frame.dataset.themeTabindex = frame.getAttribute(\"tabindex\") ?? \"\";\n      frame.setAttribute(\"tabindex\", \"-1\");\n      frame.setAttribute(\"aria-hidden\", \"true\");\n    } else if (!isEmpty && frame.dataset.themeHidden === \"true\") {\n      const originalTabindex = frame.dataset.themeTabindex;\n      if (originalTabindex) {\n        frame.setAttribute(\"tabindex\", originalTabindex);\n      } else {\n        frame.removeAttribute(\"tabindex\");\n      }\n      frame.removeAttribute(\"aria-hidden\");\n      delete frame.dataset.themeHidden;\n      delete frame.dataset.themeTabindex;\n    }\n  };\n\n  // The Gorgias chat renders its buttons inside same-origin (srcdoc) iframes, where the theme's focus ring doesn't\n  // reach: they only get a faint semi-transparent border on focus, and \"Close message\" gets none. Add the theme's\n  // ring inside each frame, drawn inside the control because the frame edges clip anything outside it.\n  // Gorgias sets its own !important focus colour with class selectors, so this rule needs the higher specificity.\n  // Clickable controls get the same ring on hover, since Gorgias's settings offer no hover state.\n  const GORGIAS_FOCUS_CSS = `html body :is(\n    a[href],\n    button,\n    input:not([type=\"hidden\"]),\n    textarea,\n    select,\n    [tabindex]:not([tabindex=\"-1\"]),\n    [role=\"button\"]\n  ):focus-visible,\n  html body :is(a[href], button, [role=\"button\"]):hover {\n    outline: 3px solid #002c6b !important;\n    outline-offset: 0px !important;\n    box-shadow: inset 0 0 0 5px #fff !important;\n  }`;\n\n  const addGorgiasFocusStyle = (frame) => {\n    let frameDocument;\n    try {\n      frameDocument = frame.contentDocument;\n    } catch (error) {\n      return; // cross-origin frame (storage sync), nothing to style\n    }\n    const head = frameDocument?.head;\n    if (!head || head.querySelector(\"#theme-focus-style\")) return;\n    const style = frameDocument.createElement(\"style\");\n    style.id = \"theme-focus-style\";\n    style.textContent = GORGIAS_FOCUS_CSS;\n    head.appendChild(style);\n  };\n\n  const hideEmptyGorgiasFrames = () => {\n    document.querySelectorAll(\"#gorgias-chat-container iframe\").forEach((frame) => {\n      if (!observedFrames.has(frame)) {\n        observedFrames.add(frame);\n        sizeObserver.observe(frame);\n        // Gorgias can swap the frame's document, so style it again whenever it loads.\n        frame.addEventListener(\"load\", () => addGorgiasFocusStyle(frame));\n      }\n      addGorgiasFocusStyle(frame);\n      syncGorgiasFrame(frame);\n    });\n  };\n\n  // The Pandectes cookie banner sits at the maximum z-index, so when the Klaviyo modal opens (and traps focus)\n  // the banner covers the form and cannot be reached by keyboard. Put the banner behind the modal while it is\n  // open and hand it back afterwards.\n  const findOpenKlaviyoModal = () =>\n    Array.from(document.querySelectorAll('[role=\"dialog\"][aria-modal=\"true\"]')).find(\n      (dialog) =>\n        dialog.querySelector(\".klaviyo-close-form\") &&\n        getComputedStyle(dialog).display !== \"none\" &&\n        dialog.getClientRects().length > 0 &&\n        // Klaviyo fades the modal out and can leave it in the page, full screen at opacity 0. Treat that as closed,\n        // or the page would stay inert behind a popup nobody can see.\n        (dialog.checkVisibility?.({ opacityProperty: true, visibilityProperty: true }) ??\n          Number(getComputedStyle(dialog).opacity) > 0)\n    );\n\n  // Klaviyo sends focus to its corner teaser when the modal closes, even when the modal opened on its own while\n  // the user was elsewhere on the page. Return focus to wherever the user was when it opened.\n  let lastFocusOutsideKlaviyo = null;\n  let klaviyoReturnTarget = null;\n  let klaviyoWasOpen = false;\n  let pendingKlaviyoReturn = null;\n\n  document.addEventListener(\n    \"focusin\",\n    (event) => {\n      if (!pendingKlaviyoReturn) return;\n      const { target, until } = pendingKlaviyoReturn;\n      if (performance.now() > until) {\n        pendingKlaviyoReturn = null;\n        return;\n      }\n      if (event.target === target) return;\n      // Only undo the focus Klaviyo moves to its teaser, not a move the user makes.\n      if (event.target.closest?.(\"[class*='Teaser'], [class*='teaser'], .needsclick\")) {\n        pendingKlaviyoReturn = null;\n        target.focus({ preventScroll: true });\n      }\n    },\n    true\n  );\n\n  document.addEventListener(\n    \"focusin\",\n    (event) => {\n      const target = event.target;\n      if (!(target instanceof HTMLElement) || target === document.body) return;\n      if (target.closest('[role=\"dialog\"][aria-modal=\"true\"]')?.querySelector(\".klaviyo-close-form\")) return;\n      lastFocusOutsideKlaviyo = target;\n    },\n    true\n  );\n\n  // aria-modal alone doesn't stop a screen reader's browse mode from reading the page behind the popup. While it\n  // is open, make every other top-level part of the page (header, main, footer, other apps) inert, and undo exactly\n  // that when it closes.\n  const setPageBehindKlaviyoInert = (modal) => {\n    if (modal) {\n      const popupRoot = Array.from(document.body.children).find((child) => child.contains(modal));\n      Array.from(document.body.children).forEach((child) => {\n        if (child === popupRoot || child.inert || /^(SCRIPT|STYLE|LINK|NOSCRIPT|TEMPLATE)$/.test(child.tagName)) return;\n        child.inert = true;\n        child.dataset.themeKlaviyoInert = \"true\";\n      });\n    } else {\n      document.querySelectorAll(\"[data-theme-klaviyo-inert]\").forEach((element) => {\n        element.inert = false;\n        delete element.dataset.themeKlaviyoInert;\n      });\n    }\n  };\n\n  const restoreFocusAfterKlaviyo = () => {\n    const openModal = findOpenKlaviyoModal();\n    const isOpen = Boolean(openModal);\n\n    if (isOpen && !klaviyoWasOpen) {\n      klaviyoReturnTarget = lastFocusOutsideKlaviyo;\n      setPageBehindKlaviyoInert(openModal);\n      // Klaviyo shows the modal first and only moves focus into it a moment later, so a keyboard user can still be\n      // on the page behind it (e.g. on the skip link it covers). Move focus in as soon as the modal is shown.\n      const modal = findOpenKlaviyoModal();\n      if (modal && !modal.contains(document.activeElement)) {\n        const firstControl =\n          modal.querySelector(\".klaviyo-close-form\") ||\n          modal.querySelector(\"button, a[href], input:not([type='hidden']), [tabindex]:not([tabindex='-1'])\");\n        firstControl?.focus();\n      }\n    } else if (!isOpen && klaviyoWasOpen) {\n      setPageBehindKlaviyoInert(null);\n      const target = klaviyoReturnTarget;\n      klaviyoReturnTarget = null;\n      if (target?.isConnected && target.getClientRects().length > 0) {\n        // Klaviyo moves focus to its corner teaser once its close animation ends; send it back from there.\n        pendingKlaviyoReturn = { target, until: performance.now() + 2000 };\n        target.focus({ preventScroll: true });\n      }\n    }\n    klaviyoWasOpen = isOpen;\n  };\n\n  const layerCookieBanner = () => {\n    const banner = document.querySelector(\"pandectes-cmp\");\n    if (!banner) return;\n\n    const isLowered = banner.dataset.themeLowered === \"true\";\n    if (findOpenKlaviyoModal()) {\n      if (!isLowered) {\n        banner.dataset.themeLowered = \"true\";\n        banner.dataset.themeZIndex = banner.style.getPropertyValue(\"z-index\");\n      }\n      if (banner.style.getPropertyValue(\"z-index\") !== \"1\") {\n        banner.style.setProperty(\"z-index\", \"1\", \"important\");\n      }\n      banner.inert = true;\n    } else if (isLowered) {\n      banner.style.setProperty(\"z-index\", banner.dataset.themeZIndex || \"\");\n      banner.inert = false;\n      delete banner.dataset.themeLowered;\n      delete banner.dataset.themeZIndex;\n    }\n  };\n\n  // The cookie banner floats in the middle of the screen without blocking the page, so a control that receives\n  // keyboard focus can end up underneath it (WCAG 2.4.11). When that happens, scroll the page so the focused control\n  // sits clear of the banner, above it when there is room and below it otherwise.\n  const getCookieBannerBox = () => {\n    const dialog = document.querySelector(\"pandectes-cmp\")?.shadowRoot?.querySelector(\"dialog[open], dialog.dialog\");\n    if (!dialog) return null;\n    const rect = dialog.getBoundingClientRect();\n    if (rect.width === 0 || rect.height === 0 || getComputedStyle(dialog).visibility === \"hidden\") return null;\n    return rect;\n  };\n\n  document.addEventListener(\n    \"focusin\",\n    (event) => {\n      const target = event.composedPath()[0];\n      if (!(target instanceof Element) || target.closest(\"pandectes-cmp\") || event.target.closest?.(\"pandectes-cmp\")) return;\n      const banner = getCookieBannerBox();\n      if (!banner) return;\n      const rect = target.getBoundingClientRect();\n      const overlaps =\n        rect.left < banner.right && rect.right > banner.left && rect.top < banner.bottom && rect.bottom > banner.top;\n      if (!overlaps) return;\n      const gap = 16;\n      const roomAbove = banner.top - gap;\n      const shift = rect.height <= roomAbove ? rect.bottom - roomAbove : rect.top - (banner.bottom + gap);\n      window.scrollBy({ top: shift, behavior: \"instant\" });\n    },\n    true\n  );\n\n  // \"Accessible color contrast\" (Theme settings > ADA related settings): apps paint white text on the brand orange\n  // (#e37e16 / #e67f2a, about 2.9:1) and orange text on white: Replo landing pages, the Skio \"Best Deal\" badge, the\n  // Klaviyo popup, the cart drawer's buttons. Their colors aren't in the theme's settings, so darken that orange to\n  // #a85208 (5.4:1 with white) on the elements themselves, including inside the apps' shadow roots.\n  if (document.documentElement.hasAttribute(\"data-ada-contrast\")) {\n    // Also the shades the Skio customer portal uses for \"Every 3 months\" (#e37d16) and its dates (#aa5e13).\n    const BRAND_ORANGES = new Set([\"227,126,22\", \"230,127,42\", \"227,125,22\", \"170,94,19\"]);\n    const DARK_ORANGE = \"rgb(168, 82, 8)\";\n    const rgbKey = (color) => {\n      const [red, green, blue, alpha] = color.match(/[\\d.]+/g) || [];\n      return alpha === undefined || Number(alpha) === 1 ? `${red},${green},${blue}` : \"\";\n    };\n    const isBrandOrange = (color) => BRAND_ORANGES.has(rgbKey(color));\n    // Text colors of the Skio customer portal (only inside it): its success green \"Surprise gift\" / savings /\n    // discounts (#16b364, 2.3\u20132.7:1) and its blue \"Add\" links (#4a6faf, 4.49:1).\n    const PORTAL_TEXT_COLORS = new Map([\n      [\"22,179,100\", \"rgb(8, 116, 67)\"],\n      [\"74,111,175\", \"rgb(60, 97, 158)\"]\n    ]);\n\n    const fixElement = (element) => {\n      const styles = getComputedStyle(element);\n      if (isBrandOrange(styles.backgroundColor)) {\n        element.style.setProperty(\"background-color\", DARK_ORANGE, \"important\");\n        if (isBrandOrange(styles.borderTopColor)) element.style.setProperty(\"border-color\", DARK_ORANGE, \"important\");\n      }\n      if (isBrandOrange(styles.color)) element.style.setProperty(\"color\", DARK_ORANGE, \"important\");\n      const portalColor = PORTAL_TEXT_COLORS.get(rgbKey(styles.color));\n      if (portalColor && element.closest(\"[data-skio-name]\")) element.style.setProperty(\"color\", portalColor, \"important\");\n    };\n\n    // Apps re-render and switch states (e.g. a selected option) through classes, so check again after changes,\n    // in the page and in the apps' shadow roots.\n    const observedRoots = new WeakSet();\n    let contrastTimer;\n    const fixAppContrast = () => {\n      const roots = [\n        document.body,\n        ...Array.from(document.querySelectorAll(\"skio-plan-picker, #upCart\"))\n          .map((host) => host.shadowRoot)\n          .filter(Boolean)\n      ];\n      roots.forEach((root) => {\n        root.querySelectorAll(\"*\").forEach(fixElement);\n        if (root !== document.body && !observedRoots.has(root)) {\n          observedRoots.add(root);\n          contrastObserver.observe(root, { childList: true, subtree: true, attributes: true, attributeFilter: [\"class\"] });\n        }\n      });\n    };\n    const contrastObserver = new MutationObserver(() => {\n      window.clearTimeout(contrastTimer);\n      contrastTimer = window.setTimeout(fixAppContrast, 300);\n    });\n    contrastObserver.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: [\"class\"] });\n    fixAppContrast();\n  }\n\n  let scheduled = false;\n  const syncAppPopups = () => {\n    if (scheduled) return;\n    scheduled = true;\n    // setTimeout rather than requestAnimationFrame: rAF is paused in background tabs, where popups still open.\n    window.setTimeout(() => {\n      scheduled = false;\n      placeChatAfterHeader();\n      hideEmptyGorgiasFrames();\n      layerCookieBanner();\n      restoreFocusAfterKlaviyo();\n    }, 50);\n  };\n\n  syncAppPopups();\n  // Klaviyo shows and hides its modal through inline styles and classes, so those changes are observed as well.\n  // The Klaviyo focus check runs straight away (not debounced) so focus moves into the modal as soon as it appears.\n  let fadeCheckTimers = [];\n  new MutationObserver(() => {\n    restoreFocusAfterKlaviyo();\n    syncAppPopups();\n    // The modal fades in and out with CSS, which isn't a DOM change, so check again as the fade runs.\n    fadeCheckTimers.forEach((timer) => window.clearTimeout(timer));\n    fadeCheckTimers = [100, 600].map((delay) =>\n      window.setTimeout(() => {\n        restoreFocusAfterKlaviyo();\n        layerCookieBanner();\n      }, delay)\n    );\n  }).observe(document.body || document.documentElement, {\n    childList: true,\n    subtree: true,\n    attributes: true,\n    attributeFilter: [\"style\", \"class\", \"aria-modal\"]\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
