{"data":{"shop":{"id":"28368","shop_id":50453512343,"myshopify_domain":"airwaav.myshopify.com","shop_name":"AIRWAAV","domain":"airwaav.com","currency":"USD","currency_symbol":"$","money_format":"${{amount}}","enabled_presentment_currencies":["AED","ALL","ANG","AUD","AWG","BAM","BBD","BDT","BIF","BND","BOB","BSD","BWP","BZD","CAD","CDF","CHF","CNY","CRC","CZK","DJF","DKK","DOP","EGP","ETB","EUR","FJD","FKP","GBP","GMD","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JPY","KES","KHR","KRW","KYD","KZT","LAK","LBP","LKR","MAD","MMK","MNT","MOP","MUR","MVR","MWK","MYR","NGN","NIO","NZD","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SEK","SGD","SLL","THB","TTD","TWD","TZS","UGX","USD","UYU","VND","VUV","XAF","XCD","XOF","XPF"],"api_key":"b43fd6e21cb07ae471840109cc64b9c92b553095","integrations":{"klaviyo":false,"yotpo":true,"recharge":true,"stamped":false,"okendo":false,"junip":false,"opinew":false,"loox":false,"judgeme":false,"reviewsio":false,"attentive":false},"primary_locale":"en","recharge_custom_domain":null,"cache_key":"1787593134","enable_logging":false,"enabled_jquery":true,"use_rebuy_icons":false,"selling_plans_enabled":true,"shopify_selling_plans_enabled":false,"carousel":"splide","active_experiments":[],"product_groups_enabled":"no","has_smart_search_enabled":false,"has_smart_collections_enabled":false,"storefront_access_token":"b726a4547c3d74500325aa42c44bd0fb","active_packages":[],"billing_version":null,"markets":{"enabled":false},"monetize":{"publisher_key":null}},"smart_cart":{"id":14046,"owner":28368,"name":"Smart Cart (Free Gift RX1)","enabled":true,"layout_id":"1","layout_version":"v1.0","buy_more_save_more_enabled":false,"buy_more_save_more":{"tiers":[{"discount":5,"quantity":2}],"language":{"bmsm_discount_message":"Buy {{quantity}} save {{discount}}","bmsm_discount_success":"Buy More Save More!"},"tier_scale":"minor","display_type":"buttons","discount_type":"percentage","discount_products":[]},"empty_cart_markup":"<p class=\"ql-align-center\"><strong>Your cart is empty!<\/strong><\/p><p class=\"ql-align-center\">Add your favorite items to your cart.<\/p><p class=\"ql-align-center\"><a href=\"\/collections\/all\">Shop Now<\/a><\/p>","cart_page_checkout_override":false,"cart_page_enabled":true,"product_form_redirect_id":"4","switch_to_subscription_enabled":false,"switch_to_subscription":{"language":{"upgrading_label":"Upgrading...","downgrading_label":"Downgrading...","onetime_option_label":"One-time only","subscription_option_label":"Delivers every {{frequency}} {{interval}}","onetime_option_group_label":"Pay Full Price","upgrade_to_subscription_label":"Upgrade to Subscription & Save {{subscription_discount}}%","subscription_option_group_label":"Subscribe and Save {{subscription_discount}}%","upgrade_to_subscription_default_frequency":"","upgrade_to_subscription_without_discount_label":"Upgrade to Subscription"},"disable_downgrade":false},"attribution_tracking_enabled":true,"product_metafields_enabled":true,"custom_css":"h2#rebuy-cart-title {\n    font-family: 'BlenderPro-Heavy' !important;\n    font-size: 28px !important;\n}\n\na.rebuy-product-title.clickable {\n    line-height: 1.3em;\n    font-family: 'BlenderPro-Heavy';\n}\n\n\n\/* lock + \/ – and qty input on ALL Rebuy GWP rows *\/\n.rebuy-cart__flyout-item.property-_attribution\\:rebuy-gift-with-purchase\n  .rebuy-cart__flyout-item-quantity-widget-button,\n.rebuy-cart__flyout-item.property-_attribution\\:rebuy-gift-with-purchase\n  .rebuy-cart__flyout-item-quantity-widget input {\n    pointer-events: none !important;  \/* block clicks & taps *\/\n    opacity: .35;                     \/* faint “locked” cue   *\/\n}\n\n\/* Rebuy Smart Cart — hide discount code for RX1 only *\/\n\/* .rebuy-cart__flyout-item.product-airwaav-recovery-mouthpiece .rebuy-cart__flyout-item-discount-message,\n.rebuy-cart__flyout-item-info > a.rebuy-cart__flyout-item-product-title[href=\"\/products\/airwaav-recovery-mouthpiece\"] + .rebuy-cart__flyout-item-discount-message {\n  display: none !important;\n} *\/\n\n\/* \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ *\/\n\/* STARTER KIT CONTENTS CSS*\/\n\/* \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ *\/\n\n.rb-gwp-card{\n  display:flex;\n  align-items:flex-start;\n  justify-content:space-between;\n  gap:12px;\n  padding:12px 16px;\n  border:1px solid #e6e6e6;\n  border-radius:10px;\n  background:#fff;\n  margin-inline: 12px;\n}\n\n.rb-gwp-left{\n  display:flex;\n  gap:12px;\n  min-width:0; \/* important for wrapping inside flex *\/\n}\n\n.rb-gwp-img{\n  width:56px;\n  height:56px;\n  border-radius:8px;\n  object-fit:cover;\n  flex:0 0 auto;\n  border:1px solid #eee;\n  background:#fafafa;\n}\n\n.rb-gwp-text{\n  min-width:0; \/* important for wrapping inside flex *\/\n}\n\n.rb-gwp-title{\n  font-size:15px;\n  font-weight:700;\n  line-height:1.2;\n  margin:0 0 4px;\n}\n\n.rb-gwp-sub{\n  font-size:12px;\n  line-height:1.35;\n  color:#6b7280;\n\n  \/* WRAP (no ellipsis) *\/\n  white-space:normal;\n  overflow:visible;\n  text-overflow:clip;\n  word-break:break-word;\n}\n\n\n\/* ===============================\n   Rebuy Smart Cart — widget 270333 only - NASAL STRIPS FREE GIT\n   =============================== *\/\n\n\/* Product title *\/\n#rebuy-widget-270333 .rebuy-product-title,\n#rebuy-widget-270333 .rebuy-product-title-link,\n#rebuy-widget-270333 .rebuy-product-title a {\n  color: #202122 !important;\n  font-size: 14px !important;\n  font-family: Roboto, sans-serif !important;\n  font-weight: 800 !important;\n  letter-spacing: 0 !important;\n  text-transform: unset!important;}\n\n\n\/* Price row *\/\n#rebuy-widget-270333 .rebuy-product-price {\n  font-family: Roboto, sans-serif !important;\n  font-size: 14px !important;\n  font-weight: 500 !important;\n  letter-spacing: 0 !important;\n}\n\n\/* Product thumbnail column *\/\n#rebuy-widget-270333 .rebuy-product-media{\n  width: 90px !important;\n  min-width: 90px !important;\n  flex: 0 0 90px !important;\n}\n\n\n\/\/ \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/* NASAL STRIPS FREE GIFT - disable buttons -  Rebuy widget 270333 *\/\n\/* \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ *\/\n.rebuy-cart__flyout-item.property-_widget_id\\:270333\n  .rebuy-cart__flyout-item-quantity-widget-button,\n.rebuy-cart__flyout-item.property-_widget_id\\:270333\n  .rebuy-cart__flyout-item-quantity-widget {\n  pointer-events: none !important;\n  opacity: .35 !important;\n}\n","custom_template":"","selectors":{"item_count":".cart-count","cart_subtotal":".cart-subtotal"},"callbacks":{"hide":{"enabled":false,"function":""},"init":{"enabled":false,"function":""},"show":{"enabled":false,"function":""},"ready":{"enabled":false,"function":""},"line_item_removed":{"enabled":false,"function":""},"line_item_decrease":{"enabled":false,"function":""},"line_item_increase":{"enabled":false,"function":""}},"template":"<div id=\"rebuy-cart\" class=\"rebuy-cart\" v-cloak=\"\" :class=\"[\n    visible ? 'is-visible' : '',\n    'currency-' + currency(),\n    hasItems() ? 'has-items' : 'no-items'\n  ]\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"rebuy-cart-title\" :aria-hidden=\"!visible ? 'true' : 'false'\">\n  <div class=\"rebuy-cart__flyout\">\n    <div data-rebuy-cart-anchor=\"header\">\n        <div data-rebuy-cart-header-top=\"\">\n            <div data-rebuy-cart-header-top-inner=\"\">\n                \n<component :is=\"getCartTitleHeadingTag()\" id=\"rebuy-cart-title\" data-rebuy-component-id=\"title_bar\" data-rebuy-component=\"title-bar\" :class=\"['rebuy-cart__title', getCartTitleClassName()]\" v-html=\"getCartTitle()\"><\/component>\n\n                <div data-rebuy-cart-header-top-inner-right=\"\">\n                    \n                <\/div>\n            <\/div>\n            \n                <button id=\"rebuy-cart-close\" class=\"rebuy-cart__flyout-close\" type=\"button\" v-on:click=\"hide()\" aria-label=\"Close Cart\">\n                    <rebuy-icon name=\"x\"><\/rebuy-icon>\n                    <span class=\"sr-only\">Close Cart<\/span>\n                <\/button>\n            \n        <\/div>\n<div v-if=\"getAnnouncementsByComponentId('274a59b2-bb9c-48ad-bd21-f71d1cdedfc9').length\" data-rebuy-component=\"announcement-bar\" data-rebuy-announcement-id=\"274a59b2-bb9c-48ad-bd21-f71d1cdedfc9\" data-rebuy-component-id=\"274a59b2-bb9c-48ad-bd21-f71d1cdedfc9\">\n    <div class=\"message\" v-for=\"message in getAnnouncementsByComponentId('274a59b2-bb9c-48ad-bd21-f71d1cdedfc9')\" v-html=\"message\"><\/div>\n<\/div>\n<\/div>\n    <div data-rebuy-cart-anchor=\"goalBox\">\n<div v-if=\"!!progressBar\" data-rebuy-component=\"progress-bar\" data-rebuy-component-id=\"tiered_progress_bar\">\n\n    <!-- Step Icons -->\n    <div class=\"rebuy-cart__progress-step-wrapper\" :class=\"['count-' + progressBar.tiers.length]\">\n        <div v-for=\"tier in progressBar.tiers\" :key=\"tier.id\" class=\"rebuy-cart__progress-step\" :class=\"{ complete: progressTierReached(tier) }\" :style=\"{ width: progressStepMaxWidth(progressBar) }\">\n            <div class=\"rebuy-cart__progress-step-icon\" :style=\"getProgressStepIconSize(tier)\" v-html=\"progressTierIcon(tier)\"><\/div>\n            <span class=\"rebuy-cart__progress-step-label\" v-html=\"getTierLabel(tier)\"><\/span>\n        <\/div>\n    <\/div>\n    <!-- End Step Icons -->\n\n    <!-- Progress Bar -->\n    <div class=\"rebuy-cart__progress-bar-wrapper\">\n        <div class=\"rebuy-cart__progress-bar-meter\" :class=\"[hasTierProgress() ? 'has-progress' : 'no-progress']\">\n            <div class=\"rebuy-cart__progress-bar-meter-fill\" :style=\"{ width: tiersPercentageComplete(progressBar) }\" role=\"progressbar\" tabindex=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\" :aria-valuenow=\"tiersPercentageComplete(progressBar, true)\" aria-labelledby=\"rebuy-cart__progress-bar-meter-label\">\n                <span class=\"sr-only\" v-text=\"'Progress: ' + tiersPercentageComplete(progressBar, true) +'%'\"><\/span>\n            <\/div>\n        <\/div>\n\n        <div v-if=\"hasProgressPrompt(progressBar)\" id=\"rebuy-cart__progress-bar-meter-label\" class=\"rebuy-cart__progress-bar-prompt\" v-html=\"getTierFeedbackText(progressBar)\"><\/div>\n    <\/div>\n    <!-- End Progress Bar -->\n\n    <!-- Earned Gift Area -->\n    <div v-if=\"shouldRenderGiftArea(progressBar)\" class=\"rebuy-cart__progress-gifts\">\n        <div v-if=\"shouldRenderGiftAreaTitle(progressBar)\" class=\"rebuy-cart__progress-gifts-title\" v-text=\"getGiftAreaTitle(progressBar)\"><\/div>\n        <div class=\"rebuy-cart__progress-gifts-container\">\n            <div v-for=\"product in getEarnedProducts(progressBar)\" v-if=\"shouldRenderEarnedGift(progressBar, product)\" :key=\"product.id + '-' + product.tier\" class=\"rebuy-cart__progress-gift\">\n                <div class=\"rebuy-cart__progress-gift-image\" :style=\"freeProductStyles(product)\"><\/div>\n                <div class=\"rebuy-cart__progress-gift-info\">\n                    <div>\n                        <p class=\"rebuy-cart__progress-gift-title\" v-text=\"product.title\"><\/p>\n                        <span v-if=\"hasGiftSelection(product)\" class=\"rebuy-cart__progress-gift-variant-title\" v-text=\"getFreeVariantTitle(product)\"><\/span>\n                    <\/div>\n                    <div v-if=\"!hasGiftSelection(product)\" class=\"rebuy-cart__progress-gift-selection-container\">\n                        <!-- Single Variant Selection -->\n                        <div v-if=\"freeProductOptions(product).length === 1\" class=\"rebuy-cart__progress-gift-variant-readd\" role=\"button\" @click=\"addSingleVariantFreeProduct(product)\" v-html=\"freeProductPrompt(product)\"><\/div>\n\n                        <!-- Multi Variant Selection -->\n                        <div v-else=\"\" class=\"rebuy-cart__progress-gift-variant-select-container\">\n                            <select v-if=\"freeProductOptions(product).length > 1\" class=\"rebuy-cart__progress-gift-variant-select\" @change=\"selectFreeProductVariant($event, product)\">\n                                <option value=\"\" disabled=\"\" selected=\"\">Select Gift<\/option>\n                                <option v-for=\"variant in freeProductOptions(product)\" :key=\"variant.id\" :value=\"variant.id\" v-text=\"variant.title\"><\/option>\n                            <\/select>\n                            <div class=\"rebuy-cart__progress-gift-variant-select-prompt\" v-html=\"freeProductPrompt(product)\"><\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                <button v-if=\"hasGiftSelection(product)\" class=\"rebuy-cart__progress-gift-remove\" @click=\"removeFreeProduct(product)\" :aria-label=\"'Remove ' + product.title +  ' ' + (product.chosen_variant?.title)\">\n                    <rebuy-icon name=\"x\"><\/rebuy-icon>\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n    <!-- End Earned Gift Area -->\n\n<\/div>\n<\/div>\n    <div data-rebuy-cart-scroll-area=\"\">\n      <div data-rebuy-cart-anchor=\"body\">\n<div data-rebuy-component=\"cart-items\" data-rebuy-component-id=\"cart_items\">\n  <ul v-if=\"hasItems()\" data-smartcart-items=\"\" tabindex=\"0\" role=\"list\">\n    <li class=\"rebuy-cart__flyout-item\" v-for=\"(item, index) in items()\" v-if=\"!isHiddenItem(item)\" :key=\"getLineItemKey(item, index)\" v-bind:class=\"[ 'product-' + item.handle, itemProductTagsClasses(item), itemPropertyClasses(item) ]\" aria-label=\"product\" role=\"listitem\">\n      <!-- Image -->\n      <div class=\"rebuy-cart__flyout-item-media\">\n        <a v-bind:aria-disabled=\"!isItemClickable(item)\" v-bind:aria-label=\"itemLinkLabel(item)\" v-bind:class=\"[{ 'click-disabled': !isItemClickable(item) }]\" v-bind:href=\"isItemClickable(item) ? itemURL(item) : null\">\n          <img v-bind:src=\"sizeImage(item.image, '240x240')\" v-bind:alt=\"itemImageAlt(item)\">\n        <\/a>\n      <\/div>\n\n      <!-- Item Info -->\n      <div v-bind:class=\"['rebuy-cart__flyout-item-info', { 'is-dropdown-mode': hideQuantitySelectors && !hideQuantitySelectors(item) && quantityInputEnabled() && getQuantityInputType() !== 'buttons' }]\">\n        <!-- Product Title -->\n        <a role=\"heading\" aria-level=\"5\" v-bind:aria-disabled=\"!isItemClickable(item)\" v-bind:class=\"[\n            'rebuy-cart__flyout-item-product-title',\n            { 'click-disabled': !isItemClickable(item) }\n          ]\" v-bind:href=\"isItemClickable(item) ? itemURL(item) : null\" v-html=\"itemTitle(item)\" v-bind:tabindex=\"isItemClickable(item) ? 0 : -1\"><\/a>\n\n        <!-- Variant Title -->\n        <div class=\"rebuy-cart__flyout-item-variant-title\" v-html=\"item.variant_title\" v-if=\"item.variant_title\"><\/div>\n\n        <!-- Discount Message -->\n        <div class=\"rebuy-cart__flyout-item-discount-message\" v-if=\"hasLineItemDiscount(item)\" v-html=\"lineItemDiscountMessage(item)\"><\/div>\n\n        <!-- Item Properties -->\n        <div class=\"rebuy-cart__flyout-item-properties\" v-if=\"hasItemProperties(item)\">\n          <div class=\"rebuy-cart__flyout-item-property rebuy-cart__flyout-item-property--delivery-frequency\" v-if=\"itemDeliveryFrequency(item)\" v-html=\"itemDeliveryFrequency(item)\"><\/div>\n          <div class=\"rebuy-cart__flyout-item-property\" v-for=\"property in itemProperties(item)\" v-bind:class=\"[ itemPropertyKeyClass(property), itemPropertyValueClass(property) ]\">\n            <span class=\"rebuy-cart__flyout-item-property-name\" v-html=\"property.key\"><\/span>\n            <span class=\"rebuy-cart__flyout-item-property-separator\">\n              :\n            <\/span>\n            <span class=\"rebuy-cart__flyout-item-property-value\" v-html=\"property.value\"><\/span>\n          <\/div>\n        <\/div>\n\n        <!-- Remove Item -->\n        <button class=\"rebuy-cart__flyout-item-remove\" type=\"button\" v-bind:aria-label=\"'Remove ' + itemTitle(item)\" v-on:click=\"removeItem(item)\">\n          <rebuy-icon v-bind:name=\"(item.status == 'removing') ? 'refresh-cw' : 'trash'\" v-bind:fast-spin=\"item.status == 'removing'\"><\/rebuy-icon>\n        <\/button>\n\n        <!-- Quantity -->\n        <div v-bind:class=\"['rebuy-cart__flyout-item-quantity', { 'is-dropdown-mode': hideQuantitySelectors && !hideQuantitySelectors(item) && quantityInputEnabled() && getQuantityInputType() !== 'buttons' }]\">\n          <!-- Buttons\/Default Mode -->\n          <div class=\"rebuy-cart__flyout-item-quantity-widget\" v-if=\"hideQuantitySelectors && !hideQuantitySelectors(item) && (!quantityInputEnabled() || getQuantityInputType() === 'buttons')\">\n            <button class=\"rebuy-cart__flyout-item-quantity-widget-button\" v-bind:aria-label=\"'Decrease quantity of ' + itemTitle(item)\" v-on:click=\"decreaseItem(item)\" v-bind:disabled=\"!isQuantityEnabled(item) || !canDecreaseQuantity(item)\" type=\"button\">\n              <rebuy-icon v-bind:name=\"(item.status == 'decreasing') ? 'refresh-cw' : 'minus'\" v-bind:fast-spin=\"item.status == 'decreasing'\"><\/rebuy-icon>\n            <\/button>\n\n            <input v-if=\"quantityInputEnabled()\" type=\"number\" class=\"rebuy-cart__flyout-item-quantity-widget-input\" v-bind:value=\"item.quantity\" v-bind:min=\"getEffectiveQuantityLimits(item).min\" v-bind:max=\"getEffectiveQuantityLimits(item).max\" v-bind:step=\"item.quantity_rule?.increment || 1\" v-on:change=\"setItemQuantity(item, parseInt($event.target.value, 10))\" v-bind:aria-label=\"'Quantity of ' + itemTitle(item)\" v-bind:disabled=\"!isQuantityEnabled(item)\">\n            <span v-else=\"\" class=\"rebuy-cart__flyout-item-quantity-widget-label\">\n              <span class=\"sr-only\">Quantity of {{ itemTitle(item) }}<\/span>\n              {{ item.quantity }}\n            <\/span>\n\n            <button class=\"rebuy-cart__flyout-item-quantity-widget-button\" v-bind:aria-label=\"'Increase quantity of ' + itemTitle(item)\" v-on:click=\"increaseItem(item)\" v-bind:disabled=\"!isQuantityEnabled(item) || !canIncreaseQuantity(item)\" type=\"button\">\n              <rebuy-icon v-bind:name=\"(item.status == 'increasing') ? 'refresh-cw' : 'plus'\" v-bind:fast-spin=\"item.status == 'increasing'\"><\/rebuy-icon>\n            <\/button>\n          <\/div>\n\n          <!-- Dropdown Select Mode -->\n          <div v-bind:class=\"['rebuy-cart__flyout-item-quantity-dropdown', { 'is-disabled': !isQuantityEnabled(item) }]\" v-if=\"hideQuantitySelectors && !hideQuantitySelectors(item) && quantityInputEnabled() && getQuantityInputType() !== 'buttons'\">\n            <div class=\"rebuy-cart__flyout-item-quantity-dropdown-content\">\n              <span class=\"rebuy-cart__flyout-item-quantity-dropdown-label\">{{ getQuantityLabel() }}<\/span>\n              <span class=\"rebuy-cart__flyout-item-quantity-dropdown-value\">{{ item.quantity }}<\/span>\n            <\/div>\n            <div class=\"rebuy-cart__flyout-item-quantity-dropdown-separator\"><\/div>\n            <!-- Quantity Error (dropdown mode) -->\n            <span v-if=\"getQuantityError(item)\" class=\"rebuy-cart__flyout-item-quantity-dropdown-error\" role=\"alert\">{{ getQuantityError(item) }}<\/span>\n            <div class=\"rebuy-cart__flyout-item-quantity-dropdown-caret\">\n              <rebuy-icon name=\"chevron-down\"><\/rebuy-icon>\n            <\/div>\n            <select class=\"rebuy-cart__flyout-item-quantity-dropdown-native\" v-bind:id=\"'quantity-select-' + item.key\" v-bind:value=\"item.quantity\" v-on:change=\"setItemQuantity(item, parseInt($event.target.value, 10))\" v-bind:disabled=\"!isQuantityEnabled(item)\" v-bind:aria-label=\"'Quantity of ' + itemTitle(item)\">\n              <option v-for=\"qty in getQuantityOptions(item)\" v-bind:key=\"qty\" v-bind:value=\"qty\" v-bind:selected=\"qty === item.quantity\">{{ qty }}<\/option>\n            <\/select>\n          <\/div>\n\n          <!-- Quantity Error (buttons mode) -->\n          <span v-if=\"getQuantityError(item) && (!quantityInputEnabled() || getQuantityInputType() === 'buttons')\" class=\"rebuy-cart__flyout-item-quantity-error\" role=\"alert\">{{ getQuantityError(item) }}<\/span>\n        <\/div>\n\n        <!-- Pricing -->\n        <div class=\"rebuy-cart__flyout-item-price\">\n          <div v-if=\"itemHasDiscount(item)\">\n            <span class=\"rebuy-money sale\">\n              <span class=\"sr-only\">Sale price<\/span>\n              <span v-html=\"formatMoney(itemPrice(item))\"><\/span>\n            <\/span>\n            <span class=\"rebuy-money compare-at\">\n              <span class=\"sr-only\">Original price<\/span>\n              <span v-html=\"formatMoney(compareAtPrice(item))\"><\/span>\n            <\/span>\n          <\/div>\n          <div v-if=\"!itemHasDiscount(item)\">\n            <span class=\"rebuy-money\">\n              <span class=\"sr-only\">Price<\/span>\n              <span v-html=\"formatMoney(itemPrice(item))\"><\/span>\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- Bundle Details -->\n        <div class=\"rebuy-cart__flyout-item-bundle\" v-if=\"itemIsBundle(item, index) && !hideBundleOptions(item)\">\n\n          <!-- Expand \/ Collapse Bundle Details -->\n          <button v-if=\"itemBundleLength(item, index) > 0\" class=\"rebuy-cart__flyout-item-bundle-toggle-button\" v-on:click=\"toggleActiveBundle(item, index)\" type=\"button\" v-bind:aria-label=\"(isBundleVisible(item, index) ? 'Collapse' : 'Expand') + ' bundle of ' + itemTitle(item)\">\n            {{ isBundleVisible(item, index) ? 'Hide' : 'Show' }}\n            <span v-html=\"itemBundleLength(item, index)\"><\/span>\n            items\n            <span class=\"rebuy-cart__flyout-bundle-chev-icon\">\n              <rebuy-icon v-bind:name=\"isBundleVisible(item, index) ? 'chevron-up' : 'chevron-down'\"><\/rebuy-icon>\n            <\/span>\n          <\/button>\n\n          <ul class=\"rebuy-cart__flyout-item-bundle-children\" v-if=\"itemBundleLength(item, index) > 0 && isBundleVisible(item, index)\" tabindex=\"0\">\n            <li class=\"rebuy-cart__flyout-item-bundle-child\" v-for=\"(component, componentIndex) in getBundleComponents(item, index)\">\n              <div class=\"rebuy-cart__flyout-item-bundle-child-left\">\n                <div class=\"rebuy-cart__flyout-item-bundle-image-container\">\n                  <img v-bind:src=\"getBundleOptionImage(item.product, component, componentIndex, item, index)\" v-bind:alt=\"childBundleTitle(component, componentIndex, item, index)\" class=\"rebuy-cart__flyout-item-bundle-image\">\n                <\/div>\n              <\/div>\n\n              <div class=\"rebuy-cart__flyout-item-bundle-child-right\">\n                <h5 v-html=\"childBundleTitle(component, componentIndex, item, index)\" class=\"rebuy-cart__flyout-item-bundle-title\"><\/h5>\n                <p v-if=\"isStorefrontComponent(component) && !hasDefaultVariantTitle(component.variantTitle)\" v-html=\"component.variantTitle\" class=\"rebuy-cart__flyout-item-bundle-value\"><\/p>\n                <p v-else=\"\" v-html=\"component.value\" class=\"rebuy-cart__flyout-item-bundle-value\"><\/p>\n              <\/div>\n            <\/li>\n          <\/ul>\n        <\/div>\n        <!-- End Bundle Details -->\n\n        <!-- Nested Cart Items -->\n        <div v-if=\"displayNestedItems(item)\" class=\"rebuy-cart__flyout-item-nested-items\">\n          <!-- Toggle Button -->\n          <button v-if=\"nestedCartItemsDropdownEnabled()\" class=\"rebuy-cart__flyout-item-nested-items-toggle-button\" v-on:click=\"toggleNestedItemsDropdown(item)\" type=\"button\" v-bind:aria-label=\"nestedItemsAriaLabel(item)\">\n            <span v-html=\"nestedButtonLabel(item)\"><\/span>\n          <\/button>\n\n          <!-- Nested Items List -->\n          <ul v-bind:class=\"[\n              'rebuy-cart__flyout-item-nested-items-list',\n              nestedItemsListClasses(item)\n            ]\">\n            <li class=\"rebuy-cart__flyout-item\" v-for=\"childItem in item.children\" v-if=\"!isHiddenItem(childItem)\" :key=\"childItem.key\" v-bind:class=\"[ 'product-' + childItem.handle, itemProductTagsClasses(childItem), itemPropertyClasses(childItem) ]\" aria-label=\"product\" role=\"listitem\">\n            <!-- Image -->\n            <div class=\"rebuy-cart__flyout-item-media-nested\">\n              <a v-bind:href=\"itemURL(childItem)\" v-bind:aria-label=\"itemLinkLabel(childItem)\">\n                <img v-bind:src=\"sizeImage(childItem.image, '240x240')\" v-bind:alt=\"itemImageAlt(childItem)\">\n              <\/a>\n            <\/div>\n\n            <!-- Item Info -->\n            <div v-bind:class=\"['rebuy-cart__flyout-item-info', { 'is-dropdown-mode': hideQuantitySelectors && !hideQuantitySelectors(childItem) && quantityInputEnabled() && getQuantityInputType() !== 'buttons' }]\">\n              <!-- Product Title -->\n              <a role=\"heading\" aria-level=\"5\" class=\"rebuy-cart__flyout-item-product-title\" v-bind:href=\"itemURL(childItem)\" v-html=\"childItem.product_title\"><\/a>\n\n              <!-- Variant Title -->\n              <div class=\"rebuy-cart__flyout-item-variant-title\" v-html=\"childItem.variant_title\" v-if=\"childItem.variant_title\"><\/div>\n\n              <!-- Discount Message -->\n              <div class=\"rebuy-cart__flyout-item-discount-message\" v-if=\"hasLineItemDiscount(childItem)\" v-html=\"lineItemDiscountMessage(childItem)\"><\/div>\n\n              <!-- Item Properties -->\n              <div class=\"rebuy-cart__flyout-item-properties\" v-if=\"hasItemProperties(childItem)\">\n                <div class=\"rebuy-cart__flyout-item-property rebuy-cart__flyout-item-property--delivery-frequency\" v-if=\"itemDeliveryFrequency(childItem)\" v-html=\"itemDeliveryFrequency(childItem)\"><\/div>\n                <div class=\"rebuy-cart__flyout-item-property\" v-for=\"property in itemProperties(childItem)\" v-bind:class=\"[ itemPropertyKeyClass(property), itemPropertyValueClass(property) ]\">\n                  <span class=\"rebuy-cart__flyout-item-property-name\" v-html=\"property.key\"><\/span>\n                  <span class=\"rebuy-cart__flyout-item-property-separator\">\n                    :\n                  <\/span>\n                  <span class=\"rebuy-cart__flyout-item-property-value\" v-html=\"property.value\"><\/span>\n                <\/div>\n              <\/div>\n\n              <!-- Remove Item -->\n              <button class=\"rebuy-cart__flyout-item-remove\" type=\"button\" v-bind:aria-label=\"'Remove ' + childItem.product_title\" v-on:click=\"removeItem(childItem)\">\n                <rebuy-icon v-bind:name=\"(childItem.status == 'removing') ? 'refresh-cw' : 'trash'\" v-bind:fast-spin=\"childItem.status == 'removing'\"><\/rebuy-icon>\n              <\/button>\n\n              <!-- Quantity -->\n              <div v-bind:class=\"['rebuy-cart__flyout-item-quantity', { 'is-dropdown-mode': hideQuantitySelectors && !hideQuantitySelectors(childItem) && quantityInputEnabled() && getQuantityInputType() !== 'buttons' }]\">\n                <!-- Buttons\/Default Mode -->\n                <div class=\"rebuy-cart__flyout-item-quantity-widget\" v-if=\"hideQuantitySelectors && !hideQuantitySelectors(childItem) && (!quantityInputEnabled() || getQuantityInputType() === 'buttons')\">\n                  <button class=\"rebuy-cart__flyout-item-quantity-widget-button\" v-bind:aria-label=\"'Decrease quantity of ' + childItem.product_title\" v-on:click=\"decreaseItem(childItem)\" v-bind:disabled=\"!isQuantityEnabled(childItem) || !canDecreaseQuantity(childItem)\" type=\"button\">\n                    <rebuy-icon v-bind:name=\"(childItem.status == 'decreasing') ? 'refresh-cw' : 'minus'\" v-bind:fast-spin=\"childItem.status == 'decreasing'\"><\/rebuy-icon>\n                  <\/button>\n\n                  <input v-if=\"quantityInputEnabled()\" type=\"number\" class=\"rebuy-cart__flyout-item-quantity-widget-input\" v-bind:value=\"childItem.quantity\" v-bind:min=\"getEffectiveQuantityLimits(childItem).min\" v-bind:max=\"getEffectiveQuantityLimits(childItem).max\" v-bind:step=\"childItem.quantity_rule?.increment || 1\" v-on:change=\"setItemQuantity(childItem, parseInt($event.target.value, 10))\" v-bind:aria-label=\"'Quantity of ' + childItem.product_title\" v-bind:disabled=\"!isQuantityEnabled(childItem)\">\n                  <span v-else=\"\" class=\"rebuy-cart__flyout-item-quantity-widget-label\">\n                    <span class=\"sr-only\">Quantity of {{ childItem.product_title }}<\/span>\n                    {{ childItem.quantity }}\n                  <\/span>\n\n                  <button class=\"rebuy-cart__flyout-item-quantity-widget-button\" v-bind:aria-label=\"'Increase quantity of ' + childItem.product_title\" v-on:click=\"increaseItem(childItem)\" v-bind:disabled=\"!isQuantityEnabled(childItem) || !canIncreaseQuantity(childItem)\" type=\"button\">\n                    <rebuy-icon v-bind:name=\"(childItem.status == 'increasing') ? 'refresh-cw' : 'plus'\" v-bind:fast-spin=\"childItem.status == 'increasing'\"><\/rebuy-icon>\n                  <\/button>\n                <\/div>\n\n                <!-- Dropdown Select Mode -->\n                <div v-bind:class=\"['rebuy-cart__flyout-item-quantity-dropdown', { 'is-disabled': !isQuantityEnabled(childItem) }]\" v-if=\"hideQuantitySelectors && !hideQuantitySelectors(childItem) && quantityInputEnabled() && getQuantityInputType() !== 'buttons'\">\n                  <div class=\"rebuy-cart__flyout-item-quantity-dropdown-content\">\n                    <span class=\"rebuy-cart__flyout-item-quantity-dropdown-label\">{{ getQuantityLabel() }}<\/span>\n                    <span class=\"rebuy-cart__flyout-item-quantity-dropdown-value\">{{ childItem.quantity }}<\/span>\n                  <\/div>\n                  <div class=\"rebuy-cart__flyout-item-quantity-dropdown-separator\"><\/div>\n                  <!-- Quantity Error (dropdown mode) -->\n                  <span v-if=\"getQuantityError(childItem)\" class=\"rebuy-cart__flyout-item-quantity-dropdown-error\" role=\"alert\">{{ getQuantityError(childItem) }}<\/span>\n                  <div class=\"rebuy-cart__flyout-item-quantity-dropdown-caret\">\n                    <rebuy-icon name=\"chevron-down\"><\/rebuy-icon>\n                  <\/div>\n                  <select class=\"rebuy-cart__flyout-item-quantity-dropdown-native\" v-bind:id=\"'quantity-select-' + childItem.key\" v-bind:value=\"childItem.quantity\" v-on:change=\"setItemQuantity(childItem, parseInt($event.target.value, 10))\" v-bind:disabled=\"!isQuantityEnabled(childItem)\" v-bind:aria-label=\"'Quantity of ' + childItem.product_title\">\n                    <option v-for=\"qty in getQuantityOptions(childItem)\" v-bind:key=\"qty\" v-bind:value=\"qty\" v-bind:selected=\"qty === childItem.quantity\">{{ qty }}<\/option>\n                  <\/select>\n                <\/div>\n\n                <!-- Quantity Error (buttons mode) -->\n                <span v-if=\"getQuantityError(childItem) && (!quantityInputEnabled() || getQuantityInputType() === 'buttons')\" class=\"rebuy-cart__flyout-item-quantity-error\" role=\"alert\">{{ getQuantityError(childItem) }}<\/span>\n              <\/div>\n\n              <!-- Pricing -->\n              <div class=\"rebuy-cart__flyout-item-price\">\n                <div v-if=\"itemHasDiscount(childItem)\">\n                  <span class=\"rebuy-money sale\">\n                    <span class=\"sr-only\">Sale price<\/span>\n                    <span v-html=\"formatMoney(itemPrice(childItem))\"><\/span>\n                  <\/span>\n                  <span class=\"rebuy-money compare-at\">\n                    <span class=\"sr-only\">Original price<\/span>\n                    <span v-html=\"formatMoney(compareAtPrice(childItem))\"><\/span>\n                  <\/span>\n                <\/div>\n                <div v-if=\"!itemHasDiscount(childItem)\">\n                  <span class=\"rebuy-money\">\n                    <span class=\"sr-only\">Price<\/span>\n                    <span v-html=\"formatMoney(itemPrice(childItem))\"><\/span>\n                  <\/span>\n                <\/div>\n              <\/div>\n            <\/div>\n            <!-- End Info -->\n            <\/li>\n          <\/ul>\n        <\/div>\n        <!-- End Nested Cart Items -->\n\n      <\/div>\n      <!-- End Info -->\n\n      <!-- Buy More Save More -->\n      <div v-if=\"itemHasBMSM(item) && bMSMFinalTierNotReached(item)\" class=\"rebuy-cart__flyout-item-buy-more-save-more\">\n        <div v-if=\"hasBMSMButtons()\" class=\"rebuy-cart__flyout-item-buy-more-save-more-container\">\n          <div v-for=\"tier in getBMSMTiers()\" class=\"rebuy-cart__flyout-item-buy-more-save-more-button-container\" v-if=\"tier.quantity > item.quantity\">\n            <button v-on:click=\"adjustBMSMQuantity(item, tier)\" class=\"rebuy-button rebuy-cart__flyout-item-buy-more-save-more-button\" v-bind:aria-label=\"getBMSMButtonText(tier)\">\n              <span v-html=\"getBMSMButtonText(tier)\"><\/span>\n            <\/button>\n          <\/div>\n        <\/div>\n\n        <span v-if=\"!hasBMSMButtons()\" class=\"rebuy-cart__flyout-buy-more-save-more-dynamic-message-text\" v-html=\"buyMoreSaveMoreDynamicText(item)\"><\/span>\n      <\/div>\n      <!-- End Buy More Save More -->\n\n      <!-- Switch to Subscription -->\n      <div class=\"rebuy-cart__flyout-item-subscription\" v-if=\"hasSwitchToSubscription(item)\">\n        <button class=\"rebuy-button outline\" v-if=\"!item.product.subscription || item.status == 'downgrading' || item.status == 'upgrading'\" v-bind:aria-label=\"'Switch ' + itemTitle(item) + ' to a Subscription'\" v-bind:disabled=\"(item.status == 'downgrading' || item.status == 'upgrading')\" v-on:click=\"updateItemDeliveryFrequency(item, selectedSubscriptionFrequency(item, 0), 'onetime')\" type=\"button\">\n          <span v-html=\"switchToSubscriptionLabel(item)\"><\/span>\n        <\/button>\n\n        <select class=\"rebuy-select muted\" aria-label=\"Subscription delivery frequency\" v-if=\"item.product.subscription && item.status != 'downgrading'\" v-model=\"item.product.subscription_frequency\" v-on:change=\"updateItemDeliveryFrequency(item)\">\n          <optgroup v-if=\"!item.product.is_subscription_only && !subscriptionDowngradeDisabled()\" v-bind:label=\"getSwitchToSubscriptionLabel('onetime_option_group_label')\">\n            <option v-bind:value=\"'onetime'\" v-html=\"getSwitchToSubscriptionLabel('onetime_option_label')\"><\/option>\n          <\/optgroup>\n          <optgroup v-bind:label=\"subscriptionOptionGroupLabel(item)\">\n            <option v-for=\"frequency in subscriptionFrequencies(item)\" v-bind:value=\"frequency\" v-html=\"subscriptionOptionLabel(item, frequency, item.product.subscription_interval)\"><\/option>\n          <\/optgroup>\n        <\/select>\n      <\/div>\n      <!-- End Switch to Subscription -->\n    <\/li>\n  <\/ul>\n\n  <!-- Empty Cart -->\n  <div class=\"rebuy-cart__flyout-empty-cart\" v-html=\"emptyCartMarkup()\" v-if=\"!hasItems()\"><\/div>\n\n<\/div>\n<div data-rebuy-component=\"cross-sell-widget\" data-rebuy-component-id=\"2aa6ca03-908d-4e52-a75d-ca296b462b52\">\n    <div :data-rebuy-id=\"getWidgetIdByComponentId('2aa6ca03-908d-4e52-a75d-ca296b462b52')\"><\/div>\n<\/div>\n\n<rebuy-custom-code-block id=\"4727367a-9c11-4b72-8a83-e585acbcf83d\" data-rebuy-custom-code=\"4727367a-9c11-4b72-8a83-e585acbcf83d\" data-rebuy-component-id=\"4727367a-9c11-4b72-8a83-e585acbcf83d\"><\/rebuy-custom-code-block>\n<\/div>\n    <\/div>\n    <div data-rebuy-cart-anchor=\"footer\">\n<div v-if=\"hasItems()\" data-rebuy-component=\"cart-subtotal\" data-rebuy-component-id=\"cart_subtotal\">\n    <!-- Legacy Subtotal (when discount summary is disabled) -->\n    <div v-if=\"!shouldShowDiscountSummary()\" class=\"rebuy-cart__flyout-subtotal\">\n        <div class=\"rebuy-cart__flyout-subtotal-label\">\n            <span v-html=\"subtotalLabel()\"><\/span>\n        <\/div>\n        <div class=\"rebuy-cart__flyout-subtotal-amount\">\n            <span class=\"sr-only\">Cart subtotal<\/span>\n            <span v-html=\"subtotal()\"><\/span>\n        <\/div>\n    <\/div>\n\n    <!-- Subtotal with Discount Summary -->\n    <div v-else=\"\" class=\"rebuy-cart__subtotal-with-discounts\">\n        <div class=\"rebuy-cart__subtotal-with-discounts-row\">\n            <div class=\"rebuy-cart__subtotal-with-discounts-row-label\">\n                <span v-html=\"subtotalLabel()\"><\/span>\n            <\/div>\n            <div class=\"rebuy-cart__subtotal-with-discounts-row-amount\">\n                <span class=\"sr-only\">Cart subtotal<\/span>\n                <span v-html=\"subtotal()\"><\/span>\n            <\/div>\n        <\/div>\n\n        <div class=\"rebuy-cart__discount-summary\" :class=\"{ 'is-expanded': isDiscountSummaryExpanded() }\">\n            <button class=\"rebuy-cart__discount-summary-header\" @click=\"toggleDiscountSummary()\" :aria-expanded=\"isDiscountSummaryExpanded()\" aria-controls=\"discount-summary-details\">\n                <span v-html=\"getDiscountSummaryCountLabel()\"><\/span>\n                <span class=\"rebuy-cart__discount-summary-icon\" aria-hidden=\"true\">\n                    <rebuy-icon name=\"chevron-down\"><\/rebuy-icon>\n                <\/span>\n            <\/button>\n\n            <div id=\"discount-summary-details\" class=\"rebuy-cart__discount-summary-details\" role=\"region\" :aria-hidden=\"!isDiscountSummaryExpanded()\">\n                <div v-for=\"discount in getDiscountSummaryItems()\" class=\"rebuy-cart__discount-summary-item\">\n                    <span v-html=\"discount.title\"><\/span>\n                    <span v-html=\"discount.amount\"><\/span>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<div v-show=\"hasItems()\" data-rebuy-component=\"checkout-area\" data-rebuy-component-id=\"checkout\">\n\n\n<div class=\"rebuy-cart__flyout-terms\" v-if=\"hasTermsEnabled()\">\n  <input class=\"rebuy-cart__flyout-terms-checkbox rebuy-checkbox\" id=\"rebuy-terms-checkbox\" name=\"rebuy-terms-checkbox\" type=\"checkbox\" v-model=\"termsAccepted\" v-on:click=\"updateTermsCheck()\">\n  <label class=\"rebuy-cart__flyout-terms-label\" for=\"rebuy-terms-checkbox\" v-html=\"getCheckoutSettings().language.terms_and_conditions_label\"><\/label>\n<\/div>\n\n\n<button v-show=\"hasCheckoutButton()\" class=\"rebuy-button rebuy-cart__checkout-button block\" type=\"button\" v-on:click=\"checkout()\" v-bind:disabled=\"(hasTermsEnabled() && !hasAcceptedTerms()) || hasQuantityErrors()\">\n  <span v-html=\"checkoutLabel()\"><\/span>\n<\/button>\n\n\n<button v-if=\"hasViewCartButton()\" class=\"rebuy-button rebuy-cart__view-cart-button block\" v-bind:class=\"{'outline': hasCheckoutButton()}\" type=\"button\" v-on:click=\"viewCart()\">\n  <span v-html=\"viewCartLabel()\"><\/span>\n<\/button>\n\n\n<button v-if=\"hasContinueShoppingButton()\" class=\"rebuy-button rebuy-cart__continue-shopping-button block outline\" type=\"button\" v-on:click=\"hide()\">\n  <span v-html=\"continueShoppingLabel()\"><\/span>\n<\/button>\n\n\n<button v-if=\"hasShopPayButton()\" class=\"rebuy-button rebuy-cart__shop-pay-button block\" v-on:click=\"shopPayCheckout()\" aria-label=\"Checkout with Shop Pay\" v-html=\"shopPaySvg\">\n<\/button>\n\n<div data-rebuy-cart-additional-checkout-buttons=\"\"><\/div>\n\n<div class=\"rebuy-cart__flyout-installments\" v-html=\"installmentsMessage()\"><\/div>\n\n<div v-if=\"hasPrePurchase()\" :data-rebuy-id=\"prePurchaseWidgetId()\"><\/div>\n\n<\/div>\n<\/div>\n  <\/div>\n\n\n  <div class=\"rebuy-cart__background\" v-on:click=\"hide()\"><\/div>\n  <div id=\"rebuy-cart-live-region\" class=\"sr-only\" aria-live=\"polite\"><\/div>\n<\/div>","use_custom_template":false,"created_at":"2024-11-07 19:43:56","updated_at":"2026-08-24 17:38:54","last_edited_by":"31927","locked":false,"ab_test_locked":"0","is_scheduled":"0","is_fallback":"1","cloud_task_id":null,"start_date":null,"end_date":null,"layout":"single","product_form_redirect":"disabled","apps":[],"components":[{"type":"announcement_bar","anchor":"header","version":"v1.1","settings":{"messages":["FREE SHIPPING: U.S. ORDERS $75+"]},"anchor_order":3,"component_id":"274a59b2-bb9c-48ad-bd21-f71d1cdedfc9","custom_template":null,"visibility_status":"visible","previous_templates":null,"use_custom_template":0},{"type":"cross_sell_widget","anchor":"body","version":"v1.0","settings":{"widget_id":181453},"anchor_order":4,"component_id":"2aa6ca03-908d-4e52-a75d-ca296b462b52","custom_template":null,"visibility_status":"visible","previous_templates":null,"use_custom_template":0},{"type":"custom_code_block","anchor":"body","version":"v1.1","settings":{"html_code":"<!-- REMOVES FREE NASAL STRIPS IF CART IS EMPTY - WIDGET 270333 -->\r\n\r\n <script>\r\n(function () {\r\n  \/\/ 1. CONFIGURATION\r\n  \/\/ Class from your screenshot\r\n  var GIFT_CLASS = 'product-airwaav-nasal-strips'; \r\n  var WIDGET_ID = '270333';\r\n  \r\n  var isRemoving = false;\r\n\r\n  \/\/ 2. HELPERS\r\n  function cartRoot() {\r\n    return document.querySelector('.rebuy-cart__flyout') || document.body;\r\n  }\r\n\r\n  function hasGift() {\r\n    return !!document.querySelector('.' + GIFT_CLASS);\r\n  }\r\n\r\n  function hasPaidItems() {\r\n    \/\/ Select all cart items\r\n    var items = document.querySelectorAll('.rebuy-cart__flyout-item');\r\n    \/\/ Check if any item does NOT have the gift class\r\n    for (var i = 0; i < items.length; i++) {\r\n      if (!items[i].classList.contains(GIFT_CLASS)) {\r\n        return true; \/\/ Found a paid item\r\n      }\r\n    }\r\n    return false; \/\/ Only the gift exists\r\n  }\r\n\r\n  \/\/ 3. REMOVE FUNCTION (API Call)\r\n  async function removeGift() {\r\n    if (isRemoving) return;\r\n    isRemoving = true;\r\n\r\n    try {\r\n      \/\/ Fetch current cart data to find the line item key\r\n      var res = await fetch('\/cart.js');\r\n      var cart = await res.json();\r\n      \r\n      \/\/ Find the specific item linked to your widget\r\n      var itemToRemove = cart.items.find(function(item) {\r\n        return item.properties && item.properties['_widget_id'] == WIDGET_ID;\r\n      });\r\n\r\n      if (itemToRemove) {\r\n        await fetch('\/cart\/change.js', {\r\n          method: 'POST',\r\n          headers: { 'Content-Type': 'application\/json' },\r\n          body: JSON.stringify({ id: itemToRemove.key, quantity: 0 })\r\n        });\r\n        \r\n        \/\/ Refresh Rebuy so the UI updates instantly\r\n        if (window.Rebuy && Rebuy.SmartCart) {\r\n           Rebuy.SmartCart.refresh();\r\n        }\r\n      }\r\n    } catch (e) {\r\n      console.error('Error removing gift:', e);\r\n    } finally {\r\n      isRemoving = false;\r\n    }\r\n  }\r\n\r\n  \/\/ 4. SYNC LOGIC\r\n  function sync() {\r\n    if (hasGift() && !hasPaidItems()) {\r\n      removeGift();\r\n    }\r\n  }\r\n\r\n  \/\/ 5. OBSERVER (Watches for changes)\r\n  var mo = new MutationObserver(function () {\r\n    sync();\r\n  });\r\n\r\n  var root = document.querySelector('[data-rebuy-cart-anchor=\"body\"]') || document.body;\r\n  if(root) {\r\n      mo.observe(root, { childList: true, subtree: true });\r\n  }\r\n  \r\n  \/\/ Initial check\r\n  sync();\r\n})();\r\n<\/script>"},"anchor_order":7,"component_id":"4727367a-9c11-4b72-8a83-e585acbcf83d","custom_template":null,"visibility_status":"visible","previous_templates":null,"use_custom_template":0},{"type":"cross_sell_widget","anchor":"body","version":"v1.0","settings":{"widget_id":270333},"anchor_order":2,"component_id":"585d4fc4-d9b5-4e94-9f98-b547fefda198","custom_template":null,"visibility_status":"hidden","previous_templates":null,"use_custom_template":0},{"type":"custom_code_block","anchor":"body","version":"v1.1","settings":{"html_code":"<div class=\"rb-gwp-card\" id=\"rb-sleep-kit-includes\" style=\"display:none;\">\n  <div class=\"rb-gwp-left\">\n    <!-- <img\n      class=\"rb-gwp-img\"\n      src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0504\/5351\/2343\/files\/BUNDLE_yellow-white-mimi-25_1d70db17-cecf-49cd-a775-ff886cc063e9.webp\"\n      alt=\"Sleep Starter Kit\"\n      loading=\"lazy\"\n      width=\"56\"\n      height=\"56\"\n    \/> -->\n\n    <div class=\"rb-gwp-text\">\n      <div class=\"rb-gwp-title\">Sleep Starter Kit includes:<\/div>\n      <div class=\"rb-gwp-sub\">\n        2 RX1 Mouthpieces, 1 Nasal Strips, 1 Pro Sleep month subscription.\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<style>\n\/* Hard lock to prevent any flicker *\/\n.rb-hide-pro-sleep li.rebuy-cart__flyout-item.product-airwaav-pro-sleep {\n  display: none !important;\n}\n<\/style>\n\n\n<script>\n(function () {\n  var SLEEP_KIT_HANDLE_CLASS = 'product-airwaav-sleep-starter-kit';\n  var PRO_SLEEP_HANDLE_CLASS = 'product-airwaav-pro-sleep';\n  var GWP_BLOCK_ID = 'rb-sleep-kit-includes';\n\n  var lastSleepKitState = null;\n  var isRemovingProSleep = false;\n\n  function cartRoot() {\n    return document.querySelector('[data-rebuy-cart-anchor=\"body\"]') || document.body;\n  }\n\n  function hasSleepKitInDom() {\n    return !!document.querySelector('li.rebuy-cart__flyout-item.' + SLEEP_KIT_HANDLE_CLASS);\n  }\n\n  function toggleHardHideProSleep(forceHide) {\n    cartRoot().classList.toggle('rb-hide-pro-sleep', forceHide);\n  }\n\n  function toggleGwpBlock(sleepKitInCart) {\n    var block = document.getElementById(GWP_BLOCK_ID);\n    if (block) {\n      block.style.display = sleepKitInCart ? '' : 'none';\n    }\n  }\n\n  async function getShopifyCart() {\n    var res = await fetch('\/cart.js', { credentials: 'same-origin' });\n    return await res.json();\n  }\n\n  async function removeProSleepFromCart() {\n    if (isRemovingProSleep) return;\n    isRemovingProSleep = true;\n\n    \/\/ HARD LOCK BEFORE ANY DOM UPDATE\n    toggleHardHideProSleep(true);\n\n    try {\n      var cart = await getShopifyCart();\n      var proSleepItem = cart.items.find(function (item) {\n        return (item.url || '').includes('\/products\/airwaav-pro-sleep');\n      });\n\n      if (proSleepItem && proSleepItem.key) {\n        await fetch('\/cart\/change.js', {\n          method: 'POST',\n          credentials: 'same-origin',\n          headers: { 'Content-Type': 'application\/json' },\n          body: JSON.stringify({ id: proSleepItem.key, quantity: 0 })\n        });\n      }\n    } catch (e) {\n      toggleHardHideProSleep(false);\n    } finally {\n      setTimeout(function () {\n        isRemovingProSleep = false;\n      }, 400);\n    }\n  }\n\n  function sync() {\n    var sleepKitInCart = hasSleepKitInDom();\n\n    toggleGwpBlock(sleepKitInCart);\n\n    \/\/ While kit exists OR removal in progress → hard hide\n    toggleHardHideProSleep(sleepKitInCart || isRemovingProSleep);\n\n    if (lastSleepKitState === null) {\n      lastSleepKitState = sleepKitInCart;\n      return;\n    }\n\n    \/\/ true → false = kit removed\n    if (lastSleepKitState && !sleepKitInCart) {\n      removeProSleepFromCart();\n    }\n\n    lastSleepKitState = sleepKitInCart;\n  }\n\n  sync();\n\n  var mo = new MutationObserver(function () {\n    sync();\n  });\n\n  mo.observe(cartRoot(), { childList: true, subtree: true });\n})();\n<\/script>\n\n\n"},"anchor_order":3,"component_id":"c2243071-2500-404d-8c36-30b465d229ca","custom_template":null,"visibility_status":"hidden","previous_templates":null,"use_custom_template":0},{"type":"cross_sell_widget","anchor":"body","version":"v1.0","settings":{"widget_id":232292},"anchor_order":6,"component_id":"c3c72c26-21a2-46eb-a9c7-b7902a7d5164","custom_template":null,"visibility_status":"hidden","previous_templates":null,"use_custom_template":0},{"type":"cart_items","anchor":"body","version":"v1.7","settings":[],"anchor_order":1,"component_id":"cart_items","custom_template":null,"visibility_status":"always_visible","previous_templates":null,"use_custom_template":0},{"type":"cart_subtotal","anchor":"footer","version":"v1.1","settings":{"subtotal_plural_text":"Subtotal ({{item_count}} items)","subtotal_singular_text":"Subtotal ({{item_count}} item)"},"anchor_order":1,"component_id":"cart_subtotal","custom_template":null,"visibility_status":"always_visible","previous_templates":null,"use_custom_template":0},{"type":"checkout","anchor":"footer","version":"v1.0","settings":{"terms":{"enabled":false},"shop_pay":{"enabled":true},"language":{"checkout_label":"Checkout →","view_cart_label":"View Cart","checking_out_label":"<i class=\"rebuy-button-icon prefix fas fa-circle-notch fa-spin\"><\/i> Checking Out","view_cart_working_label":"<i class=\"rebuy-button-icon prefix fas fa-circle-notch fa-spin\"><\/i> Redirecting to Cart...","continue_shopping_label":"Continue Shopping","terms_and_conditions_label":"I agree to the terms and conditions"},"pre_purchase":{"enabled":false,"widget_id":""},"installments":{"enabled":false,"provider":"Afterpay","terms_url":"https:\/\/www.afterpay.com\/installment-agreement","payment_count":"4"},"checkout_button":{"enabled":true,"routing":"automatic","routing_link":""},"view_cart_button":{"enabled":false},"accelerated_checkout":{"enabled":false},"continue_shopping_button":{"enabled":false}},"anchor_order":2,"component_id":"checkout","custom_template":null,"visibility_status":"always_visible","previous_templates":null,"use_custom_template":0},{"type":"discount_code","anchor":"footer","version":"v1.3","settings":{"language":{"discount_code_label":"Discount Code","discount_button_label":"Apply","discount_invalid_message":"Invalid Discount Code"},"use_message_only":false},"anchor_order":3,"component_id":"discount_code","custom_template":null,"visibility_status":"hidden","previous_templates":null,"use_custom_template":0},{"type":"custom_code_block","anchor":"body","version":"v1.1","settings":{"html_code":"<!--\nThis code is created for A\/B testing the \"Evergreen Smart Cart (June 3rd, 2025) (V3)\"\nhttps:\/\/rebuyengine.com\/admin\/smartcart\/edit\/14046\/\n-->\n<!-- <script>\nfunction addNotificationStyles() {\n  if ( document.getElementById('notification-styles') ) return;\n\n  const style = document.createElement('style');\n  style.id = 'notification-styles';\n  style.textContent = `\n      .sync-notification {\n        background: #4CAF50;\n        color: white;\n        margin: 0.5em 1em;\n        padding: 4px 20px;\n        border-radius: 8px;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        gap: 12px;\n        box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n        opacity: 0;\n        transform: translateY(100%);\n        transition: all 0.1s ease;\n      }\n\n      .sync-notification.active {\n        opacity: 1;\n        transform: translateY(0);\n      }\n\n      .sync-notification.fade-out {\n        opacity: 0;\n        transform: translateY(100%);\n      }\n\n      .loading-spinner {\n        display: inline-block;\n        width: 20px;\n        height: 20px;\n        border: 2px solid rgba(255,255,255,0.3);\n        border-top: 2px solid white;\n        border-radius: 50%;\n        animation: spin 1s linear infinite;\n      }\n\n      .checkmark {\n        width: 20px;\n        height: 20px;\n        border: 2px solid white;\n        border-radius: 50%;\n        position: relative;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n      }\n\n      .checkmark::after {\n        content: '';\n        width: 6px;\n        height: 10px;\n        border: solid white;\n        border-width: 0 2px 2px 0;\n        transform: rotate(45deg);\n        margin-top: -2px;\n      }\n\n      @keyframes spin {\n        0% { transform: rotate(0deg); }\n        100% { transform: rotate(360deg); }\n      }\n    `;\n  document.head.appendChild(style);\n}\n\naddNotificationStyles();\n\nconst rebuy_smc_debug_mode = true;\nlet useGiftWithPurchaseWidget = false;\nif ( window.RebuyExperiments ) {\n  \/\/ Data source for 2 gifts: https:\/\/rebuyengine.com\/data_sources\/id\/242169\/edit\n  const giftWithPurchaseWidgetId = '222366'; \/\/ https:\/\/rebuyengine.com\/widgets\/id\/222366\/edit\n  rebuy_smc_debug_mode && console.log('Enabling giftWithPurchaseWidgetId ' + giftWithPurchaseWidgetId);\n  window.RebuyExperiments.run(giftWithPurchaseWidgetId)\n  useGiftWithPurchaseWidget = true;\n} else {\n  console.error('RebuyExperiments not found in SmartCard Custom Code Block for A\/B testing.');\n}\n\nlet currentNotification = null;\nlet fadeTimeout = null;\nlet updateTimeout = null; \/\/ Tracks the 10-second timeout in case Rebuy malfunctions, so we can gracefully remove the toast notification\n\nfunction showUpdatingState() {\n  if ( currentNotification ) {\n    rebuy_smc_debug_mode && console.log('showUpdatingState() detected existing notification, skipping');\n    return;\n  }\n  const containerSelector = '.rebuy-cart__flyout';\n  const insertBeforeSelector = '[data-rebuy-cart-anchor=\"footer\"]';\n  const notificationText = 'Updating free gift quantity...';\n  const container = document.querySelector(containerSelector);\n  const insertBefore = document.querySelector(insertBeforeSelector);\n\n  \/\/ hideState(); \/\/ Remove any existing notification\n\n  \/\/ Create notification element\n  const notification = document.createElement('div');\n  notification.className = 'sync-notification';\n  notification.innerHTML = `\n      <span class=\"loading-spinner\"><\/span>\n      <span>${notificationText}<\/span>\n    `;\n\n  \/\/ Add to document\n  rebuy_smc_debug_mode && console.log('showUpdatingState inserts notification: ' + notification.textContent);\n  container.insertBefore(notification, insertBefore);\n  currentNotification = notification;\n\n  \/\/ Trigger show animation\n  setTimeout(() => {\n    notification.classList.add('active');\n  }, 10);\n\n  \/\/ Set timeout to automatically hide after 10 seconds if showUpdatedState isn't called\n  updateTimeout = setTimeout(() => {\n    rebuy_smc_debug_mode && console.log('Update timeout reached (10 seconds), automatically hiding notification');\n    hideState();\n  }, 10000);\n}\n\nfunction showUpdatedState() {\n  rebuy_smc_debug_mode && console.log('showUpdatedState invoked');\n  const notificationText = 'Free gift quantity updated';\n\n  \/\/ Clear the 10-second timeout since showUpdatedState was called\n  if ( updateTimeout ) {\n    clearTimeout(updateTimeout);\n    updateTimeout = null;\n  }\n\n  if ( !currentNotification ) {\n    console.error('showUpdatedState() called without a notification');\n    \/\/ If no updating notification exists, create a new one\n    \/*const notification = document.createElement('div');\n    notification.className = 'sync-notification';\n    notification.innerHTML = `\n      <div class=\"checkmark\"><\/div>\n      <span>${notificationText}<\/span>\n    `;\n\n    document.body.appendChild(notification);\n    currentNotification = notification;\n\n    setTimeout(() => {\n      notification.classList.add('active');\n    }, 10);*\/\n  } else {\n    \/\/ Update existing notification\n    currentNotification.innerHTML = `\n        <span class=\"checkmark\"><\/span>\n        <span>${notificationText}<\/span>\n      `;\n  }\n\n  \/\/ Clear any existing fade timeout\n  if ( fadeTimeout ) {\n    clearTimeout(fadeTimeout);\n  }\n\n  \/\/ Set fade out after 2 seconds\n  fadeTimeout = setTimeout(() => {\n    hideState();\n  }, 500);\n}\n\nfunction hideState() {\n  rebuy_smc_debug_mode && console.log('hideState invoked');\n\n  \/\/ Clear both timeouts when hiding\n  if ( updateTimeout ) {\n    clearTimeout(updateTimeout);\n    updateTimeout = null;\n  }\n\n  if ( fadeTimeout ) {\n    clearTimeout(fadeTimeout);\n    fadeTimeout = null;\n  }\n\n  if ( currentNotification ) {\n    currentNotification.classList.remove('active');\n    currentNotification.classList.add('fade-out');\n\n    \/\/ Remove from DOM after animation\n    setTimeout(() => {\n      if ( currentNotification && currentNotification.parentNode ) {\n        currentNotification.parentNode.removeChild(currentNotification);\n      }\n      currentNotification = null;\n    }, 300);\n  }\n}\n\ndocument.addEventListener(\"rebuy:cart.change\", function ( event ) {\n  function countCartProductWithTag( cartItems, targetTag ) {\n    if ( !Array.isArray(cartItems) ) {\n      console.error('cartItems must be an array');\n      return 0;\n    }\n\n    const count = cartItems.reduce((total, item) => {\n      if (item.product && item.product.tags) {\n        let hasTag = false;\n\n        \/\/ Handle tags as array or comma-separated string\n        if (Array.isArray(item.product.tags)) {\n          hasTag = item.product.tags.includes(targetTag);\n        } else if (typeof item.product.tags === 'string') {\n          hasTag = item.product.tags.split(',').map(tag => tag.trim()).includes(targetTag);\n        }\n\n        if (hasTag) {\n          return total + item.quantity;\n        }\n      }\n      return total;\n    }, 0);\n\n\n    return count;\n  }\n\n  function countCartProduct( cartItems, hardcodedMouthpieceProductId ) {\n    if ( !Array.isArray(cartItems) ) {\n      console.error('cartItems must be an array');\n      return 0;\n    }\n\n    const count = cartItems.reduce(( total, item ) => {\n      return item.product_id === hardcodedMouthpieceProductId ? total + item.quantity : total;\n    }, 0);\n\n    return count;\n  }\n\n  \/\/ New function to get the maximum quantity from individual line items of a specific product\n  function getMaxQuantityForProduct( cartItems, productId ) {\n    if ( !Array.isArray(cartItems) ) {\n      console.error('cartItems must be an array');\n      return 0;\n    }\n\n    const matchingItems = cartItems.filter(item => item.product_id === productId);\n\n    if ( matchingItems.length === 0 ) {\n      return 0;\n    }\n\n    \/\/ Return the highest quantity among all line items of this product\n    return Math.max(...matchingItems.map(item => item.quantity));\n  }\n\n  function syncFreeCasesNumber() {\n\n    \/** AIRWAAV RX1 Recovery Mouthpiece for Sleep https:\/\/admin.shopify.com\/store\/airwaav\/products\/8149480505595 *\/\n    const paidProductId = 8149480505595;\n    \/** AIRWAAV Mouthpiece Case https:\/\/admin.shopify.com\/store\/airwaav\/products\/9095470317819 *\/\n    const freeProductId = 9095470317819;\n    \/\/ The paid variant becomes free thanks to Rebuy GWP widget and Shopify Functions\n    const freeProductVariantId = 47477054701819;\n\n    \/\/ Use the new function to get max quantity instead of total count\n    \/\/ const numPaid = getMaxQuantityForProduct(event.detail.cart.cart.items, paidProductId);\n    const numPaid = countCartProductWithTag(event.detail.cart.cart.items, 'free-gift-eligible');\n    const numFree = countCartProduct(event.detail.cart.cart.items, freeProductId);\n\n    rebuy_smc_debug_mode && console.debug(`Max quantity for paid product: ${numPaid}, Total free cases: ${numFree}`);\n\n    if ( numPaid !== numFree ) {\n      \/\/ Show updating state\n      showUpdatingState();\n\n      \/\/ Calculate difference and adjust. Or update cart.\n      if ( !useGiftWithPurchaseWidget ) {\n        \/*if ( numFree === 0 ) {\n          rebuy_smc_debug_mode && console.debug('Adding free case to cart, qty ' + numPaid);\n          event.detail.cart.addItem({\n            id: freeProductVariantId,\n            quantity: numPaid\n          });\n        } else {\n          rebuy_smc_debug_mode && console.debug('Updating free case in cart from ' + numFree + ' to ' + numPaid);\n          event.detail.cart.changeItem({\n            id: freeProductVariantId,\n            quantity: numPaid\n          });\n        }*\/\n        console.error('⛔ SmartCard Custom Code Block was called without useGiftWithPurchaseWidget');\n      }\n    } else {\n      rebuy_smc_debug_mode && console.debug('numPaid === numFree === ' + numPaid + ', skipping sync.');\n      if ( currentNotification ) {\n        showUpdatedState();\n      }\n    }\n  }\n\n  rebuy_smc_debug_mode && console.debug('%c rebuy:cart.change event:', 'font-weight: bold; font-size: 1.1em;color: blue;');\n  syncFreeCasesNumber();\n\n});\n<\/script> -->\n"},"anchor_order":5,"component_id":"e4a60ec0-f674-4da9-9c0f-224c8eb46124","custom_template":null,"visibility_status":"hidden","previous_templates":null,"use_custom_template":0},{"type":"login","anchor":"header","version":"v1.2","settings":{"url":"\/account\/login","language":{"title":"Login"}},"anchor_order":2,"component_id":"login","custom_template":null,"visibility_status":"hidden","previous_templates":null,"use_custom_template":0},{"type":"tiered_progress_bar","anchor":"goalBox","version":"v1.5","settings":{"bars":[{"id":"14046-8d896caa-02f5-4d91-953e-d8af37f3420c","name":"Tiered Progress","tiers":[{"id":"b05e7db9-42a7-45a7-8982-0e9a3dbf6ecc","type":"shipping","minimum":75,"products":[],"all_products":[],"discount_type":"percentage","custom_tier_label":false,"product_tier_image":false,"filter_oos_variants":false,"custom_tier_label_text":"Custom Tier Label","presentmentCurrencies":{"enabled":false,"currencies":[]},"product_tier_element_size":"30px","discount_amount_from_total":0,"product_amount_reached_label":true,"discount_amount_reached_label":true,"product_amount_remaining_label":true,"decorative_amount_reached_label":true,"discount_amount_remaining_label":true,"product_amount_reached_label_text":"You have unlocked a free {{product_title}}!","decorative_amount_remaining_label":true,"discount_amount_reached_label_text":"You have unlocked {{discount_amount}} off your entire order!","product_amount_remaining_label_text":"You are {{remaining_amount}} away from a free {{product_title}}!","decorative_amount_reached_label_text":"You have unlocked something great!","discount_amount_remaining_label_text":"You are {{remaining_amount}} away from {{discount_amount}} off your entire order!","decorative_amount_remaining_label_text":"You are {{remaining_amount}} away from something great!"}],"layout":"above","language":{"gift_area_title":"FREE GIFTS","free_shipping_reached":"🎉 Congrats! You've unlocked <b>FREE SHIPPING!<\/b>","free_shipping_remaining":"You are {{remaining_amount}} away from <b>FREE SHIPPING<\/b>!"},"country_codes":["US"],"discounted_by":"functions","use_line_item_mode":false,"excluded_products":[],"geolocation_enabled":false,"all_excluded_products":[],"exclude_discount_in_subtotal":false,"free_shipping_on_all_products":false,"free_shipping_on_subscription":false}]},"anchor_order":1,"component_id":"tiered_progress_bar","custom_template":null,"visibility_status":"visible","previous_templates":null,"use_custom_template":0},{"type":"title_bar","anchor":"header","version":"v1.0","settings":{"title":"Your Cart","heading_tag":"h2","screen_reader_only":false},"anchor_order":1,"component_id":"title_bar","custom_template":null,"visibility_status":"visible","previous_templates":null,"use_custom_template":0}]},"smart_flows":[]}}