{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/view-transitions.js?t=1793703301"],
  "sourcesContent": ["(function () {\n  // Reports on Meta's in-app browsers (Facebook, Instagram) that fail to paint during\n  // cross-document (MPA) View Transitions implementation that can freeze or\n  // white-screen the storefront on navigation. June 2026 testing.\n  // Remove check if every resolved.\n  if (isMetaInAppBrowser()) {\n    disableCrossDocumentViewTransitions();\n  }\n\n  const viewTransitionRenderBlocker = document.getElementById('view-transition-render-blocker');\n  // Remove the view transition render blocker if the user has reduced motion enabled or is on a low power device.\n  if (window.matchMedia('(prefers-reduced-motion: reduce)').matches || isLowPowerDevice()) {\n    viewTransitionRenderBlocker?.remove();\n  } else {\n    // If the browser didn't manage to parse the main content quickly, at least let the user see something.\n    // We're aiming for the FCP to be under 1.8 seconds since the navigation started.\n    const RENDER_BLOCKER_TIMEOUT_MS = Math.max(0, 1800 - performance.now());\n\n    setTimeout(() => {\n      viewTransitionRenderBlocker?.remove();\n    }, RENDER_BLOCKER_TIMEOUT_MS);\n  }\n\n  const idleCallback = typeof requestIdleCallback === 'function' ? requestIdleCallback : setTimeout;\n\n  window.addEventListener('pageswap', async (event) => {\n    const { viewTransition } = /** @type {PageSwapEvent} */ (event);\n\n    if (shouldSkipViewTransition(viewTransition)) {\n      /** @type {ViewTransition | null} */ (viewTransition)?.skipTransition();\n      return;\n    }\n\n    // Cancel view transition on user interaction to improve INP (Interaction to Next Paint)\n    ['pointerdown', 'keydown'].forEach((eventName) => {\n      document.addEventListener(\n        eventName,\n        () => {\n          viewTransition.skipTransition();\n        },\n        { once: true }\n      );\n    });\n\n    // Clean in case you landed on the pdp first. We want to remove the default transition type on the PDP media gallery so there is no duplicate transition name\n    document\n      .querySelectorAll('[data-view-transition-type]:not([data-view-transition-triggered])')\n      .forEach((element) => {\n        element.removeAttribute('data-view-transition-type');\n      });\n\n    const transitionTriggered = document.querySelector('[data-view-transition-triggered]');\n    const transitionType = transitionTriggered?.getAttribute('data-view-transition-type');\n\n    if (transitionType) {\n      viewTransition.types.clear();\n      viewTransition.types.add(transitionType);\n      sessionStorage.setItem('custom-transition-type', transitionType);\n    } else {\n      viewTransition.types.clear();\n      viewTransition.types.add('page-navigation');\n      sessionStorage.removeItem('custom-transition-type');\n    }\n  });\n\n  window.addEventListener('pagereveal', async (event) => {\n    const { viewTransition } = /** @type {PageRevealEvent} */ (event);\n\n    if (shouldSkipViewTransition(viewTransition)) {\n      /** @type {ViewTransition | null} */ (viewTransition)?.skipTransition();\n      return;\n    }\n\n    const customTransitionType = sessionStorage.getItem('custom-transition-type');\n\n    if (customTransitionType) {\n      viewTransition.types.clear();\n      viewTransition.types.add(customTransitionType);\n\n      await viewTransition.finished;\n\n      viewTransition.types.clear();\n      viewTransition.types.add('page-navigation');\n\n      idleCallback(() => {\n        sessionStorage.removeItem('custom-transition-type');\n        document.querySelectorAll('[data-view-transition-type]').forEach((element) => {\n          element.removeAttribute('data-view-transition-type');\n        });\n      });\n    } else {\n      viewTransition.types.clear();\n      viewTransition.types.add('page-navigation');\n    }\n  });\n\n  /**\n   * @param {ViewTransition | null} viewTransition\n   * @returns {viewTransition is null}\n   */\n  function shouldSkipViewTransition(viewTransition) {\n    return (\n      !(viewTransition instanceof ViewTransition) ||\n      isLowPowerDevice() ||\n      prefersReducedMotion() ||\n      isMetaInAppBrowser()\n    );\n  }\n\n  /**\n   * Detect Facebook / Instagram in-app browsers (Meta WebView).\n   *\n   * Meta's in-app browsers expose identifying tokens in the user-agent:\n   *   - Facebook: `FBAN`, `FBAV`, `FB_IAB`, `FBIOS`\n   *   - Instagram: `Instagram`\n   *\n   * We can't import this from utilities.js here (this file runs before modules),\n   * so the equivalent `isMetaInAppBrowser()` in utilities.js must be kept in sync.\n   * @param {string} [userAgent=navigator.userAgent] - User-agent string to test.\n   * @returns {boolean} True if running inside a Facebook/Instagram in-app browser.\n   */\n  function isMetaInAppBrowser(userAgent = navigator.userAgent) {\n    return /\\b(FBAN|FBAV|FB_IAB|FBIOS|Instagram)\\b/i.test(userAgent || '');\n  }\n\n  /**\n   * Disable cross-document (MPA) View Transitions for the current document.\n   *\n   * Overrides the standard `@view-transition { navigation: auto }` CSS opt-in\n   * and drops the render-blocking `<link rel=\"expect\">` so a stalled transition\n   * can never hold first paint (the white-screen symptom).\n   */\n  function disableCrossDocumentViewTransitions() {\n    // 1. Override the standard `@view-transition` opt-in. A later `@view-transition`\n    //    rule wins the cascade, so `navigation: none` here defeats base.css.\n    const style = document.createElement('style');\n    style.textContent = '@view-transition { navigation: none; }';\n    (document.head || document.documentElement).appendChild(style);\n\n    // 2. Never let the render blocker hold first paint on these browsers.\n    document.getElementById('view-transition-render-blocker')?.remove();\n  }\n\n  /*\n   * We can't import this logic from utilities.js here, but we should keep them in sync.\n   */\n  function prefersReducedMotion() {\n    return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  }\n\n  /*\n   * We can't import this logic from utilities.js here, but we should keep them in sync.\n   */\n  function isLowPowerDevice() {\n    /* Skip ESLint compatibility check. Number(undefined) <= 2 is always false anyway. */\n    /* eslint-disable-next-line compat/compat */\n    return Number(navigator.hardwareConcurrency) <= 2 || Number(navigator.deviceMemory) <= 2;\n  }\n})();\n"],
  "mappings": "CAAC,UAAY,CAKP,mBAAmB,GACrB,oCAAoC,EAGtC,MAAM,4BAA8B,SAAS,eAAe,gCAAgC,EAE5F,GAAI,OAAO,WAAW,kCAAkC,EAAE,SAAW,iBAAiB,EACpF,6BAA6B,OAAO,MAC/B,CAGL,MAAM,0BAA4B,KAAK,IAAI,EAAG,KAAO,YAAY,IAAI,CAAC,EAEtE,WAAW,IAAM,CACf,6BAA6B,OAAO,CACtC,EAAG,yBAAyB,CAC9B,CAEA,MAAM,aAAe,OAAO,qBAAwB,WAAa,oBAAsB,WAEvF,OAAO,iBAAiB,WAAY,MAAO,OAAU,CACnD,KAAM,CAAE,cAAe,EAAkC,MAEzD,GAAI,yBAAyB,cAAc,EAAG,CACN,gBAAiB,eAAe,EACtE,MACF,CAGA,CAAC,cAAe,SAAS,EAAE,QAAS,WAAc,CAChD,SAAS,iBACP,UACA,IAAM,CACJ,eAAe,eAAe,CAChC,EACA,CAAE,KAAM,EAAK,CACf,CACF,CAAC,EAGD,SACG,iBAAiB,mEAAmE,EACpF,QAAS,SAAY,CACpB,QAAQ,gBAAgB,2BAA2B,CACrD,CAAC,EAGH,MAAM,eADsB,SAAS,cAAc,kCAAkC,GACzC,aAAa,2BAA2B,EAEhF,gBACF,eAAe,MAAM,MAAM,EAC3B,eAAe,MAAM,IAAI,cAAc,EACvC,eAAe,QAAQ,yBAA0B,cAAc,IAE/D,eAAe,MAAM,MAAM,EAC3B,eAAe,MAAM,IAAI,iBAAiB,EAC1C,eAAe,WAAW,wBAAwB,EAEtD,CAAC,EAED,OAAO,iBAAiB,aAAc,MAAO,OAAU,CACrD,KAAM,CAAE,cAAe,EAAoC,MAE3D,GAAI,yBAAyB,cAAc,EAAG,CACN,gBAAiB,eAAe,EACtE,MACF,CAEA,MAAM,qBAAuB,eAAe,QAAQ,wBAAwB,EAExE,sBACF,eAAe,MAAM,MAAM,EAC3B,eAAe,MAAM,IAAI,oBAAoB,EAE7C,MAAM,eAAe,SAErB,eAAe,MAAM,MAAM,EAC3B,eAAe,MAAM,IAAI,iBAAiB,EAE1C,aAAa,IAAM,CACjB,eAAe,WAAW,wBAAwB,EAClD,SAAS,iBAAiB,6BAA6B,EAAE,QAAS,SAAY,CAC5E,QAAQ,gBAAgB,2BAA2B,CACrD,CAAC,CACH,CAAC,IAED,eAAe,MAAM,MAAM,EAC3B,eAAe,MAAM,IAAI,iBAAiB,EAE9C,CAAC,EAMD,SAAS,yBAAyB,eAAgB,CAChD,MACE,EAAE,0BAA0B,iBAC5B,iBAAiB,GACjB,qBAAqB,GACrB,mBAAmB,CAEvB,CAcA,SAAS,mBAAmB,UAAY,UAAU,UAAW,CAC3D,MAAO,0CAA0C,KAAK,WAAa,EAAE,CACvE,CASA,SAAS,qCAAsC,CAG7C,MAAM,MAAQ,SAAS,cAAc,OAAO,EAC5C,MAAM,YAAc,0CACnB,SAAS,MAAQ,SAAS,iBAAiB,YAAY,KAAK,EAG7D,SAAS,eAAe,gCAAgC,GAAG,OAAO,CACpE,CAKA,SAAS,sBAAuB,CAC9B,OAAO,OAAO,WAAW,kCAAkC,EAAE,OAC/D,CAKA,SAAS,kBAAmB,CAG1B,OAAO,OAAO,UAAU,mBAAmB,GAAK,GAAK,OAAO,UAAU,YAAY,GAAK,CACzF,CACF,GAAG",
  "names": []
}
