{
  "version": 3,
  "sources": ["/cdn/shop/t/46/assets/gsf-spd-cart-m2-price-fix.js?tm_release=1787228148"],
  "sourcesContent": ["/**\n * Keeps Simprosys Google automated-discount prices aligned with Shopify's\n * authoritative cart state. Simprosys can apply the discount after the theme\n * has already rendered its AJAX cart response, and more than one cart line can\n * receive a GSF-SPD discount. This adapter keeps a short-lived registry of the\n * offers that Simprosys has confirmed, then reconciles all eligible cart lines\n * together after each cart mutation.\n *\n * Shopify prices remain the source of truth. The adapter only changes display:\n * /box lines show the discounted /m2 price plus the /box reference; all other\n * units retain their configured label. Shopify's native discount label remains\n * untouched while this adapter reconciles line totals, coverage, and subtotal.\n * When Simprosys has supplied a valid offer for an added variant but Shopify's\n * settled cart still has no matching GSF-SPD allocation, the adapter exposes a\n * neutral warning beside checkout and continues to show Shopify's actual price.\n */\n(function () {\n  if (window.__gsfSpdCartM2PriceFixLoaded) return;\n  window.__gsfSpdCartM2PriceFixLoaded = true;\n\n  var GOOGLE_DISCOUNT_PREFIX = 'GSF-SPD-';\n  var FAILED_OFFERS_STORAGE_KEY = 'tm_gsf_failed_offer_variants_v1';\n  var OFFER_REPAIR_STORAGE_KEY = 'tm_gsf_offer_repair_v1';\n  var VERIFIED_OFFERS_STORAGE_KEY = 'tm_gsf_verified_offers_v2';\n  var OFFER_REPAIR_TTL = 2 * 60 * 1000;\n  var OFFER_REPAIR_COOLDOWN = 800;\n  var VERIFIED_OFFER_TTL = 48 * 60 * 60 * 1000;\n  var MAX_PRODUCT_OR_ORDER_DISCOUNT_CODES = 5;\n  var RETRY_DELAYS = [0, 400, 1200];\n  var OFFER_SETTLE_DELAY = RETRY_DELAYS[RETRY_DELAYS.length - 1];\n  var lastCart = null;\n  var lastDiscountsByStateKey = new Map();\n  var pendingOffersByVariant = new Map();\n  var failedOfferVariantIds = loadFailedOfferVariantIds();\n  var offerRepairMarker = loadOfferRepairMarker();\n  var repairVerificationPending = !!offerRepairMarker;\n  var offerWarningReady = false;\n  var refreshInFlight = false;\n  var refreshQueued = false;\n  var queuedRefreshFinalizers = [];\n  var retryTimers = [];\n  var retryWindowForPendingOffers = false;\n  var offerRepairQueue = Promise.resolve();\n  var verifiedOffersByVariant = loadVerifiedOffers();\n  var landingOfferRequest = null;\n  var offerRequestsByVariant = new Map();\n\n  function readCookie(name) {\n    if (typeof window.gsfSPDGetCookie === 'function') {\n      var viaSimprosys = window.gsfSPDGetCookie(name);\n      if (viaSimprosys) return viaSimprosys;\n    }\n    var escaped = name.replace(/([.$?*|{}()[\\]\\\\/^])/g, '\\\\$1');\n    var match = document.cookie.match(new RegExp('(?:^|; )' + escaped + '=([^;]*)'));\n    return match ? decodeURIComponent(match[1]) : null;\n  }\n\n  function normalizeVerifiedOffer(rawOffer) {\n    if (!rawOffer) return null;\n    var variantId = String(rawOffer.variantId || rawOffer.variant_id || '');\n    var code = String(rawOffer.code || rawOffer.discount_code || '').trim();\n    var currentPrice = parseFloat(rawOffer.currentPrice || rawOffer.current_price);\n    var finalPrice = parseFloat(rawOffer.finalPrice || rawOffer.new_price);\n    var acceptedAt = Number(rawOffer.acceptedAt) || Date.now();\n    var expiresAt = Number(rawOffer.expiresAt) || acceptedAt + VERIFIED_OFFER_TTL;\n    if (!variantId || !isGoogleDiscountTitle(code) || !(currentPrice > finalPrice && finalPrice > 0)) return null;\n    if (!(expiresAt > Date.now())) return null;\n    return {\n      variantId: variantId,\n      code: code,\n      currentPrice: currentPrice,\n      finalPrice: finalPrice,\n      acceptedAt: acceptedAt,\n      expiresAt: expiresAt\n    };\n  }\n\n  function loadVerifiedOffers() {\n    var offers = new Map();\n    try {\n      var stored = JSON.parse(window.localStorage.getItem(VERIFIED_OFFERS_STORAGE_KEY) || '[]');\n      if (!Array.isArray(stored)) return offers;\n      stored.forEach(function (rawOffer) {\n        var offer = normalizeVerifiedOffer(rawOffer);\n        if (offer) offers.set(offer.variantId, offer);\n      });\n    } catch (error) {\n      // Simprosys and Shopify continue to work when browser storage is unavailable.\n    }\n    return offers;\n  }\n\n  function persistVerifiedOffers() {\n    try {\n      window.localStorage.setItem(\n        VERIFIED_OFFERS_STORAGE_KEY,\n        JSON.stringify(Array.from(verifiedOffersByVariant.values()))\n      );\n    } catch (error) {\n      // Keep the in-memory registry for the current page when storage is unavailable.\n    }\n  }\n\n  function rememberVerifiedOffer(rawOffer) {\n    var acceptedAt = Date.now();\n    var offer = normalizeVerifiedOffer(Object.assign({}, rawOffer, {\n      acceptedAt: acceptedAt,\n      expiresAt: acceptedAt + VERIFIED_OFFER_TTL\n    }));\n    if (!offer) return null;\n    verifiedOffersByVariant.set(offer.variantId, offer);\n    persistVerifiedOffers();\n    return offer;\n  }\n\n  function verifiedOfferForVariant(variantId) {\n    var normalizedVariantId = String(variantId || '');\n    var offer = verifiedOffersByVariant.get(normalizedVariantId);\n    if (!offer) return null;\n    if (Number(offer.expiresAt) <= Date.now()) {\n      verifiedOffersByVariant.delete(normalizedVariantId);\n      persistVerifiedOffers();\n      return null;\n    }\n    return offer;\n  }\n\n  function parseMoney(text) {\n    var match = String(text || '').replace(/,/g, '').match(/-?\\d+(?:\\.\\d+)?/);\n    return match ? parseFloat(match[0]) : NaN;\n  }\n\n  function centsToAmount(cents) {\n    return Number(cents || 0) / 100;\n  }\n\n  function formatMoney(amount) {\n    return '$' + amount.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n  }\n\n  function formatArea(amount) {\n    return (Math.round(amount * 100) / 100).toFixed(2).replace(/\\.?0+$/, '') + ' m\u00B2';\n  }\n\n  function readUomInput(priceWrap) {\n    return priceWrap ? (priceWrap.getAttribute('data-uom-input') || '').trim() : '';\n  }\n\n  function supportsUnit(uomInput, tileArea) {\n    return !!uomInput && (uomInput !== '/box' || tileArea > 0);\n  }\n\n  function isGoogleDiscountTitle(title) {\n    return String(title || '').trim().toUpperCase().indexOf(GOOGLE_DISCOUNT_PREFIX) === 0;\n  }\n\n  function uniqueGoogleTitles(titles) {\n    var seen = new Set();\n    return titles.filter(function (title) {\n      var normalized = String(title || '').trim();\n      var key = normalized.toUpperCase();\n      if (!isGoogleDiscountTitle(normalized) || seen.has(key)) return false;\n      seen.add(key);\n      return true;\n    });\n  }\n\n  function googleTitlesFromItem(item) {\n    var titles = [];\n    if (Array.isArray(item.discounts)) {\n      item.discounts.forEach(function (discount) {\n        if (discount && discount.title) titles.push(discount.title);\n      });\n    }\n    if (Array.isArray(item.line_level_discount_allocations)) {\n      item.line_level_discount_allocations.forEach(function (allocation) {\n        var application = allocation && allocation.discount_application;\n        if (application && application.title) titles.push(application.title);\n      });\n    }\n    return uniqueGoogleTitles(titles);\n  }\n\n  function googleTitlesFromRow(row) {\n    return uniqueGoogleTitles(Array.prototype.reduce.call(row.querySelectorAll('.discount'), function (titles, label) {\n      if (!label.closest('.gsf-spd-cart-discounts')) titles.push(label.textContent || '');\n      return titles;\n    }, []));\n  }\n\n  function loadFailedOfferVariantIds() {\n    try {\n      var stored = JSON.parse(window.sessionStorage.getItem(FAILED_OFFERS_STORAGE_KEY) || '[]');\n      return new Set(Array.isArray(stored) ? stored.map(String) : []);\n    } catch (error) {\n      return new Set();\n    }\n  }\n\n  function persistFailedOfferVariantIds() {\n    try {\n      window.sessionStorage.setItem(FAILED_OFFERS_STORAGE_KEY, JSON.stringify(Array.from(failedOfferVariantIds)));\n    } catch (error) {\n      // The warning still works for the current document when storage is unavailable.\n    }\n  }\n\n  function loadOfferRepairMarker() {\n    try {\n      var marker = JSON.parse(window.sessionStorage.getItem(OFFER_REPAIR_STORAGE_KEY) || 'null');\n      if (!marker || !marker.variantId || Date.now() - Number(marker.attemptedAt) > OFFER_REPAIR_TTL) {\n        window.sessionStorage.removeItem(OFFER_REPAIR_STORAGE_KEY);\n        return null;\n      }\n      return marker;\n    } catch (error) {\n      return null;\n    }\n  }\n\n  function saveOfferRepairMarker(marker) {\n    offerRepairMarker = marker;\n    repairVerificationPending = true;\n    try {\n      window.sessionStorage.setItem(OFFER_REPAIR_STORAGE_KEY, JSON.stringify(marker));\n    } catch (error) {\n      // The in-memory marker still prevents a redirect loop in this document.\n    }\n  }\n\n  function clearOfferRepairMarker(variantId) {\n    if (!offerRepairMarker || String(offerRepairMarker.variantId) !== String(variantId)) return;\n    offerRepairMarker = null;\n    repairVerificationPending = false;\n    try {\n      window.sessionStorage.removeItem(OFFER_REPAIR_STORAGE_KEY);\n    } catch (error) {\n      // No action is required when storage is unavailable.\n    }\n  }\n\n  function recentRepairExists(variantId, finalPrice) {\n    if (!offerRepairMarker) return false;\n    return String(offerRepairMarker.variantId) === String(variantId) &&\n      Math.abs(Number(offerRepairMarker.finalPrice) - Number(finalPrice)) < 0.01 &&\n      Date.now() - Number(offerRepairMarker.attemptedAt) < OFFER_REPAIR_COOLDOWN;\n  }\n\n  function googleOfferFromUrl(variantId) {\n    try {\n      var params = new URLSearchParams(window.location.search);\n      if (String(params.get('variant') || '') !== String(variantId)) return null;\n      var token = params.get('pv2');\n      var encodedPayload = token && token.split('.')[1];\n      if (!encodedPayload) return null;\n      var normalizedPayload = encodedPayload.replace(/-/g, '+').replace(/_/g, '/');\n      while (normalizedPayload.length % 4) normalizedPayload += '=';\n      var payload = JSON.parse(window.atob(normalizedPayload));\n      var finalPrice = parseFloat(payload && payload.p);\n      return finalPrice > 0 ? { variantId: String(variantId), finalPrice: finalPrice } : null;\n    } catch (error) {\n      return null;\n    }\n  }\n\n  function expectedGoogleOffer(variantId) {\n    var normalizedVariantId = String(variantId || '');\n    if (!normalizedVariantId) return null;\n\n    var landingOffer = googleOfferFromUrl(normalizedVariantId);\n    if (landingOffer) return landingOffer;\n\n    var registeredOffer = verifiedOfferForVariant(normalizedVariantId);\n    if (registeredOffer) return registeredOffer;\n\n    var raw = readCookie('gsf_spd_final_data_' + normalizedVariantId);\n    if (raw) {\n      try {\n        var data = JSON.parse(raw);\n        var cachedOffer = rememberVerifiedOffer(data);\n        if (cachedOffer) {\n          return cachedOffer;\n        }\n      } catch (error) {\n        // Fall through to the signed Google landing-page data.\n      }\n    }\n\n    return null;\n  }\n\n  function validatedOfferData(rawData, offer) {\n    var data = rawData && rawData.data ? rawData.data : rawData;\n    if (!data || String(data.variant_id || '') !== String(offer.variantId)) return null;\n    var currentPrice = parseFloat(data.current_price);\n    var newPrice = parseFloat(data.new_price);\n    var discountCode = String(data.discount_code || '').trim();\n    if (!(currentPrice > newPrice && newPrice > 0)) return null;\n    if (Math.abs(Math.round(newPrice * 100) - Math.round(Number(offer.finalPrice) * 100)) > 1) return null;\n    if (!isGoogleDiscountTitle(discountCode)) return null;\n    return {\n      code: discountCode,\n      currentPrice: currentPrice,\n      finalPrice: newPrice,\n      variantId: String(data.variant_id)\n    };\n  }\n\n  function cachedOfferData(offer) {\n    var registeredOffer = verifiedOfferForVariant(offer.variantId);\n    if (registeredOffer &&\n        Math.abs(Math.round(registeredOffer.finalPrice * 100) - Math.round(Number(offer.finalPrice) * 100)) <= 1) {\n      return registeredOffer;\n    }\n    var raw = readCookie('gsf_spd_final_data_' + offer.variantId);\n    if (!raw) return null;\n    try {\n      var cachedOffer = validatedOfferData(JSON.parse(raw), offer);\n      return cachedOffer ? rememberVerifiedOffer(cachedOffer) : null;\n    } catch (error) {\n      return null;\n    }\n  }\n\n  function simprosysProductForVariant(variantId) {\n    var root = window.gsf_spd_data;\n    var products = root && root.data && root.data.product_data;\n    if (!Array.isArray(products)) return null;\n    return products.find(function (product) {\n      return String(product && product.variant_id) === String(variantId);\n    }) || null;\n  }\n\n  function persistSimprosysOfferData(data) {\n    if (!data || typeof window.gsfSPDSetCookie !== 'function') return;\n    var variantId = String(data.variant_id || '');\n    var productId = String(data.product_id || '');\n    var expiryMinutes = parseFloat(data.exp_time_minutes) || 60;\n    if (!variantId) return;\n\n    window.gsfSPDSetCookie('gsf_spd_final_data_' + variantId, JSON.stringify(data), expiryMinutes);\n    window.gsfSPDSetCookie('gsf_spd_active_variant', variantId, expiryMinutes);\n    if (typeof window.gsfSPDRemoveCookie === 'function') {\n      window.gsfSPDRemoveCookie('gsf_spd_is_updated_' + variantId);\n    }\n    if (productId && data.apply_product_discount !== undefined) {\n      window.gsfSPDSetCookie(\n        'gsf_spd_apply_product_discount_' + productId,\n        data.apply_product_discount,\n        expiryMinutes\n      );\n    }\n  }\n\n  function requestOfferData(offer) {\n    var pendingRequest = offerRequestsByVariant.get(String(offer.variantId));\n    if (pendingRequest) return pendingRequest;\n    var product = simprosysProductForVariant(offer.variantId);\n    var params = new URLSearchParams(window.location.search);\n    var token = params.get('pv2');\n    if (!product || !token || String(params.get('variant') || '') !== String(offer.variantId)) {\n      return Promise.resolve(null);\n    }\n\n    var shopify = window.Shopify || {};\n    var currency = shopify.currency || {};\n    var payload = {\n      token: token,\n      shop_domain: window.gsf_spd_shop_domain || shopify.shop || window.location.hostname,\n      variant_id: String(product.variant_id),\n      product_id: String(product.product_id),\n      current_price: parseFloat(product.price),\n      simp_token: params.get('simp_token') || '',\n      sku: product.sku || '',\n      shopify_currency_rate: parseFloat(currency.rate) || 1,\n      shopify_currency: currency.active || '',\n      timestamp: Date.now() / 1000\n    };\n\n    var request = window.fetch('/apps/gsf/gad?t=' + Date.now(), {\n      method: 'POST',\n      credentials: 'same-origin',\n      headers: { 'Content-Type': 'application/json; charset=utf-8' },\n      body: JSON.stringify(payload)\n    }).then(function (response) {\n      if (!response.ok) throw new Error('Simprosys offer request returned ' + response.status);\n      return response.json();\n    }).then(function (result) {\n      if (!result || Number(result.error) !== 0) return null;\n      var offerData = validatedOfferData(result.data, offer);\n      if (!offerData) return null;\n      persistSimprosysOfferData(result.data);\n      return rememberVerifiedOffer(offerData);\n    });\n    offerRequestsByVariant.set(String(offer.variantId), request);\n    request.then(function () {\n      offerRequestsByVariant.delete(String(offer.variantId));\n    }, function () {\n      offerRequestsByVariant.delete(String(offer.variantId));\n    });\n    return request;\n  }\n\n  function captureLandingOffer() {\n    var params = new URLSearchParams(window.location.search);\n    var variantId = String(params.get('variant') || '');\n    var offer = googleOfferFromUrl(variantId);\n    if (!offer) return Promise.resolve(null);\n\n    var cached = cachedOfferData(offer);\n    if (cached) return Promise.resolve(cached);\n    if (landingOfferRequest) return landingOfferRequest;\n\n    landingOfferRequest = requestOfferData(offer).catch(function (error) {\n      console.warn('[Google automated discounts] Could not confirm landing-page offer.', error);\n      return null;\n    }).then(function (offerData) {\n      landingOfferRequest = null;\n      return offerData;\n    });\n    return landingOfferRequest;\n  }\n\n  function applicableDiscountCodes(cart) {\n    var titles = [];\n    if (!cart || !Array.isArray(cart.items)) return titles;\n\n    cart.items.forEach(function (item) {\n      googleTitlesFromItem(item).forEach(function (title) { titles.push(title); });\n      if (!Array.isArray(item.line_level_discount_allocations)) return;\n      item.line_level_discount_allocations.forEach(function (allocation) {\n        var application = allocation && allocation.discount_application;\n        if (application && application.type === 'discount_code' && application.title) {\n          titles.push(String(application.title).trim());\n        }\n      });\n    });\n    if (Array.isArray(cart.cart_level_discount_applications)) {\n      cart.cart_level_discount_applications.forEach(function (application) {\n        if (application && application.type === 'discount_code' && application.title) {\n          titles.push(String(application.title).trim());\n        }\n      });\n    }\n\n    var seen = new Set();\n    return titles.filter(function (title) {\n      var key = String(title || '').toUpperCase();\n      if (!key || seen.has(key)) return false;\n      seen.add(key);\n      return true;\n    });\n  }\n\n  function verifiedOffersForCart(cart) {\n    var offers = [];\n    var seenVariants = new Set();\n    if (!cart || !Array.isArray(cart.items)) return offers;\n    cart.items.forEach(function (item) {\n      var variantId = String(item.variant_id || '');\n      if (!variantId || seenVariants.has(variantId)) return;\n      seenVariants.add(variantId);\n      var offer = verifiedOfferForVariant(variantId);\n      if (offer) offers.push(offer);\n    });\n    return offers;\n  }\n\n  function itemHasVerifiedOffer(item, offer) {\n    if (!item || !offer || String(item.variant_id) !== String(offer.variantId)) return false;\n    var expectedFinalCents = Math.round(Number(offer.finalPrice) * 100);\n    var exactCodeApplied = googleTitlesFromItem(item).some(function (title) {\n      return String(title).toUpperCase() === String(offer.code).toUpperCase();\n    });\n    return exactCodeApplied && Number(item.final_price) <= expectedFinalCents + 1;\n  }\n\n  function cartHasVerifiedOffer(cart, offer) {\n    var items = itemsForVariant(cart, offer && offer.variantId);\n    return items.length > 0 && items.every(function (item) {\n      return itemHasVerifiedOffer(item, offer);\n    });\n  }\n\n  function discountCodesForOffers(cart, offers) {\n    var shippingCodes = new Set();\n    if (cart && Array.isArray(cart.cart_level_discount_applications)) {\n      cart.cart_level_discount_applications.forEach(function (application) {\n        if (application && application.type === 'discount_code' &&\n            application.target_type === 'shipping_line' && application.title) {\n          shippingCodes.add(String(application.title).trim().toUpperCase());\n        }\n      });\n    }\n\n    var seen = new Set();\n    var codes = [];\n    function append(code) {\n      var normalized = String(code || '').trim();\n      var key = normalized.toUpperCase();\n      if (!normalized || seen.has(key)) return;\n      seen.add(key);\n      codes.push(normalized);\n    }\n\n    applicableDiscountCodes(cart).forEach(append);\n    offers.forEach(function (offer) { append(offer.code); });\n\n    var productOrOrderCodeCount = codes.filter(function (code) {\n      return !shippingCodes.has(String(code).toUpperCase());\n    }).length;\n    return productOrOrderCodeCount <= MAX_PRODUCT_OR_ORDER_DISCOUNT_CODES ? codes : null;\n  }\n\n  function restoreCartDrawerAfterRepair() {\n    if (!offerRepairMarker || !offerRepairMarker.reopenCart || !window.customElements) return;\n    window.customElements.whenDefined('cart-drawer').then(function () {\n      var drawer = document.querySelector('cart-drawer');\n      if (drawer && typeof drawer.open === 'function') drawer.open(document.getElementById('cart-icon'));\n    });\n  }\n\n  function drawerSectionNames(drawer) {\n    if (!drawer || typeof drawer.getSectionsToRender !== 'function') return [];\n    try {\n      var seen = new Set();\n      return drawer.getSectionsToRender().map(function (section) {\n        return section && section.section ? String(section.section) : '';\n      }).filter(function (sectionName) {\n        if (!sectionName || seen.has(sectionName)) return false;\n        seen.add(sectionName);\n        return true;\n      });\n    } catch (error) {\n      console.warn('[Google automated discounts] Could not read cart drawer sections.', error);\n      return [];\n    }\n  }\n\n  function performOfferRepair(offer, cart) {\n    var cached = cachedOfferData(offer);\n    var offerDataPromise = cached ? Promise.resolve(cached) : requestOfferData(offer);\n    return offerDataPromise.then(function (offerData) {\n      if (!offerData) return false;\n      var registeredOffers = verifiedOffersForCart(cart);\n      if (!registeredOffers.length) return false;\n      var allOffersAlreadyApplied = registeredOffers.every(function (registeredOffer) {\n        return cartHasVerifiedOffer(cart, registeredOffer);\n      });\n      if (allOffersAlreadyApplied) return true;\n      if (recentRepairExists(offer.variantId, offer.finalPrice)) return false;\n\n      var discountCodes = discountCodesForOffers(cart, registeredOffers);\n      if (!discountCodes) return false;\n\n      var drawer = document.querySelector('cart-drawer');\n      var requestedSections = drawerSectionNames(drawer);\n      var marker = {\n        variantId: String(offer.variantId),\n        finalPrice: Number(offer.finalPrice),\n        code: offerData.code,\n        attemptedAt: Date.now(),\n        reopenCart: !!(drawer && drawer.getAttribute('aria-hidden') === 'false')\n      };\n      failedOfferVariantIds.add(String(offer.variantId));\n      persistFailedOfferVariantIds();\n      saveOfferRepairMarker(marker);\n      offerWarningReady = false;\n      renderOfferWarning();\n      var routes = window.Shopify && window.Shopify.routes;\n      var root = routes && routes.root ? routes.root : '/';\n      var updatePayload = { discount: discountCodes.join(',') };\n      if (requestedSections.length) {\n        updatePayload.sections = requestedSections;\n        updatePayload.sections_url = window.location.pathname;\n      }\n      return window.fetch(root + 'cart/update.js', {\n        method: 'POST',\n        credentials: 'same-origin',\n        headers: {\n          'Accept': 'application/json',\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(updatePayload)\n      }).then(function (response) {\n        if (!response.ok) throw new Error('Shopify cart discount update returned ' + response.status);\n        return response.json();\n      }).then(function (updatedCart) {\n        var failedRegisteredOffers = registeredOffers.filter(function (registeredOffer) {\n          return !cartHasVerifiedOffer(updatedCart, registeredOffer);\n        });\n        var appliedCodes = new Set(applicableDiscountCodes(updatedCart).map(function (code) {\n          return String(code).toUpperCase();\n        }));\n        var existingCodesPreserved = discountCodes.every(function (code) {\n          return appliedCodes.has(String(code).toUpperCase());\n        });\n        var repairSucceeded = failedRegisteredOffers.length === 0 && existingCodesPreserved;\n        if (repairSucceeded) {\n          registeredOffers.forEach(function (registeredOffer) {\n            failedOfferVariantIds.delete(String(registeredOffer.variantId));\n          });\n          persistFailedOfferVariantIds();\n          clearOfferRepairMarker(offer.variantId);\n        }\n        var sectionsReady = requestedSections.length > 0 && updatedCart.sections &&\n          requestedSections.every(function (sectionName) {\n            return typeof updatedCart.sections[sectionName] === 'string';\n          });\n        var nativeRender = sectionsReady && drawer && typeof drawer.renderContents === 'function'\n          ? Promise.resolve(drawer.renderContents(updatedCart, false)).catch(function (error) {\n            console.warn('[Google automated discounts] Native cart drawer refresh failed.', error);\n          })\n          : Promise.resolve();\n        return nativeRender.then(function () {\n          renderCart(updatedCart);\n          if (!repairSucceeded) {\n            failedRegisteredOffers.forEach(function (registeredOffer) {\n              failedOfferVariantIds.add(String(registeredOffer.variantId));\n            });\n            persistFailedOfferVariantIds();\n            saveOfferRepairMarker(marker);\n          }\n          offerWarningReady = true;\n          renderOfferWarning();\n          return repairSucceeded;\n        });\n      });\n    });\n  }\n\n  function applyOfferRepair(offer, cart) {\n    var operation = offerRepairQueue.then(function () {\n      var authoritativeCart = lastCart && Array.isArray(lastCart.items) ? lastCart : cart;\n      return performOfferRepair(offer, authoritativeCart);\n    });\n    offerRepairQueue = operation.catch(function () {\n      // Keep later repairs running after an isolated request failure.\n    });\n    return operation;\n  }\n\n  function itemHasGoogleDiscount(item) {\n    return googleTitlesFromItem(item).length > 0 && Number(item.final_price) < Number(item.original_price);\n  }\n\n  function itemsForVariant(cart, variantId) {\n    if (!cart || !Array.isArray(cart.items)) return [];\n    return cart.items.filter(function (item) {\n      return String(item.variant_id) === String(variantId);\n    });\n  }\n\n  function clearPendingOffer(variantId) {\n    var attempt = pendingOffersByVariant.get(String(variantId));\n    if (attempt && attempt.finalTimer) window.clearTimeout(attempt.finalTimer);\n    pendingOffersByVariant.delete(String(variantId));\n  }\n\n  function renderOfferWarning() {\n    persistFailedOfferVariantIds();\n    var showWarning = offerWarningReady && !repairVerificationPending && failedOfferVariantIds.size > 0;\n    document.querySelectorAll('[data-gsf-spd-offer-warning]').forEach(function (warning) {\n      warning.hidden = !showWarning;\n    });\n  }\n\n  function cancelRetryWindow() {\n    retryTimers.forEach(function (timer) { window.clearTimeout(timer); });\n    retryTimers = [];\n    retryWindowForPendingOffers = false;\n  }\n\n  function reconcileOfferAttempts(cart) {\n    pendingOffersByVariant.forEach(function (attempt, variantId) {\n      var items = itemsForVariant(cart, variantId);\n      if (!items.length) {\n        clearPendingOffer(variantId);\n        failedOfferVariantIds.delete(variantId);\n        clearOfferRepairMarker(variantId);\n        return;\n      }\n      var registeredOffer = verifiedOfferForVariant(variantId);\n      var offerApplied = registeredOffer\n        ? items.every(function (item) { return itemHasVerifiedOffer(item, registeredOffer); })\n        : items.some(itemHasGoogleDiscount);\n      if (offerApplied && registeredOffer) {\n        offerApplied = verifiedOffersForCart(cart).every(function (cartOffer) {\n          return cartHasVerifiedOffer(cart, cartOffer);\n        });\n      }\n      if (offerApplied) {\n        clearPendingOffer(variantId);\n        failedOfferVariantIds.delete(variantId);\n        clearOfferRepairMarker(variantId);\n      }\n    });\n\n    failedOfferVariantIds.forEach(function (variantId) {\n      var items = itemsForVariant(cart, variantId);\n      var registeredOffer = verifiedOfferForVariant(variantId);\n      var offerApplied = registeredOffer\n        ? items.length > 0 && items.every(function (item) { return itemHasVerifiedOffer(item, registeredOffer); })\n        : items.some(itemHasGoogleDiscount);\n      if (!items.length || offerApplied) {\n        failedOfferVariantIds.delete(variantId);\n        clearOfferRepairMarker(variantId);\n      }\n    });\n    repairVerificationPending = false;\n    if (retryWindowForPendingOffers && pendingOffersByVariant.size === 0) cancelRetryWindow();\n    offerWarningReady = true;\n    renderOfferWarning();\n  }\n\n  function finalizeOfferAttempt(variantId, token, cart) {\n    var normalizedVariantId = String(variantId);\n    var attempt = pendingOffersByVariant.get(normalizedVariantId);\n    if (!attempt || attempt.token !== token) return;\n\n    var items = itemsForVariant(cart, normalizedVariantId);\n    clearPendingOffer(normalizedVariantId);\n    var expectedFinalCents = Math.round(Number(attempt.finalPrice) * 100);\n    var offerWasExpected = items.some(function (item) {\n      return Number(item.original_price) > expectedFinalCents;\n    });\n    if (!(items.length && offerWasExpected && !items.some(itemHasGoogleDiscount))) {\n      failedOfferVariantIds.delete(normalizedVariantId);\n      clearOfferRepairMarker(normalizedVariantId);\n      offerWarningReady = true;\n      renderOfferWarning();\n      renderCart(cart);\n      return;\n    }\n\n    applyOfferRepair(attempt, cart).then(function (redirectStarted) {\n      if (redirectStarted) return;\n      failedOfferVariantIds.add(normalizedVariantId);\n      repairVerificationPending = false;\n      offerWarningReady = true;\n      renderOfferWarning();\n    }).catch(function (error) {\n      console.warn('[Google automated discounts] Offer repair failed.', error);\n      failedOfferVariantIds.add(normalizedVariantId);\n      repairVerificationPending = false;\n      offerWarningReady = true;\n      renderOfferWarning();\n    });\n  }\n\n  function beginOfferAttempt(event) {\n    var variantId = event.detail && event.detail.variantId;\n    var offer = expectedGoogleOffer(variantId);\n    if (!offer) return false;\n\n    clearPendingOffer(offer.variantId);\n    failedOfferVariantIds.delete(offer.variantId);\n    var token = Date.now() + ':' + Math.random();\n    var attempt = {\n      token: token,\n      variantId: offer.variantId,\n      finalPrice: offer.finalPrice,\n      finalTimer: null\n    };\n    attempt.finalTimer = window.setTimeout(function () {\n      refreshCart(function (cart) {\n        finalizeOfferAttempt(offer.variantId, token, cart);\n      });\n    }, OFFER_SETTLE_DELAY);\n    pendingOffersByVariant.set(offer.variantId, attempt);\n    offerWarningReady = true;\n    renderOfferWarning();\n    window.setTimeout(function () {\n      var cart = event.detail && event.detail.cart;\n      applyOfferRepair(offer, cart).catch(function (error) {\n        console.warn('[Google automated discounts] Immediate offer repair failed.', error);\n      });\n    }, 0);\n    return true;\n  }\n\n  function findCoverageEl(row) {\n    var propertyRows = row.querySelectorAll('.cart-item__info dl > div');\n    for (var i = 0; i < propertyRows.length; i++) {\n      var label = propertyRows[i].querySelector('dt strong');\n      if (label && label.textContent.trim() === 'Coverage:') return propertyRows[i].querySelector('dd');\n    }\n    return null;\n  }\n\n  function rowStateKey(row, fallbackIndex) {\n    return row.getAttribute('data-line-key') ||\n      [row.getAttribute('data-variant-id') || '', fallbackIndex || 0].join(':');\n  }\n\n  function findRowForItem(item, itemIndex, usedRows) {\n    var rows = Array.prototype.slice.call(document.querySelectorAll('.cart-item[data-variant-id]'));\n    var exactKey = String(item.key || '');\n    var row = rows.find(function (candidate) {\n      return !usedRows.has(candidate) && exactKey && candidate.getAttribute('data-line-key') === exactKey;\n    });\n    if (row) return row;\n\n    var variantId = String(item.variant_id);\n    row = rows.find(function (candidate) {\n      return !usedRows.has(candidate) && candidate.getAttribute('data-variant-id') === variantId;\n    });\n    if (row) return row;\n\n    return rows[itemIndex] && !usedRows.has(rows[itemIndex]) ? rows[itemIndex] : null;\n  }\n\n  function discountFromItem(item, row, itemIndex) {\n    var titles = googleTitlesFromItem(item);\n    if (!titles.length) return null;\n\n    var originalPrice = Number(item.original_price);\n    var finalPrice = Number(item.final_price);\n    var originalLinePrice = Number(item.original_line_price);\n    var finalLinePrice = Number(item.final_line_price);\n    if (!(originalPrice > 0) || !(finalPrice >= 0) || !(finalPrice < originalPrice)) return null;\n\n    var priceWrap = row.querySelector('.cart-item-price[data-uom-input]');\n    var tileArea = priceWrap ? parseFloat(priceWrap.getAttribute('data-tile-area')) : NaN;\n    var uomInput = readUomInput(priceWrap);\n    if (!priceWrap || !supportsUnit(uomInput, tileArea)) return null;\n\n    return {\n      stateKey: String(item.key || rowStateKey(row, itemIndex)),\n      row: row,\n      priceWrap: priceWrap,\n      variantId: String(item.variant_id),\n      quantity: Number(item.quantity),\n      originalPrice: originalPrice,\n      finalPrice: finalPrice,\n      originalLinePrice: originalLinePrice,\n      finalLinePrice: finalLinePrice,\n      referencePriceReady: true,\n      tileArea: tileArea,\n      uomInput: uomInput,\n      titles: titles\n    };\n  }\n\n  function renderAuthoritativePrice(row) {\n    undoRow(row);\n    var priceWrap = row.querySelector('.cart-item-price[data-uom-input]');\n    var tileArea = priceWrap ? parseFloat(priceWrap.getAttribute('data-tile-area')) : NaN;\n    var uomInput = readUomInput(priceWrap);\n    if (!priceWrap || !supportsUnit(uomInput, tileArea)) return false;\n\n    priceWrap.querySelectorAll('.price__current, .price__was, .price_unit').forEach(function (el) {\n      if (!el.hasAttribute('data-gsf-spd-cart-revealed')) {\n        el.setAttribute('data-gsf-spd-cart-revealed', '1');\n        el.setAttribute('data-gsf-spd-cart-original-display', el.style.getPropertyValue('display'));\n        el.setAttribute('data-gsf-spd-cart-original-display-priority', el.style.getPropertyPriority('display'));\n      }\n      el.style.setProperty('display', 'inline', 'important');\n    });\n    return true;\n  }\n\n  function discountFromRow(row, rowIndex) {\n    var titles = googleTitlesFromRow(row);\n    if (!titles.length) return null;\n\n    var quantityInput = row.querySelector('.qty-input__input[name=\"updates[]\"]');\n    var quantity = quantityInput ? parseInt(quantityInput.value, 10) : NaN;\n    var totalCurrentEl = row.querySelector('.cart-item__total .price__current');\n    var totalWasEl = row.querySelector('.cart-item__total .price__was');\n    var finalLinePrice = totalCurrentEl ? parseMoney(totalCurrentEl.textContent) : NaN;\n    var originalLinePrice = totalWasEl ? parseMoney(totalWasEl.textContent) : NaN;\n    var priceWrap = row.querySelector('.cart-item-price[data-uom-input]');\n    var tileArea = priceWrap ? parseFloat(priceWrap.getAttribute('data-tile-area')) : NaN;\n    var uomInput = readUomInput(priceWrap);\n    var webSalePrice = originalPriceFromPriceWrap(priceWrap, uomInput, tileArea);\n    var referencePriceReady = webSalePrice > 0;\n    var originalPrice = referencePriceReady\n      ? webSalePrice\n      : Math.round((originalLinePrice / quantity) * 100);\n    if (!(quantity > 0) || !(originalLinePrice > finalLinePrice) || !priceWrap || !supportsUnit(uomInput, tileArea)) {\n      return null;\n    }\n    var finalPrice = Math.round((finalLinePrice / quantity) * 100);\n    if (!(originalPrice > finalPrice)) return null;\n\n    return {\n      stateKey: rowStateKey(row, rowIndex),\n      row: row,\n      priceWrap: priceWrap,\n      variantId: String(row.getAttribute('data-variant-id')),\n      quantity: quantity,\n      originalPrice: originalPrice,\n      finalPrice: finalPrice,\n      originalLinePrice: referencePriceReady ? originalPrice * quantity : Math.round(originalLinePrice * 100),\n      finalLinePrice: Math.round(finalLinePrice * 100),\n      referencePriceReady: referencePriceReady,\n      tileArea: tileArea,\n      uomInput: uomInput,\n      titles: titles\n    };\n  }\n\n  function ensureStyles() {\n    if (document.getElementById('gsf-spd-cart-m2-price-style')) return;\n    var style = document.createElement('style');\n    style.id = 'gsf-spd-cart-m2-price-style';\n    style.textContent =\n      '.gsf-spd-cart-m2-was{color:rgba(var(--text-color)/.8);font-size:.8em;margin-right:6px;}' +\n      '.gsf-spd-cart-m2-now{font-weight:700;color:rgb(var(--text-color));}' +\n      '.gsf-spd-cart-m2-unit,.gsf-spd-cart-m2-box-ref{font-size:12px;color:rgb(var(--text-color));}' +\n      '.gsf-spd-cart-m2-box-ref{color:rgba(var(--text-color)/.8);font-weight:400;}' +\n      '.gsf-spd-cart-m2-price,.cart-item__total,.gsf-spd-cart-subtotal{font-variant-numeric:tabular-nums;}';\n    document.head.appendChild(style);\n  }\n\n  function undoRow(row) {\n    if (!row) return;\n    var overlay = row.querySelector('.gsf-spd-cart-m2-price');\n    if (overlay) overlay.remove();\n    var customDiscounts = row.querySelector('.gsf-spd-cart-discounts');\n    if (customDiscounts) customDiscounts.remove();\n    row.querySelectorAll('[data-gsf-spd-cart-hidden]').forEach(function (el) {\n      el.style.removeProperty('display');\n      el.removeAttribute('data-gsf-spd-cart-hidden');\n    });\n    row.querySelectorAll('[data-gsf-spd-cart-revealed]').forEach(function (el) {\n      var originalDisplay = el.getAttribute('data-gsf-spd-cart-original-display') || '';\n      var originalPriority = el.getAttribute('data-gsf-spd-cart-original-display-priority') || '';\n      if (originalDisplay) el.style.setProperty('display', originalDisplay, originalPriority);\n      else el.style.removeProperty('display');\n      el.removeAttribute('data-gsf-spd-cart-revealed');\n      el.removeAttribute('data-gsf-spd-cart-original-display');\n      el.removeAttribute('data-gsf-spd-cart-original-display-priority');\n    });\n    row.querySelectorAll('[data-gsf-spd-cart-original-text]').forEach(function (el) {\n      el.textContent = el.getAttribute('data-gsf-spd-cart-original-text');\n      el.removeAttribute('data-gsf-spd-cart-original-text');\n    });\n    row.querySelectorAll('[data-gsf-spd-cart-created]').forEach(function (el) { el.remove(); });\n  }\n\n  function rememberOriginalText(el) {\n    if (el && !el.hasAttribute('data-gsf-spd-cart-original-text')) {\n      el.setAttribute('data-gsf-spd-cart-original-text', el.textContent);\n    }\n  }\n\n  function shouldShowOriginalPrice(discount) {\n    return discount.referencePriceReady === true && discount.originalPrice > discount.finalPrice;\n  }\n\n  function originalPriceFromPriceWrap(priceWrap, uomInput, tileArea) {\n    if (!priceWrap) return NaN;\n    if (uomInput === '/box') {\n      var boxReferences = priceWrap.querySelectorAll('.price__was');\n      var boxReference = boxReferences[boxReferences.length - 1];\n      var boxPrice = boxReference ? parseMoney(boxReference.textContent) : NaN;\n      if (boxPrice > 0) return Math.round(boxPrice * 100);\n\n      var squarePriceEl = priceWrap.querySelector('.price__current');\n      var squarePrice = squarePriceEl ? parseMoney(squarePriceEl.textContent) : NaN;\n      return squarePrice > 0 && tileArea > 0 ? Math.round(squarePrice * tileArea * 100) : NaN;\n    }\n\n    var currentPriceEl = priceWrap.querySelector('.price__current');\n    var currentPrice = currentPriceEl ? parseMoney(currentPriceEl.textContent) : NaN;\n    return currentPrice > 0 ? Math.round(currentPrice * 100) : NaN;\n  }\n\n  function renderUnitPrice(discount) {\n    var priceWrap = discount.priceWrap;\n    var usesSquareMeterPricing = discount.uomInput === '/box';\n    var finalAmount = centsToAmount(discount.finalPrice);\n    var finalDisplayPrice = usesSquareMeterPricing ? finalAmount / discount.tileArea : finalAmount;\n\n    Array.prototype.slice.call(priceWrap.childNodes).forEach(function (node) {\n      if (node.nodeType === 3 && node.textContent.trim() !== '') {\n        var wrapper = document.createElement('span');\n        wrapper.textContent = node.textContent;\n        node.parentNode.replaceChild(wrapper, node);\n        node = wrapper;\n      }\n      if (node.nodeType === 1 && !node.classList.contains('gsf-spd-cart-m2-price')) {\n        node.style.setProperty('display', 'none', 'important');\n        node.setAttribute('data-gsf-spd-cart-hidden', '1');\n      }\n    });\n\n    var overlay = priceWrap.querySelector('.gsf-spd-cart-m2-price') || document.createElement('span');\n    overlay.className = 'gsf-spd-cart-m2-price';\n    var showOriginalPrice = shouldShowOriginalPrice(discount);\n    var signature = [showOriginalPrice, discount.originalPrice, discount.finalPrice, discount.tileArea, discount.uomInput].join('|');\n    if (overlay.getAttribute('data-gsf-spd-cart-signature') !== signature) {\n      overlay.innerHTML =\n        (showOriginalPrice\n          ? '<s class=\"gsf-spd-cart-m2-was\">' + formatMoney(usesSquareMeterPricing\n            ? centsToAmount(discount.originalPrice) / discount.tileArea\n            : centsToAmount(discount.originalPrice)) + '</s> '\n          : '') +\n        '<span class=\"gsf-spd-cart-m2-now\">' + formatMoney(finalDisplayPrice) + '</span>' +\n        '<span class=\"gsf-spd-cart-m2-unit\"></span>' +\n        (usesSquareMeterPricing\n          ? ' = <span class=\"gsf-spd-cart-m2-box-ref\">' + formatMoney(finalAmount) + '/box</span>'\n          : '');\n      overlay.querySelector('.gsf-spd-cart-m2-unit').textContent = usesSquareMeterPricing ? '/m\u00B2' : discount.uomInput;\n      overlay.setAttribute('data-gsf-spd-cart-signature', signature);\n    }\n    if (!overlay.parentNode) priceWrap.appendChild(overlay);\n  }\n\n  function renderLineTotals(discount) {\n    var totalWrap = discount.row.querySelector('.cart-item__total');\n    if (!totalWrap) return;\n    var currentEl = totalWrap.querySelector('.price__current');\n    if (currentEl) {\n      rememberOriginalText(currentEl);\n      var currentText = formatMoney(centsToAmount(discount.finalLinePrice));\n      if (currentEl.textContent.trim() !== currentText) currentEl.textContent = currentText;\n    }\n\n    var wasEl = totalWrap.querySelector('.price__was');\n    if (!discount.referencePriceReady) {\n      if (wasEl) {\n        wasEl.style.setProperty('display', 'none', 'important');\n        wasEl.setAttribute('data-gsf-spd-cart-hidden', '1');\n      }\n    } else {\n      if (!wasEl && currentEl) {\n        wasEl = document.createElement('s');\n        wasEl.className = 'price__was';\n        wasEl.setAttribute('data-gsf-spd-cart-created', '1');\n        currentEl.parentNode.insertBefore(wasEl, currentEl.nextSibling);\n      }\n      if (wasEl) {\n        wasEl.style.removeProperty('display');\n        wasEl.removeAttribute('data-gsf-spd-cart-hidden');\n        rememberOriginalText(wasEl);\n        var wasText = formatMoney(centsToAmount(discount.originalLinePrice));\n        if (wasEl.textContent.trim() !== wasText) wasEl.textContent = wasText;\n      }\n    }\n\n    var coverageEl = findCoverageEl(discount.row);\n    if (coverageEl && discount.tileArea > 0) {\n      rememberOriginalText(coverageEl);\n      var coverageText = formatArea(discount.quantity * discount.tileArea);\n      if (coverageEl.textContent.trim() !== coverageText) coverageEl.textContent = coverageText;\n    }\n  }\n\n  function renderDiscount(discount) {\n    ensureStyles();\n    renderUnitPrice(discount);\n    renderLineTotals(discount);\n    var adapterDiscounts = discount.row.querySelector('.gsf-spd-cart-discounts');\n    if (adapterDiscounts) adapterDiscounts.remove();\n  }\n\n  function renderSubtotal(totalPrice) {\n    var text = formatMoney(centsToAmount(totalPrice));\n    document.querySelectorAll('.gsf-spd-cart-subtotal').forEach(function (el) {\n      if (el.textContent.trim() !== text) el.textContent = text;\n    });\n  }\n\n  function cleanupInactiveRows(activeRows) {\n    document.querySelectorAll('.cart-item[data-variant-id]').forEach(function (row) {\n      if (!activeRows.has(row) &&\n          (row.querySelector('.gsf-spd-cart-m2-price') || row.querySelector('.gsf-spd-cart-discounts') ||\n           row.querySelector('[data-gsf-spd-cart-revealed]'))) {\n        undoRow(row);\n      }\n    });\n  }\n\n  function renderFromDom() {\n    var discounts = new Map();\n    var activeRows = new Set();\n    document.querySelectorAll('.cart-item[data-variant-id]').forEach(function (row, index) {\n      var discount = discountFromRow(row, index);\n      if (!discount) return;\n      renderDiscount(discount);\n      discounts.set(discount.stateKey, discount);\n      activeRows.add(row);\n    });\n    if (discounts.size) {\n      lastDiscountsByStateKey = discounts;\n      cleanupInactiveRows(activeRows);\n    }\n    renderOfferWarning();\n  }\n\n  function renderCart(cart) {\n    if (!cart || !Array.isArray(cart.items)) return;\n    lastCart = cart;\n    reconcileOfferAttempts(cart);\n    var discounts = new Map();\n    var activeRows = new Set();\n    var usedRows = new Set();\n\n    cart.items.forEach(function (item, itemIndex) {\n      var row = findRowForItem(item, itemIndex, usedRows);\n      if (!row) return;\n      usedRows.add(row);\n      var discount = discountFromItem(item, row, itemIndex);\n      if (discount) {\n        renderDiscount(discount);\n        discounts.set(discount.stateKey, discount);\n        activeRows.add(row);\n        return;\n      }\n\n      if (failedOfferVariantIds.has(String(item.variant_id))) {\n        if (renderAuthoritativePrice(row)) activeRows.add(row);\n      }\n    });\n\n    lastDiscountsByStateKey = discounts;\n    cleanupInactiveRows(activeRows);\n    renderSubtotal(cart.total_price);\n  }\n\n  function finishRefresh() {\n    refreshInFlight = false;\n    if (!refreshQueued) return;\n    var finalizers = queuedRefreshFinalizers.slice();\n    refreshQueued = false;\n    queuedRefreshFinalizers = [];\n    startRefresh(finalizers);\n  }\n\n  function startRefresh(finalizers) {\n    refreshInFlight = true;\n    fetch('/cart.js', { credentials: 'same-origin', cache: 'no-store' })\n      .then(function (response) {\n        if (!response.ok) throw new Error('Cart request returned ' + response.status);\n        return response.json();\n      })\n      .then(function (cart) {\n        renderCart(cart);\n        finalizers.forEach(function (finalize) { finalize(cart); });\n        if (pendingOffersByVariant.size === 0) {\n          var missingOffer = verifiedOffersForCart(cart).find(function (offer) {\n            return !cartHasVerifiedOffer(cart, offer);\n          });\n          if (missingOffer) {\n            applyOfferRepair(missingOffer, cart).catch(function (error) {\n              console.warn('[Google automated discounts] Registered offer repair failed.', error);\n            });\n          }\n        }\n      })\n      .catch(function (error) {\n        console.warn('[Google automated discounts] Cart price refresh failed.', error);\n      })\n      .then(function () {\n        finishRefresh();\n      });\n  }\n\n  function refreshCart(finalize) {\n    if (refreshInFlight) {\n      refreshQueued = true;\n      if (typeof finalize === 'function') queuedRefreshFinalizers.push(finalize);\n      return;\n    }\n    startRefresh(typeof finalize === 'function' ? [finalize] : []);\n  }\n\n  function hasGoogleContext() {\n    if (document.querySelector('.cart-item .discount')) {\n      var labels = document.querySelectorAll('.cart-item .discount');\n      for (var i = 0; i < labels.length; i++) {\n        if (isGoogleDiscountTitle(labels[i].textContent)) return true;\n      }\n    }\n    if (/[?&](pv2|stkn)=/i.test(window.location.search)) return true;\n    var registeredRowExists = Array.prototype.some.call(\n      document.querySelectorAll('.cart-item[data-variant-id]'),\n      function (row) { return !!verifiedOfferForVariant(row.getAttribute('data-variant-id')); }\n    );\n    if (registeredRowExists) return true;\n    var activeVariant = readCookie('gsf_spd_active_variant');\n    return !!activeVariant && activeVariant !== '0';\n  }\n\n  function scheduleRetryWindow(force) {\n    cancelRetryWindow();\n    if (!force && !hasGoogleContext()) return;\n    retryWindowForPendingOffers = pendingOffersByVariant.size > 0;\n    var delays = retryDelays(retryWindowForPendingOffers);\n    delays.forEach(function (delay) {\n      retryTimers.push(window.setTimeout(refreshCart, delay));\n    });\n  }\n\n  function retryDelays(hasPendingOffers) {\n    return hasPendingOffers\n      ? RETRY_DELAYS.slice(0, -1)\n      : RETRY_DELAYS.slice(0, 1);\n  }\n\n  function rememberCartSnapshot(event) {\n    var offerExpected = beginOfferAttempt(event);\n    var cart = event.detail && event.detail.cart;\n    if (cart && Array.isArray(cart.items)) renderCart(cart);\n    if (offerExpected) return;\n    scheduleRetryWindow(hasGoogleContext() || googleDiscountExistsInCart(cart));\n  }\n\n  function googleDiscountExistsInCart(cart) {\n    return !!(cart && Array.isArray(cart.items) && cart.items.some(function (item) {\n      return googleTitlesFromItem(item).length > 0;\n    }));\n  }\n\n  function renderQuantityIntent(event) {\n    var input = event.target;\n    if (!input.matches || !input.matches('.qty-input__input[name=\"updates[]\"]')) return;\n    var row = input.closest('.cart-item[data-variant-id]');\n    if (!row) return;\n\n    var discount = null;\n    lastDiscountsByStateKey.forEach(function (candidate) {\n      if (candidate.row === row) discount = candidate;\n    });\n    if (!discount) return;\n\n    var quantity = parseInt(input.value, 10);\n    if (!(quantity > 0)) return;\n    var previousFinalLinePrice = discount.finalLinePrice;\n    discount.quantity = quantity;\n    discount.originalLinePrice = discount.originalPrice * quantity;\n    discount.finalLinePrice = discount.finalPrice * quantity;\n    renderDiscount(discount);\n    if (lastCart) {\n      lastCart.total_price = lastCart.total_price - previousFinalLinePrice + discount.finalLinePrice;\n      renderSubtotal(lastCart.total_price);\n    }\n  }\n\n  function mutationNeedsRender(mutation) {\n    if (mutation.type === 'attributes') {\n      var attributeTarget = mutation.target;\n      if (attributeTarget.closest && attributeTarget.closest('.gsf-spd-cart-m2-price, .gsf-spd-cart-discounts')) {\n        return false;\n      }\n      return attributeTarget.matches && attributeTarget.matches(\n        'cart-drawer, .cart-drawer, [id*=\"cart-drawer\"], .cart-item .price__current, .cart-item .price__was'\n      );\n    }\n    return Array.prototype.some.call(mutation.addedNodes, function (node) {\n      if (node.nodeType !== 1) return false;\n      if (node.id === 'gsf-spd-cart-m2-price-style') return false;\n      if (node.matches('.gsf-spd-cart-m2-price, .gsf-spd-cart-discounts')) return false;\n      return node.matches('cart-drawer, .cart-drawer, .cart-item, .discount') ||\n        (node.querySelector && !!node.querySelector('cart-drawer, .cart-drawer, .cart-item, .discount'));\n    });\n  }\n\n  function init() {\n    renderFromDom();\n    restoreCartDrawerAfterRepair();\n    captureLandingOffer();\n    window.setTimeout(captureLandingOffer, 600);\n    scheduleRetryWindow(false);\n    if (typeof subscribe === 'function' && typeof PUB_SUB_EVENTS !== 'undefined') {\n      subscribe(PUB_SUB_EVENTS.cartUpdate, function () { scheduleRetryWindow(false); });\n    }\n\n    new MutationObserver(function (mutations) {\n      if (mutations.some(mutationNeedsRender)) renderFromDom();\n    }).observe(document.documentElement, {\n      childList: true,\n      subtree: true,\n      attributes: true,\n      attributeFilter: ['class', 'style', 'open', 'aria-hidden']\n    });\n\n    window.addEventListener('pageshow', function () { scheduleRetryWindow(false); });\n    document.addEventListener('shopify:section:load', function () { scheduleRetryWindow(false); });\n    document.addEventListener('change', renderQuantityIntent);\n    document.addEventListener('on:cart:add', rememberCartSnapshot);\n    document.addEventListener('on:line-item:change', rememberCartSnapshot);\n    document.addEventListener('on:cart:error', function () { scheduleRetryWindow(false); });\n    document.addEventListener('visibilitychange', function () {\n      if (!document.hidden) scheduleRetryWindow(false);\n    });\n    window.addEventListener('storage', function (event) {\n      if (event.key !== VERIFIED_OFFERS_STORAGE_KEY) return;\n      verifiedOffersByVariant = loadVerifiedOffers();\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
