{
  "version": 3,
  "sources": ["/cdn/shop/t/8/assets/view-transitions.js?autolucide_tracking=5"],
  "sourcesContent": ["\n/* AutoLucide - suivi du tunnel Scan, guides et achat (sans donnees personnelles) */\n(function () {\n  if (window.AutoLucideTrack) return;\n\n  window.dataLayer = window.dataLayer || [];\n  document.documentElement.setAttribute('data-autolucide-tracking', 'ready');\n\n  const scanEvents = new Set([\n    'scan_tool_viewed',\n    'scan_started',\n    'scan_analysis_launched',\n    'scan_completed',\n    'report_unlock_opened',\n    'report_unlocked','report_unlocked_email','premium_clicked','scan_report_viewed',\n    'scan_email_submitted',\n    'report_checkout_clicked',\n    'scan_demo_opened'\n  ]);\n\n  function clean(data) {\n    const output = {};\n    const blocked = /email|phone|name|address|vin|registration|message/i;\n\n    if (!data || typeof data !== 'object') return output;\n\n    Object.keys(data).forEach((key) => {\n      const value = data[key];\n      if (blocked.test(key)) return;\n      if (['string', 'number', 'boolean'].includes(typeof value)) {\n        output[key] = typeof value === 'string' ? value.slice(0, 160) : value;\n      }\n    });\n\n    return output;\n  }\n\n  window.AutoLucideTrack = function (eventName, data) {\n    if (!eventName || typeof eventName !== 'string') return;\n\n    const payload = Object.assign({\n      event: 'autolucide_' + eventName,\n      event_name: eventName,\n      page_path: location.pathname,\n      page_title: document.title,\n      event_time: new Date().toISOString()\n    }, clean(data));\n\n    window.dataLayer.push(payload);\n    document.documentElement.setAttribute('data-autolucide-last-event', eventName);\n\n    if (window.Shopify && Shopify.analytics && typeof Shopify.analytics.publish === 'function') {\n      Shopify.analytics.publish('autolucide:' + eventName, payload);\n    }\n\n    if (typeof window.gtag === 'function') {\n      window.gtag('event', eventName, payload);\n    }\n\n    if (typeof window.fbq === 'function') {\n      window.fbq('trackCustom', eventName, payload);\n    }\n  };\n\n  function pageType() {\n    if (location.pathname === '/') return 'home';\n    return location.pathname.split('/').filter(Boolean).slice(0, 2).join('/');\n  }\n\n  function trackPage() {\n    window.AutoLucideTrack('funnel_page_viewed', { page_type: pageType() });\n  }\n\n  document.addEventListener('click', (event) => {\n    const link = event.target.closest('a[href]');\n    if (!link) return;\n\n    let url;\n    try {\n      url = new URL(link.href, location.href);\n    } catch {\n      return;\n    }\n\n    const label = (link.textContent || '').trim().replace(/\\s+/g, ' ').slice(0, 120);\n    const path = url.pathname.toLowerCase();\n\n    if (path.includes('/pages/scan')) {\n      window.AutoLucideTrack('scan_cta_clicked', { link_path: url.pathname, link_label: label });\n    }\n\n    if (path.includes('/pages/guides')) {\n      window.AutoLucideTrack('guides_cta_clicked', { link_path: url.pathname, link_label: label });\n    }\n\n    if (path.includes('/products/') && /scan|rapport|analyse/.test((path + ' ' + label).toLowerCase())) {\n      window.AutoLucideTrack('report_checkout_clicked', { link_path: url.pathname, link_label: label });\n    }\n  }, { capture: true });\n\n  document.addEventListener('submit', (event) => {\n    const form = event.target;\n    if (!(form instanceof HTMLFormElement)) return;\n\n    const action = (form.getAttribute('action') || '').toLowerCase();\n    if (action.includes('/cart/add')) {\n      window.AutoLucideTrack('add_to_cart_submitted', { form_action: action });\n    }\n  }, { capture: true });\n\n  window.addEventListener('message', (event) => {\n    const message = event.data;\n    if (!message || message.source !== 'autolucide-scan' || !scanEvents.has(message.event)) return;\n    window.AutoLucideTrack(message.event, clean(message.data)); if(message.event === 'scan_completed') window.AutoLucideTrack('scan_report_viewed', clean(message.data));\n  });\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', trackPage, { once: true });\n  } else {\n    trackPage();\n  }\n})();\n\n(function () {\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 !(viewTransition instanceof ViewTransition) || isLowPowerDevice();\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": "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",
  "names": []
}
