{"storeName":"vego-gardening-store.myshopify.com","orgId":"acc1fdf3-6ff9-4bd2-84e7-467aa5426541","buildId":1775180658,"version":"2024-05-05","audiences":[{"experienceId":"06b21199-0d1b-4dda-a9ed-7698f43f58ef","enabled":true,"excludeCurrency":{"exclude":true,"currency":"USD"},"wholesale":false,"audienceType":"common","elseAction":null,"elseVariationId":null,"elseExcludeFromAnalytics":false,"filters":[],"evaluationFrequency":null},{"experienceId":"134a8041-d14c-4166-90c2-792471d1ab9b","enabled":true,"excludeCurrency":{"exclude":true,"currency":"USD"},"wholesale":false,"audienceType":"common","elseAction":null,"elseVariationId":null,"elseExcludeFromAnalytics":false,"filters":[],"evaluationFrequency":null},{"experienceId":"2429efef-cf38-4079-9c4a-70fd107a6ee0","enabled":true,"excludeCurrency":{"exclude":true,"currency":"USD"},"wholesale":false,"audienceType":"common","elseAction":null,"elseVariationId":null,"elseExcludeFromAnalytics":false,"filters":[],"evaluationFrequency":null},{"experienceId":"dc0dfe1b-c0c3-4036-9cb6-9ac1882ce700","enabled":true,"excludeCurrency":{"exclude":false,"currency":null},"wholesale":false,"audienceType":"common","elseAction":null,"elseVariationId":null,"elseExcludeFromAnalytics":false,"filters":[],"evaluationFrequency":null}],"experiencePageTargeting":[],"experienceProductTargeting":[],"experiences":[{"id":"134a8041-d14c-4166-90c2-792471d1ab9b","name":"26 tall classic garden beds  price test","isPreview":true,"description":"26 tall classic garden beds  price test.","devicePreview":{"device":"desktop","path":"/"},"organizationId":"acc1fdf3-6ff9-4bd2-84e7-467aa5426541","type":"pricing","category":"experiment","status":"paused","testTypes":{"hasTestPricing":true,"hasTestShipping":false,"hasTestCampaign":false,"hasTestContent":false,"hasTestContentUrl":false,"hasTestContentAdvanced":false,"hasTestContentOnsite":false,"hasTestContentTemplate":false,"hasTestContentTheme":false,"hasTestOnsiteInjections":true,"hasTestCheckoutBlocks":false},"experienceIntegrations":[],"currency":{"code":"USD","symbol":"$"},"createdAtTs":1773899892507,"shippingTestMethodDefinitions":[],"lastUpdateTs":1774515064774,"previewPath":"","isExternal":false,"startedAtTs":1773901065963,"pausedAtTs":1775180657440,"archivedAtTs":null,"requiresLink":false,"linkBaseUrl":null,"endedAtTs":null,"productVariantCount":0,"sourceExperienceId":null,"sourceAction":null},{"id":"dc0dfe1b-c0c3-4036-9cb6-9ac1882ce700","name":"Gardening Starter Campaign banner Testing","isPreview":false,"description":"","devicePreview":{"device":"desktop","path":"/"},"organizationId":"acc1fdf3-6ff9-4bd2-84e7-467aa5426541","type":"content/onsiteEdits","category":"experiment","status":"started","testTypes":{"hasTestPricing":false,"hasTestShipping":false,"hasTestCampaign":false,"hasTestContent":false,"hasTestContentUrl":false,"hasTestContentAdvanced":false,"hasTestContentOnsite":false,"hasTestContentTemplate":false,"hasTestContentTheme":false,"hasTestOnsiteInjections":true,"hasTestCheckoutBlocks":false},"experienceIntegrations":[],"currency":null,"createdAtTs":1775024555593,"shippingTestMethodDefinitions":[],"lastUpdateTs":1775115469831,"previewPath":"","isExternal":false,"startedAtTs":1775113271603,"pausedAtTs":null,"archivedAtTs":null,"requiresLink":false,"linkBaseUrl":null,"endedAtTs":null,"productVariantCount":0,"sourceExperienceId":null,"sourceAction":null},{"id":"2429efef-cf38-4079-9c4a-70fd107a6ee0","name":"Price test for 17 tall garden beds","isPreview":true,"description":"","devicePreview":{"device":"desktop","path":"/"},"organizationId":"acc1fdf3-6ff9-4bd2-84e7-467aa5426541","type":"pricing","category":"experiment","status":"paused","testTypes":{"hasTestPricing":true,"hasTestShipping":false,"hasTestCampaign":false,"hasTestContent":false,"hasTestContentUrl":false,"hasTestContentAdvanced":false,"hasTestContentOnsite":false,"hasTestContentTemplate":false,"hasTestContentTheme":false,"hasTestOnsiteInjections":true,"hasTestCheckoutBlocks":false},"experienceIntegrations":[],"currency":{"code":"USD","symbol":"$"},"createdAtTs":1774333005278,"shippingTestMethodDefinitions":[],"lastUpdateTs":1774492534556,"previewPath":"","isExternal":false,"startedAtTs":1774336010390,"pausedAtTs":1774509268922,"archivedAtTs":null,"requiresLink":false,"linkBaseUrl":null,"endedAtTs":null,"productVariantCount":0,"sourceExperienceId":null,"sourceAction":null},{"id":"06b21199-0d1b-4dda-a9ed-7698f43f58ef","name":"Test price change for 17 tall 4 in 1 classic garden bed","isPreview":true,"description":"Test price change for 17 tall 4 in 1 classic garden bed","devicePreview":{"device":"desktop","path":"/"},"organizationId":"acc1fdf3-6ff9-4bd2-84e7-467aa5426541","type":"pricing","category":"experiment","status":"paused","testTypes":{"hasTestPricing":true,"hasTestShipping":false,"hasTestCampaign":false,"hasTestContent":false,"hasTestContentUrl":false,"hasTestContentAdvanced":false,"hasTestContentOnsite":false,"hasTestContentTemplate":false,"hasTestContentTheme":false,"hasTestOnsiteInjections":true,"hasTestCheckoutBlocks":false},"experienceIntegrations":[],"currency":{"code":"USD","symbol":"$"},"createdAtTs":1770357041405,"shippingTestMethodDefinitions":[],"lastUpdateTs":1774407346048,"previewPath":"","isExternal":false,"startedAtTs":1772434270831,"pausedAtTs":1773736008070,"archivedAtTs":null,"requiresLink":false,"linkBaseUrl":null,"endedAtTs":null,"productVariantCount":0,"sourceExperienceId":null,"sourceAction":null}],"offers":[],"offerProducts":[],"variations":[{"id":"a95e5b5f-9f22-4697-8b8a-6d04895e4848","experienceId":"06b21199-0d1b-4dda-a9ed-7698f43f58ef","name":"Original","percentage":34,"isControl":true,"order":0,"priceChange":null,"priceChangeUnit":"percent","priceRoundingType":null,"priceRoundingAmount":null,"onsiteEdits":[],"onsiteInjections":{"id":"1d8f9bab-9b03-4010-a1ec-230889bbae4d","variationId":"a95e5b5f-9f22-4697-8b8a-6d04895e4848","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},"shippingRateGroups":[],"testExperienceId":null,"checkoutBlocks":[],"cartTargeting":[]},{"id":"bbd8d343-b680-4a16-b59a-46e3026ee89a","experienceId":"06b21199-0d1b-4dda-a9ed-7698f43f58ef","name":"Cheapest","percentage":33,"isControl":false,"order":2,"priceChange":null,"priceChangeUnit":"percent","priceRoundingType":"none","priceRoundingAmount":"0.00","onsiteEdits":[],"onsiteInjections":{"id":"de4d6d88-95e9-46f8-b89d-039beffa412d","variationId":"bbd8d343-b680-4a16-b59a-46e3026ee89a","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},"shippingRateGroups":[],"testExperienceId":null,"checkoutBlocks":[],"cartTargeting":[]},{"id":"fc8c4d3b-1f36-4c9d-97a9-4ed0f326939e","experienceId":"06b21199-0d1b-4dda-a9ed-7698f43f58ef","name":"Cheaper","percentage":33,"isControl":false,"order":1,"priceChange":null,"priceChangeUnit":"percent","priceRoundingType":null,"priceRoundingAmount":null,"onsiteEdits":[],"onsiteInjections":{"id":"771636c9-2f1a-43fd-ab6d-e22a37938b7d","variationId":"fc8c4d3b-1f36-4c9d-97a9-4ed0f326939e","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},"shippingRateGroups":[],"testExperienceId":null,"checkoutBlocks":[],"cartTargeting":[]},{"id":"07f459a8-a292-47e4-8df9-14d9045f2379","experienceId":"134a8041-d14c-4166-90c2-792471d1ab9b","name":"Cheaper","percentage":20,"isControl":false,"order":1,"priceChange":null,"priceChangeUnit":"percent","priceRoundingType":null,"priceRoundingAmount":null,"onsiteEdits":[],"onsiteInjections":{"id":"0a0136f8-0553-4aa6-942c-1bc0d783c26f","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},"shippingRateGroups":[],"testExperienceId":null,"checkoutBlocks":[],"cartTargeting":[]},{"id":"3a59923b-d91b-4c86-a944-6c63139b2c7d","experienceId":"134a8041-d14c-4166-90c2-792471d1ab9b","name":"Cheapest","percentage":20,"isControl":false,"order":2,"priceChange":null,"priceChangeUnit":"percent","priceRoundingType":"none","priceRoundingAmount":"0.00","onsiteEdits":[],"onsiteInjections":{"id":"b699e83b-4332-4ec2-956b-86537194c02a","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},"shippingRateGroups":[],"testExperienceId":null,"checkoutBlocks":[],"cartTargeting":[]},{"id":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","experienceId":"134a8041-d14c-4166-90c2-792471d1ab9b","name":"Original","percentage":60,"isControl":true,"order":0,"priceChange":null,"priceChangeUnit":"percent","priceRoundingType":null,"priceRoundingAmount":null,"onsiteEdits":[],"onsiteInjections":{"id":"92603de4-43c9-43c1-9a21-610fbcde6d2a","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},"shippingRateGroups":[],"testExperienceId":null,"checkoutBlocks":[],"cartTargeting":[]},{"id":"43459755-be44-4483-b266-eb2e3dab7650","experienceId":"2429efef-cf38-4079-9c4a-70fd107a6ee0","name":"Cheaper","percentage":30,"isControl":false,"order":1,"priceChange":null,"priceChangeUnit":"percent","priceRoundingType":null,"priceRoundingAmount":null,"onsiteEdits":[],"onsiteInjections":{"id":"e99401d3-9eb4-4ff7-a009-70b8494f34eb","variationId":"43459755-be44-4483-b266-eb2e3dab7650","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},"shippingRateGroups":[],"testExperienceId":null,"checkoutBlocks":[],"cartTargeting":[]},{"id":"531a4610-8673-409a-aa1c-983157c96a4e","experienceId":"2429efef-cf38-4079-9c4a-70fd107a6ee0","name":"Origin","percentage":70,"isControl":true,"order":0,"priceChange":null,"priceChangeUnit":"percent","priceRoundingType":null,"priceRoundingAmount":null,"onsiteEdits":[],"onsiteInjections":{"id":"3248d414-d471-4c15-9713-f32cc80fec8b","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},"shippingRateGroups":[],"testExperienceId":null,"checkoutBlocks":[],"cartTargeting":[]},{"id":"21535f85-519e-4c22-a538-3871b8feff66","experienceId":"dc0dfe1b-c0c3-4036-9cb6-9ac1882ce700","name":"Original","percentage":70,"isControl":true,"order":0,"priceChange":null,"priceChangeUnit":"percent","priceRoundingType":null,"priceRoundingAmount":null,"onsiteEdits":[],"onsiteInjections":{"id":"0162163f-5a69-4682-9917-7d2a34edd1f3","variationId":"21535f85-519e-4c22-a538-3871b8feff66","customCss":"","jsInjectionMode":{"type":"immediately"}},"shippingRateGroups":[],"testExperienceId":null,"checkoutBlocks":[],"cartTargeting":[]},{"id":"21d7484f-177f-4d48-8e78-6272a49c0170","experienceId":"dc0dfe1b-c0c3-4036-9cb6-9ac1882ce700","name":"One Picture","percentage":15,"isControl":false,"order":2,"priceChange":null,"priceChangeUnit":"percent","priceRoundingType":"none","priceRoundingAmount":"0.00","onsiteEdits":[],"onsiteInjections":{"id":"6f2436aa-c652-4f6b-b50b-1496aa73f69c","variationId":"21d7484f-177f-4d48-8e78-6272a49c0170","customCss":"#new-drop-a,#new-drop-b{\n  display: none !important\n}\n#new-drop-c{\n  display: block !important\n}","jsInjectionMode":{"type":"immediately"}},"shippingRateGroups":[],"testExperienceId":null,"checkoutBlocks":[],"cartTargeting":[]},{"id":"397b3c9d-d035-4127-bf88-cb892ff84177","experienceId":"dc0dfe1b-c0c3-4036-9cb6-9ac1882ce700","name":"Two Picture","percentage":15,"isControl":false,"order":1,"priceChange":null,"priceChangeUnit":"percent","priceRoundingType":null,"priceRoundingAmount":null,"onsiteEdits":[],"onsiteInjections":{"id":"736a7735-7ea0-491c-9069-ecc67b679390","variationId":"397b3c9d-d035-4127-bf88-cb892ff84177","customCss":"#new-drop-a,#new-drop-c{\n  display: none !important\n}\n#new-drop-b{\n  display: block !important\n}","jsInjectionMode":{"type":"immediately"}},"shippingRateGroups":[],"testExperienceId":null,"checkoutBlocks":[],"cartTargeting":[]}],"experienceProducts":[{"id":"4563721682979","title":"17\" Tall 9 In 1 Large Modular Metal Raised Garden Bed Kit","variants":[{"id":"33018842087459","title":"Pearl White","variationPrices":[{"id":"33018842087459","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":159.95,"compareAtPrice":259.95},{"id":"33018842087459","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":179.95,"compareAtPrice":259.95}]},{"id":"33018842120227","title":"Olive Green","variationPrices":[{"id":"33018842120227","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":159.95,"compareAtPrice":259.95},{"id":"33018842120227","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":179.95,"compareAtPrice":259.95}]},{"id":"39278877605923","title":"Modern Gray","variationPrices":[{"id":"39278877605923","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":159.95,"compareAtPrice":259.95},{"id":"39278877605923","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":179.95,"compareAtPrice":259.95}]},{"id":"39279001403427","title":"British Green","variationPrices":[{"id":"39279001403427","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":159.95,"compareAtPrice":259.95},{"id":"39279001403427","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":179.95,"compareAtPrice":259.95}]},{"id":"40149905244195","title":"Sky Blue","variationPrices":[{"id":"40149905244195","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":159.95,"compareAtPrice":259.95},{"id":"40149905244195","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":179.95,"compareAtPrice":259.95}]},{"id":"40157718347811","title":"Terra Cotta","variationPrices":[{"id":"40157718347811","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":159.95,"compareAtPrice":259.95},{"id":"40157718347811","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":179.95,"compareAtPrice":259.95}]}],"handle":"9-in-1-modular-raised-garden-bed","experienceId":"2429efef-cf38-4079-9c4a-70fd107a6ee0"},{"id":"4804417814563","title":"17\" Tall 6 In 1 Medium Modular Metal Raised Garden Bed Kit","variants":[{"id":"33028107501603","title":"Pearl White","variationPrices":[{"id":"33028107501603","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":149.95,"compareAtPrice":239.95},{"id":"33028107501603","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":159.95,"compareAtPrice":239.95}]},{"id":"33028107534371","title":"Olive Green","variationPrices":[{"id":"33028107534371","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":149.95,"compareAtPrice":239.95},{"id":"33028107534371","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":159.95,"compareAtPrice":239.95}]},{"id":"39279009136675","title":"Modern Gray","variationPrices":[{"id":"39279009136675","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":149.95,"compareAtPrice":239.95},{"id":"39279009136675","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":159.95,"compareAtPrice":239.95}]},{"id":"39279009169443","title":"British Green","variationPrices":[{"id":"39279009169443","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":149.95,"compareAtPrice":239.95},{"id":"39279009169443","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":159.95,"compareAtPrice":239.95}]},{"id":"40149904130083","title":"Sky Blue","variationPrices":[{"id":"40149904130083","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":149.95,"compareAtPrice":239.95},{"id":"40149904130083","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":159.95,"compareAtPrice":239.95}]},{"id":"40157716578339","title":"Terra Cotta","variationPrices":[{"id":"40157716578339","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":149.95,"compareAtPrice":239.95},{"id":"40157716578339","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":159.95,"compareAtPrice":239.95}]},{"id":"40229600591907","title":"Sunlit Oak","variationPrices":[{"id":"40229600591907","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":149.95,"compareAtPrice":239.95},{"id":"40229600591907","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":159.95,"compareAtPrice":239.95}]}],"handle":"vego-garden-6-in-1-modular-raised-garden-bed-kit","experienceId":"2429efef-cf38-4079-9c4a-70fd107a6ee0"},{"id":"4843196055587","title":"17\" Tall 10 In 1 Jumbo Modular Metal Raised Garden Bed Kit","variants":[{"id":"33028104650787","title":"Pearl White","variationPrices":[{"id":"33028104650787","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":179.95,"compareAtPrice":289.95},{"id":"33028104650787","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":199.95,"compareAtPrice":289.95}]},{"id":"33028104683555","title":"Olive Green","variationPrices":[{"id":"33028104683555","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":179.95,"compareAtPrice":289.95},{"id":"33028104683555","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":199.95,"compareAtPrice":289.95}]},{"id":"39279430893603","title":"Modern Gray","variationPrices":[{"id":"39279430893603","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":179.95,"compareAtPrice":289.95},{"id":"39279430893603","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":199.95,"compareAtPrice":289.95}]},{"id":"39279430959139","title":"British Green","variationPrices":[{"id":"39279430959139","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":179.95,"compareAtPrice":289.95},{"id":"39279430959139","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":199.95,"compareAtPrice":289.95}]},{"id":"40149955215395","title":"Sky Blue","variationPrices":[{"id":"40149955215395","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":179.95,"compareAtPrice":289.95},{"id":"40149955215395","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":199.95,"compareAtPrice":289.95}]},{"id":"40157728243747","title":"Terra Cotta","variationPrices":[{"id":"40157728243747","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":179.95,"compareAtPrice":289.95},{"id":"40157728243747","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":199.95,"compareAtPrice":289.95}]},{"id":"40231723794467","title":"Sunlit Oak","variationPrices":[{"id":"40231723794467","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":179.95,"compareAtPrice":289.95},{"id":"40231723794467","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":199.95,"compareAtPrice":289.95}]}],"handle":"10-in-1-modular-metal-raised-garden-bed-kit","experienceId":"2429efef-cf38-4079-9c4a-70fd107a6ee0"},{"id":"6616433885219","title":"17\" Tall 4 In 1 Small Modular Metal Raised Garden Bed Kit","variants":[{"id":"39490604466211","title":"Pearl White","variationPrices":[{"id":"39490604466211","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":139.95,"compareAtPrice":229.95},{"id":"39490604466211","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":149.95,"compareAtPrice":229.95}]},{"id":"39490604498979","title":"British Green","variationPrices":[{"id":"39490604498979","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":139.95,"compareAtPrice":229.95},{"id":"39490604498979","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":149.95,"compareAtPrice":229.95}]},{"id":"39490604531747","title":"Olive Green","variationPrices":[{"id":"39490604531747","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":139.95,"compareAtPrice":229.95},{"id":"39490604531747","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":149.95,"compareAtPrice":229.95}]},{"id":"39490604564515","title":"Modern Gray","variationPrices":[{"id":"39490604564515","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":139.95,"compareAtPrice":229.95},{"id":"39490604564515","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":149.95,"compareAtPrice":229.95}]},{"id":"40149901279267","title":"Sky Blue","variationPrices":[{"id":"40149901279267","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":139.95,"compareAtPrice":229.95},{"id":"40149901279267","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":149.95,"compareAtPrice":229.95}]},{"id":"40157715431459","title":"Terra Cotta","variationPrices":[{"id":"40157715431459","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":139.95,"compareAtPrice":229.95},{"id":"40157715431459","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":149.95,"compareAtPrice":229.95}]},{"id":"40811196842019","title":"Sunlit Oak","variationPrices":[{"id":"40811196842019","name":"Cheaper","variationId":"43459755-be44-4483-b266-eb2e3dab7650","price":139.95,"compareAtPrice":229.95},{"id":"40811196842019","name":"Origin","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","price":149.95,"compareAtPrice":229.95}]}],"handle":"17-tall-4-in-1-modular-metal-raised-garden-bed-kit","experienceId":"2429efef-cf38-4079-9c4a-70fd107a6ee0"},{"id":"6616433885219","title":"17\" Tall 4 In 1 Small Modular Metal Raised Garden Bed Kit","variants":[{"id":"39490604466211","title":"Pearl White","variationPrices":[{"id":"39490604466211","name":"Cheaper","variationId":"fc8c4d3b-1f36-4c9d-97a9-4ed0f326939e","price":149.95,"compareAtPrice":229.95},{"id":"39490604466211","name":"Cheapest","variationId":"bbd8d343-b680-4a16-b59a-46e3026ee89a","price":139.95,"compareAtPrice":229.95},{"id":"39490604466211","name":"Original","variationId":"a95e5b5f-9f22-4697-8b8a-6d04895e4848","price":159.95,"compareAtPrice":229.95}]},{"id":"39490604498979","title":"British Green","variationPrices":[{"id":"39490604498979","name":"Cheaper","variationId":"fc8c4d3b-1f36-4c9d-97a9-4ed0f326939e","price":149.95,"compareAtPrice":229.95},{"id":"39490604498979","name":"Cheapest","variationId":"bbd8d343-b680-4a16-b59a-46e3026ee89a","price":139.95,"compareAtPrice":229.95},{"id":"39490604498979","name":"Original","variationId":"a95e5b5f-9f22-4697-8b8a-6d04895e4848","price":159.95,"compareAtPrice":229.95}]},{"id":"39490604531747","title":"Olive Green","variationPrices":[{"id":"39490604531747","name":"Cheaper","variationId":"fc8c4d3b-1f36-4c9d-97a9-4ed0f326939e","price":149.95,"compareAtPrice":229.95},{"id":"39490604531747","name":"Cheapest","variationId":"bbd8d343-b680-4a16-b59a-46e3026ee89a","price":139.95,"compareAtPrice":229.95},{"id":"39490604531747","name":"Original","variationId":"a95e5b5f-9f22-4697-8b8a-6d04895e4848","price":159.95,"compareAtPrice":229.95}]},{"id":"39490604564515","title":"Modern Gray","variationPrices":[{"id":"39490604564515","name":"Cheaper","variationId":"fc8c4d3b-1f36-4c9d-97a9-4ed0f326939e","price":149.95,"compareAtPrice":229.95},{"id":"39490604564515","name":"Cheapest","variationId":"bbd8d343-b680-4a16-b59a-46e3026ee89a","price":139.95,"compareAtPrice":229.95},{"id":"39490604564515","name":"Original","variationId":"a95e5b5f-9f22-4697-8b8a-6d04895e4848","price":159.95,"compareAtPrice":229.95}]},{"id":"40149901279267","title":"Sky Blue","variationPrices":[{"id":"40149901279267","name":"Cheaper","variationId":"fc8c4d3b-1f36-4c9d-97a9-4ed0f326939e","price":149.95,"compareAtPrice":229.95},{"id":"40149901279267","name":"Cheapest","variationId":"bbd8d343-b680-4a16-b59a-46e3026ee89a","price":139.95,"compareAtPrice":229.95},{"id":"40149901279267","name":"Original","variationId":"a95e5b5f-9f22-4697-8b8a-6d04895e4848","price":159.95,"compareAtPrice":229.95}]},{"id":"40157715431459","title":"Terra Cotta","variationPrices":[{"id":"40157715431459","name":"Cheaper","variationId":"fc8c4d3b-1f36-4c9d-97a9-4ed0f326939e","price":149.95,"compareAtPrice":229.95},{"id":"40157715431459","name":"Cheapest","variationId":"bbd8d343-b680-4a16-b59a-46e3026ee89a","price":139.95,"compareAtPrice":229.95},{"id":"40157715431459","name":"Original","variationId":"a95e5b5f-9f22-4697-8b8a-6d04895e4848","price":159.95,"compareAtPrice":229.95}]},{"id":"40811196842019","title":"Sunlit Oak","variationPrices":[{"id":"40811196842019","name":"Cheaper","variationId":"fc8c4d3b-1f36-4c9d-97a9-4ed0f326939e","price":149.95,"compareAtPrice":229.95},{"id":"40811196842019","name":"Cheapest","variationId":"bbd8d343-b680-4a16-b59a-46e3026ee89a","price":139.95,"compareAtPrice":229.95},{"id":"40811196842019","name":"Original","variationId":"a95e5b5f-9f22-4697-8b8a-6d04895e4848","price":159.95,"compareAtPrice":229.95}]}],"handle":"17-tall-4-in-1-modular-metal-raised-garden-bed-kit","experienceId":"06b21199-0d1b-4dda-a9ed-7698f43f58ef"},{"id":"7105444937763","title":"26\" Tall 4 In 1 Small Modular Metal Raised Garden Bed Kit","variants":[{"id":"40809607790627","title":"Olive Green","variationPrices":[{"id":"40809607790627","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":169.95,"compareAtPrice":299.95},{"id":"40809607790627","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":159.95,"compareAtPrice":299.95},{"id":"40809607790627","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":209.95,"compareAtPrice":299.95}]},{"id":"40809607823395","title":"Modern Gray","variationPrices":[{"id":"40809607823395","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":169.95,"compareAtPrice":299.95},{"id":"40809607823395","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":159.95,"compareAtPrice":299.95},{"id":"40809607823395","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":209.95,"compareAtPrice":299.95}]},{"id":"40809607856163","title":"Pearl White","variationPrices":[{"id":"40809607856163","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":169.95,"compareAtPrice":299.95},{"id":"40809607856163","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":159.95,"compareAtPrice":299.95},{"id":"40809607856163","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":209.95,"compareAtPrice":299.95}]}],"handle":"26-tall-4-in-1-modular-metal-raised-garden-bed-kit","experienceId":"134a8041-d14c-4166-90c2-792471d1ab9b"},{"id":"7105447034915","title":"26\" Tall 6 In 1 Medium Modular Metal Raised Garden Bed Kit","variants":[{"id":"40809614409763","title":"Olive Green","variationPrices":[{"id":"40809614409763","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":209.95,"compareAtPrice":329.95},{"id":"40809614409763","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":199.95,"compareAtPrice":329.95},{"id":"40809614409763","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":229.95,"compareAtPrice":329.95}]},{"id":"40809614442531","title":"Modern Gray","variationPrices":[{"id":"40809614442531","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":209.95,"compareAtPrice":329.95},{"id":"40809614442531","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":199.95,"compareAtPrice":329.95},{"id":"40809614442531","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":229.95,"compareAtPrice":329.95}]},{"id":"40809614475299","title":"Pearl White","variationPrices":[{"id":"40809614475299","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":209.95,"compareAtPrice":329.95},{"id":"40809614475299","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":199.95,"compareAtPrice":329.95},{"id":"40809614475299","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":229.95,"compareAtPrice":329.95}]}],"handle":"26-tall-6-in-1-modular-metal-raised-garden-bed-kit","experienceId":"134a8041-d14c-4166-90c2-792471d1ab9b"},{"id":"7105447788579","title":"26\" Tall 9 In 1 Large Modular Metal Raised Garden Bed Kit","variants":[{"id":"40809617293347","title":"Olive Green","variationPrices":[{"id":"40809617293347","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":239.95,"compareAtPrice":359.95},{"id":"40809617293347","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":229.95,"compareAtPrice":359.95},{"id":"40809617293347","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":249.95,"compareAtPrice":359.95}]},{"id":"40809617326115","title":"Modern Gray","variationPrices":[{"id":"40809617326115","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":239.95,"compareAtPrice":359.95},{"id":"40809617326115","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":229.95,"compareAtPrice":359.95},{"id":"40809617326115","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":249.95,"compareAtPrice":359.95}]},{"id":"40809617358883","title":"Pearl White","variationPrices":[{"id":"40809617358883","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":239.95,"compareAtPrice":359.95},{"id":"40809617358883","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":229.95,"compareAtPrice":359.95},{"id":"40809617358883","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":249.95,"compareAtPrice":359.95}]}],"handle":"26-tall-9-in-1-modular-metal-raised-garden-bed-kit","experienceId":"134a8041-d14c-4166-90c2-792471d1ab9b"},{"id":"7105448214563","title":"26\" Tall 10 In 1 Jumbo Modular Metal Raised Garden Bed Kit","variants":[{"id":"40809617817635","title":"Olive Green","variationPrices":[{"id":"40809617817635","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":259.95,"compareAtPrice":389.95},{"id":"40809617817635","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":249.95,"compareAtPrice":389.95},{"id":"40809617817635","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":269.95,"compareAtPrice":389.95}]},{"id":"40809617850403","title":"Modern Gray","variationPrices":[{"id":"40809617850403","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":259.95,"compareAtPrice":389.95},{"id":"40809617850403","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":249.95,"compareAtPrice":389.95},{"id":"40809617850403","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":269.95,"compareAtPrice":389.95}]},{"id":"40809617883171","title":"Pearl White","variationPrices":[{"id":"40809617883171","name":"Cheaper","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","price":259.95,"compareAtPrice":389.95},{"id":"40809617883171","name":"Cheapest","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","price":249.95,"compareAtPrice":389.95},{"id":"40809617883171","name":"Original","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","price":269.95,"compareAtPrice":389.95}]}],"handle":"26-tall-10-in-1-jumbo-modular-metal-raised-garden-bed-kit","experienceId":"134a8041-d14c-4166-90c2-792471d1ab9b"}],"shippingRateGroups":[],"onsiteEdits":[],"onsiteInjections":[{"id":"1d8f9bab-9b03-4010-a1ec-230889bbae4d","variationId":"a95e5b5f-9f22-4697-8b8a-6d04895e4848","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},{"id":"de4d6d88-95e9-46f8-b89d-039beffa412d","variationId":"bbd8d343-b680-4a16-b59a-46e3026ee89a","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},{"id":"771636c9-2f1a-43fd-ab6d-e22a37938b7d","variationId":"fc8c4d3b-1f36-4c9d-97a9-4ed0f326939e","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},{"id":"0a0136f8-0553-4aa6-942c-1bc0d783c26f","variationId":"07f459a8-a292-47e4-8df9-14d9045f2379","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},{"id":"b699e83b-4332-4ec2-956b-86537194c02a","variationId":"3a59923b-d91b-4c86-a944-6c63139b2c7d","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},{"id":"92603de4-43c9-43c1-9a21-610fbcde6d2a","variationId":"6633fb3f-365e-4f69-b840-eb1d930ba6d2","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},{"id":"e99401d3-9eb4-4ff7-a009-70b8494f34eb","variationId":"43459755-be44-4483-b266-eb2e3dab7650","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},{"id":"3248d414-d471-4c15-9713-f32cc80fec8b","variationId":"531a4610-8673-409a-aa1c-983157c96a4e","customJs":"/**\n * Intelligems Price & Badge Sync - Vego Garden Optimized\n */\n(function() {\n    // Flag to prevent recursive loops when the script modifies the DOM\n    let isInternalUpdate = false;\n\n    function updateDiscountBadge(container) {\n        const badge = container.querySelector('.product__price-savings, .grid-product-badge--discount');\n        const currentPriceEl = container.querySelector('.product__price.on-sale, .grid-product__price.grid-product__has-original, .product__price--sale');\n        const comparePriceEl = container.querySelector('.product__price-container .product__price:not(.on-sale), .grid-product__price--original, .product__price--compare');\n\n        if (!badge || !currentPriceEl || !comparePriceEl) return;\n\n        const curStr = currentPriceEl.innerText.replace(/[^0-9.]/g, '');\n        const oriStr = comparePriceEl.innerText.replace(/[^0-9.]/g, '');\n        const cur = parseFloat(curStr);\n        const ori = parseFloat(oriStr);\n\n        if (isNaN(cur) || isNaN(ori) || cur >= ori || curStr === \"\" || oriStr === \"\") {\n            if (badge.style.display !== 'none') badge.style.display = 'none';\n            return;\n        }\n\n        const diff = (ori - cur).toFixed(0);\n        const percent = Math.round(((ori - cur) / ori) * 100);\n        const originalText = badge.innerText.trim();\n        \n        // Stability fix: Dynamically detect currency instead of hardcoding '$'\n        const currencyMatch = currentPriceEl.innerText.match(/[^\\d\\s.,]/);\n        const currency = currencyMatch ? currencyMatch[0] : '$';\n\n        let newText = \"\";\n        if (originalText.includes('%')) {\n            newText = originalText.toUpperCase().includes('OFF') ? `${percent}% OFF` : `-${percent}%`;\n        } else if (originalText.includes('$') || originalText.includes(currency)) {\n            newText = originalText.toUpperCase().includes('SAVE') ? `SAVE ${currency}${diff}` : `-${currency}${diff}`;\n        }\n\n        // Performance fix: Strict check to prevent unnecessary DOM writes\n        if (newText && badge.innerText.trim() !== newText) {\n            isInternalUpdate = true; // Set flag\n            badge.innerText = newText;\n            badge.style.display = '';\n            // Release flag after DOM settles\n            setTimeout(() => { isInternalUpdate = false; }, 20);\n        }\n    }\n\n    function syncPrice() {\n        window.requestAnimationFrame(() => {\n            const hiddenInput = document.querySelector('input[name=\"properties[original_price]\"]');\n            if (hiddenInput) {\n                const detailPrice = document.querySelector('.product__price--compare, .grid-product__price--original');\n                if (detailPrice) {\n                    const val = detailPrice.innerText.replace(/[^0-9.]/g, '');\n                    if (val && hiddenInput.value !== val) {\n                        isInternalUpdate = true;\n                        hiddenInput.value = val;\n                        setTimeout(() => { isInternalUpdate = false; }, 20);\n                    }\n                }\n            }\n\n            const pdpMain = document.querySelectorAll('.product-single__meta, .product-section');\n            const gridCards = document.querySelectorAll('.grid-product__box, .grid-product__content');\n            const stickyBar = document.querySelectorAll('.mobile-sticky-product-details');\n\n            const allContainers = [...pdpMain, ...gridCards, ...stickyBar];\n            allContainers.forEach(container => updateDiscountBadge(container));\n        });\n    }\n\n    const initObserver = () => {\n        const observer = new MutationObserver((mutations) => {\n            // Stability fix: Ignore changes caused by this script itself\n            if (isInternalUpdate) return;\n\n            let shouldUpdate = false;\n            for (let mutation of mutations) {\n                if (mutation.target.textContent && (mutation.target.textContent.includes('$') || mutation.target.textContent.includes('%'))) {\n                    shouldUpdate = true;\n                    break;\n                }\n            }\n            if (shouldUpdate) syncPrice();\n        });\n\n        observer.observe(document.body, { \n            childList: true, \n            characterData: true, \n            subtree: true \n        });\n    };\n\n    const fastEvents = ['change', 'click'];\n    fastEvents.forEach(eventType => {\n        document.addEventListener(eventType, (e) => {\n            if (e.target.closest('.variant-input, .vego-select-item, .variant-select, [name=\"id\"]')) {\n                setTimeout(syncPrice, 50);\n                setTimeout(syncPrice, 250);\n            }\n        }, { passive: true });\n    });\n\n    syncPrice();\n    initObserver();\n})();","jsInjectionMode":{"type":"immediately"}},{"id":"0162163f-5a69-4682-9917-7d2a34edd1f3","variationId":"21535f85-519e-4c22-a538-3871b8feff66","customCss":"","jsInjectionMode":{"type":"immediately"}},{"id":"6f2436aa-c652-4f6b-b50b-1496aa73f69c","variationId":"21d7484f-177f-4d48-8e78-6272a49c0170","customCss":"#new-drop-a,#new-drop-b{\n  display: none !important\n}\n#new-drop-c{\n  display: block !important\n}","jsInjectionMode":{"type":"immediately"}},{"id":"736a7735-7ea0-491c-9069-ecc67b679390","variationId":"397b3c9d-d035-4127-bf88-cb892ff84177","customCss":"#new-drop-a,#new-drop-c{\n  display: none !important\n}\n#new-drop-b{\n  display: block !important\n}","jsInjectionMode":{"type":"immediately"}}],"userInterfaces":[],"redirects":[],"exclusionGroups":[],"widgets":[{"id":"02ba9171-3ce2-4911-ad00-278b41517ce2","name":"Slide out","enabledSitewide":false,"parentId":null,"widgetType":"messageBoxSlideOut","config":{"desktop":{"variant":"messageBoxSlideOutWidget1","styles":{},"variables":{}}}},{"id":"1a5858a6-7906-482c-8283-937d8231a869","name":"Popup","enabledSitewide":false,"parentId":null,"widgetType":"messageBoxPopup","config":{"desktop":{"variant":"messageBoxPopupWidget1","styles":{},"variables":{}}}},{"id":"36033cac-468f-4fd7-b901-e654d330ba62","name":"Minimal","enabledSitewide":false,"parentId":null,"widgetType":"shippingProgressBar","config":{"desktop":{"variant":"progressBar3","styles":{},"variables":{}}}},{"id":"378b4469-e0de-49fd-ad81-dc309078296a","name":"Checkpoint classic","enabledSitewide":false,"parentId":null,"widgetType":"discountProgressBar","config":{"desktop":{"variant":"progressBar1","styles":{},"variables":{}}}},{"id":"5ec50ee5-ba34-422d-ba1e-fe97a3756ef4","name":"Classic list","enabledSitewide":false,"parentId":null,"widgetType":"quantityButtons","config":{"desktop":{"variant":"quantityButtonsWidgetClassic","styles":{},"variables":{"buttons":[{"id":"64e28ae1-ad36-42c3-9790-b7d2f15b0694","quantity":1,"unitName":"units"},{"id":"dde54f3a-6b36-4d3e-8976-783b04f951a6","quantity":3,"unitName":"units"},{"id":"893680a2-f5ba-48f2-b922-73e6ccff833d","quantity":5,"unitName":"units","extraMessage":"Most popular"}]}}}},{"id":"7447f1f3-7815-40e2-a63b-602c53219cc1","name":"Minimal","enabledSitewide":false,"parentId":null,"widgetType":"discountProgressBar","config":{"desktop":{"variant":"progressBar3","styles":{},"variables":{}}}},{"id":"7b048561-c600-43a3-a7b4-196c8225c35c","name":"Floating milestones","enabledSitewide":false,"parentId":null,"widgetType":"discountProgressBar","config":{"desktop":{"variant":"progressBar2","styles":{},"variables":{}}}},{"id":"7fcf7be6-c5fa-498e-ba15-a0a831462b0c","name":"Compact","enabledSitewide":false,"parentId":null,"widgetType":"quantityButtons","config":{"desktop":{"variant":"quantityButtonsWidgetCompact","styles":{},"variables":{"buttons":[{"id":"d560afa9-fd19-437c-a64c-feccf6687113","quantity":1,"unitName":"units"},{"id":"a05cb6e1-6fe6-4a2d-8ed3-bde67ce368a8","quantity":3,"unitName":"units"},{"id":"9585675b-165d-4844-a9fc-0244fb55ba91","quantity":5,"unitName":"units","extraMessage":"Most popular"}]}}}},{"id":"838fbdee-67b1-4ff6-8dc1-3e02dca67629","name":"Image cards","enabledSitewide":false,"parentId":null,"widgetType":"quantityButtons","config":{"desktop":{"variant":"quantityButtonsWidgetImage","styles":{},"variables":{"buttons":[{"id":"842d188c-1938-464f-a725-531e6a6f563f","quantity":1,"unitName":"units"},{"id":"2d4088ea-4a8a-4203-9758-fea0eb57240e","quantity":3,"unitName":"units"},{"id":"40ebbb5a-01ea-4c43-89b0-a3dcb266bb2b","quantity":5,"unitName":"units","extraMessage":"Most popular"}]}}}},{"id":"96b1dc9e-d1ef-4f6a-8087-9d238e2ed76e","name":"Checkpoint classic","enabledSitewide":false,"parentId":null,"widgetType":"shippingProgressBar","config":{"desktop":{"variant":"progressBar1","styles":{},"variables":{}}}},{"id":"dc7aa837-d8df-4292-a84c-66a5234e11da","name":"Floating milestones","enabledSitewide":false,"parentId":null,"widgetType":"shippingProgressBar","config":{"desktop":{"variant":"progressBar2","styles":{},"variables":{}}}}],"integrations":[],"customEvents":[],"options":{"currencyFormat":{"options":{"minimumFractionDigits":2},"symbol":"$","suffix":"","removeTrailingZeros":true},"shopCurrency":{"locale":"en","code":"USD"},"currencyFn":"","additionalPriceQuerySelectors":[".product__price.on-sale",".grid-product__price",".snize-price",".btn-price",".also-like-price",".product-variants select option"],"additionalComparePriceQuerySelectors":[".product__price.product__price--compare",".grid-product__price--original",".snize-discounted-price","input[name=\"items[0][properties][original_price]\"]","input[name=\"items[1][properties][original_price]\"]","input[name=\"properties[original_price]\"]",".cart__price--strikethrough"],"additionalVolumeDiscountQuerySelectors":[],"additionalInstallmentPriceQuerySelectors":[],"additionalCartDiscountMessageSelectors":[],"additionalSavingsPriceQuerySelectors":[],"additionalSavingsPercentageQuerySelectors":[],"additionalCartSavingsSelectors":[],"additionalCartOriginalTotalSelectors":[],"addIgDiscountToHrefQuerySelectors":[],"shadowElementSelectors":[],"interceptAtcXhr":true,"shouldRedirect":false,"lazyCartUpdate":false,"shouldUseProductMeta":false,"shouldHideShippingSubtext":true,"isHeadlessStorefront":false,"updateVariantsInATCForm":false,"useBeacon":true,"shouldDuplicateProducts":false,"enableAi":false,"locale":"en-US","cousinsMaxLevelsUp":4,"metricsSampleRate":100,"downSampling":{"initialLoads":1,"multiplier":1},"domain":"vegogarden.com","secondaryDomains":[],"eagerUpdateDom":true,"shopifyFunctionsEnabled":true,"shopifyFunctionsForPricingEnabled":true,"priceSplittingEnabled":true,"shouldModifyVdRequests":false,"discountTitle":"DISCOUNT","useBrowserLocale":false,"usePriceProperty":true,"css":"","javascript":"","addIgIdToCartAttrs":true,"addIgTestGroupsToCartAttrs":false,"addIgCampaignsAttrs":true,"addVariationId":false,"maxCookieSize":6000,"onlyTrackWithConsent":false},"builtBy":{"builtBy":"ypOapFAJV9OAXuLra5nF4s4ONl59cxb4HoxPjsLfOMnFhINdr8/0UDHFcbAQ6kHoW+OhPslpLTZmZT+a","updateReason":"Experiment Paused"},"meta":{"embeddedPreviewVersion":"0.0.2"}}