{
  "version": 3,
  "sources": ["/cdn/shop/t/129/assets/fineroot-bundle-controller.js?fineroot_v=31"],
  "sourcesContent": ["(function () {\n  (\"use strict\");\n\n  const CONFIG_ID = \"FinerootBundleControllerConfig\";\n  const SHARED_DEAL_BAR_IDS = [\n    \"3d4eca6c-2e50-4053-b6b6-ccbfe9125644\",\n    \"50829550-306f-44f0-80c5-4d0f1376716d\",\n    \"6bb82b85-04a7-4c6b-9528-768d8bfb2eea\",\n  ];\n  const EXPECTED_TIER_SHAPES = [\n    {\n      units: 1,\n      priced_units: 1,\n    },\n    {\n      units: 3,\n      priced_units: 2,\n    },\n    {\n      units: 5,\n      priced_units: 3,\n    },\n  ];\n  const EXPECTED_PRODUCTS = {\n    7967355666475: {\n      dealBarIds: SHARED_DEAL_BAR_IDS,\n      oneTimeVariantIds: Array(3).fill(\"44242606915627\"),\n      autoShipVariantIds: Array(3).fill(\"44471620403243\"),\n    },\n    7933866901547: {\n      dealBarIds: SHARED_DEAL_BAR_IDS,\n      oneTimeVariantIds: Array(3).fill(\"44139954470955\"),\n      autoShipVariantIds: Array(3).fill(\"44572557246507\"),\n    },\n    15401068101675: {\n      dealBarIds: SHARED_DEAL_BAR_IDS,\n      oneTimeVariantIds: Array(3).fill(\"67679712739371\"),\n      autoShipVariantIds: Array(3).fill(\"67679712837675\"),\n    },\n    8082786385963: {\n      dealBarIds: [\"ce6a43be-0268-4e77-bb37-45b40ad85755\",\"4e48048b-db3d-4a43-b3ac-b61bdca1dad9\",\"5d6581c9-2a7c-428a-89ca-6d0995871e1f\"],\n      oneTimeVariantIds: Array(3).fill(\"45234894864427\"),\n      autoShipVariantIds: Array(3).fill(\"45234894962731\"),\n    },\n    7890095603755: {\n      dealBarIds: SHARED_DEAL_BAR_IDS,\n      oneTimeVariantIds: Array(3).fill(\"43961975406635\"),\n      autoShipVariantIds: Array(3).fill(\"44572564521003\"),\n    },\n    7896790401067: {\n      dealBarIds: SHARED_DEAL_BAR_IDS,\n      oneTimeVariantIds: Array(3).fill(\"43996541780011\"),\n      autoShipVariantIds: Array(3).fill(\"44797004611627\"),\n    },\n    7917603881003: {\n      dealBarIds: [\n        \"b518e285-8706-4aa5-b032-5643aef5f41e\",\n        \"2dca11ef-4a06-445d-af10-ae257d9bf2cc\",\n        \"fce468f4-1064-4938-b2ad-06d02aabdd96\",\n      ],\n      oneTimeVariantIds: Array(3).fill(\"44065709981739\"),\n      autoShipVariantIds: Array(3).fill(\"44797004546091\"),\n    },\n     8112749969451: {\n      dealBarIds: [\n        \"b518e285-8706-4aa5-b032-5643aef5f41e\",\n        \"2dca11ef-4a06-445d-af10-ae257d9bf2cc\",\n        \"fce468f4-1064-4938-b2ad-06d02aabdd96\",\n      ],\n      oneTimeVariantIds: Array(3).fill(\"45375877382187\"),\n      autoShipVariantIds: Array(3).fill(\"45375877480491\"),\n    },\n    8014548893739: {\n      dealBarIds: SHARED_DEAL_BAR_IDS,\n      oneTimeVariantIds: Array(3).fill(\"44446773837867\"),\n      autoShipVariantIds: Array(3).fill(\"44797005103147\"),\n    },\n    8014562787371: {\n      dealBarIds: SHARED_DEAL_BAR_IDS,\n      oneTimeVariantIds: Array(3).fill(\"44446942855211\"),\n      autoShipVariantIds: Array(3).fill(\"44797006118955\"),\n    },\n    8019364675627: {\n      dealBarIds: SHARED_DEAL_BAR_IDS,\n      oneTimeVariantIds: Array(3).fill(\"44494677114923\"),\n      autoShipVariantIds: Array(3).fill(\"44797007364139\"),\n    },\n    8041578004523: {\n      dealBarIds: SHARED_DEAL_BAR_IDS,\n      oneTimeVariantIds: Array(3).fill(\"44758433267755\"),\n      autoShipVariantIds: Array(3).fill(\"44758433366059\"),\n    },\n    7930092486699: {\n      dealBarIds: [\n        \"3d4eca6c-2e50-4053-b6b6-ccbfe9125644\",\n        \"50829550-306f-44f0-80c5-4d0f1376716d\",\n        \"6bb82b85-04a7-4c6b-9528-768d8bfb2eea\",\n      ],\n      oneTimeVariantIds: Array(3).fill(\"44127842271275\"),\n      autoShipVariantIds: Array(3).fill(\"44572569501739\"),\n    },\n    10291548127275: {\n      dealBarIds: SHARED_DEAL_BAR_IDS,\n      oneTimeVariantIds: Array(3).fill(\"50533377671211\"),\n      autoShipVariantIds: Array(3).fill(\"50533377835051\"),\n    },\n    8033237925931: {\n      dealBarIds: [\n        \"b75ddd3f-0e42-4f4c-8178-040f3758b6d5\",\n        \"25afd5cf-8541-4f97-b6ca-43f36983db64\",\n        \"5157567f-895e-4381-9576-74710904ca85\",\n      ],\n      oneTimeVariantIds: Array(3).fill(\"44571023933483\"),\n      autoShipVariantIds: Array(3).fill(\"44586102980651\"),\n    },\n    8043491721259: {\n      dealBarIds: [\"IE8J\", \"4K_F\", \"30-j\"],\n      oneTimeVariantIds: [\"44776235958315\", \"44797714956331\", \"44797714989099\"],\n      autoShipVariantIds: [\n        \"44776235991083\",\n        \"44797715021867\",\n        \"44797715054635\",\n      ],\n    },\n    8072686108715: {\n      dealBarIds: [\"IE8J\", \"4K_F\", \"30-j\"],\n      oneTimeVariantIds: [\"45123004661803\", \"45123004694571\", \"45123004727339\"],\n      autoShipVariantIds: [\n        \"45123004760107\",\n        \"45123004792875\",\n        \"45123004825643\",\n      ],\n    },\n    7843115237419: {\n      dealBarIds: [\"2bb1\", \"z3eA\", \"RvbV\"],\n      oneTimeVariantIds: Array(3).fill(\"44797013262379\"),\n      autoShipVariantIds: Array(3).fill(\"44797013295147\"),\n    },\n  };\n  const EXPECTED_SELLING_PLAN_ID = \"9721249835\";\n  const VARIANT_SELLING_PLAN_IDS = new Map([\n    [\"45123004792875\", \"9721282603\"],\n    [\"45123004825643\", \"9721282603\"],\n  ]);\n  const CHECKOUT_CHAMP_LEGACY_DEAL_BAR_IDS = new Map([\n    [\n      \"3d4eca6c-2e50-4053-b6b6-ccbfe9125644\",\n      \"deb6a2ff-7c84-4fa6-909f-b458b7336a41\",\n    ],\n    [\n      \"50829550-306f-44f0-80c5-4d0f1376716d\",\n      \"0f88040a-ea23-480e-80b5-e54ae22ce006\",\n    ],\n    [\n      \"6bb82b85-04a7-4c6b-9528-768d8bfb2eea\",\n      \"ada2f423-2ecd-4117-a2dd-480ea95925d1\",\n    ],\n  ]);\n  const ROOT_MARKER = \"data-fineroot-bundle-controller\";\n  const KACHING_PROPERTY_NAME = \"__kaching_bundles\";\n  const nativeFetch = window.fetch.bind(window);\n  const configElement = document.getElementById(CONFIG_ID);\n\n  if (!configElement || document.documentElement.hasAttribute(ROOT_MARKER))\n    return;\n\n  document.documentElement.setAttribute(ROOT_MARKER, \"loading\");\n\n  let config;\n\n  try {\n    config = JSON.parse(configElement.textContent);\n  } catch (error) {\n    document.documentElement.setAttribute(ROOT_MARKER, \"error\");\n    console.error(\n      \"[FineRoot Bundle Controller] Invalid controller configuration.\",\n      error,\n    );\n    return;\n  }\n\n  const variants = Array.isArray(config.variants) ? config.variants : [];\n  const tiers = Array.isArray(config.tiers) ? config.tiers : [];\n  const variantMap = new Map(\n    variants.map((variant) => [String(variant.id), variant]),\n  );\n  const tierMap = new Map(tiers.map((tier) => [tier.dealBarId, tier]));\n  const productForm = document.querySelector('product-form[data-main=\"true\"]');\n  const form =\n    productForm &&\n    productForm.querySelector('form[data-type=\"add-to-cart-form\"]');\n  const mainSection =\n    productForm && productForm.closest(\".main-product-section\");\n  let cartDrawer = null;\n  const originalButtonLabels = new WeakMap();\n  const originalBundleTitles = new WeakMap();\n  const pendingCartQuantityChanges = new Map();\n\n  let currentState = null;\n  let structuralError = null;\n  let requestError = null;\n  let inFlight = false;\n  let frameId = null;\n  let pendingDealBarId = null;\n  let pendingCheckoutChampCart = null;\n  let initialized = false;\n  let lastLoggedError = null;\n\n  function controllerError(message) {\n    return new Error(`[FineRoot Bundle Controller] ${message}`);\n  }\n\n  function hasKachingStructure() {\n    const bundlesRoot =\n      mainSection && mainSection.querySelector(\".kaching-bundles\");\n\n    if (!bundlesRoot) return false;\n    if (\n      !bundlesRoot.querySelector(\n        \".kaching-bundles__bar--selected[data-deal-bar-id]\",\n      )\n    )\n      return false;\n    if (\n      !bundlesRoot.querySelector(\n        \".kaching-bundles__subscriptions--checkbox > .kaching-bundles__bar[aria-checked]\",\n      )\n    )\n      return false;\n\n    return tiers.every((tier) =>\n      bundlesRoot.querySelector(`[data-deal-bar-id=\"${tier.dealBarId}\"]`),\n    );\n  }\n\n  function validateStaticContract() {\n    const expectedProduct = EXPECTED_PRODUCTS[String(config.productId)];\n\n    if (!expectedProduct) {\n      throw controllerError(\n        `Product ${config.productId} is not configured for this controller.`,\n      );\n    }\n\n    if (!config.moneyFormat || !/\\{\\{\\s*\\w+\\s*\\}\\}/.test(config.moneyFormat)) {\n      throw controllerError(\"A valid Shopify money format is required.\");\n    }\n\n    if (\n      tiers.length !== EXPECTED_TIER_SHAPES.length ||\n      tierMap.size !== EXPECTED_TIER_SHAPES.length\n    ) {\n      throw controllerError(\"Exactly three unique bundle tiers are required.\");\n    }\n\n    const expectedVariantIds = new Set();\n\n    tiers.forEach((tier) => {\n      if (\n        !tier.dealBarId ||\n        !Number.isInteger(Number(tier.units)) ||\n        Number(tier.units) < 1 ||\n        !Number.isInteger(Number(tier.priced_units)) ||\n        Number(tier.priced_units) < 1\n      ) {\n        throw controllerError(\n          \"Every tier requires a deal bar ID and positive unit counts.\",\n        );\n      }\n\n      const tierIndex = expectedProduct.dealBarIds.indexOf(tier.dealBarId);\n      const expectedTier = EXPECTED_TIER_SHAPES[tierIndex];\n\n      if (\n        !expectedTier ||\n        Number(tier.units) !== expectedTier.units ||\n        Number(tier.priced_units) !== expectedTier.priced_units ||\n        String(tier.oneTimeVariantId) !==\n          expectedProduct.oneTimeVariantIds[tierIndex] ||\n        String(tier.autoShipVariantId) !==\n          expectedProduct.autoShipVariantIds[tierIndex] ||\n        String(tier.autoShipSellingPlanId) !==\n          (VARIANT_SELLING_PLAN_IDS.get(String(tier.autoShipVariantId)) ||\n            EXPECTED_SELLING_PLAN_ID) ||\n        !Number.isFinite(Number(tier.freeGiftCompareAtPrice)) ||\n        Number(tier.freeGiftCompareAtPrice) < 0 ||\n        (tier.bundleFullPriceOverride !== null &&\n          (!Number.isFinite(Number(tier.bundleFullPriceOverride)) ||\n            Number(tier.bundleFullPriceOverride) <= 0)) ||\n        (tier.oneTimeSavingsOverride !== null &&\n          (!Number.isFinite(Number(tier.oneTimeSavingsOverride)) ||\n            Number(tier.oneTimeSavingsOverride) <= 0)) ||\n        (tier.subscriptionSavingsOverride !== null &&\n          (!Number.isFinite(Number(tier.subscriptionSavingsOverride)) ||\n            Number(tier.subscriptionSavingsOverride) <= 0))\n      ) {\n        throw controllerError(\n          `Invalid mapping for deal bar ${tier.dealBarId}.`,\n        );\n      }\n\n      expectedVariantIds.add(String(tier.oneTimeVariantId));\n      expectedVariantIds.add(String(tier.autoShipVariantId));\n    });\n\n    if (\n      variants.length !== expectedVariantIds.size ||\n      variantMap.size !== expectedVariantIds.size\n    ) {\n      throw controllerError(\n        `Exactly ${expectedVariantIds.size} unique Shopify variants are required.`,\n      );\n    }\n\n    expectedVariantIds.forEach((variantId) => {\n      if (!variantMap.has(variantId)) {\n        throw controllerError(`Missing Shopify data for variant ${variantId}.`);\n      }\n    });\n\n    if (!productForm || !form || !mainSection) {\n      throw controllerError(\"The main product form could not be found.\");\n    }\n\n    if (\n      !window.Shopify ||\n      !window.Shopify.routes ||\n      !window.Shopify.routes.root\n    ) {\n      throw controllerError(\"The Shopify cart route is unavailable.\");\n    }\n\n    if (\n      !cartDrawer ||\n      typeof cartDrawer.getSectionsToRender !== \"function\" ||\n      typeof cartDrawer.renderContents !== \"function\" ||\n      typeof cartDrawer.setActiveElement !== \"function\"\n    ) {\n      throw controllerError(\"The Shrine cart drawer contract is unavailable.\");\n    }\n  }\n\n  function getButtons() {\n    if (!form) return [];\n\n    const buttons = new Set(\n      form.querySelectorAll('button[type=\"submit\"][name=\"add\"]'),\n    );\n    const formId = form.getAttribute(\"id\");\n\n    document\n      .querySelectorAll(\"button.main-product-atc[form]\")\n      .forEach((button) => {\n        if (button.getAttribute(\"form\") === formId) buttons.add(button);\n      });\n\n    buttons.forEach((button) => {\n      if (!originalButtonLabels.has(button)) {\n        const label = button.querySelector(\n          \".main-atc__label__text, .sticky-atc__label__text\",\n        );\n        originalButtonLabels.set(\n          button,\n          label ? label.textContent.trim() : config.strings.addToCart,\n        );\n      }\n    });\n\n    return Array.from(buttons);\n  }\n\n  function isOwnedButton(button) {\n    return Boolean(button && getButtons().includes(button));\n  }\n\n  function formatWithDelimiters(cents, precision, thousands, decimal) {\n    const numericCents = Number(cents);\n\n    if (!Number.isFinite(numericCents))\n      throw controllerError(`Cannot format invalid price ${cents}.`);\n\n    const amount = (numericCents / 100).toFixed(precision);\n    const parts = amount.split(\".\");\n    const whole = parts[0].replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, `$1${thousands}`);\n\n    return parts.length === 1 ? whole : `${whole}${decimal}${parts[1]}`;\n  }\n\n  function formatMoney(cents, wholeUnits) {\n    const placeholder = config.moneyFormat.match(/\\{\\{\\s*(\\w+)\\s*\\}\\}/);\n    if (!placeholder)\n      throw controllerError(\n        \"The Shopify money format has no supported placeholder.\",\n      );\n\n    let amount;\n\n    switch (placeholder[1]) {\n      case \"amount\":\n        amount = formatWithDelimiters(cents, wholeUnits ? 0 : 2, \",\", \".\");\n        break;\n      case \"amount_no_decimals\":\n        amount = formatWithDelimiters(cents, 0, \",\", \".\");\n        break;\n      case \"amount_with_comma_separator\":\n        amount = formatWithDelimiters(cents, wholeUnits ? 0 : 2, \".\", \",\");\n        break;\n      case \"amount_with_space_separator\":\n        amount = formatWithDelimiters(cents, wholeUnits ? 0 : 2, \" \", \",\");\n        break;\n      case \"amount_no_decimals_with_comma_separator\":\n        amount = formatWithDelimiters(cents, 0, \".\", \",\");\n        break;\n      case \"amount_with_apostrophe_separator\":\n        amount = formatWithDelimiters(cents, wholeUnits ? 0 : 2, \"'\", \".\");\n        break;\n      default:\n        throw controllerError(\n          `Unsupported money placeholder ${placeholder[1]}.`,\n        );\n    }\n\n    return config.moneyFormat.replace(placeholder[0], amount);\n  }\n\n  function setText(element, value) {\n    if (element && element.textContent.trim() !== value)\n      element.textContent = value;\n  }\n\n  function setHidden(element, hidden) {\n    if (!element) return;\n    if (hidden && !element.hasAttribute(\"hidden\"))\n      element.setAttribute(\"hidden\", \"\");\n    if (!hidden && element.hasAttribute(\"hidden\"))\n      element.removeAttribute(\"hidden\");\n  }\n\n  function getAllocation(variant, sellingPlanId) {\n    return variant.sellingPlanAllocations.find(\n      (allocation) => String(allocation.id) === String(sellingPlanId),\n    );\n  }\n\n  function getEffectivePricing(variant, refill, sellingPlanId) {\n    if (!refill) {\n      return {\n        price: Number(variant.price),\n        compareAtPrice:\n          variant.compareAtPrice == null\n            ? null\n            : Number(variant.compareAtPrice),\n      };\n    }\n\n    const allocation = getAllocation(variant, sellingPlanId);\n\n    if (!allocation) {\n      throw controllerError(\n        `Variant ${variant.id} has no allocation for selling plan ${sellingPlanId}.`,\n      );\n    }\n\n    return {\n      price: Number(allocation.price),\n      compareAtPrice:\n        variant.compareAtPrice == null ? null : Number(variant.compareAtPrice),\n    };\n  }\n\n  function getVisibleCompareAtPrice(price, compareAtPrice) {\n    const numericPrice = Number(price);\n    const numericCompareAtPrice = Number(compareAtPrice);\n\n    return Number.isFinite(numericCompareAtPrice) &&\n      numericCompareAtPrice >= numericPrice\n      ? numericCompareAtPrice\n      : null;\n  }\n\n  function resolveState() {\n    const bundlesRoot = mainSection.querySelector(\".kaching-bundles\");\n\n    if (!bundlesRoot) {\n      throw controllerError(\"Kaching Bundles has not initialized.\");\n    }\n\n    tiers.forEach((tier) => {\n      if (\n        !bundlesRoot.querySelector(`[data-deal-bar-id=\"${tier.dealBarId}\"]`)\n      ) {\n        throw controllerError(`Kaching deal bar ${tier.dealBarId} is missing.`);\n      }\n    });\n\n    const selectedBar = bundlesRoot.querySelector(\n      \".kaching-bundles__bar--selected[data-deal-bar-id]\",\n    );\n    const refillControl = bundlesRoot.querySelector(\n      \".kaching-bundles__subscriptions--checkbox > .kaching-bundles__bar[aria-checked]\",\n    );\n\n    if (!selectedBar)\n      throw controllerError(\"No Kaching bundle tier is selected.\");\n    if (!refillControl)\n      throw controllerError(\"The automatic-refill checkbox is missing.\");\n\n    const tier = tierMap.get(selectedBar.dataset.dealBarId);\n    if (!tier)\n      throw controllerError(\n        `Unknown Kaching deal bar ${selectedBar.dataset.dealBarId}.`,\n      );\n\n    const refill = refillControl.getAttribute(\"aria-checked\") === \"true\";\n    let sellingPlanId = null;\n\n    if (refill) {\n      const sellingPlanSelect = bundlesRoot.querySelector(\n        \".kaching-bundles__selling-plan-select\",\n      );\n      const requiredSellingPlanId = String(tier.autoShipSellingPlanId);\n\n      if (sellingPlanSelect) {\n        watchValueProperty(\n          sellingPlanSelect,\n          window.HTMLSelectElement.prototype,\n        );\n        const requiredOption = Array.from(sellingPlanSelect.options).find(\n          (option) => String(option.value) === requiredSellingPlanId,\n        );\n\n        if (!requiredOption) {\n          throw controllerError(\n            `Selling plan ${requiredSellingPlanId} is unavailable for deal bar ${tier.dealBarId}.`,\n          );\n        }\n\n        if (sellingPlanSelect.value !== requiredSellingPlanId) {\n          sellingPlanSelect.value = requiredSellingPlanId;\n        }\n\n        if (sellingPlanSelect.value !== requiredSellingPlanId) {\n          throw controllerError(\n            `Automatic refill requires selling plan ${requiredSellingPlanId}.`,\n          );\n        }\n      }\n\n      sellingPlanId = requiredSellingPlanId;\n    }\n\n    const variantId = String(\n      refill ? tier.autoShipVariantId : tier.oneTimeVariantId,\n    );\n    const variant = variantMap.get(variantId);\n    const pricing = getEffectivePricing(variant, refill, sellingPlanId);\n    const compareAtPrice = getVisibleCompareAtPrice(\n      pricing.price,\n      pricing.compareAtPrice,\n    );\n\n    return {\n      tier,\n      refill,\n      sellingPlanId,\n      variant,\n      variantId,\n      effectivePrice: pricing.price,\n      compareAtPrice,\n      available: variant.available === true,\n    };\n  }\n\n  function updateBundleBar(bar, tier, refill, sellingPlanId) {\n    const variantId = String(\n      refill ? tier.autoShipVariantId : tier.oneTimeVariantId,\n    );\n    const variant = variantMap.get(variantId);\n    const pricing = getEffectivePricing(variant, refill, sellingPlanId);\n    const compareAtPrice = getVisibleCompareAtPrice(\n      pricing.price,\n      pricing.compareAtPrice,\n    );\n    const barPrice = pricing.price * Number(tier.priced_units);\n    const barCompareAtPrice = compareAtPrice\n      ? compareAtPrice * Number(tier.units)\n      : null;\n    const displayedBarCompareAtPrice =\n      tier.bundleFullPriceOverride !== null\n        ? Number(tier.bundleFullPriceOverride)\n        : barCompareAtPrice;\n    const salePrice = bar.querySelector(\".kaching-bundles__bar-price\");\n\n    if (!salePrice)\n      throw controllerError(\n        `Deal bar ${tier.dealBarId} has no sale-price element.`,\n      );\n\n    setText(salePrice, formatMoney(barPrice));\n\n    let fullPrice = bar.querySelector(\".kaching-bundles__bar-full-price\");\n\n    if (!fullPrice) {\n      fullPrice = document.createElement(\"div\");\n      fullPrice.className = \"kaching-bundles__bar-full-price\";\n      fullPrice.dataset.a11yLabel = \"system.original_price\";\n      salePrice.insertAdjacentElement(\"afterend\", fullPrice);\n    }\n\n    setText(\n      fullPrice,\n      displayedBarCompareAtPrice\n        ? formatMoney(displayedBarCompareAtPrice)\n        : \"\",\n    );\n    setHidden(fullPrice, !displayedBarCompareAtPrice);\n\n    let subtitle = bar.querySelector(\".kaching-bundles__bar-subtitle\");\n\n    if (!subtitle) {\n      const secondLine = bar.querySelector(\".kaching-bundles__bar-second-line\");\n      if (!secondLine)\n        throw controllerError(\n          `Deal bar ${tier.dealBarId} has no subtitle container.`,\n        );\n\n      subtitle = document.createElement(\"div\");\n      subtitle.className = \"kaching-bundles__bar-subtitle\";\n      secondLine.appendChild(subtitle);\n    }\n\n   const isSavingsProduct =\n  String(config.productId) === \"8072686108715\";\n\nif (!refill && tier.oneTimeSavingsOverride !== null) {\n  setText(\n    subtitle,\n    `You Save ${formatMoney(Number(tier.oneTimeSavingsOverride), true)}`,\n  );\n} else if (!refill || !isSavingsProduct) {\n  setText(\n    subtitle,\n    `${formatMoney(barPrice / Number(tier.units))} per bottle`,\n  );\n} else {\n  let savingsAmount;\n\n  if (tier.subscriptionSavingsOverride !== null) {\n    savingsAmount = Number(tier.subscriptionSavingsOverride);\n  } else {\n    const buyOneTier = tiers.find(\n      (configuredTier) => Number(configuredTier.priced_units) === 1,\n    );\n\n    const buyOneVariant = variantMap.get(\n      String(buyOneTier.oneTimeVariantId),\n    );\n\n    const buyOnePricing = getEffectivePricing(\n      buyOneVariant,\n      false,\n      null,\n    );\n\n    const buyOneCompareAtPrice = getVisibleCompareAtPrice(\n      buyOnePricing.price,\n      buyOnePricing.compareAtPrice,\n    );\n\n    if (!buyOneCompareAtPrice) {\n      throw controllerError(\n        \"Cannot calculate subscription savings without the Buy One compare-at price.\",\n      );\n    }\n\n    savingsAmount =\n      buyOneCompareAtPrice * 0.5 * Number(tier.priced_units) +\n      Number(tier.freeGiftCompareAtPrice);\n  }\n\n  if (!Number.isFinite(savingsAmount) || savingsAmount <= 0) {\n    throw controllerError(\n      `Cannot calculate subscription savings for deal bar ${tier.dealBarId}.`,\n    );\n  }\n\n  const roundedSavingsAmount =\n    Math.round(savingsAmount / 500) * 500;\n\n  setText(\n    subtitle,\n    `You save ${formatMoney(roundedSavingsAmount, true)}`,\n  );\n}\n\nsetHidden(subtitle, false);\n  }\n\n  function updateBundlePrices(state) {\n    const bundlesRoot = mainSection.querySelector(\".kaching-bundles\");\n\n    tiers.forEach((tier) => {\n      const bar = bundlesRoot.querySelector(\n        `[data-deal-bar-id=\"${tier.dealBarId}\"]`,\n      );\n      updateBundleBar(\n        bar,\n        tier,\n        state.refill,\n        state.refill ? tier.autoShipSellingPlanId : null,\n      );\n    });\n  }\n\n  function updateBundleTitles(state) {\n    if (String(config.productId) !== \"8072686108715\") return;\n\n    const bundlesRoot = mainSection.querySelector(\".kaching-bundles\");\n\n    tiers.forEach((tier) => {\n      const bar = bundlesRoot.querySelector(\n        `[data-deal-bar-id=\"${tier.dealBarId}\"]`,\n      );\n      const title = bar && bar.querySelector(\".kaching-bundles__bar-title\");\n\n      if (!title) {\n        throw controllerError(\n          `Deal bar ${tier.dealBarId} has no title element.`,\n        );\n      }\n\n      if (!originalBundleTitles.has(title)) {\n        originalBundleTitles.set(title, title.textContent.trim());\n      }\n\n      let titleText = originalBundleTitles.get(title);\n\n      if (!state.refill && Number(tier.priced_units) === 2) {\n        titleText = \"Buy 2\";\n      } else if (!state.refill && Number(tier.priced_units) === 3) {\n        titleText = \"Buy 3\";\n      }\n\n      setText(title, titleText);\n    });\n  }\n\n  function updateSubscriptionTitle(tier) {\n    const bundlesRoot = mainSection.querySelector(\".kaching-bundles\");\n    const titleElements = bundlesRoot.querySelectorAll(\n      \".kaching-bundles__subscriptions__title\",\n    );\n\n    if (titleElements.length === 0) {\n      throw controllerError(\"The automatic-refill title is missing.\");\n    }\n\n    const oneTimeVariant = variantMap.get(String(tier.oneTimeVariantId));\n    const autoShipVariant = variantMap.get(String(tier.autoShipVariantId));\n    const oneTimePricing = getEffectivePricing(oneTimeVariant, false, null);\n    const autoShipPricing = getEffectivePricing(\n      autoShipVariant,\n      true,\n      tier.autoShipSellingPlanId,\n    );\n    const oneTimePrice = Number(oneTimePricing.price);\n    const autoShipPrice = Number(autoShipPricing.price);\n\n    if (\n      !Number.isFinite(oneTimePrice) ||\n      oneTimePrice <= 0 ||\n      !Number.isFinite(autoShipPrice) ||\n      autoShipPrice < 0\n    ) {\n      throw controllerError(\n        `Cannot calculate automatic-refill savings for deal bar ${tier.dealBarId}.`,\n      );\n    }\n\n    const savingsPercentage =\n      ((oneTimePrice - autoShipPrice) / oneTimePrice) * 100;\n    const displayedPercentage = [20, 30].reduce((closest, option) =>\n      Math.abs(option - savingsPercentage) <\n      Math.abs(closest - savingsPercentage)\n        ? option\n        : closest,\n    );\n    const title = `Save ${displayedPercentage}% with automatic refills`;\n\n    titleElements.forEach((element) => setText(element, title));\n  }\n\n  function updateSubscriptionSubtitle(tier) {\n    if (String(config.productId) !== \"8072686108715\") return;\n\n    const bundlesRoot = mainSection.querySelector(\".kaching-bundles\");\n    const subtitleElements = bundlesRoot.querySelectorAll(\n      \".kaching-bundles__subscriptions__subtitle\",\n    );\n\n    if (subtitleElements.length === 0) {\n      throw controllerError(\"The automatic-refill subtitle is missing.\");\n    }\n\n    const interval = Number(tier.units) === 1 ? \"month\" : \"two months\";\n    const subtitle = `Shipped every ${interval}. No commitment. Cancel anytime`;\n\n    subtitleElements.forEach((element) => setText(element, subtitle));\n  }\n\n  function updatePriceRoot(priceRoot, state) {\n    if (!priceRoot) return;\n\n    const tierPrice = state.effectivePrice * Number(state.tier.priced_units);\n    const tierCompareAtPrice =\n      state.tier.bundleFullPriceOverride !== null\n        ? Number(state.tier.bundleFullPriceOverride)\n        : state.compareAtPrice\n          ? state.compareAtPrice * Number(state.tier.units)\n          : null;\n    const formattedPrice = formatMoney(tierPrice);\n    const formattedCompareAt = state.compareAtPrice\n      ? formatMoney(state.compareAtPrice)\n      : \"\";\n    const hasCompareAt = Boolean(tierCompareAtPrice);\n\n    priceRoot\n      .querySelectorAll(\".price__regular .price-item--regular\")\n      .forEach((element) => {\n        setText(element, formattedPrice);\n      });\n    priceRoot\n      .querySelectorAll(\".price-item--sale.price-item--last\")\n      .forEach((element) => {\n        setText(element, formattedPrice);\n      });\n    priceRoot\n      .querySelectorAll(\".price__compare-price .price-item--regular\")\n      .forEach((element) => {\n        setText(element, formattedCompareAt);\n      });\n    priceRoot\n      .querySelectorAll(\".price-item--regular.main-comapre-price\")\n      .forEach((element) => {\n        setText(\n          element,\n          tierCompareAtPrice ? formatMoney(tierCompareAtPrice) : \"\",\n        );\n      });\n    priceRoot.querySelectorAll(\".price__compare-price\").forEach((element) => {\n      setHidden(element, !hasCompareAt);\n    });\n\n    priceRoot.classList.toggle(\"price--on-sale\", hasCompareAt);\n    priceRoot.classList.toggle(\"price--sold-out\", !state.available);\n\n    const percentage = hasCompareAt\n      ? `${Math.round(((tierCompareAtPrice - tierPrice) / tierCompareAtPrice) * 100)}%`\n      : \"\";\n    const amountSaved = hasCompareAt\n      ? formatMoney(tierCompareAtPrice - tierPrice)\n      : \"\";\n\n    priceRoot\n      .querySelectorAll(\".badge__percentage-saved\")\n      .forEach((element) => setText(element, percentage));\n    priceRoot\n      .querySelectorAll(\".badge__money-saved\")\n      .forEach((element) => setText(element, amountSaved));\n    priceRoot\n      .querySelectorAll(\".price__badge-sale, .price__badge-custom\")\n      .forEach((element) => {\n        setHidden(element, !hasCompareAt || !state.available);\n      });\n    priceRoot.querySelectorAll(\".price__badge-sold-out\").forEach((element) => {\n      setHidden(element, state.available);\n    });\n  }\n\n  function updateProductPrices(state) {\n    const mainPriceRoot = mainSection.querySelector(\n      \".product-page-price .price\",\n    );\n    const stickyButton = getButtons().find((button) =>\n      button.closest(\"sticky-atc\"),\n    );\n    const stickyAtc = stickyButton && stickyButton.closest(\"sticky-atc\");\n    const stickyPriceRoot =\n      stickyAtc && stickyAtc.querySelector(\".sticky-atc__price .price\");\n\n    if (!mainPriceRoot)\n      throw controllerError(\"The main product price is missing.\");\n\n    updatePriceRoot(mainPriceRoot, state);\n    updatePriceRoot(stickyPriceRoot, state);\n\n    mainSection\n      .querySelectorAll(`[class*=\"main-atc-price-span-\"]`)\n      .forEach((element) => {\n        setText(element, formatMoney(state.effectivePrice));\n      });\n\n    if (stickyAtc) {\n      stickyAtc\n        .querySelectorAll(`[class*=\"main-atc-price-span-\"]`)\n        .forEach((element) => {\n          setText(element, formatMoney(state.effectivePrice));\n        });\n    }\n\n    mainSection\n      .querySelectorAll(\".main-atc-price, .sticky-atc__button-price\")\n      .forEach((element) => {\n        setHidden(element, !state.available);\n      });\n\n    if (stickyAtc) {\n      stickyAtc\n        .querySelectorAll(\".main-atc-price, .sticky-atc__button-price\")\n        .forEach((element) => {\n          setHidden(element, !state.available);\n        });\n    }\n  }\n\n  function watchValueProperty(element, prototype) {\n    if (element.hasAttribute(\"data-fineroot-controlled-value\")) return;\n\n    const descriptor = Object.getOwnPropertyDescriptor(prototype, \"value\");\n\n    if (\n      !descriptor ||\n      typeof descriptor.get !== \"function\" ||\n      typeof descriptor.set !== \"function\"\n    ) {\n      throw controllerError(\n        `The ${element.tagName.toLowerCase()} value contract is unavailable.`,\n      );\n    }\n\n    Object.defineProperty(element, \"value\", {\n      configurable: true,\n      get() {\n        return descriptor.get.call(this);\n      },\n      set(value) {\n        const previousValue = descriptor.get.call(this);\n        descriptor.set.call(this, value);\n\n        if (descriptor.get.call(this) !== previousValue) scheduleSynchronize();\n      },\n    });\n    element.setAttribute(\"data-fineroot-controlled-value\", \"\");\n  }\n\n  function ensureHiddenInput(name, value) {\n    let input = form.querySelector(`input[type=\"hidden\"][name=\"${name}\"]`);\n\n    if (!input) {\n      input = document.createElement(\"input\");\n      input.type = \"hidden\";\n      input.name = name;\n      form.appendChild(input);\n    }\n\n    watchValueProperty(input, window.HTMLInputElement.prototype);\n\n    if (input.value !== String(value)) input.value = String(value);\n    if (input.getAttribute(\"value\") !== String(value))\n      input.setAttribute(\"value\", String(value));\n\n    return input;\n  }\n\n  function synchronizeForm(state) {\n    ensureHiddenInput(\"id\", state.variantId);\n    ensureHiddenInput(\"quantity\", state.tier.units);\n\n    const sellingPlanInput = form.querySelector(\n      'input[type=\"hidden\"][name=\"selling_plan\"]',\n    );\n\n    if (state.refill) {\n      ensureHiddenInput(\"selling_plan\", state.sellingPlanId);\n    } else if (sellingPlanInput) {\n      sellingPlanInput.remove();\n    }\n  }\n\n  function updateButtons(state) {\n    getButtons().forEach((button) => {\n      const unavailable =\n        !state || !state.available || Boolean(structuralError);\n      const disabled = unavailable || inFlight;\n      const label = button.querySelector(\n        \".main-atc__label__text, .sticky-atc__label__text\",\n      );\n\n      if (button.disabled !== disabled) button.disabled = disabled;\n      if (button.hasAttribute(\"data-unavailable\") !== unavailable) {\n        button.toggleAttribute(\"data-unavailable\", unavailable);\n      }\n      if (\n        button.getAttribute(\"aria-disabled\") !== (disabled ? \"true\" : \"false\")\n      ) {\n        button.setAttribute(\"aria-disabled\", disabled ? \"true\" : \"false\");\n      }\n\n      if (label && !inFlight) {\n        setText(\n          label,\n          unavailable\n            ? config.strings.soldOut\n            : originalButtonLabels.get(button) || config.strings.addToCart,\n        );\n      }\n    });\n  }\n\n  function setLoading(loading) {\n    inFlight = loading;\n\n    getButtons().forEach((button) => {\n      button.classList.toggle(\"loading\", loading);\n      const disabled =\n        loading ||\n        !currentState ||\n        !currentState.available ||\n        Boolean(structuralError);\n      if (button.disabled !== disabled) button.disabled = disabled;\n      if (\n        button.getAttribute(\"aria-disabled\") !== (disabled ? \"true\" : \"false\")\n      ) {\n        button.setAttribute(\"aria-disabled\", disabled ? \"true\" : \"false\");\n      }\n\n      button\n        .querySelectorAll(\".loading-overlay__spinner\")\n        .forEach((spinner) => {\n          spinner.classList.toggle(\"hidden\", !loading);\n        });\n    });\n  }\n\n  function showError(error) {\n    const message = error instanceof Error ? error.message : String(error);\n    const wrapper =\n      productForm &&\n      productForm.querySelector(\".product-form__error-message-wrapper\");\n    const messageElement =\n      wrapper && wrapper.querySelector(\".product-form__error-message\");\n\n    if (wrapper && wrapper.hidden) wrapper.hidden = false;\n    if (messageElement) messageElement.textContent = message;\n\n    document.querySelectorAll(\".sticky-atc__error\").forEach((element) => {\n      element.textContent = message;\n      element.style.display = \"block\";\n    });\n\n    if (lastLoggedError !== message) {\n      console.error(message);\n      lastLoggedError = message;\n    }\n  }\n\n  function clearError() {\n    if (requestError || structuralError) return;\n\n    const wrapper =\n      productForm &&\n      productForm.querySelector(\".product-form__error-message-wrapper\");\n    const messageElement =\n      wrapper && wrapper.querySelector(\".product-form__error-message\");\n    if (wrapper && !wrapper.hidden) wrapper.hidden = true;\n    if (messageElement && messageElement.textContent)\n      messageElement.textContent = \"\";\n\n    document.querySelectorAll(\".sticky-atc__error\").forEach((element) => {\n      element.textContent = \"\";\n      element.style.display = \"none\";\n    });\n  }\n\n  function synchronize() {\n    try {\n      const state = resolveState();\n\n      updateBundlePrices(state);\n      updateBundleTitles(state);\n      updateSubscriptionTitle(state.tier);\n      updateSubscriptionSubtitle(state.tier);\n      synchronizeForm(state);\n      updateProductPrices(state);\n\n      currentState = state;\n      structuralError = null;\n      lastLoggedError = null;\n      document.documentElement.setAttribute(ROOT_MARKER, \"ready\");\n      updateButtons(state);\n      clearError();\n\n      return state;\n    } catch (error) {\n      currentState = null;\n      structuralError = error;\n      document.documentElement.setAttribute(ROOT_MARKER, \"error\");\n      updateButtons(null);\n      showError(error);\n      return null;\n    }\n  }\n\n  function scheduleSynchronize(options) {\n    if (options && options.clearRequestError) requestError = null;\n    if (frameId !== null) return;\n\n    frameId = window.requestAnimationFrame(() => {\n      frameId = null;\n      synchronize();\n    });\n  }\n\n  function getSectionIds() {\n    const sections = cartDrawer\n      .getSectionsToRender()\n      .map((section) => section.id);\n\n    if (\n      !sections.includes(\"cart-drawer\") ||\n      !sections.includes(\"cart-icon-bubble\")\n    ) {\n      throw controllerError(\n        \"The required cart drawer sections are unavailable.\",\n      );\n    }\n\n    return sections;\n  }\n\n  function getKachingCartItems(state) {\n    const propertyInput = form.querySelector(\n      `input[name=\"properties[${KACHING_PROPERTY_NAME}]\"]`,\n    );\n\n    if (!propertyInput || !propertyInput.value) {\n      throw controllerError(\n        `Kaching property ${KACHING_PROPERTY_NAME} is unavailable.`,\n      );\n    }\n\n    let kachingProperty;\n\n    try {\n      kachingProperty = JSON.parse(window.atob(propertyInput.value));\n    } catch (error) {\n      throw controllerError(\n        `Kaching property ${KACHING_PROPERTY_NAME} is invalid.`,\n      );\n    }\n\n    if (\n      !kachingProperty ||\n      typeof kachingProperty.deal !== \"string\" ||\n      (kachingProperty.v !== undefined &&\n        typeof kachingProperty.v !== \"string\") ||\n      kachingProperty.main !== true\n    ) {\n      throw controllerError(\n        `Kaching property ${KACHING_PROPERTY_NAME} is incomplete.`,\n      );\n    }\n\n    const paidUnits = Number(state.tier.priced_units);\n    const freeUnits = Number(state.tier.units) - paidUnits;\n    const makeItem = (quantity, property) => {\n      const item = {\n        id: Number(state.variantId),\n        quantity,\n        properties: {\n          [KACHING_PROPERTY_NAME]: JSON.stringify(property),\n        },\n      };\n\n      if (state.refill) item.selling_plan = Number(state.sellingPlanId);\n\n      return item;\n    };\n\n    if (freeUnits === 0) {\n      return [makeItem(paidUnits, kachingProperty)];\n    }\n\n    if (\n      typeof kachingProperty.id !== \"string\" ||\n      kachingProperty.bar !== state.tier.dealBarId\n    ) {\n      throw controllerError(\n        `Kaching BOGO property is invalid for deal bar ${state.tier.dealBarId}.`,\n      );\n    }\n\n    const paidProperty = {\n      deal: kachingProperty.deal,\n      pp: Number(config.productId),\n      main: true,\n      id: kachingProperty.id,\n      bar: kachingProperty.bar,\n    };\n\n    if (typeof kachingProperty.v === \"string\") {\n      paidProperty.v = kachingProperty.v;\n    }\n\n    const freeProperty = {\n      ...kachingProperty,\n      bxgy: true,\n    };\n\n    return [\n      makeItem(paidUnits, paidProperty),\n      makeItem(freeUnits, freeProperty),\n    ];\n  }\n\n  function isPendingKachingPropertyError(error) {\n    const message = error instanceof Error ? error.message : String(error);\n\n    return (\n      message.includes(`Kaching property ${KACHING_PROPERTY_NAME}`) ||\n      message.includes(\"Kaching BOGO property is invalid\")\n    );\n  }\n\n  async function waitForKachingCartItems(state) {\n    const deadline = window.performance.now() + 1500;\n\n    while (true) {\n      try {\n        return getKachingCartItems(state);\n      } catch (error) {\n        if (\n          !isPendingKachingPropertyError(error) ||\n          window.performance.now() >= deadline\n        ) {\n          throw error;\n        }\n\n        await new Promise((resolve) => window.setTimeout(resolve, 50));\n      }\n    }\n  }\n\n  async function waitForPendingDealBar() {\n    if (!pendingDealBarId) return;\n\n    const expectedDealBarId = pendingDealBarId;\n    const deadline = window.performance.now() + 1500;\n\n    while (true) {\n      const selectedBar = mainSection.querySelector(\n        \".kaching-bundles__bar--selected[data-deal-bar-id]\",\n      );\n\n      if (selectedBar?.dataset.dealBarId === expectedDealBarId) {\n        pendingDealBarId = null;\n        return;\n      }\n\n      if (window.performance.now() >= deadline) {\n        throw controllerError(\n          `Kaching deal bar ${expectedDealBarId} did not become selected.`,\n        );\n      }\n\n      await new Promise((resolve) => window.setTimeout(resolve, 25));\n    }\n  }\n\n  function getRequestUrl(input) {\n    if (typeof input === \"string\") return input;\n    if (input instanceof URL) return input.href;\n    return input instanceof Request ? input.url : \"\";\n  }\n\n  function isCheckoutChampCartAdd(input, init) {\n    const url = getRequestUrl(input);\n\n    return (\n      window.__ccRedirecting === true &&\n      init?.method?.toUpperCase() === \"POST\" &&\n      init.body instanceof FormData &&\n      new URL(url, window.location.origin).pathname.endsWith(\"/cart/add.js\")\n    );\n  }\n\n  function isCheckoutChampCartRead(input, init) {\n    const url = getRequestUrl(input);\n\n    return (\n      window.__ccRedirecting === true &&\n      (!init?.method || init.method.toUpperCase() === \"GET\") &&\n      new URL(url, window.location.origin).pathname.endsWith(\"/cart.js\")\n    );\n  }\n\n  function adaptCartForCheckoutChamp(cart) {\n    const adaptedCart = structuredClone(cart);\n\n    adaptedCart.items.forEach((item) => {\n      const encodedBundle = item.properties?.[KACHING_PROPERTY_NAME];\n      if (!encodedBundle) return;\n\n      let bundle;\n\n      try {\n        bundle = JSON.parse(encodedBundle);\n      } catch (error) {\n        return;\n      }\n\n      const currentDealBarId = bundle.bar || bundle.bid;\n      const legacyDealBarId =\n        CHECKOUT_CHAMP_LEGACY_DEAL_BAR_IDS.get(currentDealBarId);\n\n      if (!legacyDealBarId) return;\n      if (bundle.bar) bundle.bar = legacyDealBarId;\n      if (bundle.bid) bundle.bid = legacyDealBarId;\n\n      item.properties[KACHING_PROPERTY_NAME] = JSON.stringify(bundle);\n    });\n\n    return adaptedCart;\n  }\n\n  function cartContainsPendingCheckoutChampAdd(cart) {\n    if (!pendingCheckoutChampCart) return true;\n\n    const quantity = cart.items.reduce((total, item) => {\n      return String(item.variant_id) === pendingCheckoutChampCart.variantId\n        ? total + Number(item.quantity)\n        : total;\n    }, 0);\n\n    return quantity >= pendingCheckoutChampCart.quantity;\n  }\n\n  async function waitForCheckoutChampCart(input, init) {\n    const deadline = window.performance.now() + 2000;\n\n    while (true) {\n      const response = await nativeFetch(input, init);\n      if (!response.ok) return { response, cart: null };\n\n      const cart = await response.json();\n\n      if (\n        cartContainsPendingCheckoutChampAdd(cart) ||\n        window.performance.now() >= deadline\n      ) {\n        return { response, cart };\n      }\n\n      await new Promise((resolve) => window.setTimeout(resolve, 50));\n    }\n  }\n\n  async function checkoutChampCompatibleFetch(input, init) {\n    if (isCheckoutChampCartAdd(input, init)) {\n      await waitForPendingDealBar();\n      const state = synchronize();\n\n      if (!state) {\n        throw (\n          requestError ||\n          structuralError ||\n          controllerError(\"No bundle is selected.\")\n        );\n      }\n      if (!state.available) {\n        throw controllerError(`Variant ${state.variantId} is unavailable.`);\n      }\n\n      const items = await waitForKachingCartItems(state);\n      const response = await nativeFetch(input, {\n        ...init,\n        headers: {\n          Accept: \"application/json\",\n          \"Content-Type\": \"application/json\",\n          \"X-Requested-With\": \"XMLHttpRequest\",\n        },\n        body: JSON.stringify({\n          items,\n        }),\n      });\n\n      if (response.ok) {\n        pendingCheckoutChampCart = {\n          variantId: state.variantId,\n          quantity: items.reduce((total, item) => total + item.quantity, 0),\n        };\n      }\n\n      return response;\n    }\n\n    if (isCheckoutChampCartRead(input, init)) {\n      const { response, cart: fetchedCart } = await waitForCheckoutChampCart(\n        input,\n        init,\n      );\n      if (!response.ok) return response;\n\n      if (cartContainsPendingCheckoutChampAdd(fetchedCart)) {\n        pendingCheckoutChampCart = null;\n      }\n\n      const cart = adaptCartForCheckoutChamp(fetchedCart);\n\n      return new Response(JSON.stringify(cart), {\n        status: response.status,\n        statusText: response.statusText,\n        headers: { \"Content-Type\": \"application/json\" },\n      });\n    }\n\n    return nativeFetch(input, init);\n  }\n\n  function installNativeKachingFormDataAdapter() {\n    const prototype = window.FormData.prototype;\n    if (prototype.append.finerootBundleController === true) return;\n\n    const downstreamAppend = prototype.append;\n    const downstreamDelete = prototype.delete;\n    const downstreamSet = prototype.set;\n    const propertyPattern = new RegExp(\n      `^items\\\\[(\\\\d+)\\\\]\\\\[properties\\\\]\\\\[${KACHING_PROPERTY_NAME}\\\\]$`,\n    );\n    const flatPropertyName = `properties[${KACHING_PROPERTY_NAME}]`;\n\n    function append(name, value, ...args) {\n      const result = downstreamAppend.call(this, name, value, ...args);\n      const match = typeof name === \"string\" && name.match(propertyPattern);\n      const isFlatProperty = name === flatPropertyName;\n\n      if ((!match && !isFlatProperty) || typeof value !== \"string\")\n        return result;\n\n      let property;\n\n      try {\n        property = JSON.parse(value);\n      } catch (error) {\n        return result;\n      }\n\n      if (\n        property?.main !== true ||\n        typeof property.bid !== \"string\" ||\n        !tierMap.has(property.bid)\n      ) {\n        return result;\n      }\n\n      const state = synchronize();\n      if (!state) {\n        throw (\n          requestError ||\n          structuralError ||\n          controllerError(\"No bundle is selected.\")\n        );\n      }\n      if (property.bid !== state.tier.dealBarId) {\n        throw controllerError(\n          `Kaching native property is invalid for deal bar ${state.tier.dealBarId}.`,\n        );\n      }\n\n      const mainItemIndex = match && match[1];\n      const mainQuantityName = isFlatProperty\n        ? \"quantity\"\n        : `items[${mainItemIndex}][quantity]`;\n      const mainQuantity = Number(this.get(mainQuantityName));\n\n      if (mainQuantity !== Number(state.tier.priced_units)) {\n        throw controllerError(\n          `Kaching supplied an invalid main quantity for deal bar ${state.tier.dealBarId}.`,\n        );\n      }\n\n      const mainVariantName = isFlatProperty\n        ? \"id\"\n        : `items[${mainItemIndex}][id]`;\n      downstreamSet.call(this, mainVariantName, state.variantId);\n\n      if (!isFlatProperty) {\n        Array.from(this.keys())\n          .filter((key) => /^items\\[\\d+\\]\\[parent_id\\]$/.test(key))\n          .forEach((key) => downstreamSet.call(this, key, state.variantId));\n      }\n\n      const sellingPlanName = isFlatProperty\n        ? \"selling_plan\"\n        : `items[${mainItemIndex}][selling_plan]`;\n      if (state.refill) {\n        downstreamSet.call(this, sellingPlanName, state.sellingPlanId);\n      } else {\n        downstreamDelete.call(this, sellingPlanName);\n      }\n\n      pendingCheckoutChampCart = {\n        variantId: state.variantId,\n        quantity: mainQuantity,\n      };\n\n      return result;\n    }\n\n    append.finerootBundleController = true;\n    prototype.append = append;\n  }\n\n  function replaceSectionFromResponse(selector, html) {\n    if (!html) return false;\n\n    const parsedSection = new DOMParser().parseFromString(html, \"text/html\");\n    const incoming = parsedSection.querySelector(selector);\n    const current = document.querySelector(selector);\n\n    if (!incoming || !current) return false;\n\n    current.innerHTML = incoming.innerHTML;\n    return true;\n  }\n\n  async function addControlledVariant() {\n    if (inFlight) return;\n\n    requestError = null;\n    setLoading(true);\n\n    try {\n      await waitForPendingDealBar();\n      const state = synchronize();\n\n      if (!state) return;\n      if (!state.available) {\n        throw controllerError(`Variant ${state.variantId} is unavailable.`);\n      }\n\n      const wasEmpty = cartDrawer.classList.contains(\"is-empty\");\n      cartDrawer.setActiveElement(document.activeElement);\n\n      const body = {\n        items: await waitForKachingCartItems(state),\n        sections: getSectionIds(),\n        sections_url: window.location.pathname,\n      };\n\n      const response = await nativeFetch(\n        `${window.Shopify.routes.root}cart/add.js`,\n        {\n          method: \"POST\",\n          headers: {\n            Accept: \"application/json\",\n            \"Content-Type\": \"application/json\",\n            \"X-Requested-With\": \"XMLHttpRequest\",\n          },\n          body: JSON.stringify(body),\n        },\n      );\n      const data = await response.json();\n\n      if (!response.ok || data.status) {\n        throw new Error(\n          data.description ||\n            data.message ||\n            `Cart request failed with status ${response.status}.`,\n        );\n      }\n\n      const shouldSkipCart = Boolean(\n        form.querySelector('[data-skip-cart=\"true\"]'),\n      );\n\n      if (shouldSkipCart) {\n        window.location.assign(`${window.Shopify.routes.root}checkout`);\n        return;\n      }\n\n      if (!data.sections)\n        throw controllerError(\"Shopify returned no cart drawer sections.\");\n\n      if (wasEmpty) {\n        const drawerReplaced = replaceSectionFromResponse(\n          '[id^=\"CartDrawer\"]',\n          data.sections[\"cart-drawer\"],\n        );\n        const bubbleReplaced = replaceSectionFromResponse(\n          \"#cart-icon-bubble\",\n          data.sections[\"cart-icon-bubble\"],\n        );\n\n        if (!drawerReplaced || !bubbleReplaced) {\n          const sectionResponse = await nativeFetch(\n            `${window.Shopify.routes.root}?section_id=cart-drawer`,\n            { headers: { Accept: \"text/html\" } },\n          );\n          const sectionHtml = await sectionResponse.text();\n          replaceSectionFromResponse('[id^=\"CartDrawer\"]', sectionHtml);\n        }\n\n        cartDrawer.classList.remove(\"is-empty\");\n      } else {\n        cartDrawer.renderContents(data);\n      }\n\n      if (typeof cartDrawer.open === \"function\") cartDrawer.open();\n    } catch (error) {\n      requestError = error;\n      showError(error);\n    } finally {\n      setLoading(false);\n      updateButtons(currentState);\n    }\n  }\n\n  function usesNativeKachingCart() {\n    const propertyInput = form.querySelector(\n      `input[name=\"properties[${KACHING_PROPERTY_NAME}]\"]`,\n    );\n\n    if (!propertyInput || !propertyInput.value) return false;\n\n    try {\n      const property = JSON.parse(window.atob(propertyInput.value));\n\n      return (\n        property?.main === true &&\n        typeof property.bid === \"string\" &&\n        tierMap.has(property.bid)\n      );\n    } catch (error) {\n      return false;\n    }\n  }\n\n  function interceptClick(event) {\n    const button = event.target.closest(\"button\");\n    if (!isOwnedButton(button)) return;\n    if (usesNativeKachingCart()) return;\n\n    event.preventDefault();\n    event.stopPropagation();\n    event.stopImmediatePropagation();\n    addControlledVariant();\n  }\n\n  function interceptSubmit(event) {\n    if (event.target !== form) return;\n    if (usesNativeKachingCart()) return;\n\n    event.preventDefault();\n    event.stopPropagation();\n    event.stopImmediatePropagation();\n    addControlledVariant();\n  }\n\n  function isCartQuantityMismatchMessage(message) {\n    const template = window.cartStrings && window.cartStrings.quantityError;\n\n    if (typeof template !== \"string\" || !template.includes(\"[quantity]\"))\n      return false;\n\n    const [prefix, suffix] = template.split(\"[quantity]\");\n    return message.startsWith(prefix) && message.endsWith(suffix);\n  }\n\n  function trackCartQuantityChange(event) {\n    const input = event.target.closest(\n      \".cart-drawer .quantity__input[data-quantity-variant-id]\",\n    );\n\n    if (!input || !cartDrawer.contains(input)) return;\n\n    const variantId = String(input.dataset.quantityVariantId);\n    if (!variantMap.has(variantId)) return;\n\n    const cartItem = input.closest(\".cart-item\");\n    const cartQuantity = Number(input.dataset.cartQuantity);\n    const previousLineQuantity = Number(cartItem && cartItem.dataset.quantity);\n    const requestedLineQuantity = Number(input.value);\n\n    if (\n      !Number.isInteger(cartQuantity) ||\n      !Number.isInteger(previousLineQuantity) ||\n      !Number.isInteger(requestedLineQuantity) ||\n      requestedLineQuantity < 0\n    )\n      return;\n\n    const pendingChange = {\n      expectedQuantity:\n        cartQuantity - previousLineQuantity + requestedLineQuantity,\n    };\n    pendingCartQuantityChanges.set(variantId, pendingChange);\n\n    window.setTimeout(() => {\n      if (pendingCartQuantityChanges.get(variantId) === pendingChange) {\n        pendingCartQuantityChanges.delete(variantId);\n      }\n    }, 10000);\n  }\n\n  function reconcileCartQuantityErrors() {\n    pendingCartQuantityChanges.forEach((pendingChange, variantId) => {\n      const inputs = Array.from(\n        cartDrawer.querySelectorAll(\n          \".cart-drawer .quantity__input[data-quantity-variant-id]\",\n        ),\n      ).filter(\n        (input) => String(input.dataset.quantityVariantId) === variantId,\n      );\n\n      if (inputs.length === 0) return;\n\n      const returnedQuantity = inputs.reduce(\n        (total, input) => total + Number(input.value),\n        0,\n      );\n      const errorElements = inputs\n        .map(\n          (input) =>\n            input.closest(\".cart-item\") &&\n            input.closest(\".cart-item\").querySelector(\".cart-item__error-text\"),\n        )\n        .filter(Boolean);\n      const mismatchErrors = errorElements.filter((element) =>\n        isCartQuantityMismatchMessage(element.textContent.trim()),\n      );\n\n      if (mismatchErrors.length === 0) return;\n\n      if (returnedQuantity === pendingChange.expectedQuantity) {\n        mismatchErrors.forEach((element) => setText(element, \"\"));\n      }\n\n      pendingCartQuantityChanges.delete(variantId);\n    });\n  }\n\n  window.fetch = checkoutChampCompatibleFetch;\n  installNativeKachingFormDataAdapter();\n  document.addEventListener(\"click\", interceptClick, true);\n  document.addEventListener(\"submit\", interceptSubmit, true);\n\n  function initialize() {\n    if (initialized) {\n      if (hasKachingStructure()) scheduleSynchronize();\n      return;\n    }\n\n    cartDrawer = document.querySelector(\"cart-drawer\");\n\n    try {\n      validateStaticContract();\n    } catch (error) {\n      structuralError = error;\n      document.documentElement.setAttribute(ROOT_MARKER, \"error\");\n      updateButtons(null);\n      showError(error);\n      return;\n    }\n\n    initialized = true;\n    // cartDrawer.addEventListener(\"change\", trackCartQuantityChange, true);\n    // const bundleTarget = mainSection.querySelector(\".kaching-bundles\") || mainSection;\n    // new MutationObserver(() => {\n    //   if (hasKachingStructure()) scheduleSynchronize();\n    // }).observe(bundleTarget, {\n    //   attributes: true,\n    //   attributeFilter: [\"aria-checked\", \"class\", \"disabled\", \"hidden\", \"value\"],\n    //   childList: true,\n    //   subtree: true,\n    // });\n    cartDrawer.addEventListener(\"change\", trackCartQuantityChange, true);\n\n// Reconcile Shrine cart-drawer quantity errors after drawer updates.\nnew MutationObserver(() => {\n  reconcileCartQuantityErrors();\n}).observe(cartDrawer, {\n  attributes: true,\n  attributeFilter: [\"value\", \"data-cart-quantity\", \"data-quantity\"],\n  characterData: true,\n  childList: true,\n  subtree: true,\n});\n\n    mainSection.addEventListener(\"click\", (event) => {\n      if (event.target.closest(\".kaching-bundles\")) {\n        const dealBar = event.target.closest(\"[data-deal-bar-id]\");\n        if (dealBar) pendingDealBarId = dealBar.dataset.dealBarId;\n        scheduleSynchronize({ clearRequestError: true });\n      }\n    });\n    mainSection.addEventListener(\"change\", (event) => {\n      if (event.target.closest(\".kaching-bundles\")) {\n        scheduleSynchronize({ clearRequestError: true });\n      }\n    });\n\n    new MutationObserver(() => {\n      if (hasKachingStructure()) scheduleSynchronize();\n    }).observe(mainSection, {\n      attributes: true,\n      attributeFilter: [\"aria-checked\", \"class\", \"disabled\", \"hidden\", \"value\"],\n      characterData: true,\n      childList: true,\n      subtree: true,\n    });\n\n    if (hasKachingStructure()) scheduleSynchronize();\n  }\n\n  document.addEventListener(\"kachingBundlesInitialized\", initialize, false);\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", initialize, { once: true });\n  } else {\n    initialize();\n  }\n\n  window.addEventListener(\n    \"load\",\n    () => {\n      window.setTimeout(() => {\n        if (hasKachingStructure()) {\n          initialize();\n          return;\n        }\n\n        structuralError = controllerError(\n          \"Kaching Bundles did not initialize.\",\n        );\n        document.documentElement.setAttribute(ROOT_MARKER, \"error\");\n        updateButtons(null);\n        showError(structuralError);\n      }, 5000);\n    },\n    { once: true },\n  );\n})();\n"],
  "mappings": "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",
  "names": ["tier"]
}
