1<!doctype html> 2<html class="js" lang="en"> 3 <head> 4 <!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 4-5
4 5<script async src="https://www.googletagmanager.com/gtag/js?id=
5AW-357637745
vendor: 12 bytes, line 5
5"></script>
6<script> 7
vendor: 134 bytes, lines 7-11
7window.dataLayer = window.dataLayer || []; 8 function gtag(){dataLayer.push(arguments);} 9 gtag('js', new Date()); 10 11 gtag('config', '
11AW-357637745
vendor: 4 bytes, line 11
11');
12</script>
12 13
14<script> 15 !function(w,d,s,u){ 16 if(w.oaiq)return; 17 var q=function(){q.q.push(arguments)}; 18 q.q=[]; 19 w.oaiq=q; 20 var j=d.createElement(s); 21 j.async=1; 22 j.src=u; 23 var f=d.getElementsByTagName(s)[0]; 24 f.parentNode.insertBefore(j,f) 25 }( 26 window, 27 document, 28 "script", 29 "https://bzrcdn.openai.com/sdk/oaiq.min.js" 30 ); 31 32 oaiq("init", { 33 pixelId: "E1T31ZSJNy5vhjkCeFjnLs", 34 debug: true 35 }); 36 </script>
36 37 38 39 <meta charset="utf-8"> 40 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 41 <meta name="viewport" content="width=device-width,initial-scale=1"> 42 <meta name="theme-color" content=""> 43 <link rel="canonical" href="https://bbetter.co/cart"><link rel="icon" type="image/png" href="//bbetter.co/cdn/shop/files/favicon.png?crop=center&height=32&v=1746901072&width=32"><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin><title> 44 Your Shopping Cart 45 – BBetter Store</title> 46 47 48 49 50 51<meta property="og:site_name" content="BBetter Store"> 52<meta property="og:url" content="https://bbetter.co/cart"> 53<meta property="og:title" content="Your Shopping Cart"> 54<meta property="og:type" content="website"> 55<meta property="og:description" content="Buy best health supplements from India's most trusted online health store. BBETTER is a premium brand that makes health supplements. Buy Now!! "><meta name="twitter:card" content="summary_large_image"> 56<meta name="twitter:title" content="Your Shopping Cart"> 57<meta name="twitter:description" content="Buy best health supplements from India's most trusted online health store. BBETTER is a premium brand that makes health supplements. Buy Now!! "> 58 59 60 <link rel="preconnect" href="https://fonts.googleapis.com"> 61 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 62 <link href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap" rel="stylesheet"> 63 64 <link rel="preconnect" href="https://fonts.googleapis.com"> 65<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 66<link href="https://fonts.googleapis.com/css2?family=Nunito+Sans:ital,opsz,wght@0,6..12,200..1000;1,6..12,200..1000&display=swap" rel="stylesheet"> 67<!-- jquery added in header --> 68
68<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
68 69 70 <!-- Bootstrap CSS (v5.3 or similar) --> 71<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous"> 72 73<!-- Bootstrap JS Bundle (includes Popper) -->
74<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script>
vendor: 1 bytes, line 74
74
75<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-G/EV+4j2dNv+tEPo3++6LCgdCROaejBqfUeNjuKAiuXbjrxilcCdDz6ZAVfHWe1Y" crossorigin="anonymous"></script>
75 76 77<!-- Fancybox CSS --> 78<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/[email protected]/dist/fancybox/fancybox.css" /> 79 80<!-- Fancybox JS -->
81<script src="https://cdn.jsdelivr.net/npm/@fancyapps/[email protected]/dist/fancybox/fancybox.umd.js"></script>
81 82
83<script> 84 document.addEventListener("DOMContentLoaded", function() { 85 Fancybox.bind('[data-fancybox="gallery2"]', { 86 Thumbs: true, 87 Toolbar: { 88 display: { 89 left: [""], 90 middle: [ 91 "" 92 ], 93 right: [ "close"], 94 }, 95 }, 96 }); 97 }); 98 </script>
98 99 100<style> 101 /* Fancybox customizations */ 102.fancybox__container { 103 --fancybox-bg: rgba(24, 24, 27, 0.2); 104} 105.f-button.is-next{ 106 background: rgba(24, 24, 27, 0.5) 107} 108.f-button.is-prev{ 109 background: rgba(24, 24, 27, 0.5) 110} 111.tooltip-inner{ 112 font-size: 14px; 113} 114 115</style> 116<!-- Google Tag Manager -->
117<script>
vendor: 327 bytes, lines 117-121
117(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 118new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 119j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 120'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 121})(window,document,'script','dataLayer','
121GTM-PG2FQXQR
vendor: 3 bytes, line 121
121');
121</script>
121 122<!-- End Google Tag Manager --> 123
124<script type="text/javascript"> 125 (function() { 126 var script = document.createElement("script"); 127 script.src = "https://cdn.judge.me/widget.js"; 128 script.async = true; 129 document.body.appendChild(script); 130 })(); 131</script>
131 132
133<script> 134 document.addEventListener("DOMContentLoaded", function() { 135 Fancybox.bind("[data-fancybox]", { 136 Toolbar: { 137 display: ["close"] 138 }, 139 dragToClose: false 140 }); 141 }); 142</script>
142 143 144 145
145<script src="//bbetter.co/cdn/shop/t/43/assets/constants.js?v=132983761750457495441788778311" defer="defer"></script>
145 146
146<script src="//bbetter.co/cdn/shop/t/43/assets/pubsub.js?v=25310214064522200911788778311" defer="defer"></script>
146 147
147<script src="//bbetter.co/cdn/shop/t/43/assets/global.js?v=184345515105158409801788778311" defer="defer"></script>
147 148
148<script src="//bbetter.co/cdn/shop/t/43/assets/details-disclosure.js?v=13653116266235556501788778311" defer="defer"></script>
148 149
149<script src="//bbetter.co/cdn/shop/t/43/assets/details-modal.js?v=25581673532751508451788778311" defer="defer"></script>
149 150
150<script src="//bbetter.co/cdn/shop/t/43/assets/search-form.js?v=133129549252120666541788778311" defer="defer"></script>
150 151 152 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css"> 153 <link 154 rel="stylesheet" 155 href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.theme.default.min.css" 156 >
156<script src="//bbetter.co/cdn/shop/t/43/assets/animations.js?v=88693664871331136111788778311" defer="defer"></script>
156<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
156<meta name="facebook-domain-verification" content="5lz8c9ir0ndwuny6r7j7jcyxae5e6s"> 157<meta name="google-site-verification" content="VdTzzaIHMfRJewNBNidH4O0D6K2k9q4F5Fl314dI87E"> 158<meta name="google-site-verification" content="fGcBjv8xi9QvT3KBXSenVaA5EWwh5Blt3Rbw-bT3cR4"> 159<meta name="google-site-verification" content="kzOBrF0qoSldavSAEXnOhcY6bi7QXRiOKdsUmowuR_4"> 160<meta name="google-site-verification" content="VdTzzaIHMfRJewNBNidH4O0D6K2k9q4F5Fl314dI87E"> 161<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/58608648355/digital_wallets/dialog"> 162<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="alternate" hreflang="x-default" href="https://bbetter.co/cart"> 163<link rel="alternate" hreflang="en" href="https://bbetter.co/cart"> 164<link rel="alternate" hreflang="te" href="https://bbetter.co/te/cart">
165<script async="async" src="/checkouts/internal/preloads.js?locale=en-IN"></script>
vendor: 1 bytes, line 165
165
166<script id="shopify-features" type="application/json">{"accessToken":"f6e19633f215acfb56d5bae82af60bdb","betas":["rich-media-storefront-analytics"],"domain":"bbetter.co","predictiveSearch":true,"shopId":58608648355,"locale":"en"}</script>
vendor: 1 bytes, line 166
166
167<script>var Shopify = Shopify || {}; 168Shopify.shop = "bbetter-store.myshopify.com"; 169Shopify.locale = "en"; 170Shopify.currency = {"active":"INR","rate":"1.0"}; 171Shopify.country = "IN"; 172Shopify.theme = {"name":"normal template image scroll issue solved","id":157686694051,"schema_name":"Refresh","schema_version":"15.3.0","theme_store_id":null,"role":"main"}; 173Shopify.theme.handle = "null"; 174Shopify.theme.style = {"id":null,"handle":null}; 175Shopify.cdnHost = "bbetter.co/cdn"; 176Shopify.routes = Shopify.routes || {}; 177Shopify.routes.root = "/"; 178Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 179Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 180Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 181Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 181
181
182<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 182
182
183<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 183
183
184<script> 185 window.Shopify = window.Shopify || {}; 186 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 187 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 188 window.Shopify.SignInWithShop.eligible = true; 189</script>
vendor: 1 bytes, line 189
189
190<script id="shop-js-analytics" type="application/json">{"pageType":"cart"}</script>
vendor: 1 bytes, line 190
190
191<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 191
191
192<script type="module"> 193 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 194 195 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 196 197</script>
vendor: 1 bytes, line 197
197
198<script> 199 window.Shopify = window.Shopify || {}; 200 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 201 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 202</script>
vendor: 1 bytes, line 202
202
203<script>(function() { 204 var isLoaded = false; 205 function asyncLoad() { 206 if (isLoaded) return; 207 isLoaded = true; 208 var urls = ["https:\/\/chimpstatic.com\/mcjs-connected\/js\/users\/eff086379f02a777c505ca961\/48708ba4620f70a0ff56bfc9e.js?shop=bbetter-store.myshopify.com","https:\/\/apps.hiko.link\/js\/hiko-auth.js?shop=bbetter-store.myshopify.com","https:\/\/app.carecart.io\/api\/abandoned-cart\/js-script?shop=bbetter-store.myshopify.com","https:\/\/cdn.nfcube.com\/instafeed-fc0f4a81cadd16d99da8aba48bfbdbab.js?shop=bbetter-store.myshopify.com","https:\/\/s3.ap-south-1.amazonaws.com\/media.intelliticks.com\/company\/7NPRX8dZQ9kFYpFEo_c\/shopify\/qr-tracking.js?shop=bbetter-store.myshopify.com"]; 209 for (var i = 0; i < urls.length; i++) { 210 var s = document.createElement('script'); 211 s.type = 'text/javascript'; 212 s.async = true; 213 s.src = urls[i]; 214 var x = document.getElementsByTagName('script')[0]; 215 x.parentNode.insertBefore(s, x); 216 } 217 }; 218 if(window.attachEvent) { 219 window.attachEvent('onload', asyncLoad); 220 } else { 221 window.addEventListener('load', asyncLoad, false); 222 } 223})();</script>
vendor: 1 bytes, line 223
223
224<script id="__st">var __st={"a":58608648355,"offset":19800,"reqid":"e05e4e88-674e-4a7b-996c-dd74f466eb01-1791090971","pageurl":"bbetter.co\/cart","u":"08b444e6c0b6","p":"cart"};</script>
vendor: 1 bytes, line 224
224
225<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 225
225
226<script id="form-persister">!function(){'use strict';const t='contact',e='new_comment',n=[[t,t],['blogs',e],['comments',e],[t,'customer']],o='password',r='form_key',c=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',o],s=()=>{try{return window.sessionStorage}catch{return}},i='__shopify_v',u=t=>t.elements[r],a=function(){const t=[...n].map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(',');var e;return e=t,()=>e?[...document.querySelectorAll(e)].map((t=>t.form)):[]}();function m(t){const e=u(t);a().includes(t)&&(!e||!e.value)&&function(t){try{if(!s())return;!function(t){const e=s();if(!e)return;const n=u(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){u(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:r})),t.elements[r].value=e}(t,e),function(t,e){const n=s();if(!n)return;const r=[...t.querySelectorAll(`input[type='${o}']`)].map((({name:t})=>t)),u=[...c,...r],a={};for(const[o,c]of new FormData(t).entries())u.includes(o)||(a[o]=c);n.setItem(e,JSON.stringify({[i]:1,action:t.action,data:a}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(t)}const f=t=>{if('true'===t.dataset.persistBound)return;const e=function(t,e){const n=function(t){return'function'==typeof t.submit?t.submit:HTMLFormElement.prototype.submit}(t).bind(t);return function(){let t;return()=>{t||(t=!0,(()=>{try{e(),n()}catch(t){(t=>{console.error('form submit failed',t)})(t)}})(),setTimeout((()=>t=!1),250))}}()}(t,(()=>{m(t)}));!function(t,e){if('function'==typeof t.submit&&'function'==typeof e)try{t.submit=e}catch{}}(t,e),t.addEventListener('submit',(t=>{t.preventDefault(),e()})),t.dataset.persistBound='true'};!function(){function t(t){const e=(t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form})(t);e&&m(e)}document.addEventListener('submit',t),document.addEventListener('DOMContentLoaded',(()=>{const e=a();for(const t of e)f(t);var n;n=document.body,new window.MutationObserver((t=>{for(const e of t)if('childList'===e.type&&e.addedNodes.length)for(const t of e.addedNodes)1===t.nodeType&&'FORM'===t.tagName&&a().includes(t)&&f(t)})).observe(n,{childList:!0,subtree:!0,attributes:!1}),document.removeEventListener('submit',t)}))}()}();</script>
vendor: 1 bytes, line 226
226
227<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//bbetter.co/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 227
227
228<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//bbetter.co/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
228<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 228
228
229<script> 230 window.Shopify = window.Shopify || {}; 231 window.Shopify.MCP = window.Shopify.MCP || {}; 232 window.Shopify.MCP.enabled = true; 233 window.Shopify.MCP.shop = "bbetter-store.myshopify.com"; 234 window.Shopify.MCP.mcpEndpoint = "https:\/\/bbetter.co\/api\/mcp"; 235 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 236</script>
vendor: 1 bytes, line 236
236
237<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/bbetter.co\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 238</script>
vendor: 1 bytes, line 238
238
239<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://bbetter.co/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 240</script>
vendor: 1 bytes, line 240
240
241<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 242 function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent); 243</script>
vendor: 1 bytes, line 243
243
244<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}})); 245</script>
245 246
247<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
247 248 249 250 <style data-shopify> 251 @font-face { 252 font-family: Inter; 253 font-weight: 400; 254 font-style: normal; 255 font-display: swap; 256 src: url("//bbetter.co/cdn/fonts/inter/inter_n4.b2a3f24c19b4de56e8871f609e73ca7f6d2e2bb9.woff2") format("woff2"), 257 url("//bbetter.co/cdn/fonts/inter/inter_n4.af8052d517e0c9ffac7b814872cecc27ae1fa132.woff") format("woff"); 258} 259 260 @font-face { 261 font-family: Inter; 262 font-weight: 700; 263 font-style: normal; 264 font-display: swap; 265 src: url("//bbetter.co/cdn/fonts/inter/inter_n7.02711e6b374660cfc7915d1afc1c204e633421e4.woff2") format("woff2"), 266 url("//bbetter.co/cdn/fonts/inter/inter_n7.6dab87426f6b8813070abd79972ceaf2f8d3b012.woff") format("woff"); 267} 268 269 @font-face { 270 font-family: Inter; 271 font-weight: 400; 272 font-style: italic; 273 font-display: swap; 274 src: url("//bbetter.co/cdn/fonts/inter/inter_i4.feae1981dda792ab80d117249d9c7e0f1017e5b3.woff2") format("woff2"), 275 url("//bbetter.co/cdn/fonts/inter/inter_i4.62773b7113d5e5f02c71486623cf828884c85c6e.woff") format("woff"); 276} 277 278 @font-face { 279 font-family: Inter; 280 font-weight: 700; 281 font-style: italic; 282 font-display: swap; 283 src: url("//bbetter.co/cdn/fonts/inter/inter_i7.b377bcd4cc0f160622a22d638ae7e2cd9b86ea4c.woff2") format("woff2"), 284 url("//bbetter.co/cdn/fonts/inter/inter_i7.7c69a6a34e3bb44fcf6f975857e13b9a9b25beb4.woff") format("woff"); 285} 286 287 @font-face { 288 font-family: Inter; 289 font-weight: 400; 290 font-style: normal; 291 font-display: swap; 292 src: url("//bbetter.co/cdn/fonts/inter/inter_n4.b2a3f24c19b4de56e8871f609e73ca7f6d2e2bb9.woff2") format("woff2"), 293 url("//bbetter.co/cdn/fonts/inter/inter_n4.af8052d517e0c9ffac7b814872cecc27ae1fa132.woff") format("woff"); 294} 295 296 297 body { 298 font-family: 'Inter', Inter, sans-serif; 299 } 300 301 :root, 302 .color-scheme-1 { 303 --color-background: 238,234,232; 304 305 --gradient-background: #eeeae8; 306 307 308 309 310 --color-foreground: 67,50,44; 311 --color-background-contrast: 184,167,159; 312 --color-shadow: 14,27,77; 313 --color-button: 67,50,44; 314 --color-button-text: 230,222,216; 315 --color-secondary-button: 238,234,232; 316 --color-secondary-button-text: 191,170,155; 317 --color-link: 191,170,155; 318 --color-badge-foreground: 67,50,44; 319 --color-badge-background: 238,234,232; 320 --color-badge-border: 67,50,44; 321 --payment-terms-background-color: rgb(238 234 232); 322 } 323 324 325 .color-scheme-2 { 326 --color-background: 255,255,255; 327 328 --gradient-background: #ffffff; 329 330 331 332 333 --color-foreground: 14,27,77; 334 --color-background-contrast: 191,191,191; 335 --color-shadow: 14,27,77; 336 --color-button: 14,27,77; 337 --color-button-text: 255,255,255; 338 --color-secondary-button: 255,255,255; 339 --color-secondary-button-text: 14,27,77; 340 --color-link: 14,27,77; 341 --color-badge-foreground: 14,27,77; 342 --color-badge-background: 255,255,255; 343 --color-badge-border: 14,27,77; 344 --payment-terms-background-color: rgb(255 255 255); 345 } 346 347 348 .color-scheme-3 { 349 --color-background: 14,27,77; 350 351 --gradient-background: #0e1b4d; 352 353 354 355 356 --color-foreground: 255,255,255; 357 --color-background-contrast: 18,35,99; 358 --color-shadow: 14,27,77; 359 --color-button: 255,255,255; 360 --color-button-text: 14,27,77; 361 --color-secondary-button: 14,27,77; 362 --color-secondary-button-text: 255,255,255; 363 --color-link: 255,255,255; 364 --color-badge-foreground: 255,255,255; 365 --color-badge-background: 14,27,77; 366 --color-badge-border: 255,255,255; 367 --payment-terms-background-color: rgb(14 27 77); 368 } 369 370 371 .color-scheme-4 { 372 --color-background: 71,112,219; 373 374 --gradient-background: #4770db; 375 376 377 378 379 --color-foreground: 255,255,255; 380 --color-background-contrast: 27,57,136; 381 --color-shadow: 14,27,77; 382 --color-button: 255,255,255; 383 --color-button-text: 71,112,219; 384 --color-secondary-button: 71,112,219; 385 --color-secondary-button-text: 255,255,255; 386 --color-link: 255,255,255; 387 --color-badge-foreground: 255,255,255; 388 --color-badge-background: 71,112,219; 389 --color-badge-border: 255,255,255; 390 --payment-terms-background-color: rgb(71 112 219); 391 } 392 393 394 .color-scheme-5 { 395 --color-background: 227,36,2; 396 397 --gradient-background: #e32402; 398 399 400 401 402 --color-foreground: 255,255,255; 403 --color-background-contrast: 101,16,1; 404 --color-shadow: 14,27,77; 405 --color-button: 255,255,255; 406 --color-button-text: 227,36,2; 407 --color-secondary-button: 227,36,2; 408 --color-secondary-button-text: 255,255,255; 409 --color-link: 255,255,255; 410 --color-badge-foreground: 255,255,255; 411 --color-badge-background: 227,36,2; 412 --color-badge-border: 255,255,255; 413 --payment-terms-background-color: rgb(227 36 2); 414 } 415 416 417 .color-scheme-1831d889-ba9a-40d0-8444-0f0c2102e371 { 418 --color-background: 238,234,232; 419 420 --gradient-background: #eeeae8; 421 422 423 424 425 --color-foreground: 255,255,255; 426 --color-background-contrast: 184,167,159; 427 --color-shadow: 238,238,238; 428 --color-button: 67,50,44; 429 --color-button-text: 238,234,232; 430 --color-secondary-button: 238,234,232; 431 --color-secondary-button-text: 148,108,86; 432 --color-link: 148,108,86; 433 --color-badge-foreground: 255,255,255; 434 --color-badge-background: 238,234,232; 435 --color-badge-border: 255,255,255; 436 --payment-terms-background-color: rgb(238 234 232); 437 } 438 439 440 body, .color-scheme-1, .color-scheme-2, .color-scheme-3, .color-scheme-4, .color-scheme-5, .color-scheme-1831d889-ba9a-40d0-8444-0f0c2102e371 { 441 color: rgba(var(--color-foreground), 0.75); 442 background-color: rgb(var(--color-background)); 443 } 444 445 :root { 446 --font-body-family: Inter, sans-serif; 447 --font-body-style: normal; 448 --font-body-weight: 400; 449 --font-body-weight-bold: 700; 450 451 --font-heading-family: Inter, sans-serif; 452 --font-heading-style: normal; 453 --font-heading-weight: 400; 454 455 --font-body-scale: 1.05; 456 --font-heading-scale: 1.0476190476190477; 457 458 --media-padding: px; 459 --media-border-opacity: 0.1; 460 --media-border-width: 0px; 461 --media-radius: 20px;
462 --media-shadow-opacity: 0.0; 463 --media-shadow-horizontal-offset: 0px; 464 --media-shadow-vertical-offset: 4px; 465 --media-shadow-blur-radius: 5px; 466 --media-shadow-visible: 0; 467 468 --page-width: 160rem; 469 --page-width-margin: 0rem; 470 471 --product-card-image-padding: 1.6rem; 472 --product-card-corner-radius: 1.8rem; 473 --product-card-text-alignment: left; 474 --product-card-border-width: 0.1rem; 475 --product-card-border-opacity: 1.0; 476 --product-card-shadow-opacity: 0.0; 477 --product-card-shadow-visible: 0; 478 --product-card-shadow-horizontal-offset: 0.0rem; 479 --product-card-shadow-vertical-offset: 0.4rem; 480 --product-card-shadow-blur-radius: 0.5rem; 481 482 --collection-card-image-padding: 1.6rem; 483 --collection-card-corner-radius: 1.8rem; 484 --collection-card-text-alignment: left; 485 --collection-card-border-width: 0.1rem; 486 --collection-card-border-opacity: 1.0; 487 --collection-card-shadow-opacity: 0.0; 488 --collection-card-shadow-visible: 0; 489 --collection-card-shadow-horizontal-offset: 0.0rem; 490 --collection-card-shadow-vertical-offset: 0.4rem; 491 --collection-card-shadow-blur-radius: 0.5rem; 492 493 --blog-card-image-padding: 1.6rem; 494 --blog-card-corner-radius: 1.8rem; 495 --blog-card-text-alignment: left; 496 --blog-card-border-width: 0.1rem; 497 --blog-card-border-opacity: 1.0; 498 --blog-card-shadow-opacity: 0.0; 499 --blog-card-shadow-visible: 0; 500 --blog-card-shadow-horizontal-offset: 0.0rem; 501 --blog-card-shadow-vertical-offset: 0.4rem; 502 --blog-card-shadow-blur-radius: 0.5rem; 503 504 --badge-corner-radius: 0.0rem; 505 506 --popup-border-width: 1px; 507 --popup-border-opacity: 0.1; 508 --popup-corner-radius: 18px; 509 --popup-shadow-opacity: 0.0; 510 --popup-shadow-horizontal-offset: 0px; 511 --popup-shadow-vertical-offset: 4px; 512 --popup-shadow-blur-radius: 5px; 513 514 --drawer-border-width: 0px; 515 --drawer-border-opacity: 0.1; 516 --drawer-shadow-opacity: 0.0; 517 --drawer-shadow-horizontal-offset: 0px; 518 --drawer-shadow-vertical-offset: 4px; 519 --drawer-shadow-blur-radius: 5px; 520 521 --spacing-sections-desktop: 0px; 522 --spacing-sections-mobile: 0px; 523 524 --grid-desktop-vertical-spacing: 28px; 525 --grid-desktop-horizontal-spacing: 28px; 526 --grid-mobile-vertical-spacing: 14px; 527 --grid-mobile-horizontal-spacing: 14px; 528 529 --text-boxes-border-opacity: 0.1; 530 --text-boxes-border-width: 0px; 531 --text-boxes-radius: 20px; 532 --text-boxes-shadow-opacity: 0.0; 533 --text-boxes-shadow-visible: 0; 534 --text-boxes-shadow-horizontal-offset: 0px; 535 --text-boxes-shadow-vertical-offset: 4px; 536 --text-boxes-shadow-blur-radius: 5px; 537 538 --buttons-radius: 40px; 539 --buttons-radius-outset: 41px; 540 --buttons-border-width: 1px; 541 --buttons-border-opacity: 1.0; 542 --buttons-shadow-opacity: 0.0; 543 --buttons-shadow-visible: 0; 544 --buttons-shadow-horizontal-offset: 0px; 545 --buttons-shadow-vertical-offset: 4px; 546 --buttons-shadow-blur-radius: 5px; 547 --buttons-border-offset: 0.3px; 548 549 --inputs-radius: 12px; 550 --inputs-border-width: 1px; 551 --inputs-border-opacity: 0.55; 552 --inputs-shadow-opacity: 0.0; 553 --inputs-shadow-horizontal-offset: 0px; 554 --inputs-margin-offset: 0px; 555 --inputs-shadow-vertical-offset: 4px; 556 --inputs-shadow-blur-radius: 5px; 557 --inputs-radius-outset: 13px; 558 559 --variant-pills-radius: 40px; 560 --variant-pills-border-width: 1px; 561 --variant-pills-border-opacity: 0.55; 562 --variant-pills-shadow-opacity: 0.0; 563 --variant-pills-shadow-horizontal-offset: 0px; 564 --variant-pills-shadow-vertical-offset: 4px; 565 --variant-pills-shadow-blur-radius: 5px; 566 } 567 568 *, 569 *::before, 570 *::after { 571 box-sizing: inherit; 572 } 573 574 html { 575 box-sizing: border-box; 576 font-size: calc(var(--font-body-scale) * 62.5%); 577 height: 100%; 578 } 579 580 body { 581 display: grid; 582 grid-template-rows: auto auto 1fr auto; 583 grid-template-columns: 100%; 584 min-height: 100%; 585 margin: 0; 586 font-size: 1.5rem; 587 letter-spacing: 0.06rem; 588 line-height: calc(1 + 0.8 / var(--font-body-scale)); 589 font-family: var(--font-body-family); 590 font-style: var(--font-body-style); 591 font-weight: var(--font-body-weight); 592 } 593 a{ 594 color: revert-layer; 595 text-decoration: unset; 596 } 597 598 @media screen and (min-width: 750px) { 599 body { 600 font-size: 1.6rem; 601 } 602 } 603 604 </style> 605 606 <link href="//bbetter.co/cdn/shop/t/43/assets/base.css?v=117717968816030410361788778311" rel="stylesheet" type="text/css" media="all" /> 607 <link rel="stylesheet" href="//bbetter.co/cdn/shop/t/43/assets/component-cart-items.css?v=76691967796475813161788778311" media="print" onload="this.media='all'"><link href="//bbetter.co/cdn/shop/t/43/assets/component-cart-drawer.css?v=112801333748515159671788778311" rel="stylesheet" type="text/css" media="all" /> 608 <link href="//bbetter.co/cdn/shop/t/43/assets/component-cart.css?v=164708765130180853531788778311" rel="stylesheet" type="text/css" media="all" /> 609 <link href="//bbetter.co/cdn/shop/t/43/assets/component-totals.css?v=15906652033866631521788778311" rel="stylesheet" type="text/css" media="all" /> 610 <link href="//bbetter.co/cdn/shop/t/43/assets/component-price.css?v=70172745017360139101788778311" rel="stylesheet" type="text/css" media="all" /> 611 <link href="//bbetter.co/cdn/shop/t/43/assets/component-discounts.css?v=152760482443307489271788778311" rel="stylesheet" type="text/css" media="all" /> 612 613 <link rel="preload" as="font" href="//bbetter.co/cdn/fonts/inter/inter_n4.b2a3f24c19b4de56e8871f609e73ca7f6d2e2bb9.woff2" type="font/woff2" crossorigin> 614 615 616 <link rel="preload" as="font" href="//bbetter.co/cdn/fonts/inter/inter_n4.b2a3f24c19b4de56e8871f609e73ca7f6d2e2bb9.woff2" type="font/woff2" crossorigin> 617 618<link href="//bbetter.co/cdn/shop/t/43/assets/component-localization-form.css?v=170315343355214948141788778311" rel="stylesheet" type="text/css" media="all" /> 619
619<script src="//bbetter.co/cdn/shop/t/43/assets/localization-form.js?v=144176611646395275351788778311" defer="defer"></script>
619<link 620 rel="stylesheet" 621 href="//bbetter.co/cdn/shop/t/43/assets/component-predictive-search.css?v=118923337488134913561788778311" 622 media="print" 623 onload="this.media='all'" 624 >
624<script> 625 if (Shopify.designMode) { 626 document.documentElement.classList.add('shopify-design-mode'); 627 } 628 </script>
628 629 630 <link rel="preconnect" href="https://fonts.googleapis.com"> 631<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 632<link href="https://fonts.googleapis.com/css2?family=Cabin:ital,wght@0,400..700;1,400..700&display=swap" rel="stylesheet"> 633 <!-- BEGIN app block: shopify://apps/microsoft-clarity/blocks/brandAgents_js/31c3d126-8116-4b4a-8ba1-baeda7c4aeea --> 634 635 636 637 638 639<!-- END app block --><!-- BEGIN app block: shopify://apps/microsoft-clarity/blocks/clarity_js/31c3d126-8116-4b4a-8ba1-baeda7c4aeea -->
640<script type="text/javascript"> 641 (function (c, l, a, r, i, t, y) { 642 c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); }; 643 t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i + "?ref=shopify"; 644 y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); 645 646 c.Shopify.loadFeatures([{ name: "consent-tracking-api", version: "0.1" }], error => { 647 if (error) { 648 console.error("Error loading Shopify features:", error); 649 return; 650 } 651 652 c[a]('consentv2', { 653 ad_Storage: c.Shopify.customerPrivacy.marketingAllowed() ? "granted" : "denied", 654 analytics_Storage: c.Shopify.customerPrivacy.analyticsProcessingAllowed() ? "granted" : "denied", 655 source: 101, 656 }); 657 }); 658 659 l.addEventListener("visitorConsentCollected", function (e) { 660 c[a]('consentv2', { 661 ad_Storage: e.detail.marketingAllowed ? "granted" : "denied", 662 analytics_Storage: e.detail.analyticsAllowed ? "granted" : "denied", 663 source: 101, 664 }); 665 }); 666 })(window, document, "clarity", "script", "vbyvtcq3x5"); 667</script>
667 668 669 670 671<!-- END app block --><link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
672<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 58608648355,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "cart"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 672
672
673<script> 674 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 675</script>
vendor: 1 bytes, line 675
675
676<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
676).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 58608648355,storefrontBaseUrl: "https://bbetter.co",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://bbetter.co/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2386559139","configuration":"{\"verifastIndexName\":\"bbetter-store.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"9677c1a03a29ab952a985298a431a9ed","type":"APP","apiClientId":72754888705,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2385903779","configuration":"{\"accountID\":\"selleasy-metrics-track\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"50acfdcd7b118f50e52df83f64624d06","type":"APP","apiClientId":5519923,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]}
676,"dataSharingState":"unrestricted"},{"id":"2375123107","configuration":"{\"businessID\":\"188246ce-3a3c-11f1-b47d-42004e494300\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"00445b4402f9b808ea5db8d03ef24700","type":"APP","apiClientId":115788808193,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2290974883","configuration":"{\"pixel_id\":\"3001000640151594\",\"pixel_type\":\"facebook_pixel\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted","enabledFlags":["9a3ed68a"]},{"id":"2167701667","configuration":"{\"mailchimp_store_id\":\"store_cnychl5cabj7111di7xh\", \"mailchimp_user_id\":\"165706550\",\"mailchimp_list_id\":\"244b8d44de\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"e357a49eadeb6216a959d63fa3fb8f55","type":"APP","apiClientId":2585307,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":[]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2136932515","configuration":"{\"projectId\":\"vbyvtcq3x5\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"d8a2bb2ccbb513dc8e8b6937f4b8033e","type":"APP","apiClientId":240074326017,"privacyPurposes":[],"capabilities":["advanced_dom_events"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"2136899747","configuration":"{\"accountID\":\"1220658\",\"workspaceId\":\"1b60a88d-bea8-4045-9907-c4e510369326\",\"projectId\":\"2a98d1df-8560-4ab6-a0b6-64f0ea3d5112\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"d98eb033f1e81320021a411362de3a55","type":"APP","apiClientId":5461967,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":[],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"930480291","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-6XZ2WEEM3S\\\",\\\"AW-11219466791\\\",\\\"GT-NCLSHNLV\\\"],\\\"target_country\\\":\\\"IN\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-6XZ2WEEM3S\\\",\\\"AW-11219466791\\\/PervCJrM9KoYEKf07eUp\\\",\\\"AW-11219466791\\\"]},{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-6XZ2WEEM3S\\\",\\\"AW-11219466791\\\/5rMSCKDM9KoYEKf07eUp\\\",\\\"AW-11219466791\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-6XZ2WEEM3S\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-6XZ2WEEM3S\\\",\\\"AW-11219466791\\\/L6BtCJfM9KoYEKf07eUp\\\",\\\"MC-TR1HYMKYPP\\\",\\\"AW-11219466791\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-6XZ2WEEM3S\\\",\\\"AW-11219466791\\\/vC5pCNLI9KoYEKf07eUp\\\",\\\"MC-TR1HYMKYPP\\\",\\\"AW-11219466791\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-6XZ2WEEM3S\\\"},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-6XZ2WEEM3S\\\",\\\"AW-11219466791\\\/mFEoCJTM9KoYEKf07eUp\\\",\\\"MC-TR1HYMKYPP\\\",\\\"AW-11219466791\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-6XZ2WEEM3S\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-6XZ2WEEM3S\\\",\\\"AW-11219466791\\\/M14eCNfN9KoYEKf07eUp\\\",\\\"AW-11219466791\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-6XZ2WEEM3
676S\\\",\\\"AW-11219466791\\\/PMYvCJ3M9KoYEKf07eUp\\\",\\\"AW-11219466791\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-6XZ2WEEM3S\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"BBetter Store","paymentSettings":{"currencyCode":"INR"},"myshopifyDomain":"bbetter-store.myshopify.com","countryCode":"IN","storefrontUrl":"https:\/\/bbetter.co"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"9098885693603","handle":"ultimate-joint-muscle-relief-combo-ortho-urja-ortho-tejas-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"47585003569315","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9102121664675","handle":"bbetter-ultimate-joint-pain-relief-combo-ortho-urja-vitamin-d3-copy","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"47595747573923","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9098097066147","handle":"bbetter-ultimate-piles-relief-combo-pilo-urja-pachana-churna","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"47583352455331","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9098891264163","handle":"bbetter-ultimate-joint-pain-relief-combo","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"47585057243299","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8066292056227","handle":"bbetter-orthourja","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46193736286371","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"9103048835235","handle":"ultimate-mens-performance-combo-purified-shilajit-testosterone-booster","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"47599173894307","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7244935659683","handle":"purified-shilajit","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46193752342691","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7153586372771","handle":"testosterone-booster-for-men","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46193738940579","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7285094449315","handle":"ksm-66-ashwagandha","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46193748344995","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7154719752355","handle":"omega-3-fish-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46193740972195","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8828252749987","handle":"bbetter-mct-oil-supplement-1-month-course","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46186994958499","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7452635758755","handle":"flaxseed-oil","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46208161677475","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8849539530915","handle":"bbetter-diabetic-care-1-month-supply","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46201020842147","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8786123554979","handle":"bbetter-diatejas-taila","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46207477317795","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7342771634339","handle":"diabetic-care","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46201022611619","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8555107549347","handle":"bbetter-psoriaurja-1-month-course","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46187011604643","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7153593155747","handle":"marine-collagen","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46208147783843","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8715400839331","handle":"bbetter-psoria-tejas-oil-for-psoriasis-management-made-by-age-old-ayurveda","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46207499501731","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8175816016035","handle":"bbetter-pilourja","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46193735139491","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8716235899043","handle":"bbetter-pachana-churna-ayurvedic-powder-for-healthy-digestion","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46207491539107","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7392974045347","handle":"triphala-500mg-60-vegetarian-tablets","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46208132710563","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8176351084707","handle":"bbetter-pilourja-2-month-course","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46200984273059","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7284834664611","handle":"garcinia-cambogia-for-weight-loss-supplement","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46193756504227","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7516798451875","handle":"apple-cider-vinegar","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46164752335011","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://bbetter.co/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"157686694051","themePublished":"true","eventMetadataId":"0deb4c89-b623-4a25-be17-7e06bbbe902a","pageType":"cart","shopId":"58608648355","storefrontBaseUrl":"https:\/\/bbetter.co","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
676<script> 677 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 678 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 679 window.ShopifyAnalytics.meta.currency = 'INR'; 680 var meta = {"page":{"pageType":"cart","requestId":"e05e4e88-674e-4a7b-996c-dd74f466eb01-1791090971"}}; 681 for (var attr in meta) { 682 window.ShopifyAnalytics.meta[attr] = meta[attr]; 683 } 684</script>
vendor: 1 bytes, line 684
684
685<script class="analytics"> 686 (function () { 687 var customDocumentWrite = function(content) { 688 var jquery = null; 689 690 if (window.jQuery) { 691 jquery = window.jQuery; 692 } else if (window.Checkout && window.Checkout.$) { 693 jquery = window.Checkout.$; 694 } 695 696 if (jquery) { 697 jquery('body').append(content); 698 } 699 }; 700 701 var hasLoggedConversion = function(token) { 702 if (token) { 703 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 704 } 705 return false; 706 } 707 708 var setCookieIfConversion = function(token) { 709 if (token) { 710 var twoMonthsFromNow = new Date(Date.now()); 711 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 712 713 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 714 } 715 } 716 717 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 718 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 719 if (trekkie.integrations) { 720 return; 721 } 722 trekkie.methods = [ 723 'identify', 724 'page', 725 'ready', 726 'track', 727 'trackForm', 728 'trackLink' 729 ]; 730 trekkie.factory = function(method) { 731 return function() { 732 var args = Array.prototype.slice.call(arguments); 733 args.unshift(method); 734 trekkie.push(args); 735 if (method == 'track' || method == 'page') { 736 var pageUrl; 737 try { 738 pageUrl = window.location.href; 739 } catch (e) {} 740 var pageReferrer; 741 try { 742 pageReferrer = document.referrer; 743 } catch (e) {} 744 try { 745 if (window.__TREKKIE_SHIM_QUEUE == null) { 746 window.__TREKKIE_SHIM_QUEUE = []; 747 } 748 window.__TREKKIE_SHIM_QUEUE.push({ 749 from: 'trekkie-stub', 750 method: method, 751 args: args.slice(1), 752 pageContext: { 753 url: pageUrl, 754 referrer: pageReferrer 755 } 756 }); 757 } catch (e) { 758 // no-op 759 } 760 } 761 return trekkie; 762 }; 763 }; 764 for (var i = 0; i < trekkie.methods.length; i++) { 765 var key = trekkie.methods[i]; 766 trekkie[key] = trekkie.factory(key); 767 } 768 trekkie.load = function(config) { 769 trekkie.config = config || {}; 770 trekkie.config.initialDocumentCookie = document.cookie; 771 var first = document.getElementsByTagName('script')[0]; 772var script = document.createElement('script'); 773script.type = 'text/javascript'; 774script.onerror = function(e) { 775 var scriptFallback = document.createElement('script'); 776 scriptFallback.type = 'text/javascript'; 777 scriptFallback.onerror = function(error) { 778 var Monorail = { 779 produce: function produce(monorailDomain, schemaId, payload) { 780 var currentMs = new Date().getTime(); 781 var event = { 782 schema_id: schemaId, 783 payload: payload, 784 metadata: { 785 event_created_at_ms: currentMs, 786 event_sent_at_ms: currentMs 787 } 788 }; 789 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 790 }, 791 sendRequest: function sendRequest(endpointUrl, payload) { 792 // Try the sendBeacon API 793 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 794 var blobData = new window.Blob([payload], { 795 type: 'text/plain' 796 }); 797 798 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 799 return true; 800 } // sendBeacon was not successful 801 802 } // XHR beacon 803 804 var xhr = new XMLHttpRequest(); 805 806 try { 807 xhr.open('POST', endpointUrl); 808 xhr.setRequestHeader('Content-Type', 'text/plain'); 809 xhr.send(payload); 810 } catch (e) { 811 console.log(e); 812 } 813 814 return false; 815 }, 816 isIos12: function isIos12() { 817 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 818 } 819 }; 820 Monorail.produce('monorail-edge.shopifysvc.com', 821 'trekkie_storefront_load_errors/1.1', 822 {shop_id: 58608648355, 823 theme_id: 157686694051, 824 app_name: "storefront", 825 context_url: window.location.href, 826 source_url: "//bbetter.co/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 827 828 }; 829 scriptFallback.async = true; 830 scriptFallback.src = '//bbetter.co/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 831 first.parentNode.insertBefore(scriptFallback, first); 832}; 833script.async = true; 834script.src = '//bbetter.co/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 835first.parentNode.insertBefore(script, first); 836 837 }; 838 trekkie.load( 839 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":58608648355,"isMerchantRequest":null,"themeId":157686694051,"themeCityHash":"8004099351543377489","contentLanguage":"en","currency":"INR","eventMetadataId":"0deb4c89-b623-4a25-be17-7e06bbbe902a"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 840 ); 841 842 var loaded = false;
843 trekkie.ready(function() { 844 if (loaded) return; 845 loaded = true; 846 847 window.ShopifyAnalytics.lib = window.trekkie; 848 849 var originalDocumentWrite = document.write; 850 document.write = customDocumentWrite; 851 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 852 document.write = originalDocumentWrite; 853 854 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 855 var token = match? match[1]: undefined; 856 if (!hasLoggedConversion(token)) { 857 setCookieIfConversion(token); 858 859 } 860 }); 861 862 window.ShopifyAnalytics.lib.page(null,{"pageType":"cart","requestId":"e05e4e88-674e-4a7b-996c-dd74f466eb01-1791090971","shopifyEmitted":true}); 863 864 var eventsListenerScript = document.createElement('script'); 865 eventsListenerScript.async = true; 866 eventsListenerScript.src = "//bbetter.co/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 867 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 868})();</script>
868 869
869<script> 870 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 871 window.ga = function ga() { 872 (window.ga.q = window.ga.q || []).push(arguments); 873 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 874 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 875 } 876 console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information."); 877 }; 878 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 879 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 880 } 881 } 882</script>
vendor: 1 bytes, line 882
882
883<script 884 defer 885 src="https://bbetter.co/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 886 data-application="storefront-renderer" 887 data-shop-id="58608648355" 888 data-render-region="gcp-us-central1" 889 data-page-type="cart" 890 data-theme-instance-id="157686694051" 891 data-theme-name="Refresh" 892 data-theme-version="15.3.0" 893 data-monorail-region="shop_domain" 894 data-resource-timing-sampling-rate="10" 895 data-shs="true" 896 data-shs-beacon="true" 897 data-shs-export-with-fetch="true" 898 data-shs-logs-sample-rate="1" 899 data-shs-beacon-endpoint="https://bbetter.co/api/collect" 900></script>
900 901<meta name="shopify-y" content="da6ccd74-4ffc-48c6-b344-9f95bec3015d" data-expiration="1822648571000"><meta name="shopify-s" content="ee87ffd1-9ca7-4921-868f-3e91d62c1617" data-expiration="1791092771000"><meta name="new-cookie-storage-activated" content="t"> 902</head> 903 904 <body class="gradient animate--hover-default ">
vendor: 68 bytes, lines 904-905
904 905<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
905GTM-PG2FQXQR
vendor: 87 bytes, lines 905-907
905" 906height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 907
907<script> 908 function toggleWishlist(button) { 909 const productData = JSON.parse(button.getAttribute('data-product')); 910 if (productData.loggedIn === 'false') { 911 event.preventDefault(); // Prevent default action 912 window.location.href = "/account/login"; // Redirect to login page 913 } 914 else{ 915 let wishlistData = JSON.parse(localStorage.getItem('wishlist')) || []; 916 console.log(wishlistData); 917 const isAlreadyInWishlist = wishlistData.some(item => item.productId === productData.id); 918 919 if (!isAlreadyInWishlist) { 920 wishlistData.push({ 921 productId: productData.id, 922 productTitle: productData.title, 923 productImg: productData.image, 924 productPrice: productData.price, 925 productOldPrice: productData.oldPrice, 926 productUrl: productData.url, 927 variantId: productData.variantId 928 }); 929 localStorage.setItem('wishlist', JSON.stringify(wishlistData)); 930 updateButtonIcon(button, true); 931 } else { 932 wishlistData = wishlistData.filter(item => item.productId !== productData.id); 933 localStorage.setItem('wishlist', JSON.stringify(wishlistData)); 934 updateButtonIcon(button, false); 935 } 936 937 displayWishlist(); 938 } 939 } 940 941 function updateButtonIcon(button, isInWishlist) { 942 const svgNamespace = "http://www.w3.org/2000/svg"; 943 944 // Create the SVG element 945 const svg = document.createElementNS(svgNamespace, "svg"); 946 svg.setAttribute("width", "30px"); 947 svg.setAttribute("height", "30px"); 948 svg.setAttribute("viewBox", "0 0 16 16"); 949 svg.setAttribute("xmlns", svgNamespace); 950 951 // Create the <g> element for grouping 952 const g = document.createElementNS(svgNamespace, "g"); 953 g.setAttribute("clip-path", "url(#clip0_1653_23864)"); 954 955 // Create the <path> element 956 const path = document.createElementNS(svgNamespace, "path"); 957 path.setAttribute("stroke", "#555052"); 958 path.setAttribute("stroke-width", "1.5"); 959 path.setAttribute("stroke-linecap", "round"); 960 path.setAttribute("stroke-linejoin", "round"); 961 962 if (isInWishlist) { 963 svg.classList.add("heart-filled"); 964 path.setAttribute("fill", "#555052"); // Filled heart 965 } else { 966 svg.classList.add("heart-outline"); 967 path.setAttribute("fill", "none"); // Outlined heart 968 } 969 970 // Set the path data (same for both states) 971 path.setAttribute("d", "M13.8931 3.07357C13.5526 2.73291 13.1483 2.46267 12.7033 2.2783C12.2584 2.09392 11.7814 1.99902 11.2998 1.99902C10.8181 1.99902 10.3412 2.09392 9.89618 2.2783C9.45121 2.46267 9.04692 2.73291 8.70642 3.07357L7.99975 3.78024L7.29309 3.07357C6.60529 2.38578 5.67244 1.99938 4.69975 1.99938C3.72706 1.99938 2.79422 2.38578 2.10642 3.07357C1.41863 3.76137 1.03223 4.69422 1.03223 5.66691C1.03223 6.6396 1.41863 7.57245 2.10642 8.26024L2.81309 8.96691L7.99975 14.1536L13.1864 8.96691L13.8931 8.26024C14.2337 7.91974 14.504 7.51545 14.6884 7.07048C14.8727 6.6255 14.9676 6.14857 14.9676 5.66691C14.9676 5.18525 14.8727 4.70831 14.6884 4.26334C14.504 3.81836 14.2337 3.41408 13.8931 3.07357Z"); 972 973 // Append path to group, group to SVG 974 g.appendChild(path); 975 svg.appendChild(g); 976 977 // Clear existing content and append the new SVG 978 button.innerHTML = ""; 979 button.appendChild(svg); 980 } 981 982 function removeFromWishlist(productId) { 983 let wishlistData = JSON.parse(localStorage.getItem('wishlist')) || []; 984 985 986 987 // Remove the item from localStorage 988 wishlistData = wishlistData.filter(item => item.productId !== productId); 989 localStorage.setItem('wishlist', JSON.stringify(wishlistData)); 990 991 // Remove the corresponding product from the DOM
992 const productElement = document.querySelector(`[data-product-id="${productId}"]`); 993 if (productElement) { 994 productElement.remove(); 995 } 996 997 // If wishlist is empty, display a message 998 if (wishlistData.length === 0) { 999 1000 const wishlistBlock = document.querySelector('.js-wishlistBlock'); 1001 if (wishlistBlock) { 1002 wishlistBlock.innerHTML = '<p>Your wishlist is empty.</p>'; 1003 } 1004 } 1005} 1006 1007 // Display wishlist items 1008 function displayWishlist(pdpData) { 1009 const wishlistData = JSON.parse(localStorage.getItem('wishlist')) || []; 1010 if (wishlistData.length === 0) { 1011 console.log('Wishlist is empty'); 1012 return; 1013 } 1014 const parseMoney = (price) => { 1015 if (!price) return 0; // Handle empty values 1016 return Number(price.replace("Rs. ", "").replace(/,/g, "")); 1017 }; 1018 const formatMoney = (amount) => { 1019 // Convert amount to a number and check if it's valid 1020 let num = Number(amount); 1021 if (isNaN(num)) return "Rs. 0.00"; // Handle invalid values gracefully 1022 1023 return `Rs. ${num.toLocaleString("en-IN", { 1024 minimumFractionDigits: 2, 1025 maximumFractionDigits: 2, 1026 })}`; 1027 }; 1028 1029 const wishlistHtml = wishlistData.map(item => ` 1030 <div class="wishlist-product__list" data-product-id="${item.productId}"> 1031 <div class="c-product"> 1032 <button class="c-product-remove-btn" title="Remove from Wishlist" onclick="removeFromWishlist('${item.productId}')"> 1033 <svg width="35" height="35" viewBox="0 0 25 25" fill="#555052" xmlns="http://www.w3.org/2000/svg"> 1034 <g clip-path="url(#clip0_1653_23864)"> 1035 <path d="M13.8931 3.07357C13.5526 2.73291 13.1483 2.46267 12.7033 2.2783C12.2584 2.09392 11.7814 1.99902 11.2998 1.99902C10.8181 1.99902 10.3412 2.09392 9.89618 2.2783C9.45121 2.46267 9.04692 2.73291 8.70642 3.07357L7.99975 3.78024L7.29309 3.07357C6.60529 2.38578 5.67244 1.99938 4.69975 1.99938C3.72706 1.99938 2.79422 2.38578 2.10642 3.07357C1.41863 3.76137 1.03223 4.69422 1.03223 5.66691C1.03223 6.6396 1.41863 7.57245 2.10642 8.26024L2.81309 8.96691L7.99975 14.1536L13.1864 8.96691L13.8931 8.26024C14.2337 7.91974 14.504 7.51545 14.6884 7.07048C14.8727 6.6255 14.9676 6.14857 14.9676 5.66691C14.9676 5.18525 14.8727 4.70831 14.6884 4.26334C14.504 3.81836 14.2337 3.41408 13.8931 3.07357Z" 1036 fill="#555052" stroke="#555052" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1037 </g> 1038 <defs> 1039 <clipPath id="clip0_1653_23864"> 1040 <rect width="16" height="16" fill="white"/> 1041 </clipPath> 1042 </defs> 1043 </svg> 1044 </button> 1045 <a href="${item.productUrl}"> 1046 <img src="${item.productImg}" alt="${item.productTitle}"> 1047 <h3 class="c-product__title card__heading h5"> 1048 <span class="first-word">${item.productTitle.split(" ")[0]}</span> 1049 <div class="remaining-words"> 1050 ${item.productTitle.split(" ").slice(1).join(" ")} 1051 </div> 1052 </h3> 1053 1054 <p class="c-product__price"> 1055 <span class="c-product-new-price">${formatMoney(parseMoney(item.productPrice))}</span> 1056 ${parseMoney(item.productOldPrice) > parseMoney(item.productPrice) 1057 ? `<span class="c-product-old-price">${formatMoney(parseMoney(item.productOldPrice))}</span>` 1058 : ''} 1059 </p> 1060 1061 </a> 1062 <!-- Add to Cart Button --> 1063 <form method="post" action="/cart/add" class="quick-add-form"> 1064 <input type="hidden" name="id" value="${item.variantId}"> 1065 <button type="submit" class="c-product-add-cart-button">Add</button> 1066 </form> 1067 </div> 1068 </div> 1069 `).join(''); 1070 1071 const wishlistBlock = document.querySelector('.js-wishlistBlock'); 1072 1073 // Add a check to ensure the element is not null before setting innerHTML 1074 if (wishlistBlock) { 1075 wishlistBlock.innerHTML = wishlistHtml; 1076 } else { 1077 console.error('Element with class "js-wishlistBlock" not found'); 1078 } 1079 } 1080 1081 // Execute this function on DOM content load 1082document.addEventListener('DOMContentLoaded', function () { 1083 // Fetch the wishlist data from localStorage 1084 const wishlistData = JSON.parse(localStorage.getItem('wishlist')) || []; 1085 1086 // Set the initial button text based on whether the product is in the wishlist or not 1087 const wishlistButton = document.querySelector('.wishlist_button'); // Use querySelector instead of getElementsByClassName 1088 const productId = ""; 1089 1090 if (wishlistButton) { 1091 const isAlreadyInWishlist = wishlistData.some(item => item.productId === productId); 1092 wishlistButton.innerHTML = isAlreadyInWishlist ? `<svg width="30" height="30" viewBox="0 0 16 16" fill="#555052" xmlns="http://www.w3.org/2000/svg"> 1093 <g clip-path="url(#clip0_1653_23864)"> 1094 <path d="M13.8931 3.07357C13.5526 2.73291 13.1483 2.46267 12.7033 2.2783C12.2584 2.09392 11.7814 1.99902 11.2998 1.99902C10.8181 1.99902 10.3412 2.09392 9.89618 2.2783C9.45121 2.46267 9.04692 2.73291 8.70642 3.07357L7.99975 3.78024L7.29309 3.07357C6.60529 2.38578 5.67244 1.99938 4.69975 1.99938C3.72706 1.99938 2.79422 2.38578 2.10642 3.07357C1.41863 3.76137 1.03223 4.69422 1.03223 5.66691C1.03223 6.6396 1.41863 7.57245 2.10642 8.26024L2.81309 8.96691L7.99975 14.1536L13.1864 8.96691L13.8931 8.26024C14.2337 7.91974 14.504 7.51545 14.6884 7.07048C14.8727 6.6255 14.9676 6.14857 14.9676 5.66691C14.9676 5.18525 14.8727 4.70831 14.6884 4.26334C14.504 3.81836 14.2337 3.41408 13.8931 3.07357Z" 1095 fill="#555052" stroke="#555052" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1096 </g> 1097 <defs> 1098 <clipPath id="clip0_1653_23864"> 1099 <rect width="16" height="16" fill="white"/> 1100 </clipPath> 1101 </defs> 1102 </svg>` 1103 : `<svg width="30" height="30" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 1104 <g clip-path="url(#clip0_1653_23864)"> 1105 <path d="M13.8931 3.07357C13.5526 2.73291 13.1483 2.46267 12.7033 2.2783C12.2584 2.09392 11.7814 1.99902 11.2998 1.99902C10.8181 1.99902 10.3412 2.09392 9.89618 2.2783C9.45121 2.46267 9.04692 2.73291 8.70642 3.07357L7.99975 3.78024L7.29309 3.07357C6.60529 2.38578 5.67244 1.99938 4.69975 1.99938C3.72706 1.99938 2.79422 2.38578 2.10642 3.07357C1.41863 3.76137 1.03223 4.69422 1.03223 5.66691C1.03223 6.6396 1.41863 7.57245 2.10642 8.26024L2.81309 8.96691L7.99975 14.1536L13.1864 8.96691L13.8931 8.26024C14.2337 7.91974 14.504 7.51545 14.6884 7.07048C14.8727 6.6255 14.9676 6.14857 14.9676 5.66691C14.9676 5.18525 14.8727 4.70831 14.6884 4.26334C14.504 3.81836 14.2337 3.41408 13.8931 3.07357Z" stroke="#555052" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1106 </g> 1107 <defs> 1108 <clipPath id="clip0_1653_23864"> 1109 <rect width="16" height="16" fill="white"/> 1110 </clipPath> 1111 </defs> 1112 </svg>`; 1113 } else { 1114 console.error('Element with class "wishlist_button" not found'); 1115 } 1116 1117 // Display wishlist items 1118 displayWishlist(); 1119}); 1120 </script>
1120 1121 1122 <!-- 1123 <a href="/pages/wishlist" class="button-floating"> 1124 <svg width="30px" height="30px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 1125 <rect x="0" fill="none" width="24" height="24"/> 1126 1127 <g> 1128 1129 <path d="M16.5 4.5c2.206 0 4 1.794 4 4 0 4.67-5.543 8.94-8.5 11.023C9.043 17.44 3.5 13.17 3.5 8.5c0-2.206 1.794-4 4-4 1.298 0 2.522.638 3.273 1.706L12 7.953l1.227-1.746c.75-1.07 1.975-1.707 3.273-1.707m0-1.5c-1.862 0-3.505.928-4.5 2.344C11.005 3.928 9.362 3 7.5 3 4.462 3 2 5.462 2 8.5c0 5.72 6.5 10.438 10 12.85 3.5-2.412 10-7.13 10-12.85C22 5.462 19.538 3 16.5 3z"/> 1130 1131 </g> 1132 </svg> 1133 <p class="wishlist_text">Your Wishlist</p> 1134 </a> 1135 --> 1136 1137 <!--
1137<script> 1138 function updateCartCount() { 1139 fetch('/cart.js') 1140 .then((res) => res.json()) 1141 .then((cart) => { 1142 const countEl = document.getElementById('cart-count'); 1143 if (countEl) { 1144 countEl.textContent = cart.item_count; 1145 } 1146 }); 1147 } 1148 1149 document.addEventListener('click', (e) => { 1150 // Quantity update buttons 1151 if (e.target.closest('[data-quantity-update]')) { 1152 setTimeout(updateCartCount, 500); // Give Shopify time to process 1153 } 1154 1155 // Remove from cart link 1156 const removeBtn = e.target.closest('[data-remove-from-cart]'); 1157 if (removeBtn) { 1158 removeBtn.addEventListener('click', () => { 1159 setTimeout(updateCartCount, 500); 1160 }); 1161 } 1162 }); 1163 1164 // Optional: also run on DOM load to sync count initially 1165 document.addEventListener('DOMContentLoaded', updateCartCount); 1166</script>
1166 --> 1167 1168
1168<script> 1169 function refreshHeader() { 1170 fetch(window.location.pathname, { 1171 headers: { 1172 'X-Requested-With': 'XMLHttpRequest' 1173 } 1174 }) 1175 .then((response) => response.text()) 1176 .then((html) => { 1177 const tempDOM = new DOMParser().parseFromString(html, 'text/html'); 1178 const newHeader = tempDOM.querySelector('header'); 1179 const currentHeader = document.querySelector('header'); 1180 if (newHeader && currentHeader) { 1181 currentHeader.innerHTML = newHeader.innerHTML; 1182 } 1183 }); 1184} 1185 1186// Trigger header refresh when cart changes 1187document.addEventListener('click', (e) => { 1188 // Quantity update 1189 if (e.target.closest('[data-quantity-update]')) { 1190 setTimeout(refreshHeader, 500); 1191 } 1192 1193 // Remove from cart 1194 if (e.target.closest('[data-remove-from-cart]')) { 1195 setTimeout(refreshHeader, 500); 1196 } 1197}); 1198 1199 </script>
1199 1200 1201 1202 1203 <a class="skip-to-content-link button visually-hidden" href="#MainContent"> 1204 Skip to content 1205 </a> 1206 1207<link href="//bbetter.co/cdn/shop/t/43/assets/quantity-popover.css?v=160630540099520878331788778311" rel="stylesheet" type="text/css" media="all" /> 1208<link href="//bbetter.co/cdn/shop/t/43/assets/component-card.css?v=126134065799087717621788778311" rel="stylesheet" type="text/css" media="all" /> 1209
1210<script src="//bbetter.co/cdn/shop/t/43/assets/cart.js?v=53424156413386894761788778311" defer="defer"></script>
vendor: 1 bytes, line 1210
1210
1211<script src="//bbetter.co/cdn/shop/t/43/assets/quantity-popover.js?v=987015268078116491788778311" defer="defer"></script>
1211 1212 1213<style> 1214 .drawer { 1215 visibility: hidden; 1216 } 1217</style> 1218 1219<cart-drawer class="drawer is-empty"> 1220 <div id="CartDrawer" class="cart-drawer"> 1221 <div id="CartDrawer-Overlay" class="cart-drawer__overlay"></div> 1222 <div 1223 class="drawer__inner gradient color-scheme-1" 1224 role="dialog" 1225 aria-modal="true" 1226 aria-label="My cart" 1227 tabindex="-1" 1228 ><div class="drawer__inner-empty"> 1229 <div class="cart-drawer__warnings center"> 1230 <div class="cart-drawer__empty-content"> 1231 <h2 class="cart__empty-text">Your cart is empty</h2> 1232 <button 1233 class="drawer__close" 1234 type="button" 1235 onclick="this.closest('cart-drawer').close()" 1236 aria-label="Close" 1237 > 1238 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-close" viewBox="0 0 18 17"><path fill="currentColor" d="M.865 15.978a.5.5 0 0 0 .707.707l7.433-7.431 7.579 7.282a.501.501 0 0 0 .846-.37.5.5 0 0 0-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 1 0-.707-.708L8.991 7.853 1.413.573a.5.5 0 1 0-.693.72l7.563 7.268z"/></svg> 1239</span> 1240 </button> 1241 <a href="/collections/all" class="button"> 1242 Continue shopping 1243 </a><p class="cart__login-title h3">Have an account?</p> 1244 <p class="cart__login-paragraph"> 1245 <a href="/account/login" class="link underlined-link">Log in</a> to check out faster. 1246 </p></div> 1247 </div></div><div class="drawer__header"> 1248 <h2 class="drawer__heading">My cart</h2> 1249 <button 1250 class="drawer__close" 1251 type="button" 1252 onclick="this.closest('cart-drawer').close()" 1253 aria-label="Close" 1254 > 1255 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-close" viewBox="0 0 18 17"><path fill="currentColor" d="M.865 15.978a.5.5 0 0 0 .707.707l7.433-7.431 7.579 7.282a.501.501 0 0 0 .846-.37.5.5 0 0 0-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 1 0-.707-.708L8.991 7.853 1.413.573a.5.5 0 1 0-.693.72l7.563 7.268z"/></svg> 1256</span> 1257 </button> 1258 </div> 1259 <cart-drawer-items 1260 1261 class=" is-empty" 1262 1263 > 1264 <form 1265 action="/cart" 1266 id="CartDrawer-Form" 1267 class="cart__contents cart-drawer__form" 1268 method="post" 1269 > 1270 <div id="CartDrawer-CartItems" class="drawer__contents js-contents"><p id="CartDrawer-LiveRegionText" class="visually-hidden" role="status"></p> 1271 <p id="CartDrawer-LineItemStatus" class="visually-hidden" aria-hidden="true" role="status"> 1272 Loading... 1273 </p> 1274 </div> 1275 <div id="CartDrawer-CartErrors" role="alert"></div> 1276 </form> 1277 </cart-drawer-items> 1278 <div class="drawer__footer"><!-- Start blocks --> 1279 <!-- Subtotals --> 1280 1281 <div class="cart-drawer__footer" > 1282 <div></div> 1283 1284 <div class="totals" role="status"> 1285 <h2 class="totals__total">Estimated total</h2> 1286 <p class="totals__total-value">Rs. 0.00</p> 1287 </div> 1288 1289 <small class="tax-note caption-large rte">Taxes included. Discounts and <a href="/policies/shipping-policy" class="link underlined-link">shipping</a> calculated at checkout. 1290</small> 1291 </div> 1292 1293 <!-- CTAs --> 1294 1295 <div class="cart__ctas" > 1296 <button 1297 type="submit" 1298 id="CartDrawer-Checkout" 1299 class="cart__checkout-button button" 1300 name="checkout" 1301 form="CartDrawer-Form" 1302 1303 disabled 1304 1305 > 1306 Check out 1307 </button> 1308 </div> 1309 </div> 1310 </div> 1311 </div> 1312</cart-drawer> 1313<!-- BEGIN sections: header-group --> 1314<div id="shopify-section-sections--22028666208419__marquee_dDYgVd" class="shopify-section shopify-section-group-header-group"><style> 1315 .fancybox__dialog div:empty{ 1316 display: unset !important; 1317} 1318 #scroll-wrapper-sections--22028666208419__marquee_dDYgVd { 1319 background: #5b4438; 1320 } 1321.section-sections--22028666208419__marquee_dDYgVd.custom-icons, 1322.section-sections--22028666208419__marquee_dDYgVd.featured-block { 1323 position: absolute; 1324 top: 0; 1325 left: 0; 1326 width: 100%; 1327 height: 47px; 1328 opacity: 0; 1329 transform: translateY(100%); /* hidden below */ 1330 transition: all 0.6s ease-in-out; 1331 display: flex; 1332 align-items: center; 1333} 1334 1335.section-sections--22028666208419__marquee_dDYgVd.custom-icons{ 1336 justify-content: center; 1337} 1338 1339 1340/* Apply only for screens > 600px */ 1341@media screen and (min-width: 601px) { 1342 .section-sections--22028666208419__marquee_dDYgVd.featured-block { 1343 justify-content: center; /* center horizontally */ 1344 } 1345} 1346 1347.section-sections--22028666208419__marquee_dDYgVd.custom-icons { 1348 gap: 30px; 1349 scroll-behavior: smooth; 1350 -webkit-overflow-scrolling: touch; 1351 overflow-x: auto; 1352 white-space: nowrap; 1353 color: #ffffff; 1354 padding: 10px 25px; 1355} 1356 1357.section-sections--22028666208419__marquee_dDYgVd.featured-block { 1358 gap: 15px; 1359 overflow-x: auto; 1360 white-space: nowrap; 1361 color: #ffffff; 1362 padding: 10px 25px; 1363} 1364 1365.section-sections--22028666208419__marquee_dDYgVd.custom-icons.active, 1366.section-sections--22028666208419__marquee_dDYgVd.featured-block.active { 1367 opacity: 1; 1368 transform: translateY(0); /* visible in place */ 1369} 1370 1371.section-sections--22028666208419__marquee_dDYgVd.custom-icons.exit, 1372.section-sections--22028666208419__marquee_dDYgVd.featured-block.exit { 1373 opacity: 0; 1374 transform: translateY(-100%); /* scroll up */ 1375} 1376 1377/* Hide scrollbar */ 1378.section-sections--22028666208419__marquee_dDYgVd.custom-icons::-webkit-scrollbar, 1379.section-sections--22028666208419__marquee_dDYgVd.featured-block::-webkit-scrollbar { display: none; } 1380 1381.section-sections--22028666208419__marquee_dDYgVd.custom-icons .icon-container { 1382 display: inline-flex; 1383 align-items: center; 1384 gap: 8px; 1385} 1386 1387.section-sections--22028666208419__marquee_dDYgVd.featured-block .block-container { 1388 display: flex; 1389 align-items: center; 1390 gap: 10px; 1391} 1392 1393.section-sections--22028666208419__marquee_dDYgVd.featured-block .block-container a { 1394 display: flex; 1395 align-items: center; 1396 gap: 10px; 1397 text-decoration: none; 1398 color: inherit; 1399} 1400 1401.section-sections--22028666208419__marquee_dDYgVd.custom-icons .icon-container img, 1402.section-sections--22028666208419__marquee_dDYgVd.featured-block .block-container img {
1403 width: 20px; 1404 height: 20px; 1405 1406} 1407 1408.section-sections--22028666208419__marquee_dDYgVd .icon-text { 1409 font-size: 28px; 1410 font-weight: 500; 1411 text-transform: capitalize; 1412} 1413 1414.section-sections--22028666208419__marquee_dDYgVd.featured-block .block-text { 1415 display: flex; 1416 flex-direction: row; 1417 gap: 8px; 1418 font-size: 13px; 1419 text-transform: capitalize; 1420 align-items: center; 1421 font-weight: 500; 1422} 1423 1424#scroll-wrapper-sections--22028666208419__marquee_dDYgVd { 1425 position: relative; 1426 height: 47px; /* fixed height container */ 1427 overflow: hidden; 1428} 1429</style> 1430 1431<div id="scroll-wrapper-sections--22028666208419__marquee_dDYgVd"> 1432 <div id="icons-wrapper-sections--22028666208419__marquee_dDYgVd" class="section-sections--22028666208419__marquee_dDYgVd custom-icons"><div class="icon-container"> 1433 <a href="https://www.youtube.com/watch?v=EFxxHfYcJt8" data-fancybox rel="noopener noreferrer"><img src="//bbetter.co/cdn/shop/files/play_3036b4f7-4455-407a-820d-833e8a3ce9b9_24x24.svg?v=1757945960" alt="icon"> 1434 <span class="icon-text">Why BBETTER?</span></a></div><div class="icon-container"><img src="//bbetter.co/cdn/shop/files/sun_c0dee11e-41f8-49af-9bf6-e402b7f05b12_24x24.svg?v=1757945961" alt="icon"> 1435 <span class="icon-text">Ethically sourced ingredients</span></div><div class="icon-container"><img src="//bbetter.co/cdn/shop/files/thumbsup_24x24.svg?v=1757945960" alt="icon"> 1436 <span class="icon-text">No side effects</span></div><div class="icon-container"><img src="//bbetter.co/cdn/shop/files/safety_b2edb082-8963-415a-8409-828b657a34b2_24x24.svg?v=1757945960" alt="icon"> 1437 <span class="icon-text">Safety first</span></div><div class="icon-container"><img src="//bbetter.co/cdn/shop/files/mobile_5bf2ce7e-3cd4-44e0-9881-268b4c6a204e_24x24.svg?v=1757945960" alt="icon"> 1438 <span class="icon-text">100% online</span></div><div class="icon-container"><img src="//bbetter.co/cdn/shop/files/fav_24x24.svg?v=1757945960" alt="icon"> 1439 <span class="icon-text">Trusted by 10 lakh + customers</span></div><div class="icon-container"><img src="//bbetter.co/cdn/shop/files/file_24x24.svg?v=1757945959" alt="icon"> 1440 <span class="icon-text">Efficacy compliant</span></div></div> 1441 1442 <div id="featured-wrapper-sections--22028666208419__marquee_dDYgVd" class="section-sections--22028666208419__marquee_dDYgVd featured-block"><div class="block-container"><a href="tel: 8008178844" rel="noopener noreferrer"><img src="//bbetter.co/cdn/shop/files/call_48x48.svg?v=1757946516" alt="icon"> 1443 <div class="block-text text-[500]"> 1444 <span class="block-title">Call now</span> 1445 - 1446 <span>For Ayurveda Relief From BBETTER</span> 1447 </div></a></div></div> 1448</div> 1449
1450<script> 1451document.addEventListener("DOMContentLoaded", function() { 1452 let icons = document.getElementById("icons-wrapper-sections--22028666208419__marquee_dDYgVd"); 1453 let featured = document.getElementById("featured-wrapper-sections--22028666208419__marquee_dDYgVd"); 1454 let showingIcons = true; 1455 1456 function switchBlocks() { 1457 if (showingIcons) { 1458 icons.classList.remove("active"); 1459 icons.classList.add("exit"); 1460 1461 setTimeout(() => { 1462 icons.classList.remove("exit"); 1463 featured.classList.add("active"); 1464 }, 600); // match CSS transition 1465 } else { 1466 featured.classList.remove("active"); 1467 featured.classList.add("exit"); 1468 1469 setTimeout(() => { 1470 featured.classList.remove("exit"); 1471 icons.classList.add("active"); 1472 }, 600); 1473 } 1474 showingIcons = !showingIcons; 1475 } 1476 1477 // start with icons visible 1478 icons.classList.add("active"); 1479 1480 // loop every 5 sec 1481 setInterval(switchBlocks, 5000); 1482}); 1483</script>
1483 1484 1485 1486<style> #shopify-section-sections--22028666208419__marquee_dDYgVd .icon-container .icon-text {font-size: 13px;} #shopify-section-sections--22028666208419__marquee_dDYgVd .custom-icons {justify-content: space-around;} #shopify-section-sections--22028666208419__marquee_dDYgVd a {color: white;} </style></div><div id="shopify-section-sections--22028666208419__custom_header_dFXwEP" class="shopify-section shopify-section-group-header-group"> 1487 1488<div class="main-header"> 1489 <header class="custom-header container-fluid"> 1490 <div class="custom-header-container"> 1491 <!-- Logo --> 1492 <div class="logo"> 1493 <a href="https://bbetter.co"> 1494 <img src="//bbetter.co/cdn/shop/files/New_BBETTER_logo_1_medium.png?v=1754976611" alt="Logo"> 1495 </a> 1496 </div> 1497 1498 <!-- Navigation --> 1499 <nav class="custom-header-nav-menu d-none d-lg-block"> 1500 <ul> 1501 1502 <li class="custom-header-nav-item"> 1503 <span class="custom-header-nav-title">Combos</span> 1504 1505 1506 <div class="custom-header-dropdown"> 1507 <div class="custom-header-cards-viewall"> 1508 1509 <div class="custom-header-dropdown-grid row"> 1510 1511 <div class="header-card"> 1512 <div class="custom-header-dropdown-card h-100"> 1513 <a href="/products/ultimate-joint-muscle-relief-combo-ortho-urja-ortho-tejas-oil?collection=combos"> 1514 <div class="custom-header-card-image"> 1515 <img src="//bbetter.co/cdn/shop/files/1_4_medium.jpg?v=1776515246" alt="BBETTER Ultimate joint & Muscle Relief Combo - Ortho Urja & Ortho Tejas Oil"> 1516 </div> 1517 <div class="custom-header-card-content"> 1518 <h3 class="custom-header-product-title"> 1519 1520 <span>BBETTER</span> 1521 <div> 1522 Ultimate 1523 joint 1524 & 1525 Muscle 1526 Relief 1527 Combo 1528 - 1529 Ortho 1530 Urja 1531 & 1532 Ortho 1533 Tejas 1534 Oil 1535 1536 </div> 1537 </h3> 1538 <p class="custom-header-product-price"> 1539 <span>Rs. 2,148.00</span> 1540 1541 <span class="custom-header-compare-price">Rs. 2,593.00</span> 1542 1543 </p> 1544 </div> 1545 </a> 1546 </div> 1547 </div> 1548 1549 <div class="header-card"> 1550 <div class="custom-header-dropdown-card h-100"> 1551 <a href="/products/bbetter-ultimate-joint-pain-relief-combo-ortho-urja-vitamin-d3-copy?collection=combos"> 1552 <div class="custom-header-card-image"> 1553 <img src="//bbetter.co/cdn/shop/files/1_9_medium.jpg?v=1776861972" alt="BBETTER Ultimate Joint Care Combo - Ortho Urja & Joint Support"> 1554 </div> 1555 <div class="custom-header-card-content"> 1556 <h3 class="custom-header-product-title"> 1557 1558 <span>BBETTER</span> 1559 <div> 1560 Ultimate 1561 Joint 1562 Care 1563 Combo 1564 - 1565 Ortho 1566 Urja 1567 & 1568 Joint 1569 Support 1570 1571 </div> 1572 </h3> 1573 <p class="custom-header-product-price">
1574 <span>Rs. 2,098.00</span> 1575 1576 <span class="custom-header-compare-price">Rs. 2,660.00</span> 1577 1578 </p> 1579 </div> 1580 </a> 1581 </div> 1582 </div> 1583 1584 <div class="header-card"> 1585 <div class="custom-header-dropdown-card h-100"> 1586 <a href="/products/bbetter-ultimate-piles-relief-combo-pilo-urja-pachana-churna?collection=combos"> 1587 <div class="custom-header-card-image"> 1588 <img src="//bbetter.co/cdn/shop/files/1_1_medium.jpg?v=1776487318" alt="BBETTER Ultimate Piles Relief Combo - Pilo Urja & Pachana Churna"> 1589 </div> 1590 <div class="custom-header-card-content"> 1591 <h3 class="custom-header-product-title"> 1592 1593 <span>BBETTER</span> 1594 <div> 1595 Ultimate 1596 Piles 1597 Relief 1598 Combo 1599 - 1600 Pilo 1601 Urja 1602 & 1603 Pachana 1604 Churna 1605 1606 </div> 1607 </h3> 1608 <p class="custom-header-product-price"> 1609 <span>Rs. 2,098.00</span> 1610 1611 <span class="custom-header-compare-price">Rs. 2,442.00</span> 1612 1613 </p> 1614 </div> 1615 </a> 1616 </div> 1617 </div> 1618 1619 <div class="header-card"> 1620 <div class="custom-header-dropdown-card h-100"> 1621 <a href="/products/bbetter-ultimate-joint-pain-relief-combo?collection=combos"> 1622 <div class="custom-header-card-image"> 1623 <img src="//bbetter.co/cdn/shop/files/1_6_medium.jpg?v=1776516940" alt="BBETTER Ultimate Joint Pain Relief Combo - Ortho Urja & Vitamin D3"> 1624 </div> 1625 <div class="custom-header-card-content"> 1626 <h3 class="custom-header-product-title"> 1627 1628 <span>BBETTER</span> 1629 <div> 1630 Ultimate 1631 Joint 1632 Pain 1633 Relief 1634 Combo 1635 - 1636 Ortho 1637 Urja 1638 & 1639 Vitamin 1640 D3 1641 1642 </div> 1643 </h3> 1644 <p class="custom-header-product-price"> 1645 <span>Rs. 1,748.00</span> 1646 1647 <span class="custom-header-compare-price">Rs. 2,392.00</span> 1648 1649 </p> 1650 </div> 1651 </a> 1652 </div> 1653 </div> 1654 1655 </div> 1656 <div class="custom-header-view-all-container"> 1657 <a href="/collections/combos"> 1658 <button class="custom-header-view-all-btn">View All</button> 1659 </a> 1660 </div> 1661 1662 </div> 1663 </div> 1664 1665 </li> 1666 1667 <li class="custom-header-nav-item">
1668 <span class="custom-header-nav-title">Pain Management</span> 1669 1670 1671 <div class="custom-header-dropdown"> 1672 <div class="custom-header-cards-viewall"> 1673 1674 <div class="custom-header-dropdown-grid row"> 1675 1676 <div class="header-card"> 1677 <div class="custom-header-dropdown-card h-100"> 1678 <a href="/products/ultimate-joint-muscle-relief-combo-ortho-urja-ortho-tejas-oil?collection=pain-free-living"> 1679 <div class="custom-header-card-image"> 1680 <img src="//bbetter.co/cdn/shop/files/1_4_medium.jpg?v=1776515246" alt="BBETTER Ultimate joint & Muscle Relief Combo - Ortho Urja & Ortho Tejas Oil"> 1681 </div> 1682 <div class="custom-header-card-content"> 1683 <h3 class="custom-header-product-title"> 1684 1685 <span>BBETTER</span> 1686 <div> 1687 Ultimate 1688 joint 1689 & 1690 Muscle 1691 Relief 1692 Combo 1693 - 1694 Ortho 1695 Urja 1696 & 1697 Ortho 1698 Tejas 1699 Oil 1700 1701 </div> 1702 </h3> 1703 <p class="custom-header-product-price"> 1704 <span>Rs. 2,148.00</span> 1705 1706 <span class="custom-header-compare-price">Rs. 2,593.00</span> 1707 1708 </p> 1709 </div> 1710 </a> 1711 </div> 1712 </div> 1713 1714 <div class="header-card"> 1715 <div class="custom-header-dropdown-card h-100"> 1716 <a href="/products/bbetter-ultimate-joint-pain-relief-combo-ortho-urja-vitamin-d3-copy?collection=pain-free-living"> 1717 <div class="custom-header-card-image"> 1718 <img src="//bbetter.co/cdn/shop/files/1_9_medium.jpg?v=1776861972" alt="BBETTER Ultimate Joint Care Combo - Ortho Urja & Joint Support"> 1719 </div> 1720 <div class="custom-header-card-content"> 1721 <h3 class="custom-header-product-title"> 1722 1723 <span>BBETTER</span> 1724 <div> 1725 Ultimate 1726 Joint 1727 Care 1728 Combo 1729 - 1730 Ortho 1731 Urja 1732 & 1733 Joint 1734 Support 1735 1736 </div> 1737 </h3> 1738 <p class="custom-header-product-price"> 1739 <span>Rs. 2,098.00</span> 1740 1741 <span class="custom-header-compare-price">Rs. 2,660.00</span> 1742 1743 </p> 1744 </div> 1745 </a> 1746 </div> 1747 </div> 1748 1749 <div class="header-card"> 1750 <div class="custom-header-dropdown-card h-100"> 1751 <a href="/products/bbetter-ultimate-joint-pain-relief-combo?collection=pain-free-living"> 1752 <div class="custom-header-card-image"> 1753 <img src="//bbetter.co/cdn/shop/files/1_6_medium.jpg?v=1776516940" alt="BBETTER Ultimate Joint Pain Relief Combo - Ortho Urja & Vitamin D3"> 1754 </div> 1755 <div class="custom-header-card-content"> 1756 <h3 class="custom-header-product-title"> 1757
1758 <span>BBETTER</span> 1759 <div> 1760 Ultimate 1761 Joint 1762 Pain 1763 Relief 1764 Combo 1765 - 1766 Ortho 1767 Urja 1768 & 1769 Vitamin 1770 D3 1771 1772 </div> 1773 </h3> 1774 <p class="custom-header-product-price"> 1775 <span>Rs. 1,748.00</span> 1776 1777 <span class="custom-header-compare-price">Rs. 2,392.00</span> 1778 1779 </p> 1780 </div> 1781 </a> 1782 </div> 1783 </div> 1784 1785 <div class="header-card"> 1786 <div class="custom-header-dropdown-card h-100"> 1787 <a href="/products/bbetter-orthourja?collection=pain-free-living"> 1788 <div class="custom-header-card-image"> 1789 <img src="//bbetter.co/cdn/shop/files/Ortho_Urja_medium.jpg?v=1779961174" alt="BBETTER OrthoUrja - An Ayurvedic Supplement for Knee Pain & Joint Inflammation Relief"> 1790 </div> 1791 <div class="custom-header-card-content"> 1792 <h3 class="custom-header-product-title"> 1793 1794 <span>BBETTER</span> 1795 <div> 1796 OrthoUrja 1797 - 1798 An 1799 Ayurvedic 1800 Supplement 1801 for 1802 Knee 1803 Pain 1804 & 1805 Joint 1806 Inflammation 1807 Relief 1808 1809 </div> 1810 </h3> 1811 <p class="custom-header-product-price"> 1812 <span>Rs. 1,299.00</span> 1813 1814 <span class="custom-header-compare-price">Rs. 1,593.00</span> 1815 1816 </p> 1817 </div> 1818 </a> 1819 </div> 1820 </div> 1821 1822 </div> 1823 <div class="custom-header-view-all-container"> 1824 <a href="/collections/pain-free-living"> 1825 <button class="custom-header-view-all-btn">View All</button> 1826 </a> 1827 </div> 1828 1829 </div> 1830 </div> 1831 1832 </li> 1833 1834 <li class="custom-header-nav-item"> 1835 <span class="custom-header-nav-title">Men's Health</span> 1836 1837 1838 <div class="custom-header-dropdown"> 1839 <div class="custom-header-cards-viewall"> 1840 1841 <div class="custom-header-dropdown-grid row"> 1842 1843 <div class="header-card"> 1844 <div class="custom-header-dropdown-card h-100"> 1845 <a href="/products/ultimate-mens-performance-combo-purified-shilajit-testosterone-booster?collection=mens-health-1"> 1846 <div class="custom-header-card-image"> 1847 <img src="//bbetter.co/cdn/shop/files/1_11_medium.jpg?v=1777009429" alt="BBETTER Ultimate Men's Performance Combo - Purified Shilajit & Testosterone Booster"> 1848 </div> 1849 <div class="custom-header-card-content"> 1850 <h3 class="custom-header-product-title"> 1851
1852 <span>BBETTER</span> 1853 <div> 1854 Ultimate 1855 Men's 1856 Performance 1857 Combo 1858 - 1859 Purified 1860 Shilajit 1861 & 1862 Testosterone 1863 Booster 1864 1865 </div> 1866 </h3> 1867 <p class="custom-header-product-price"> 1868 <span>Rs. 2,298.00</span> 1869 1870 <span class="custom-header-compare-price">Rs. 3,098.00</span> 1871 1872 </p> 1873 </div> 1874 </a> 1875 </div> 1876 </div> 1877 1878 <div class="header-card"> 1879 <div class="custom-header-dropdown-card h-100"> 1880 <a href="/products/purified-shilajit?collection=mens-health-1"> 1881 <div class="custom-header-card-image"> 1882 <img src="//bbetter.co/cdn/shop/files/Shilajit_1_medium.jpg?v=1782284934" alt="BBETTER Purified Shilajit - With Clinically Proven PrimaVie Shilajit to Support Energy & Vitality"> 1883 </div> 1884 <div class="custom-header-card-content"> 1885 <h3 class="custom-header-product-title"> 1886 1887 <span>BBETTER</span> 1888 <div> 1889 Purified 1890 Shilajit 1891 - 1892 With 1893 Clinically 1894 Proven 1895 PrimaVie 1896 Shilajit 1897 to 1898 Support 1899 Energy 1900 & 1901 Vitality 1902 1903 </div> 1904 </h3> 1905 <p class="custom-header-product-price"> 1906 <span>Rs. 1,399.00</span> 1907 1908 <span class="custom-header-compare-price">Rs. 1,799.00</span> 1909 1910 </p> 1911 </div> 1912 </a> 1913 </div> 1914 </div> 1915 1916 <div class="header-card"> 1917 <div class="custom-header-dropdown-card h-100"> 1918 <a href="/products/testosterone-booster-for-men?collection=mens-health-1"> 1919 <div class="custom-header-card-image"> 1920 <img src="//bbetter.co/cdn/shop/files/Testosterone_Booster_1_medium.jpg?v=1782285676" alt="BBETTER Testosterone Booster - With Tribulus & Safed Musli for Performance & Stamina in Men"> 1921 </div> 1922 <div class="custom-header-card-content"> 1923 <h3 class="custom-header-product-title"> 1924 1925 <span>BBETTER</span> 1926 <div> 1927 Testosterone 1928 Booster 1929 - 1930 With 1931 Tribulus 1932 & 1933 Safed 1934 Musli 1935 for 1936 Performance 1937 & 1938 Stamina 1939 in 1940 Men 1941 1942 </div> 1943 </h3> 1944 <p class="custom-header-product-price">
1945 <span>Rs. 899.00</span> 1946 1947 <span class="custom-header-compare-price">Rs. 1,299.00</span> 1948 1949 </p> 1950 </div> 1951 </a> 1952 </div> 1953 </div> 1954 1955 <div class="header-card"> 1956 <div class="custom-header-dropdown-card h-100"> 1957 <a href="/products/ksm-66-ashwagandha?collection=mens-health-1"> 1958 <div class="custom-header-card-image"> 1959 <img src="//bbetter.co/cdn/shop/files/Ashwagandha_1_medium.jpg?v=1782284069" alt="BBETTER Ashwagandha - With Clinically Proven KSM-66 for Stress & Sleep Management"> 1960 </div> 1961 <div class="custom-header-card-content"> 1962 <h3 class="custom-header-product-title"> 1963 1964 <span>BBETTER</span> 1965 <div> 1966 Ashwagandha 1967 - 1968 With 1969 Clinically 1970 Proven 1971 KSM-66 1972 for 1973 Stress 1974 & 1975 Sleep 1976 Management 1977 1978 </div> 1979 </h3> 1980 <p class="custom-header-product-price"> 1981 <span>Rs. 1,099.00</span> 1982 1983 <span class="custom-header-compare-price">Rs. 2,099.00</span> 1984 1985 </p> 1986 </div> 1987 </a> 1988 </div> 1989 </div> 1990 1991 </div> 1992 <div class="custom-header-view-all-container"> 1993 <a href="/collections/mens-health-1"> 1994 <button class="custom-header-view-all-btn">View All</button> 1995 </a> 1996 </div> 1997 1998 </div> 1999 </div> 2000 2001 </li> 2002 2003 <li class="custom-header-nav-item"> 2004 <span class="custom-header-nav-title">Heart Health</span> 2005 2006 2007 <div class="custom-header-dropdown"> 2008 <div class="custom-header-cards-viewall"> 2009 2010 <div class="custom-header-dropdown-grid row"> 2011 2012 <div class="header-card"> 2013 <div class="custom-header-dropdown-card h-100"> 2014 <a href="/products/omega-3-fish-oil?collection=heart-health"> 2015 <div class="custom-header-card-image"> 2016 <img src="//bbetter.co/cdn/shop/files/Omega-3_Fish_Oil_1_medium.jpg?v=1782285378" alt="BBETTER Omega 3 Fish Oil Capsules - With 180 EPA : 120 DHA for Heart, Joints & Eyes"> 2017 </div> 2018 <div class="custom-header-card-content"> 2019 <h3 class="custom-header-product-title"> 2020 2021 <span>BBETTER</span> 2022 <div> 2023 Omega 2024 3 2025 Fish 2026 Oil 2027 Capsules 2028 - 2029 With 2030 180 2031 EPA 2032 : 2033 120 2034 DHA 2035 for 2036 Heart, 2037 Joints 2038 & 2039 Eyes 2040 2041 </div> 2042 </h3> 2043 <p class="custom-header-product-price">
2044 <span>Rs. 649.00</span> 2045 2046 <span class="custom-header-compare-price">Rs. 699.00</span> 2047 2048 </p> 2049 </div> 2050 </a> 2051 </div> 2052 </div> 2053 2054 <div class="header-card"> 2055 <div class="custom-header-dropdown-card h-100"> 2056 <a href="/products/ksm-66-ashwagandha?collection=heart-health"> 2057 <div class="custom-header-card-image"> 2058 <img src="//bbetter.co/cdn/shop/files/Ashwagandha_1_medium.jpg?v=1782284069" alt="BBETTER Ashwagandha - With Clinically Proven KSM-66 for Stress & Sleep Management"> 2059 </div> 2060 <div class="custom-header-card-content"> 2061 <h3 class="custom-header-product-title"> 2062 2063 <span>BBETTER</span> 2064 <div> 2065 Ashwagandha 2066 - 2067 With 2068 Clinically 2069 Proven 2070 KSM-66 2071 for 2072 Stress 2073 & 2074 Sleep 2075 Management 2076 2077 </div> 2078 </h3> 2079 <p class="custom-header-product-price"> 2080 <span>Rs. 1,099.00</span> 2081 2082 <span class="custom-header-compare-price">Rs. 2,099.00</span> 2083 2084 </p> 2085 </div> 2086 </a> 2087 </div> 2088 </div> 2089 2090 <div class="header-card"> 2091 <div class="custom-header-dropdown-card h-100"> 2092 <a href="/products/bbetter-mct-oil-supplement-1-month-course?collection=heart-health"> 2093 <div class="custom-header-card-image"> 2094 <img src="//bbetter.co/cdn/shop/files/BBETTER_MCT_Oil_IN_Pack_of_1_medium.jpg?v=1756784350" alt="BBETTER MCT Oil Softgels - With Capric Acid & Caprylic Acid to Boost Energy and Metabol
2094ism"> 2095 </div> 2096 <div class="custom-header-card-content"> 2097 <h3 class="custom-header-product-title"> 2098 2099 <span>BBETTER</span> 2100 <div> 2101 MCT 2102 Oil 2103 Softgels 2104 - 2105 With 2106 Capric 2107 Acid 2108 & 2109 Caprylic 2110 Acid 2111 to 2112 Boost 2113 Energy 2114 and 2115 Metabolism 2116 2117 </div> 2118 </h3> 2119 <p class="custom-header-product-price"> 2120 <span>Rs. 799.00</span> 2121 2122 <span class="custom-header-compare-price">Rs. 999.00</span> 2123 2124 </p> 2125 </div> 2126 </a> 2127 </div> 2128 </div> 2129 2130 <div class="header-card"> 2131 <div class="custom-header-dropdown-card h-100"> 2132 <a href="/products/flaxseed-oil?collection=heart-health"> 2133 <div class="custom-header-card-image"> 2134 <img src="//bbetter.co/cdn/shop/files/Flaxseed-Oil_medium.jpg?v=1782284220" alt="BBETTER Flaxseed Oil - Omega 3 6 9 Vegetarian Capsules to Support Healthy Heart & Joints"> 2135 </div> 2136 <div class="custom-header-card-content"> 2137 <h3 class="custom-header-product-title"> 2138 2139 <span>BBETTER</span> 2140 <div> 2141 Flaxseed 2142 Oil 2143 - 2144 Omega 2145 3 2146 6 2147 9 2148 Vegetarian 2149 Capsules 2150 to 2151 Support 2152 Healthy 2153 Heart 2154 & 2155 Joints 2156 2157 </div> 2158 </h3> 2159 <p class="custom-header-product-price"> 2160 <span>Rs. 599.00</span> 2161 2162 <span class="custom-header-compare-price">Rs. 1,299.00</span> 2163 2164 </p> 2165 </div> 2166 </a> 2167 </div> 2168 </div> 2169 2170 </div> 2171 <div class="custom-header-view-all-container"> 2172 <a href="/collections/heart-health"> 2173 <button class="custom-header-view-all-btn">View All</button> 2174 </a> 2175 </div> 2176 2177 </div> 2178 </div> 2179 2180 </li> 2181 2182 <li class="custom-header-nav-item">
2183 <span class="custom-header-nav-title">Diabetes Management</span> 2184 2185 2186 <div class="custom-header-dropdown"> 2187 <div class="custom-header-cards-viewall"> 2188 2189 <div class="custom-header-dropdown-grid row"> 2190 2191 <div class="header-card"> 2192 <div class="custom-header-dropdown-card h-100"> 2193 <a href="/products/bbetter-diabetic-care-1-month-supply?collection=diabetic-care"> 2194 <div class="custom-header-card-image"> 2195 <img src="//bbetter.co/cdn/shop/files/Diabetic_Care_medium.jpg?v=1779951132" alt="BBETTER Diabetic Care - With Nimba, Jamboo & Guduchi to Manage Diabetes"> 2196 </div> 2197 <div class="custom-header-card-content"> 2198 <h3 class="custom-header-product-title"> 2199 2200 <span>BBETTER</span> 2201 <div> 2202 Diabetic 2203 Care 2204 - 2205 With 2206 Nimba, 2207 Jamboo 2208 & 2209 Guduchi 2210 to 2211 Manage 2212 Diabetes 2213 2214 </div> 2215 </h3> 2216 <p class="custom-header-product-price"> 2217 <span>Rs. 799.00</span> 2218 2219 <span class="custom-header-compare-price">Rs. 1,199.00</span> 2220 2221 </p> 2222 </div> 2223 </a> 2224 </div> 2225 </div> 2226 2227 <div class="header-card"> 2228 <div class="custom-header-dropdown-card h-100"> 2229 <a href="/products/bbetter-diatejas-taila?collection=diabetic-care"> 2230 <div class="custom-header-card-image"> 2231 <img src="//bbetter.co/cdn/shop/files/DiaTejas_Taila_Product_medium.jpg?v=1779956470" alt="BBETTER DiaTejas Taila - Pain Relief Herbal Oil for Diabetic Neuropathy Management"> 2232 </div> 2233 <div class="custom-header-card-content"> 2234 <h3 class="custom-header-product-title"> 2235 2236 <span>BBETTER</span> 2237 <div> 2238 DiaTejas 2239 Taila 2240 - 2241 Pain 2242 Relief 2243 Herbal 2244 Oil 2245 for 2246 Diabetic 2247 Neuropathy 2248 Management 2249 2250 </div> 2251 </h3> 2252 <p class="custom-header-product-price"> 2253 <span>Rs. 949.00</span> 2254 2255 <span class="custom-header-compare-price">Rs. 1,000.00</span> 2256 2257 </p> 2258 </div> 2259 </a> 2260 </div> 2261 </div> 2262 2263 <div class="header-card"> 2264 <div class="custom-header-dropdown-card h-100"> 2265 <a href="/products/ksm-66-ashwagandha?collection=diabetic-care"> 2266 <div class="custom-header-card-image"> 2267 <img src="//bbetter.co/cdn/shop/files/Ashwagandha_1_medium.jpg?v=1782284069" alt="BBETTER Ashwagandha - With Clinically Proven KSM-66 for Stress & Sleep Management"> 2268 </div> 2269 <div class="custom-header-card-content"> 2270 <h3 class="custom-header-product-title"> 2271
2272 <span>BBETTER</span> 2273 <div> 2274 Ashwagandha 2275 - 2276 With 2277 Clinically 2278 Proven 2279 KSM-66 2280 for 2281 Stress 2282 & 2283 Sleep 2284 Management 2285 2286 </div> 2287 </h3> 2288 <p class="custom-header-product-price"> 2289 <span>Rs. 1,099.00</span> 2290 2291 <span class="custom-header-compare-price">Rs. 2,099.00</span> 2292 2293 </p> 2294 </div> 2295 </a> 2296 </div> 2297 </div> 2298 2299 <div class="header-card"> 2300 <div class="custom-header-dropdown-card h-100"> 2301 <a href="/products/diabetic-care?collection=diabetic-care"> 2302 <div class="custom-header-card-image"> 2303 <img src="//bbetter.co/cdn/shop/files/Diabetic_Care_New_Pack_of_3_e04d6464-5eec-42bd-8513-3980fe00fa22_medium.jpg?v=1782284596" alt="BBETTER Diabetic Care - With Nimba, Jamboo & Guduchi to Manage Diabetes"> 2304 </div> 2305 <div class="custom-header-card-content"> 2306 <h3 class="custom-header-product-title"> 2307 2308 <span>BBETTER</span> 2309 <div> 2310 Diabetic 2311 Care 2312 - 2313 With 2314 Nimba, 2315 Jamboo 2316 & 2317 Guduchi 2318 to 2319 Manage 2320 Diabetes 2321 2322 </div> 2323 </h3> 2324 <p class="custom-header-product-price"> 2325 <span>Rs. 1,799.00</span> 2326 2327 <span class="custom-header-compare-price">Rs. 3,597.00</span> 2328 2329 </p> 2330 </div> 2331 </a> 2332 </div> 2333 </div> 2334 2335 </div> 2336 <div class="custom-header-view-all-container"> 2337 <a href="/collections/diabetic-care"> 2338 <button class="custom-header-view-all-btn">View All</button> 2339 </a> 2340 </div> 2341 2342 </div> 2343 </div> 2344 2345 </li> 2346 2347 <li class="custom-header-nav-item"> 2348 <span class="custom-header-nav-title">Skin Health</span> 2349 2350 2351 <div class="custom-header-dropdown"> 2352 <div class="custom-header-cards-viewall"> 2353 2354 <div class="custom-header-dropdown-grid row"> 2355 2356 <div class="header-card"> 2357 <div class="custom-header-dropdown-card h-100"> 2358 <a href="/products/bbetter-psoriaurja-1-month-course?collection=get-glowing-skin"> 2359 <div class="custom-header-card-image"> 2360 <img src="//bbetter.co/cdn/shop/files/Psoria_Urja_medium.jpg?v=1779958182" alt="BBETTER PsoriaUrja - Ayurvedic Capsules for Psoriasis Relief & Skin Health Management"> 2361 </div> 2362 <div class="custom-header-card-content"> 2363 <h3 class="custom-header-product-title"> 2364
2365 <span>BBETTER</span> 2366 <div> 2367 PsoriaUrja 2368 - 2369 Ayurvedic 2370 Capsules 2371 for 2372 Psoriasis 2373 Relief 2374 & 2375 Skin 2376 Health 2377 Management 2378 2379 </div> 2380 </h3> 2381 <p class="custom-header-product-price"> 2382 <span>Rs. 1,299.00</span> 2383 2384 <span class="custom-header-compare-price">Rs. 1,405.00</span> 2385 2386 </p> 2387 </div> 2388 </a> 2389 </div> 2390 </div> 2391 2392 <div class="header-card"> 2393 <div class="custom-header-dropdown-card h-100"> 2394 <a href="/products/marine-collagen?collection=get-glowing-skin"> 2395 <div class="custom-header-card-image"> 2396 <img src="//bbetter.co/cdn/shop/files/Collagen_Marino_medium.jpg?v=1782285538" alt="BBETTER Collagen Marino - Hydrolyzed Marine Collagen for Healthy Skin, Hair, Nails & Joints"> 2397 </div> 2398 <div class="custom-header-card-content"> 2399 <h3 class="custom-header-product-title"> 2400 2401 <span>BBETTER</span> 2402 <div> 2403 Collagen 2404 Marino 2405 - 2406 Hydrolyzed 2407 Marine 2408 Collagen 2409 for 2410 Healthy 2411 Skin, 2412 Hair, 2413 Nails 2414 & 2415 Joints 2416 2417 </div> 2418 </h3> 2419 <p class="custom-header-product-price"> 2420 <span>Rs. 549.00</span> 2421 2422 <span class="custom-header-compare-price">Rs. 800.00</span> 2423 2424 </p> 2425 </div> 2426 </a> 2427 </div> 2428 </div> 2429 2430 <div class="header-card"> 2431 <div class="custom-header-dropdown-card h-100"> 2432 <a href="/products/bbetter-psoria-tejas-oil-for-psoriasis-management-made-by-age-old-ayurveda?collection=get-glowing-skin"> 2433 <div class="custom-header-card-image"> 2434 <img src="//bbetter.co/cdn/shop/files/PSOTIA-TEJAS_medium.jpg?v=1779957456" alt="BBETTER PsoriaTejas - Ayurvedic Oil for Psoriasis Relief & Skin Health Management"> 2435 </div> 2436 <div class="custom-header-card-content"> 2437 <h3 class="custom-header-product-title"> 2438 2439 <span>BBETTER</span> 2440 <div> 2441 PsoriaTejas 2442 - 2443 Ayurvedic 2444 Oil 2445 for 2446 Psoriasis 2447 Relief 2448 & 2449 Skin 2450 Health 2451 Management 2452 2453 </div> 2454 </h3> 2455 <p class="custom-header-product-price">
2456 <span>Rs. 849.00</span> 2457 2458 <span class="custom-header-compare-price">Rs. 1,000.00</span> 2459 2460 </p> 2461 </div> 2462 </a> 2463 </div> 2464 </div> 2465 2466 <div class="header-card"> 2467 <div class="custom-header-dropdown-card h-100"> 2468 <a href="/products/omega-3-fish-oil?collection=get-glowing-skin"> 2469 <div class="custom-header-card-image"> 2470 <img src="//bbetter.co/cdn/shop/files/Omega-3_Fish_Oil_1_medium.jpg?v=1782285378" alt="BBETTER Omega 3 Fish Oil Capsules - With 180 EPA : 120 DHA for Heart, Joints & Eyes"> 2471 </div> 2472 <div class="custom-header-card-content"> 2473 <h3 class="custom-header-product-title"> 2474 2475 <span>BBETTER</span> 2476 <div> 2477 Omega 2478 3 2479 Fish 2480 Oil 2481 Capsules 2482 - 2483 With 2484 180 2485 EPA 2486 : 2487 120 2488 DHA 2489 for 2490 Heart, 2491 Joints 2492 & 2493 Eyes 2494 2495 </div> 2496 </h3> 2497 <p class="custom-header-product-price"> 2498 <span>Rs. 649.00</span> 2499 2500 <span class="custom-header-compare-price">Rs. 699.00</span> 2501 2502 </p> 2503 </div> 2504 </a> 2505 </div> 2506 </div> 2507 2508 </div> 2509 <div class="custom-header-view-all-container"> 2510 <a href="/collections/get-glowing-skin"> 2511 <button class="custom-header-view-all-btn">View All</button> 2512 </a> 2513 </div> 2514 2515 </div> 2516 </div> 2517 2518 </li> 2519 2520 <li class="custom-header-nav-item"> 2521 <span class="custom-header-nav-title">Gut Health</span> 2522 2523 2524 <div class="custom-header-dropdown"> 2525 <div class="custom-header-cards-viewall"> 2526 2527 <div class="custom-header-dropdown-grid row"> 2528 2529 <div class="header-card"> 2530 <div class="custom-header-dropdown-card h-100"> 2531 <a href="/products/bbetter-pilourja?collection=gut-health-1"> 2532 <div class="custom-header-card-image"> 2533 <img src="//bbetter.co/cdn/shop/files/Pilo_Urja_a2e7fb64-a246-4e02-9114-4227958b491e_medium.jpg?v=1779961807" alt="BBETTER PiloUrja - Lab Tested Ayurvedic Capsules for Piles & Haemorrhoids relief"> 2534 </div> 2535 <div class="custom-header-card-content"> 2536 <h3 class="custom-header-product-title"> 2537
2538 <span>BBETTER</span> 2539 <div> 2540 PiloUrja 2541 - 2542 Lab 2543 Tested 2544 Ayurvedic 2545 Capsules 2546 for 2547 Piles 2548 & 2549 Haemorrhoids 2550 relief 2551 2552 </div> 2553 </h3> 2554 <p class="custom-header-product-price"> 2555 <span>Rs. 1,299.00</span> 2556 2557 <span class="custom-header-compare-price">Rs. 1,593.00</span> 2558 2559 </p> 2560 </div> 2561 </a> 2562 </div> 2563 </div> 2564 2565 <div class="header-card"> 2566 <div class="custom-header-dropdown-card h-100"> 2567 <a href="/products/bbetter-pachana-churna-ayurvedic-powder-for-healthy-digestion?collection=gut-health-1"> 2568 <div class="custom-header-card-image"> 2569 <img src="//bbetter.co/cdn/shop/files/Pachana_Churna_medium.jpg?v=1779956532" alt="BBETTER Pachana Churna - Herbal Powder for Healthy Digestion, Bloating & Gut Health"> 2570 </div> 2571 <div class="custom-header-card-content"> 2572 <h3 class="custom-header-product-title"> 2573 2574 <span>BBETTER</span> 2575 <div> 2576 Pachana 2577 Churna 2578 - 2579 Herbal 2580 Powder 2581 for 2582 Healthy 2583 Digestion, 2584 Bloating 2585 & 2586 Gut 2587 Health 2588 2589 </div> 2590 </h3> 2591 <p class="custom-header-product-price"> 2592 <span>Rs. 799.00</span> 2593 2594 <span class="custom-header-compare-price">Rs. 849.00</span> 2595 2596 </p> 2597 </div> 2598 </a> 2599 </div> 2600 </div> 2601 2602 <div class="header-card"> 2603 <div class="custom-header-dropdown-card h-100"> 2604 <a href="/products/triphala-500mg-60-vegetarian-tablets?collection=gut-health-1"> 2605 <div class="custom-header-card-image"> 2606 <img src="//bbetter.co/cdn/shop/files/Triphala_ad321bf8-50ab-4b3d-a36a-7f5bd10557ae_medium.jpg?v=1780648476" alt="BBETTER Triphala - Polyherb Laxative to Improve Gut Health & Support Bowel Wellness"> 2607 </div> 2608 <div class="custom-header-card-content"> 2609 <h3 class="custom-header-product-title"> 2610 2611 <span>BBETTER</span> 2612 <div> 2613 Triphala 2614 - 2615 Polyherb 2616 Laxative 2617 to 2618 Improve 2619 Gut 2620 Health 2621 & 2622 Support 2623 Bowel 2624 Wellness 2625 2626 </div> 2627 </h3> 2628 <p class="custom-header-product-price">
2629 <span>Rs. 449.00</span> 2630 2631 <span class="custom-header-compare-price">Rs. 1,099.00</span> 2632 2633 </p> 2634 </div> 2635 </a> 2636 </div> 2637 </div> 2638 2639 <div class="header-card"> 2640 <div class="custom-header-dropdown-card h-100"> 2641 <a href="/products/bbetter-pilourja-2-month-course?collection=gut-health-1"> 2642 <div class="custom-header-card-image"> 2643 <img src="//bbetter.co/cdn/shop/files/Pilo_Urja_New_Pack_of_2_21e40865-c2d6-4566-8463-d1bd176624f6_medium.jpg?v=1779961422" alt="BBETTER PiloUrja - Lab Tested Ayurvedic Capsules for Piles & Haemorrhoids relief"> 2644 </div> 2645 <div class="custom-header-card-content"> 2646 <h3 class="custom-header-product-title"> 2647 2648 <span>BBETTER</span> 2649 <div> 2650 PiloUrja 2651 - 2652 Lab 2653 Tested 2654 Ayurvedic 2655 Capsules 2656 for 2657 Piles 2658 & 2659 Haemorrhoids 2660 relief 2661 2662 </div> 2663 </h3> 2664 <p class="custom-header-product-price"> 2665 <span>Rs. 2,499.00</span> 2666 2667 <span class="custom-header-compare-price">Rs. 3,186.00</span> 2668 2669 </p> 2670 </div> 2671 </a> 2672 </div> 2673 </div> 2674 2675 </div> 2676 <div class="custom-header-view-all-container"> 2677 <a href="/collections/gut-health-1"> 2678 <button class="custom-header-view-all-btn">View All</button> 2679 </a> 2680 </div> 2681 2682 </div> 2683 </div> 2684 2685 </li> 2686 2687 <li class="custom-header-nav-item"> 2688 <span class="custom-header-nav-title">Weight Loss</span> 2689 2690 2691 <div class="custom-header-dropdown"> 2692 <div class="custom-header-cards-viewall"> 2693 2694 <div class="custom-header-dropdown-grid row"> 2695 2696 <div class="header-card"> 2697 <div class="custom-header-dropdown-card h-100"> 2698 <a href="/products/garcinia-cambogia-for-weight-loss-supplement?collection=lose-weight"> 2699 <div class="custom-header-card-image"> 2700 <img src="//bbetter.co/cdn/shop/files/Garcinia_Cambogia_2_medium.jpg?v=1782284710" alt="BBETTER Garcinia Cambogia - Ayurvedic Weight Loss Support With Green Coffee & Tea"> 2701 </div> 2702 <div class="custom-header-card-content"> 2703 <h3 class="custom-header-product-title"> 2704 2705 <span>BBETTER</span> 2706 <div> 2707 Garcinia 2708 Cambogia 2709 - 2710 Ayurvedic 2711 Weight 2712 Loss 2713 Support 2714 With 2715 Green 2716 Coffee 2717 & 2718 Tea 2719 2720 </div> 2721 </h3> 2722 <p class="custom-header-product-price">
2723 <span>Rs. 799.00</span> 2724 2725 <span class="custom-header-compare-price">Rs. 1,218.00</span> 2726 2727 </p> 2728 </div> 2729 </a> 2730 </div> 2731 </div> 2732 2733 <div class="header-card"> 2734 <div class="custom-header-dropdown-card h-100"> 2735 <a href="/products/omega-3-fish-oil?collection=lose-weight"> 2736 <div class="custom-header-card-image"> 2737 <img src="//bbetter.co/cdn/shop/files/Omega-3_Fish_Oil_1_medium.jpg?v=1782285378" alt="BBETTER Omega 3 Fish Oil Capsules - With 180 EPA : 120 DHA for Heart, Joints & Eyes"> 2738 </div> 2739 <div class="custom-header-card-content"> 2740 <h3 class="custom-header-product-title"> 2741 2742 <span>BBETTER</span> 2743 <div> 2744 Omega 2745 3 2746 Fish 2747 Oil 2748 Capsules 2749 - 2750 With 2751 180 2752 EPA 2753 : 2754 120 2755 DHA 2756 for 2757 Heart, 2758 Joints 2759 & 2760 Eyes 2761 2762 </div> 2763 </h3> 2764 <p class="custom-header-product-price"> 2765 <span>Rs. 649.00</span> 2766 2767 <span class="custom-header-compare-price">Rs. 699.00</span> 2768 2769 </p> 2770 </div> 2771 </a> 2772 </div> 2773 </div> 2774 2775 <div class="header-card"> 2776 <div class="custom-header-dropdown-card h-100"> 2777 <a href="/products/bbetter-mct-oil-supplement-1-month-course?collection=lose-weight"> 2778 <div class="custom-header-card-image"> 2779 <img src="//bbetter.co/cdn/shop/files/BBETTER_MCT_Oil_IN_Pack_of_1_medium.jpg?v=1756784350" alt="BBETTER MCT Oil Softgels - With Capric Acid & Caprylic Acid to Boost Energy and Metabol
2779ism"> 2780 </div> 2781 <div class="custom-header-card-content"> 2782 <h3 class="custom-header-product-title"> 2783 2784 <span>BBETTER</span> 2785 <div> 2786 MCT 2787 Oil 2788 Softgels 2789 - 2790 With 2791 Capric 2792 Acid 2793 & 2794 Caprylic 2795 Acid 2796 to 2797 Boost 2798 Energy 2799 and 2800 Metabolism 2801 2802 </div> 2803 </h3> 2804 <p class="custom-header-product-price"> 2805 <span>Rs. 799.00</span> 2806 2807 <span class="custom-header-compare-price">Rs. 999.00</span> 2808 2809 </p> 2810 </div> 2811 </a> 2812 </div> 2813 </div> 2814 2815 <div class="header-card"> 2816 <div class="custom-header-dropdown-card h-100"> 2817 <a href="/products/apple-cider-vinegar?collection=lose-weight"> 2818 <div class="custom-header-card-image"> 2819 <img src="//bbetter.co/cdn/shop/files/AppleCider_Vinegar_51614f54-3611-4dbe-9aa3-32a80fa1695d_medium.jpg?v=1780310576" alt="BBETTER Apple Cider Vinegar - Unfiltered & Raw, With the Mother, for Weight Loss & Wellness"> 2820 </div> 2821 <div class="custom-header-card-content"> 2822 <h3 class="custom-header-product-title"> 2823 2824 <span>BBETTER</span> 2825 <div> 2826 Apple 2827 Cider 2828 Vinegar 2829 - 2830 Unfiltered 2831 & 2832 Raw, 2833 With 2834 the 2835 Mother, 2836 for 2837 Weight 2838 Loss 2839 & 2840 Wellness 2841 2842 </div> 2843 </h3> 2844 <p class="custom-header-product-price"> 2845 <span>Rs. 249.00</span> 2846 2847 <span class="custom-header-compare-price">Rs. 462.71</span> 2848 2849 </p> 2850 </div> 2851 </a> 2852 </div> 2853 </div> 2854 2855 </div> 2856 <div class="custom-header-view-all-container"> 2857 <a href="/collections/lose-weight"> 2858 <button class="custom-header-view-all-btn">View All</button> 2859 </a> 2860 </div> 2861 2862 </div> 2863 </div> 2864 2865 </li> 2866 2867 <li class="custom-header-nav-item">
2868 <span class="custom-header-nav-title">Stress Management</span> 2869 2870 2871 <div class="custom-header-dropdown"> 2872 <div class="custom-header-cards-viewall"> 2873 2874 <div class="custom-header-dropdown-grid row"> 2875 2876 <div class="header-card"> 2877 <div class="custom-header-dropdown-card h-100"> 2878 <a href="/products/ksm-66-ashwagandha?collection=sleep-better-1"> 2879 <div class="custom-header-card-image"> 2880 <img src="//bbetter.co/cdn/shop/files/Ashwagandha_1_medium.jpg?v=1782284069" alt="BBETTER Ashwagandha - With Clinically Proven KSM-66 for Stress & Sleep Management"> 2881 </div> 2882 <div class="custom-header-card-content"> 2883 <h3 class="custom-header-product-title"> 2884 2885 <span>BBETTER</span> 2886 <div> 2887 Ashwagandha 2888 - 2889 With 2890 Clinically 2891 Proven 2892 KSM-66 2893 for 2894 Stress 2895 & 2896 Sleep 2897 Management 2898 2899 </div> 2900 </h3> 2901 <p class="custom-header-product-price"> 2902 <span>Rs. 1,099.00</span> 2903 2904 <span class="custom-header-compare-price">Rs. 2,099.00</span> 2905 2906 </p> 2907 </div> 2908 </a> 2909 </div> 2910 </div> 2911 2912 <div class="header-card"> 2913 <div class="custom-header-dropdown-card h-100"> 2914 <a href="/products/purified-shilajit?collection=sleep-better-1"> 2915 <div class="custom-header-card-image"> 2916 <img src="//bbetter.co/cdn/shop/files/Shilajit_1_medium.jpg?v=1782284934" alt="BBETTER Purified Shilajit - With Clinically Proven PrimaVie Shilajit to Support Energy & Vitality"> 2917 </div> 2918 <div class="custom-header-card-content"> 2919 <h3 class="custom-header-product-title"> 2920 2921 <span>BBETTER</span> 2922 <div> 2923 Purified 2924 Shilajit 2925 - 2926 With 2927 Clinically 2928 Proven 2929 PrimaVie 2930 Shilajit 2931 to 2932 Support 2933 Energy 2934 & 2935 Vitality 2936 2937 </div> 2938 </h3> 2939 <p class="custom-header-product-price"> 2940 <span>Rs. 1,399.00</span> 2941 2942 <span class="custom-header-compare-price">Rs. 1,799.00</span> 2943 2944 </p> 2945 </div> 2946 </a> 2947 </div> 2948 </div> 2949 2950 <div class="header-card"> 2951 <div class="custom-header-dropdown-card h-100"> 2952 <a href="/products/omega-3-fish-oil?collection=sleep-better-1"> 2953 <div class="custom-header-card-image"> 2954 <img src="//bbetter.co/cdn/shop/files/Omega-3_Fish_Oil_1_medium.jpg?v=1782285378" alt="BBETTER Omega 3 Fish Oil Capsules - With 180 EPA : 120 DHA for Heart, Joints & Eyes"> 2955 </div> 2956 <div class="custom-header-card-content"> 2957 <h3 class="custom-header-product-title"> 2958
2959 <span>BBETTER</span> 2960 <div> 2961 Omega 2962 3 2963 Fish 2964 Oil 2965 Capsules 2966 - 2967 With 2968 180 2969 EPA 2970 : 2971 120 2972 DHA 2973 for 2974 Heart, 2975 Joints 2976 & 2977 Eyes 2978 2979 </div> 2980 </h3> 2981 <p class="custom-header-product-price"> 2982 <span>Rs. 649.00</span> 2983 2984 <span class="custom-header-compare-price">Rs. 699.00</span> 2985 2986 </p> 2987 </div> 2988 </a> 2989 </div> 2990 </div> 2991 2992 <div class="header-card"> 2993 <div class="custom-header-dropdown-card h-100"> 2994 <a href="/products/flaxseed-oil?collection=sleep-better-1"> 2995 <div class="custom-header-card-image"> 2996 <img src="//bbetter.co/cdn/shop/files/Flaxseed-Oil_medium.jpg?v=1782284220" alt="BBETTER Flaxseed Oil - Omega 3 6 9 Vegetarian Capsules to Support Healthy Heart & Joints"> 2997 </div> 2998 <div class="custom-header-card-content"> 2999 <h3 class="custom-header-product-title"> 3000 3001 <span>BBETTER</span> 3002 <div> 3003 Flaxseed 3004 Oil 3005 - 3006 Omega 3007 3 3008 6 3009 9 3010 Vegetarian 3011 Capsules 3012 to 3013 Support 3014 Healthy 3015 Heart 3016 & 3017 Joints 3018 3019 </div> 3020 </h3> 3021 <p class="custom-header-product-price"> 3022 <span>Rs. 599.00</span> 3023 3024 <span class="custom-header-compare-price">Rs. 1,299.00</span> 3025 3026 </p> 3027 </div> 3028 </a> 3029 </div> 3030 </div> 3031 3032 </div> 3033 <div class="custom-header-view-all-container"> 3034 <a href="/collections/sleep-better-1"> 3035 <button class="custom-header-view-all-btn">View All</button> 3036 </a> 3037 </div> 3038 3039 </div> 3040 </div> 3041 3042 </li> 3043 3044 </ul> 3045 </nav> 3046 3047 <!-- Search and Profile Icons --> 3048 <div class="custom-header-icons"> 3049 <div class="d-lg-none d-block"> 3050 <a 3051 href="#" 3052 class="btn btn-search p-0 search-icon-mobile" 3053 data-bs-toggle="modal" 3054 data-bs-target="#searchModal" 3055 > 3056 <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> 3057 <g opacity="0.8"> 3058 <rect width="48" height="48" rx="12" fill="white" fill-opacity="0.8"/> 3059 <g clip-path="url(#clip0_1228_10919)"> 3060 <g clip-path="url(#clip1_1228_10919)"> 3061 <path d="M23.3333 28.6667C26.2789 28.6667 28.6667 26.2789 28.6667 23.3333C28.6667 20.3878 26.2789 18 23.3333 18C20.3878 18 18 20.3878 18 23.3333C18 26.2789 20.3878 28.6667 23.3333 28.6667Z" stroke="#555052" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3062 <path d="M30 30L27.1 27.1" stroke="#555052" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3063 </g> 3064 </g> 3065 </g> 3066 <defs> 3067 <clipPath id="clip0_1228_10919"> 3068 <rect width="16" height="16" fill="white" transform="translate(16 16)"/> 3069 </clipPath> 3070 <clipPath id="clip1_1228_10919"> 3071 <rect width="16" height="16" fill="white" transform="translate(16 16)"/> 3072 </clipPath> 3073 </defs> 3074 </svg> 3075 </a> 3076 </div> 3077 3078 <div class="custom-header-search-container d-lg-block d-none"> 3079 <a href="#" class="custom-header-icon search-icon"> 3080 <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> 3081 <g opacity="0.8"> 3082 <rect width="48" height="48" rx="12" fill="white" fill-opacity="0.8"/> 3083 <g clip-path="url(#clip0_1228_10919)"> 3084 <g clip-path="url(#clip1_1228_10919)"> 3085 <path d="M23.3333 28.6667C26.2789 28.6667 28.6667 26.2789 28.6667 23.3333C28.6667 20.3878 26.2789 18 23.3333 18C20.3878 18 18 20.3878 18 23.3333C18 26.2789 20.3878 28.6667 23.3333 28.6667Z" stroke="#555052" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3086 <path d="M30 30L27.1 27.1" stroke="#555052" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3087 </g> 3088 </g> 3089 </g> 3090 <defs> 3091 <clipPath id="clip0_1228_10919"> 3092 <rect width="16" height="16" fill="white" transform="translate(16 16)"/> 3093 </clipPath> 3094 <clipPath id="clip1_1228_10919"> 3095 <rect width="16" height="16" fill="white" transform="translate(16 16)"/> 3096 </clipPath> 3097 </defs> 3098 </svg> 3099 </a> 3100 3101 <div id="search-bar" class="search-bar"> 3102 <input type="text" class="search-input" id="search-input" placeholder="Search..." autocomplete="off">
3103 <span class="clear-icon" id="clear-icon"> 3104 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 3105 <g clip-path="url(#clip0_2112_11139)"> 3106 <path d="M12 4L4 12" stroke="#555052" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3107 <path d="M4 4L12 12" stroke="#555052" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3108 </g> 3109 <defs> 3110 <clipPath id="clip0_2112_11139"> 3111 <rect width="16" height="16" fill="white"/> 3112 </clipPath> 3113 </defs> 3114 </svg> 3115 </span> 3116 <div id="search-results" class="search-results"></div> 3117 </div> 3118 </div> 3119 <a 3120 href="/account/login" 3121 class="custom-header-icon profile-icon" 3122 id="profileIcon" 3123 data-logged-in="false" 3124 > 3125 <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> 3126 <g opacity="0.8"> 3127 <rect width="48" height="48" rx="12" fill="white" fill-opacity="0.8"/> 3128 <g clip-path="url(#clip0_1228_10926)"> 3129 <path d="M29.0667 30V28.6667C29.0667 27.9594 28.7857 27.2811 28.2856 26.781C27.7855 26.281 27.1072 26 26.4 26H21.7333C21.0261 26 20.3478 26.281 19.8477 26.781C19.3476 27.2811 19.0667 27.9594 19.0667 28.6667V30" stroke="#555052" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3130 <path d="M24.0667 23.3333C25.5394 23.3333 26.7334 22.1394 26.7334 20.6667C26.7334 19.1939 25.5394 18 24.0667 18C22.5939 18 21.4 19.1939 21.4 20.6667C21.4 22.1394 22.5939 23.3333 24.0667 23.3333Z" stroke="#555052" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3131 </g> 3132 </g> 3133 <defs> 3134 <clipPath id="clip0_1228_10926"> 3135 <rect width="16" height="16" fill="white" transform="translate(16 16)"/> 3136 </clipPath> 3137 </defs> 3138 </svg> 3139 </a> 3140 3141 3142 3143 <a href="/cart" class="header__icon header__icon--cart link focus-inset" id="cart-icon-bubble"> 3144 <span class="svg-wrapper"> 3145 <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> 3146 <rect width="48" height="48" rx="12" fill="#71645d"/> 3147 <g clip-path="url(#clip0_1644_59520)"> 3148 <g clip-path="url(#clip1_1644_59520)"> 3149 <path d="M22.0002 30.6663C22.3684 30.6663 22.6668 30.3679 22.6668 29.9997C22.6668 29.6315 22.3684 29.333 22.0002 29.333C21.632 29.333 21.3335 29.6315 21.3335 29.9997C21.3335 30.3679 21.632 30.6663 22.0002 30.6663Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3150 <path d="M29.3332 30.6663C29.7014 30.6663 29.9998 30.3679 29.9998 29.9997C29.9998 29.6315 29.7014 29.333 29.3332 29.333C28.965 29.333 28.6665 29.6315 28.6665 29.9997C28.6665 30.3679 28.965 30.6663 29.3332 30.6663Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3151 <path d="M16.6665 16.667H19.3332L21.1198 25.5937C21.1808 25.9006 21.3478 26.1763 21.5915 26.3725C21.8353 26.5687 22.1403 26.673 22.4532 26.667H28.9332C29.246 26.673 29.551 26.5687 29.7948 26.3725C30.0386 26.1763 30.2055 25.9006 30.2665 25.5937L31.3332 20.0003H19.9998" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3152 </g> 3153 </g> 3154 <defs> 3155 <clipPath id="clip0_1644_59520"> 3156 <rect width="16" height="16" fill="white" transform="translate(16 16)"/> 3157 </clipPath> 3158 <clipPath id="clip1_1644_59520"> 3159 <rect width="16" height="16" fill="white" transform="translate(16 16)"/> 3160 </clipPath> 3161 </defs> 3162 </svg> 3163 </span> 3164 <span class="visually-hidden">Cart</span> 3165 3166 <div 3167 class="cart-count-bubble" 3168 id="cart-count-bubble" 3169 style="display: none;" 3170 > 3171 <span id="cart-count" aria-hidden="true">0</span> 3172 <span class="visually-hidden">0 items</span> 3173 </div> 3174 </a> 3175 3176 <!-- 3177 <a href="/cart" id="cart-icon" class="custom-header-icon"> 3178 <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> 3179 <rect width="48" height="48" rx="12" fill="#71645d"/> 3180 <g clip-path="url(#clip0_1644_59520)"> 3181 <g clip-path="url(#clip1_1644_59520)"> 3182 <path d="M22.0002 30.6663C22.3684 30.6663 22.6668 30.3679 22.6668 29.9997C22.6668 29.6315 22.3684 29.333 22.0002 29.333C21.632 29.333 21.3335 29.6315 21.3335 29.9997C21.3335 30.3679 21.632 30.6663 22.0002 30.6663Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3183 <path d="M29.3332 30.6663C29.7014 30.6663 29.9998 30.3679 29.9998 29.9997C29.9998 29.6315 29.7014 29.333 29.3332 29.333C28.965 29.333 28.6665 29.6315 28.6665 29.9997C28.6665 30.3679 28.965 30.6663 29.3332 30.6663Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3184 <path d="M16.6665 16.667H19.3332L21.1198 25.5937C21.1808 25.9006 21.3478 26.1763 21.5915 26.3725C21.8353 26.5687 22.1403 26.673 22.4532 26.667H28.9332C29.246 26.673 29.551 26.5687 29.7948 26.3725C30.0386 26.1763 30.2055 25.9006 30.2665 25.5937L31.3332 20.0003H19.9998" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3185 </g> 3186 </g> 3187 <defs> 3188 <clipPath id="clip0_1644_59520"> 3189 <rect width="16" height="16" fill="white" transform="translate(16 16)"/> 3190 </clipPath> 3191 <clipPath id="clip1_1644_59520"> 3192 <rect width="16" height="16" fill="white" transform="translate(16 16)"/> 3193 </clipPath> 3194 </defs> 3195 </svg> 3196 <a id="cart-icon-bubble"> 3197 <span id="cart-count" class="cart-count">0</span> 3198 </a> 3199 </a> 3200 --> 3201 </div> 3202 </div> 3203 </header> 3204</div> 3205 3206<!-- Search Modal --> 3207<div class="modal fade" id="searchModal" tabindex="-1" aria-labelledby="searchModalLabel" aria-hidden="true"> 3208 <div class="modal-dialog "> 3209 <div class="modal-content border-0 shadow-lg"> 3210 <div class="modal-header border-0"> 3211 <h5 class="modal-title fw-bold display-6" id="searchModalLabel">Search</h5> 3212 <button 3213 type="button" 3214 class="btn-close clear-icon-mobile" 3215 id="clear-icon-mobile" 3216 data-bs-dismiss="modal" 3217 aria-label="Close" 3218 ></button> 3219 </div> 3220 <div class="modal-body"> 3221 <input 3222 type="text" 3223 class="search-input-mobile form-control" 3224 id="search-input-mobile" 3225 placeholder="Search..." 3226 autocomplete="off" 3227 style="height:40px; font-size:16px" 3228 > 3229 <div 3230 id="search-results-mobile" 3231 class="search-results-mobile" 3232 style="" 3233 ></div> 3234 </div> 3235 </div> 3236 </div> 3237</div> 3238<style> 3239 3240 .main-header{ 3241 3242 background: #5b4438; 3243 } 3244 .custom-header { 3245 width: 100%; 3246 position: relative; 3247 top: 0; 3248 left: 0; 3249 z-index: 1100; /* Ensures it stays above other elements */ 3250 background: #EEEAE8; /* Transparent background */ 3251 padding-top: 2rem; 3252 display: flex; 3253 justify-content: space-between; 3254 transition: background 0.3s ease-in-out, padding 0.3s ease-in-out; 3255 border-top-left-radius: 24px; 3256 border-top-right-radius: 24px; 3257 box-shadow: 0px -16px 16px 0px rgba(148, 108, 86, 0.24); 3258 } 3259 3260 .custom-header.scrolled { 3261 padding-top: 1rem; 3262 padding-bottom: 1rem; 3263 background: rgba(255, 255, 255, 0.3); /* Slightly darker background on scroll */ 3264 backdrop-filter: saturate(180%) blur(20px); 3265 position: fixed; 3266 border-top-left-radius: 0px; 3267 border-top-right-radius: 0px; 3268 } 3269 .custom-header.active { 3270 /* padding: 1rem 4rem; */ 3271 background: #EEEAE8; 3272 } 3273 3274 .custom-header-container { 3275 width: 100%; 3276 display: flex; 3277 align-items: center; 3278 justify-content: space-between; 3279 } 3280 3281 .logo img { 3282 max-height: 52px; 3283 padding: 10px; 3284 3285 } 3286 3287 .custom-header-nav-menu { 3288 flex-grow: 1; 3289 display: flex; 3290 justify-content: center; 3291 flex-wrap: wrap; /* Ensures nav items move to a second row if needed */ 3292 align-items: flex-end; /* Push nav items down */ 3293 height: 100%; /* Ensure it takes full height */ 3294 } 3295 .custom-header-nav-menu { 3296 flex-grow: 1; 3297 display: flex; 3298 justify-content: center; 3299 align-items: flex-end; /* Push nav items down */ 3300 height: 100%; /* Ensure it takes full height */ 3301 } 3302 3303 .custom-header-nav-menu ul { 3304 list-style: none; 3305 display: flex; 3306 flex-wrap: nowrap; /* Prevent wrapping to next line */ 3307 overflow-x: auto; /* Enable horizontal scrolling */ 3308 -webkit-overflow-scrolling: touch; 3309 gap: px; 3310 margin: 0; 3311 margin-right:10px; 3312 padding: 10px 5px ; 3313 justify-content: center; 3314 /* align-items: flex-end; */ 3315 } 3316 3317 .custom-header-nav-menu li { 3318 flex: 0 0 auto; /* Make each item fit its content */ 3319 } 3320 3321 /* Optional: hide scrollbar for a cleaner look */ 3322 .custom-header-nav-menu ul::-webkit-scrollbar {
3323 display: none; 3324 } 3325 3326 .custom-header-nav-menu .custom-header-nav-title { 3327 text-decoration: none; 3328 color: #43322C; 3329 font-family: 'Inter', sans-serif; 3330 font-weight: 500; 3331 font-size: 14px; 3332 line-height: 18px; 3333 letter-spacing: 0; 3334 align-items: center; /* Ensures vertical middle alignment */ 3335 padding: 10px 15px 20px 15px; 3336 text-transform: capitalize; 3337 cursor: pointer 3338 } 3339 ul li { 3340 padding: 0px; 3341 } 3342 3343 /* Dropdown Base */ 3344 .custom-header-dropdown { 3345 display: none; 3346 position: absolute; 3347 left: 0; 3348 top: 100%; 3349 background: #EEEAE8; 3350 width: 99vw; 3351 padding: 20px 10%; 3352 border-radius: 0 0 24px 24px; 3353 flex-direction: column; 3354 align-items: center; 3355 box-shadow: 0 8px 16px -4px rgba(148, 108, 86, 0.16) !important 3356 3357 } 3358 3359 .custom-header-nav-item { 3360 position: static; 3361 } 3362 .custom-header-nav-item:hover{ 3363 border-bottom: 2px solid #43322C; 3364 } 3365 3366 .custom-header-nav-item:hover .custom-header-nav-title{ 3367 font-weight: 500; 3368 } 3369 3370 /* Show Dropdown on Hover */ 3371 /* .custom-header-nav-item:hover .custom-header-dropdown { 3372 display: flex !important; 3373 } */ 3374 3375 /* Product Grid Layout */ 3376 .custom-header-dropdown-grid { 3377 display: flex; 3378 /* gap: 20px; */ 3379 justify-content: center; 3380 flex-wrap: wrap; 3381 } 3382 3383 /* Product Card */ 3384 .custom-header-dropdown-card { 3385 position: relative; 3386 background: #F7F7F7; 3387 border-radius: 8px; 3388 padding: 12px 20px; 3389 text-align: center; 3390 transition: transform 0.2s ease-in-out; 3391 display: flex; 3392 flex-direction: column; 3393 align-items: center; 3394 } 3395 3396 .header-card{ 3397 display: flex; 3398 width: 15%; 3399 } 3400 @media only screen and (max-width: 2000px){ 3401 .header-card{ 3402 width: 250px; 3403 } 3404 } 3405 @media only screen and (max-width: 1500px){ 3406 .header-card{ 3407 width: 22%; 3408 } 3409 } 3410 3411 @media only screen and (max-width: 1250px){ 3412 .header-card{ 3413 width: 25%; 3414 } 3415 } 3416 3417 .cart-count-bubble{ 3418 height: 15px; 3419 width: 15px; 3420 bottom: 28px; 3421 left: 2.5rem; 3422 } 3423 3424 /* Card Image */ 3425 .custom-header-card-image { 3426 width: 100%; 3427 max-height: 200px; 3428 display: flex; 3429 justify-content: center; 3430 align-items: center; 3431 } 3432 3433 .custom-header-card-image img { 3434 width: 100%; /* Ensure full width */ 3435 max-height: 180px; /* Increase max height */ 3436 object-fit: contain; /* Keep image aspect ratio */ 3437 border-radius: 8px; 3438 } 3439 /* Card Content */ 3440 .custom-header-card-content { 3441 margin-top: 10px; 3442 text-align: center; /* Center align content */ 3443 width: 100%; 3444 } 3445 3446 .custom-header-product-title { 3447 font-family: 'Inter', sans-serif; 3448 font-size: 16px; 3449 font-weight: 600; 3450 color: #555052; 3451 margin: 0; 3452 text-align: left; 3453 display: -webkit-box; 3454 -webkit-line-clamp: 3; 3455 -webkit-box-orient: vertical; 3456 overflow: hidden; 3457 text-overflow: ellipsis; 3458 min-height: 4.2em; 3459 max-height: 5.6em; /* 4 lines x 1.4em line-height */ 3460 line-height: 1.4em; 3461 } 3462 3463 /* Pricing */ 3464 .custom-header-product-price { 3465 font-family: 'Inter', sans-serif; 3466 font-size: 12px; 3467 color: #068941; 3468 font-weight: 600; 3469 text-align: left; 3470 } 3471 3472 p { 3473 margin: 0; 3474 } 3475 3476 .custom-header-compare-price { 3477 text-decoration: line-through; 3478 color: #999; 3479 } 3480 .custom-header-cards-viewall{ 3481 text-align: left; 3482 } 3483 3484 /* View All Button */ 3485 .custom-header-view-all-container { 3486 margin-top: 15px; 3487 } 3488 3489 .custom-header-view-all-container a { 3490 display: flex; 3491 justify-content: center; 3492 } 3493 3494 .custom-header-view-all-btn { 3495 padding: 7px 40px; 3496 background: #FFFFFFB8; 3497 color: #555052; 3498 font-family: 'Inter', sans-serif; 3499 font-size: 16px; 3500 font-weight: 600; 3501 text-decoration: none; 3502 border-radius: 12px; 3503 border: 1px solid #BFAA9B66; 3504 } 3505 3506 .custom-header-view-all-btn:hover { 3507 border: 1px solid transparent; 3508 } 3509 3510 3511 .custom-header-icons { 3512 display: flex; 3513 gap: 8px; 3514 margin-left: auto; /* Pushes icons to the right */ 3515 padding-right: 10px; 3516 } 3517 3518 .custom-header-icon { 3519 text-decoration: none; 3520 font-size: 20px; 3521 color: #333; 3522 } 3523 body.no-scroll { 3524 overflow: hidden; 3525 } 3526 3527 .custom-header-no-products { 3528 text-align: center; 3529 font-family: 'Inter', sans-serif; 3530 font-size: 14px; 3531 color: #555052; 3532 padding: 10px 0; 3533 } 3534 3535 .custom-header-search-container{ 3536 position: relative; 3537 3538 } 3539 .search-bar { 3540 display: none; 3541 position: absolute; 3542 top: 0; 3543 right: 0; 3544 background: #ffffff; 3545 border-radius: 12px; 3546 padding: 10px; 3547 width: 400px; 3548 } 3549 3550 .search-input{ 3551 border: none; 3552 background: none; 3553 font-weight: 500; 3554 font-size: 14px; 3555 color: #555052; 3556 width: 100%; 3557 } 3558 .search-input:focus-visible, 3559 .search-input:active { 3560 border: none !important; 3561 background: none !important; 3562 outline: none !important; 3563 box-shadow: none !important; 3564 } 3565 3566 .search-input::placeholder { 3567 color: #5550527A; 3568 font-size: 14px; 3569 font-weight: 500; 3570 } 3571 .search-results { 3572 margin-top: 10px; 3573 position: absolute; 3574 top: 100%; 3575 left: 0; 3576 background: #FFFFFF; 3577 width: 100%; 3578 max-height: 300px; 3579 overflow-y: auto; 3580 border-radius: 12px; 3581 display: none; 3582 padding: 10px; 3583 } 3584 3585 .search-results ul { 3586 list-style: none; 3587 margin: 0; 3588 padding: 0; 3589 } 3590 3591 .results-list { 3592 list-style-type: none; 3593 padding: 0; 3594 } 3595 3596 .section-title { 3597 font-size: 1.2em; 3598 padding: 10px; 3599 border-bottom: 1px solid #eee; 3600 } 3601 3602 .collection-item, .product-item { 3603 display: flex; 3604 justify-content: space-between; 3605 align-items: center; 3606 padding: 15px 10px; 3607 border-bottom: 1px dashed #BFAA9B; 3608 3609 } 3610 3611 .collection-link, .product-link { 3612 display: flex; 3613 justify-content: space-between; 3614 align-items: center; 3615 width: 100%; 3616 text-decoration: none; 3617 color: inherit; 3618 } 3619 3620 .collection-info, .product-info { 3621 display: flex; 3622 flex-direction: column; 3623 } 3624 3625 .collection-title, .product-title { 3626 font-weight: 500; 3627 font-size: 16px; 3628 color: #555052; 3629 } 3630 a#cart-icon { 3631 display: inline-block !important; 3632 position: relative; 3633 font-size: 24px; 3634 text-decoration: none; 3635 } 3636 .drawer__inner{ 3637 width:600px; 3638 } 3639 .cart-drawer .cart-item>td+td{ 3640 padding-left: 0px 3641 } 3642 .drawer__heading{ 3643 color: #43322C; 3644 font-size: 30px; 3645 font-weight: 500; 3646 } 3647 .cart-item { 3648 background: white; 3649 padding: 10px; 3650 border-radius: 8px; 3651 display: flex; 3652 justify-content: space-between; 3653 align-items: center; 3654 margin-bottom: 8px !important; 3655 } 3656 .cart-item__name{ 3657 color: #43322C; 3658 font-weight: 600; 3659 font-size: 14px 3660 } 3661 .product-option{ 3662 color: #43322C; 3663 font-weight:500; 3664 font-size: 12px 3665 } 3666 .cart-item__totals .cart-item__price-wrapper .price{ 3667 color: #43322C; 3668 font-weight: 600; 3669 font-size: 14px 3670 } 3671 .drawer__inner{ 3672 max-width: calc(100vw - 0rem); 3673 } 3674 .drawer__footer .button{ 3675 background-color:#43322C; 3676 border-color:#43322C; 3677 border:1px solid #43322C; 3678 --buttons-border-opacity:unset; 3679 --border-opacity:unset; 3680 } 3681 .drawer__footer .button:hover{ 3682 border:1px solid #43322C; 3683 } 3684 .caption-with-letter-spacing{ 3685 font-size: 20px; 3686 color: #44332d; 3687 } 3688 .totals__total{ 3689 color: #554540; 3690 } 3691 .totals__total-value{ 3692 color: #43322C; 3693 font-weight: 500; 3694 } 3695 .tax-note{ 3696 color:#615c58; 3697 } 3698 .tax-note a{ 3699 color:#615c58; 3700 } 3701 .quantity{ 3702 width: calc(12rem / var(--font-body-scale) + var(--inputs-border-width) * 2); 3703 min-height: calc((var(--inputs-border-width) * 2) + 3.5rem) 3704 } 3705 .cart-drawer .gradient{ 3706 background-color:#efeae5; 3707 } 3708 .cart-count { 3709 position: absolute; 3710 top: 27px; 3711 right: 30px; 3712 background: #463e3d; 3713 color: white; 3714 font-size: 8px; 3715 font-weight: bold; 3716 border-radius: 50%; 3717 width: 15px; 3718 height: 15px; 3719 display: none; 3720 align-items: center; 3721 justify-content: center; 3722 transform: translateY(0); /* Initial transform */ 3723 transition: transform 0.3s ease-in-out; /* Smooth transition for transform */ 3724 } 3725 .cart__ctas{ 3726 width: fit-content; 3727 } 3728 3729 3730 .custom-header.scrolled .cart-count { 3731 /* top: 16px; */ 3732 transform: translateY(-11px); /* Moves the element up by 11px */ 3733 } 3734 .product-price { 3735 font-weight: 400; 3736 font-size: 14px; 3737 color: #068941; 3738 } 3739 .product-count { 3740 font-weight: 400; 3741 font-size: 12px; 3742 color: #5550527A; 3743 } 3744 3745 .collection-image, .product-image { 3746 width: 60px; 3747 height: 60px; 3748 object-fit: cover; 3749 margin-left: 10px; 3750 padding: 5px; 3751 background: #EEEAE8; 3752 border-radius: 8px; 3753 } 3754 3755 .clear-icon { 3756 position: absolute; 3757 right: 10px; 3758 top: 50%; 3759 transform: translateY(-50%); 3760 cursor: pointer; 3761 display: block; 3762 } 3763 3764 #searchModal .modal-dialog{ 3765 top: 11rem 3766 } 3767 3768 @media screen and (max-width: 480px){ 3769 .custom-header{ 3770 z-index: 1 3771 } 3772 .custom-header.scrolled{ 3773 padding: 1rem 0rem 3774 } 3775 .search-bar{ 3776 width: 240px; 3777 } 3778 .logo img{ 3779 padding: 10px 5px ; 3780 max-height: 45px; 3781 } 3782 .cart-item__name{ 3783 font-size: 14px 3784 } 3785 .drawer__inner{ 3786 padding: 0 0.5rem; 3787 } 3788 .product-option{ 3789 font-size: 14px 3790 } 3791 .quantity__button{ 3792 width: calc(3rem / var(--font-body-scale)); 3793 } 3794 .quantity__input{ 3795 font-size: 14px 3796 } 3797 .quantity { 3798 width: calc(9rem / var(--font-body-scale) + var(--inputs-border-width) * 2); 3799 min-height: calc((var(--inputs-border-width) * 2) + 3rem); 3800} 3801.caption-with-letter-spacing{ 3802font-size: 16px;
3803font-weight: 600 !important; 3804} 3805.cart__ctas{ 3806width: 100%; 3807} 3808.cart-drawer .cart-items td{ 3809 padding-top: 0px 3810} 3811.cart-drawer .cart-item{ 3812gap:0.5rem; 3813} 3814cart-remove-button .button{ 3815min-height: 2.5rem 3816} 3817.totals__total-value{ 3818font-size: 18px 3819} 3820 } 3821 @media only screen and (max-width: 435px){ 3822 .custom-header-container { 3823 width: 96%; 3824 } 3825 } 3826 @media only screen and (max-width: 380px){ 3827 .custom-header-container{ 3828 width:97%; 3829 } 3830 } 3831 .profile-dropdown { 3832 position: absolute; 3833 top: 100%; 3834 right: 1%; 3835 background: #FFFFFFCC; 3836 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); 3837 border-radius: 8px; 3838 display: none; 3839 z-index: 1000; 3840 width: 160px; 3841 margin-top: 5px; 3842 box-sizing: border-box; 3843 overflow: hidden; 3844 } 3845 .profile-dropdown svg { 3846 width: 20px; 3847 height: 20px; 3848 color: #555052; 3849 margin-right: 2px; 3850 } 3851 .profile-dropdown ul { 3852 list-style: none; 3853 margin: 0; 3854 padding: 0; 3855 } 3856 3857 .profile-dropdown li { 3858 margin-bottom: 0.5rem; 3859 padding: 5px; 3860 } 3861 3862 .profile-dropdown li:last-child { 3863 margin-bottom: 0; 3864 } 3865 3866 .profile-dropdown a { 3867 text-decoration: none; 3868 color: #555052; 3869 padding: 5px; 3870 } 3871 3872 .profile-dropdown li:hover { 3873 background : #d1ccce; 3874 } 3875 3876 .profile-dropdown.show { 3877 display: block; 3878 } 3879 #search-results-mobile{ 3880 height:70vh; 3881 overflow: scroll 3882 } 3883 /* div:empty{ 3884 display: block; 3885 } */ 3886</style> 3887
3888<script> 3889 document.addEventListener("DOMContentLoaded", function () { 3890 const navMenu = document.querySelector(".custom-header-nav-menu ul"); 3891 3892 function updateJustify() { 3893 if (!navMenu) return; 3894 // Check if the total scroll width exceeds the visible width 3895 if (navMenu.scrollWidth > navMenu.clientWidth) { 3896 navMenu.style.justifyContent = "flex-start"; // remove center, enable scrolling 3897 } else { 3898 navMenu.style.justifyContent = "center"; // keep center if no overflow 3899 } 3900 } 3901 3902 // Run on load 3903 updateJustify(); 3904 3905 // Run on window resize to handle responsiveness 3906 window.addEventListener("resize", updateJustify); 3907}); 3908 3909document.addEventListener("scroll", function () { 3910 const modalDialog = document.querySelector("#searchModal .modal-dialog"); 3911 if (!modalDialog) return; 3912 3913 if (window.scrollY > 50) { // adjust threshold as needed 3914 modalDialog.style.top = "6rem"; 3915 } else { 3916 modalDialog.style.top = "11rem"; 3917 } 3918}); 3919// ...existing code... 3920document.addEventListener("DOMContentLoaded", function () { 3921 const profileIcon = document.getElementById("profileIcon"); 3922 const dropdown = document.getElementById("profileDropdown"); 3923 const logoutLink = document.getElementById("logoutLink"); 3924 3925 if (profileIcon && dropdown) { 3926 profileIcon.addEventListener("click", function (e) { 3927 const isLoggedIn = profileIcon.getAttribute("data-logged-in") === "true"; 3928 3929 if (!isLoggedIn) { 3930 // Let the default link to /account/login happen 3931 return; 3932 } 3933 3934 e.preventDefault(); // Prevent jump to href 3935 dropdown.classList.toggle("show"); 3936 }); 3937 3938 // Hide dropdown when any link inside it is clicked 3939 dropdown.querySelectorAll("a").forEach(link => { 3940 link.addEventListener("click", function () { 3941 dropdown.classList.remove("show"); 3942 }); 3943 }); 3944 } 3945 3946 if (logoutLink) { 3947 logoutLink.addEventListener("click", function (e) { 3948 e.preventDefault(); 3949 // Redirect to logout URL 3950 window.location.href = "/account/logout"; 3951 }); 3952 } 3953 3954 // Close dropdown if clicking outside 3955 document.addEventListener("click", function (e) { 3956 if (!profileIcon.contains(e.target) && !dropdown.contains(e.target)) { 3957 dropdown.classList.remove("show"); 3958 } 3959 }); 3960}); 3961// ...existing code... 3962 3963document.addEventListener("DOMContentLoaded", function() { 3964 const header = document.querySelector(".custom-header"); 3965 3966 window.addEventListener("scroll", function() { 3967 if (window.scrollY > 50) { 3968 header.classList.add("scrolled"); 3969 } else { 3970 header.classList.remove("scrolled"); 3971 } 3972 }); 3973}); 3974 document.addEventListener("DOMContentLoaded", function() { 3975 const navItems = document.querySelectorAll(".custom-header-nav-item"); 3976 navItems.forEach(item => { 3977 const dropdown = item.querySelector(".custom-header-dropdown"); 3978 if (!dropdown) return; 3979 3980 item.addEventListener("mouseenter", function() { 3981 dropdown.style.display = "block"; 3982 }); 3983 item.addEventListener("mouseleave", function() { 3984 dropdown.style.display = "none"; 3985 }); 3986 }); 3987 3988 // Hide all dropdowns on page load (prevents stuck open) 3989 document.querySelectorAll(".custom-header-dropdown").forEach(drop => { 3990 drop.style.display = "none"; 3991 }); 3992}); 3993 3994 document.addEventListener("DOMContentLoaded", function() { 3995 const header = document.querySelector(".custom-header"); 3996 const searchIcon = document.querySelector(".search-icon"); 3997 const searchBar = document.getElementById("search-bar"); 3998 const searchInput = document.getElementById("search-input"); 3999 const clearIcon = document.getElementById("clear-icon"); 4000 4001 // Handle scrolling effect on the header 4002 window.addEventListener("scroll", function() { 4003 if (window.scrollY > 50) { 4004 header.classList.add("scrolled"); 4005 } else { 4006 header.classList.remove("scrolled"); 4007 } 4008 }); 4009 4010 // Toggle search bar visibility when clicking the search icon 4011 searchIcon.addEventListener("click", function(event) { 4012 event.preventDefault(); 4013 // clearIcon.style.display = "block"; 4014 if (searchBar.style.display === "block") { 4015 searchBar.style.display = "none"; 4016 } else { 4017 searchBar.style.display = "block"; 4018 searchInput.value = ""; 4019 } 4020 }); 4021 4022 // Close the search bar when clicking outside of it 4023 document.addEventListener("click", function(event) { 4024 if (!searchBar.contains(event.target) && !searchIcon.contains(event.target)) { 4025 searchBar.style.display = "none"; 4026 } 4027 }); 4028}); 4029document.addEventListener("DOMContentLoaded", function () { 4030 const searchInput = document.getElementById("search-input"); 4031 const searchResults = document.getElementById("search-results"); 4032 const clearIcon = document.getElementById("clear-icon"); 4033 const searchBar = document.getElementById("search-bar"); 4034 let collections = [];
4035 let collectionIndex = 0; 4036 4037 async function fetchCollections() { 4038 try { 4039 const response = await fetch('/collections.json'); 4040 const data = await response.json(); 4041 collections = data.collections.map(collection => collection.title); 4042 4043 if (collections.length > 0) { 4044 updatePlaceholder(); 4045 setInterval(updatePlaceholder, 5000); 4046 } 4047 } catch (error) { 4048 console.error("Error fetching collections:", error); 4049 searchInput.placeholder = "Search products..."; 4050 } 4051 } 4052 4053 function updatePlaceholder() { 4054 if (collections.length > 0) { 4055 searchInput.placeholder = `Search for '${collections[collectionIndex]}'`; 4056 collectionIndex = (collectionIndex + 1) % collections.length; 4057 } 4058 } 4059 4060 function debounce(func, delay) { 4061 let timer; 4062 return function (...args) { 4063 clearTimeout(timer); 4064 timer = setTimeout(() => func(...args), delay); 4065 }; 4066 } 4067 4068 async function fetchSearchResults(query) { 4069 if (query.length < 2) { 4070 searchResults.innerHTML = ""; 4071 searchResults.style.display = "none"; 4072 return; 4073 } 4074 4075 try { 4076 const response = await fetch( 4077 `/search/suggest.json?q=${query}&resources[type]=product,collection`, 4078 { 4079 headers: { 4080 "Content-Type": "application/json", 4081 }, 4082 } 4083 ); 4084 const data = await response.json(); 4085 // Fetch full product data for each product 4086 const products = data.resources.results.products || []; 4087 const productPromises = products.map(async (product) => { 4088 // Extract handle from product.url 4089 const urlParts = product.url.split('/'); 4090 const handle = urlParts[urlParts.length - 1].split('?')[0]; 4091 try { 4092 const prodRes = await fetch(`/products/${handle}.json`); 4093 const prodData = await prodRes.json(); 4094 // Attach variants to product object 4095 product.variants = prodData.product.variants || []; 4096 } catch (err) { 4097 product.variants = []; 4098 } 4099 return product; 4100 }); 4101 // Wait for all product data to be fetched 4102 const productsWithVariants = await Promise.all(productPromises); 4103 // Replace products in results with enriched data 4104 data.resources.results.products = productsWithVariants; 4105 displayResults(data.resources.results); 4106 } catch (error) { 4107 console.error("Error fetching search results:", error); 4108 } 4109 } 4110 4111 4112 function displayResults(results) { 4113 const products = results.products || []; 4114 const collections = results.collections || []; 4115 4116 if (products.length === 0 && collections.length === 0) { 4117 searchResults.innerHTML = "<p>No results found</p>"; 4118 searchResults.style.display = "block"; 4119 return; 4120 } 4121 4122 let html = "<ul class='results-list'>"; 4123 4124 // Display Collections 4125 if (collections.length > 0) { 4126 html += "<li class='section-title'>Collections</li>"; 4127 4128 // Fetch product counts for collections 4129 const collectionPromises = collections.map(async (collection) => { 4130 try { 4131 // Use collection.handle instead of collection.id 4132 const response = await fetch(`/collections/${collection.handle}.json`); 4133 if (!response.ok) throw new Error("Collection not found"); 4134 4135 const data = await response.json(); 4136 const productCount = data.collection.products_count || 0; // Get product count 4137 4138 return ` 4139 <li class='collection-item'> 4140 <a href="${collection.url}" class='collection-link'> 4141 <div class='collection-info'> 4142 <span class='collection-title'>${collection.title}</span> 4143 <span class='product-count'>${productCount} products</span> 4144 </div> 4145 <img src="${collection.featured_image.url}" alt="${collection.title}" class='collection-image'> 4146 </a> 4147 </li>`; 4148 } catch (error) { 4149 console.error("Error fetching collection product count:", error); 4150 return ""; // Return an empty string to avoid breaking the UI 4151 } 4152}); 4153 4154 4155 // Wait for all product counts to be fetched 4156 Promise.all(collectionPromises).then((collectionItems) => { 4157 html += collectionItems.join(""); // Append collection items 4158 html += renderProducts(products); // Render products 4159 searchResults.innerHTML = html; 4160 searchResults.style.display = "block"; 4161 }); 4162 4163 return; // Stop further execution to wait for collections to load 4164 } 4165 4166 html += renderProducts(products); 4167 searchResults.innerHTML = html; 4168 searchResults.style.display = "block"; 4169} 4170 4171function renderProducts(products) { 4172 let html = ""; 4173 if (products.length > 0) { 4174 html += "<li class='section-title'>Products</li>";
4175 products.forEach((product) => { 4176 console.log('Product object:', product); 4177 if (Array.isArray(product.variants) && product.variants.length > 0) { 4178 console.log('Variant prices for', product.title, ':', product.variants.map(v => v.price)); 4179 } 4180 let priceText = ''; 4181 if (Array.isArray(product.variants) && product.variants.length > 0) { 4182 priceText = `₹${product.variants[0].price}`; 4183 } else { 4184 priceText = `₹${product.price}`; 4185 } 4186 html += ` 4187 <li class='product-item'> 4188 <a href="${product.url}" class='product-link'> 4189 <div class='product-info'> 4190 <span class='product-title'>${product.title}</span> 4191 <p class='product-price'>${priceText}</p> 4192 </div> 4193 <img src="${product.featured_image.url}" alt="${product.title}" class='product-image'> 4194 </a> 4195 </li>`; 4196 }); 4197 } 4198 return html; 4199} 4200 4201 4202 searchInput.addEventListener("input", debounce((e) => { 4203 fetchSearchResults(e.target.value); 4204 }, 300)); 4205 4206 4207 // Clear input when clicking the clear icon 4208 clearIcon.addEventListener("click", function () { 4209 searchInput.value = ""; 4210 searchResults.style.display = "none"; 4211 searchBar.style.display = "none"; 4212 }); 4213 4214 document.addEventListener("click", function (event) { 4215 if (!searchInput.contains(event.target) && !searchResults.contains(event.target)) { 4216 searchResults.style.display = "none"; 4217 } 4218 }); 4219 4220 fetchCollections(); 4221}); 4222</script>
vendor: 1 bytes, line 4222
4222
4223<script> 4224document.addEventListener("DOMContentLoaded", function() { 4225 const header = document.querySelector(".custom-header"); 4226 const searchIcon = document.querySelector(".search-icon-mobile"); 4227 const searchBar = document.getElementById("search-bar-mobile"); 4228 const searchInput = document.getElementById("search-input-mobile"); 4229 const clearIcon = document.getElementById("clear-icon-mobile"); 4230 4231 // Handle scrolling effect on the header 4232 window.addEventListener("scroll", function() { 4233 if (window.scrollY > 50) { 4234 header.classList.add("scrolled"); 4235 } else { 4236 header.classList.remove("scrolled"); 4237 } 4238 }); 4239 4240 // Toggle search bar visibility when clicking the search icon 4241 searchIcon.addEventListener("click", function(event) { 4242 event.preventDefault(); 4243 // clearIcon.style.display = "block"; 4244 if (searchBar.style.display === "block") { 4245 searchBar.style.display = "none"; 4246 } else { 4247 searchBar.style.display = "block"; 4248 searchInput.value = ""; 4249 } 4250 }); 4251 4252 // Close the search bar when clicking outside of it 4253 document.addEventListener("click", function(event) { 4254 if (!searchBar.contains(event.target) && !searchIcon.contains(event.target)) { 4255 searchBar.style.display = "none"; 4256 } 4257 }); 4258 }); 4259 document.addEventListener("DOMContentLoaded", function () { 4260 const searchInput = document.getElementById("search-input-mobile"); 4261 const searchResults = document.getElementById("search-results-mobile"); 4262 const clearIcon = document.getElementById("clear-icon-mobile"); 4263 const searchBar = document.getElementById("search-bar-mobile"); 4264 let collections = []; 4265 let collectionIndex = 0; 4266 4267 async function fetchCollections() { 4268 try { 4269 const response = await fetch('/collections.json'); 4270 const data = await response.json(); 4271 collections = data.collections.map(collection => collection.title); 4272 4273 if (collections.length > 0) { 4274 updatePlaceholder(); 4275 setInterval(updatePlaceholder, 5000); 4276 } 4277 } catch (error) { 4278 console.error("Error fetching collections:", error); 4279 searchInput.placeholder = "Search products..."; 4280 } 4281 } 4282 4283 function updatePlaceholder() { 4284 if (collections.length > 0) { 4285 searchInput.placeholder = `Search for '${collections[collectionIndex]}'`; 4286 collectionIndex = (collectionIndex + 1) % collections.length; 4287 } 4288 } 4289 4290 function debounce(func, delay) { 4291 let timer; 4292 return function (...args) { 4293 clearTimeout(timer); 4294 timer = setTimeout(() => func(...args), delay); 4295 }; 4296 } 4297 4298 async function fetchSearchResults(query) { 4299 if (query.length < 2) { 4300 searchResults.innerHTML = ""; 4301 searchResults.style.display = "none"; 4302 return; 4303 } 4304 4305 try { 4306 const response = await fetch( 4307 `/search/suggest.json?q=${query}&resources[type]=product,collection`, 4308 { 4309 headers: { 4310 "Content-Type": "application/json", 4311 }, 4312 } 4313 ); 4314 const data = await response.json(); 4315 // Fetch full product data for each product 4316 const products = data.resources.results.products || []; 4317 const productPromises = products.map(async (product) => { 4318 // Extract handle from product.url 4319 const urlParts = product.url.split('/'); 4320 const handle = urlParts[urlParts.length - 1].split('?')[0]; 4321 try { 4322 const prodRes = await fetch(`/products/${handle}.json`); 4323 const prodData = await prodRes.json(); 4324 // Attach variants to product object 4325 product.variants = prodData.product.variants || []; 4326 } catch (err) { 4327 product.variants = []; 4328 } 4329 return product; 4330 }); 4331 // Wait for all product data to be fetched 4332 const productsWithVariants = await Promise.all(productPromises); 4333 // Replace products in results with enriched data 4334 data.resources.results.products = productsWithVariants; 4335 4336 displayResults(data.resources.results); 4337 } catch (error) { 4338 console.error("Error fetching search results:", error); 4339 } 4340 } 4341 4342
4343 function displayResults(results) { 4344 const products = results.products || []; 4345 const collections = results.collections || []; 4346 4347 if (products.length === 0 && collections.length === 0) { 4348 searchResults.innerHTML = "<p>No results found</p>"; 4349 searchResults.style.display = "block"; 4350 return; 4351 } 4352 4353 let html = "<ul class='results-list'>"; 4354 4355 // Display Collections 4356 if (collections.length > 0) { 4357 html += "<li class='section-title'>Collections</li>"; 4358 4359 // Fetch product counts for collections 4360 const collectionPromises = collections.map(async (collection) => { 4361 try { 4362 // Use collection.handle instead of collection.id 4363 const response = await fetch(`/collections/${collection.handle}.json`); 4364 if (!response.ok) throw new Error("Collection not found"); 4365 4366 const data = await response.json(); 4367 const productCount = data.collection.products_count || 0; // Get product count 4368 4369 return ` 4370 <li class='collection-item'> 4371 <a href="${collection.url}" class='collection-link'> 4372 <div class='collection-info'> 4373 <span class='collection-title'>${collection.title}</span> 4374 <span class='product-count'>${productCount} products</span> 4375 </div> 4376 <img src="${collection.featured_image.url}" alt="${collection.title}" class='collection-image'> 4377 </a> 4378 </li>`; 4379 } catch (error) { 4380 console.error("Error fetching collection product count:", error); 4381 return ""; // Return an empty string to avoid breaking the UI 4382 } 4383 }); 4384 4385 4386 // Wait for all product counts to be fetched 4387 Promise.all(collectionPromises).then((collectionItems) => { 4388 html += collectionItems.join(""); // Append collection items 4389 html += renderProducts(products); // Render products 4390 searchResults.innerHTML = html; 4391 searchResults.style.display = "block"; 4392 }); 4393 4394 return; // Stop further execution to wait for collections to load 4395 } 4396 4397 html += renderProducts(products); 4398 searchResults.innerHTML = html; 4399 searchResults.style.display = "block"; 4400 } 4401 4402function renderProducts(products) { 4403 let html = ""; 4404 if (products.length > 0) { 4405 html += "<li class='section-title'>Products</li>"; 4406 products.forEach((product) => { 4407 console.log('Product object:', product); 4408 if (Array.isArray(product.variants) && product.variants.length > 0) { 4409 console.log('Variant prices for', product.title, ':', product.variants.map(v => v.price)); 4410 } 4411 let priceText = ''; 4412 if (Array.isArray(product.variants) && product.variants.length > 0) { 4413 priceText = `₹${product.variants[0].price}`; 4414 } else { 4415 priceText = `₹${product.price}`; 4416 } 4417 html += ` 4418 <li class='product-item'> 4419 <a href="${product.url}" class='product-link'> 4420 <div class='product-info'> 4421 <span class='product-title'>${product.title}</span> 4422 <p class='product-price'>${priceText}</p> 4423 </div> 4424 <img src="${product.featured_image.url}" alt="${product.title}" class='product-image'> 4425 </a> 4426 </li>`; 4427 }); 4428 } 4429 return html; 4430} 4431 4432 4433 searchInput.addEventListener("input", debounce((e) => { 4434 fetchSearchResults(e.target.value); 4435 }, 300)); 4436 4437 4438 // Clear input when clicking the clear icon 4439 clearIcon.addEventListener("click", function () { 4440 searchInput.value = ""; 4441 searchResults.style.display = "none"; 4442 searchBar.style.display = "none"; 4443 }); 4444 4445 document.addEventListener("click", function (event) { 4446 if (!searchInput.contains(event.target) && !searchResults.contains(event.target)) { 4447 searchResults.style.display = "none"; 4448 } 4449 }); 4450 4451 fetchCollections(); 4452 }); 4453</script>
4453 4454<!-- 4455
4455<script> 4456 function updateCartIcon() { 4457 fetch('/cart.js') 4458 .then(response => response.json()) 4459 .then(cart => { 4460 const cartIcon = document.getElementById('cart-icon-bubble'); 4461 const cartCount = document.getElementById('cart-count'); 4462 4463 if (cart.item_count > 0) { 4464 cartIcon.style.display = "inline-block"; // Show cart icon 4465 cartCount.style.display = "flex"; // Show item count 4466 cartCount.innerText = cart.item_count; // Update count 4467 } else { 4468 cartIcon.style.display = "none"; // Hide cart icon if empty 4469 cartCount.style.display = "none"; // Hide count 4470 } 4471 }) 4472 .catch(error => console.error("Error fetching cart data:", error)); 4473 } 4474 4475 document.addEventListener("DOMContentLoaded", updateCartIcon); 4476 4477 // Re-check the cart count whenever an item is added 4478 document.addEventListener("click", function (event) { 4479 if (event.target.matches('[data-add-to-cart]')) { 4480 setTimeout(updateCartIcon, 1000); // Wait a moment before updating 4481 } 4482 }); 4483 </script>
4483 4484--> 4485
4486<script> 4487 function updateCartIcon() { 4488 fetch('/cart.js') 4489 .then(response => response.json()) 4490 .then(cart => { 4491 const cartCount = document.getElementById('cart-count'); 4492 const countBubble = document.getElementById('cart-count-bubble'); 4493 const cartIcon = document.getElementById('cart-icon-bubble'); 4494 4495 if (!cartIcon || !cartCount || !countBubble) return; 4496 4497 // Always ensure icon is visible 4498 cartIcon.style.display = 'inline-block'; 4499 4500 if (cart.item_count > 0) { 4501 countBubble.style.display = 'flex'; 4502 cartCount.innerText = cart.item_count; 4503 } else { 4504 countBubble.style.display = 'none'; 4505 cartCount.innerText = '0'; 4506 } 4507 }) 4508 .catch(error => console.error("Error fetching cart data:", error)); 4509 } 4510 4511 // Initial load 4512 document.addEventListener("DOMContentLoaded", updateCartIcon); 4513 4514 // Listen for cart-related clicks 4515 document.addEventListener("click", function (event) { 4516 const target = event.target; 4517 4518 if ( 4519 target.closest('[data-add-to-cart]') || 4520 target.closest('.quantity-selector button') || 4521 target.closest('[data-remove-from-cart]') || 4522 target.classList.contains('increase-cart') || 4523 target.classList.contains('decrease-cart') 4524 ) { 4525 setTimeout(updateCartIcon, 300); 4526 } 4527 }); 4528 4529 // Optional: update after modal/offcanvas close 4530 document.addEventListener('hidden.bs.offcanvas', () => { 4531 setTimeout(updateCartIcon, 200); 4532 }); 4533</script>
4533 4534</div> 4535<!-- END sections: header-group --> 4536 4537 <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1"> 4538 <div id="shopify-section-template--22028669419683__cart-items" class="shopify-section"><link href="//bbetter.co/cdn/shop/t/43/assets/component-cart.css?v=164708765130180853531788778311" rel="stylesheet" type="text/css" media="all" /> 4539<link href="//bbetter.co/cdn/shop/t/43/assets/component-cart-items.css?v=76691967796475813161788778311" rel="stylesheet" type="text/css" media="all" /> 4540<link href="//bbetter.co/cdn/shop/t/43/assets/component-totals.css?v=15906652033866631521788778311" rel="stylesheet" type="text/css" media="all" /> 4541<link href="//bbetter.co/cdn/shop/t/43/assets/component-price.css?v=70172745017360139101788778311" rel="stylesheet" type="text/css" media="all" /> 4542<link href="//bbetter.co/cdn/shop/t/43/assets/component-discounts.css?v=152760482443307489271788778311" rel="stylesheet" type="text/css" media="all" /> 4543<link href="//bbetter.co/cdn/shop/t/43/assets/quantity-popover.css?v=160630540099520878331788778311" rel="stylesheet" type="text/css" media="all" /> 4544<style data-shopify>.section-template--22028669419683__cart-items-padding { 4545 padding-top: 27px; 4546 padding-bottom: 27px; 4547 } 4548 .custom-header{ 4549 background-color:#EEEAE8; 4550 } 4551 .gradient{ 4552 background-color:#EEEAE8; 4553 } 4554 .title--primary{ 4555 color: #43322C; 4556 font-size: 30px; 4557 font-weight: 500; 4558 } 4559 .underlined-link{ 4560 color:#44332d; 4561 } 4562 @media screen and (min-width: 750px) { 4563 .section-template--22028669419683__cart-items-padding { 4564 padding-top: 36px; 4565 padding-bottom: 36px; 4566 } 4567 }</style>
4567<script src="//bbetter.co/cdn/shop/t/43/assets/quantity-popover.js?v=987015268078116491788778311" defer="defer"></script>
4567 4568 4569<cart-items class="gradient color-scheme-1 isolate is-empty"> 4570 <div class="container"> 4571 <div class="row"> 4572 <div class="col-12"> 4573 <div class="card border-0" style="border-radius:16px; box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.1);"> 4574 <div class="card-body p-5"> 4575 <div class="title-wrapper-with-link"> 4576 <h1 class="title title--primary">My cart</h1> 4577 <a href="/collections/all" class="underlined-link">Continue shopping</a> 4578 </div> 4579 4580 <div class="cart__warnings"> 4581 <h1 class="cart__empty-text">Your cart is empty</h1> 4582 <a href="/collections/all" class="button"> 4583 Continue shopping 4584 </a><h2 class="cart__login-title">Have an account?</h2> 4585 <p class="cart__login-paragraph"> 4586 <a href="/account/login" class="link underlined-link">Log in</a> to check out faster. 4587 </p></div> 4588 4589 <form action="/cart" class="cart__contents critical-hidden" method="post" id="cart"> 4590 <div class="cart__items" id="main-cart-items" data-id="template--22028669419683__cart-items"> 4591 <div class="js-contents"></div> 4592 </div> 4593 4594 <p class="visually-hidden" id="cart-live-region-text" aria-live="polite" role="status"></p> 4595 <p 4596 class="visually-hidden" 4597 id="shopping-cart-line-item-status" 4598 aria-live="polite" 4599 aria-hidden="true" 4600 role="status" 4601 > 4602 Loading... 4603 </p> 4604 </form> 4605 </div> 4606 </div> 4607 </div> 4608 </div> 4609 </div> 4610</cart-items> 4611 4612 4613 4614
4615<script> 4616 document.addEventListener('click', function (event) { 4617 const target = event.target; 4618 4619 // If quantity is updated 4620 if (target.closest('[data-quantity-update]')) { 4621 // Wait a bit for Shopify JS to finish updating the cart 4622 setTimeout(updateCartIcon, 500); 4623 } 4624 4625 // If product is removed 4626 if (target.closest('[data-remove-from-cart]')) { 4627 // Wait slightly longer in case of page updates via fetch 4628 setTimeout(updateCartIcon, 800); 4629 } 4630 }); 4631 4632 const cartContainer = document.querySelector('cart-items') || document.querySelector('#main-cart-items') || document.querySelector('#Cart-Form'); 4633 4634if (cartContainer) { 4635 const observer = new MutationObserver(() => { 4636 updateCartIcon(); 4637 }); 4638 4639 observer.observe(cartContainer, { 4640 childList: true, 4641 subtree: true, 4642 }); 4643} 4644 4645</script>
4645 4646 4647 4648</div><div id="shopify-section-template--22028669419683__cart-footer" class="shopify-section cart__footer-wrapper"><link href="//bbetter.co/cdn/shop/t/43/assets/component-cart.css?v=164708765130180853531788778311" rel="stylesheet" type="text/css" media="all" /> 4649<link href="//bbetter.co/cdn/shop/t/43/assets/component-totals.css?v=15906652033866631521788778311" rel="stylesheet" type="text/css" media="all" /> 4650<link href="//bbetter.co/cdn/shop/t/43/assets/component-price.css?v=70172745017360139101788778311" rel="stylesheet" type="text/css" media="all" /> 4651<link href="//bbetter.co/cdn/shop/t/43/assets/component-discounts.css?v=152760482443307489271788778311" rel="stylesheet" type="text/css" media="all" /> 4652<style data-shopify>.section-template--22028669419683__cart-footer-padding { 4653 padding-top: 15px; 4654 padding-bottom: 30px; 4655 } 4656 .cart__checkout-button{ 4657 background-color:#43322C; 4658 border-color:#43322C; 4659 border:1px solid #43322C; 4660 --buttons-border-opacity:unset; 4661 --border-opacity:unset; 4662 } 4663 @media screen and (min-width: 750px) { 4664 .section-template--22028669419683__cart-footer-padding { 4665 padding-top: 20px; 4666 padding-bottom: 40px; 4667 } 4668 }</style><div 4669 class="gradient color-scheme-1 is-empty" 4670 id="main-cart-footer" 4671 data-id="template--22028669419683__cart-footer" 4672> 4673 <div class="container"> 4674 <div class="row"> 4675 <div class="col-12"> 4676 <div class="cart__footer isolate section-template--22028669419683__cart-footer-padding px-5 pt-0"><div class="cart__blocks"> 4677 4678<div class="js-contents" > 4679 <div></div> 4680 4681 <div class="totals"> 4682 <h2 class="totals__total">Estimated total</h2> 4683 <p class="totals__total-value">Rs. 0.00</p> 4684 </div> 4685 4686 <small class="tax-note caption-large rte">Taxes included. Discounts and <a href="/policies/shipping-policy" class="link underlined-link">shipping</a> calculated at checkout. 4687</small> 4688 </div> 4689<div class="cart__ctas" > 4690 <button 4691 type="submit" 4692 id="checkout" 4693 class="cart__checkout-button button" 4694 name="checkout" 4695 4696 disabled 4697 4698 form="cart" 4699 > 4700 Check out 4701 </button> 4702 </div> 4703 4704 <div id="cart-errors"></div> 4705 </div> 4706 </div> 4707 </div> 4708 </div> 4709 </div> 4710</div> 4711 4712 4713</div> 4714 </main> 4715 4716 <!-- BEGIN sections: footer-group --> 4717<div id="shopify-section-sections--22028666142883__better_newsletter_BHAJW6" class="shopify-section shopify-section-group-footer-group"><div class="footer-main"> 4718 <div class="bg-gradient-to-r from-gray-200 to-gray-100 footer-section"> 4719 <div class="container-xl footer-mobile"> 4720 <div> 4721 <!-- Main Row --> 4722 <div class="row"> 4723 <!-- Left Section: Newsletter --> 4724 <div class="col-lg-6 mb-lg-0 mb-5"> 4725 <h1 class="mb-0">Together beyond</h1> 4726 <h1 class="mb-0">wellness</h1> 4727 <h6 class="mt-4 text-lg text-gray-600 subscribe mt-0 mb-0">Subscribe to</h6> 4728 <h6 class="text-2xl font-bold text-purple-600 mt-0 mb-1"><span class="text-uppercase cabin-font">BBetter</span> Newsletter</h6> 4729 <p class="mt-2 text-gray-600 mb-3"> 4730 Stay updated with the latest offers, wellness tips, and expert<br> 4731 advice for a healthier, better you - delivered straight to your inbox. 4732 </p> 4733 4734 4735 <div class="row newsletter" id="newsletter"> 4736 <div class="col-lg-8"> 4737 <form method="post" action="/contact#newsletter" accept-charset="UTF-8" class="w-full flex"> 4738 <input type="hidden" name="form_type" value="customer"> 4739 <input type="hidden" name="utf8" value="✓"> 4740 <input type="hidden" name="contact[tags]" value="newsletter"> 4741 4742 <div class="subscribe-input card border-0 d-flex flex-row align-items-center justify-content-between p-2"> 4743 <input 4744 type="email" 4745 name="contact[email]" 4746 placeholder="Enter your email address" 4747 class="w-full pr-4 py-3 email-address text-gray-700" 4748 required 4749 > 4750 <button type="submit" class="px-6 py-3 bg-[#3e2c24] text-white font-semibold rounded-r-2xl submit"> 4751 Subscribe 4752 </button> 4753 </div> 4754 </form> 4755 4756 4757 </div> 4758 </div> 4759 </div> 4760 4761 <!-- Right Section: Links --> 4762 <div class="col-lg-6 w-full h-full"> 4763 <div class="row"> 4764 <!-- Column 1: All Products --> 4765 <div class="col-lg-4 col-6"> 4766 <h3 class="text-title text-uppercase cabin-font">BBetter</h3> 4767 <ul class="space-y-2 ps-0"> 4768 4769 <li class="text-gray-600"> 4770 <a href="https://bbetter.co/collections/all-products">Shop</a> 4771 </li> 4772 4773 <li class="text-gray-600"> 4774 <a href="/pages/about-us-1">About Us</a> 4775 </li> 4776 4777 <li class="text-gray-600"> 4778 <a href="/blogs/news">Blogs</a> 4779 </li> 4780 4781 <li class="text-gray-600"> 4782 <a href="/pages/faq">FAQs</a> 4783 </li> 4784 4785 <li class="text-gray-600"> 4786 <a href="/policies/terms-of-service">Terms of Service</a> 4787 </li> 4788 4789 <li class="text-gray-600"> 4790 <a href="/policies/shipping-policy">Shipping Policy</a> 4791 </li> 4792 4793 <li class="text-gray-600"> 4794 <a href="/policies/refund-policy">Refund Policy</a> 4795 </li> 4796 4797 <li class="text-gray-600"> 4798 <a href="/policies/privacy-policy">Privacy Policy </a> 4799 </li> 4800 4801 </ul> 4802 </div> 4803 4804 <!-- Column 2: Shop Now + Bundles --> 4805 <div class="col-lg-4 col-6"> 4806 <div class="mb-3"> 4807 <h3 class="text-title">Shop Now</h3> 4808 <ul class="space-y-2 ps-0"> 4809 4810 <li class="text-gray-600"> 4811 <a href="/collections/best-seller">Best Sellers </a> 4812 </li> 4813 4814 <li class="text-gray-600"> 4815 <a href="/collections/top-rated">Top Rated</a> 4816 </li> 4817 4818 </ul> 4819 </div> 4820 <div> 4821 <h3 class="mt-8 text-title">Bundles</h3> 4822 <ul class="space-y-2 ps-0"> 4823 4824 <li class="text-gray-600"> 4825 <a href="/collections/mens-health">Men's Wellness </a> 4826 </li> 4827 4828 <li class="text-gray-600"> 4829 <a href="/collections/diabetic-care">Diabetes Care</a> 4830 </li> 4831 4832 <li class="text-gray-600"> 4833 <a href="/collections/pain-free-living">Pain-free Living</a> 4834 </li> 4835 4836 <li class="text-gray-600"> 4837 <a href="/collections/heart-health">Heart Health </a> 4838 </li> 4839 4840 </ul> 4841 </div> 4842 </div> 4843 4844 <!-- Column 3: Menu + Social --> 4845 <div class="col-lg-4 col-12"> 4846 <div class="mb-3"> 4847 <h3 class="text-title">Menu</h3> 4848 <ul class="space-y-2 ps-0"> 4849 4850 <li class="text-gray-600"> 4851 <a href="/">Home</a> 4852 </li> 4853 4854 <li class="text-gray-600"> 4855 <a href="/pages/contact">Contact Us</a> 4856 </li> 4857 4858 <li class="text-gray-600"> 4859 <a href="/pages/career">Careers</a> 4860 </li> 4861 4862 </ul> 4863 </div> 4864 <div class="col-lg-12 col-6"> 4865 <h3 class="text-title">Contact</h3> 4866 <ul class="space-y-2 ps-0"> 4867 4868 <li class="text-gray-600"> 4869 <a class="footer-contact"
4870 href="mailto:[email protected]"> 4871 4872 4873 <!-- Mail Icon --> 4874 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" 4875 viewBox="0 0 24 24" fill="none" role="img" color="#000000"> 4876 <path d="M4 4H20C21.1046 4 22 4.89543 22 6V18C22 19.1046 21.1046 20 20 20H4C2.89543 20 2 19.1046 2 18V6C2 4.89543 2.89543 4 4 4Z" 4877 stroke="#000000" stroke-width="1.5" stroke-linejoin="round"></path> 4878 <path d="M22 7L12.8944 11.5528C12.3314 11.8343 11.6686 11.8343 11.1056 11.5528L2 7" 4879 stroke="#000000" stroke-width="1.5" stroke-linejoin="round"></path> 4880 </svg> 4881 4882 4883 [email protected] 4884 </a> 4885 </li> 4886 4887 <li class="text-gray-600"> 4888 <a class="footer-contact" 4889 href="tel:8125599996"> 4890 4891 4892 <!-- Call Icon --> 4893 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="injected-svg" data-src="https://cdn.hugeicons.com/icons/call-02-solid-sharp.svg?v=2.0" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" color="#000000"> 4894 <path d="M8 2.5H2.5C2.5 15.1667 8.83333 21.5 21.5 21.5V16L17 14L14 17C10.3056 15.4167 8.58333 13.6944 7 10L10 7L8 2.5Z" fill="#000000"></path> 4895 </svg> 4896 +91 4897 4898 4899 8125599996 4900 </a> 4901 </li> 4902 4903 </ul> 4904</div> 4905 4906 <div> 4907 <h3 class="text-title">Social</h3> 4908 <ul class="space-y-2 ps-0"> 4909 4910 <li class="text-gray-600"> 4911 <a href="https://www.facebook.com/heybbetter/">Facebook</a> 4912 </li> 4913 4914 <li class="text-gray-600"> 4915 <a href="https://www.instagram.com/heybbetter/">Instagram</a> 4916 </li> 4917 4918 <li class="text-gray-600"> 4919 <a href="https://x.com/Hey_Bbetter">X</a> 4920 </li> 4921 4922 </ul> 4923 </div> 4924 </div> 4925 </div> 4926 </div> 4927 4928 </div> <!-- End Main Row --> 4929 4930 <!-- Footer Bottom --> 4931 <div class="mt-5"> 4932 <div class="row"> 4933 <div class="col-lg-6"> 4934 <p class="text-gray-500">© Copyright 2026 BBetter. All Rights Reserved.</p> 4935 </div> 4936 <div class="col-lg-6 order-lg-last order-first cash"> 4937 <div class="row justify-content-between"> 4938 <div class="col-lg-6 "> 4939 <div class="d-flex align-items-center"> 4940 <img 4941 src="https://cdn.shopify.com/s/files/1/0684/7627/2814/files/sun.svg?v=1741869175" 4942 alt="Cash on Delivery" 4943 width="18" 4944 height="18" 4945 > 4946 <p class="mb-0 ms-2">Cash on delivery available</p> 4947 </div> 4948 </div> 4949 <div class="col-lg-6 mt-lg-0 mt-3 mb-lg-0 mb-3"> 4950 <div class="d-flex align-items-center"> 4951 <img 4952 src="https://cdn.shopify.com/s/files/1/0684/7627/2814/files/sun.svg?v=1741869175" 4953 alt="Free shipping" 4954 width="18" 4955 height="18" 4956 > 4957 <p class="mb-0 ms-2">Free shipping on all orders</p> 4958 </div> 4959 </div> 4960 </div> 4961 </div> 4962 </div> 4963 </div> <!-- End Footer Bottom --> 4964 </div> <!-- End inner container wrapper --> 4965 </div> <!-- End .container-xl --> 4966 </div> <!-- End .bg-gradient --> 4967</div> <!-- End .footer-main --> 4968 4969 4970<style> 4971 .footer-contact svg { 4972 min-width: 20px; 4973 height: 20px; 4974 } 4975 .footer-section { 4976 padding: 6rem 0rem 4rem 0rem; 4977 position:relative; 4978 z-index:1; 4979 } 4980 .footer-main { 4981 background-color: #eeeae8; 4982 } 4983 .footer-section:after { 4984 content: ''; 4985 position: absolute; 4986 background-image: url(https://cdn.shopify.com/s/files/1/0684/7627/2814/files/bg2.png?v=1741850766); 4987 bottom: 0; 4988 right: 0; 4989 width: 450px; 4990 height: 450px; 4991 z-index: -1; 4992 } 4993 .footer-section:before{ 4994 content: ''; 4995 position: absolute; 4996 background-image: url(https://cdn.shopify.com/s/files/1/0684/7627/2814/files/bg3.png?v=1741850767); 4997 top: 0px; 4998 left: 0; 4999 width: 735px; 5000 height: 100%; 5001 background-position: bottom; 5002 z-index: -1; 5003 background-size: cover; 5004 background-repeat: no-repeat; 5005 } 5006 .footer-main h1{ 5007 font-size:56px; 5008 font-weight:900; 5009 color:#43322c; 5010 } 5011 .footer-main h6{ 5012 font-size:36px; 5013 font-weight:500; 5014 color:#734588; 5015 } 5016 .footer-main .subscribe{ 5017 color:#555052; 5018 font-weight:500; 5019 font-size:36px; 5020 } 5021 .footer-main p{ 5022 font-size:12px; 5023 font-weight:500; 5024 color:rgba(85, 80, 82, 0.72); 5025 } 5026 .footer-main ul li a{ 5027 font-size:16px; 5028 font-weight:400; 5029 color:#302524; 5030 text-decoration:none; 5031 } 5032 .footer-main ul li{ 5033 list-style:none; 5034 padding:5px 0px; 5035 font-size:16px; 5036 font-weight:400; 5037 color:#302524; 5038 } 5039 .footer-main .cash p{ 5040 color:#6b4e3e; 5041 font-size: 15px; 5042 } 5043 .footer-main .newsletter .card{ 5044 border-radius: 12px 5045 } 5046 .subscribe-input input{ 5047 width: 100%; 5048 margin-right: 8px; 5049 } 5050 5051 .subscribe-input input:focus-visible{ 5052 outline: none; 5053 outline-offset:none; 5054 box-shadow: none; 5055 } 5056 .footer-main .newsletter .submit{ 5057 padding:12px 24px; 5058 background-color:#43322C; 5059 color:#fff; 5060 font-size:16px; 5061 font-weight:600; 5062 border-radius:8px; 5063 border:1px solid #43322C; 5064 } 5065 .footer-main .newsletter .email-address{ 5066 border:1px solid transparent; 5067 border-radius:8px; 5068 } 5069 .text-title{ 5070 color:rgba(85, 80, 82, 0.64); 5071 font-size:12px; 5072 font-weight:600; 5073 } 5074 5075 5076 @media screen and (max-width: 768px){ 5077 .footer-section:before{ 5078 width: 100%; 5079 } 5080 } 5081 5082 @media screen and (max-width: 480px){ 5083 .footer-mobile { 5084 padding: 0px 20px; 5085 } 5086 .footer-main h1{ 5087 font-size: 42px 5088 } 5089 .footer-main .subscribe{ 5090 font-size: 32px 5091 } 5092 .footer-main h6{ 5093 font-size: 32px 5094 } 5095 .footer-section:before{ 5096 width: 100%; 5097 height:auto; 5098 } 5099 5100 } 5101 @media screen and (max-width: 480px) { 5102 body.product-page .footer-section { 5103 padding: 0rem 0rem 1rem 0rem; 5104 } 5105} 5106 @media screen and (max-width: 400px){ 5107 .footer-main .newsletter .submit{ 5108 padding: 12px 8px; 5109 } 5110 } 5111 5112 .footer-contact{ 5113 display: flex; 5114 align-items: center; 5115 gap: 5px; 5116 } 5117@media screen and (max-width: 400px){ 5118 .subscribe-input input{ 5119 font-size: 14px; 5120 max-width: 170px; 5121 } 5122} 5123</style> 5124 5125 5126</div> 5127<!-- END sections: footer-group --> 5128 5129 <ul hidden> 5130 <li id="a11y-refresh-page-message">Choosing a selection results in a full page refresh.</li> 5131 <li id="a11y-new-window-message">Opens in a new window.</li> 5132 </ul> 5133 5134
5134<script> 5135 window.shopUrl = 'https://bbetter.co'; 5136 window.routes = { 5137 cart_add_url: '/cart/add', 5138 cart_change_url: '/cart/change', 5139 cart_update_url: '/cart/update', 5140 cart_url: '/cart', 5141 predictive_search_url: '/search/suggest', 5142 }; 5143 5144 window.cartStrings = { 5145 error: `There was an error while updating your cart. Please try again.`, 5146 quantityError: `You can only add [quantity] of this item to your cart.`, 5147 }; 5148 5149 window.variantStrings = { 5150 addToCart: `Add to cart`, 5151 soldOut: `Sold out`, 5152 unavailable: `Unavailable`, 5153 unavailable_with_option: `[value] - Unavailable`, 5154 }; 5155 5156 window.quickOrderListStrings = { 5157 itemsAdded: `[quantity] items added`, 5158 itemAdded: `[quantity] item added`, 5159 itemsRemoved: `[quantity] items removed`, 5160 itemRemoved: `[quantity] item removed`, 5161 viewCart: `View cart`, 5162 each: `[money]/ea`, 5163 min_error: `This item has a minimum of [min]`, 5164 max_error: `This item has a maximum of [max]`, 5165 step_error: `You can only add this item in increments of [step]`, 5166 }; 5167 5168 window.accessibilityStrings = { 5169 imageAvailable: `Image [index] is now available in gallery view`, 5170 shareSuccess: `Link copied to clipboard`, 5171 pauseSlideshow: `Pause slideshow`, 5172 playSlideshow: `Play slideshow`, 5173 recipientFormExpanded: `Gift card recipient form expanded`, 5174 recipientFormCollapsed: `Gift card recipient form collapsed`, 5175 countrySelectorSearchCount: `[count] countries/regions found`, 5176 }; 5177 </script>
5177<script src="//bbetter.co/cdn/shop/t/43/assets/predictive-search.js?v=57209189334897115771788778311" defer="defer"></script>
5177<script src="//bbetter.co/cdn/shop/t/43/assets/cart-drawer.js?v=169981311261118214701788778311" defer="defer"></script>
5177<!-- <style> 5178 a#cart-icon-bubble{ 5179 display:none; 5180 } 5181 </style> --> 5182 5183
5183<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.3/js/bootstrap.min.js"></script>
5183 5184 <!--
5184<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
5184 --> 5185
5185<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js"></script>
5185 5186 5187 <!-- WhatsApp Floating Button --> 5188<a href="https://wa.me/+919100045711?text=Hello,%20I%20would%20like%20to%20know%20more%20about%20your%20products." 5189 id="whatsapp-float" target="_blank" aria-label="Chat on WhatsApp"> 5190 <img src="https://upload.wikimedia.org/wikipedia/commons/6/6b/WhatsApp.svg" alt="WhatsApp" /> 5191</a>
5192<script> 5193function updateWhatsappVisibility() { 5194 var btn = document.getElementById('whatsapp-float'); 5195 if (!btn) return; 5196 if (window.location.pathname.includes('/products') && window.innerWidth <= 768) { 5197 btn.style.display = 'none'; 5198 } else { 5199 btn.style.display = 'flex'; 5200 } 5201} 5202 5203// Run on load 5204updateWhatsappVisibility(); 5205 5206// Run on resize 5207window.addEventListener('resize', updateWhatsappVisibility); 5208</script>
vendor: 1 bytes, line 5208
5208
5209<script> 5210document.addEventListener("DOMContentLoaded", function() { 5211 document.querySelectorAll(".cabin-font").forEach(function(el) { 5212 el.innerHTML = el.innerHTML.replace(/BBetter/gi, "BBETTER"); 5213 }); 5214}); 5215</script>
5215 5216 5217<style> 5218 .cabin-font { 5219 font-family: "Cabin", sans-serif; 5220 font-optical-sizing: auto; 5221 font-style: normal; 5222 font-variation-settings: 5223 "wdth" 100; 5224} 5225 #whatsapp-float { 5226 position: fixed; 5227 bottom: 20px; 5228 right: 20px; 5229 z-index: 9999; 5230 background-color:#27bf60; 5231 border-radius: 50%; 5232 padding: 10px; 5233 box-shadow: 0 4px 8px rgba(0,0,0,0.2); 5234 display: flex; 5235 align-items: center; 5236 justify-content: center; 5237 } 5238 5239 #whatsapp-float img { 5240 width: 40px; 5241 height: 40px; 5242 } 5243 5244 #whatsapp-float:hover { 5245 background-color: #1ebe5d; 5246 } 5247 @media (max-width: 768px) { 5248 #whatsapp-float { 5249 padding: 6px; 5250 } 5251 #whatsapp-float img { 5252 width: 30px; 5253 height: 30px; 5254 } 5255 } 5256 5257 .az_reviews { 5258 padding: 50px 0; 5259} 5260 5261.shopify-policy__title { 5262 margin: 20px 0px; 5263} 5264hr { 5265 margin: 1rem 0; 5266} 5267 5268@media (min-width: 800px) { 5269.shopify-policy__container { 5270 max-width: 90ch !important; 5271 margin-bottom: 30px; 5272 } 5273} 5274</style>
5275<script> 5276(function() { 5277 const params = new URLSearchParams(window.location.search); 5278 const utms = ['utm_source','utm_medium','utm_campaign','utm_content','utm_term']; 5279 let attributes = {}; 5280 5281 utms.forEach(function(key) { 5282 const value = params.get(key); 5283 if (value) { 5284 attributes[key] = value; 5285 } 5286 }); 5287 5288 if (Object.keys(attributes).length > 0) { 5289 fetch('/cart/update.js', { 5290 method: 'POST', 5291 headers: {'Content-Type': 'application/json'}, 5292 body: JSON.stringify({ attributes: attributes }) 5293 }); 5294 } 5295})(); 5296</script>
vendor: 1 bytes, line 5296
5296
5297<script> 5298(function() { 5299 const params = new URLSearchParams(window.location.search); 5300 const utms = ['utm_source','utm_medium','utm_campaign','utm_content','utm_term']; 5301 let attributes = {}; 5302 5303 utms.forEach(function(key) { 5304 const value = params.get(key); 5305 if (value) { 5306 attributes[key] = value; 5307 } 5308 }); 5309 5310 if (Object.keys(attributes).length > 0) { 5311 fetch('/cart/update.js', { 5312 method: 'POST', 5313 headers: {'Content-Type': 'application/json'}, 5314 body: JSON.stringify({ attributes: attributes }) 5315 }); 5316 } 5317})(); 5318</script>
5318 5319 <div id="shopify-block-AWnU4NVhyS0xaWFNVO__6097367690979945815" class="shopify-block shopify-app-block">
5319<script defer src="https://cdn.shopify.com/extensions/019d4d7b-52ee-7f6d-b99f-e2d08226e72e/sagepilot-ai-bbetter-3/assets/sagepilot-tracking.js"></script>
5319 5320 5321<div 5322 data-sagepilot-tracking 5323 data-store-domain="bbetter-store.myshopify.com" 5324 data-proxy-base-path="/apps/sagepilot/tracking" 5325 data-min-interval="30000" 5326 data-debug="false" 5327 style="display: none;" 5328> 5329 <!-- Sagepilot Tracking Pixel - Phase 1 --> 5330 <!-- Tracks identified customers only (logged in, checkout) --> 5331 <!-- Events sent immediately to /apps/sagepilot/tracking/shopify_<event_type> --> 5332</div> 5333 5334 5335 5336 5337 5338</div><div id="shopify-block-AZTA0UUdWeWUzNG9jV__1219337400145039034" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: kwikpass -->
5338<script defer> 5339 function getCustomerId() { 5340 5341 return null 5342 5343 } 5344 5345 function getThemeId() { 5346 5347 return null 5348 5349 } 5350 5351 5352 let token = null; 5353 let isDropdownVisible = false; 5354 let isDropdownMobileVisible = false; 5355 let isElementsWithAccountClickable = true; 5356 const ICON_SELECT_QUERY='.header__icon--account'; 5357 const HORIZON_PROFILE_ICON = '.account-button.header-actions__action' 5358 5359 // Define handleDrawer2 in global scope so it can be accessed by onclick attributes - for horizon themes 5360 function handleDrawer2() { 5361 const token = getValueFromCookiesOrLocalStorage(XGokwikCoreToken(window.merchantInfo.environment)) 5362 if (token) { 5363 const kwikpassLoggedInElement = document.getElementById("icon-kwikpass"); 5364 const crossIconElement = document.getElementById("icon-close-kwikpass") 5365 const drawerElement = document.getElementById("kwikpass-drawer-desktop") 5366 // display cross icon and hide icon-kwikpass if isDropdownVisible = true else display icon-kwikpass and hide cross icon 5367 if(drawerElement && crossIconElement && kwikpassLoggedInElement) { 5368 if(isDropdownVisible){ 5369 drawerElement.style.display = "none"; 5370 crossIconElement.style.display="none"; 5371 kwikpassLoggedInElement.style.display="flex"; 5372 }else{ 5373 drawerElement.style.display = "block"; 5374 crossIconElement.style.display="flex"; 5375 kwikpassLoggedInElement.style.display="none"; 5376 } 5377 isDropdownVisible = !isDropdownVisible; 5378 } 5379 5380 const kwikpassLoggedInElementMbl = document.getElementById("icon-kwikpass-mobile"); 5381 const crossIconElementMbl = document.getElementById("icon-close-kwikpass-mobile") 5382 const drawerElementMbl = document.getElementById("kwikpass-drawer-mobile") 5383 // display cross icon and hide icon-kwikpass if isDropdownMobileVisible = true else display icon-kwikpass and hide cross icon 5384 if(drawerElementMbl && crossIconElementMbl && kwikpassLoggedInElementMbl) { 5385 if(isDropdownMobileVisible){ 5386 drawerElementMbl.style.display = "none"; 5387 crossIconElementMbl.style.display="none"; 5388 kwikpassLoggedInElementMbl.style.display="flex"; 5389 }else{ 5390 drawerElementMbl.style.display = "block"; 5391 crossIconElementMbl.style.display="flex"; 5392 kwikpassLoggedInElementMbl.style.display="none"; 5393 } 5394 isDropdownMobileVisible = !isDropdownMobileVisible; 5395 } 5396 } 5397 } 5398 5399 function addProfileIconInHorizon(){ 5400 5401 const kpLoader = `<svg 5402 class="loadergk kploader" 5403 width="17" 5404 height="16" 5405 viewBox="0 0 17 16" 5406 fill="none" 5407 xmlns="http://www.w3.org/2000/svg" 5408 > 5409 <path 5410 d="M8.50004 1.33325V3.99992M8.50004 11.9999V14.6666M4.50004 7.99992H1.83337M15.1667 7.99992H12.5M13.219 12.7189L11.3334 10.8333M13.219 3.33321L11.3334 5.21883M3.78109 12.7189L5.66671 10.8333M3.78109 3.33321L5.66671 5.21883" 5411 stroke="#111" 5412 stroke-width="1.6" 5413 stroke-linecap="round" 5414 stroke-linejoin="round" 5415 /> 5416 </svg>` 5417 5418 /*removing existing profile(person) icon - person icon is not present in this store*/ 5419 // Note: profileButtonElement and profileButtonElementMbl are now defined later in the code (lines 356 and 376) 5420 5421 // defining css and add it to style tag in head 5422 function appendCss() { 5423 let css = ` 5424 .loadergk { 5425 display: none; 5426 animation: rotate 1.5s linear infinite; 5427 } 5428 @keyframes rotate { 5429 100% { 5430 transform: rotate(360deg); 5431 } 5432 } 5433 .kp-disabled-text-color{ 5434 cursor: not-allowed; 5435 } 5436 #logout-button-desktop, #logout-button-mobile{ 5437 cursor: pointer; 5438 display: flex; 5439 justify-content: center; 5440 align-items: center; 5441 gap: 8px; 5442 font-size: 14px; 5443 color: #344054; 5444 font-style: normal; 5445 font-weight: 600; 5446 line-height: 20px; 5447 width: 100%; 5448 border-radius: 8px; 5449 padding: 8px 14px;; 5450 border: 1px solid var(--gray-300, #d0d5dd); 5451 background: var(--base-white, #fff); 5452 box-shadow: 0px 1px 2px 0px rgba(16, 24, 40, 0.05); 5453 } 5454 #loggedin-icons{ 5455 align-self: center; 5456 display: none; 5457 } 5458 #loggedin-icons-mobile{ 5459 display:none; 5460 } 5461 /* Base drawer styles */ 5462 #kwikpass-drawer-desktop,#kwikpass-drawer-mobile{ 5463 padding: 16px; 5464 display: none; 5465 width: 10rem; 5466 position: absolute; 5467 box-shadow: 0px 0px 32px 0px rgba(16, 24, 40, 0.32); 5468 border-bottom-left-radius: 8px; 5469 border-bottom-right-radius: 8px; 5470 z-index: 999; 5471 background:#fff!important; 5472 } 5473 5474 /* Old theme drawer - original positioning (MUST NOT BREAK) */ 5475 .kp-old-theme #kwikpass-drawer-desktop, 5476 .kp-old-theme #kwikpass-drawer-mobile { 5477 right: 10%; 5478 top: 175%; 5479 } 5480 5481 /* New theme drawer - use right: 0 to align with icon's right edge (responsive) */ 5482 .kp-new-theme #kwikpass-drawer-desktop, 5483 .kp-new-theme #kwikpass-drawer-mobile { 5484 right: 74px; 5485 top: 78%; 5486 } 5487 #kwikpass-drawer-desktop > ul , #kwikpass-drawer-mobile > ul { 5488 margin: 0px 0px 15px 0px; 5489 padding: 0; 5490 width: 100%; 5491 } 5492 #kwikpass-drawer-desktop >ul >a , #kwikpass-drawer-mobile > ul > a { 5493 cursor: pointer; 5494 width: 100%; 5495 display: flex!important; 5496 justify-content: space-between; 5497 align-items: center; 5498 padding: 0; 5499 color: inherit; 5500 margin-left:0!important; 5501 text-decoration: none; 5502 } 5503 #kwikpass-drawer-desktop >ul >a:hover , #kwikpass-drawer-mobile > ul > a:hover , #kwikpass-drawer-desktop >ul >a:focus , #kwikpass-drawer-mobile > ul > a:focus { 5504 text-decoration: none; 5505 } 5506 #kwikpass-drawer-desktop >ul >a:focus , #kwikpass-drawer-mobile > ul > a:focus,#kwikpass-drawer-desktop >ul >a:active , #kwikpass-drawer-mobile > ul > a:active { 5507 text-decoration: none; 5508 } 5509 #kwikpass-drawer-desktop >ul >a:focus .loadergk , #kwikpass-drawer-mobile > ul > a:focus .loadergk { 5510 display: block; 5511 } 5512 #kwikpass-drawer-desktop >ul >a:not(:focus) .loadergk , #kwikpass-drawer-mobile > ul > a:not(:focus) .loadergk { 5513 display: none; 5514 } 5515 #kwikpass-drawer-desktop > ul > a > p , #kwikpass-drawer-mobile > ul > a > p { 5516 font-size: 14px; 5517 font-style: normal; 5518 font-weight: 500; 5519 line-height: 142.857%; 5520 display: inline-flex; 5521 gap: 8px; 5522 align-items: center; 5523 margin: 0px 0 0px 0; 5524 color: #000; 5525 } 5526 /* Base icon styles */ 5527 .header--icon{ 5528 cursor: pointer; 5529 display: inline-flex; 5530 color: #000; 5531 } 5532 .header--icon--mobile{ 5533 cursor: pointer; 5534 display: inline-flex; 5535 color: #000; 5536 width: 23px; 5537 } 5538 5539 /* Old theme - original positioning (MUST NOT BREAK) */ 5540 .kp-old-theme.header--icon, 5541 .kp-old-theme.header--icon--mobile { 5542 position: relative; 5543 top: 10px; 5544 margin: 0 10px; 5545 } 5546 5547 /* New theme - match old theme visual appearance */ 5548 .kp-new-theme.header--icon, 5549 .kp-new-theme.header--icon--mobile { 5550 display: inline-flex; 5551 align-items: center; 5552 } 5553 #icon-close-kwikpass, #icon-close-kwikpass-mobile{ 5554 display: none; 5555 border-radius: 50px; 5556 border: 1px solid; 5557 margin: 0; 5558 padding: 2px; 5559 align-items: center; 5560 justify-content: center; 5561 margin-left:3px; 5562 } 5563 5564 floating-panel-component.account-popover__panel.details-content.color-scheme-1 { 5565 display: none; 5566 } 5567 5568 `; 5569 5570 var style = document.createElement('style'); 5571 style.innerHTML = css; 5572 document.getElementsByTagName('head')[0].appendChild(style); 5573 } 5574 5575 // function call to append css to style tag 5576 appendCss() 5577 5578 const userIcon = `<svg width="23" height="23" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" id="svgkp"> 5579 <path d="M22.9129 12.935L13.7571 23.0474C13.5348 23.2929 13.1284 23.1084 13.1669 22.7794L14.0816 14.9731H10.6991C10.4034 14.9731 10.2484 14.6219 10.4478 14.4035L20.3133 3.59739C20.5589 3.32834 20.9984 3.58134 20.8891 3.92887L18.2354 12.3664H22.6607C22.9557 12.3664 23.1109 12.7163 22.9129 12.935Z" fill="#FEA203"/> 5580 <path id="svgkp-path" fill-rule="evenodd" clip-rule="evenodd" d="M16.6079 5.35819C16.4805 5.1933 16.3421 5.03582 16.1932 4.8869C15.2702 3.96387 14.0183 3.44531 12.7129 3.44531C11.4075 3.44531 10.1556 3.96387 9.2326 4.8869C8.30957 5.80993 7.79102 7.06183 7.79102 8.36719C7.79102 9.67255 8.30957 10.9244 9.2326 11.8475C9.48368 12.0986 9.75909 12.3197 10.0533 12.5086L11.0235 11.4503C10.7335 11.2914 10.4649 11.0911 10.227 10.8531C9.56766 10.1938 9.19727 9.29959 9.19727 8.36719C9.19727 7.43479 9.56766 6.54057 10.227 5.88127C10.8863 5.22196 11.7805 4.85156 12.7129 4.85156C13.6453 4.85156 14.5395 5.22196 15.1988 5.88127C15.3636 6.04604 15.5103 6.22549 15.6377 6.41654L16.6079 5.35819ZM20.6413 18.6497L19.6746 19.7132C20.1676 20.4122 20.4473 21.2264 20.4473 22.0781V23.8359C20.4473 24.2243 20.7621 24.5391 21.1504 24.5391C21.5387 24.5391 21.8535 24.2243 21.8535 23.8359V22.0781C21.8535 20.7863 21.4016 19.6103 20.6413 18.6497ZM12.3111 17.5078H10.3026C7.27113 17.5078 4.97852 19.6394 4.97852 22.0781V23.8359C4.97852 24.2243 4.66372 24.5391 4.27539 24.5391C3.88707 24.5391 3.57227 24.2243 3.57227 23.8359V22.0781C3.57227 18.6922 6.67684 16.1016 10.3026 16.1016H12.4885L12.3111 17.5078Z" fill="currentColor" stroke="currentColor" stroke-width="0.1"/> 5581 </svg>`; 5582
5583 // kwikpass icon for desktop - if user is not logged in 5584 const KwikpassNotLoggedIcon = `<div id="kp-login-button-header-logo" onclick="handleKpAndShopifyLogin()" style="cursor: pointer;display: flex;align-items: center;">${userIcon}</div>` 5585 5586 // kwikpass icon for mobile - if user is not logged in 5587 const KwikpassNotLoggedIconMobile = `<div id="kp-login-button-header-logo-mobile" onclick="handleKpAndShopifyLogin()" style="cursor: pointer;display: flex">${userIcon}</div>` 5588 5589 // dropdown for desktop (opens on clicking kwikpass icon if user logged in) 5590 const drawerhtmlDesktop = `<div id="kwikpass-drawer-desktop" > 5591 <ul> 5592 <a href="javascript:void(0);" onclick="event.preventDefault();handleShopifyLogin(event,'/account')" tabindex="0" style=" display: flex"> 5593 <p> 5594 <svg 5595 width="16" 5596 height="16" 5597 viewBox="0 0 20 20" 5598 fill="none" 5599 xmlns="http://www.w3.org/2000/svg" 5600 > 5601 <path 5602 d="M4.6 2.20033L3.3 3.93366C3.04251 4.27697 2.91377 4.44863 2.91676 4.59232C2.91936 4.71736 2.97799 4.83462 3.07646 4.91172C3.18962 5.00032 3.40419 5.00032 3.83333 5.00032H16.1667C16.5958 5.00032 16.8104 5.00032 16.9235 4.91172C17.022 4.83462 17.0806 4.71736 17.0832 4.59232C17.0862 4.44863 16.9575 4.27697 16.7 3.93366L15.4 2.20033M4.6 2.20033C4.74667 2.00477 4.82 1.90699 4.91294 1.83647C4.99525 1.77401 5.08846 1.72741 5.18782 1.69903C5.3 1.66699 5.42222 1.66699 5.66667 1.66699H14.3333C14.5778 1.66699 14.7 1.66699 14.8122 1.69903C14.9115 1.72741 15.0047 1.77401 15.0871 1.83647C15.18 1.90699 15.2533 2.00477 15.4 2.20033M4.6 2.20033L3.03333 4.28921C2.83545 4.55306 2.73651 4.68498 2.66625 4.83026C2.6039 4.95917 2.55843 5.09559 2.53096 5.23612C2.5 5.3945 2.5 5.55941 2.5 5.88921L2.5 15.667C2.5 16.6004 2.5 17.0671 2.68166 17.4236C2.84144 17.7372 3.09641 17.9922 3.41002 18.152C3.76654 18.3337 4.23325 18.3337 5.16667 18.3337L14.8333 18.3337C15.7668 18.3337 16.2335 18.3337 16.59 18.152C16.9036 17.9922 17.1586 17.7372 17.3183 17.4236C17.5 17.0671 17.5 16.6004 17.5 15.667V5.88921C17.5 5.55941 17.5 5.3945 17.469 5.23613C17.4416 5.09559 17.3961 4.95918 17.3338 4.83026C17.2635 4.68498 17.1646 4.55306 16.9667 4.28921L15.4 2.20033M13.3333 8.33366C13.3333 9.21771 12.9821 10.0656 12.357 10.6907C11.7319 11.3158
560210.8841 11.667 10 11.667C9.11594 11.667 8.2681 11.3158 7.64298 10.6907C7.01786 10.0656 6.66667 9.21771 6.66667 8.33366" 5603 stroke="currentColor" 5604 stroke-width="1.66667" 5605 stroke-linecap="round" 5606 stroke-linejoin="round" 5607 fill="none" 5608 /> 5609 </svg> 5610 5611 Order History 5612 </p> 5613 5614 ${kpLoader} 5615 </a> 5616 </ul> 5617 <button id="logout-button-desktop"> 5618 Logout 5619 <svg 5620 width="16" 5621 height="16" 5622 viewBox="0 0 20 20" 5623 fill="none" 5624 xmlns="http://www.w3.org/2000/svg" 5625 > 5626 <path 5627 d="M15 6.66667L18.3334 10M18.3334 10L15 13.3333M18.3334 10H7.50002M12.5 3.50337C11.4377 2.86523 10.2044 2.5 8.88891 2.5C4.90019 2.5 1.66669 5.85786 1.66669 10C1.66669 14.1421 4.90019 17.5 8.88891 17.5C10.2044 17.5 11.4377 17.1348 12.5 16.4966" 5628 stroke="currentColor" 5629 stroke-width="1.66667" 5630 stroke-linecap="round" 5631 stroke-linejoin="round" 5632 fill="none" 5633 /> 5634 </svg> 5635 </button> 5636 </div>`; 5637 5638 // dropdown for mobile (opens on clicking kwikpass icon if user logged in) 5639 const drawerhtmlMobile = `<div id="kwikpass-drawer-mobile"> 5640 <ul> 5641 <a href="javascript:void(0);" onclick="event.preventDefault();handleShopifyLogin(event,'/account')" tabindex="0" style=" display: flex"> 5642 <p> 5643 <svg 5644 width="16" 5645 height="16"
5646 viewBox="0 0 20 20" 5647 fill="none" 5648 xmlns="http://www.w3.org/2000/svg" 5649 class="ordericon" 5650 > 5651 <path 5652 d="M4.6 2.20033L3.3 3.93366C3.04251 4.27697 2.91377 4.44863 2.91676 4.59232C2.91936 4.71736 2.97799 4.83462 3.07646 4.91172C3.18962 5.00032 3.40419 5.00032 3.83333 5.00032H16.1667C16.5958 5.00032 16.8104 5.00032 16.9235 4.91172C17.022 4.83462 17.0806 4.71736 17.0832 4.59232C17.0862 4.44863 16.9575 4.27697 16.7 3.93366L15.4 2.20033M4.6 2.20033C4.74667 2.00477 4.82 1.90699 4.91294 1.83647C4.99525 1.77401 5.08846 1.72741 5.18782 1.69903C5.3 1.66699 5.42222 1.66699 5.66667 1.66699H14.3333C14.5778 1.66699 14.7 1.66699 14.8122 1.69903C14.9115 1.72741 15.0047 1.77401 15.0871 1.83647C15.18 1.90699 15.2533 2.00477 15.4 2.20033M4.6 2.20033L3.03333 4.28921C2.83545 4.55306 2.73651 4.68498 2.66625 4.83026C2.6039 4.95917 2.55843 5.09559 2.53096 5.23612C2.5 5.3945 2.5 5.55941 2.5 5.88921L2.5 15.667C2.5 16.6004 2.5 17.0671 2.68166 17.4236C2.84144 17.7372 3.09641 17.9922 3.41002 18.152C3.76654 18.3337 4.23325 18.3337 5.16667 18.3337L14.8333 18.3337C15.7668 18.3337 16.2335 18.3337 16.59 18.152C16.9036 17.9922 17.1586 17.7372 17.3183 17.4236C17.5 17.0671 17.5 16.6004 17.5 15.667V5.88921C17.5 5.55941 17.5 5.3945 17.469 5.23613C17.4416 5.09559 17.3961 4.95918 17.3338 4.83026C17.2635 4.68498 17.1646 4.55306 16.9667 4.28921L15.4 2.20033M13.3333 8.33366C13.3333 9.21771 12.9821 10.0656 12.357 10.6907C11.7319 11.3158
565210.8841 11.667 10 11.667C9.11594 11.667 8.2681 11.3158 7.64298 10.6907C7.01786 10.0656 6.66667 9.21771 6.66667 8.33366" 5653 stroke="currentColor" 5654 stroke-width="1.66667" 5655 stroke-linecap="round" 5656 stroke-linejoin="round" 5657 fill="none" 5658 /> 5659 </svg> 5660 5661 Order History 5662 </p> 5663 5664 ${kpLoader} 5665 </a> 5666 </ul> 5667 <button id="logout-button-mobile"> 5668 Logout 5669 <svg 5670 width="16" 5671 height="16" 5672 viewBox="0 0 20 20" 5673 fill="none" 5674 xmlns="http://www.w3.org/2000/svg" 5675 > 5676 <path 5677 d="M15 6.66667L18.3334 10M18.3334 10L15 13.3333M18.3334 10H7.50002M12.5 3.50337C11.4377 2.86523 10.2044 2.5 8.88891 2.5C4.90019 2.5 1.66669 5.85786 1.66669 10C1.66669 14.1421 4.90019 17.5 8.88891 17.5C10.2044 17.5 11.4377 17.1348 12.5 16.4966" 5678 stroke="currentColor" 5679 stroke-width="1.66667" 5680 stroke-linecap="round" 5681 stroke-linejoin="round" 5682 fill="none" 5683 /> 5684 </svg> 5685 </button> 5686 </div>`; 5687 5688 5689 5690 const kwikpassLoggedInIcon = ` 5691 <div id="loggedin-icons"> 5692 <div id="icon-close-kwikpass" class="icon-close-kwikpass" style="height: 20px; width:20px; cursor: pointer;" onclick="handleDrawer2()"> 5693 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 5694 <path d="M18 6L6 18M6 6L18 18" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"/> 5695 </svg> 5696 </div> 5697 <div style="cursor: pointer;display: flex;" onclick="handleDrawer2()" id="icon-kwikpass"> 5698 ${userIcon} 5699 </div> 5700 </div>`; 5701 5702 const kwikpassLoggedInIconMobile = ` 5703 <div id="loggedin-icons-mobile" > 5704 <div id="icon-close-kwikpass-mobile" style="cursor: pointer;height: 20px; width:20px;" onclick="handleDrawer2()"> 5705 <svg width="17" height="17" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 5706 <path d="M18 6L6 18M6 6L18 18" stroke="currentColor" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> 5707 </svg> 5708 </div> 5709 <div style="cursor: pointer;display: flex" onclick="handleDrawer2()" id="icon-kwikpass-mobile"> 5710 ${userIcon} 5711 </div> 5712 </div>`; 5713 5714 5715 // It will change based on theme - Desktop 5716 const profileButtonElement = document.querySelector('.account-button.header-actions__action') 5717 const personIconElement = profileButtonElement?.parentElement 5718 const html = ` 5719 ${KwikpassNotLoggedIcon} 5720 ${kwikpassLoggedInIcon} 5721 ${drawerhtmlDesktop} 5722 `; 5723 5724 if(!document.getElementsByClassName("header--icon")?.[0]){ 5725 // Detect theme 5726 const isOldTheme = document.querySelector('.account-popover') !== null; 5727 5728 const kwipassDesktopNode = document.createElement('div') 5729 // Add theme-specific class 5730 kwipassDesktopNode.className = isOldTheme ? "header--icon kp-old-theme" : "header--icon kp-new-theme" 5731 kwipassDesktopNode.innerHTML = html 5732 // Hide original and insert Kwikpass button (works for both themes) 5733 if(personIconElement && profileButtonElement) { 5734 profileButtonElement.style.display = 'none'; 5735 personIconElement.insertBefore(kwipassDesktopNode, profileButtonElement); 5736 } 5737 } 5738 5739 //mobile - Get the second instance of account button 5740 const allAccountButtons = document.querySelectorAll('.account-button.header-actions__action') 5741 const profileButtonElementMbl = allAccountButtons[1] // Second instance (mobile) 5742 const personIconElementMbl = profileButtonElementMbl?.parentElement 5743 5744 5745 5746 const htmlmobile = ` 5747 ${KwikpassNotLoggedIconMobile} 5748 ${kwikpassLoggedInIconMobile} 5749 ${drawerhtmlMobile} 5750 `; 5751 5752 if(!document.getElementsByClassName("header--icon--mobile")?.[0]){ 5753 // Detect theme 5754 const isOldThemeMobile = document.querySelector('.account-drawer') !== null; 5755 5756 const kwipassMobileNode = document.createElement('div') 5757 // Add theme-specific class 5758 kwipassMobileNode.className = isOldThemeMobile ? "header--icon--mobile kp-old-theme" : "header--icon--mobile kp-new-theme" 5759 kwipassMobileNode.innerHTML = htmlmobile 5760 // Hide original and insert Kwikpass button (works for both themes) 5761 if(personIconElementMbl && profileButtonElementMbl) { 5762 profileButtonElementMbl.style.display = 'none'; 5763 personIconElementMbl.insertBefore(kwipassMobileNode, profileButtonElementMbl); 5764 } 5765 } 5766 } 5767 5768 function addLoginButtonForHorizon(){ 5769 5770 function updateDOM(isKwikpassLogin = true) { 5771 token = getValueFromCookiesOrLocalStorage(XGokwikCoreToken(window.merchantInfo.environment)); 5772 const isLogout = sessionStorage.getItem('isLogout'); 5773 const phoneNumber = getValueFromCookiesOrLocalStorage('notify_ph
5773one_number'); 5774 5775 if ((!token && !isLogout) || (token && !phoneNumber)) { 5776 openIframe('kp_sso_token') 5777 } 5778 5779 const drawerElementMobile = document.getElementById("kwikpass-drawer-mobile") 5780 if(drawerElementMobile){ 5781 if(token){ 5782 document.getElementById("kp-login-button-header-logo-mobile").style.display = "none" 5783 document.getElementById("loggedin-icons-mobile").style.display = "block" 5784 }else{ 5785 document.getElementById("kp-login-button-header-logo-mobile").style.display = "flex" 5786 document.getElementById("loggedin-icons-mobile").style.display = "none" 5787 drawerElementMobile.style.display = "none" 5788 } 5789 } 5790 5791 const drawerElement = document.getElementById("kwikpass-drawer-desktop") 5792 if(drawerElement){ 5793 if(token){ 5794 document.getElementById("kp-login-button-header-logo").style.display = "none" 5795 document.getElementById("loggedin-icons").style.display = "block" 5796 }else{ 5797 document.getElementById("kp-login-button-header-logo").style.display = "flex" 5798 document.getElementById("loggedin-icons").style.display = "none" 5799 drawerElement.style.display = "none" 5800 } 5801 } 5802 5803 // shopify logout 5804 const logoutLink = document.querySelectorAll('a[href*="/account/logout"]'); 5805 logoutLink.forEach((element) => { 5806 element.addEventListener("click", (event) => { 5807 event.preventDefault() 5808 handleLogout() 5809 }) 5810 }); 5811 5812 const logoutElement = document.getElementById('logout-button-desktop') 5813 if(logoutElement) logoutElement.addEventListener('click', handleLogout); 5814 5815 //mobile 5816 const logoutElementMobile = document.getElementById('logout-button-mobile') 5817 if(logoutElementMobile) logoutElementMobile.addEventListener('click', handleLogout); 5818 } 5819 5820 let isElementsWithAccountClickable = true; 5821 5822 // Add a click event listener to the document 5823 document.addEventListener('click', function(event) { 5824 const dropdownButton = document.getElementsByClassName('header--icon') ?. [0] 5825 // Check if the clicked element is the dropdown button or inside the dropdown menu 5826 const isClickInsideDropdown = dropdownButton?.contains(event.target); 5827 5828 // If the click is outside the dropdown, hide the dropdown 5829 const kwikpassLoggedInElement = document.getElementById("icon-kwikpass"); 5830 const crossIconElement = document.getElementById("icon-close-kwikpass") 5831 const drawerElement = document.getElementById("kwikpass-drawer-desktop") 5832 5833 if (! isClickInsideDropdown && isDropdownVisible && token) { 5834 drawerElement.style.display = "none"; 5835 crossIconElement.style.display = "none"; 5836 kwikpassLoggedInElement.style.display = "flex"; 5837 isDropdownVisible = ! isDropdownVisible; 5838 } 5839 5840 //mobile 5841 const dropdownButtonMbl = document.getElementsByClassName('header--icon--mobile')?.[0] 5842 5843 // Check if the clicked element is the dropdown button or inside the dropdown menu 5844 const isClickInsideDropdownMbl = dropdownButtonMbl?.contains(event.target); 5845 5846 // If the click is outside the dropdown, hide the dropdown 5847 const kwikpassLoggedInElementMbl = document.getElementById("icon-kwikpass-mobile"); 5848 const crossIconElementMbl = document.getElementById("icon-close-kwikpass-mobile") 5849 const drawerElementMbl = document.getElementById("kwikpass-drawer-mobile") 5850 5851 if (! isClickInsideDropdownMbl && isDropdownMobileVisible && token) { 5852 drawerElementMbl.style.display = "none"; 5853 crossIconElementMbl.style.display = "none"; 5854 kwikpassLoggedInElementMbl.style.display = "flex"; 5855 isDropdownMobileVisible = !isDropdownMobileVisible; 5856 } 5857 }); 5858 5859 document.addEventListener('DOMContentLoaded', function() { 5860 updateDOM(); 5861 }); 5862 5863 window.addEventListener('update-dom', function() { 5864 const kwikpassLoggedInElement = document.getElementById("icon-kwikpass"); 5865 const crossIconElement = document.getElementById("icon-close-kwikpass") 5866 const drawerElement = document.getElementById("kwikpass-drawer-desktop") 5867 if(drawerElement) drawerElement.style.display = "none"; 5868 if(crossIconElement) crossIconElement.style.display="none"; 5869 if(kwikpassLoggedInElement) kwikpassLoggedInElement.style.display="flex"; 5870
5871 const kwikpassLoggedInElementMbl = document.getElementById("icon-kwikpass-mobile"); 5872 const crossIconElementMbl = document.getElementById("icon-close-kwikpass-mobile") 5873 const drawerElementMbl = document.getElementById("kwikpass-drawer-mobile") 5874 if(drawerElementMbl) drawerElementMbl.style.display = "none"; 5875 if(crossIconElementMbl) crossIconElementMbl.style.display="none"; 5876 if(kwikpassLoggedInElementMbl) kwikpassLoggedInElementMbl.style.display="flex"; 5877 updateDOM(); 5878 }); 5879 addProfileIconInHorizon() 5880 updateDOM(); 5881 } 5882 5883 function handleDrawer1() { 5884 const token = getValueFromCookiesOrLocalStorage(XGokwikCoreToken(window.merchantInfo.environment)); 5885 if (token) { 5886 const kwikpassLoggedInElement = document.getElementById("icon-kwikpass"); 5887 const crossIconElement = document.getElementById("icon-close-kwikpass"); 5888 const drawerElement = document.getElementById("kwikpass-drawer-desktop"); 5889 // display cross icon and hide icon-kwikpass if isDropdownVisible = true else display icon-kwikpass and hide cross icon 5890 if(isDropdownVisible){ 5891 drawerElement.style.display = "none"; 5892 crossIconElement.style.display="none"; 5893 kwikpassLoggedInElement.style.display="flex"; 5894 }else{ 5895 drawerElement.style.display = "block"; 5896 crossIconElement.style.display="flex"; 5897 kwikpassLoggedInElement.style.display="none"; 5898 } 5899 isDropdownVisible = !isDropdownVisible; 5900 } 5901 } 5902 5903 function addLoginButton(){ 5904 function updateDOM() { 5905 token = getValueFromCookiesOrLocalStorage(XGokwikCoreToken(window.merchantInfo.environment)); 5906 const isLogout = sessionStorage.getItem('isLogout'); 5907 const phoneNumber = getValueFromCookiesOrLocalStorage('notify_phone_number'); 5908 5909 if ((!token && !isLogout) || (token && !phoneNumber)) { 5910 openIframe('kp_sso_token') 5911 } 5912 5913 const drawerElement = document.getElementById("kwikpass-drawer-desktop") 5914 if(drawerElement){ 5915 if(token){ 5916 document.getElementById("kp-login-button-header-logo").style.display = "none" 5917 document.getElementById("loggedin-icons").style.display = "block" 5918 }else{ 5919 document.getElementById("kp-login-button-header-logo").style.display = "flex" 5920 document.getElementById("loggedin-icons").style.display = "none" 5921 drawerElement.style.display = "none" 5922 } 5923 } 5924 // shopify logout 5925 const logoutLink = document.querySelectorAll('a[href*="/account/logout"]'); 5926 logoutLink.forEach((element) => { 5927 element.addEventListener("click", (event) => { 5928 event.preventDefault() 5929 handleLogout() 5930 }) 5931 }); 5932 5933 const logoutElement = document.getElementById('logout-button-desktop') 5934 5935 if(logoutElement) logoutElement.addEventListener('click', handleLogout); 5936 } 5937 5938 const elementsWithAccount = document.querySelectorAll('a[href="/account"]'); 5939 elementsWithAccount.forEach((element) => { 5940 element.addEventListener('click', async (e) => { 5941 e.preventDefault(); 5942 const customerId = getCustomerId() 5943 token = getValueFromCookiesOrLocalStorage(XGokwikCoreToken(window.merchantInfo.environment)); 5944 kpHandleLogin('/account'); 5945 }); 5946 }); 5947 5948 document.addEventListener('DOMContentLoaded', function() { 5949 updateDOM(); 5950 }); 5951 5952 window.addEventListener('update-dom', function() { 5953 updateDOM(); 5954 }); 5955 5956 //TODO: update this with a query for the required button 5957 5958 const loader = `<svg 5959 class="kploader" 5960 width="17" 5961 height="16"
5962 viewBox="0 0 17 16" 5963 fill="none" 5964 xmlns="http://www.w3.org/2000/svg" 5965 > 5966 <path 5967 d="M8.50004 1.33325V3.99992M8.50004 11.9999V14.6666M4.50004 7.99992H1.83337M15.1667 7.99992H12.5M13.219 12.7189L11.3334 10.8333M13.219 3.33321L11.3334 5.21883M3.78109 12.7189L5.66671 10.8333M3.78109 3.33321L5.66671 5.21883" 5968 stroke="#111" 5969 stroke-width="1.6" 5970 stroke-linecap="round" 5971 stroke-linejoin="round" 5972 /> 5973 </svg>` 5974 5975 /*removing existing profile(person) icon - person icon is not present in this store*/ 5976 const profileButtonElement = document.querySelector(ICON_SELECT_QUERY) || document.querySelector(HORIZON_PROFILE_ICON); 5977 5978 // defining css and add it to style tag in head 5979 function appendCss() { 5980 let css = ` 5981 .kploader { 5982 display: none; 5983 animation: rotate 1.5s linear infinite; 5984 } 5985 @keyframes rotate { 5986 100% { 5987 transform: rotate(360deg); 5988 } 5989 } 5990 .kp-disabled-text-color{ 5991 cursor: not-allowed; 5992 } 5993 #logout-button-desktop{ 5994 cursor: pointer; 5995 display: flex; 5996 justify-content: center; 5997 align-items: center; 5998 gap: 8px; 5999 font-size: 14px; 6000 color: #344054; 6001 font-style: normal; 6002 font-weight: 600; 6003 line-height: 20px; 6004 width: 100%; 6005 border-radius: 8px; 6006 padding: 8px 14px;; 6007 border: 1px solid var(--gray-300, #d0d5dd); 6008 background: var(--base-white, #fff); 6009 box-shadow: 0px 1px 2px 0px rgba(16, 24, 40, 0.05); 6010 } 6011 #loggedin-icons{ 6012 align-self: center; 6013 display: none; 6014 } 6015 #kwikpass-drawer-desktop{ 6016 padding: 16px; 6017 display: none; 6018 right: 0%; 6019 width: 18rem; 6020 position: absolute; 6021 top: 100%; 6022 box-shadow: 0px 0px 32px 0px rgba(16, 24, 40, 0.32); 6023 border-bottom-left-radius: 8px; 6024 border-bottom-right-radius: 8px; 6025 z-index: 999; 6026 background:#fff!important; 6027 } 6028 #kwikpass-drawer-desktop > ul{ 6029 margin: 0px 0px 10px 0px; 6030 padding: 0; 6031 width: 100%; 6032 } 6033 #kwikpass-drawer-desktop >ul >a{ 6034 cursor: pointer; 6035 width: 100%; 6036 display: flex!important; 6037 justify-content: space-between; 6038 align-items: center; 6039 padding: 0; 6040 color: inherit; 6041 margin-left:0!important; 6042 text-decoration: none; 6043 } 6044 #kwikpass-drawer-desktop >ul >a:hover , #kwikpass-drawer-desktop >ul >a:focus { 6045 text-decoration: none; 6046 } 6047 #kwikpass-drawer-desktop >ul >a:focus,#kwikpass-drawer-desktop >ul >a:active { 6048 text-decoration: none; 6049 } 6050 #kwikpass-drawer-desktop >ul >a:focus .kploader { 6051 display: block; 6052 } 6053 #kwikpass-drawer-desktop >ul >a:not(:focus) .kploader { 6054 display: none; 6055 } 6056 #kwikpass-drawer-desktop > ul > a > p { 6057 font-size: 14px; 6058 font-style: normal; 6059 font-weight: 500; 6060 line-height: 142.857%; 6061 display: inline-flex; 6062 gap: 8px; 6063 align-items: center; 6064 margin: 10px 0 10px 0; 6065 color: #000; 6066 } 6067 .header--icon{ 6068 cursor: pointer; 6069 position: relative; 6070 display: inline-flex; 6071 } 6072 path#svgkp-path { 6073 stroke-width: 1; 6074 } 6075 #icon-close-kwikpass{ 6076 display: none; 6077 border-radius: 50px; 6078 border: 1px solid; 6079 margin: 0; 6080 padding: 2px; 6081 align-items: center; 6082 justify-content: center; 6083 margin-left:3px; 6084 } 6085 `; 6086 6087 var style = document.createElement('style'); 6088 style.innerHTML = css; 6089 document.getElementsByTagName('head')[0].appendChild(style); 6090 } 6091 6092 // function call to append css to style tag 6093 appendCss() 6094 // existing user icon to show in the header 6095 // TODO : fetch user icon form backend 6096 const userIcon = `<svg width="23" height="23" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" id="svgkp"> 6097 <path d="M22.9129 12.935L13.7571 23.0474C13.5348 23.2929 13.1284 23.1084 13.1669 22.7794L14.0816 14.9731H10.6991C10.4034 14.9731 10.2484 14.6219 10.4478 14.4035L20.3133 3.59739C20.5589 3.32834 20.9984 3.58134 20.8891 3.92887L18.2354 12.3664H22.6607C22.9557 12.3664 23.1109 12.7163 22.9129 12.935Z" fill="#FEA203"/> 6098 <path id="svgkp-path" fill-rule="evenodd" clip-rule="evenodd" d="M16.6079 5.35819C16.4805 5.1933 16.3421 5.03582 16.1932 4.8869C15.2702 3.96387 14.0183 3.44531 12.7129 3.44531C11.4075 3.44531 10.1556 3.96387 9.2326 4.8869C8.30957 5.80993 7.79102 7.06183 7.79102 8.36719C7.79102 9.67255 8.30957 10.9244 9.2326 11.8475C9.48368 12.0986 9.75909 12.3197 10.0533 12.5086L11.0235 11.4503C10.7335 11.2914 10.4649 11.0911 10.227 10.8531C9.56766 10.1938 9.19727 9.29959 9.19727 8.36719C9.19727 7.43479 9.56766 6.54057 10.227 5.88127C10.8863 5.22196 11.7805 4.85156 12.7129 4.85156C13.6453 4.85156 14.5395 5.22196 15.1988 5.88127C15.3636 6.04604 15.5103 6.22549 15.6377 6.41654L16.6079 5.35819ZM20.6413 18.6497L19.6746 19.7132C20.1676 20.4122 20.4473 21.2264 20.4473 22.0781V23.8359C20.4473 24.2243 20.7621 24.5391 21.1504 24.5391C21.5387 24.5391 21.8535 24.2243 21.8535 23.8359V22.0781C21.8535 20.7863 21.4016 19.6103 20.6413 18.6497ZM12.3111 17.5078H10.3026C7.27113 17.5078 4.97852 19.6394 4.97852 22.0781V23.8359C4.97852 24.2243 4.66372 24.5391 4.27539 24.5391C3.88707 24.5391 3.57227 24.2243 3.57227 23.8359V22.0781C3.57227 18.6922 6.67684 16.1016 10.3026 16.1016H12.4885L12.3111 17.5078Z" fill="currentColor" stroke="currentColor"/> 6099 </svg>`; 6100 6101 // kwikpass icon for desktop - if user is not logged in 6102 const KwikpassNotLoggedIcon = `<div id="kp-login-button-header-logo" style="cursor: pointer;display: flex;align-items: center;">${userIcon}</div>` 6103
6104 // dropdown for desktop (opens on clicking kwikpass icon if user logged in) 6105 const drawerhtmlDesktop = `<div id="kwikpass-drawer-desktop"> 6106 <ul> 6107 <a href="javascript:void(0)" onclick="handleShopifyLogin(event,'/account')" tabindex="0" style=" display: flex"> 6108 <p> 6109 <svg 6110 width="20" 6111 height="20" 6112 viewBox="0 0 20 20" 6113 fill="none" 6114 xmlns="http://www.w3.org/2000/svg" 6115 > 6116 <path 6117 d="M4.6 2.20033L3.3 3.93366C3.04251 4.27697 2.91377 4.44863 2.91676 4.59232C2.91936 4.71736 2.97799 4.83462 3.07646 4.91172C3.18962 5.00032 3.40419 5.00032 3.83333 5.00032H16.1667C16.5958 5.00032 16.8104 5.00032 16.9235 4.91172C17.022 4.83462 17.0806 4.71736 17.0832 4.59232C17.0862 4.44863 16.9575 4.27697 16.7 3.93366L15.4 2.20033M4.6 2.20033C4.74667 2.00477 4.82 1.90699 4.91294 1.83647C4.99525 1.77401 5.08846 1.72741 5.18782 1.69903C5.3 1.66699 5.42222 1.66699 5.66667 1.66699H14.3333C14.5778 1.66699 14.7 1.66699 14.8122 1.69903C14.9115 1.72741 15.0047 1.77401 15.0871 1.83647C15.18 1.90699 15.2533 2.00477 15.4 2.20033M4.6 2.20033L3.03333 4.28921C2.83545 4.55306 2.73651 4.68498 2.66625 4.83026C2.6039 4.95917 2.55843 5.09559 2.53096 5.23612C2.5 5.3945 2.5 5.55941 2.5 5.88921L2.5 15.667C2.5 16.6004 2.5 17.0671 2.68166 17.4236C2.84144 17.7372 3.09641 17.9922 3.41002 18.152C3.76654 18.3337 4.23325 18.3337 5.16667 18.3337L14.8333 18.3337C15.7668 18.3337 16.2335 18.3337 16.59 18.152C16.9036 17.9922 17.1586 17.7372 17.3183 17.4236C17.5 17.0671 17.5 16.6004 17.5 15.667V5.88921C17.5 5.55941 17.5 5.3945 17.469 5.23613C17.4416 5.09559 17.3961 4.95918 17.3338 4.83026C17.2635 4.68498 17.1646 4.55306 16.9667 4.28921L15.4 2.20033M13.3333 8.33366C13.3333 9.21771 12.9821 10.0656 12.357 10.6907C11.7319 11.3158
611710.8841 11.667 10 11.667C9.11594 11.667 8.2681 11.3158 7.64298 10.6907C7.01786 10.0656 6.66667 9.21771 6.66667 8.33366" 6118 stroke="currentColor" 6119 stroke-width="1.66667" 6120 stroke-linecap="round" 6121 stroke-linejoin="round" 6122 fill="none" 6123 /> 6124 </svg> 6125 Order History 6126 </p> 6127 6128 ${loader} 6129 </a> 6130 </ul> 6131 <button id="logout-button-desktop"> 6132 Logout 6133 <svg 6134 width="20" 6135 height="20" 6136 viewBox="0 0 20 20" 6137 fill="none" 6138 xmlns="http://www.w3.org/2000/svg" 6139 > 6140 <path 6141 d="M15 6.66667L18.3334 10M18.3334 10L15 13.3333M18.3334 10H7.50002M12.5 3.50337C11.4377 2.86523 10.2044 2.5 8.88891 2.5C4.90019 2.5 1.66669 5.85786 1.66669 10C1.66669 14.1421 4.90019 17.5 8.88891 17.5C10.2044 17.5 11.4377 17.1348 12.5 16.4966" 6142 stroke="currentColor" 6143 stroke-width="1.66667" 6144 stroke-linecap="round" 6145 stroke-linejoin="round" 6146 fill="none" 6147 /> 6148 </svg> 6149 </button> 6150 </div>`; 6151 6152 const kwikpassLoggedInIcon = ` 6153 <div id="loggedin-icons" > 6154 <div id="icon-close-kwikpass" class="icon-close-kwikpass" style="height: 20px; width:20px; cursor: pointer;" onclick="handleDrawer1()"> 6155 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 6156 <path d="M18 6L6 18M6 6L18 18" stroke="currentColor" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> 6157 </svg> 6158 </div> 6159 <div style="cursor: pointer;display: flex;" onclick="handleDrawer1()" id="icon-kwikpass"> 6160 ${userIcon} 6161 </div> 6162 </div>`; 6163 6164 6165 // It will change based on theme 6166 const personIconElement = document.querySelector(ICON_SELECT_QUERY)?.parentElement || document.querySelector(HORIZON_PROFILE_ICON)?.parentElement 6167 const html = ` 6168 ${KwikpassNotLoggedIcon} 6169 ${kwikpassLoggedInIcon} 6170 ${drawerhtmlDesktop} 6171 `; 6172 6173 6174 if(!document.getElementsByClassName("header--icon")?.[0]){ 6175 const kwipassDesktopNode = document.createElement('div') 6176 kwipassDesktopNode.className="header--icon" 6177 kwipassDesktopNode.innerHTML = html 6178 personIconElement?.replaceChild(kwipassDesktopNode,profileButtonElement) 6179 } 6180 6181 let timerId=null; 6182 document.getElementById('kp-login-button-header-logo')?.addEventListener('click', () => { 6183 clearTimeout(timerId); 6184 timerId = null; 6185 handleKpAndShopifyLogin(); 6186 }); 6187 const kwikpassMobileIconElement = document.getElementById('kp-login-button-header-logo-mobile'); 6188 if (kwikpassMobileIconElement) { 6189 kwikpassMobileIconElement.addEventListener('click', () => { 6190 clearTimeout(timerId); 6191 timerId = null; 6192 handleKpAndShopifyLogin(); 6193 }); 6194 } 6195 6196 updateDOM(); 6197 6198 } 6199 6200 let isdomReady = false; 6201 document.addEventListener('DOMContentLoaded', function() { 6202 isdomReady = true; 6203 }, { once: true }); 6204 6205 function handleManualIntegration(){ 6206 if(isdomReady){ 6207 handleDOMUpdate(); 6208 }else{ 6209 document.addEventListener('DOMContentLoaded', function() { 6210 handleDOMUpdate(); 6211 }); 6212 } 6213 6214 window.addEventListener('update-dom', function() { 6215 handleDOMUpdate(); 6216 }); 6217 } 6218 6219 function handleNewVersionsOfHorizon(){ 6220 const headerEl = document.querySelector("header"); 6221 6222 if (headerEl) { 6223 // Create an observer to watch attribute changes 6224 const observer = new MutationObserver((mutationsList) => { 6225 for (const mutation of mutationsList) { 6226 if ( 6227 mutation.type === "attributes" && 6228 mutation.attributeName === "data-hydrated" 6229 ) { 6230 const newValue = headerEl.getAttribute("data-hydrated"); 6231 if (newValue === "true") { 6232 6233 addProfileIconInHorizon(); 6234 const drawerElementMobile = document.getElementById("kwikp
6234ass-drawer-mobile") 6235 if(drawerElementMobile){ 6236 if(token){ 6237 document.getElementById("kp-login-button-header-logo-mobile").style.display = "none" 6238 document.getElementById("loggedin-icons-mobile").style.display = "block" 6239 }else{ 6240 document.getElementById("kp-login-button-header-logo-mobile").style.display = "flex" 6241 document.getElementById("loggedin-icons-mobile").style.display = "none" 6242 drawerElementMobile.style.display = "none" 6243 } 6244 } 6245 6246 const drawerElement = document.getElementById("kwikpass-drawer-desktop") 6247 if(drawerElement){ 6248 if(token){ 6249 document.getElementById("kp-login-button-header-logo").style.display = "none" 6250 document.getElementById("loggedin-icons").style.display = "block" 6251 }else{ 6252 document.getElementById("kp-login-button-header-logo").style.display = "flex" 6253 document.getElementById("loggedin-icons").style.display = "none" 6254 drawerElement.style.display = "none" 6255 } 6256 } 6257 const logoutElement = document.getElementById('logout-button-desktop') 6258 if(logoutElement) logoutElement.addEventListener('click', handleLogout); 6259 6260 //mobile 6261 const logoutElementMobile = document.getElementById('logout-button-mobile') 6262 if(logoutElementMobile) logoutElementMobile.addEventListener('click', handleLogout); 6263 6264 // Stop observing once done (optional) 6265 observer.disconnect(); 6266 } 6267 } 6268 } 6269 }); 6270 6271 observer.observe(headerEl, { attributes: true }); 6272 6273 setTimeout(() => { 6274 observer.disconnect(); 6275 }, 10000); 6276 6277} 6278 6279 } 6280 6281 /** 6282 * Identifies account-related URLs that must be gated until KwikPass scripts load. 6283 */ 6284 function isAccountPath(pathname) { 6285 if (!pathname) return false; 6286 return ( 6287 pathname === '/account' || 6288 pathname.startsWith('/account/login') || 6289 pathname.startsWith('/account/register') || 6290 pathname.endsWith('/account') || 6291 pathname.indexOf('customer_authentication') !== -1 || 6292 pathname === '/account/addresses' 6293 ); 6294 } 6295 6296 /** 6297 * KwikpassAccountGate 6298 * ------------------- 6299 * Blocks navigation to account pages (see isAccountPath) until every required 6300 * KwikPass script has loaded successfully. 6301 * 6302 * Design notes: 6303 * - A SINGLE delegated click listener is attached on `document` in the CAPTURE 6304 * phase. This means it runs before any bubbling / inline `onclick` handlers, 6305 * so navigation is reliably blocked even for links clicked before scripts 6306 * finish loading (the race condition we care about). No per-anchor listeners. 6307 * - A MutationObserver only manages the visual `kwikpass-loading` class on 6308 * dynamically injected account links; the actual click-blocking never depends 6309 * on the observer, so newly added links are protected immediately by delegation. 6310 * - Loading state is centralized: every registered script key must flip to true 6311 * before the gate lifts. If ANY script fails, the gate stays locked. 6312 */ 6313 var KwikpassAccountGate = (function () { 6314 var LOADING_CLASS = 'kwikpass-loading'; 6315 var STYLE_ID = 'kwikpass-gate-style'; 6316 6317 var scriptStatus = Object.create(null); // key -> true once that script loads 6318 var requiredScripts = []; 6319 var failed = false; // a required script errored -> stay locked 6320 var unlocked = false; // gate lifted; navigation allowed 6321 var observer = null; 6322 var clickListenerAttached = false; 6323 6324 // Resolve an anchor's pathname tolerantly (handles relative/absolute hrefs). 6325 function getAnchorPath(anchor) { 6326 try { 6327 return anchor.pathname || new URL(anchor.href, window.location.origin).pathname; 6328 } catch (e) { 6329 return null; 6330 } 6331 } 6332 6333 function isAccountAnchor(anchor) { 6334 if (!anchor || anchor.tagName !== 'A') return false;
6335 var href = anchor.getAttribute('href'); 6336 // Ignore non-navigational hrefs (in-page anchors, javascript: handlers). 6337 if (!href || href.indexOf('javascript:') === 0 || href.charAt(0) === '#') return false; 6338 return isAccountPath(getAnchorPath(anchor)); 6339 } 6340 6341 // Single delegated capture-phase handler: blocks account-link navigation 6342 // while the gate is locked. 6343 function onDocumentClick(event) { 6344 if (unlocked) return; 6345 var target = event.target; 6346 var anchor = target && target.closest ? target.closest('a[href]') : null; 6347 if (!anchor || !isAccountAnchor(anchor)) return; 6348 event.preventDefault(); 6349 event.stopPropagation(); 6350 } 6351 6352 // Add/remove the visual loading class on every current account anchor. 6353 function refreshAnchorClasses() { 6354 var anchors = document.querySelectorAll('a[href]'); 6355 for (var i = 0; i < anchors.length; i++) { 6356 if (!isAccountAnchor(anchors[i])) continue; 6357 if (unlocked) anchors[i].classList.remove(LOADING_CLASS); 6358 else anchors[i].classList.add(LOADING_CLASS); 6359 } 6360 } 6361 6362 function injectStyle() { 6363 if (document.getElementById(STYLE_ID)) return; 6364 var style = document.createElement('style'); 6365 style.id = STYLE_ID; 6366 // Visual cue only; click-blocking is handled by the delegated listener. 6367 style.textContent = '.' + LOADING_CLASS + '{cursor:progress;opacity:.7;}'; 6368 (document.head || document.documentElement).appendChild(style); 6369 } 6370 6371 // Flag account links inside a freshly added DOM node. 6372 function flagNode(node) { 6373 if (node.nodeType !== 1) return; // element nodes only 6374 if (node.tagName === 'A' && isAccountAnchor(node)) { 6375 node.classList.add(LOADING_CLASS); 6376 } 6377 if (node.querySelectorAll) { 6378 var inner = node.querySelectorAll('a[href]'); 6379 for (var k = 0; k < inner.length; k++) { 6380 if (isAccountAnchor(inner[k])) inner[k].classList.add(LOADING_CLASS); 6381 } 6382 } 6383 } 6384 6385 // Watch for dynamically injected account links (visual class only). 6386 function startObserver() { 6387 if (observer || typeof MutationObserver === 'undefined') return; 6388 observer = new MutationObserver(function (mutations) { 6389 if (unlocked) return; 6390 for (var m = 0; m < mutations.length; m++) { 6391 var added = mutations[m].addedNodes; 6392 for (var n = 0; n < added.length; n++) flagNode(added[n]); 6393 } 6394 }); 6395 observer.observe(document.documentElement, { childList: true, subtree: true }); 6396 } 6397 6398 function lockNavigation() { 6399 if (!clickListenerAttached) { 6400 document.addEventListener('click', onDocumentClick, true); // capture phase 6401 clickListenerAttached = true; 6402 } 6403 injectStyle(); 6404 startObserver(); 6405 // The DOM may still be parsing when scripts are appended. 6406 if (document.readyState === 'loading') { 6407 document.addEventListener('DOMContentLoaded', refreshAnchorClasses, { once: true }); 6408 } else { 6409 refreshAnchorClasses(); 6410 } 6411 } 6412 6413 function unlockNavigation() { 6414 if (unlocked) return; 6415 unlocked = true; 6416 if (clickListenerAttached) { 6417 document.removeEventListener('click', onDocumentClick, true); 6418 clickListenerAttached = false; 6419 } 6420 if (observer) { 6421 observer.disconnect(); 6422 observer = null; 6423 } 6424 refreshAnchorClasses(); // strips the loading class from account links 6425 } 6426 6427 function maybeUnlock() { 6428 if (failed) return; 6429 for (var i = 0; i < requiredScripts.length; i++) { 6430 if (!scriptStatus[requiredScripts[i]]) return; // still waiting on a script 6431 } 6432 unlockNavigation(); 6433 } 6434 6435 return { 6436 // Register every script key up front and begin blocking immediately. 6437 init: function (keys) { 6438 requiredScripts = keys.slice(); 6439 for (var i = 0; i < keys.length; i++) scriptStatus[keys[i]] = false; 6440 failed = false; 6441 unlocked = false; 6442 lockNavigation(); 6443 }, 6444 markLoaded: function (key) { 6445 scriptStatus[key] = true; 6446 maybeUnlock(); 6447 }, 6448 markFailed: function (key, err) { 6449 failed = true; 6450 // Meaningful error; gate stays locked intentionally. 6451 console.error( 6452 '[KwikPass] Required script failed to load: "' + key + 6453 '". Account links remain disabled.', err 6454 ); 6455 } 6456 }; 6457 })(); 6458 6459 6460 var KP_LOW_PRIORITY_SCRIPT_URL = "https://pdp.gokwik.co/jify/build/sdk.js"; 6461 6462 function generateKpRequestId(){ 6463 return 'req-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2); 6464 } 6465 6466 function runWhenIdle(fn, timeout){ 6467 if(typeof requestIdleCallback === 'function'){ 6468 requestIdleCallback(fn, { timeout: timeout }); 6469 }else{ 6470 setTimeout(fn, 0); 6471 } 6472 } 6473 6474 function isJifyScriptAlreadyPresent(){ 6475 return !!document.querySelector('script[src*="/jify/"]'); 6476 } 6477 6478 function loadLowPriorityScript(src){ 6479 runWhenIdle(function(){
6480 try{ 6481 if(isJifyScriptAlreadyPresent()){ 6482 return; 6483 } 6484 var script = document.createElement('script'); 6485 script.src = src; 6486 script.type = 'module'; 6487 script.async = true; 6488 script.setAttribute('fetchpriority', 'low'); 6489 document.body.appendChild(script); 6490 }catch(err){ 6491 console.error(err); 6492 } 6493 }, 5000); 6494 } 6495 6496 function checkMerchantStatusAndLoadLowPriorityScript(merchantId){ 6497 runWhenIdle(function(){ 6498 try{ 6499 if(!merchantId){ 6500 return; 6501 } 6502 6503 if(isJifyScriptAlreadyPresent()){ 6504 return; 6505 } 6506 6507 var kpRequestId = generateKpRequestId(); 6508 var merchantStatusUrl = 'https://gkx.gokwik.co/jify/api/v1/merchant/status'; 6509 6510 fetch(merchantStatusUrl, { 6511 method: 'GET', 6512 priority: 'low', 6513 headers: { 6514 'gk-merchant-id': merchantId, 6515 'kp-merchant-id': merchantId, 6516 'kp-request-id': kpRequestId, 6517 }, 6518 }) 6519 .then(function(response){ return response.json(); }) 6520 .then(function(data){ 6521 if(data && data.enabled === true && KP_LOW_PRIORITY_SCRIPT_URL){ 6522 loadLowPriorityScript(KP_LOW_PRIORITY_SCRIPT_URL); 6523 } 6524 }) 6525 .catch(function(err){ console.error(err); }); 6526 }catch(err){ 6527 console.error(err); 6528 } 6529 }, 3000); 6530 } 6531 6532 function addScripts(){ 6533 var kwikpassCoreFnUrl="https://pdp.gokwik.co/kwikpass/kwikpass-core-functions-min.js" 6534 var kwikpassMerchantV2Url="https://pdp.gokwik.co/kwikpass/plugin/build/kp-merchant-v2.js"; 6535 var kwikpassSDKUrl="https://pdp.gokwik.co/kwikpass/plugin/build/kp-shopify-app-sdk.js"; 6536 6537 // Start blocking account-link navigation before the scripts are appended. 6538 KwikpassAccountGate.init(['core', 'merchantV2', 'sdk']); 6539 6540 var kpCoreFnScript = document.createElement('script'); 6541 kpCoreFnScript.src = kwikpassCoreFnUrl; 6542 kpCoreFnScript.async=false; 6543 6544 kpCoreFnScript.onload = () => { 6545 KwikpassAccountGate.markLoaded('core'); 6546 if(document.querySelector(ICON_SELECT_QUERY)){ 6547 addLoginButton(); 6548 }else if(document.querySelector(HORIZON_PROFILE_ICON)){ 6549 handleNewVersionsOfHorizon(); 6550 addLoginButtonForHorizon(); 6551 }else{ 6552 handleManualIntegration(); 6553 } 6554 }; 6555 kpCoreFnScript.onerror = (e) => KwikpassAccountGate.markFailed('core', e); 6556 6557 var kpMerchantV2Script = document.createElement('script'); 6558 kpMerchantV2Script.src = kwikpassMerchantV2Url; 6559 kpMerchantV2Script.async=false; 6560 kpMerchantV2Script.onload = () => KwikpassAccountGate.markLoaded('merchantV2'); 6561 kpMerchantV2Script.onerror = (e) => KwikpassAccountGate.markFailed('merchantV2', e); 6562 6563 var kpMerchantV2SDKScript = document.createElement('script'); 6564 kpMerchantV2SDKScript.src = kwikpassSDKUrl; 6565 kpMerchantV2SDKScript.async=false; 6566 kpMerchantV2SDKScript.onload = () => KwikpassAccountGate.markLoaded('sdk'); 6567 kpMerchantV2SDKScript.onerror = (e) => KwikpassAccountGate.markFailed('sdk', e); 6568 6569 // Appended together => the three scripts download in parallel 6570 // (async=false preserves execution order between them). 6571 document.body.appendChild(kpCoreFnScript); 6572 document.body.appendChild(kpMerchantV2Script); 6573 document.body.appendChild(kpMerchantV2SDKScript); 6574 } 6575 6576 const __kp_mid = "19g6im0kiwulw"; 6577 if(!__kp_mid || __kp_mid === ''){ 6578 window.merchantInfo = { 6579 ...window.merchantInfo, 6580 environment: "production", 6581 type: "merchantInfo", 6582 integrationType: "PLUGIN", 6583 } 6584 6585 var updateThemeMetaFieldGet = 'https://gkx.gokwik.co/kp/api/v1/shopify-app/update-theme-meta-field'; 6586 6587 6588 const options = { 6589 method: 'GET', 6590 headers: {accept: 'application/json', shop: window.Shopify.shop } 6591 }; 6592 6593 fetch(updateThemeMetaFieldGet, options) 6594 .then(response => response.json()) 6595 .then(response => { 6596 var data = response.data; 6597 if(data?.mid != null && data?.mid !== ''){ 6598 window.merchantInfo["mid"] = data.mid; 6599 } 6600 6601 addScripts(); 6602 checkMerchantStatusAndLoadLowPriorityScript(window.merchantInfo.mid); 6603 }) 6604 .catch(err => console.error(err)); 6605 }else{ 6606 window.merchantInfo = { 6607 ...window.merchantInfo, 6608 ...(__kp_mid != null && __kp_mid !== '' ? { mid: __kp_mid } : {}), 6609 environment: "production", 6610 type: "merchantInfo", 6611 integrationType: "PLUGIN", 6612 } 6613 6614 addScripts(); 6615 checkMerchantStatusAndLoadLowPriorityScript(window.merchantInfo.mid); 6616 } 6617 6618</script>
6618 6619<!-- END app snippet --> 6620 6621</div>
6621<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
6621 6622</body> 6623</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.