{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/juno-shop-events.js?t=1790734321217"],
  "sourcesContent": ["/**\n * Juno shop funnel log: what happens between landing on a product page and reaching\n * checkout, as anonymous rows in Juno's own Supabase (table shop_events, see\n * supabase/shop_events.sql). The quiz has its own log (quiz_events, juno-quiz-loader.js).\n *\n * Nothing sent identifies a person: no dog name, breed, email or IP. visit_id is a\n * random id for this page view, held in memory. session_id joins page views in one tab\n * (product page -> cart) and lives in sessionStorage only when the visitor has not\n * declined analytics in Shopify's cookie banner. Country and a bot flag are added by\n * the database from the request headers, so the browser never sends them.\n */\n(function() {\n  'use strict';\n\n  var ENDPOINT = 'https://wzsmlrgqcggcuixclant.supabase.co/rest/v1/shop_events';\n  var KEY = 'sb_publishable_HuAnV5Cv0Oefx8yPrFiItg_tP3runnf';\n  var SESSION_KEY = 'junoShopSession';\n  var CONSENT_WAIT_MS = 3000;\n\n  var script = document.currentScript;\n  var template = (script && script.getAttribute('data-template')) || '';\n  var productHandle = (script && script.getAttribute('data-product')) || '';\n  var page = template === 'product' ? 'product' : (template === 'cart' ? 'cart' : 'other');\n\n  function newId() {\n    return (window.crypto && typeof window.crypto.randomUUID === 'function')\n      ? window.crypto.randomUUID()\n      : 'v' + Date.now().toString(36) + Math.random().toString(36).slice(2, 12);\n  }\n\n  var visitId = newId();\n  var sessionId = '';\n  var consentKnown = false;\n  var waiting = [];\n  var sentOnce = {};\n  var startedAt = Date.now();\n\n  /** 'declined' when the visitor turned analytics off, 'ok' otherwise, null while the banner API loads. */\n  function readConsent() {\n    try {\n      var privacy = window.Shopify && window.Shopify.customerPrivacy;\n      if (!privacy || typeof privacy.currentVisitorConsent !== 'function') return null;\n      var consent = privacy.currentVisitorConsent() || {};\n      return consent.analytics === 'no' ? 'declined' : 'ok';\n    } catch (e) {\n      return null;\n    }\n  }\n\n  function settleConsent() {\n    if (consentKnown) return;\n    consentKnown = true;\n    if ((readConsent() || 'ok') === 'ok') {\n      try {\n        sessionId = sessionStorage.getItem(SESSION_KEY) || '';\n        if (!sessionId) {\n          sessionId = newId();\n          sessionStorage.setItem(SESSION_KEY, sessionId);\n        }\n      } catch (e) {\n        sessionId = '';\n      }\n    }\n    var queued = waiting;\n    waiting = [];\n    queued.forEach(function(args) { post(args[0], args[1], args[2]); });\n  }\n\n  if (readConsent()) {\n    settleConsent();\n  } else {\n    try {\n      if (window.Shopify && typeof window.Shopify.loadFeatures === 'function') {\n        window.Shopify.loadFeatures([{ name: 'consent-tracking-api', version: '0.1' }], settleConsent);\n      }\n    } catch (e) {}\n    setTimeout(settleConsent, CONSENT_WAIT_MS);\n  }\n\n  document.addEventListener('visitorConsentCollected', function(event) {\n    var detail = (event && event.detail) || {};\n    if (detail.analyticsAllowed === false) {\n      sessionId = '';\n      try { sessionStorage.removeItem(SESSION_KEY); } catch (e) {}\n    }\n  });\n\n  /**\n   * Log one event. detail is a short code (never free text the visitor typed), value a\n   * whole number (seconds, pence). once: only the first of this key per page view.\n   */\n  function track(event, detail, value, once) {\n    if (once) {\n      var key = event + ':' + (detail || '');\n      if (sentOnce[key]) return;\n      sentOnce[key] = true;\n    }\n    if (!consentKnown) {\n      waiting.push([event, detail, value]);\n      return;\n    }\n    post(event, detail, value);\n  }\n\n  function post(event, detail, value) {\n    var summary = typeof window.junoGetAttributionSummary === 'function' ? window.junoGetAttributionSummary() : {};\n    var body = new URLSearchParams({\n      visit_id: visitId,\n      event: event,\n      page: page,\n      channel: String(summary.last_channel || 'unknown').slice(0, 40),\n      ad: String(summary.paid_ad || '').slice(0, 200),\n      device: window.matchMedia && window.matchMedia('(max-width: 749px)').matches ? 'mobile' : 'desktop'\n    });\n    if (sessionId) body.set('session_id', sessionId);\n    if (productHandle) body.set('product', productHandle.slice(0, 100));\n    if (detail) body.set('detail', String(detail).slice(0, 80));\n    if (typeof value === 'number' && isFinite(value)) body.set('value', String(Math.max(0, Math.round(value))));\n    // Form-encoded + key in the URL: a \"simple\" request (no CORS preflight) that\n    // sendBeacon still delivers while the page unloads.\n    var url = ENDPOINT + '?apikey=' + encodeURIComponent(KEY);\n    try {\n      if (navigator.sendBeacon && navigator.sendBeacon(url, body)) return;\n      if (window.fetch) window.fetch(url, { method: 'POST', body: body, keepalive: true, mode: 'no-cors' }).catch(function() {});\n    } catch (e) {}\n  }\n\n  /** Everything still queued goes now: the page is going away. */\n  function flushNow() {\n    if (!consentKnown) settleConsent();\n  }\n\n  // ---------------------------------------------------------------------------\n  // Page views, how far down people scroll and how long they stay.\n  // ---------------------------------------------------------------------------\n  if (page !== 'other') track('page_viewed', template, null, true);\n\n  var maxScroll = 0;\n  function readScroll() {\n    var doc = document.documentElement;\n    var height = Math.max(doc.scrollHeight - window.innerHeight, 1);\n    var pct = Math.min(100, Math.round(((window.scrollY || doc.scrollTop || 0) / height) * 100));\n    if (pct > maxScroll) maxScroll = pct;\n  }\n\n  var leftLogged = false;\n  function logLeft() {\n    if (leftLogged || page === 'other') return;\n    leftLogged = true;\n    readScroll();\n    // Deepest scroll in quarters: \"scroll_0\" (top quarter) to \"scroll_75\" (bottom quarter or more).\n    var bucket = maxScroll >= 75 ? 75 : (maxScroll >= 50 ? 50 : (maxScroll >= 25 ? 25 : 0));\n    flushNow();\n    track('page_left', 'scroll_' + bucket, Math.min((Date.now() - startedAt) / 1000, 86400));\n  }\n\n  if (page !== 'other') {\n    window.addEventListener('scroll', readScroll, { passive: true });\n    // pagehide is unreliable on iOS; the first time the tab is hidden counts as leaving.\n    window.addEventListener('pagehide', logLeft);\n    document.addEventListener('visibilitychange', function() {\n      if (document.visibilityState === 'hidden') logLeft();\n    });\n  }\n\n  // ---------------------------------------------------------------------------\n  // Product page: which parts of the page were seen, and each choice in the form.\n  // ---------------------------------------------------------------------------\n  var lastPlan = '';\n\n  /** Section key from Shopify's wrapper id, e.g. shopify-section-template--123__premium_ingredient_carousel_PB8e8r -> premium_ingredient_carousel. */\n  function sectionKey(el) {\n    var match = /template--[^_]+__(.+)$/.exec(el.id || '');\n    if (!match) return '';\n    return match[1].replace(/_[A-Za-z0-9]{6}$/, '').slice(0, 60);\n  }\n\n  function watchSections() {\n    if (!('IntersectionObserver' in window)) return;\n    var targets = [];\n    document.querySelectorAll('.shopify-section[id*=\"template--\"]').forEach(function(el) {\n      var key = sectionKey(el);\n      if (key) targets.push([el, key]);\n    });\n    // The price and the add button live inside the main section; watch them on their own.\n    [['.juno-subscription-form-v3 .purchase-section', 'price'],\n     ['.juno-subscription-form-v3 .add-to-cart-btn', 'add_button'],\n     ['#judgeme_product_reviews, .jdgm-review-widget', 'judgeme_reviews'],\n     ['#juno-faq-section', 'faq']].forEach(function(pair) {\n      var el = document.querySelector(pair[0]);\n      if (el) targets.push([el, pair[1]]);\n    });\n    // Seen = entered the top 60% of the screen.\n    var observer = new IntersectionObserver(function(entries) {\n      entries.forEach(function(entry) {\n        if (!entry.isIntersecting) return;\n        observer.unobserve(entry.target);\n        track('section_seen', entry.target.getAttribute('data-shop-events-key'), null, true);\n      });\n    }, { rootMargin: '0px 0px -40% 0px', threshold: 0 });\n    targets.forEach(function(pair) {\n      pair[0].setAttribute('data-shop-events-key', pair[1]);\n      observer.observe(pair[0]);\n    });\n  }\n\n  /** Which of name / breed / size is still empty, e.g. \"missing_name_breed\", or \"ready\". */\n  function formGaps() {\n    var gaps = [];\n    var name = document.getElementById('property-dog-name');\n    var breed = document.getElementById('property-dog-breed');\n    if (name && !name.value.trim()) gaps.push('name');\n    if (breed && !breed.value.trim()) gaps.push('breed');\n    if (document.querySelector('.juno-subscription-form-v3 .size-btn') &&\n        !document.querySelector('.juno-subscription-form-v3 .size-btn.active')) gaps.push('size');\n    return gaps.length ? 'missing_' + gaps.join('_') : 'ready';\n  }\n\n  var lastCartClickAt = 0;\n  var CART_BUTTONS = [\n    ['#mobile-sticky-cta-button', 'sticky_mobile'],\n    ['#juno-header-buy-button', 'header_strip'],\n    ['#widget-cta-btn, #widget-cta-submit', 'widget'],\n    ['.add-to-cart-btn', 'main_form'],\n    ['form[action*=\"/cart/add\"] [type=\"submit\"]', 'other_form']\n  ];\n\n  // Capture phase: the form's own handlers stop propagation on these clicks.\n  document.addEventListener('click', function(event) {\n    var target = event.target;\n    if (!target || !target.closest) return;\n\n    var size = target.closest('.size-btn');\n    if (size) {\n      // The form clicks a size itself on load (saved or default size); only count real taps.\n      if (event.isTrusted) track('size_selected', size.getAttribute('data-size') || '', null);\n      return;\n    }\n\n    for (var i = 0; i < CART_BUTTONS.length; i++) {\n      if (target.closest(CART_BUTTONS[i][0])) {\n        // The sticky and header buttons click the main button for you; count the tap once.\n        if (CART_BUTTONS[i][1] === 'main_form' && Date.now() - lastCartClickAt < 400) return;\n        lastCartClickAt = Date.now();\n        var gaps = formGaps();\n        track('cart_clicked', CART_BUTTONS[i][1] + ':' + gaps, null);\n        // Name and breed are optional since 2026-09-30; only a missing size stops the add.\n        if (/size/.test(gaps) && page === 'product') track('cart_blocked', 'missing_size', null);\n        return;\n      }\n    }\n\n    // Cart page and drawer: an overlay locks checkout until the terms box is ticked\n    // (the --disabled class stays on either way, so read the box itself).\n    var buttons = target.closest('[data-cart-checkout-buttons]');\n    var form = buttons && buttons.closest('form');\n    var terms = form && form.querySelector('[data-cart-acceptance-checkbox]');\n    if (terms && !terms.checked) {\n      track('checkout_blocked', 'terms_not_ticked', null);\n    }\n  }, true);\n\n  document.addEventListener('change', function(event) {\n    var target = event.target;\n    if (!target) return;\n    // Programmatic changes (the form restoring or defaulting a plan) are not choices.\n    if (!event.isTrusted) return;\n    if (target.classList && target.classList.contains('purchase-radio') && target.checked) {\n      lastPlan = target.value || '';\n      track('plan_selected', lastPlan, null);\n    } else if (target.id === 'property-dog-name' && target.value.trim()) {\n      track('dog_name_entered', '', null, true);\n    } else if (target.id === 'property-dog-breed' && target.value.trim()) {\n      track('dog_breed_entered', '', null, true);\n    } else if (target.id === 'juno-header-size-dropdown' && target.value) {\n      track('size_selected', target.value, null);\n    } else if (target.matches && target.matches('[data-cart-acceptance-checkbox]') && target.checked) {\n      track('terms_ticked', '', null, true);\n    }\n  }, true);\n\n  // Messages the form shows under the button when an add fails.\n  function watchFormErrors() {\n    var box = document.querySelector('.juno-subscription-form-v3 .error-message');\n    var text = box && box.querySelector('.error-text');\n    if (!box || !text || !('MutationObserver' in window)) return;\n    var lastShown = '';\n    new MutationObserver(function() {\n      var visible = box.style.display !== 'none';\n      var message = visible ? (text.textContent || '') : '';\n      if (!message || message === lastShown) { lastShown = message; return; }\n      lastShown = message;\n      var code = /name and breed/i.test(message) ? 'name_or_breed'\n        : /appropriate name/i.test(message) ? 'name_rejected'\n        : /select a size/i.test(message) ? 'size_or_plan'\n        : /unavailable|sold out/i.test(message) ? 'unavailable'\n        : /timed out/i.test(message) ? 'timeout'\n        : 'other';\n      track('cart_error', code, null);\n    }).observe(box, { attributes: true, attributeFilter: ['style'], childList: true, subtree: true, characterData: true });\n  }\n\n  // ---------------------------------------------------------------------------\n  // Add to cart (any AJAX add on any page) and checkout.\n  // ---------------------------------------------------------------------------\n  function cartAddUrl(input) {\n    var url = typeof input === 'string' ? input : (input && input.url) || '';\n    return /\\/cart\\/add(\\.js)?(\\?|$)/.test(url);\n  }\n\n  function logAdded(cart) {\n    var items = (cart && Array.isArray(cart.items)) ? cart.items : (cart && cart.variant_id ? [cart] : []);\n    var pence = 0;\n    var subscription = false;\n    items.forEach(function(item) {\n      pence += item.final_line_price || item.line_price || 0;\n      if (item.selling_plan_allocation) subscription = true;\n    });\n    var plan = page === 'product' && lastPlan ? lastPlan : (subscription ? 'subscription' : 'one_time');\n    track('added_to_cart', plan, pence || null);\n  }\n\n  // Wraps whatever fetch is current (juno-quiz-loader.js wraps it too, for the cart attributes).\n  if (window.fetch) {\n    var priorFetch = window.fetch;\n    window.fetch = function(input) {\n      var request = priorFetch.apply(window, arguments);\n      try {\n        if (cartAddUrl(input)) {\n          request.then(function(res) {\n            if (!res) return;\n            if (!res.ok) {\n              track('cart_error', 'http_' + res.status, null);\n              return;\n            }\n            res.clone().json().then(logAdded).catch(function() { logAdded(null); });\n          }).catch(function() { track('cart_error', 'network', null); });\n        }\n      } catch (e) {}\n      return request;\n    };\n  }\n\n  document.addEventListener('submit', function(event) {\n    var form = event.target;\n    var action = form && form.getAttribute ? (form.getAttribute('action') || '').split('?')[0] : '';\n    // Full-page add to cart: the page is about to go, so no response to read.\n    if (/\\/cart\\/add\\/?$/.test(action)) {\n      flushNow();\n      track('added_to_cart', lastPlan || 'form_post', null);\n      return;\n    }\n    var submitter = event.submitter;\n    if (/\\/cart\\/?$/.test(action) && (!submitter || submitter.name === 'checkout')) {\n      flushNow();\n      track('checkout_clicked', form.closest('.drawer, [data-cart-drawer], cart-drawer') ? 'drawer' : page, null, true);\n    }\n  }, true);\n\n  function onReady() {\n    if (page === 'product') {\n      watchSections();\n      watchFormErrors();\n    }\n  }\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', onReady);\n  } else {\n    onReady();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
