{
  "version": 3,
  "sources": ["/cdn/shop/t/11/assets/ga4-tracker.js?t=1788549446"],
  "sourcesContent": ["/**\n * Style Suite - Google Analytics 4 Integration\n * \n * Tracks look attribution through GA4 with custom dimensions\n * No merchant approval required - works automatically\n */\n\n(function() {\n  'use strict';\n  \n  // GA4 Measurement ID - Style Suite Central Property\n  const GA4_MEASUREMENT_ID = 'G-HY7LVB19MZ';\n  \n  // Helper: Get look_id from URL or localStorage\n  function getLookId() {\n    try {\n      // 1. Check URL parameters\n      const urlParams = new URLSearchParams(window.location.search);\n      let lookId = urlParams.get('look_id') || \n                   urlParams.get('lookId') || \n                   urlParams.get('id');\n      \n      // 2. Check URL path for look pages (e.g., /pages/look/ootd-all-things-red-x6na4j)\n      if (!lookId && window.location.pathname.includes('/pages/look/')) {\n        const pathParts = window.location.pathname.split('/');\n        const lastPart = pathParts[pathParts.length - 1];\n        \n        if (lastPart && lastPart.length > 5) {\n          lookId = lastPart;\n        }\n      }\n      \n      // Store for persistence\n      if (lookId) {\n        localStorage.setItem('style_suite_look_id', lookId);\n        return lookId;\n      }\n      \n      // Fall back to localStorage\n      return localStorage.getItem('style_suite_look_id');\n    } catch (e) {\n      console.warn('Error getting look_id:', e);\n      return null;\n    }\n  }\n  \n  // Helper: Send event to GA4\n  function trackGA4Event(eventName, eventParams = {}) {\n    if (typeof gtag === 'undefined') {\n      console.warn('GA4 not loaded yet');\n      return;\n    }\n    \n    const lookId = getLookId();\n    \n    // Add look_id as custom dimension to all events\n    const params = {\n      ...eventParams,\n      look_id: lookId || 'none',\n      send_to: GA4_MEASUREMENT_ID\n    };\n    \n    gtag('event', eventName, params);\n    console.log('\uD83D\uDCCA GA4 Event:', eventName, params);\n  }\n  \n  // Initialize GA4\n  function initGA4() {\n    // Load gtag.js\n    const script = document.createElement('script');\n    script.async = true;\n    script.src = `https://www.googletagmanager.com/gtag/js?id=${GA4_MEASUREMENT_ID}`;\n    document.head.appendChild(script);\n    \n    // Initialize gtag\n    window.dataLayer = window.dataLayer || [];\n    function gtag(){dataLayer.push(arguments);}\n    window.gtag = gtag;\n    \n    gtag('js', new Date());\n    gtag('config', GA4_MEASUREMENT_ID, {\n      send_page_view: false, // We'll send manually with look_id\n      custom_map: {\n        dimension1: 'look_id' // Map look_id to custom dimension 1\n      }\n    });\n    \n    console.log('\u2705 GA4 initialized with look tracking');\n  }\n  \n  // Track page view with look_id\n  function trackPageView() {\n    const lookId = getLookId();\n    \n    trackGA4Event('page_view', {\n      page_title: document.title,\n      page_location: window.location.href,\n      page_path: window.location.pathname,\n      look_id: lookId || 'none'\n    });\n  }\n  \n  // Track look view/click\n  function trackLookView(lookId, lookTitle) {\n    trackGA4Event('view_item_list', {\n      item_list_id: lookId,\n      item_list_name: lookTitle,\n      look_id: lookId\n    });\n  }\n  \n  // Track engagement (carousel loaded, editorial opened, etc.)\n  function trackEngagement(action, data = {}) {\n    const lookId = getLookId();\n    \n    trackGA4Event('engagement', {\n      engagement_type: action,\n      look_id: lookId || data.lookId || 'none',\n      ...data\n    });\n  }\n  \n  // Track product view from look\n  function trackProductView(productId, productName, price, currency = 'USD') {\n    const lookId = getLookId();\n    \n    trackGA4Event('view_item', {\n      currency: currency,\n      value: parseFloat(price),\n      items: [{\n        item_id: productId,\n        item_name: productName,\n        price: parseFloat(price)\n      }],\n      look_id: lookId\n    });\n  }\n  \n  // Track add to cart from look\n  function trackAddToCart(productId, productName, price, quantity = 1, currency = 'USD') {\n    const lookId = getLookId();\n    \n    trackGA4Event('add_to_cart', {\n      currency: currency,\n      value: parseFloat(price) * quantity,\n      items: [{\n        item_id: productId,\n        item_name: productName,\n        price: parseFloat(price),\n        quantity: quantity\n      }],\n      look_id: lookId\n    });\n    \n    // Add look_id as cart attribute so it persists through checkout\n    if (lookId && lookId !== 'none') {\n      fetch('/cart/update.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({\n          attributes: {\n            look_id: lookId\n          }\n        })\n      }).catch(err => console.warn('Could not update cart attributes:', err));\n    }\n  }\n  \n  // Track begin checkout\n  function trackBeginCheckout(cartTotal, currency = 'USD') {\n    const lookId = getLookId();\n    \n    trackGA4Event('begin_checkout', {\n      currency: currency,\n      value: parseFloat(cartTotal),\n      look_id: lookId\n    });\n  }\n  \n  // Track purchase (on order confirmation page)\n  function trackPurchase(orderId, orderTotal, currency = 'USD', items = []) {\n    const lookId = getLookId();\n    \n    trackGA4Event('purchase', {\n      transaction_id: orderId,\n      value: parseFloat(orderTotal),\n      currency: currency,\n      items: items,\n      look_id: lookId\n    });\n    \n    // Clear look_id after purchase\n    try {\n      localStorage.removeItem('style_suite_look_id');\n    } catch (e) {\n      console.warn('Could not clear look_id:', e);\n    }\n  }\n  \n  // Auto-detect and track look page views\n  function autoTrackLookPages() {\n    const url = window.location.href;\n    \n    // Check if this is a look page\n    if (url.includes('/pages/look') || url.includes('look_id=') || url.includes('lookId=')) {\n      const lookId = getLookId();\n      if (lookId) {\n        console.log('\uD83D\uDC40 Look page detected:', lookId);\n        // Look title will be set by styled-look.js when it loads\n      }\n    }\n  }\n  \n  // Auto-detect order confirmation page\n  function autoTrackOrderConfirmation() {\n    // Check if this is the thank you page\n    if (window.location.pathname.includes('/thank') || \n        window.location.pathname.includes('/orders/') ||\n        window.Shopify?.checkout?.order_id) {\n      \n      const lookId = getLookId();\n      if (lookId && window.Shopify?.checkout) {\n        console.log('\u2705 Order confirmation detected with look:', lookId);\n        \n        // Track purchase with look attribution\n        const checkout = window.Shopify.checkout;\n        trackPurchase(\n          checkout.order_id,\n          checkout.total_price,\n          checkout.currency,\n          checkout.line_items?.map(item => ({\n            item_id: item.product_id,\n            item_name: item.title,\n            price: item.price,\n            quantity: item.quantity\n          }))\n        );\n      }\n    }\n  }\n  \n  // Intercept checkout to pass look_id via URL\n  function interceptCheckout() {\n    // Intercept all checkout button clicks\n    document.addEventListener('click', function(e) {\n      const checkoutButton = e.target.closest('a[href*=\"/checkout\"], button[name=\"checkout\"], a[href*=\"/cart\"]');\n      if (checkoutButton) {\n        const lookId = getLookId();\n        if (lookId && lookId !== 'none') {\n          // Store in sessionStorage for pixel to access\n          try {\n            sessionStorage.setItem('style_suite_look_id', lookId);\n          } catch (err) {}\n        }\n      }\n    });\n  }\n  \n  // Listen to Shopify theme events for automatic tracking\n  function setupShopifyEventListeners() {\n    // Track add to cart via theme events\n    document.addEventListener('submit', function(e) {\n      // Check if this is an add to cart form\n      if (e.target && e.target.querySelector('[name=\"add\"]')) {\n        const form = e.target;\n        const productId = form.querySelector('[name=\"id\"]')?.value;\n        const quantity = parseInt(form.querySelector('[name=\"quantity\"]')?.value || 1);\n        \n        if (productId) {\n          // Get product info from page\n          const productName = document.querySelector('.product-single__title, .product__title, h1')?.textContent?.trim();\n          const priceElement = document.querySelector('[data-product-price], .product__price, .price');\n          const price = priceElement ? parseFloat(priceElement.textContent.replace(/[^0-9.]/g, '')) : 0;\n          \n          console.log('\uD83D\uDED2 Add to cart detected:', productName);\n          trackAddToCart(productId, productName, price, quantity);\n        }\n      }\n    });\n    \n    // Track add to cart via AJAX (for themes using fetch/XHR)\n    const originalFetch = window.fetch;\n    window.fetch = function(...args) {\n      const url = args[0];\n      if (typeof url === 'string' && url.includes('/cart/add')) {\n        console.log('\uD83D\uDED2 AJAX add to cart detected');\n        \n        // Inject look_id into the request body as a cart attribute\n        const lookId = getLookId();\n        if (lookId && lookId !== 'none' && args[1] && args[1].body) {\n          try {\n            const body = JSON.parse(args[1].body);\n            \n            // Add look_id as a cart attribute (for Shop Pay compatibility)\n            if (!body.properties) {\n              body.properties = {};\n            }\n            body.properties._look_id = lookId;\n            \n            // Update the request body\n            args[1].body = JSON.stringify(body);\n            console.log('\u2705 Injected look_id into cart/add request:', lookId);\n          } catch (e) {\n            console.warn('Could not inject look_id into cart/add:', e);\n          }\n        }\n        \n        // Track after successful add\n        return originalFetch.apply(this, args).then(response => {\n          if (response.ok) {\n            response.clone().json().then(data => {\n              if (data.product_title) {\n                trackAddToCart(\n                  data.variant_id || data.id,\n                  data.product_title,\n                  data.price / 100, // Shopify returns price in cents\n                  data.quantity || 1\n                );\n              }\n            }).catch(() => {});\n          }\n          return response;\n        });\n      }\n      return originalFetch.apply(this, args);\n    };\n    \n    console.log('\u2705 Shopify event listeners setup');\n  }\n  \n  // Public API\n  window.StyleSuiteGA4 = {\n    track: trackGA4Event,\n    trackPageView: trackPageView,\n    trackLookView: trackLookView,\n    trackEngagement: trackEngagement,\n    trackProductView: trackProductView,\n    trackAddToCart: trackAddToCart,\n    trackCartAdd: trackAddToCart, // Alias for styled-look.js compatibility\n    trackBeginCheckout: trackBeginCheckout,\n    trackPurchase: trackPurchase,\n    getLookId: getLookId\n  };\n  \n  // Alias for backwards compatibility\n  window.StyleSuiteAnalytics = window.StyleSuiteGA4;\n  \n  // Initialize on load\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function() {\n      initGA4();\n      setupShopifyEventListeners();\n      interceptCheckout();\n      setTimeout(() => {\n        trackPageView();\n        autoTrackLookPages();\n        autoTrackOrderConfirmation();\n      }, 500);\n    });\n  } else {\n    initGA4();\n    setupShopifyEventListeners();\n    interceptCheckout();\n    setTimeout(() => {\n      trackPageView();\n      autoTrackLookPages();\n      autoTrackOrderConfirmation();\n    }, 500);\n  }\n  \n  console.log('\uD83D\uDCCA Style Suite GA4 Tracker loaded');\n})();\n"],
  "mappings": "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",
  "names": ["gtag"]
}
