1<!doctype html> 2<html class="no-js" lang="en" dir="ltr"> 3<head> 4 <meta charset="utf-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 6 <meta name="viewport" content="width=device-width,initial-scale=1"> 7 <meta name="theme-color" content="#111111"> 8 <link rel="canonical" href="https://www.homedics.com/account/login"> 9 <link rel="preconnect" href="https://cdn.shopify.com" crossorigin> 10 <link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin> 11 <link rel="dns-prefetch" href="https://productreviews.shopifycdn.com"> 12 <link rel="dns-prefetch" href="https://ajax.googleapis.com"> 13 <link rel="dns-prefetch" href="https://maps.googleapis.com"> 14 <link rel="dns-prefetch" href="https://maps.gstatic.com"> 15 <link rel="stylesheet" href="https://use.typekit.net/ces3iif.css"> 16 17 <link rel="preconnect" href="https://fonts.googleapis.com"> 18 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 19 <link href="https://fonts.googleapis.com/css2?family=Quicksand:wght@700&display=swap" rel="stylesheet"> 20 <link href="https://fonts.googleapis.com/css2?family=Inter+Tight:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet"> 21
21<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js" defer="defer"></script>
21 22 <link href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide.min.css" rel="stylesheet"><link rel="shortcut icon" href="//www.homedics.com/cdn/shop/files/homedics-logo_2b17fb70-389a-4bdd-ab57-d086ce09a5a1_32x32.png?v=1758125808" type="image/png"/><title>Account 23– Homedics 24</title> 25<meta property="og:site_name" content="Homedics"> 26 <meta property="og:url" content="https://www.homedics.com/account/login"> 27 <meta property="og:title" content="Account"> 28 <meta property="og:type" content="website"> 29 <meta property="og:description" content="The leading global manufacturer of health and wellness products that help relax your body, de-stress your mind and promote your well-being."><meta property="og:image" content="http://www.homedics.com/cdn/shop/files/hp_humidifier_dt.webp?v=1760613716"> 30 <meta property="og:image:secure_url" content="https://www.homedics.com/cdn/shop/files/hp_humidifier_dt.webp?v=1760613716"> 31 <meta property="og:image:width" content="1920"> 32 <meta property="og:image:height" content="821"><meta name="twitter:site" content="@"> 33 <meta name="twitter:card" content="summary_large_image"> 34 <meta name="twitter:title" content="Account"> 35 <meta name="twitter:description" content="The leading global manufacturer of health and wellness products that help relax your body, de-stress your mind and promote your well-being."> 36<style data-shopify>@font-face { 37 font-family: Quicksand; 38 font-weight: 500; 39 font-style: normal; 40 font-display: swap; 41 src: url("//www.homedics.com/cdn/fonts/quicksand/quicksand_n5.8f86b119923a62b5ca76bc9a6fb25da7a7498802.woff2") format("woff2"), 42 url("//www.homedics.com/cdn/fonts/quicksand/quicksand_n5.c31882e058f76d723a7b6b725ac3ca095b5a2a70.woff") format("woff"); 43} 44 45 @font-face { 46 font-family: Quicksand; 47 font-weight: 400; 48 font-style: normal; 49 font-display: swap; 50 src: url("//www.homedics.com/cdn/fonts/quicksand/quicksand_n4.bf8322a9d1da765aa396ad7b6eeb81930a6214de.woff2") format("woff2"), 51 url("//www.homedics.com/cdn/fonts/quicksand/quicksand_n4.fa4cbd232d3483059e72b11f7239959a64c98426.woff") format("woff"); 52} 53 54 55 @font-face { 56 font-family: Quicksand; 57 font-weight: 600; 58 font-style: normal; 59 font-display: swap; 60 src: url("//www.homedics.com/cdn/fonts/quicksand/quicksand_n6.2d744c302b66242b8689223a01c2ae7d363b7b45.woff2") format("woff2"), 61 url("//www.homedics.com/cdn/fonts/quicksand/quicksand_n6.0d771117677705be6acb5844d65cf2b9cbf6ea3d.woff") format("woff"); 62} 63 64 65 66</style><link href="//www.homedics.com/cdn/shop/t/138/assets/theme.css?v=117727355429574981941787623451" rel="stylesheet" type="text/css" media="all" /> 67 <link href="//www.homedics.com/cdn/shop/t/138/assets/header.css?v=143016608835276720641787623451" rel="stylesheet" type="text/css" media="all" /> 68<style data-shopify>:root { 69 --typeHeaderPrimary: "Inter Tight"; 70 --typeHeaderFallback: sans-serif; 71 --typeHeaderSize: 36px; 72 --typeHeaderWeight: 500; 73 --typeHeaderLineHeight: 1; 74 --typeHeaderSpacing: 0.0em; 75 76 --typeBasePrimary:Quicksand; 77 --typeBaseFallback:sans-serif; 78 --typeBaseSize: 18px; 79 --typeBaseWeight: 500; 80 --typeBaseSpacing: 0.025em; 81 --typeBaseLineHeight: 1.4; 82 --typeBaselineHeightMinus01: 1.3; 83 84 --typeCollectionTitle: 20px; 85 86 --iconWeight: 2px; 87 --iconLinecaps: miter; 88 89 90 --buttonRadius: 50px; 91 92 93 --colorGridOverlayOpacity: 0.1; 94 --colorAnnouncement: #076669; 95 --colorAnnouncementText: #ffffff; 96 97 --colorBody: #ffffff; 98 --colorBodyAlpha05: rgba(255, 255, 255, 0.05); 99 --colorBodyDim: #f2f2f2; 100 --colorBodyLightDim: #fafafa; 101 --colorBodyMediumDim: #f5f5f5; 102 103 104 --colorBorder: #e8e8e1; 105 106 --colorBtnPrimary: #111111; 107 --colorBtnPrimaryLight: #2b2b2b; 108 --colorBtnPrimaryDim: #040404; 109 --colorBtnPrimaryText: #ffffff; 110 111 --colorCartDot: #ff4f33; 112 113 --colorDrawers: #f8f4ec; 114 --colorDrawersDim: #f1e9d9; 115 --colorDrawerBorder: #e8e8e1; 116 --colorDrawerText: #535353; 117 --colorDrawerTextDark: #2d2d2d; 118 --colorDrawerButton: #111111; 119 --colorDrawerButtonText: #ffffff; 120 121 --colorFooter: #94e5e1; 122 --colorFooterText: #000000; 123 --colorFooterTextAlpha01: #000000; 124 125 --colorGridOverlay: #000000; 126 --colorGridOverlayOpacity: 0.1; 127 128 --colorHeaderTextAlpha01: rgba(83, 83, 83, 0.1); 129 130 --colorHeroText: #ffffff; 131 132 --colorSmallImageBg: #ffffff; 133 --colorLargeImageBg: #0f0f0f; 134 135 --colorImageOverlay: #000000; 136 --colorImageOverlayOpacity: 0.1; 137 --colorImageOverlayTextShadow: 0.2; 138 139 --colorLink: #000000; 140 141 --colorModalBg: rgba(230, 230, 230, 0.6); 142 143 --colorNav: #f8f4ec; 144 --colorNavText: #535353; 145 146 --colorPrice: #1c1d1d; 147 148 --colorSaleTag: #1c1d1d; 149 --colorSaleTagText: #ffffff; 150 151 --colorTextBody: #000000; 152 --colorTextBodyAlpha015: rgba(0, 0, 0, 0.15); 153 --colorTextBodyAlpha005: rgba(0, 0, 0, 0.05); 154 --colorTextBodyAlpha008: rgba(0, 0, 0, 0.08); 155 --colorTextSavings: #c20000; 156 157 --urlIcoSelect: url(//www.homedics.com/cdn/shop/t/138/assets/ico-select.svg);
158 --urlIcoSelectFooter: url(//www.homedics.com/cdn/shop/t/138/assets/ico-select-footer.svg); 159 --urlIcoSelectWhite: url(//www.homedics.com/cdn/shop/t/138/assets/ico-select-white.svg); 160 161 --grid-gutter: 17px; 162 --drawer-gutter: 20px; 163 164 --sizeChartMargin: 25px 0; 165 --sizeChartIconMargin: 5px; 166 167 --newsletterReminderPadding: 40px; 168 169 /*Shop Pay Installments*/ 170 --color-body-text: #000000; 171 --color-body: #ffffff; 172 --color-bg: #ffffff; 173 } 174 175 .placeholder-content { 176 background-image: linear-gradient(100deg, #ffffff 40%, #f7f7f7 63%, #ffffff 79%); 177 }</style>
177<script type="text/javascript"> 178 (function (c, l, a, r, i, t, y) { 179 c[a] = c[a] || function () { 180 (c[a].q = c[a].q || []).push(arguments) 181 }; 182 t = l.createElement(r); 183 t.async = 1; 184 t.src = "https://www.clarity.ms/tag/" + i; 185 y = l.getElementsByTagName(r)[0]; 186 y.parentNode.insertBefore(t, y); 187 })(window, document, "clarity", "script", "go2fqeeaf3"); 188 </script>
188 189 190
190<script> 191 document.documentElement.className = document.documentElement.className.replace('no-js', 'js'); 192 193 window.theme = window.theme || {}; 194 theme.routes = { 195 home: "/", 196 cart: "/cart.js", 197 cartPage: "/cart", 198 cartAdd: "/cart/add.js", 199 cartChange: "/cart/change.js", 200 search: "/search", 201 predictiveSearch: "/search/suggest" 202 }; 203 theme.strings = { 204 soldOut: "Sold Out", 205 unavailable: "Unavailable", 206 inStockLabel: "In stock, ready to ship", 207 oneStockLabel: "Low stock - [count] item left", 208 otherStockLabel: "Low stock - [count] items left", 209 willNotShipUntil: "Ready to ship [date]", 210 willBeInStockAfter: "Back in stock [date]", 211 waitingForStock: "Backordered, shipping soon", 212 savePrice: "Save [saved_amount]", 213 cartEmpty: "Your cart is currently empty.", 214 cartTermsConfirmation: "You must agree with the terms and conditions of sales to check out", 215 searchCollections: "Collections", 216 searchPages: "Pages", 217 searchArticles: "Articles", 218 productFrom: "Starting at ", 219 maxQuantity: "You can only have [quantity] of [title] in your cart." 220 }; 221 theme.settings = { 222 cartType: "drawer", 223 isCustomerTemplate: true, 224 moneyFormat: "${{amount}}", 225 saveType: "dollar", 226 productImageSize: "square", 227 productImageCover: false, 228 predictiveSearch: true, 229 predictiveSearchType: null, 230 predictiveSearchVendor: false, 231 predictiveSearchPrice: false, 232 quickView: false, 233 freeShippingThreshold: 9900, 234 themeName: 'Impulse', 235 themeVersion: "7.6.2" 236 }; 237 </script>
237 238 239
239<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
239<meta name="google-site-verification" content="qckpJwYqdd2ng8SGoh7S92SnKxJE9eH3_q6Pm17fgc4"> 240<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/70341165241/digital_wallets/dialog"> 241<meta id="in-context-paypal-metadata" data-shop-id="70341165241" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 242<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="alternate" hreflang="x-default" href="https://www.homedics.com/account/login"> 243<link rel="alternate" hreflang="en" href="https://www.homedics.com/account/login"> 244<link rel="alternate" hreflang="en-CA" href="https://www.homedics.com/en-ca/account/login">
245<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=2720465081"></script>
245 246<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
247<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=2720465081&shop_id=70341165241" crossorigin="anonymous"></script>
vendor: 1 bytes, line 247
247
248<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":70341165241,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/70341165241","merchantName":"Homedics","requiredBillingContactFields":["postalAddress","email"],"requiredShippingContactFields":["postalAddress","email"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Homedics","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 248
248
249<script id="shopify-features" type="application/json">{"accessToken":"4a4ee7960a87c3287705227ee0769347","betas":["rich-media-storefront-analytics"],"domain":"www.homedics.com","predictiveSearch":true,"shopId":70341165241,"locale":"en"}</script>
vendor: 1 bytes, line 249
249
250<script>var Shopify = Shopify || {}; 251Shopify.shop = "homedics-prod.myshopify.com"; 252Shopify.locale = "en"; 253Shopify.currency = {"active":"USD","rate":"1.0"}; 254Shopify.country = "US"; 255Shopify.theme = {"name":"Homedics-theme-LimitedEditionSS","id":161326137529,"schema_name":"Impulse","schema_version":"7.6.2","theme_store_id":null,"role":"main"}; 256Shopify.theme.handle = "null"; 257Shopify.theme.style = {"id":null,"handle":null}; 258Shopify.cdnHost = "www.homedics.com/cdn"; 259Shopify.routes = Shopify.routes || {}; 260Shopify.routes.root = "/"; 261Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 262Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 263Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 264Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 264
264
265<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 265
265
266<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 266
266
267<script> 268 window.ShopifyPay = window.ShopifyPay || {}; 269 window.ShopifyPay.apiHost = "shop.app\/pay"; 270 window.ShopifyPay.redirectState = null; 271</script>
vendor: 1 bytes, line 271
271
272<script> 273 window.Shopify = window.Shopify || {}; 274 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 275 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 276 window.Shopify.SignInWithShop.eligible = true; 277</script>
vendor: 1 bytes, line 277
277
278<script id="shop-js-analytics" type="application/json">{"pageType":"customers/login"}</script>
vendor: 1 bytes, line 278
278
279<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-customer-accounts.en.esm.js"></script>
vendor: 1 bytes, line 279
279
280<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"></script>
vendor: 1 bytes, line 280
280
281<script type="module"> 282 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-customer-accounts.en.esm.js"); 283await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"); 284 285 window.Shopify.SignInWithShop?.initCustomerAccounts?.(true, {"fedCMEnabled":true,"windoidEnabled":true}); 286window.Shopify.SignInWithShop?.initCustomerAccountsSignUp?.({"fedCMEnabled":true,"windoidEnabled":true}); 287 288</script>
vendor: 1 bytes, line 288
288
289<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 289
289
290<script type="module"> 291 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 292 293 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 294 295</script>
vendor: 1 bytes, line 295
295
296<script> 297 window.Shopify = window.Shopify || {}; 298 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 299 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"]}; 300</script>
vendor: 1 bytes, line 300
300
301<script>(function() { 302 var isLoaded = false; 303 function asyncLoad() { 304 if (isLoaded) return; 305 isLoaded = true; 306 var urls = ["https:\/\/cdn.rebuyengine.com\/onsite\/js\/rebuy.js?shop=homedics-prod.myshopify.com","https:\/\/beacon.riskified.com\/?shop=homedics-prod.myshopify.com","https:\/\/cdn.attn.tv\/homedics\/dtag.js?shop=homedics-prod.myshopify.com","https:\/\/app.octaneai.com\/p6znppga1tveat7t\/shopify.js?x=PszLt8uWLXIhHhnD\u0026shop=homedics-prod.myshopify.com","https:\/\/cdn.noibu.com\/collect-core.js?shop=homedics-prod.myshopify.com","\/\/cdn.shopify.com\/proxy\/c2a8d07c2227e7cf55fa471217c15987e82dad976b1089b6f280b187f4bc705b\/apps.bazaarvoice.com\/deployments\/homedics\/main_site\/production\/en_US\/bv.js?shop=homedics-prod.myshopify.com\u0026sp-cache-control=cHVibGljLCBtYXgtYWdlPTkwMA"]; 307 for (var i = 0; i < urls.length; i++) { 308 var s = document.createElement('script'); 309 s.type = 'text/javascript'; 310 s.async = true; 311 s.src = urls[i]; 312 var x = document.getElementsByTagName('script')[0]; 313 x.parentNode.insertBefore(s, x); 314 } 315 }; 316 if(window.attachEvent) { 317 window.attachEvent('onload', asyncLoad); 318 } else { 319 window.addEventListener('load', asyncLoad, false); 320 } 321})();</script>
vendor: 1 bytes, line 321
321
322<script id="__st">var __st={"a":70341165241,"offset":-25200,"reqid":"30c24f2b-1bca-493a-bbe1-1d4943c90bdc-1790854169","pageurl":"www.homedics.com\/account\/login?return_url=%2Faccount","u":"b71dd347b6b4"};</script>
vendor: 1 bytes, line 322
322
323<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 323
323
324<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(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){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 324
324
325<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//www.homedics.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 325
325
326<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 = "//www.homedics.com/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>
326<script crossorigin="anonymous" defer="defer" src="//www.homedics.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 326
326
327<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 327
327
328<script> 329 window.Shopify = window.Shopify || {}; 330 window.Shopify.MCP = window.Shopify.MCP || {}; 331 window.Shopify.MCP.enabled = true; 332 window.Shopify.MCP.shop = "homedics-prod.myshopify.com"; 333 window.Shopify.MCP.mcpEndpoint = "https:\/\/www.homedics.com\/api\/mcp"; 334 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"]}}]; 335</script>
vendor: 1 bytes, line 335
335
336<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("\/\/www.homedics.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 337</script>
vendor: 1 bytes, line 337
337
338<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://www.homedics.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 339</script>
vendor: 1 bytes, line 339
339
340<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 341 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); 342</script>
vendor: 1 bytes, line 342
342
343<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})}})); 344</script>
344 345<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://www.homedics.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 346<style id="shopify-accelerated-checkout-cart"> 347 #shopify-buyer-consent { 348 margin-top: 1em; 349 display: inline-block; 350 width: 100%; 351} 352 353#shopify-buyer-consent.hidden { 354 display: none; 355} 356 357#shopify-subscription-policy-button { 358 background: none; 359 border: none; 360 padding: 0; 361 text-decoration: underline; 362 font-size: inherit; 363 cursor: pointer; 364} 365 366#shopify-subscription-policy-button::before { 367 box-shadow: none; 368} 369 370 </style> 371
372<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
372 373 374
374<script src="//www.homedics.com/cdn/shop/t/138/assets/vendor-scripts-v11.js" defer="defer"></script>
374<link rel="stylesheet" href="//www.homedics.com/cdn/shop/t/138/assets/country-flags.css"><link href="//www.homedics.com/cdn/shop/t/138/assets/collection.scss?v=174748679635659251301787623451" rel="stylesheet" type="text/css" media="all" /> 375 376 <link href="//www.homedics.com/cdn/shop/t/138/assets/html-elements.css?v=31006315027798035661787623451" rel="stylesheet" type="text/css" media="all" /> 377 378
378<script src="//www.homedics.com/cdn/shop/t/138/assets/theme.js?v=11178916913730204321787623412" defer="defer"></script>
378<script src="//www.homedics.com/cdn/shopifycloud/storefront/assets/themes_support/shopify_common-5f594365.js" defer="defer"></script>
378 379 380
380<script async src="https://apps.bazaarvoice.com/deployments/homedics/main_site/production/en_US/bv.js"></script>
380 381 <link rel="preconnect" href="https://rebuyengine.com" crossorigin> 382<link rel="preconnect" href="https://cdn.rebuyengine.com" crossorigin> 383<link rel="preconnect" href="https://cached.rebuyengine.com" crossorigin>
384<script async src="https://cdn.rebuyengine.com/onsite/js/rebuy.js?shop=homedics-prod.myshopify.com"></script>
384 385 386 387 388
389<script>
vendor: 377 bytes, lines 389-399
389 390 (function(w,d,s,l,i){ 391 w[l]=w[l]||[]; 392 w[l].push({'gtm.start': new Date().getTime(), event:'gtm.js'}); 393 var f=d.getElementsByTagName(s)[0], 394 j=d.createElement(s), 395 dl=l!='dataLayer'?'&l='+l:''; 396 j.async=true; 397 j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl; 398 f.parentNode.insertBefore(j,f); 399})(window,document,'script','dataLayer','
399GTM-T6TRD4N5
vendor: 4 bytes, line 399
399');
400</script>
400 401 402 403 404
405<script> 406 window.dgEvent = window.dgEvent || []; 407 function sync_receive_prefs(dgEventData) { 408 const cookiePreferences = dgEventData?.consentPreferences?.cookieOptions; 409 410 window.Shopify.loadFeatures( 411 [ 412 { 413 name: "consent-tracking-api", 414 version: "0.1", 415 }, 416 ], 417 (error) => { 418 if (error) { 419 console.error("Error loading Shopify Customer API", error); 420 } 421 window.Shopify.customerPrivacy.setTrackingConsent( 422 { 423 preferences: true, 424 analytics: window.DG_BANNER_API.categoryEnabled("performance"), 425 marketing: window.DG_BANNER_API.categoryEnabled("marketing"), 426 sale_of_data: window.DG_BANNER_API.categoryEnabled("marketing"), 427 }, 428 (arg) => console.log("Consent captured", arg) 429 ); 430 } 431 ); 432 } 433 434 window.dgEvent.push({ 435 event: "preference_callback", 436 params: sync_receive_prefs, 437 }); 438 439 window.dgEvent.push({ 440 event: "initial_preference_callback", 441 params: sync_receive_prefs, 442 }); 443</script>
443 444 445 446 447
447<script type="text/javascript"> (function (a, b, c, d, e, f, g) { 448 e['ire_o'] = c; 449 e[c] = e[c] || function () { 450 (e[c].a = e[c].a || []).push(arguments) 451 }; 452 f = d.createElement(b); 453 g = d.getElementsByTagName(b)[0]; 454 f.async = 1; 455 f.src = a; 456 g.parentNode.insertBefore(f, g); 457 })('https://utt.impactcdn.com/A2360407-885d-4b35-9812-3d88619035a91.js', 'script', 'ire', document, window); 458 ire('identify', { 459 customerid: '' /*INSERT CUSTOMER ID*/, 460 customeremail: '' /*INSERT SHA1 HASHED CUSTOMER EMAIL*/ 461 });</script>
461 462 463 <!-- Swiper --> 464 <link href="//www.homedics.com/cdn/shop/t/138/assets/swiper-bundle.min.css?v=117015111553890996371787623410" rel="stylesheet" type="text/css" media="all" /> 465
465<script src="//www.homedics.com/cdn/shop/t/138/assets/swiper-bundle.min.js?v=44949453089828286941787623410" defer="defer"></script>
465 466 467 <!-- Custom style & js --> 468 <link href="//www.homedics.com/cdn/shop/t/138/assets/theme-style.css?v=85277598746272944161787623411" rel="stylesheet" type="text/css" media="all" /> 469
469<script src="//www.homedics.com/cdn/shop/t/138/assets/theme-script.js?v=142125866774830749621787623411" defer="defer"></script>
469 470<!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/gdpr_cookie_consent/4fbe573f-a377-4fea-9801-3ee0858cae41 --> 471<link rel="preconnect" href="https://app.consentmo.com" crossorigin data-csm-preconnect="app"> 472<link rel="dns-prefetch" href="https://workers.consentmo.com" data-csm-preconnect="workers"> 473<link rel="dns-prefetch" href="https://storage.consentmo.com" data-csm-preconnect="storage"> 474<link rel="preconnect" href="https://cdn.consentmo.com" crossorigin data-csm-preconnect="cdn"><link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="banner"> 475 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-dialog.consentmo.js" crossorigin data-csm-layout-prefetch="dialog"> 476 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-box.consentmo.js" crossorigin data-csm-layout-prefetch="box"> 477 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-smart-banner.consentmo.js" crossorigin data-csm-layout-prefetch="smart"> 478 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-mobile-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="mobile">
478<script> 479(function () { 480 try { 481 document.documentElement.classList.add('csm-cookie-embed'); 482 } catch (e) {} 483})(); 484</script>
484<script data-consentmo-data-src-bootstrap> 485(function () { 486 'use strict'; 487 if (window.__consentmoDataSrcBootstrapInit) return; 488 window.__consentmoDataSrcBootstrapInit = true; 489 490 var DATA_SRC_SELECTOR = [ 491 'script[data-src*="consentmo_cookie_consent"]', 492 'script[data-src*="gdpr_cookie_consent.min"]', 493 'script[data-src*="gdrp_cookie_consent_unlimited"]' 494 ].join(','); 495 496 function activateConsentmoDataSrcScripts() { 497 if (!window.Shopify || !window.Shopify.shop) return; 498 document.querySelectorAll(DATA_SRC_SELECTOR).forEach(function (scriptEl) { 499 // getAttribute: src="" must not count as "already has src" (.src === page URL). 500 if (scriptEl.getAttribute('src')) return; 501 var url = scriptEl.getAttribute('data-src'); 502 if (!url) return; 503 if (scriptEl.getAttribute('type') === 'text/plain') { 504 scriptEl.removeAttribute('type'); 505 } 506 scriptEl.src = url; 507 }); 508 } 509 function scheduleActivation() { 510 activateConsentmoDataSrcScripts(); 511 // Retry on next task so other DCL handlers (lazy-loaders) can finish setting Shopify.shop / data-src first. 512 setTimeout(activateConsentmoDataSrcScripts, 0); 513 } 514 if (document.readyState === 'loading') { 515 document.addEventListener('DOMContentLoaded', scheduleActivation, { once: true }); 516 } else { 517 scheduleActivation(); 518 } 519})(); 520</script>
520 521 522 523<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 524 525 526 527 528 529 530 531 532 533 534 535 536
536<script async src="https://static.klaviyo.com/onsite/js/VdUY92/klaviyo.js?company_id=VdUY92"></script>
536 537
537<script>!function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();</script>
537 538 539 540 541 542 543 544
544<script> 545 window.klaviyoReviewsProductDesignMode = false 546 </script>
546 547 548 549 550 551 552 553 554 555 556<!-- END app block --><!-- BEGIN app block: shopify://apps/impact-com/blocks/utt/adac1a7f-d17f-4936-8a12-45628cdd8add --> 557
558<script id="advocate_jwt_script" defer> 559 (function() { 560 if (window.advocateScriptInitialized) { 561 console.log("Advocate script already loaded, skipping..."); 562 return; 563 } 564 565 window.advocateScriptInitialized = true; 566 567 async function fetchJWT(shopUrl, customerId) { 568 try { 569 const response = await fetch(`https://saasler-impact.herokuapp.com/api/v1/advocate_widget_jwt?customer_id=${customerId}&shop_url=${shopUrl}`); 570 571 const data = await response.json(); 572 573 window.impactToken = data.jwt; 574 } catch (error) { 575 console.error("Error fetching data: ", error); 576 } 577 } 578 579 const shopUrl = Shopify.shop; 580 const customerId = __st.cid; 581 582 fetchJWT(shopUrl, customerId).then(() => { 583 const uttUrl = "https://utt.impactcdn.com/A2360407-885d-4b35-9812-3d88619035a91.js"; 584 585 (function(a,b,c,d,e,f,g){e['ire_o']=c;e[c]=e[c]||function(){(e[c].a=e[c].a||[]).push(arguments)};f=d.createElement(b);g=d.getElementsByTagName(b)[0];f.async=1;f.src=a;g.parentNode.insertBefore(f,g);})(`${uttUrl}`,'script','ire',document,window); ire('identify'); 586 }); 587 })(); 588</script>
588 589 590<!-- END app block --><!-- BEGIN app block: shopify://apps/attentive/blocks/attn-tag/8df62c72-8fe4-407e-a5b3-72132be30a0d -->
590<script type="text/javascript" src="https://ranlq.homedics.com/homedics/load" onerror=" var fallbackScript = document.createElement('script'); fallbackScript.src = 'https://cdn.attn.tv/homedics/dtag.js'; document.head.appendChild(fallbackScript);" data-source="loaded?source=app-embed" defer="defer"></script>
590 591 592 593<!-- END app block --><!-- BEGIN app block: shopify://apps/dynamic-yield-by-mastercard/blocks/dy-app-embed/4ba1f896-a657-43fa-9105-b465a2acc5cb --><!-- BEGIN app snippet: dy-scripts --><link rel="preconnect" href="//cdn.dynamicyield.com"> 594<link rel="preconnect" href="//st.dynamicyield.com"> 595<link rel="preconnect" href="//rcom.dynamicyield.com"> 596<link rel="dns-prefetch" href="//cdn.dynamicyield.com"> 597<link rel="dns-prefetch" href="//st.dynamicyield.com"> 598<link rel="dns-prefetch" href="//rcom.dynamicyield.com"> 599
600<script> 601/* ========================================================================== 602 Dynamic Yield <-> Shopify Customer Privacy integration 603 Sections: constants -> cookie helpers -> customer-privacy helpers (all 604 fail-safe) -> CMP consent gate -> serialized consent writer -> perf-based 605 dyid restore -> dyid/jsession sync -> bootstrapping. 606 ========================================================================== */ 607window.DYConsent = (function () { 608 const ONE_YEAR = 60 * 60 * 24 * 365; 609 const CMP_CONSENT_TIMEOUT_MS = 3000; 610 const DYID_COOKIE = '_dyid_server'; 611 const JSESSION_COOKIE = '_dy_app_jsession'; 612 613 /* ---------- Cookie helpers ---------- */ 614 function setOnEtldPlus1(name, value, maxAge) { 615 const parts = location.hostname.split('.'); 616 const maxAgeStr = maxAge ? `Max-Age=${maxAge}; ` : ''; 617 for (let i = parts.length - 2; i >= 0; i--) { 618 const domain = '.' + parts.slice(i).join('.'); 619 try { 620 document.cookie = value === null 621 ? `${name}=; Max-Age=0; Path=/; Domain=${domain}; SameSite=Lax; Secure` 622 : `${name}=${value}; ${maxAgeStr}Path=/; Domain=${domain}; SameSite=Lax; Secure`; 623 if (document.cookie.includes(name + '=')) return domain; 624 } catch (_) {} 625 } 626 } 627 628 function getCookie(name) { 629 return document.cookie 630 .split('; ') 631 .find(c => c.startsWith(name + '=')) 632 ?.split('=')[1]; 633 } 634 635 function clearCookie(name) { 636 setOnEtldPlus1(name, null, 0); 637 } 638 639 /* ---------- Customer Privacy helpers (every Shopify API access fail-safe) ---------- */ 640 function canBeTracked() { 641 try { 642 return !!window.Shopify?.customerPrivacy?.userCanBeTracked?.(); 643 } catch (_) { 644 return false; 645 } 646 } 647 648 function currentConsent() { 649 try { 650 return window.Shopify?.customerPrivacy?.currentVisitorConsent?.() || null; 651 } catch (_) { 652 return null; 653 } 654 } 655 656 function isConsentDeclared(consent) { 657 return !!consent && Object.values(consent).some(v => v === 'yes' || v === 'no'); 658 } 659 660 function getTrackingMetafield(key) { 661 try { 662 return window.Shopify?.customerPrivacy?.getTrackingConsentMetafield?.(key); 663 } catch (_) { 664 return undefined; 665 } 666 } 667 668 /* ---------- CMP consent gate ---------- 669 setTrackingConsent() is single-authority - a call from us while a CMP (e.g. OneTrust) has an 670 in-flight call of its own can clobber the CMP's consent values with blanks. Resolves 671 immediately if consent is already declared (CMP finished before this ran), otherwise on the 672 CMP's first `visitorConsentCollected` event, and always within CMP_CONSENT_TIMEOUT_MS so DY's 673 own sync still runs (via the queue below) on shops with no CMP installed at all. */ 674 const cmpConsentSettled = new Promise(resolve => { 675 let settled = false; 676 function settle() { 677 if (settled) return; 678 settled = true; 679 document.removeEventListener('visitorConsentCollected', settle); 680 resolve(); 681 } 682 if (isConsentDeclared(currentConsent())) { 683 settle(); 684 return; 685 } 686 document.addEventListener('visitorConsentCollected', settle, { once: true }); 687 setTimeout(settle, CMP_CONSENT_TIMEOUT_MS); 688 }); 689 690 /* ---------- Serialized consent writer ---------- 691 Every DY consent write funnels through here: waits for the CMP gate once, then runs strictly 692 one-at-a-time so DY's own calls never race each other either. */ 693 let consentQueue = Promise.resolve(); 694 function queueSetTrackingConsent(payload) { 695 consentQueue = consentQueue 696 .then(() => cmpConsentSettled) 697 .then(() => new Promise(resolve => { 698 try { 699 window.Shopify.customerPrivacy.setTrackingConsent(payload, () => resolve()); 700 } catch (_) { 701 resolve(); 702 } 703 })); 704 return consentQueue; 705 } 706 707 /* ---------- Performance API (restores _dyid_server from server-timing before DY's SDK loads) */ 708 function getValueFromPerformance(key) { 709 try { 710 const entry = performance.getEntriesByType('navigation')[0]; 711 const description = entry?.serverTiming?.find(e => e.name === '_cmp')?.description; 712 if (!description) return undefined; 713 const encodedKey = encodeURIComponent(key); 714 const regex = new RegExp(`${encodedKey}%22%3A%22(.+?)%22`); 715 return description.match(regex)?.[1]; 716 } catch (_) { 717 return undefined; 718 } 719 } 720 721 function restoreDyidFromPerformance() { 722 const perfValue = getValueFromPerformance(DYID_COOKIE); 723 if (!perfValue) return; 724 setOnEtldPlus1(DYID_COOKIE, decodeURIComponent(perfValue), ONE_YEAR); 725 } 726 727 /* ---------- DY <->
727 cookie/metafield sync ---------- */ 728 function syncDyid() { 729 if (!canBeTracked()) return; 730 const dyid = localStorage.getItem('_dyid'); 731 if (!dyid) return; 732 733 // Always refresh the cookie so its expiry stays 1 year out, regardless of the metafield write below. 734 setOnEtldPlus1(DYID_COOKIE, dyid, ONE_YEAR); 735 736 const existing = getTrackingMetafield(DYID_COOKIE); 737 if (dyid !== existing) { 738 queueSetTrackingConsent({ metafields: [{ key: DYID_COOKIE, value: dyid }] }); 739 } 740 } 741 742 function syncDyjsession() { 743 if (!canBeTracked()) return; 744 const existingCookie = getCookie(JSESSION_COOKIE); 745 746 let attempts = 0; 747 const timer = setInterval(tick, 1000); 748 tick(); 749 750 function tick() { 751 attempts++; 752 const jsession = window.DY?.jsession; 753 if (jsession) { 754 clearInterval(timer); 755 if (jsession !== existingCookie) { 756 queueSetTrackingConsent({ metafields: [{ key: JSESSION_COOKIE, value: jsession }] }); 757 } 758 setOnEtldPlus1(JSESSION_COOKIE, jsession); 759 return; 760 } 761 if (attempts > 10) clearInterval(timer); 762 } 763 } 764 765 /* ---------- Bootstrapping ---------- */ 766 function waitForDyIdentifiers() { 767 let attempts = 0; 768 let jsessionSynced = false; 769 const timer = setInterval(() => { 770 attempts++; 771 const hasDyid = !!localStorage.getItem('_dyid'); 772 const hasJsession = !!window.DY?.jsession; 773 774 if (hasDyid) syncDyid(); 775 if (hasJsession && !jsessionSynced) { 776 syncDyjsession(); 777 jsessionSynced = true; 778 } 779 if ((hasDyid && jsessionSynced) || attempts > 20) clearInterval(timer); 780 }, 500); 781 } 782 783 function init() { 784 restoreDyidFromPerformance(); 785 waitForDyIdentifiers(); 786 787 // Cross-tab support 788 window.addEventListener('storage', e => { 789 if (e.key === '_dyid') syncDyid(); 790 }); 791 792 // Re-sync (or clear) the session cookie whenever the CMP's consent changes post-load. 793 document.addEventListener('visitorConsentCollected', () => { 794 if (canBeTracked()) { 795 syncDyjsession(); 796 } else { 797 clearCookie(JSESSION_COOKIE); 798 } 799 }); 800 } 801 802 init(); 803 804 return { canBeTracked, syncDyid, syncDyjsession }; 805})(); 806</script>
806 807
808<script> 809window._dy_assumed_consent = "false"; 810window._dy_sku_attribute = ""; 811window._dy_disabled_events = []; 812window._dy_user_identifier_type = "he"; 813window._dy_respect_consent_purchase = "false"; 814window._dy_minicart_selector = ""; 815window._dy_minicart_enabled = "false"; 816window._dy_minicart_open_class = ""; 817window._dy_minicart_close_class = ""; 818 819 820 821window.DY = window.DY || {}; 822DY.recommendationContext = { 823 type: "OTHER", 824 lng: "en_US", 825 826 data: [location.pathname] 827 828}; 829</script>
829 830 831 832 833
833<script src="//cdn.dynamicyield.com/api/8792976/api_dynamic.js"></script>
833 834
834<script src="//cdn.dynamicyield.com/api/8792976/api_static.js"></script>
834 835 836 837<!-- END app snippet -->
837<script src="https://cdn.shopify.com/extensions/01a0ec28-08e9-7edd-be07-fa39fa1c0c34/dynamic-yield-3-33/assets/dy-scripts.min.js" defer></script>
837<!-- END app block --><!-- BEGIN app block: shopify://apps/impact-com/blocks/consent_mode/adac1a7f-d17f-4936-8a12-45628cdd8add -->
837<script id="consent_script" defer> 838 window.Shopify.loadFeatures( 839 [ 840 { 841 name: 'consent-tracking-api', 842 version: '0.1', 843 }, 844 ], 845 error => { 846 if (error) { 847 // Rescue error 848 } 849 850 document.addEventListener("visitorConsentCollected", (event) => { 851 // Do nothing 852 }); 853 }, 854 ); 855</script>
855 856 857<!-- END app block --><!-- BEGIN app block: shopify://apps/triplewhale/blocks/triple_pixel_snippet/483d496b-3f1a-4609-aea7-8eee3b6b7a2a --><link rel='preconnect dns-prefetch' href='https://api.config-security.com/' crossorigin /> 858<link rel='preconnect dns-prefetch' href='https://conf.config-security.com/' crossorigin />
859<script> 860/* >> TriplePixel :: start*/ 861window.TriplePixelData={TripleName:"homedics-prod.myshopify.com",ver:"2.16",plat:"SHOPIFY",isHeadless:false,src:'SHOPIFY_EXT',product:{id:"",name:``,price:"",variant:"",av:{ }},search:"",collection:"",cart:"drawer",template:"login",curr:"USD" || "USD", market:"37560582329"},function(W,H,A,L,E,_,B,N){function O(U,T,P,H,R){void 0===R&&(R=!1),H=new XMLHttpRequest,P?(H.open("POST",U,!0),H.setRequestHeader("Content-Type","text/plain")):H.open("GET",U,!0),H.send(JSON.stringify(P||{})),H.onreadystatechange=function(){4===H.readyState&&200===H.status?(R=H.responseText,U.includes("/first")?eval(R):P||(N[B]=R)):(299<H.status||H.status<200)&&T&&!R&&(R=!0,O(U,T-1,P))}}if(N=window,!N[H+"sn"]){N[H+"sn"]=1,L=function(){return Date.now().toString(36)+"_"+Math.random().toString(36)};try{A.setItem(H,1+(0|A.getItem(H)||0)),(E=JSON.parse(A.getItem(H+"U")||"[]")).push({u:location.href,r:document.referrer,t:Date.now(),id:L()}),A.setItem(H+"U",JSON.stringify(E))}catch(e){}var i,m,p;A.getItem('"!nC`')||(_=A,A=N,A[H]||(E=A[H]=function(t,e,i){return void 0===i&&(i=[]),"State"==t?E.s:(W=L(),(E._q=E._q||[]).push([W,t,e].concat(i)),W)},E.s="Installed",E._q=[],E.ch=W,B="configSecurityConfModel",N[B]=1,O("https://conf.config-security.com/model",5),i=L(),m=A[atob("c2NyZWVu")],_.setItem("di_pmt_wt",i),p={id:i,action:"profile",avatar:_.getItem("auth-security_rand_salt_"),time:m[atob("d2lkdGg=")]+":"+m[atob("aGVpZ2h0")],host:A.TriplePixelData.TripleName,plat:A.TriplePixelData.plat,url:window.location.href.slice(0,500),ref:document.referrer,ver:A.TriplePixelData.ver},O("https://api.config-security.com/event",5,p),O("https://api.config-security.com/first?host=".concat(p.host,"&plat=").concat(p.plat),5)))}}("","TriplePixel",localStorage); 862/* << TriplePixel :: end*/ 863</script>
863 864 865 866 867<!-- END app block --><!-- BEGIN app block: shopify://apps/eg-auto-add-to-cart/blocks/app-embed/0f7d4f74-1e89-4820-aec4-6564d7e535d2 --> 868 869 870 871 872 873 874 875 876 877 878 879 880
880<script 881 async 882 type="text/javascript" 883 src="https://cdn.506.io/eg/script.js?shop=homedics-prod.myshopify.com&v=12" 884 ></script>
884 885 886 887 888 889 <meta id="easygift-shop" itemid="c2hvcF8kXzE3OTA4NTQxNjk=" content="{"isInstalled":true,"installedOn":"2026-07-02T12:23:09.681Z","appVersion":"3.0","subscriptionName":"Unlimited","cartAnalytics":true,"freeTrialEndsOn":null,"settings":{"reminderBannerStyle":{"position":{"horizontal":"right","vertical":"bottom"},"backgroundColor":"#FFFFFF","borderRadius":null,"closingMode":"doNotAutoClose","cssStyles":"","displayAfter":5,"fontFamily":null,"headerFontSize":null,"headerText":"","imageUrl":null,"padding":null,"primaryColor":"#000000","reshowBannerAfter":"everyNewSession","selfcloseAfter":5,"showImage":false,"subHeaderFontSize":null,"subHeaderText":""},"addedItemIdentifier":"_Gifted","ignoreOtherAppLineItems":null,"customVariantsInfoLifetimeMins":1440,"redirectPath":null,"ignoreNonStandardCartRequests":false,"bannerStyle":{"position":{"horizontal":"right","vertical":"bottom"},"backgroundColor":"#FFFFFF","borderRadius":null,"cssStyles":null,"fontFamily":null,"headerFontSize":null,"padding":null,"primaryColor":"#000000","subHeaderFontSize":null},"themePresetId":null,"notificationStyle":{"position":{"horizontal":null,"vertical":null},"backgroundColor":"#FFFFFF","borderRadius":null,"cssStyles":null,"duration":null,"fontFamily":null,"hasCustomizations":false,"headerFontSize":null,"padding":null,"primaryColor":null,"subHeaderFontSize":null},"fetchCartData":false,"useLocalStorage":{"enabled":false,"expiryMinutes":null},"popupStyle":{"addButtonText":null,"backgroundColor":"#FFFFFF","bodyColor":null,"bodyFontFamily":null,"bodyFontSize":null,"borderRadius":null,"buttonTextColor":null,"closeModalOutsideClick":true,"cssStyles":null,"dismissButtonText":null,"hasCustomizations":false,"headerFontFamily":null,"headerFontSize":null,"imageUrl":null,"outOfStockButtonText":null,"padding":null,"priceShowZeroDecimals":true,"primaryColor":null,"secondaryColor":null,"showProductLink":false,"subHeaderFontSize":null,"subscriptionLabel":null},"refreshAfterBannerClick":false,"disableReapplyRules":false,"disableReloadOnFailedAddition":false,"autoReloadCartPage":false,"ajaxRedirectPath":null,"allowSimultaneousRequests":false,"applyRulesOnCheckout":false,"enableCartCtrlOverrides":true,"customRedirectFromCart":null,"scriptSettings":{"branding":{"removalRequestSent":null,"show":false},"productPageRedirection":{"enabled":false,"products":[],"redirectionURL":"\/"},"debugging":{"enabled":false,"enabledOn":null,"stringifyObj":false},"customCSS":null,"decodePayload":false,"delayUpdates":2000,"disableRedirectAfterFormSubmit":false,"enableBuyNowInterceptions":true,"fetchCartDataBeforeRequest":false,"fetchProductInfoFromSavedDomain":false,"hideAlertsOnFrontend":false,"hideGiftedPropertyText":false,"reApplyValueBasedRulesInCart":false,"removeEGPropertyFromSplitActionLineItems":false,"removeProductsAddedFromExpiredRules":true,"useFinalPrice":false,"useFinalPriceGetEntireCart":false},"promoCodeMessageStyle":{"message":"Free gift added!"},"accessToEnterprise":false},"translations":null,"defaultLocale":"en","shopDomain":"www.homedics.com"}"> 890 891
892<script defer> 893 (async function() { 894 try { 895 896 const blockVersion = "v3" 897 if (blockVersion != "v3") { 898 return 899 } 900 901 let metaErrorFlag = false; 902 if (metaErrorFlag) { 903 return 904 } 905 906 // Parse metafields as JSON 907 const metafields = {"easygift-rule-6a47843b94f12d818c8bbec5":{"schedule":{"enabled":false,"starts":null,"ends":null},"trigger":{"productTags":{"targets":[],"collectionInfo":null,"sellingPlan":null},"type":"collection","minCartValue":null,"upperCartValue":null,"products":[],"cartValueExcludedVariants":[],"collections":[{"name":"SereneScent 120","id":330432807097,"gid":"gid:\/\/shopify\/Collection\/330432807097","handle":"serenescent-120","alerts":[],"_id":"6a47843b94f12d818c8bbec6"}],"condition":"quantity","conditionMin":3,"conditionMax":null,"collectionSellingPlanType":null,"promoCode":null,"promoCodeDiscount":null},"action":{"notification":{"enabled":false,"headerText":null,"subHeaderText":null,"showImage":false,"imageUrl":""},"discount":{"type":"shpAutomatic","title":"Buy 3 oils get free diffuser","code":null,"id":"gid:\/\/shopify\/DiscountAutomaticNode\/1434529038521","createdByEasyGift":false,"issue":null,"easygiftAppDiscount":false,"value":null,"discountType":null},"popupOptions":{"headline":null,"subHeadline":null,"showItemsPrice":false,"popupDismissable":false,"imageUrl":null,"persistPopup":false,"rewardQuantity":1,"showDiscountedPrice":false,"hideOOSItems":false,"showVariantsSeparately":false},"banner":{"enabled":false,"headerText":null,"imageUrl":null,"subHeaderText":null,"showImage":false,"displayAfter":"5","closingMode":"doNotAutoClose","selfcloseAfter":"5","reshowBannerAfter":"everyNewSession","redirectLink":null},"type":"addAutomatically","products":[{"name":"SereneScent™ Fabric Waterless 120 ml Diffuser - Default Title","variantId":"45163096539321","variantGid":"gid:\/\/shopify\/ProductVariant\/45163096539321","productGid":"gid:\/\/shopify\/Product\/8166909182137","quantity":1,"handle":"serenescent-fabric-waterless-120-ml-diffuser","price":"129.99"}],"limit":1,"preventProductRemoval":false,"addAvailableProducts":false,"showPromoCodeMessage":false},"targeting":{"link":{"destination":null,"data":null,"cookieLifetime":14},"testMode":{"testCount":0,"lastTestedAt":null,"currentNonce":null,"lastTestUrl":null,"lastTokenExpiresAt":null},"additionalCriteria":{"geo":{"include":[],"exclude":[]},"type":null,"customerTags":[],"customerTagsExcluded":[],"customerId":[],"orderCount":null,"hasOrderCountMax":false,"orderCountMax":null,"totalSpent":null,"hasTotalSpentMax":false,"totalSpentMax":null},"type":"all"},"settings":{"worksInReverse":true,"runsOncePerSession":false,"preventAddedItemPurchase":false,"showReminderBanner":false},"_id":"6a47843b94f12d818c8bbec5","name":"Buy 3 Get a Diffuser Free","store":"6a46582d4b2bccdddb71e8f5","shop":"homedics-prod","active":true,"translations":null,"testMode":false,"createdAt":"2026-07-03T09:43:23.536Z","updatedAt":"2026-07-03T09:43:23.536Z","__v":0}}; 908 909 // Process metafields in JavaScript 910 let savedRulesArray = []; 911 for (const [key, value] of Object.entries(metafields)) { 912 if (value) { 913 for (const prop in value) { 914 // avoiding Object.Keys for performance gain -- no need to make an array of keys. 915 savedRulesArray.push(value); 916 break; 917 } 918 } 919 } 920 921 const metaTag = document.createElement('meta'); 922 metaTag.id = 'easygift-rules'; 923 metaTag.content = JSON.stringify(savedRulesArray); 924 metaTag.setAttribute('itemid', 'cnVsZXNfJF8xNzkwODU0MTY5'); 925 926 document.head.appendChild(metaTag); 927 } catch (err) { 928 929 } 930 })(); 931</script>
931 932 933 934
934<script 935 type="text/javascript" 936 defer 937 > 938 939 (function () { 940 try { 941 window.EG_INFO = window.EG_INFO || {}; 942 var shopInfo = {"isInstalled":true,"installedOn":"2026-07-02T12:23:09.681Z","appVersion":"3.0","subscriptionName":"Unlimited","cartAnalytics":true,"freeTrialEndsOn":null,"settings":{"reminderBannerStyle":{"position":{"horizontal":"right","vertical":"bottom"},"backgroundColor":"#FFFFFF","borderRadius":null,"closingMode":"doNotAutoClose","cssStyles":"","displayAfter":5,"fontFamily":null,"headerFontSize":null,"headerText":"","imageUrl":null,"padding":null,"primaryColor":"#000000","reshowBannerAfter":"everyNewSession","selfcloseAfter":5,"showImage":false,"subHeaderFontSize":null,"subHeaderText":""},"addedItemIdentifier":"_Gifted","ignoreOtherAppLineItems":null,"customVariantsInfoLifetimeMins":1440,"redirectPath":null,"ignoreNonStandardCartRequests":false,"bannerStyle":{"position":{"horizontal":"right","vertical":"bottom"},"backgroundColor":"#FFFFFF","borderRadius":null,"cssStyles":null,"fontFamily":null,"headerFontSize":null,"padding":null,"primaryColor":"#000000","subHeaderFontSize":null},"themePresetId":null,"notificationStyle":{"position":{"horizontal":null,"vertical":null},"backgroundColor":"#FFFFFF","borderRadius":null,"cssStyles":null,"duration":null,"fontFamily":null,"hasCustomizations":false,"headerFontSize":null,"padding":null,"primaryColor":null,"subHeaderFontSize":null},"fetchCartData":false,"useLocalStorage":{"enabled":false,"expiryMinutes":null},"popupStyle":{"addButtonText":null,"backgroundColor":"#FFFFFF","bodyColor":null,"bodyFontFamily":null,"bodyFontSize":null,"borderRadius":null,"buttonTextColor":null,"closeModalOutsideClick":true,"cssStyles":null,"dismissButtonText":null,"hasCustomizations":false,"headerFontFamily":null,"headerFontSize":null,"imageUrl":null,"outOfStockButtonText":null,"padding":null,"priceShowZeroDecimals":true,"primaryColor":null,"secondaryColor":null,"showProductLink":false,"subHeaderFontSize":null,"subscriptionLabel":null},"refreshAfterBannerClick":false,"disableReapplyRules":false,"disableReloadOnFailedAddition":false,"autoReloadCartPage":false,"ajaxRedirectPath":null,"allowSimultaneousRequests":false,"applyRulesOnCheckout":false,"enableCartCtrlOverrides":true,"customRedirectFromCart":null,"scriptSettings":{"branding":{"removalRequestSent":null,"show":false},"productPageRedirection":{"enabled":false,"products":[],"redirectionURL":"\/"},"debugging":{"enabled":false,"enabledOn":null,"stringifyObj":false},"customCSS":null,"decodePayload":false,"delayUpdates":2000,"disableRedirectAfterFormSubmit":false,"enableBuyNowInterceptions":true,"fetchCartDataBeforeRequest":false,"fetchProductInfoFromSavedDomain":false,"hideAlertsOnFrontend":false,"hideGiftedPropertyText":false,"reApplyValueBasedRulesInCart":false,"removeEGPropertyFromSplitActionLineItems":false,"removeProductsAddedFromExpiredRules":true,"useFinalPrice":false,"useFinalPriceGetEntireCart":false},"promoCodeMessageStyle":{"message":"Free gift added!"},"accessToEnterprise":false},"translations":null,"defaultLocale":"en","shopDomain":"www.homedics.com"}; 943 var productRedirectionEnabled = shopInfo.settings.scriptSettings.productPageRedirection.enabled; 944 if (["Unlimited", "Enterprise"].includes(shopInfo.subscriptionName) && productRedirectionEnabled) { 945 var products = shopInfo.settings.scriptSettings.productPageRedirection.products; 946 if (products.length > 0) { 947 var productIds = products.map(function(prod) { 948 var productGid = prod.id; 949 var productIdNumber = parseInt(productGid.split('/').pop()); 950 return productIdNumber; 951 }); 952 var productInfo = null; 953 var isProductInList = productIds.includes(productInfo.id); 954 if (isProductInList) { 955 var redirectionURL = shopInfo.settings.scriptSettings.productPageRedirection.redirectionURL; 956 if (redirectionURL) { 957 window.location = redirectionURL; 958 } 959 } 960 } 961 } 962 963 964 } catch(err) { 965 return 966 }}
966)() 967 </script>
967 968 969 970 971<!-- END app block -->
971<script src="https://cdn.shopify.com/extensions/01a0f6ed-716e-7bcb-9b26-cd9173669680/countdown-timer-30-98/assets/countdown_timer_essential_apps.min.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 971
971
972<script src="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/consentmo_cookie_consent.js" type="text/javascript" defer="defer"></script>
972 973<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
974<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: 70341165241,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "customers/login"};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 974
974
975<script> 976 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 977</script>
vendor: 1 bytes, line 977
977
978<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}
978).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: 70341165241,storefrontBaseUrl: "https://www.homedics.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://www.homedics.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2730983609","configuration":"{\"locale\":\"en_US\",\"client\":\"HoMedics\",\"environment\":\"production\",\"deployment_zone\":\"main_site\",\"use_external_ids\":\"false\",\"use_variants\":\"true\",\"external_id_attribute\":\"default\",\"storefront_api_key\":\"ce9f1d847250421c9af1568586cc8fba\",\"product_metafield_key\":\"none\",\"product_metafield_namespace\":\"none\",\"multi_locale_enabled\":\"false\",\"locale_mapping\":\"{}\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"bf601cbef12079fa1ab77422415f1989","type":"APP","apiClientId":1888040,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2619769017","configuration":"{\"trackingKey\":\"homedics-prod-stayai-web-pixel\",\"enabled\":\"true\",\"collectorUrl\":\"https:\\\/\\\/pixel.retextion.com\",\"version\":\"1\",\"debug\":\"false\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"94457fdfcf80b0033e88e322893e2b49","type":"APP","apiClientId":5859381,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
978,"dataSharingState":"unrestricted"},{"id":"2574450873","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"d55e3cf212a0a88db5fca9e1cff191d7","type":"APP","apiClientId":145825267713,"privacyPurposes":["ANALYTICS"],"capabilities":["advanced_dom_events"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"2288582841","configuration":"{\"dyToken\":\"-\", \"dyEndpoint\":\"https:\/\/direct-collect.dy-api.com\/v2\/collect\/user\/event\", \"skuAttr\": \"default\", \"purchaseEventDisabled\": \"false\", \"respectConsentPurchase\": \"true\", \"userIdentifierType\": \"he\", \"loginEventDisabled\": \"false\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"67606d516e1faceaceb05d7ad8670131","type":"APP","apiClientId":9575530497,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":[],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1999962297","configuration":"{\"botID\":\"p6znppga1tveat7t\",\"octaneDomain\":\"https:\/\/app.octaneai.com\",\"octaneNewDomain\":\"https:\/\/app2.octaneai.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"aace1440a9416e8b2805b96c7b2f2fe0","type":"APP","apiClientId":2012438,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1822785721","configuration":"{\"env\":\"prod\"}","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"8a9a175b11d15038a70fe78d09c59720","type":"APP","apiClientId":3977633,"privacyPurposes":["ANALYTICS","MARKETING"],"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":"1726742713","configuration":"{\"projectId\":\"go2fqeeaf3\"}","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":"1704329401","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-4LG8LKGNMG\\\",\\\"AW-1068291434\\\",\\\"GT-NSLGQ3Z3\\\"],\\\"target_country\\\":\\\"ZZ\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-4LG8LKGNMG\\\",\\\"AW-1068291434\\\/SEcgCJCs-sMbEOqqs_0D\\\",\\\"AW-1068291434\\\"]},{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-4LG8LKGNMG\\\",\\\"AW-1068291434\\\/yS68CImP-MMbEOqqs_0D\\\",\\\"AW-1068291434\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-4LG8LKGNMG\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-4LG8LKGNMG\\\",\\\"AW-1068291434\\\/_qo1CI2s-sMbEOqqs_0D\\\",\\\"MC-R8XBX4KJJ7\\\",\\\"AW-1068291434\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-4LG8LKGNMG\\\",\\\"AW-1068291434\\\/Oh4KCIaP-MMbEOqqs_0D\\\",\\\"MC-R8XBX4KJJ7\\\",\\\"AW-1068291434\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-4LG8LKGNMG\\\"},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-4LG8LKGNMG\\\",\\\"AW-1068291434\\\/SMxcCI-P-MMbEOqqs_0D\\\",\\\"MC-R8XBX4KJJ7\\\",\\\"AW-1068291434\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-4LG8LKGNMG\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-4LG8LKGNMG\\\",\\\"AW-1068291434\\\/_AxjCJOs-sMbEOqqs_0D\\\",\\\"AW-1068291434\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-4LG8LKGNMG\\\",\\\"AW-1068291434\\\/zwkhCIyP-MMbEOqqs_0D\\\",\\\"AW-1068291434\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-4LG8LKGNMG\\\"}],\\\"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"]}
978,{"id":"1690403001","configuration":"{\"campaignID\":\"11735\",\"externalExecutionURL\":\"https:\/\/engine.saasler.com\/api\/v1\/webhook_executions\/2f85dabfee0c4eda31dbaddc68981e3b\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"4d2ae310e7f99f154f33560b5c81cfa9","type":"APP","apiClientId":3546795,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1574633657","configuration":"{\"shopId\":\"homedics-prod.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7093dff47f098f6de2afb75b62011ebe","type":"APP","apiClientId":2753413,"privacyPurposes":["ANALYTICS","MARKETING"],"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":"1417740473","configuration":"{\"accountID\":\"VdUY92\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"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":"988086457","configuration":"{\"pixel_id\":\"459482610916402\",\"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":"optimized","enabledFlags":["9a3ed68a"]},{"id":"127991993","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Google Tag Manager (Cart.com)","dataSharingAdjustments":{"protectedCustomerApprovalScopes":[],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"128254137","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"AddShoppers Tag","dataSharingAdjustments":{"protectedCustomerApprovalScopes":[],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"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":"Homedics","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"homedics-prod.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/www.homedics.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"8450555773113","handle":"homedics-premium-steam-sauna","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"46691930898617","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8259987636409","handle":"homedics®-portable-steam-sauna","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45486843068601","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://www.homedics.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"161326137529","themePublished":"true","eventMetadataId":"4fb7d0b1-09b9-452d-946b-ab74762e3c7f","shopId":"70341165241","storefrontBaseUrl":"https:\/\/www.homedics.com","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>
978<script> 979 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 980 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 981 window.ShopifyAnalytics.meta.currency = 'USD'; 982 var meta = {"page":{"requestId":"30c24f2b-1bca-493a-bbe1-1d4943c90bdc-1790854169"}}; 983 for (var attr in meta) { 984 window.ShopifyAnalytics.meta[attr] = meta[attr]; 985 } 986</script>
vendor: 1 bytes, line 986
986
987<script class="analytics"> 988 (function () { 989 var customDocumentWrite = function(content) { 990 var jquery = null; 991 992 if (window.jQuery) { 993 jquery = window.jQuery; 994 } else if (window.Checkout && window.Checkout.$) { 995 jquery = window.Checkout.$; 996 } 997 998 if (jquery) { 999 jquery('body').append(content); 1000 } 1001 }; 1002 1003 var hasLoggedConversion = function(token) { 1004 if (token) { 1005 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 1006 } 1007 return false; 1008 } 1009 1010 var setCookieIfConversion = function(token) { 1011 if (token) { 1012 var twoMonthsFromNow = new Date(Date.now()); 1013 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 1014 1015 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 1016 } 1017 } 1018 1019 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 1020 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 1021 if (trekkie.integrations) { 1022 return; 1023 } 1024 trekkie.methods = [ 1025 'identify', 1026 'page', 1027 'ready', 1028 'track', 1029 'trackForm', 1030 'trackLink' 1031 ]; 1032 trekkie.factory = function(method) { 1033 return function() { 1034 var args = Array.prototype.slice.call(arguments); 1035 args.unshift(method); 1036 trekkie.push(args); 1037 if (method == 'track' || method == 'page') { 1038 var pageUrl; 1039 try { 1040 pageUrl = window.location.href; 1041 } catch (e) {} 1042 var pageReferrer; 1043 try { 1044 pageReferrer = document.referrer; 1045 } catch (e) {} 1046 try { 1047 if (window.__TREKKIE_SHIM_QUEUE == null) { 1048 window.__TREKKIE_SHIM_QUEUE = []; 1049 } 1050 window.__TREKKIE_SHIM_QUEUE.push({ 1051 from: 'trekkie-stub', 1052 method: method, 1053 args: args.slice(1), 1054 pageContext: { 1055 url: pageUrl, 1056 referrer: pageReferrer 1057 } 1058 }); 1059 } catch (e) { 1060 // no-op 1061 } 1062 } 1063 return trekkie; 1064 }; 1065 }; 1066 for (var i = 0; i < trekkie.methods.length; i++) { 1067 var key = trekkie.methods[i]; 1068 trekkie[key] = trekkie.factory(key); 1069 } 1070 trekkie.load = function(config) { 1071 trekkie.config = config || {}; 1072 trekkie.config.initialDocumentCookie = document.cookie; 1073 var first = document.getElementsByTagName('script')[0]; 1074var script = document.createElement('script'); 1075script.type = 'text/javascript'; 1076script.onerror = function(e) { 1077 var scriptFallback = document.createElement('script'); 1078 scriptFallback.type = 'text/javascript'; 1079 scriptFallback.onerror = function(error) { 1080 var Monorail = { 1081 produce: function produce(monorailDomain, schemaId, payload) { 1082 var currentMs = new Date().getTime(); 1083 var event = { 1084 schema_id: schemaId, 1085 payload: payload, 1086 metadata: { 1087 event_created_at_ms: currentMs, 1088 event_sent_at_ms: currentMs 1089 } 1090 }; 1091 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 1092 }, 1093 sendRequest: function sendRequest(endpointUrl, payload) { 1094 // Try the sendBeacon API 1095 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 1096 var blobData = new window.Blob([payload], { 1097 type: 'text/plain' 1098 }); 1099 1100 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 1101 return true; 1102 } // sendBeacon was not successful 1103 1104 } // XHR beacon 1105 1106 var xhr = new XMLHttpRequest(); 1107 1108 try { 1109 xhr.open('POST', endpointUrl); 1110 xhr.setRequestHeader('Content-Type', 'text/plain'); 1111 xhr.send(payload); 1112 } catch (e) { 1113 console.log(e); 1114 } 1115 1116 return false; 1117 }, 1118 isIos12: function isIos12() { 1119 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 1120 } 1121 }; 1122 Monorail.produce('monorail-edge.shopifysvc.com', 1123 'trekkie_storefront_load_errors/1.1', 1124 {shop_id: 70341165241, 1125 theme_id: 161326137529, 1126 app_name: "storefront", 1127 context_url: window.location.href, 1128 source_url: "//www.homedics.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 1129 1130 }; 1131 scriptFallback.async = true; 1132 scriptFallback.src = '//www.homedics.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1133 first.parentNode.insertBefore(scriptFallback, first); 1134}; 1135script.async = true; 1136script.src = '//www.homedics.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1137first.parentNode.insertBefore(script, first); 1138 1139 }; 1140 trekkie.load( 1141 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":70341165241,"isMerchantRequest":null,"themeId":161326137529,"themeCityHash":"4667299803098951170","contentLanguage":"en","currency":"USD","eventMetadataId":"4fb7d0b1-09b9-452d-946b-ab74762e3c7f"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 1142 ); 1143 1144 var loaded = false;
1145 trekkie.ready(function() { 1146 if (loaded) return; 1147 loaded = true; 1148 1149 window.ShopifyAnalytics.lib = window.trekkie; 1150 1151 var originalDocumentWrite = document.write; 1152 document.write = customDocumentWrite; 1153 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 1154 document.write = originalDocumentWrite; 1155 1156 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 1157 var token = match? match[1]: undefined; 1158 if (!hasLoggedConversion(token)) { 1159 setCookieIfConversion(token); 1160 1161 } 1162 }); 1163 1164 window.ShopifyAnalytics.lib.page(null,{"requestId":"30c24f2b-1bca-493a-bbe1-1d4943c90bdc-1790854169","shopifyEmitted":true}); 1165 1166 var eventsListenerScript = document.createElement('script'); 1167 eventsListenerScript.async = true; 1168 eventsListenerScript.src = "//www.homedics.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 1169 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 1170})();</script>
vendor: 1 bytes, line 1170
1170
1171<script 1172 defer 1173 src="https://www.homedics.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 1174 data-application="storefront-renderer" 1175 data-shop-id="70341165241" 1176 data-render-region="gcp-us-central1" 1177 data-page-type="customers/login" 1178 data-theme-instance-id="161326137529" 1179 data-theme-name="Impulse" 1180 data-theme-version="7.6.2" 1181 data-monorail-region="shop_domain" 1182 data-resource-timing-sampling-rate="10" 1183 data-shs="true" 1184 data-shs-beacon="true" 1185 data-shs-export-with-fetch="true" 1186 data-shs-logs-sample-rate="1" 1187 data-shs-beacon-endpoint="https://www.homedics.com/api/collect" 1188></script>
1188 1189<meta name="shopify-y" content="00000000-0000-0000-5000-000000000000" data-expiration="1822411769000"><meta name="shopify-s" content="00000000-0000-0000-5000-000000000000" data-expiration="1790855969000"><meta name="new-cookie-storage-activated" content="t"> 1190</head> 1191
1192<script type="text/javascript"> 1193 ire('identify', {customerId: '', 1194 customerEmail: '', customProfileId: ''}); 1195</script>
1195 1196<body data-route="login" data-tempate="customers/login" class="template-customers-login" data-center-text="true" data-button_style="round" data-type_header_capitalize="false" data-type_headers_align_text="true" data-type_product_capitalize="true" data-swatch_style="round" > 1197 1198 <a class="in-page-link visually-hidden skip-link" href="#MainContent">Skip to content</a> 1199 1200 <div id="PageContainer" class="page-container"> 1201 <div class="transition-body"><!-- BEGIN sections: header-group --> 1202<div id="shopify-section-sections--22941040967865__announcement" class="shopify-section shopify-section-group-header-group"><style></style> 1203 <div class="announcement-bar" role="banner" aria-label="Announcements"> 1204 <div class="page-width"> 1205 <div class="slideshow-wrapper"> 1206 <button type="button" class="visually-hidden slideshow__pause" data-id="sections--22941040967865__announcement" aria-live="polite"> 1207 <span class="slideshow__pause-stop"> 1208 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-pause" viewBox="0 0 10 13"><path d="M0 0h3v13H0zm7 0h3v13H7z" fill-rule="evenodd"/></svg> 1209 <span class="icon__fallback-text">Pause slideshow</span> 1210 </span> 1211 <span class="slideshow__pause-play"> 1212 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-play" viewBox="18.24 17.35 24.52 28.3"><path fill="#323232" d="M22.1 19.151v25.5l20.4-13.489-20.4-12.011z"/></svg> 1213 <span class="icon__fallback-text">Play slideshow</span> 1214 </span> 1215 </button> 1216 1217 <div 1218 id="AnnouncementSlider" 1219 class="announcement-slider" 1220 data-compact="true" 1221 data-block-count="1" 1222 role="region" 1223 aria-label="Announcement slider"><div 1224 id="AnnouncementSlide-announcement-0" 1225 class="announcement-slider__slide" 1226 data-index="0" 1227 1228 ><a class="announcement-link" href="/collections/best-sellers"><span class="announcement-text">Free shipping</span><span class="announcement-link-text">on all orders over $99</span></a></div></div> 1229 </div> 1230 </div> 1231 </div> 1232 1233 1234 1235 1236<style> #shopify-section-sections--22941040967865__announcement .announcement-bar {padding: 5px;} </style></div><div id="shopify-section-sections--22941040967865__header" class="shopify-section shopify-section-group-header-group"> 1237 1238<div id="NavDrawer" class="drawer drawer--left"> 1239 <div class="drawer__contents"> 1240 <div class="drawer__fixed-header"> 1241 <div class="drawer__header appear-animation appear-delay-1"> 1242 <div class="h2 drawer__title"></div> 1243 <div class="drawer__close"> 1244 <button type="button" class="drawer__close-button js-drawer-close"> 1245 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg> 1246 <span class="icon__fallback-text">Close menu</span> 1247 </button> 1248 </div> 1249 </div> 1250 </div> 1251 <div class="drawer__scrollable"> 1252 <ul class="mobile-nav" role="navigation" aria-label="Primary"><li class="mobile-nav__item appear-animation appear-delay-2"><div class="mobile-nav__has-sublist"><a href="/collections/massagers" 1253 class="mobile-nav__link mobile-nav__link--top-level" 1254 id="Label-collections-massagers1" 1255 > 1256 Massagers 1257 </a> 1258 <div class="mobile-nav__toggle"> 1259 <button type="button" 1260 aria-controls="Linklist-collections-massagers1" 1261 aria-labelledby="Label-collections-massagers1" 1262 class="collapsible-trigger collapsible--auto-height"><span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 1263 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1264</span> 1265</button> 1266 </div></div><div id="Linklist-collections-massagers1" 1267 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1268 > 1269 <div class="collapsible-content__inner"> 1270 <ul class="mobile-nav__sublist"><li class="mobile-nav__item"> 1271 <div class="mobile-nav__child-item"><a href="/collections/massagers" 1272 class="mobile-nav__link" 1273 id="Sublabel-collections-massagers1" 1274 > 1275 Massagers 1276 </a><button type="button" 1277 aria-controls="Sublinklist-collections-massagers1-collections-massagers1" 1278 aria-labelledby="Sublabel-collections-massagers1" 1279 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1280 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewB
1280ox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1281</span> 1282</button></div><div 1283 id="Sublinklist-collections-massagers1-collections-massagers1" 1284 aria-labelledby="Sublabel-collections-massagers1" 1285 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1286 > 1287 <div class="collapsible-content__inner"> 1288 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1289 <a href="/collections/neck-massagers" class="mobile-nav__link"> 1290 Neck Massagers 1291 </a> 1292 </li><li class="mobile-nav__item"> 1293 <a href="/collections/back-massagers" class="mobile-nav__link"> 1294 Back Massagers 1295 </a> 1296 </li><li class="mobile-nav__item"> 1297 <a href="/collections/foot-massagers" class="mobile-nav__link"> 1298 Foot Massagers 1299 </a> 1300 </li><li class="mobile-nav__item"> 1301 <a href="/collections/handheld-massagers" class="mobile-nav__link"> 1302 Handheld Percussion 1303 </a> 1304 </li><li class="mobile-nav__item"> 1305 <a href="/collections/pillows" class="mobile-nav__link"> 1306 Massage Pillows 1307 </a> 1308 </li><li class="mobile-nav__item"> 1309 <a href="/collections/sports-recovery-massagers" class="mobile-nav__link"> 1310 Sports Recovery Massagers 1311 </a> 1312 </li><li class="mobile-nav__item"> 1313 <a href="https://www.homedics.com/pages/bundle-builder-modulair" class="mobile-nav__link"> 1314 Build Your Compression Massage Bundle 1315 </a> 1316 </li></ul> 1317 </div> 1318 </div></li></ul> 1319 </div> 1320 </div></li><li class="mobile-nav__item appear-animation appear-delay-3"><div class="mobile-nav__has-sublist"><a href="/collections/air-purifiers" 1321 class="mobile-nav__link mobile-nav__link--top-level" 1322 id="Label-collections-air-purifiers2" 1323 > 1324 Air Purifiers 1325 </a> 1326 <div class="mobile-nav__toggle"> 1327 <button type="button" 1328 aria-controls="Linklist-collections-air-purifiers2" 1329 aria-labelledby="Label-collections-air-purifiers2" 1330 class="collapsible-trigger collapsible--auto-height"><span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 1331 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1332</span> 1333</button> 1334 </div></div><div id="Linklist-collections-air-purifiers2" 1335 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1336 > 1337 <div class="collapsible-content__inner"> 1338 <ul class="mobile-nav__sublist"><li class="mobile-nav__item"> 1339 <div class="mobile-nav__child-item"><a href="/collections/air-purifiers" 1340 class="mobile-nav__link" 1341 id="Sublabel-collections-air-purifiers1" 1342 > 1343 Air Purifiers 1344 </a><button type="button" 1345 aria-controls="Sublinklist-collections-air-purifiers2-collections-air-purifiers1" 1346 aria-labelledby="Sublabel-collections-air-purifiers1" 1347 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1348 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewB
1348ox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1349</span> 1350</button></div><div 1351 id="Sublinklist-collections-air-purifiers2-collections-air-purifiers1" 1352 aria-labelledby="Sublabel-collections-air-purifiers1" 1353 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1354 > 1355 <div class="collapsible-content__inner"> 1356 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1357 <a href="/collections/large-room-air-purifier" class="mobile-nav__link"> 1358 Large Room Purifiers 1359 </a> 1360 </li><li class="mobile-nav__item"> 1361 <a href="/collections/medium-room-air-purifier" class="mobile-nav__link"> 1362 Medium Room Air Purifiers 1363 </a> 1364 </li><li class="mobile-nav__item"> 1365 <a href="/collections/small-room-air-purifier" class="mobile-nav__link"> 1366 Small Room Air Purifiers 1367 </a> 1368 </li><li class="mobile-nav__item"> 1369 <a href="/collections/smart-air-purifier" class="mobile-nav__link"> 1370 Smart Air Purifiers 1371 </a> 1372 </li><li class="mobile-nav__item"> 1373 <a href="/collections/air-purifier-filters-accessories" class="mobile-nav__link"> 1374 Air Purifiers Filters & Accesories 1375 </a> 1376 </li><li class="mobile-nav__item"> 1377 <a href="/collections/pet-air-purifier" class="mobile-nav__link"> 1378 Pet Air Purifiers 1379 </a> 1380 </li></ul> 1381 </div> 1382 </div></li></ul> 1383 </div> 1384 </div></li><li class="mobile-nav__item appear-animation appear-delay-4"><div class="mobile-nav__has-sublist"><a href="/collections/parts-and-accessories" 1385 class="mobile-nav__link mobile-nav__link--top-level" 1386 id="Label-collections-parts-and-accessories3" 1387 > 1388 Replacement Filters 1389 </a> 1390 <div class="mobile-nav__toggle"> 1391 <button type="button" 1392 aria-controls="Linklist-collections-parts-and-accessories3" 1393 aria-labelledby="Label-collections-parts-and-accessories3" 1394 class="collapsible-trigger collapsible--auto-height"><span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 1395 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1396</span> 1397</button> 1398 </div></div><div id="Linklist-collections-parts-and-accessories3" 1399 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1400 > 1401 <div class="collapsible-content__inner"> 1402 <ul class="mobile-nav__sublist"><li class="mobile-nav__item"> 1403 <div class="mobile-nav__child-item"><a href="/collections/parts-and-accessories" 1404 class="mobile-nav__link" 1405 id="Sublabel-collections-parts-and-accessories1" 1406 > 1407 Other Replacement Parts 1408 </a><button type="button" 1409 aria-controls="Sublinklist-collections-parts-and-accessories3-collections-parts-and-accessories1" 1410 aria-labelledby="Sublabel-collections-parts-and-accessories1" 1411 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1412 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewB
1412ox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1413</span> 1414</button></div><div 1415 id="Sublinklist-collections-parts-and-accessories3-collections-parts-and-accessories1" 1416 aria-labelledby="Sublabel-collections-parts-and-accessories1" 1417 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1418 > 1419 <div class="collapsible-content__inner"> 1420 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1421 <a href="/products/ultrasonic-humidifier-demineralization-cartridges-4-pack" class="mobile-nav__link"> 1422 Ultrasonic Humidifier Demineralization 1423 </a> 1424 </li><li class="mobile-nav__item"> 1425 <a href="/products/totalclean-replacement-type-1-essential-oil-pads" class="mobile-nav__link"> 1426 TotalClean® Replacement 1427 </a> 1428 </li><li class="mobile-nav__item"> 1429 <a href="/products/personal-portable-humidifier-replacement-wicks-4-pack" class="mobile-nav__link"> 1430 Personal/Portable Humidifier Replacement 1431 </a> 1432 </li><li class="mobile-nav__item"> 1433 <a href="/products/uv-c-replacement-bulbs" class="mobile-nav__link"> 1434 UV-C Replacement Bulbs 1435 </a> 1436 </li><li class="mobile-nav__item"> 1437 <a href="/products/paraspa-paraffin-wax-refill" class="mobile-nav__link"> 1438 ParaSpa® Paraffin Wax Refill 1439 </a> 1440 </li></ul> 1441 </div> 1442 </div></li><li class="mobile-nav__item"> 1443 <div class="mobile-nav__child-item"><a href="/collections/parts-and-accessories" 1444 class="mobile-nav__link" 1445 id="Sublabel-collections-parts-and-accessories2" 1446 > 1447 Best-Selling HEPA Filters 1448 </a><button type="button" 1449 aria-controls="Sublinklist-collections-parts-and-accessories3-collections-parts-and-accessories2" 1450 aria-labelledby="Sublabel-collections-parts-and-accessories2" 1451 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1452 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1453</span> 1454</button></div><div 1455 id="Sublinklist-collections-parts-and-accessories3-collections-parts-and-accessories2" 1456 aria-labelledby="Sublabel-collections-parts-and-accessories2" 1457 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1458 > 1459 <div class="collapsible-content__inner"> 1460 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1461 <a href="/products/totalclean-replacement-360-degree-true-hepa-filter" class="mobile-nav__link"> 1462 AP-T45, AP-T43 & AP-T40 1463 </a> 1464 </li><li class="mobile-nav__item"> 1465 <a href="/products/totalclean-replacement-hepa-type-filter-for-tower-air-purifiers" class="mobile-nav__link"> 1466 AP-T20, AP-T22 1467 </a> 1468 </li><li class="mobile-nav__item"> 1469 <a href="/products/totalclean-apt10-replacement-hepa-type-filter" class="mobile-nav__link"> 1470 AP-T15, AP-T12, AP-T10 1471 </a> 1472 </li><li class="mobile-nav__item"> 1473 <a href="/products/replacement-360-hepa-filter-for-ap-pet35" class="mobile-nav__link"> 1474 AP-PET35 1475 </a> 1476 </li><li class="mobile-nav__item"> 1477 <a href="/products/totalclean-replacement-360-true-hepa-filter-for-hepa-tower-air-purifiers" class="mobile-nav__link"> 1478 AP-T30 1479 </a> 1480 </li></ul> 1481 </div> 1482 </div></li></ul> 1483 </div> 1484 </div></li><li class="mobile-nav__item appear-animation appear-delay-5"><div class="mobile-nav__has-sublist"><a href="/collections/humidifiers" 1485 class="mobile-nav__link mobile-nav__link--top-level" 1486 id="Label-collections-humidifiers4" 1487 > 1488 Humidifiers 1489 </a> 1490 <div class="mobile-nav__toggle"> 1491 <button type="button" 1492 aria-controls="Linklist-collections-humidifiers4" 1493 aria-labelledby="Label-collections-humidifiers4" 1494 class="collapsible-trigger collapsible--auto-height"><span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 1495 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewB
1495ox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1496</span> 1497</button> 1498 </div></div><div id="Linklist-collections-humidifiers4" 1499 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1500 > 1501 <div class="collapsible-content__inner"> 1502 <ul class="mobile-nav__sublist"><li class="mobile-nav__item"> 1503 <div class="mobile-nav__child-item"><a href="/collections/humidifiers" 1504 class="mobile-nav__link" 1505 id="Sublabel-collections-humidifiers1" 1506 > 1507 Humidifiers 1508 </a><button type="button" 1509 aria-controls="Sublinklist-collections-humidifiers4-collections-humidifiers1" 1510 aria-labelledby="Sublabel-collections-humidifiers1" 1511 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1512 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1513</span> 1514</button></div><div 1515 id="Sublinklist-collections-humidifiers4-collections-humidifiers1" 1516 aria-labelledby="Sublabel-collections-humidifiers1" 1517 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1518 > 1519 <div class="collapsible-content__inner"> 1520 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1521 <a href="/collections/cool-mist-humidifiers" class="mobile-nav__link"> 1522 Cool Mist Humidifiers 1523 </a> 1524 </li><li class="mobile-nav__item"> 1525 <a href="/collections/warm-mist-humidifiers" class="mobile-nav__link"> 1526 Warm Mist Humidifiers 1527 </a> 1528 </li><li class="mobile-nav__item"> 1529 <a href="/collections/humidifiers-parts-accessories" class="mobile-nav__link"> 1530 Humidifiers Parts & Accessories 1531 </a> 1532 </li></ul> 1533 </div> 1534 </div></li><li class="mobile-nav__item"> 1535 <div class="mobile-nav__child-item"><a href="/products/totalcomfort-deluxe-large-room-ultrasonic-humidifier" 1536 class="mobile-nav__link" 1537 id="Sublabel-products-totalcomfort-deluxe-large-room-ultrasonic-humidifier2" 1538 > 1539 Decor Humidifiers 1540 </a><button type="button" 1541 aria-controls="Sublinklist-collections-humidifiers4-products-totalcomfort-deluxe-large-room-ultrasonic-humidifier2" 1542 aria-labelledby="Sublabel-products-totalcomfort-deluxe-large-room-ultrasonic-humidifier2" 1543 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1544 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1545</span> 1546</button></div><div 1547 id="Sublinklist-collections-humidifiers4-products-totalcomfort-deluxe-large-room-ultrasonic-humidifier2" 1548 aria-labelledby="Sublabel-products-totalcomfort-deluxe-large-room-ultrasonic-humidifier2" 1549 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1550 > 1551 <div class="collapsible-content__inner"> 1552 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1553 <a href="/products/totalcomfort-deluxe-large-room-ultrasonic-humidifier" class="mobile-nav__link"> 1554 Decor Series Large Humidifier 1555 </a> 1556 </li><li class="mobile-nav__item"> 1557 <a href="/products/decor-series-medium-humidifier" class="mobile-nav__link"> 1558 Decor Series Medium Humidifier 1559 </a> 1560 </li></ul> 1561 </div> 1562 </div></li></ul> 1563 </div> 1564 </div></li><li class="mobile-nav__item appear-animation appear-delay-6"><div class="mobile-nav__has-sublist">
1564<a href="https://www.homedics.com/collections/sauna" 1565 class="mobile-nav__link mobile-nav__link--top-level" 1566 id="Label-https-www-homedics-com-collections-sauna5" 1567 > 1568 Sauna 1569 </a> 1570 <div class="mobile-nav__toggle"> 1571 <button type="button" 1572 aria-controls="Linklist-https-www-homedics-com-collections-sauna5" 1573 aria-labelledby="Label-https-www-homedics-com-collections-sauna5" 1574 class="collapsible-trigger collapsible--auto-height"><span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 1575 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1576</span> 1577</button> 1578 </div></div><div id="Linklist-https-www-homedics-com-collections-sauna5" 1579 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1580 > 1581 <div class="collapsible-content__inner"> 1582 <ul class="mobile-nav__sublist"><li class="mobile-nav__item"> 1583 <div class="mobile-nav__child-item"><a href="/collections/sauna" 1584 class="mobile-nav__link" 1585 id="Sublabel-collections-sauna1" 1586 > 1587 Saunas 1588 </a><button type="button" 1589 aria-controls="Sublinklist-https-www-homedics-com-collections-sauna5-collections-sauna1" 1590 aria-labelledby="Sublabel-collections-sauna1" 1591 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1592 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1593</span> 1594</button></div><div 1595 id="Sublinklist-https-www-homedics-com-collections-sauna5-collections-sauna1" 1596 aria-labelledby="Sublabel-collections-sauna1" 1597 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1598 > 1599 <div class="collapsible-content__inner"> 1600 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1601 <a href="/products/homedics-premium-steam-sauna" class="mobile-nav__link"> 1602 Premium Steam Sauna 1603 </a> 1604 </li><li class="mobile-nav__item"> 1605 <a href="/products/homedics%C2%AE-portable-steam-sauna" class="mobile-nav__link"> 1606 Portable Steam Sauna 1607 </a> 1608 </li><li class="mobile-nav__item"> 1609 <a href="/products/premium-steam-sauna-dual-red-light-wands-add-on" class="mobile-nav__link"> 1610 Red Light Wands 1611 </a> 1612 </li></ul> 1613 </div> 1614 </div></li></ul> 1615 </div> 1616 </div></li><li class="mobile-nav__item appear-animation appear-delay-7"><div class="mobile-nav__has-sublist"><a href="/pages/serenescent" 1617 class="mobile-nav__link mobile-nav__link--top-level" 1618 id="Label-pages-serenescent6" 1619 > 1620 SereneScent 1621 </a> 1622 <div class="mobile-nav__toggle"> 1623 <button type="button" 1624 aria-controls="Linklist-pages-serenescent6" 1625 aria-labelledby="Label-pages-serenescent6" 1626 class="collapsible-trigger collapsible--auto-height"><span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 1627 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewB
1627ox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1628</span> 1629</button> 1630 </div></div><div id="Linklist-pages-serenescent6" 1631 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1632 > 1633 <div class="collapsible-content__inner"> 1634 <ul class="mobile-nav__sublist"><li class="mobile-nav__item"> 1635 <div class="mobile-nav__child-item"><a href="/pages/serenescent" 1636 class="mobile-nav__link" 1637 id="Sublabel-pages-serenescent1" 1638 > 1639 SereneScent 1640 </a><button type="button" 1641 aria-controls="Sublinklist-pages-serenescent6-pages-serenescent1" 1642 aria-labelledby="Sublabel-pages-serenescent1" 1643 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1644 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1645</span> 1646</button></div><div 1647 id="Sublinklist-pages-serenescent6-pages-serenescent1" 1648 aria-labelledby="Sublabel-pages-serenescent1" 1649 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1650 > 1651 <div class="collapsible-content__inner"> 1652 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1653 <a href="/collections/serenescent-limited-edition-series" class="mobile-nav__link"> 1654 Limited Edition 1655 </a> 1656 </li><li class="mobile-nav__item"> 1657 <a href="/collections/serenescent-wellness-series" class="mobile-nav__link"> 1658 Wellness Series 1659 </a> 1660 </li><li class="mobile-nav__item"> 1661 <a href="/collections/serenescent-best-sellers" class="mobile-nav__link"> 1662 Best Sellers 1663 </a> 1664 </li><li class="mobile-nav__item"> 1665 <a href="/collections/premium-natural-scents" class="mobile-nav__link"> 1666 Shop All Scents 1667 </a> 1668 </li></ul> 1669 </div> 1670 </div></li><li class="mobile-nav__item"> 1671 <div class="mobile-nav__child-item"><a href="/collections/waterless-diffusers" 1672 class="mobile-nav__link" 1673 id="Sublabel-collections-waterless-diffusers2" 1674 > 1675 Diffusers 1676 </a><button type="button" 1677 aria-controls="Sublinklist-pages-serenescent6-collections-waterless-diffusers2" 1678 aria-labelledby="Sublabel-collections-waterless-diffusers2" 1679 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1680 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1681</span> 1682</button></div><div 1683 id="Sublinklist-pages-serenescent6-collections-waterless-diffusers2" 1684 aria-labelledby="Sublabel-collections-waterless-diffusers2" 1685 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1686 > 1687 <div class="collapsible-content__inner"> 1688 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1689 <a href="/collections/waterless-diffusers" class="mobile-nav__link"> 1690 Waterless Diffusers 1691 </a> 1692 </li></ul> 1693 </div> 1694 </div></li><li class="mobile-nav__item"> 1695 <div class="mobile-nav__child-item"><button type="button" 1696 aria-controls="Sublinklist-pages-serenescent6-3" 1697 class="mobile-nav__link--button collapsible-trigger">
1698 <span class="mobile-nav__faux-link">Build Your Own Bundles</span><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1699 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1700</span> 1701</button></div><div 1702 id="Sublinklist-pages-serenescent6-3" 1703 aria-labelledby="Sublabel-3" 1704 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1705 > 1706 <div class="collapsible-content__inner"> 1707 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1708 <a href="https://www.homedics.com/pages/bundle-builder-120ml" class="mobile-nav__link"> 1709 120ml SereneScent 1710 </a> 1711 </li><li class="mobile-nav__item"> 1712 <a href="https://www.homedics.com/pages/bundle-builder-15ml" class="mobile-nav__link"> 1713 15ml SereneScent 1714 </a> 1715 </li></ul> 1716 </div> 1717 </div></li></ul> 1718 </div> 1719 </div></li><li class="mobile-nav__item appear-animation appear-delay-8"><a href="/pages/drift-lp" class="mobile-nav__link mobile-nav__link--top-level">drift</a></li><li class="mobile-nav__item appear-animation appear-delay-9"><div class="mobile-nav__has-sublist"><a href="/collections/health-monitors" 1720 class="mobile-nav__link mobile-nav__link--top-level" 1721 id="Label-collections-health-monitors8" 1722 > 1723 Health Monitors 1724 </a> 1725 <div class="mobile-nav__toggle"> 1726 <button type="button" 1727 aria-controls="Linklist-collections-health-monitors8" 1728 aria-labelledby="Label-collections-health-monitors8" 1729 class="collapsible-trigger collapsible--auto-height"><span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 1730 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1731</span> 1732</button> 1733 </div></div><div id="Linklist-collections-health-monitors8" 1734 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1735 > 1736 <div class="collapsible-content__inner"> 1737 <ul class="mobile-nav__sublist"><li class="mobile-nav__item"> 1738 <div class="mobile-nav__child-item"><a href="/collections/health-monitors" 1739 class="mobile-nav__link" 1740 id="Sublabel-collections-health-monitors1" 1741 > 1742 Health Monitors 1743 </a><button type="button" 1744 aria-controls="Sublinklist-collections-health-monitors8-collections-health-monitors1" 1745 aria-labelledby="Sublabel-collections-health-monitors1" 1746 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1747 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1748</span> 1749</button></div><div 1750 id="Sublinklist-collections-health-monitors8-collections-health-monitors1" 1751 aria-labelledby="Sublabel-collections-health-monitors1" 1752 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1753 > 1754 <div class="collapsible-content__inner"> 1755 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1756 <a href="/collections/health-diagnostics" class="mobile-nav__link"> 1757 Blood Pressure Monitors 1758 </a> 1759 </li><li class="mobile-nav__item"> 1760 <a href="/collections/personal-scales" class="mobile-nav__link"> 1761 Personal Scales 1762 </a> 1763 </li><li class="mobile-nav__item"> 1764 <a href="/collections/thermometers" class="mobile-nav__link"> 1765 Thermometers 1766 </a> 1767 </li><li class="mobile-nav__item"> 1768 <a href="/collections/pulse-oximeters" class="mobile-nav__link"> 1769 Pulse Oximeters 1770 </a> 1771 </li><li class="mobile-nav__item"> 1772 <a href="/collections/diagnostic-parts-accessories" class="mobile-nav__link"> 1773 Health Monitors Parts & Accessories 1774 </a> 1775 </li></ul> 1776 </div> 1777 </div></li></ul> 1778 </div> 1779 </div></li><li class="mobile-nav__item appear-animation appear-delay-10"><div class="mobile-nav__has-sublist">
1779<a href="/collections/sauna" 1780 class="mobile-nav__link mobile-nav__link--top-level" 1781 id="Label-collections-sauna9" 1782 > 1783 Spa 1784 </a> 1785 <div class="mobile-nav__toggle"> 1786 <button type="button" 1787 aria-controls="Linklist-collections-sauna9" 1788 aria-labelledby="Label-collections-sauna9" 1789 class="collapsible-trigger collapsible--auto-height"><span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 1790 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1791</span> 1792</button> 1793 </div></div><div id="Linklist-collections-sauna9" 1794 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1795 > 1796 <div class="collapsible-content__inner"> 1797 <ul class="mobile-nav__sublist"><li class="mobile-nav__item"> 1798 <div class="mobile-nav__child-item"><a href="/collections/sauna" 1799 class="mobile-nav__link" 1800 id="Sublabel-collections-sauna1" 1801 > 1802 Sauna 1803 </a><button type="button" 1804 aria-controls="Sublinklist-collections-sauna9-collections-sauna1" 1805 aria-labelledby="Sublabel-collections-sauna1" 1806 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1807 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1808</span> 1809</button></div><div 1810 id="Sublinklist-collections-sauna9-collections-sauna1" 1811 aria-labelledby="Sublabel-collections-sauna1" 1812 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1813 > 1814 <div class="collapsible-content__inner"> 1815 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1816 <a href="/collections/sauna" class="mobile-nav__link"> 1817 Sauna 1818 </a> 1819 </li></ul> 1820 </div> 1821 </div></li><li class="mobile-nav__item"> 1822 <div class="mobile-nav__child-item"><a href="/collections/spa" 1823 class="mobile-nav__link" 1824 id="Sublabel-collections-spa2" 1825 > 1826 Spa 1827 </a><button type="button" 1828 aria-controls="Sublinklist-collections-sauna9-collections-spa2" 1829 aria-labelledby="Sublabel-collections-spa2" 1830 class="collapsible-trigger"><span class="collapsible-trigger__icon collapsible-trigger__icon--circle collapsible-trigger__icon--open" role="presentation"> 1831 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1832</span> 1833</button></div><div 1834 id="Sublinklist-collections-sauna9-collections-spa2" 1835 aria-labelledby="Sublabel-collections-spa2" 1836 class="mobile-nav__sublist collapsible-content collapsible-content--all" 1837 > 1838 <div class="collapsible-content__inner"> 1839 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1840 <a href="/collections/foot-baths" class="mobile-nav__link"> 1841 Footbaths 1842 </a> 1843 </li><li class="mobile-nav__item"> 1844 <a href="/collections/paraffin-baths" class="mobile-nav__link"> 1845 Paraffin Baths 1846 </a> 1847 </li><li class="mobile-nav__item"> 1848 <a href="/collections/fountains" class="mobile-nav__link"> 1849 Fountains 1850 </a> 1851 </li><li class="mobile-nav__item"> 1852 <a href="/collections/sound-machines" class="mobile-nav__link"> 1853 Sound Machines 1854 </a> 1855 </li></ul> 1856 </div> 1857 </div></li></ul> 1858 </div> 1859 </div></li><li class="mobile-nav__item appear-animation appear-delay-11"><a href="/collections/clearance" class="mobile-nav__link mobile-nav__link--top-level">Sale</a></li><li class="mobile-nav__item mobile-nav__item--secondary"> 1860 <div class="grid"><div class="grid__item one-half appear-animation appear-delay-12"> 1861 <a href="/account" class="mobile-nav__link">Log in 1862</a> 1863 </div></div> 1864 </li><li class="mobile-nav__item mobile-nav__item--secondary mobile-nav__item--third appear-animation appear-delay-9" style=" margin-top: 5px;"> 1865 <a href="//pages/customer-support-instruction-books" class="mobile-nav__link">Instruction Books 1866 </a> 1867 </li> 1868 <li class="mobile-nav__item mobile-nav__item--secondary mobile-nav__item--third appear-animation appear-delay-10" style="margin-bottom: 10px; "> 1869 <a href="https://registration.homedics.com/c/DS4V/custom" target="_blank" class="mobile-nav__link"> 1870 Product Registration 1871 1872 </a><div class="grid"></div> 1873 </li> 1874 1875 </ul> 1876 </div> 1877 </div> 1878</div> 1879<link href="//www.homedics.com/cdn/shop/t/138/assets/cart-drawer.css?v=53745174124480322931787623451" rel="stylesheet" type="text/css" media="all" /> 1880<div id="CartDrawer" class="drawer drawer--right"> 1881 <form id="CartDrawerForm" action="/cart" method="post" novalidate class="drawer__contents" data-location="cart-drawer"> 1882 <div class="drawer__fixed-header"> 1883 <div class="drawer__header appear-animation appear-delay-1"> 1884 <div class="h2 drawer__title">Cart</div> 1885 <div class="drawer__title-count">
1886 <span class="drawer__title-count-number">0</span> 1887 <span class="drawer__title-count-text">items</span> 1888 </div> 1889 <div class="drawer__close"> 1890 <button type="button" class="drawer__close-button js-drawer-close"> 1891 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg> 1892 <span class="icon__fallback-text">Close cart</span> 1893 </button> 1894 </div> 1895 </div> 1896 </div> 1897 1898 <div class="appear-animation appear-delay-3"> 1899 1900 1901 1902 1903<div class="free-shipping-progress" data-free-shipping-progress> 1904 <div class="free-shipping-progress__title"> 1905 <div class="free-shipping-progress__message free-shipping-progress__message--success"> 1906 <svg class="free-shipping-progress__icon" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 1907 <path d="M16.6667 5L7.5 14.1667L3.33333 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 1908 </svg> 1909 <span>You've qualified for free shipping!</span> 1910 </div> 1911 <span class="free-shipping-progress__title-text">Free shipping with $99.00 purchase</span> 1912 </div> 1913 <div class="free-shipping-progress__amount-bar"> 1914 1915 <div class="free-shipping-progress__message amount-needed"> 1916 <span>$99</span> 1917 </div><div class="free-shipping-progress__bar"> 1918 <div class="free-shipping-progress__bar-fill" style="width: 0%"></div> 1919 </div><div class="free-shipping-progress__amount-needed"> 1920 <span>$99</span> 1921 </div> 1922 </div> 1923 </div> 1924 </div> 1925 1926 1927 1928 <div class="drawer__inner"> 1929 <div class="drawer__scrollable"> 1930 <div data-products class="appear-animation appear-delay-2"></div> 1931 1932 1933 </div> 1934 1935 <div class="drawer__footer appear-animation appear-delay-4"> 1936 1937 <div data-discounts> 1938 1939 </div> 1940 1941 <div class="cart__item-sub cart__item-row"> 1942 <div class="ajaxcart__subtotal">Subtotal</div> 1943 <div data-subtotal>$0.00</div> 1944 </div> 1945 1946 <div class="cart__item-row"> 1947 <small> 1948 Taxes and shipping calculated at checkout.<br /> 1949 </small> 1950 </div> 1951 1952 1953 1954 1955 1956 <div class="cart__checkout-wrapper"> 1957 <button type="submit" name="checkout" data-terms-required="false" class="btn cart__checkout"> 1958 Checkout 1959 </button> 1960 1961 1962 <div class="additional-checkout-buttons additional-checkout-buttons--vertical"><div class="dynamic-checkout__content" id="dynamic-checkout-cart" data-shopify="dynamic-checkout-cart"> <shopify-accelerated-checkout-cart wallet-configs="[{"supports_subs":true,"supports_def_opts":false,"name":"shop_pay","wallet_params":{"shopId":70341165241,"merchantName":"Homedics","personalized":false}},{"supports_subs":true,"supports_def_opts":false,"name":"paypal","wallet_params":{"shopId":70341165241,"countryCode":"US","merchantName":"Homedics","phoneRequired":false,"companyRequired":false,"shippingType":"shipping","shopifyPaymentsEnabled":true,"hasManagedSellingPlanState":false,"requiresBillingAgreement":false,"gatewayType":"MANAGED","merchantId":"RCDL5PEKL6MUU","sdkUrl":"https://www.paypal.com/sdk/js?components=buttons\u0026commit=false\u0026currency=USD\u0026locale=en_US\u0026client-id=AbasDhzlU0HbpiStJiN1KRJ_cNJJ7xYBip7JJoMO0GQpLi8ePNgdbLXkC7_KMeyTg8tnAKW4WKrh9qmf\u0026merchant-id=RCDL5PEKL6MUU\u0026intent=authorize","serviceableCountryCodes":["CA","US"]}}]" access-token="4a4ee7960a87c3287705227ee0769347" buyer-country="US" buyer-locale="en" buyer-currency="USD" shop-id="70341165241" cart-id="8a4c90986eae09e2e90e2627b307ea4b" enabled-flags="["1172c16a","a1d1f9a1","f5afabb3","370070f3"]" > <div class="wallet-button-wrapper"> <ul class='wallet-cart-grid wallet-cart-grid--skeleton' role="list" data-shopify-buttoncontainer="true"> <li data-testid='grid-cell' class='wallet-cart-button-container'><div class='wallet-cart-button wallet-cart-button__skeleton' role='button' disabled aria-hidden='true'> </div></li><li data-testid='grid-cell' class='wallet-cart-button-container'><div class='wallet-cart-button wallet-cart-button__skeleton' role='button' disabled aria-hidden='true'> </div></li> </ul> </div> </shopify-accelerated-checkout-cart> </div></div> 1963 1964 </div> 1965 </div> 1966 </div> 1967 1968 <div class="drawer__cart-empty appear-animation appear-delay-2"> 1969 <div class="drawer__scrollable"> 1970 Your cart is currently empty. 1971 <a href="/" class="btn btn--secondary btn--full"> 1972 START SHOPPING 1973 </a> 1974 </div> 1975 </div> 1976 </form> 1977 </div><style> 1978 .site-nav__link, 1979 .site-nav__dropdown-link:not(.site-nav__dropdown-link--top-level) { 1980 font-size: 16px; 1981 } 1982 1983 .site-nav__link, .mobile-nav__link--top-level { 1984 text-transform: uppercase; 1985 letter-spacing: 0.2em; 1986 } 1987 .mobile-nav__link--top-level { 1988 font-size: 1.1em; 1989 } 1990 1991 1992 1993 1994 1995 .megamenu__collection-image { 1996 display: none; 1997 } 1998 1999</style> 2000 2001<div data-section-id="sections--22941040967865__header" data-section-type="header"><div class="toolbar small--hide"> 2002 <div> 2003 <div class="toolbar__content"> 2004 </div> 2005 2006 </div> 2007</div> 2008<div class="header-sticky-wrapper"> 2009 <div id="HeaderWrapper" class="header-wrapper"><header 2010 id="SiteHeader" 2011 class="site-header" 2012 data-sticky="true" 2013 data-overlay="false"> 2014 <div class="page-width"> 2015 <div 2016 class="header-layout header-layout--left-center" 2017 data-logo-align="left"> 2018 2019 <div class="site-nav header-item medium-up--hide"> 2020 <button 2021 type="button" 2022 class="site-nav__link site-nav__link--icon js-drawer-open-nav" 2023 aria-controls="NavDrawer"> 2024 <svg width="20" height="12" viewBox="0 0 20 12" fill="none" xmlns="http://www.w3.org/2000/svg"> 2025 <path d="M18.75 10C19.1642 10 19.5 10.3358 19.5 10.75C19.5 11.1642 19.1642 11.5 18.75 11.5H0.75C0.335786 11.5 0 11.1642 0 10.75C0 10.3358 0.335786 10 0.75 10H18.75ZM18.75 5C19.1642 5 19.5 5.33579 19.5 5.75C19.5 6.16421 19.1642 6.5 18.75 6.5H0.75C0.335786 6.5 0 6.16421 0 5.75C0 5.33579 0.335786 5 0.75 5H18.75ZM18.75 0C19.1642 0 19.5 0.335786 19.5 0.75C19.5 1.16421 19.1642 1.5 18.75 1.5H0.75C0.335786 1.5 0 1.16421 0 0.75C0 0.335786 0.335786 0 0.75 0H18.75Z" fill="#211E15"/> 2026 </svg>
2027 <span class="icon__fallback-text">Site navigation</span> 2028 </button> 2029 </div><div class="header-item header-item--logo"><style data-shopify>.header-item--logo, 2030 .header-layout--left-center .header-item--logo, 2031 .header-layout--left-center .header-item--icons { 2032 -webkit-box-flex: 0 1 130px; 2033 -ms-flex: 0 1 130px; 2034 flex: 0 1 130px; 2035 } 2036 2037 @media only screen and (min-width: 769px) { 2038 .header-item--logo, 2039 .header-layout--left-center .header-item--logo, 2040 .header-layout--left-center .header-item--icons { 2041 -webkit-box-flex: 0 0 110px; 2042 -ms-flex: 0 0 110px; 2043 flex: 0 0 110px; 2044 } 2045 } 2046 2047 .site-header__logo a { 2048 width: 130px; 2049 } 2050 .is-light .site-header__logo .logo--inverted { 2051 width: 130px; 2052 } 2053 @media only screen and (min-width: 769px) { 2054 .site-header__logo a { 2055 width: 110px; 2056 } 2057 2058 .is-light .site-header__logo .logo--inverted { 2059 width: 110px; 2060 } 2061 }</style><div class="h1 site-header__logo" itemscope itemtype="http://schema.org/Organization" > 2062 <a 2063 href="/" 2064 itemprop="url" 2065 class="site-header__logo-link" 2066 style="padding-top: 23.636363636363637%"> 2067 2068 2069 2070 2071 2072 2073 2074<image-element data-aos="image-fade-in" data-aos-offset="150"> 2075 2076 2077 2078<img src="//www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=220" alt="Homedics" srcset="//www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=110 110w, //www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=220 220w" width="110" height="26.0" loading="eager" class="small--hide image-element" sizes="110px" itemprop="logo"> 2079 2080 2081 2082</image-element> 2083 2084 2085 2086 2087<image-element data-aos="image-fade-in" data-aos-offset="150"> 2088 2089 2090 2091<img src="//www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=260" alt="Homedics" srcset="//www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=130 130w, //www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=260 260w" width="130" height="30.727272727272727" loading="eager" class="medium-up--hide image-element" sizes="130px"> 2092 2093 2094 2095</image-element> 2096</a></div></div> 2097<link href="//www.homedics.com/cdn/shop/t/138/assets/header-search-bar.css?v=67031654202594835621787623451" rel="stylesheet" type="text/css" media="all" /> 2098 2099<div class="header-search-bar"> 2100 <label for="header-search-bar__input" class="visually-hidden">Search</label> 2101 <input type="text" id="header-search-bar__input" placeholder="Search" class="header-search-bar__input"> 2102 <svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 2103 <path d="M8.2423 0.648682C10.2484 0.648724 12.1749 1.43752 13.5968 2.84399C15.0188 4.25085 15.8199 6.16122 15.8204 8.15552V8.15649C15.8204 9.64354 15.3749 11.0966 14.5411 12.3313C14.3841 12.5638 14.2142 12.7861 14.0333 12.9983L18.5499 17.0295L17.2179 18.5217L12.5353 14.342C12.0998 14.6384 11.6325 14.891 11.1398 15.093C9.75675 15.6598 8.23523 15.8085 6.76769 15.5198C5.30013 15.231 3.95006 14.5179 2.88976 13.469C1.82937 12.4199 1.10593 11.0815 0.812613 9.62329C0.519372 8.16509 0.669665 6.65353 1.24425 5.28052C1.81884 3.90762 2.79165 2.73515 4.03722 1.91138C5.2826 1.08793 6.74643 0.649005 8.2423 0.648682ZM8.2423 2.64868C7.13707 2.64894 6.05697 2.97376 5.13976 3.58032C4.22281 4.18686 3.50956 5.04799 3.08898 6.05298C2.66856 7.05776 2.55831 8.16289 2.77257 9.22876C2.98702 10.2949 3.51696 11.2763 4.29601 12.0471C5.07525 12.818 6.06974 13.3446 7.15343 13.5579C8.23723 13.7711 9.36071 13.6605 10.381 13.2424C11.401 12.8243 12.2714 12.1174 12.8829 11.2122C13.4943 10.3068 13.8204 9.24323 13.8204 8.15649C13.8202 6.69918 13.2345 5.29955 12.1896 4.26587C11.2097 3.29668 9.90092 2.7234 8.51964 2.65552L8.2423 2.64868Z" fill="#231F20"/> 2104 </svg> 2105</div> 2106 2107
2108<script> 2109 document.addEventListener('DOMContentLoaded', function() { 2110 const searchInput = document.querySelector('.header-search-bar__input'); 2111 const searchIcon = document.querySelector('.js-search-header'); 2112 2113 let searchTimeout; 2114 2115 searchInput.addEventListener('keypress', function() { 2116 // Clear any existing timeout 2117 clearTimeout(searchTimeout); 2118 2119 // Set a new timeout to trigger search icon click after 500ms (half second) 2120 searchTimeout = setTimeout(function() { 2121 if (searchIcon) { 2122 searchIcon.click(); 2123 const realSearch = document.querySelector('.search__input-wrap .search__input'); 2124 realSearch.value = searchInput.value; 2125 realSearch.dispatchEvent(new Event('input')); 2126 realSearch.focus(); 2127 } 2128 }, 500); 2129 }); 2130 }); 2131</script>
2131<div class="header-item header-item--icons"> 2132<div class="site-nav"> 2133 <div class="site-nav__icons"><a class="site-nav__link site-nav__link--icon small--hide" href="/account"> 2134 <svg width="17" height="20" viewBox="0 0 17 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 2135 <path d="M8.16952 0.5C10.2906 0.5 12.0028 2.21222 12.0028 4.33333C12.0028 6.45444 10.2906 8.16667 8.16952 8.16667C6.0484 8.16667 4.33618 6.45444 4.33618 4.33333C4.33618 2.21222 6.0484 0.5 8.16952 0.5Z" stroke="#231F20"/> 2136 <path d="M8.16886 18.6457C4.97442 18.6457 2.15053 17.0101 0.502197 14.5313C0.540531 11.9885 5.61331 10.5957 8.16886 10.5957C10.7116 10.5957 15.7972 11.9885 15.8355 14.5313C14.1872 17.0101 11.3633 18.6457 8.16886 18.6457Z" stroke="#231F20"/> 2137 </svg> 2138 2139 2140 <span class="icon__fallback-text">Log in 2141</span> 2142 </a><a href="/search" class="site-nav__link site-nav__link--icon js-search-header"> 2143 <svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 2144 <path d="M8.15674 1.01758C10.0435 1.01763 11.8547 1.75927 13.1909 3.08105C14.5272 4.40301 15.2793 6.19783 15.2798 8.07031C15.2798 9.46649 14.8608 10.8313 14.0776 11.9912C13.8609 12.3122 13.6172 12.6123 13.353 12.8916L18.106 17.1338L17.6978 17.5908L17.2896 18.0488L12.4312 13.7119C11.9559 14.0652 11.436 14.3605 10.8813 14.5879C9.58089 15.1209 8.15019 15.2598 6.77002 14.9883C5.38979 14.7167 4.12099 14.0463 3.12451 13.0605C2.12809 12.0747 1.44876 10.8175 1.17334 9.44824C0.898088 8.0791 1.03902 6.65949 1.57861 5.37012C2.11831 4.08086 3.03189 2.97931 4.20264 2.20508C5.37343 1.43091 6.74978 1.01781 8.15674 1.01758ZM7.93799 2.24805C6.84737 2.28824 5.78825 2.62756 4.87939 3.22852C3.90999 3.8696 3.15477 4.77992 2.70947 5.84375C2.26429 6.90755 2.1485 8.07823 2.37549 9.20703C2.60259 10.3359 3.16285 11.3743 3.98682 12.1895C4.81085 13.0045 5.86172 13.5599 7.00635 13.7852C8.15124 14.0104 9.33847 13.895 10.4165 13.4531C11.4943 13.0113 12.4151 12.2636 13.062 11.3057C13.7087 10.3478 14.0531 9.22191 14.0532 8.07129L14.0464 7.78223C13.9739 6.34408 13.3644 4.9779 12.3286 3.95312C11.2233 2.85979 9.72246 2.24419 8.15674 2.24414L7.93799 2.24805Z" fill="#333333"/> 2145 </svg> 2146 <span class="icon__fallback-text">Search</span> 2147 </a><a href="/cart" class="site-nav__link site-nav__link--icon js-drawer-open-cart" aria-controls="CartDrawer" data-icon="cart"> 2148 <span class="cart-link"> 2149 <svg width="22" height="19" viewBox="0 0 22 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 2150 <path d="M8.79688 15.9961C9.47765 15.9963 10.0293 16.5487 10.0293 17.2295C10.0291 17.9101 9.47752 18.4617 8.79688 18.4619C8.11605 18.4619 7.5637 17.9103 7.56348 17.2295C7.56348 16.5485 8.11591 15.9961 8.79688 15.9961ZM16.126 15.9961C16.8068 15.9963 17.3584 16.5487 17.3584 17.2295C17.3582 17.9101 16.8066 18.4617 16.126 18.4619C15.4451 18.4619 14.8928 17.9103 14.8926 17.2295C14.8926 16.5485 15.445 15.9961 16.126 15.9961ZM3.52734 0.367188L4.38281 3.47852H21.8584L21.6572 4.12598L18.7471 13.5117L18.6387 13.8643H6.20117L6.10059 13.4971L2.66406 1H0V0H3.42676L3.52734 0.367188ZM6.96387 12.8643H17.9014L20.501 4.47852H4.6582L6.96387 12.8643Z" fill="black"/> 2151 </svg> 2152 2153 <span class="icon__fallback-text">Cart</span> 2154 <span class="cart-link__bubble" style = "background: #066769;"></span> 2155 2156 2157 </span> 2158 </a> 2159 </div> 2160</div> 2161</div> 2162 </div><div class="header-item header-item--navigation text-center" role="navigation" aria-label="Primary"><ul 2163 class="site-nav site-navigation small--hide" 2164><li class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu"> 2165 2166 <details 2167 data-hover="true" 2168 id="site-nav-item--1" 2169 class="site-nav__details" 2170 > 2171 <summary 2172 data-link="/collections/massagers" 2173 aria-expanded="false" 2174 aria-controls="site-nav-item--1" 2175 class="site-nav__link site-nav__link--underline site-nav__link--has-dropdown" 2176 2177 > 2178 Massagers <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewB
2178ox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 2179 </summary> 2180 2181<div class="site-nav__dropdown megamenu text-left"> 2182 <div class="page-width"> 2183 <div class="grid grid--center menu-columns-container"> 2184 <div class="grid__item medium-up--one-fifth appear-animation appear-delay-1 menu-column"><div class="h5"> 2185 <a href="/collections/massagers" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Massagers</a> 2186 </div><div> 2187 <a href="/collections/neck-massagers" class="site-nav__dropdown-link"> 2188 Neck Massagers 2189 </a> 2190 </div><div> 2191 <a href="/collections/back-massagers" class="site-nav__dropdown-link"> 2192 Back Massagers 2193 </a> 2194 </div><div> 2195 <a href="/collections/foot-massagers" class="site-nav__dropdown-link"> 2196 Foot Massagers 2197 </a> 2198 </div><div> 2199 <a href="/collections/handheld-massagers" class="site-nav__dropdown-link"> 2200 Handheld Percussion 2201 </a> 2202 </div><div> 2203 <a href="/collections/pillows" class="site-nav__dropdown-link"> 2204 Massage Pillows 2205 </a> 2206 </div><div> 2207 <a href="/collections/sports-recovery-massagers" class="site-nav__dropdown-link"> 2208 Sports Recovery Massagers 2209 </a> 2210 </div><div> 2211 <a href="https://www.homedics.com/pages/bundle-builder-modulair" class="site-nav__dropdown-link"> 2212 Build Your Compression Massage Bundle 2213 </a> 2214 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-2"><a href="/collections/sports-recovery-massagers"> 2215 <img src="//www.homedics.com/cdn/shop/files/ModulairNav_438409e4-957b-4d60-a359-0e1bab454a68.jpg?v=1752863407&width=500" alt="massagers" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2216 <div class="megamenu__item-text"> 2217 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Sports Recovery</h3> 2218 </div> 2219 </a> 2220 </div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-3"><a href="/collections/pain-relief"> 2221 <img src="//www.homedics.com/cdn/shop/files/bm-ac108hj.webp?v=1752863537&width=500" alt="massagers" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2222 <div class="megamenu__item-text"> 2223 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Give your body the ultimate relief</h3> 2224 </div> 2225 </a> 2226 </div></div> 2227 </div> 2228 <div class = " reg-nav-border appear-animation appear-delay-5"> 2229 <div class="page-width registration-nav-drop" style=""> 2230 <a href="//pages/customer-support-instruction-books" class="site-nav__dropdown-link" style=" 2231 2232 ">Instruction Books</a> 2233 <span style=""> | </span> 2234 <a href="https://registration.homedics.com/c/DS4V/custom" class="site-nav__dropdown-link" target="_blank" style=" 2235 2236 "> 2237 Product Registration 2238 </a> 2239 2240 </div> 2241 </div> 2242 </div> 2243 </details> 2244 2245 </li><li class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu"> 2246 2247 <details 2248 data-hover="true" 2249 id="site-nav-item--2" 2250 class="site-nav__details" 2251 > 2252 <summary 2253 data-link="/collections/air-purifiers" 2254 aria-expanded="false" 2255 aria-controls="site-nav-item--2" 2256 class="site-nav__link site-nav__link--underline site-nav__link--has-dropdown" 2257 2258 > 2259 Air Purifiers <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewB
2259ox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 2260 </summary> 2261 2262<div class="site-nav__dropdown megamenu text-left"> 2263 <div class="page-width"> 2264 <div class="grid grid--center menu-columns-container"> 2265 <div class="grid__item medium-up--one-fifth appear-animation appear-delay-1 menu-column"><div class="h5"> 2266 <a href="/collections/air-purifiers" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Air Purifiers</a> 2267 </div><div> 2268 <a href="/collections/large-room-air-purifier" class="site-nav__dropdown-link"> 2269 Large Room Purifiers 2270 </a> 2271 </div><div> 2272 <a href="/collections/medium-room-air-purifier" class="site-nav__dropdown-link"> 2273 Medium Room Air Purifiers 2274 </a> 2275 </div><div> 2276 <a href="/collections/small-room-air-purifier" class="site-nav__dropdown-link"> 2277 Small Room Air Purifiers 2278 </a> 2279 </div><div> 2280 <a href="/collections/smart-air-purifier" class="site-nav__dropdown-link"> 2281 Smart Air Purifiers 2282 </a> 2283 </div><div> 2284 <a href="/collections/air-purifier-filters-accessories" class="site-nav__dropdown-link"> 2285 Air Purifiers Filters & Accesories 2286 </a> 2287 </div><div> 2288 <a href="/collections/pet-air-purifier" class="site-nav__dropdown-link"> 2289 Pet Air Purifiers 2290 </a> 2291 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-2"><a href=""> 2292 <img src="//www.homedics.com/cdn/shop/files/AP-H400_PDP07_689040da-f4a5-4d7e-83e8-c0b78312f5e5.jpg?v=1765220028&width=500" alt="Air purifiers" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2293 <div class="megamenu__item-text"> 2294 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Air purifiers</h3> 2295 </div> 2296 </a> 2297 </div></div> 2298 </div> 2299 <div class = " reg-nav-border appear-animation appear-delay-5"> 2300 <div class="page-width registration-nav-drop" style=""> 2301 <a href="//pages/customer-support-instruction-books" class="site-nav__dropdown-link" style=" 2302 2303 ">Instruction Books</a> 2304 <span style=""> | </span> 2305 <a href="https://registration.homedics.com/c/DS4V/custom" class="site-nav__dropdown-link" target="_blank" style=" 2306 2307 "> 2308 Product Registration 2309 </a> 2310 2311 </div> 2312 </div> 2313 </div> 2314 </details> 2315 2316 </li><li class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu"> 2317 2318 <details 2319 data-hover="true" 2320 id="site-nav-item--3" 2321 class="site-nav__details" 2322 > 2323 <summary 2324 data-link="/collections/parts-and-accessories" 2325 aria-expanded="false" 2326 aria-controls="site-nav-item--3" 2327 class="site-nav__link site-nav__link--underline site-nav__link--has-dropdown" 2328 2329 > 2330 Replacement Filters <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewB
2330ox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 2331 </summary> 2332 2333<div class="site-nav__dropdown megamenu text-left"> 2334 <div class="page-width"> 2335 <div class="grid grid--center menu-columns-container"> 2336 <div class="grid__item medium-up--one-fifth appear-animation appear-delay-1 menu-column"><div class="h5"> 2337 <a href="/collections/parts-and-accessories" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Other Replacement Parts</a> 2338 </div><div> 2339 <a href="/products/ultrasonic-humidifier-demineralization-cartridges-4-pack" class="site-nav__dropdown-link"> 2340 Ultrasonic Humidifier Demineralization 2341 </a> 2342 </div><div> 2343 <a href="/products/totalclean-replacement-type-1-essential-oil-pads" class="site-nav__dropdown-link"> 2344 TotalClean® Replacement 2345 </a> 2346 </div><div> 2347 <a href="/products/personal-portable-humidifier-replacement-wicks-4-pack" class="site-nav__dropdown-link"> 2348 Personal/Portable Humidifier Replacement 2349 </a> 2350 </div><div> 2351 <a href="/products/uv-c-replacement-bulbs" class="site-nav__dropdown-link"> 2352 UV-C Replacement Bulbs 2353 </a> 2354 </div><div> 2355 <a href="/products/paraspa-paraffin-wax-refill" class="site-nav__dropdown-link"> 2356 ParaSpa® Paraffin Wax Refill 2357 </a> 2358 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-2 menu-column"><div class="h5"> 2359 <a href="/collections/parts-and-accessories" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Best-Selling HEPA Filters</a> 2360 </div><div> 2361 <a href="/products/totalclean-replacement-360-degree-true-hepa-filter" class="site-nav__dropdown-link"> 2362 AP-T45, AP-T43 & AP-T40 2363 </a> 2364 </div><div> 2365 <a href="/products/totalclean-replacement-hepa-type-filter-for-tower-air-purifiers" class="site-nav__dropdown-link"> 2366 AP-T20, AP-T22 2367 </a> 2368 </div><div> 2369 <a href="/products/totalclean-apt10-replacement-hepa-type-filter" class="site-nav__dropdown-link"> 2370 AP-T15, AP-T12, AP-T10 2371 </a> 2372 </div><div> 2373 <a href="/products/replacement-360-hepa-filter-for-ap-pet35" class="site-nav__dropdown-link"> 2374 AP-PET35 2375 </a> 2376 </div><div> 2377 <a href="/products/totalclean-replacement-360-true-hepa-filter-for-hepa-tower-air-purifiers" class="site-nav__dropdown-link"> 2378 AP-T30 2379 </a> 2380 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-3"><a href="/collections/air-purifier-filters-accessories"> 2381 <img src="//www.homedics.com/cdn/shop/files/filters.png?v=1758748470&width=500" alt="replacement filters" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2382 <div class="megamenu__item-text"> 2383 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">save on air filters</h3> 2384 </div> 2385 </a> 2386 </div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-4"><a href="https://www.homedics.com/collections/air-purifier-filters-accessories"> 2387 <img src="//www.homedics.com/cdn/shop/files/air-purifier-filters-accessories2_631e42e3-58db-4bac-abba-2630d9b316c6.png?v=1781192859&width=500" alt="replacement-filters" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2388 <div class="megamenu__item-text"> 2389 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Air Purifier Filters</h3> 2390 </div> 2391 </a> 2392 </div></div> 2393 </div> 2394 <div class = " reg-nav-border appear-animation appear-delay-5"> 2395 <div class="page-width registration-nav-drop" style=""> 2396 <a href="//pages/customer-support-instruction-books" class="site-nav__dropdown-link" style=" 2397 2398 ">Instruction Books</a>
2399 <span style=""> | </span> 2400 <a href="https://registration.homedics.com/c/DS4V/custom" class="site-nav__dropdown-link" target="_blank" style=" 2401 2402 "> 2403 Product Registration 2404 </a> 2405 2406 </div> 2407 </div> 2408 </div> 2409 </details> 2410 2411 </li><li class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu"> 2412 2413 <details 2414 data-hover="true" 2415 id="site-nav-item--4" 2416 class="site-nav__details" 2417 > 2418 <summary 2419 data-link="/collections/humidifiers" 2420 aria-expanded="false" 2421 aria-controls="site-nav-item--4" 2422 class="site-nav__link site-nav__link--underline site-nav__link--has-dropdown" 2423 2424 > 2425 Humidifiers <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 2426 </summary> 2427 2428<div class="site-nav__dropdown megamenu text-left"> 2429 <div class="page-width"> 2430 <div class="grid grid--center menu-columns-container"> 2431 <div class="grid__item medium-up--one-fifth appear-animation appear-delay-1 menu-column"><div class="h5"> 2432 <a href="/collections/humidifiers" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Humidifiers</a> 2433 </div><div> 2434 <a href="/collections/cool-mist-humidifiers" class="site-nav__dropdown-link"> 2435 Cool Mist Humidifiers 2436 </a> 2437 </div><div> 2438 <a href="/collections/warm-mist-humidifiers" class="site-nav__dropdown-link"> 2439 Warm Mist Humidifiers 2440 </a> 2441 </div><div> 2442 <a href="/collections/humidifiers-parts-accessories" class="site-nav__dropdown-link"> 2443 Humidifiers Parts & Accessories 2444 </a> 2445 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-2 menu-column"><div class="h5"> 2446 <a href="/products/totalcomfort-deluxe-large-room-ultrasonic-humidifier" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Decor Humidifiers</a> 2447 </div><div> 2448 <a href="/products/totalcomfort-deluxe-large-room-ultrasonic-humidifier" class="site-nav__dropdown-link"> 2449 Decor Series Large Humidifier 2450 </a> 2451 </div><div> 2452 <a href="/products/decor-series-medium-humidifier" class="site-nav__dropdown-link"> 2453 Decor Series Medium Humidifier 2454 </a> 2455 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-3"><a href="/collections/pet-air-purifier"> 2456 <img src="//www.homedics.com/cdn/shop/files/3.26-march-nav-image-pet-plus-1_6b35d804-a5ae-44fb-9d53-91666b987d9b.jpg?v=1752863274&width=500" alt="humidifiers" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2457 <div class="megamenu__item-text"> 2458 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Shop our pet approved best sellers</h3> 2459 </div> 2460 </a> 2461 </div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-4"><a href="/collections/drift-sandtables"> 2462 <img src="//www.homedics.com/cdn/shop/files/EvergreenBrandImage_02.jpg?v=1758747490&width=500" alt="humidifiers" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2463 <div class="megamenu__item-text"> 2464 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Mindfulness made easy</h3> 2465 </div> 2466 </a> 2467 </div></div> 2468 </div> 2469 <div class = " reg-nav-border appear-animation appear-delay-5"> 2470 <div class="page-width registration-nav-drop" style=""> 2471 <a href="//pages/customer-support-instruction-books" class="site-nav__dropdown-link" style=" 2472 2473 ">Instruction Books</a>
2474 <span style=""> | </span> 2475 <a href="https://registration.homedics.com/c/DS4V/custom" class="site-nav__dropdown-link" target="_blank" style=" 2476 2477 "> 2478 Product Registration 2479 </a> 2480 2481 </div> 2482 </div> 2483 </div> 2484 </details> 2485 2486 </li><li class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu"> 2487 2488 <details 2489 data-hover="true" 2490 id="site-nav-item--5" 2491 class="site-nav__details" 2492 > 2493 <summary 2494 data-link="https://www.homedics.com/collections/sauna" 2495 aria-expanded="false" 2496 aria-controls="site-nav-item--5" 2497 class="site-nav__link site-nav__link--underline site-nav__link--has-dropdown" 2498 2499 > 2500 Sauna <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 2501 </summary> 2502 2503<div class="site-nav__dropdown megamenu text-left"> 2504 <div class="page-width"> 2505 <div class="grid grid--center menu-columns-container"> 2506 <div class="grid__item medium-up--one-fifth appear-animation appear-delay-1 menu-column"><div class="h5"> 2507 <a href="/collections/sauna" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Saunas</a> 2508 </div><div> 2509 <a href="/products/homedics-premium-steam-sauna" class="site-nav__dropdown-link"> 2510 Premium Steam Sauna 2511 </a> 2512 </div><div> 2513 <a href="/products/homedics%C2%AE-portable-steam-sauna" class="site-nav__dropdown-link"> 2514 Portable Steam Sauna 2515 </a> 2516 </div><div> 2517 <a href="/products/premium-steam-sauna-dual-red-light-wands-add-on" class="site-nav__dropdown-link"> 2518 Red Light Wands 2519 </a> 2520 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-2"><a href="/products/homedics-premium-steam-sauna"> 2521 <img src="//www.homedics.com/cdn/shop/files/SPE-SN400-CE_PDP02_EN_808a990c-8c62-4a44-932a-24df0c1eb94c.webp?v=1774552473&width=500" alt="sauna" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2522 <div class="megamenu__item-text"> 2523 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Premium Steam Sauna</h3> 2524 </div> 2525 </a> 2526 </div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-3"><a href="/products/homedics%C2%AE-portable-steam-sauna"> 2527 <img src="//www.homedics.com/cdn/shop/files/Mobile-A_v2.png?v=1781010306&width=500" alt="sauna-2" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2528 <div class="megamenu__item-text"> 2529 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Portable Steam Sauna</h3> 2530 </div> 2531 </a> 2532 </div></div> 2533 </div> 2534 <div class = " reg-nav-border appear-animation appear-delay-5"> 2535 <div class="page-width registration-nav-drop" style=""> 2536 <a href="//pages/customer-support-instruction-books" class="site-nav__dropdown-link" style=" 2537 2538 ">Instruction Books</a>
2539 <span style=""> | </span> 2540 <a href="https://registration.homedics.com/c/DS4V/custom" class="site-nav__dropdown-link" target="_blank" style=" 2541 2542 "> 2543 Product Registration 2544 </a> 2545 2546 </div> 2547 </div> 2548 </div> 2549 </details> 2550 2551 </li><li class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu"> 2552 2553 <details 2554 data-hover="true" 2555 id="site-nav-item--6" 2556 class="site-nav__details" 2557 > 2558 <summary 2559 data-link="/pages/serenescent" 2560 aria-expanded="false" 2561 aria-controls="site-nav-item--6" 2562 class="site-nav__link site-nav__link--underline site-nav__link--has-dropdown" 2563 2564 > 2565 SereneScent <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 2566 </summary> 2567 2568<div class="site-nav__dropdown megamenu text-left"> 2569 <div class="page-width"> 2570 <div class="grid grid--center menu-columns-container"> 2571 <div class="grid__item medium-up--one-fifth appear-animation appear-delay-1 menu-column"><div class="h5"> 2572 <a href="/pages/serenescent" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">SereneScent</a> 2573 </div><div> 2574 <a href="/collections/serenescent-limited-edition-series" class="site-nav__dropdown-link"> 2575 Limited Edition 2576 </a> 2577 </div><div> 2578 <a href="/collections/serenescent-wellness-series" class="site-nav__dropdown-link"> 2579 Wellness Series 2580 </a> 2581 </div><div> 2582 <a href="/collections/serenescent-best-sellers" class="site-nav__dropdown-link"> 2583 Best Sellers 2584 </a> 2585 </div><div> 2586 <a href="/collections/premium-natural-scents" class="site-nav__dropdown-link"> 2587 Shop All Scents 2588 </a> 2589 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-2 menu-column"><div class="h5"> 2590 <a href="/collections/waterless-diffusers" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Diffusers</a> 2591 </div><div> 2592 <a href="/collections/waterless-diffusers" class="site-nav__dropdown-link"> 2593 Waterless Diffusers 2594 </a> 2595 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-3 menu-column"><div class="h5"> 2596 <a href="#" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Build Your Own Bundles</a> 2597 </div><div> 2598 <a href="https://www.homedics.com/pages/bundle-builder-120ml" class="site-nav__dropdown-link"> 2599 120ml SereneScent 2600 </a> 2601 </div><div> 2602 <a href="https://www.homedics.com/pages/bundle-builder-15ml" class="site-nav__dropdown-link"> 2603 15ml SereneScent 2604 </a> 2605 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-4"><a href="/collections/serenescent-best-sellers"> 2606 <img src="//www.homedics.com/cdn/shop/files/Best_seller.png?v=1769000677&width=500" alt="serenescent" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2607 <div class="megamenu__item-text"> 2608 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">
2608Shop Best Sellers</h3> 2609 </div> 2610 </a> 2611 </div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-5"><a href="/collections/serenescent-wellness-series"> 2612 <img src="//www.homedics.com/cdn/shop/files/Wellness_series.png?v=1769000724&width=500" alt="serenescent" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2613 <div class="megamenu__item-text"> 2614 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Shop Wellness Series</h3> 2615 </div> 2616 </a> 2617 </div></div> 2618 </div> 2619 <div class = " reg-nav-border appear-animation appear-delay-5"> 2620 <div class="page-width registration-nav-drop" style=""> 2621 <a href="//pages/customer-support-instruction-books" class="site-nav__dropdown-link" style=" 2622 2623 ">Instruction Books</a> 2624 <span style=""> | </span> 2625 <a href="https://registration.homedics.com/c/DS4V/custom" class="site-nav__dropdown-link" target="_blank" style=" 2626 2627 "> 2628 Product Registration 2629 </a> 2630 2631 </div> 2632 </div> 2633 </div> 2634 </details> 2635 2636 </li><li class="site-nav__item site-nav__expanded-item"> 2637 2638 <a 2639 href="/pages/drift-lp" 2640 class="site-nav__link site-nav__link--underline" 2641 2642 > 2643 drift 2644 </a> 2645 2646 2647 </li><li class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu"> 2648 2649 <details 2650 data-hover="true" 2651 id="site-nav-item--8" 2652 class="site-nav__details" 2653 > 2654 <summary 2655 data-link="/collections/health-monitors" 2656 aria-expanded="false" 2657 aria-controls="site-nav-item--8" 2658 class="site-nav__link site-nav__link--underline site-nav__link--has-dropdown" 2659 2660 > 2661 Health Monitors <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 2662 </summary> 2663 2664<div class="site-nav__dropdown megamenu text-left"> 2665 <div class="page-width"> 2666 <div class="grid grid--center menu-columns-container"> 2667 <div class="grid__item medium-up--one-fifth appear-animation appear-delay-1 menu-column"><div class="h5"> 2668 <a href="/collections/health-monitors" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Health Monitors</a> 2669 </div><div> 2670 <a href="/collections/health-diagnostics" class="site-nav__dropdown-link"> 2671 Blood Pressure Monitors 2672 </a> 2673 </div><div> 2674 <a href="/collections/personal-scales" class="site-nav__dropdown-link"> 2675 Personal Scales 2676 </a> 2677 </div><div> 2678 <a href="/collections/thermometers" class="site-nav__dropdown-link"> 2679 Thermometers 2680 </a> 2681 </div><div> 2682 <a href="/collections/pulse-oximeters" class="site-nav__dropdown-link"> 2683 Pulse Oximeters 2684 </a> 2685 </div><div> 2686 <a href="/collections/diagnostic-parts-accessories" class="site-nav__dropdown-link"> 2687 Health Monitors Parts & Accessories 2688 </a> 2689 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-2"><a href="/collections/health-diagnostics"> 2690 <img src="//www.homedics.com/cdn/shop/files/BPA-100AHBT-WT_IU3_1x1_1d33e902-8d56-4afc-abe0-487c32891191.jpg?v=1758748855&width=500" alt="health monitors" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2691 <div class="megamenu__item-text"> 2692 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Peace of mind, one reading at a time</h3> 2693 </div> 2694 </a> 2695 </div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-3"><a href="/collections/personal-scales"> 2696 <img src="//www.homedics.com/cdn/shop/files/Health_Monitors_copy.jpg?v=1760673816&width=500" alt="health monitors" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2697 <div class="megamenu__item-text"> 2698 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Scale smarter, live better</h3> 2699 </div> 2700 </a> 2701 </div></div> 2702 </div> 2703 <div class = " reg-nav-border appear-animation appear-delay-5"> 2704 <div class="page-width registration-nav-drop" style=""> 2705 <a href="//pages/customer-support-instruction-books" class="site-nav__dropdown-link" style=" 2706 2707 ">Instruction Books</a>
2708 <span style=""> | </span> 2709 <a href="https://registration.homedics.com/c/DS4V/custom" class="site-nav__dropdown-link" target="_blank" style=" 2710 2711 "> 2712 Product Registration 2713 </a> 2714 2715 </div> 2716 </div> 2717 </div> 2718 </details> 2719 2720 </li><li class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu"> 2721 2722 <details 2723 data-hover="true" 2724 id="site-nav-item--9" 2725 class="site-nav__details" 2726 > 2727 <summary 2728 data-link="/collections/sauna" 2729 aria-expanded="false" 2730 aria-controls="site-nav-item--9" 2731 class="site-nav__link site-nav__link--underline site-nav__link--has-dropdown" 2732 2733 > 2734 Spa <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 2735 </summary> 2736 2737<div class="site-nav__dropdown megamenu text-left"> 2738 <div class="page-width"> 2739 <div class="grid grid--center menu-columns-container"> 2740 <div class="grid__item medium-up--one-fifth appear-animation appear-delay-1 menu-column"><div class="h5"> 2741 <a href="/collections/sauna" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Sauna</a> 2742 </div><div> 2743 <a href="/collections/sauna" class="site-nav__dropdown-link"> 2744 Sauna 2745 </a> 2746 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-2 menu-column"><div class="h5"> 2747 <a href="/collections/spa" class="site-nav__dropdown-link site-nav__dropdown-link--top-level">Spa</a> 2748 </div><div> 2749 <a href="/collections/foot-baths" class="site-nav__dropdown-link"> 2750 Footbaths 2751 </a> 2752 </div><div> 2753 <a href="/collections/paraffin-baths" class="site-nav__dropdown-link"> 2754 Paraffin Baths 2755 </a> 2756 </div><div> 2757 <a href="/collections/fountains" class="site-nav__dropdown-link"> 2758 Fountains 2759 </a> 2760 </div><div> 2761 <a href="/collections/sound-machines" class="site-nav__dropdown-link"> 2762 Sound Machines 2763 </a> 2764 </div></div><div class="grid__item medium-up--one-fifth appear-animation appear-delay-3"><a href="/products/homedics%C2%AE-portable-steam-sauna"> 2765 <img src="//www.homedics.com/cdn/shop/files/Screenshot_2026-05-29_at_10.51.18_PM.png?v=1780066304&width=500" alt="spa" height="100%" width="auto" style="aspect-ratio: 4/3; object-fit: cover; object-position: center; border-radius: 10px;"> 2766 <div class="megamenu__item-text"> 2767 <h3 style="letter-spacing: 0.05em; line-height: 1.2; font-size: 14px; text-transform: capitalize; font-weight: 600; margin-bottom: 0; margin-top: 10px; width: 100%; text-align: center;" class="h5">Detox at Home</h3> 2768 </div> 2769 </a> 2770 </div></div> 2771 </div> 2772 <div class = " reg-nav-border appear-animation appear-delay-5"> 2773 <div class="page-width registration-nav-drop" style=""> 2774 <a href="//pages/customer-support-instruction-books" class="site-nav__dropdown-link" style=" 2775 2776 ">Instruction Books</a> 2777 <span style=""> | </span> 2778 <a href="https://registration.homedics.com/c/DS4V/custom" class="site-nav__dropdown-link" target="_blank" style=" 2779 2780 "> 2781 Product Registration 2782 </a> 2783 2784 </div> 2785 </div> 2786 </div> 2787 </details> 2788 2789 </li><li class="site-nav__item site-nav__expanded-item"> 2790 2791 <a 2792 href="/collections/clearance" 2793 class="site-nav__link site-nav__link--underline" 2794 2795 > 2796 Sale
2797 </a> 2798 2799 2800 </li></ul> 2801</div></div> 2802 <div class="site-header__search-container"> 2803 <div class="site-header__search"> 2804 <predictive-search data-context="header" data-enabled="true" data-dark="false"> 2805 <div class="predictive__screen" data-screen></div> 2806 <div class="header-item header-item--logo"><style data-shopify>.header-item--logo, 2807 .header-layout--left-center .header-item--logo, 2808 .header-layout--left-center .header-item--icons { 2809 -webkit-box-flex: 0 1 130px; 2810 -ms-flex: 0 1 130px; 2811 flex: 0 1 130px; 2812 } 2813 2814 @media only screen and (min-width: 769px) { 2815 .header-item--logo, 2816 .header-layout--left-center .header-item--logo, 2817 .header-layout--left-center .header-item--icons { 2818 -webkit-box-flex: 0 0 110px; 2819 -ms-flex: 0 0 110px; 2820 flex: 0 0 110px; 2821 } 2822 } 2823 2824 .site-header__logo a { 2825 width: 130px; 2826 } 2827 .is-light .site-header__logo .logo--inverted { 2828 width: 130px; 2829 } 2830 @media only screen and (min-width: 769px) { 2831 .site-header__logo a { 2832 width: 110px; 2833 } 2834 2835 .is-light .site-header__logo .logo--inverted { 2836 width: 110px; 2837 } 2838 }</style><div class="h1 site-header__logo" itemscope itemtype="http://schema.org/Organization" > 2839 <a 2840 href="/" 2841 itemprop="url" 2842 class="site-header__logo-link" 2843 style="padding-top: 23.636363636363637%"> 2844 2845 2846 2847 2848 2849 2850 2851<image-element data-aos="image-fade-in" data-aos-offset="150"> 2852 2853 2854 2855<img src="//www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=220" alt="Homedics" srcset="//www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=110 110w, //www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=220 220w" width="110" height="26.0" loading="eager" class="small--hide image-element" sizes="110px" itemprop="logo"> 2856 2857 2858 2859</image-element> 2860 2861 2862 2863 2864<image-element data-aos="image-fade-in" data-aos-offset="150"> 2865 2866 2867 2868<img src="//www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=260" alt="Homedics" srcset="//www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=130 130w, //www.homedics.com/cdn/shop/files/homedics.svg?v=1758739772&width=260 260w" width="130" height="30.727272727272727" loading="eager" class="medium-up--hide image-element" sizes="130px"> 2869 2870 2871 2872</image-element> 2873</a></div></div> 2874 <form action="/search" method="get" role="search"> 2875 <label for="Search" class="hidden-label">Search</label> 2876 <div class="search__input-wrap"> 2877 <input 2878 class="search__input" 2879 id="Search" 2880 type="search" 2881 name="q" 2882 value="" 2883 role="combobox" 2884 aria-expanded="false" 2885 aria-owns="predictive-search-results" 2886 aria-controls="predictive-search-results" 2887 aria-haspopup="listbox" 2888 aria-autocomplete="list" 2889 autocorrect="off" 2890 autocomplete="off" 2891 autocapitalize="off" 2892 spellcheck="false" 2893 placeholder="Search" 2894 tabindex="0" 2895 > 2896 <input name="options[prefix]" type="hidden" value="last"> 2897 <button class="btn--search" type="submit"> 2898 <svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 2899 <path d="M8.2423 0.648682C10.2484 0.648724 12.1749 1.43752 13.5968 2.84399C15.0188 4.25085 15.8199 6.16122 15.8204 8.15552V8.15649C15.8204 9.64354 15.3749 11.0966 14.5411 12.3313C14.3841 12.5638 14.2142 12.7861 14.0333 12.9983L18.5499 17.0295L17.2179 18.5217L12.5353 14.342C12.0998 14.6384 11.6325 14.891 11.1398 15.093C9.75675 15.6598 8.23523 15.8085 6.76769 15.5198C5.30013 15.231 3.95006 14.5179 2.88976 13.469C1.82937 12.4199 1.10593 11.0815 0.812613 9.62329C0.519372 8.16509 0.669665 6.65353 1.24425 5.28052C1.81884 3.90762 2.79165 2.73515 4.03722 1.91138C5.2826 1.08793 6.74643 0.649005 8.2423 0.648682ZM8.2423 2.64868C7.13707 2.64894 6.05697 2.97376 5.13976 3.58032C4.22281 4.18686 3.50956 5.04799 3.08898 6.05298C2.66856 7.05776 2.55831 8.16289 2.77257 9.22876C2.98702 10.2949 3.51696 11.2763 4.29601 12.0471C5.07525 12.818 6.06974 13.3446 7.15343 13.5579C8.23723 13.7711 9.36071 13.6605 10.381 13.2424C11.401 12.8243 12.2714 12.1174 12.8829 11.2122C13.4943 10.3068 13.8204 9.24323 13.8204 8.15649C13.8202 6.69918 13.2345 5.29955 12.1896 4.26587C11.2097 3.29668 9.90092 2.7234 8.51964 2.65552L8.2423 2.64868Z" fill="#231F20"/> 2900 </svg> 2901
2902 <span class="icon__fallback-text">Search</span> 2903 </button> 2904 </div> 2905 2906 <button class="btn--close-search"> 2907 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><defs><style>.cls-1{fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px}</style></defs><path class="cls-1" d="M19 17.61l27.12 27.13m0-27.13L19 44.74"/></svg> 2908 </button> 2909 <div id="predictive-search" class="search__results" tabindex="-1"></div> 2910 </form> 2911</predictive-search> 2912 2913 </div> 2914 </div> 2915 </header> 2916 </div> 2917 </div> 2918</div> 2919 2920 2921
2922<script type="application/ld+json"> 2923 { 2924 "@context": "https://schema.org", 2925 "@type": "OnlineStore", 2926 "@id": "https:\/\/www.homedics.com#organization", 2927 "name": "Homedics", 2928 "url": "https:\/\/www.homedics.com" 2929,"description": "The leading global manufacturer of health and wellness products that help relax your body, de-stress your mind and promote your well-being." 2930,"logo": { 2931 "@type": "ImageObject", 2932 "url": "https:\/\/www.homedics.com\/cdn\/shop\/files\/Homedics_Header_Logo_8e556455-7905-4174-ab45-41c4603d3b48.svg?v=1760563378\u0026width=500" 2933 },"brand": { 2934 "@id": "https:\/\/www.homedics.com#brand" 2935 } 2936 ,"sameAs": [ 2937"https:\/\/www.facebook.com\/homedics\/", 2938"https:\/\/www.instagram.com\/homedics\/", 2939"https:\/\/www.youtube.com\/user\/HoMedicsTV?themeRefresh=1", 2940"https:\/\/www.tiktok.com\/@homedics" 2941 ] 2942 ,"contactPoint": { 2943 "@type": "ContactPoint", 2944 "contactType": "customer service" 2945 , 2946 "email": "[email protected]" 2947 , 2948 "telephone": "1-866-843-3905", 2949 "availableLanguage": ["English"] 2950 } 2951 ,"address": { 2952 "@type": "PostalAddress" 2953 2954 2955 2956 2957 , 2958 "addressCountry": "US" 2959 } 2960 } 2961</script>
2961 2962 2963
2964<script type="application/ld+json"> 2965 { 2966 "@context": "https://schema.org", 2967 "@type": "Brand", 2968 "@id": "https:\/\/www.homedics.com#brand", 2969 "name": "Homedics" 2970 } 2971</script>
2971 2972 2973 2974 2975 2976 2977 2978</div> 2979<!-- END sections: header-group --><!-- BEGIN sections: popup-group --> 2980 2981<!-- END sections: popup-group --><main class="main-content" id="MainContent"> 2982 <link href="//www.homedics.com/cdn/shop/t/138/assets/account.css?v=18218027381848824581787623451" rel="stylesheet" type="text/css" media="all" /> 2983 2984<div class="account-page page-width login-page"> 2985 <div class="header-styled"> 2986 <h2>Welcome!</h2> 2987 </div> 2988 <div class="account-page-image"> 2989 <img src="https://cdn.shopify.com/s/files/1/0703/4116/5241/files/login.png?v=1751654811" alt="Account Page Image" width="100%" height="100%"> 2990 </div> 2991 <div class="page-width page-width--tiny page-content account-page-content"> 2992 <div class="account-page-content-inner"> 2993 <header class="section-header"> 2994 <h1 class="section-header__title">Login</h1> 2995 <p class="section-header__description">Sign in to your account to access your personalized shopping experience and track your orders.</p> 2996 </header> 2997 2998 <div class="note note--success hide" id="ResetSuccess"> 2999 We've sent you an email with a link to update your password. 3000 </div> 3001 3002 <div id="CustomerLoginForm" class="form-vertical"><form method="post" action="/account/login" id="customer_login" accept-charset="UTF-8" data-login-with-shop-sign-in="true"><input type="hidden" name="form_type" value="customer_login" /><input type="hidden" name="utf8" value="✓" /> 3003 3004 <label for="CustomerEmail">Email</label> 3005 <input type="email" name="customer[email]" id="CustomerEmail" class="input-full" autocorrect="off" autocapitalize="off" autofocus placeholder="Enter email address"><div class="grid"> 3006 <div class="grid__item one-half"> 3007 <label for="CustomerPassword">Password</label> 3008 </div> 3009 <div class="grid__item one-half text-right"> 3010 <small class="label-info"> 3011 <a href="#recover" id="RecoverPassword"> 3012 Forgot password? 3013 </a> 3014 </small> 3015 </div> 3016 </div> 3017 <input type="password" value="" name="customer[password]" id="CustomerPassword" class="input-full" placeholder="Enter password"><p> 3018 <button type="submit" class="btn"> 3019 Sign In 3020 </button> 3021 </p><input type="hidden" name="return_url" value="/account" /></form></div> 3022 3023 <div id="RecoverPasswordForm" class="hide"> 3024 <div class="form-vertical"> 3025 <h2>Reset your password</h2> 3026 <p>We will send you an email to reset your password.</p><form method="post" action="/account/recover" accept-charset="UTF-8"><input type="hidden" name="form_type" value="recover_customer_password" /><input type="hidden" name="utf8" value="✓" /> 3027<label for="RecoverEmail">Email</label> 3028 <input type="email" value="" name="email" id="RecoverEmail" class="input-full" autocorrect="off" autocapitalize="off"> 3029 3030 <p class="account-page-recover-password-buttons"> 3031 <button type="submit" class="btn"> 3032 Submit 3033 </button> 3034 <button type="button" id="HideRecoverPasswordLink" class="btn btn--secondary">Cancel</button> 3035 </p></form></div> 3036 3037 </div></div> 3038 3039 <div class="account-page-no-account"> 3040 <h2>New customer?</h2> 3041 <p>Create an account with us and you'll be able to:</p> 3042 <ul> 3043 <li>Check out faster</li> 3044 <li>Save multiple shipping addresses</li> 3045 <li>Access your order history</li> 3046 <li>Track new orders</li> 3047 <li>Save items to your Wish List</li> 3048 </ul> 3049 <a class="btn" href="/account/register">Create Account</a> 3050 </div> 3051 </div> 3052</div> 3053 3054 3055 </main><!-- BEGIN sections: footer-group --> 3056<div id="shopify-section-sections--22941040935097__footer" class="shopify-section shopify-section-group-footer-group"> 3057<footer class="site-footer" data-section-id="sections--22941040935097__footer" data-section-type="footer-section"> 3058 <div class="hp-policies"> 3059 <ul> 3060 <li 3061 class="satisfaction" 3062 style=" 3063 letter-spacing: 1%; 3064 text-transform: capitalize; 3065 " 3066 > 3067 <img 3068 color="red" 3069 loading="lazy" 3070 src="/cdn/shop/files/shield.svg" 3071 alt="Icon - 30-day guarantee" 3072 /> 3073 <div class="hp-policies-content"> 3074 <p>30-day</p> 3075 <p>guarantee</p> 3076 </div> 3077 </li> 3078 3079 <li 3080 class="free-shipping" 3081 style=" 3082 letter-spacing: 1%; 3083 text-transform: capitalize; 3084 " 3085 > 3086 <img 3087 loading="lazy" 3088 src="/cdn/shop/files/truck.svg" 3089 alt="Icon - Fast, Free shipping" 3090 /> 3091 <div class="hp-policies-content"> 3092 <p>free shipping</p> 3093 <p>on $99</p> 3094 </div> 3095 </li> 3096 <li 3097 class="subscribe" 3098 style=" 3099 letter-spacing: 1%; 3100 text-transform: capitalize; 3101 " 3102 > 3103 <img 3104 loading="lazy" 3105 src="/cdn/shop/files/sync.svg" 3106 alt="Icon - subscribe & save 15%" 3107 /> 3108 <div class="hp-policies-content"> 3109 <p>subscribe</p> 3110 <p>& save 25%</p> 3111 </div> 3112 </li> 3113 </ul> 3114</div> 3115 <div class="page-width"> 3116 <div class="footer-item--logo"><img src="//www.homedics.com/cdn/shop/files/homedics-logo-footer.png?v=1763002982&width=400" alt=""></div> 3117 <div class="footer__grid">
3117<div class="footer__column footer__column--logo-support"><div class="footer__item--footer-1" data-type="menu"><h3 class="h4 footer__title small--hide"> 3118 Support 3119 </h3> 3120 <button type="button" class="h4 footer__title collapsible-trigger collapsible-trigger-btn medium-up--hide" aria-controls="Footer-footer-1"> 3121 Support 3122<span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 3123 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 3124</span> 3125</button><div 3126 3127 id="Footer-footer-1" class="collapsible-content collapsible-content--small" 3128 > 3129 <div class="collapsible-content__inner"> 3130 <div class="footer__collapsible"> 3131 <ul class="no-bullets site-footer__linklist"><li><a href="/pages/customer-support-contact-us">Contact Us</a></li><li><a href="/pages/customer-support">Support Center</a></li><li><a href="/pages/customer-support-shipping-and-delivery">Shipping Policy</a></li><li><a href="/pages/customer-support-returns">Return Policy</a></li><li><a href="/pages/customer-support-recalls">Product Recalls</a></li><li><a href="/pages/customer-support-instruction-books">Instruction Booklets</a></li><li><a href="/pages/offers">Terms and Conditions</a></li><li><a href="/pages/footer-support-pre-order-terms">Pre-Order Terms</a></li><li><a href="https://registration.homedics.com/c/DS4V/custom">Product Registrations</a></li><li><a href="/collections/discontinued-products">Discontinued Products</a></li></ul> 3132 </div> 3133 </div> 3134 </div></div></div><div class="footer__column footer__column--about"><div class="footer__item--menu_8xzJK8" data-type="menu"><h3 class="h4 footer__title small--hide"> 3135 About Us 3136 </h3> 3137 <button type="button" class="h4 footer__title collapsible-trigger collapsible-trigger-btn medium-up--hide" aria-controls="Footer-menu_8xzJK8"> 3138 About Us 3139<span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 3140 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 3141</span> 3142</button><div 3143 3144 id="Footer-menu_8xzJK8" class="collapsible-content collapsible-content--small" 3145 > 3146 <div class="collapsible-content__inner"> 3147 <div class="footer__collapsible"> 3148 <ul class="no-bullets site-footer__linklist"><li><a href="/pages/about-us">Our Story</a></li><li><a href="https://blog.homedics.com/">Blog</a></li><li><a href="/pages/sustainability">Sustainability</a></li><li><a href="/pages/policies">Social Policies</a></li><li><a href="/pages/customer-support-accessibility">Web Accessibility</a></li><li><a href="http://app.impact.com/campaign-campaign-info-v2/Homedics.brand">Affiliates</a></li><li><a href="/pages/customer-support-finding-a-retailer">Partners</a></li><li><a href="/pages/about-us-careers">Careers</a></li></ul> 3149 </div> 3150 </div> 3151 </div></div></div><div class="footer__column footer__column--brands"><div class="footer__item--menu_HGUMky" data-type="menu"><h3 class="h4 footer__title small--hide"> 3152 Our Brands 3153 </h3> 3154 <button type="button" class="h4 footer__title collapsible-trigger collapsible-trigger-btn medium-up--hide" aria-controls="Footer-menu_HGUMky"> 3155 Our Brands 3156<span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 3157 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 3158</span> 3159</button><div 3160 3161 id="Footer-menu_HGUMky" class="collapsible-content collapsible-content--small" 3162 > 3163 <div class="collapsible-content__inner"> 3164 <div class="footer__collapsible"> 3165 <ul class="no-bullets site-footer__linklist"><li><a href="https://www.thehouseofmarley.com/">House of Marley</a></li><li><a href="/collections/ellia">Ellia</a></li><li><a href="https://www.jamaudio.com/">Jam</a></li><li><a href="https://www.campsnapphoto.com/">CampSnap</a></li><li><a href="https://motordayz.com/">MotorDayz</a></li><li><a href="https://www.7lsbeauty.com/">7LS</a></li></ul> 3166 </div> 3167 </div> 3168 </div></div></div>
3168<div class="footer__column footer__column--newsletter-social"><div class="footer__item--footer2" data-type="newsletter"><div class="footer__item-padding footer__newsletter-container"><h2 class="h4 footer__title">Get 15% Off your next purchase when you sign up for email!</h2><div 3169 3170 id="Footer-footer2" 3171 > 3172 <div class="collapsible-content__inner"> 3173 <div class="footer__collapsible"><div class="footer__newsletter-text"></div> 3174 <div class = "klaviyo-footer-signup"> 3175 <div class = "klaviyo-form-VpfaPK"></div> 3176 </div> 3177 3178 3179 </div> 3180 </div> 3181 </div> 3182</div> 3183</div><div class="footer__social-section"> 3184 <h2 class="h4 footer__title">Follow Us</h2> 3185 <p class="footer__social-description">Check us out on social media for the latest updates!</p><ul class="no-bullets social-icons footer__social"><li> 3186 <a target="_blank" rel="noopener" href="https://www.facebook.com/homedics/" title="Homedics on Facebook"> 3187 <svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg"> 3188 <path d="M17.5069 1.46995e-06C13.1019 -0.001803 8.85813 1.65778 5.62292 4.64745C2.38771 7.63713 0.399017 11.7369 0.05384 16.1285C-0.291337 20.52 1.0324 24.8802 3.76079 28.3386C6.48918 31.797 10.4215 34.0993 14.7728 34.7857V22.5564H10.3297V17.4984H14.7728V13.643C14.7728 9.25752 17.3852 6.83509 21.3822 6.83509C22.6944 6.85339 24.0036 6.96775 25.2991 7.17728V11.4827H23.0924C20.9195 11.4827 20.2411 12.8316 20.2411 14.2156V17.4984H25.0933L24.3169 22.5564H20.2398V34.7857C24.5884 34.0964 28.5174 31.7933 31.2432 28.3356C33.9689 24.8779 35.2912 20.5198 34.9462 16.1304C34.6011 11.741 32.6142 7.64302 29.3817 4.65367C26.1491 1.66433 21.9085 0.00334519 17.5056 0.0019885" fill="#535353"/> 3189 </svg> 3190 <span class="icon__fallback-text">Facebook</span> 3191 </a> 3192 </li><li> 3193 <a target="_blank" rel="noopener" href="https://www.instagram.com/homedics/" title="Homedics on Instagram"> 3194 <svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg"> 3195 <path fill-rule="evenodd" clip-rule="evenodd" d="M17.5 0C27.165 0 35 7.83502 35 17.5C35 27.165 27.165 35 17.5 35C7.83502 35 0 27.165 0 17.5C0 7.83502 7.83502 0 17.5 0ZM19.0098 6.25142L16.3058 6.25072C14.3124 6.25456 13.8838 6.27094 12.861 6.31726C11.9278 6.33605 11.0045 6.51293 10.1304 6.84039C8.61919 7.42457 7.42457 8.61919 6.84039 10.1304C6.51293 11.0045 6.33605 11.9278 6.31726 12.861C6.27041 13.8832 6.2544 14.3127 6.25069 16.3059L6.25072 18.6923C6.25456 20.6854 6.27094 21.1145 6.31726 22.1373C6.33605 23.0705 6.51293 23.9938 6.84039 24.8679C7.42457 26.3791 8.61919 27.5737 10.1304 28.1579C11.0045 28.4853 11.9278 28.6622 12.861 28.681C13.8755 28.7275 14.3062 28.7436 16.261 28.7475L18.7372 28.7475C20.692 28.7435 21.1222 28.727 22.1373 28.681C23.0705 28.6622 23.9938 28.4853 24.8679 28.1579C26.3791 27.5737 27.5737 26.3791 28.1579 24.8679C28.4853 23.9938 28.6622 23.0705 28.681 22.1373C28.7275 21.1228 28.7436 20.6921 28.7475 18.7373L28.7475 16.261C28.7435 14.3063 28.727 13.876 28.681 12.861C28.6622 11.9278 28.4853 11.0045 28.1579 10.1304C27.5737 8.61919 26.3791 7.42457 24.8679 6.84039C23.9936 6.51286 23.0701 6.33598 22.1366 6.31726C21.1144 6.27041 20.685 6.2544 18.6917 6.25069L19.0098 6.25142ZM18.6705 8.27747C20.6259 8.28085 21.0336 8.29548 22.0441 8.33914C22.7574 8.34771 23.464 8.47878 24.1329 8.72664C25.114 9.10512 25.8894 9.88056 26.2679 10.8616C26.5158 11.5305 26.6468 12.2371 26.6554 12.9504C26.7017 13.962 26.7145 14.369 26.7172 16.3245L26.7174 18.4047C26.7149 20.5902 26.7009 20.9878 26.6554 22.0423C26.6468 22.7556 26.5157 23.4621 26.2679 24.131C25.8894 25.1121 25.114 25.8875 24.1329 26.266C23.464 26.5139 22.7574 26.6449 22.0441 26.6535C21.0765 26.6978 20.6621 26.7114 18.9168 26.7149L18.1238 26.7159L16.3265 26.7152C14.371 26.7118 13.9629 26.6972 12.9529 26.6535C12.2396 26.645 11.533 26.5139 10.8641 26.266C9.88306 25.8875 9.10762 25.1121 8.72914 24.131C8.48128 23.4621 8.35021 22.7556 8.34164 22.0423C8.29532 21.0307 8.28256 20.6237 8.2798 18.6681L8.27997 16.3239C8.28335 14.3682 8.29798 13.9609 8.34164 12.9504C8.35021 12.2371 8.48128 11.5306 8.72914 10.8616C9.10762 9.88056 9.88306 9.10512 10.8641 8.72664C11.533 8.47877 12.2396 8.3477 12.9529 8.33914C13.9205 8.29483 14.3349 8.28123 16.0806 8.27772L18.6705 8.27747ZM17.4985 12.796C14.9007 12.796 12.7948 14.902 12.7948 17.4998C12.7948 20.0976 14.9007 22.2035 17.4985 22.2035C20.0963 22.2035 22.2023 20.0976 22.2023 17.4998C22.2023 14.902 20.0963 12.796 17.4985 12.796ZM15.3394 15.3402C16.2129 14.4669 17.5265 14.2058 18.6676 14.6786C19.8087 15.1515 20.5525 16.2652 20.5523 17.5004C20.5519 19.1867 19.1848 20.5535 17.4985 20.5535C16.2633 20.5535 15.1498 19.8094 14.6772 18.6682C14.2045 17.5271 14.4659 16.2135 15.3394 15.3402ZM23.3429 10.0404C22.4513 10.0404 21.7285 10.7632 21.7285 11.6548C21.7285 12.5464 22.4513 13.2691 23.3429 13.2691C24.2345 13.2691 24.9573 12.5464 24.9573 11.6548C24.9573 10.7632 24.2345 10.0404 23.3429 10.0404Z" fill="#535353"/> 3196 </svg>
3197 <span class="icon__fallback-text">Instagram</span> 3198 </a> 3199 </li><li> 3200 <a target="_blank" rel="noopener" href="https://www.tiktok.com/@homedics" title="Homedics on TikTok"> 3201 <svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg"> 3202 <path d="M17.5 0C14.0388 0 10.6554 1.02636 7.77753 2.94928C4.89967 4.87221 2.65665 7.60533 1.33212 10.803C0.00758461 14.0007 -0.338977 17.5194 0.336265 20.9141C1.01151 24.3087 2.67822 27.4269 5.12564 29.8744C7.57306 32.3218 10.6913 33.9885 14.0859 34.6637C17.4806 35.339 20.9993 34.9924 24.197 33.6679C27.3947 32.3433 30.1278 30.1003 32.0507 27.2225C33.9736 24.3446 35 20.9612 35 17.5C35 12.8587 33.1563 8.40752 29.8744 5.12563C26.5925 1.84375 22.1413 0 17.5 0ZM26.0044 15.7472C24.3326 15.7513 22.7018 15.2298 21.3425 14.2566V21.0433C21.3424 22.3007 20.9584 23.5282 20.2418 24.5615C19.5253 25.5948 18.5103 26.3847 17.3327 26.8255C16.155 27.2664 14.8709 27.3371 13.6519 27.0283C12.433 26.7196 11.3373 26.046 10.5116 25.0977C9.6858 24.1494 9.16926 22.9716 9.03102 21.7217C8.89278 20.4719 9.13944 19.2097 9.738 18.1038C10.3366 16.998 11.2585 16.1012 12.3805 15.5335C13.5025 14.9659 14.7711 14.7543 16.0166 14.9271V18.3406C15.4466 18.1618 14.8347 18.1676 14.2682 18.3573C13.7017 18.5469 13.2096 18.9108 12.8622 19.3968C12.5148 19.8828 12.3298 20.4661 12.3337 21.0635C12.3376 21.6609 12.5302 22.2418 12.8839 22.7232C13.2377 23.2047 13.7345 23.562 14.3034 23.7443C14.8723 23.9265 15.4843 23.9243 16.0519 23.738C16.6195 23.5517 17.1138 23.1908 17.4641 22.7069C17.8144 22.2229 18.0028 21.6407 18.0024 21.0433V7.77498H21.3451C21.3422 8.05743 21.3657 8.33954 21.4153 8.61762C21.6223 9.6857 22.1929 10.6491 23.03 11.344C23.8671 12.0388 24.9191 12.4222 26.0071 12.429L26.0044 15.7472Z" fill="#535353"/> 3203 </svg> 3204 <span class="icon__fallback-text">TikTok</span> 3205 </a> 3206 </li><li> 3207 <a target="_blank" rel="noopener" href="https://www.youtube.com/user/HoMedicsTV?themeRefresh=1" title="Homedics on YouTube"> 3208 <svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg"> 3209 <path fill-rule="evenodd" clip-rule="evenodd" d="M17.5 0C27.165 0 35 7.83502 35 17.5C35 27.165 27.165 35 17.5 35C7.83502 35 0 27.165 0 17.5C0 7.83502 7.83502 0 17.5 0ZM17.9094 9.37546L17.1456 9.37547C12.3513 9.38718 9.19875 9.61562 9.19875 9.61562C8.29883 9.61911 7.43773 9.98259 6.8075 10.625C6.25509 11.2955 5.92542 12.1215 5.86438 12.9881C5.70755 14.2663 5.62761 15.5528 5.625 16.8406V18.6469C5.62758 19.9349 5.70752 21.2216 5.86438 22.5C5.92907 23.3665 6.25828 24.1923 6.8075 24.8656C7.71063 25.8088 8.90625 25.7819 9.4375 25.875C9.4375 25.875 11.3369 26.0594 17.53 26.11C22.5381 26.11 25.8587 25.86 25.8587 25.86C26.7561 25.8566 27.6157 25.4985 28.25 24.8638C28.7968 24.1902 29.124 23.3652 29.1875 22.5C29.3462 21.2223 29.428 19.9362 29.4325 18.6487V16.8419C29.4299 15.5541 29.3499 14.2676 29.1931 12.9894C29.1323 12.1223 28.8027 11.2958 28.25 10.625C27.6194 9.98152 26.7572 9.61753 25.8563 9.61438C25.8563 9.61438 22.5356 9.375 17.5275 9.375L17.9094 9.37546ZM15.07 14.1438L21.5 17.5044L15.07 20.8256V14.1438Z" fill="#535353"/> 3210 </svg> 3211 <span class="icon__fallback-text">YouTube</span> 3212 </a> 3213 </li></ul> 3214</div> 3215 </div> 3216 </div> 3217 </div><div class="footer__bottom-bar" style="background-color: #01656f; color: #ffffff;"> 3218 <div class="footer__bottom-content"><div class="footer__copyright-left"><p class="footer__copyright-text"> 3219 © 2026 Homedics 3220. All Rights Reserved.</p></div><div class="footer__bottom-right"> 3221 <div class="footer__bottom-grid"><div class="footer__selectors-wrapper"><form method="post" action="/localization" id="localization_formfooter" accept-charset="UTF-8" class="multi-selectors" enctype="multipart/form-data" data-disclosure-form=""><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/account/login?return_url=%2Faccount" /><div class="multi-selectors__item"> 3222 <h2 class="visually-hidden" id="CurrencyHeading-footer"> 3223 Currency 3224 </h2> 3225 3226 <div class="disclosure" data-disclosure-currency> 3227 <button type="button" class="faux-select disclosure__toggle" aria-expanded="false" aria-controls="CurrencyList-footer" aria-describedby="CurrencyHeading-footer" data-disclosure-toggle><span class="currency-flag currency-flag--us" data-flag="USD" aria-hidden="true"></span><span class="disclosure-list__label"> 3228 English - US 3229 </span> 3230 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewB
3230ox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 3231 </button> 3232 <ul id="CurrencyList-footer" class="disclosure-list" data-disclosure-list><li class="disclosure-list__item"> 3233 <a class="disclosure-list__option" href="#" data-value="CA" data-disclosure-option><span class="currency-flag currency-flag--ca" data-flag="CAD" aria-hidden="true"></span><span class="disclosure-list__label"> 3234 Canada (CAD $) 3235 </span> 3236 </a> 3237 </li><li class="disclosure-list__item disclosure-list__item--current"> 3238 <a class="disclosure-list__option" href="#" aria-current="true" data-value="US" data-disclosure-option><span class="currency-flag currency-flag--us" data-flag="USD" aria-hidden="true"></span><span class="disclosure-list__label"> 3239 United States (USD $) 3240 </span> 3241 </a> 3242 </li></ul> 3243 <input type="hidden" name="country_code" value="US" data-disclosure-input> 3244 </div> 3245 </div></form></div><div class="footer__bottom-link-item"> 3246 <a href="https://www.fkabrands.com/do-not-sell.html" style="color: #ffffff;">Do Not Sell My Information</a> 3247 </div><div class="footer__bottom-link-item"> 3248 <a href="https://www.fkabrands.com/privacy-policy.html" style="color: #ffffff;">Privacy Policy</a> 3249 </div><div class="footer__bottom-link-item"> 3250 <a href="https://www.fkabrands.com/california-privacy-rights.html" style="color: #ffffff;">California Privacy Rights</a> 3251 </div><div class="footer__bottom-link-item"> 3252 <a href="/pages/terms-of-use" style="color: #ffffff;">Terms and Conditions</a> 3253 </div><div class="footer__bottom-link-item"> 3254 <a href="https://www.homedics.com/pages/user-generated-content-terms-of-use" style="color: #ffffff;">UGC Terms & Conditions</a> 3255 </div></div> 3256 </div> 3257 </div> 3258 </div> 3259</footer> 3260 3261 3262 3263 3264 3265 3266 3267 3268<link href="//www.homedics.com/cdn/shop/t/138/assets/footer.css?v=20937045281263571021787623451" rel="stylesheet" type="text/css" media="all" /><style> #shopify-section-sections--22941040935097__footer div[class*="footer__item-"] {width: 100%;} #shopify-section-sections--22941040935097__footer .grid {border-bottom: 1px solid black;} </style></div> 3269<!-- END sections: footer-group --></div> 3270 </div><div id="VideoModal" class="modal modal--solid"> 3271 <div class="modal__inner"> 3272 <div class="modal__centered page-width text-center"> 3273 <div class="modal__centered-content"> 3274 <div class="video-wrapper video-wrapper--modal"> 3275 <div id="VideoHolder"></div> 3276 </div> 3277 </div> 3278 </div> 3279 </div> 3280 3281 <button type="button" class="modal__close js-modal-close text-link"> 3282 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg> 3283 <span class="icon__fallback-text">"Close (esc)"</span> 3284 </button> 3285</div> 3286<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true"> 3287 <div class="pswp__bg"></div> 3288 <div class="pswp__scroll-wrap"> 3289 <div class="pswp__container"> 3290 <div class="pswp__item"></div> 3291 <div class="pswp__item"></div> 3292 <div class="pswp__item"></div> 3293 </div> 3294 3295 <div class="pswp__ui pswp__ui--hidden"> 3296 <button class="btn btn--body btn--circle pswp__button pswp__button--arrow--left" title="Previous"> 3297 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-left" viewBox="0 0 284.49 498.98"><path d="M249.49 0a35 35 0 0 1 24.75 59.75L84.49 249.49l189.75 189.74a35.002 35.002 0 1 1-49.5 49.5L10.25 274.24a35 35 0 0 1 0-49.5L224.74 10.25A34.89 34.89 0 0 1 249.49 0Z"/></svg> 3298 </button> 3299 3300 <button class="btn btn--body btn--circle btn--large pswp__button pswp__button--close" title="Close (esc)"> 3301 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg> 3302 </button> 3303 3304 <button class="btn btn--body btn--circle pswp__button pswp__button--arrow--right" title="Next"> 3305 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-right" viewBox="0 0 284.49 498.98"><title>icon-chevron</title><path d="M35 498.98a35 35 0 0 1-24.75-59.75l189.74-189.74L10.25 59.75a35.002 35.002 0 0 1 49.5-49.5l214.49 214.49a35 35 0 0 1 0 49.5L59.75 488.73A34.89 34.89 0 0 1 35 498.98Z"/></svg> 3306 </button> 3307 </div> 3308 </div> 3309</div> 3310<tool-tip data-tool-tip=""> 3311 <div class="tool-tip__inner" data-tool-tip-inner> 3312 <button class="tool-tip__close" data-tool-tip-close=""><svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg></button> 3313 <div data-tool-tip-title>Account</div> 3314 <div class="tool-tip__content" data-tool-tip-content> 3315 </div> 3316 </div> 3317</tool-tip>
3318<script> 3319(function () { 3320 const stripBvMicrodataInCards = () => { 3321 document 3322 .querySelectorAll('.grid-product__content [itemprop="aggregateRating"]') 3323 .forEach(container => { 3324 // Remove schema container attributes 3325 container.removeAttribute('itemprop'); 3326 container.removeAttribute('itemscope'); 3327 container.removeAttribute('itemtype'); 3328 3329 // Remove all nested microdata 3330 container.querySelectorAll('[itemprop]').forEach(el => { 3331 el.removeAttribute('itemprop'); 3332 }); 3333 }); 3334 }; 3335 3336 // Run immediately 3337 stripBvMicrodataInCards(); 3338 3339 // Handle async BV injection 3340 const observer = new MutationObserver(stripBvMicrodataInCards); 3341 observer.observe(document.body, { 3342 childList: true, 3343 subtree: true 3344 }); 3345})(); 3346</script>
3346 3347 <template id="naturalImageMarkup"> 3348 <div class="image-wrap" style="height: 0;"> 3349 <image-element data-aos="image-fade-in" data-aos-offset="150"> 3350 <img class="grid-product__image image-element" width height src srcset loading="lazy" alt> 3351 </image-element> 3352 </div> 3353 </template> 3354 <template id="fixedRatioImageMarkup"> 3355 <div class="grid__image-ratio"> 3356 <image-element data-aos="image-fade-in" data-aos-offset="150"> 3357 <img class="image-element" width height src srcset loading="lazy" alt> 3358 </image-element> 3359 </div> 3360 </template> 3361 3362 <!-- Rebuy START --> 3363
3363<script async src="https://cdn.rebuyengine.com/onsite/js/storefront-helper.js"></script>
3363 3364 3365<!-- Launch: Get product badge colors from theme settings -->
3365<script> 3366 window.theme.badgeColors = window?.theme?.badgeColors || { 3367 background: "#ab0000", 3368 color: "#ffffff" 3369 }; 3370 3371 window.formatBadgeClass = (badgeTag) => { 3372 return badgeTag.toLowerCase().trim().replaceAll(':', '-').replaceAll(' ', '-') 3373 } 3374 window.formatBadgeText = (badgeTag) => { 3375 return badgeTag.trim().replaceAll('badge:', '') 3376 } 3377 3378// Launch: Pull in market specific pricing on products 3379// update Cart Items JSON as cart initially loads 3380document.addEventListener('rebuy:cart.ready', (event) => { 3381 const cartItems = event.detail.cart.cart.items; 3382 setTimeout(() => { 3383 cartItems.forEach((item) => { 3384 // console.log("updating cart item: ", item.product_title, item); 3385 const storefrontHelper = new ShopifyStorefrontHelper(); 3386 storefrontHelper.updateProductJSON(item.product); 3387 }); 3388 }, 300);}); 3389 3390// update Cart Items JSON every time products are changed 3391document.addEventListener("rebuy:cart.change", (event) => { 3392 const cartItems = event.detail.cart.cart.items; 3393 setTimeout(() => { 3394 cartItems.forEach((item) => { 3395 // console.log("updating cart item: ", item.product_title, item); 3396 const storefrontHelper = new ShopifyStorefrontHelper(); 3397 storefrontHelper.updateProductJSON(item.product); 3398 }); 3399 }, 300); 3400}); 3401 3402 3403// Launch: Filter OOS variants from widgets 3404 3405 3406/* Launch: Custom modal function for Add Ons Widget */ 3407window.customOpenVariantModal = (product, id) => { 3408 const widget = Rebuy.widgets.find((w) => w.id === `${id}`); 3409 if (!product) { 3410 return; 3411 } 3412 3413 // Override settings for modal variant 3414 const Modal = window.Rebuy.Modal; 3415 const settings = { 3416 view_options: { 3417 show_sub_images: true, 3418 variant_selector: "select", 3419 }, 3420 layout: { 3421 large: { style: "line" }, 3422 medium: { style: "line" }, 3423 small: { style: "line" }, 3424 }, 3425 }; 3426 3427 Modal.dialog("variant", { 3428 product, 3429 settings, 3430 buttons: [ 3431 { 3432 type: "primary block", 3433 label: "Add to Cart", 3434 action: "callback", 3435 callback: () => { 3436 widget.addToCart(product); 3437 }, 3438 }, 3439 { 3440 type: "outline", 3441 label: "Dismiss", 3442 action: "dismiss", 3443 }, 3444 ], 3445 }); 3446}; 3447 3448 3449</script>
3449 3450 3451 3452 3453 3454<!-- Cart Widget Template -->
3455<script id="rebuy-widget-248871" type="text/template"> 3456<div class="rebuy-widget" 3457v-cloak 3458v-on:click="stopPropagation($event)" 3459v-bind:id="'rebuy-widget-' + id" 3460v-bind:class="['widget-type-' + config.type.replace('_','-'), 'widget-display-' + config.display_type, products.length > 0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]"> 3461 3462 <div 3463 class="rebuy-widget-container" 3464 v-cloak 3465 v-bind:class="['widget-display-' + config.display_type, visible ? 'is-visible' : 'is-hidden' ]" 3466 v-on:click.self="hide()"> 3467 3468 <div class="rebuy-widget-content"> 3469 <div class="rebuy-modal-close" v-on:click="hide()" aria-label="close modal"> 3470 <rebuy-icon name="x"></rebuy-icon> 3471 </div> 3472 3473 <div class="rebuy-timer" v-if="hasTimer()"> 3474 <p class="rebuy-timer-title" v-if="config.language.timer_title"> 3475 <span v-html="config.language.timer_title"></span> <span class="rebuy-timer-minutes" v-html="config.timer.duration_minutes"></span>:<span class="rebuy-timer-seconds" v-html="config.timer.duration_seconds"></span> 3476 </p> 3477 </div> 3478 3479 <h3 class="super-title" v-if="config.language.super_title != ''" v-html="config.language.super_title"></h3> 3480 3481 <h4 class="primary-title" v-if="config.language.title != ''" v-html="config.language.title"></h4> 3482 3483 <div class="description" v-if="config.language.description != ''" v-html="config.language.description"></div> 3484 3485 <div class="rebuy-product-grid" v-bind:class="layoutClasses" tabindex="0" role="list"> 3486 3487 <div 3488 v-for="(product, product_index) in products" 3489 v-bind:class="[ 3490 product.handle, 3491 'product-id-' + product.id, 3492 cartHasProduct(product) ? 'cart-has-item' : '', 3493 productTagClasses(product), 3494 hasSplideCarousel ? 'splide__slide' : '', 3495 ]" 3496 aria-label="product" 3497 class="rebuy-product-block" 3498 role="listitem" 3499 > 3500 3501 <div class="rebuy-product-media"> 3502 <a 3503 class="rebuy-product-image" 3504 tabindex="-1" 3505 v-bind:href="learnMoreURL(product)" 3506 v-bind:style="imageStyles" 3507 v-on:click="learnMore(product, $event);" 3508 v-bind:class="[hasLearnMore() ? 'clickable' : '']" 3509 rel="nofollow" 3510 > 3511 <img v-bind:loading="product_index > 1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)"> 3512 </a> 3513 3514 <!-- CUSTOM --> 3515 <div v-if="product?.tags?.includes('badge:')" class="rebuy-product-badge-container"> 3516 <div v-for="tag in product.tags.split(',').filter(tag => tag.includes('badge:'))" 3517 v-html="window.formatBadgeText(tag)" 3518 :style="{ backgroundColor: window?.theme?.badgeColors?.background || '#01656f', color: window?.theme?.badgeColors?.color || '#ffffff' }" 3519 v-bind:class="[ window.formatBadgeClass(tag) ]" 3520 class="rebuy-product-badge"></div> 3521 </div> 3522 <!-- END CUSTOM --> 3523 3524 </div> 3525 <div class="rebuy-product-info"> 3526 <h5 3527 class="rebuy-product-title" 3528 v-bind:class="[hasLearnMore() ? 'clickable' : '']"> 3529 <a 3530 v-bind:href="learnMoreURL(product)" 3531 class="rebuy-product-title-link" 3532 v-on:click="learnMore(product, $event);" 3533 v-html="product.title" 3534 v-bind:class="[hasLearnMore() ? 'clickable' : '']" 3535 v-bind:aria-label="'View ' + product.title" 3536 rel="nofollow" 3537 ></a> 3538 </h5> 3539 <div 3540 class="rebuy-product-vendor-container" 3541 v-if="showProductVendor(product.vendor)" 3542 > 3543 <a 3544 class="rebuy-product-vendor" 3545 v-bind:class="[hasEnabledProductVendorLink() ? 'clickable' : '']" 3546 v-html="product.vendor" 3547 v-bind:href="vendorURL(product.vendor)" 3548 v-bind:aria-label="'View ' + product.vendor + ' products'" 3549 rel="nofollow" 3550 ></a> 3551 </div> 3552 <div class="rebuy-variant-title" v-if="showVariantTitle(product)" v-html="product.selected_variant.title"></div> 3553 <div class="rebuy-product-review" v-if="hasProductReviews(product)" aria-label="product star rating">
3554 <span class="rebuy-star-rating"> 3555 <span 3556 v-if="product.reviews.star_rating" 3557 class="rebuy-star-rating-value sr-only" 3558 v-html="product.reviews.star_rating + ' stars out of 5 stars'" 3559 > 3560 </span> 3561 <span class="rebuy-star-rating-background"></span> 3562 <span class="rebuy-star-rating-foreground" v-bind:style="{ width: productReviewRatingPercentage(product) }"></span> 3563 </span> 3564 <span class="rebuy-review-count" v-html="productReviewCount(product)"></span> 3565 </div> 3566 3567 <div class="rebuy-product-price"> 3568 <div v-if="variantOnSale(product, product.selected_variant)"> 3569 <span class="rebuy-money sale"> 3570 <span class="sr-only">Sale price</span> 3571 <span tabindex="0" v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 3572 </span> 3573 <span class="rebuy-money compare-at"> 3574 <span class="sr-only">Original price</span> 3575 <span v-html="formatMoney(variantCompareAtPrice(product, product.selected_variant))"></span> 3576 </span> 3577 </div> 3578 <div v-if="!(variantOnSale(product, product.selected_variant))"> 3579 <span class="rebuy-money"> 3580 <span class="sr-only">Price</span> 3581 <span tabindex="0" v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 3582 </span> 3583 </div> 3584 </div> 3585 <div class="rebuy-product-description" v-if="showProductDescription(product)" v-html="text(product.body_html)"></div> 3586 </div> 3587 <div class="rebuy-product-options" v-if="showVariantSelect(product)"> 3588 <select 3589 title="Select product variant" 3590 :id="id + '-' + 'select' + '-' + product_index" 3591 :class="{ hide : config.view_options.variant_selector === 'buttons' }" 3592 class="rebuy-select" 3593 v-bind:aria-label="'variant of ' + product.title" 3594 v-model="product.selected_variant_id" 3595 v-on:change="selectVariant(product)"> 3596 <option 3597 v-for="variant in product.variants" 3598 class="rebuy-product-options__option" 3599 :class="{ 'rebuy-product-options__option--oos' : !variantAvailable(variant) }" 3600 v-bind:value="variant.id" 3601 :disabled="!variantAvailable(variant)" 3602 v-html="formatVariantOptionTitle(variant)"> 3603 </option> 3604 </select> 3605 3606 <div 3607 class="rebuy-product-options__button-swatches-container" 3608 :class="{ 'rebuy-style__hidden-block' : config.view_options.variant_selector === 'select' }" 3609 > 3610 <div 3611 v-for="option in product.options" 3612 :key="'option-' + product.id + '-' + option.name" 3613 class="rebuy-product-options__button-swatches rebuy-size-swatches" 3614 > 3615 <div 3616 v-for="(value, value_index) in filterOOSOptions(option, product)" 3617 :key="'value-' + product.id + '-' + option.name + '-' + value + '-' + value_index" 3618 > 3619 <div v-if="displayColorSwatches(option)" class="rebuy-product-options__button-swatch rebuy-color-swatch"> 3620 <input 3621 :name="id + '-color-' + product_index" 3622 :id="id + '-color-' + product_index + '-' + value + '-' + value_index" 3623 :checked="hasSwatchOptionSelected(product, value, value_index, 'color')" 3624 :value="value" 3625 type="radio" 3626 class="rebuy-color-input hide" 3627 v-on:change="selectVariantByOption(product, option.name, value)" 3628 :disabled="isDisabledOptionValue(product, option.name, value)" 3629 /> 3630 3631 <label 3632 :for="id + '-color-' + product_index + '-' + value + '-' + value_index" 3633 :style="getMerchantThemeColorAssetStyle(value)" 3634 :title="value" 3635 class="rebuy-color-label" 3636 :class="{ 'rebuy-product-options__button-swatch-label--disabled' : isDisabledOptionValue(product, option.name, value) }" 3637 > 3638 </label> 3639 </div> 3640 3641 <div v-if="!displayColorSwatches(option)" class="rebuy-product-options__button-swatch rebuy-size-swatch"> 3642 <input 3643 :name="id + '-' + option.name + '-' + product_index" 3644 :id="id + '-' + option.name + '-' + product_index + '-' + value" 3645 :checked="hasSwatchOptionSelected(product, value, value_index, option.name)" 3646 :value="value" 3647 type="radio" 3648 class="rebuy-size-input hide" 3649 v-on:change="selectVariantByOption(product, option.name, value)" 3650 :disabled="isDisabledOptionValue(product, option.name, value)" 3651 /> 3652 3653 <label 3654 :for="id + '-' + option.name + '-' + product_index + '-' + value" 3655 class="rebuy-size-label" 3656 :class="{ 'rebuy-product-options__button-swatch-label--disabled' : isDisabledOptionValue(product, option.name, value) }" 3657 > 3658 {{ value }} 3659 </label> 3660 </div> 3661 </div> 3662 </div> 3663 </div> 3664 </div> 3665 3666 <div class="rebuy-product-actions"> 3667 <div class="subscription-checkbox" v-if="showSubscriptionOptions(product)"> 3668 <label class="rebuy-checkbox-label"> 3669 <input 3670 class="checkbox-input rebuy-checkbox" 3671 v-model="product.subscription" 3672 v-on:change="toggleSubscription(product)" 3673 type="checkbox" 3674 :aria-label="upgradeToSubscriptionAriaLabel(product)" 3675 />
3676 <span class="checkbox-label" v-html="upgradeToSubscriptionLabel(product)"></span> 3677 </label> 3678 </div> 3679 3680 <div class="subscription-frequency" v-if="showSubscriptionFrequency(product)"> 3681 <select 3682 class="rebuy-select" 3683 aria-label="subscription frequency" 3684 v-model="product.subscription_frequency" 3685 v-on:change="updateSubscriptionFrequency(product)"> 3686 <option v-for="frequency in product.subscription_frequencies" v-bind:value="frequency">{{ frequencyLabel(frequency, product.subscription_interval) }}</option> 3687 </select> 3688 </div> 3689 3690 <div class="product-quantity" v-if="hasQuantityInputEnabled()"> 3691 <div class="rebuy-select-wrapper"> 3692 <label class="rebuy-label">Quantity</label> 3693 <select 3694 class="rebuy-select" 3695 aria-label="product quantity" 3696 v-model="product.quantity"> 3697 <option v-for="n in maxQuantityInputValue()" v-bind:value="n">{{ n }}</option> 3698 </select> 3699 </div> 3700 </div> 3701 3702 <button 3703 class="rebuy-button" 3704 v-bind:class="{ working: (product.status != 'ready' && product.status != 'selecting') }" 3705 v-bind:disabled="!(variantAvailable(product.selected_variant)) || (product.status != 'ready' && product.status != 'selecting')" 3706 v-bind:aria-label="buttonAriaLabel(product)" 3707 v-on:click="addToCart(product)" 3708 type="button"> 3709 <span v-html="buttonLabel(product)"></span> 3710 </button> 3711 </div> 3712 </div> 3713 3714 </div> 3715 3716 <div class="rebuy-modal-actions" v-if="showContinueButton()"> 3717 <button 3718 class="rebuy-button decline" 3719 v-on:click="hide()" 3720 type="button"> 3721 <span v-html="continueLabel()"></span> 3722 </button> 3723 </div> 3724 3725 <div class="powered-by-rebuy"> 3726 <a v-bind:href="'https://rebuyengine.com/?shop=' + config.shop.myshopify_domain" target="_blank" rel="noopener"> 3727 Powered by Rebuy 3728 </a> 3729 </div> 3730 3731 </div> 3732 3733 </div> 3734</div> 3735</script>
3735 3736 3737 3738<!-- Install Custom Dynamic Bundle Template -->
3739<script id="rebuy-widget-248880" type="text/template"> 3740 <div class="rebuy-widget" 3741 v-cloak 3742 v-on:click="stopPropagation($event)" 3743 v-bind:id="'rebuy-widget-' + id" 3744 v-bind:class="['widget-type-' + config.type.replace('_','-'), products.length > 0 ? 'is-visible' : 'is-hidden']"> 3745 3746 <div 3747 class="rebuy-widget-container" 3748 v-bind:class="['widget-display-' + config.display_type, visible ? 'is-visible' : 'is-hidden' ]"> 3749 <div class="rebuy-widget-content"> 3750 <div class="rebuy-timer" v-if="hasTimer()"> 3751 <h5 class="rebuy-timer-title" v-if="config.language.timer_title"> 3752 <span v-html="config.language.timer_title"></span> <span class="rebuy-timer-minutes" v-html="config.timer.duration_minutes"></span>:<span class="rebuy-timer-seconds" v-html="config.timer.duration_seconds"></span> 3753 </h5> 3754 </div> 3755 3756 <h4 class="super-title" v-if="config.language.super_title != ''" v-html="config.language.super_title"></h4> 3757 3758 <h3 class="primary-title" v-if="config.language.title != ''" v-html="config.language.title"></h3> 3759 3760 <div class="description" v-if="config.language.description != ''" v-html="config.language.description"></div> 3761 3762 <div class="rebuy-bundle"> 3763 3764 <div class="rebuy-bundle__images"> 3765 3766 <div class="rebuy-bundle__image" v-for="(product, index) in products" v-if="product.selected" v-bind:class="[product.handle, 'product-id-' + product.id, cartHasProduct(product) ? 'cart-has-item' : '', productTagClasses(product)]"> 3767 <a class="rebuy-bundle__image-item" v-bind:href="learnMoreURL(product)" v-bind:style="imageStyles" v-on:click="learnMore(product);" v-bind:class="[hasLearnMore() && !isInputProduct(product) ? 'clickable' : '' ]"> 3768 <img v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="product.title"> 3769 </a> 3770 <div class="rebuy-bundle__image-divider"> 3771 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#111111" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="rebuy-icon"><path d="M5 12h14"/><path d="M12 5v14"/></svg> 3772 </div> 3773 </div> 3774 3775 </div> 3776 3777 <div class="rebuy-bundle__items"> 3778 3779 3780 <div class="rebuy-product-block" style="position: relative;" v-for="(product, product_index) in products" v-bind:class="[product.handle, 'product-id-' + product.id, cartHasProduct(product) ? 'cart-has-item' : '', productTagClasses(product), isInputProduct(product) ? 'is-input-product' : '' ,product.selected ? 'is-selected': 'not-selected']"> 3781 <div class="rebuy-bundle__image-divider-desktop" v-if="product_index !== 0"> 3782 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#111111" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="rebuy-icon"><path d="M5 12h14"/><path d="M12 5v14"/></svg> 3783 </div> 3784 <div class="mobile-image-container"> 3785 <a class="rebuy-bundle__image-item bundle-single-image" v-bind:href="learnMoreURL(product)" v-bind:style="imageStyles" v-on:click="learnMore(product);" v-bind:class="[hasLearnMore() && !isInputProduct(product) ? 'clickable' : '' ]"> 3786 <img v-bind:src="itemImage(product, product.selected_variant)" v-bind:alt="product.title"> 3787 3788 <!-- CUSTOM --> 3789 <div v-if="product?.tags?.includes('badge:')" class="rebuy-product-badge-container"> 3790 <div v-for="tag in product.tags.split(',').filter(tag => tag.includes('badge:'))" 3791 v-html="window.formatBadgeText(tag)" 3792 :style="{ backgroundColor: window?.theme?.badgeColors?.background || '#01656f', color: window?.theme?.badgeColors?.color || '#ffffff' }" 3793 v-bind:class="[ window.formatBadgeClass(tag) ]" 3794 class="rebuy-product-badge"></div> 3795 </div> 3796 <!-- END CUSTOM --> 3797 3798 </a> 3799 <!-- <div class="rebuy-product-price2"> 3800 <div v-if="variantOnSale(product, product.selected_variant)"> 3801 <span class="rebuy-money sale" v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 3802 <span class="rebuy-money compare-at" v-html="formatMoney(variantCompareAtPrice(product, product.selected_variant))"></span> 3803 </div> 3804 <div v-if="!(variantOnSale(product, product.selected_variant))"> 3805 <span class="rebuy-money" v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 3806 </div> 3807 </div> --> 3808 </div> 3809 <div class="rebuy-product-info"> 3810 <!-- <a class="rebuy-bundle__image-item bundle-single-image" v-bind:href="learnMoreURL(product)" v-bind:style="imageStyles" v-on:click="learnMore(product);" v-bind:class="[hasLearnMore() && !isInputProduct(product) ? 'clickable' : '' ]"> 3811 <img v-bind:src="itemImage(product, product.selected_variant)" v-bind:alt="product.title"> 3812 </a> --> 3813 3814 <strong class="rebuy-product-label" v-if="isInputProduct(product)" v-html="'This item:'"></strong> 3815 <a class="rebuy-product-title" v-bind:href="learnMoreURL(product)" v-on:click="learnMore(product);" v-html="product.title" v-bind:class="[hasLearnMore() && !isInputProduct(product) ? 'clickable' : '']"></a> 3816 <div class="rebuy-variant-title" v-if="showVariantTitle(product)" v-html="product.selected_variant.title"></div> 3817 <div class="rebuy-product-price"> 3818 <div v-if="variantOnSale(product, product.selected_variant)"> 3819 <span class="rebuy-money sale" v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 3820 <span class="rebuy-money compare-at" v-html="formatMoney(variantCompareAtPrice(product, product.selected_variant))"></span> 3821 </div> 3822 <div v-if="!(variantOnSale(product, product.selected_variant))"> 3823 <span class="rebuy-money" v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 3824 </div> 3825 </div> 3826 <div class="rebuy-product-description" v-if="showProductDescription(product)" v-html="text(product.body_html)"></div> 3827 <div class="rebuy-product-review" v-if="hasProductReviews(product)"> 3828 <span class="rebuy-star-rating"> 3829 <span class="rebuy-star-rating-background"></span> 3830 <span class="rebuy-star-rating-foreground" v-bind:style="{ width: productReviewRatingPercentage(product) }"></span> 3831 </span> 3832 <span class="rebuy-review-count" v-html="productReviewCount(product)"></span> 3833 </div> 3834 </div> 3835 3836 3837 3838 <div class="rebuy-product-options"> 3839 3840 <!-- CUSTOM --> 3841 <div class="rebuy-product-checkbox" v-bind:class="product.selected ? 'is-selected': 'not-selected'"> 3842 <label class="rebuy-checkbox-label"> 3843 <input 3844 class="checkbox-input rebuy-checkbox" 3845 v-model="product.selected" 3846 type="checkbox" />
3847 <span class="custom-span" v-if="product.selected">Remove</span> 3848 <span class="custom-span2" v-if="!product.selected" >Add</span> 3849 </label> 3850 </div> 3851 <!-- END CUSTOM --> 3852 3853 <select 3854 v-if="product.variants.length != 1" 3855 :id="id + '-' + 'select' + '-' + product_index" 3856 :class="{ hide : settings.view_options.variant_selector == 'buttons' }" 3857 class="rebuy-select" 3858 v-model="product.selected_variant_id" 3859 v-on:change="selectVariant(product)"> 3860 <option v-for="variant in product.variants" v-bind:value="variant.id">{{ variant.title }}</option> 3861 </select> 3862 3863 3864 3865 <div v-if="option.name == 'Color' && displayColorSwatches()" v-for="(option, option_index) in product.options" class="rebuy-color-swatches"> 3866 <div v-for="(value, value_index) in option.values" class="rebuy-color-swatch"> 3867 <input 3868 :name="id + '-color-' + product_index" 3869 :id="id + '-color-' + option_index + '-' + value + '-' + value_index" 3870 :checked="value_index == 0" 3871 :value="value" 3872 type="radio" 3873 class="rebuy-color-input hide" 3874 v-on:change="selectVariantByColor(product, value, product_index)"> 3875 <label 3876 :for="id + '-color-' + option_index + '-' + value + '-' + value_index" 3877 :style="{ backgroundColor: value }" 3878 :title="value" 3879 class="rebuy-color-label"></label> 3880 </div> 3881 </div> 3882 3883 <div v-if="option.name == 'Size' && settings.view_options.variant_selector == 'buttons'" v-for="(option, option_index) in product.options" class="mt-10 rebuy-size-swatches"> 3884 <div v-for="(value, value_index) in option.values" class="rebuy-size-swatch"> 3885 <input 3886 :name="id + '-size-' + product_index" 3887 :id="id + '-size-' + product_index + '-' + value" 3888 :checked="value_index == 0" 3889 :value="value" 3890 type="radio" 3891 class="rebuy-size-input hide" 3892 v-on:change="selectVariantBySize(product, value, product_index)"> 3893 <label 3894 :for="id + '-size-' + product_index + '-' + value" 3895 class="rebuy-size-label">{{ value }}</label> 3896 </div> 3897 </div> 3898 3899 </div> 3900 </div> 3901 3902 </div> 3903 </div> 3904 3905 </div> 3906 </div> 3907 3908 <div class="rebuy-bundle__actions" v-if="subtotal() > 0"> 3909 3910 <div class="rebuy-bundle__actions-price"> 3911 <strong class="rebuy-bundle__actions-price-label">Total Price:</strong> 3912 3913 <div class="rebuy-bundle__actions-price-value" v-if="bundleOnSale()"> 3914 <span class="rebuy-money sale" v-html="formatMoney(subtotal())"></span> 3915 <span class="rebuy-money compare-at" v-html="formatMoney(compareAtSubtotal())"></span> 3916 </div> 3917 <div class="rebuy-bundle__actions-price-value" v-if="!(bundleOnSale())"> 3918 <span class="rebuy-money" v-html="formatMoney(subtotal())"></span> 3919 </div> 3920 </div> 3921 3922 <div class="rebuy-bundle__actions-buttons"> 3923 <button 3924 class="rebuy-button" 3925 v-on:click="addSelectedProductsToCart()" 3926 type="button"> 3927 <span v-html="buttonWidgetLabel()"></span> 3928 </button> 3929 </div> 3930 </div> 3931 3932 </div> 3933 </div> 3934</script>
3934 3935 3936<!-- Product Add Ons Custom Template -->
3937<script id="rebuy-product-addon-template" type="text/template"> 3938<div class="rebuy-widget" 3939 v-cloak 3940 v-on:click="stopPropagation($event)" 3941 v-bind:id="'rebuy-widget-' + id" 3942 v-bind:class="['widget-type-' + config.type.replace('_','-'), products.length > 0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]"> 3943 3944 <div class="rebuy-widget-container"> 3945 <div class="rebuy-widget-content"> 3946 <div class="rebuy-timer" v-if="hasTimer()"> 3947 <p class="rebuy-timer-title" v-if="config.language.timer_title"> 3948 <span v-html="config.language.timer_title"></span> <span class="rebuy-timer-minutes" v-html="config.timer.duration_minutes"></span>:<span class="rebuy-timer-seconds" v-html="config.timer.duration_seconds"></span> 3949 </p> 3950 </div> 3951 3952 <h3 class="super-title" v-if="config.language.super_title != ''" v-html="config.language.super_title"></h3> 3953 3954 <h4 class="primary-title" v-if="config.language.title != ''" v-html="config.language.title"></h4> 3955 3956 <div class="description" v-if="config.language.description != ''" v-html="config.language.description"></div> 3957 3958 <div class="rebuy-addon"> 3959 3960 <div class="rebuy-addon__items"> 3961 3962 <div class="rebuy-addon__item" v-for="(product, product_index) in products"> 3963 3964 <div class="rebuy-addon__item-checkbox"> 3965 <label class="rebuy-checkbox-label"> 3966 <input 3967 class="checkbox-input rebuy-checkbox" 3968 v-model="product.selected" 3969 type="checkbox" /> 3970 </label> 3971 </div> 3972 3973 <div class="rebuy-addon__item-image" v-on:click="toggleProductSelect(product)" v-bind:style="imageStyles"> 3974 <img v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="product.title"> 3975 </div> 3976 3977 <div class="rebuy-addon__item-info"> 3978 <div class="rebuy-addon__item-product-title rebuy-product-title" v-on:click="toggleProductSelect(product)" v-html="product.title" v-bind:alt="'View ' + product.title"></div> 3979 <div 3980 class="rebuy-product-vendor-container" 3981 v-if="showProductVendor(product.vendor)" 3982 > 3983 <a 3984 class="rebuy-product-vendor" 3985 v-bind:class="[hasEnabledProductVendorLink() ? 'clickable' : '']" 3986 v-html="product.vendor" 3987 v-bind:href="vendorURL(product.vendor)" 3988 v-bind:aria-label="'View ' + product.vendor + ' products'" 3989 rel="nofollow" 3990 ></a> 3991 </div> 3992 <div class="rebuy-addon__item-variant-title rebuy-variant-title" v-if="showVariantTitle(product)" v-html="product.selected_variant.title"></div> 3993 <div class="rebuy-addon__item-product-review rebuy-product-review" v-if="hasProductReviews(product)" aria-label="product star rating"> 3994 <span class="rebuy-star-rating"> 3995 <span 3996 v-if="product.reviews.star_rating" 3997 class="rebuy-star-rating-value sr-only" 3998 v-html="product.reviews.star_rating + ' stars out of 5 stars'" 3999 > 4000 </span> 4001 <span class="rebuy-star-rating-background"></span> 4002 <span class="rebuy-star-rating-foreground" v-bind:style="{ width: productReviewRatingPercentage(product) }"></span> 4003 </span>
4004 <span class="rebuy-review-count" v-html="productReviewCount(product)"></span> 4005 </div> 4006 <div class="rebuy-addon__item-product-price rebuy-product-price"> 4007 <div v-if="variantOnSale(product, product.selected_variant)"> 4008 <span class="rebuy-money sale"> 4009 <span class="sr-only">Sale price</span> 4010 <span v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 4011 </span> 4012 <span class="rebuy-money compare-at"> 4013 <span class="sr-only">Original price</span> 4014 <span v-html="formatMoney(variantCompareAtPrice(product, product.selected_variant))"></span> 4015 </span> 4016 </div> 4017 <div v-if="!(variantOnSale(product, product.selected_variant))"> 4018 <span class="rebuy-money"> 4019 <span class="sr-only">Price</span> 4020 <span v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 4021 </span> 4022 </div> 4023 </div> 4024 4025 <div class="rebuy-addon__item-product-options rebuy-product-options" v-if="showVariantSelect(product)"> 4026 <select 4027 :id="id + '-' + 'select' + '-' + product_index" 4028 :class="{ hide : settings.view_options.variant_selector == 'buttons' }" 4029 class="rebuy-select" 4030 v-bind:aria-label="'variant of ' + product.title" 4031 v-model="product.selected_variant_id" 4032 v-on:change="selectVariant(product)"> 4033 <option 4034 v-for="variant in product.variants" 4035 class="rebuy-product-options__option" 4036 :class="{ 'rebuy-product-options__option--oos' : !variantAvailable(variant) }" 4037 v-bind:value="variant.id" 4038 :disabled="!variantAvailable(variant)" 4039 v-html="formatVariantOptionTitle(variant)"> 4040 </option> 4041 </select> 4042 4043 <div 4044 class="rebuy-product-options__button-swatches-container" 4045 :class="{ 'rebuy-style__hidden-block' : config.view_options.variant_selector === 'select' }" 4046 > 4047 <div 4048 v-for="option in product.options" 4049 :key="'option-' + product.id + '-' + option.name" 4050 class="rebuy-product-options__button-swatches rebuy-size-swatches" 4051 > 4052 <div 4053 v-for="(value, value_index) in filterOOSOptions(option, product)" 4054 :key="'value-' + product.id + '-' + option.name + '-' + value + '-' + value_index" 4055 > 4056 <div v-if="displayColorSwatches(option)" class="rebuy-product-options__button-swatch rebuy-color-swatch"> 4057 <input 4058 :name="id + '-color-' + product_index" 4059 :id="id + '-color-' + product_index + '-' + value + '-' + value_index" 4060 :checked="hasSwatchOptionSelected(product, value, value_index, 'color')" 4061 :value="value" 4062 type="radio" 4063 class="rebuy-color-input hide" 4064 v-on:change="selectVariantByOption(product, option.name, value)" 4065 :disabled="isDisabledOptionValue(product, option.name, value)" 4066 /> 4067 4068 <label 4069 :for="id + '-color-' + product_index + '-' + value + '-' + value_index" 4070 :style="getMerchantThemeColorAssetStyle(value)" 4071 :title="value" 4072 class="rebuy-color-label" 4073 :class="{ 'rebuy-product-options__button-swatch-label--disabled' : isDisabledOptionValue(product, option.name, value) }" 4074 > 4075 </label> 4076 </div> 4077 4078 <div v-if="!displayColorSwatches(option)" class="rebuy-product-options__button-swatch rebuy-size-swatch"> 4079 <input 4080 :name="id + '-' + option.name + '-' + product_index" 4081 :id="id + '-' + option.name + '-' + product_index + '-' + value" 4082 :checked="hasSwatchOptionSelected(product, value, value_index, option.name)" 4083 :value="value" 4084 type="radio" 4085 class="rebuy-size-input hide" 4086 v-on:change="selectVariantByOption(product, option.name, value)" 4087 :disabled="isDisabledOptionValue(product, option.name, value)" 4088 /> 4089 4090 <label 4091 :for="id + '-' + option.name + '-' + product_index + '-' + value" 4092 class="rebuy-size-label" 4093 :class="{ 'rebuy-product-options__button-swatch-label--disabled' : isDisabledOptionValue(product, option.name, value) }" 4094 > 4095 {{ value }} 4096 </label> 4097 </div> 4098 </div> 4099 </div> 4100 </div> 4101 </div> 4102 4103 <div class="rebuy-addon__item-product-description rebuy-product-description" v-if="showProductDescription(product)" v-html="text(product.body_html)"></div> 4104 <div class="rebuy-addon__item-learn-more" v-if="hasLearnMore()"> 4105 <a 4106 class="rebuy-addon__item-learn-more-link" 4107 v-on:click="window.customOpenVariantModal(product, id);" 4108 v-html="config.language.learn_more_label" 4109 rel="nofollow" 4110 ></a> 4111 4112 <!-- <a 4113 class="rebuy-addon__item-learn-more-link" 4114 v-bind:href="learnMoreURL(product)" 4115 v-on:click="learnMore(product);" 4116 v-html="config.language.learn_more_label" 4117 rel="nofollow" 4118 ></a> --> 4119 </div> 4120 </div> 4121 4122 </div> 4123 4124 </div> 4125 4126 <div class="rebuy-addon__subtotal" :class="[ subtotal() > 0 ? 'addon-actions-visible' : 'addon-actions-hidden' ]"> 4127 <strong class="rebuy-addon__subtotal-label" v-html="config.language.total_price_label"></strong> 4128 <div class="rebuy-addon__subtotal-value" v-if="bundleOnSale()">
4129 <span class="rebuy-money sale"> 4130 <span class="sr-only">Sale price</span> 4131 <span v-html="formatMoney(subtotal())"></span> 4132 </span> 4133 <span class="rebuy-money compare-at"> 4134 <span class="sr-only">Original price</span> 4135 <span v-html="formatMoney(compareAtSubtotal())"></span> 4136 </span> 4137 </div> 4138 <div class="rebuy-addon__subtotal-value" v-if="!(bundleOnSale())"> 4139 <span class="rebuy-money"> 4140 <span class="sr-only">Price</span> 4141 <span v-html="formatMoney(subtotal())"></span> 4142 </span> 4143 </div> 4144 </div> 4145 4146 </div> 4147 4148 </div> 4149 </div> 4150 4151</div> 4152</script>
4152 4153 4154<!-- Bundle Builder Custom Template -->
4155<script id="rebuy-bundle-builder-template" type="text/template"> 4156 <div 4157 class="rebuy-widget rebuy-bundle-builder" 4158 v-bind:id="'rebuy-widget-' + id" 4159 > 4160 <div 4161 class="rebuy-bundle-builder__main rebuy-bundle-builder-layout" 4162 v-bind:class="['rebuy-bundle-builder__layout--' + config.layout.type]" 4163 ref="stepTabsWrapper" 4164 > 4165 4166 <!-- Page Header Section --> 4167 <div v-if="hasBundleHeaderSection()" class="rebuy-bundle-builder__main-header"> 4168 <h1 4169 v-if="getBundleConfigLabel('super_title')" 4170 class="rebuy-bundle-builder__main-header-super-title" 4171 v-html="getBundleConfigLabel('super_title')" 4172 > 4173 </h1> 4174 4175 <h2 4176 v-if="getBundleConfigLabel('title')" 4177 class="rebuy-bundle-builder__main-header-title" 4178 v-html="getBundleConfigLabel('title')" 4179 > 4180 </h2> 4181 4182 <p 4183 v-if="getBundleConfigLabel('description')" 4184 class="rebuy-bundle-builder__main-header-description" 4185 v-html="getBundleConfigLabel('description')" 4186 > 4187 </p> 4188 </div> 4189 <!-- /Page Header Section --> 4190 4191 <!-- Sorting Section --> 4192 <div v-if="hasBundleBuilderSorting()" class="rebuy-bundle-builder__header-utility-container"> 4193 <select 4194 aria-label="Sort By" 4195 name="selected_sorting_option" 4196 v-model="selected_sorting_option" 4197 v-on:change="handleBundleBuilderSortingOptionChange" 4198 class="rebuy-bundle-builder__header-utility-sorting rebuy-select" 4199 > 4200 <option disabled value="">Sort By</option> 4201 <option v-for="option in sorting_options" :value="option.value" :key="option.value">{{ option.label }}</option> 4202 </select> 4203 </div> 4204 <!-- /Sorting Section --> 4205 4206 <!-- Page Body Section --> 4207 <div class="rebuy-bundle-builder__main-body"> 4208 <!-- Steps Section --> 4209 <div class="rebuy-bundle-builder__steps-container"> 4210 4211 <!-- CUSTOM PLACEMENT Bundle Tier Progress Bar --> 4212 <div class="progress-bar-container"> 4213 <div v-if="shouldDisplayBundleTierProgressBar()" class="rebuy-bundle-builder__group-container-progress-bar"> 4214 <div 4215 class="rebuy-bundle-builder__group-progress-step-wrapper rebuy-bundle-builder__progress-step-wrapper" 4216 v-bind:class="[ 'count-' + config.discount.tiers.length ]" 4217 > 4218 <div 4219 v-for="(tier, tier_index) in config.discount.tiers" 4220 class="rebuy-bundle-builder__progress-step" 4221 v-bind:style="{ left: progressStepPosition(tier) }" 4222 v-bind:class="[ 4223 progressTierReached(tier, products) ? 'complete' : '', 4224 'rebuy-bundle-builder__progress-step--' + tier_index 4225 ]" 4226 > 4227 4228 <div 4229 class="rebuy-bundle-builder__progress-step-icon" 4230 v-bind:class="[ 'rebuy-bundle-builder__progress-step-icon-type-' + getBundleTierProgressStepType(tier) ]" 4231 > 4232 <span 4233 v-if="getBundleTierProgressStepType(tier) !== 'none'" 4234 v-html="formatBundleTierValue(tier.discount_value, tier.discount_type)" 4235 class="rebuy-bundle-builder__progress-step-value" 4236 v-bind:class="[ 'rebuy-bundle-builder__progress-step-value-type--' + getBundleTierProgressStepType(tier) ]" 4237 > 4238 </span> 4239 </div> 4240
4241 <span 4242 class="rebuy-bundle-builder__progress-step-label" 4243 v-html="formatBundleTierLabel(tier)"> 4244 </span> 4245 </div> 4246 </div> 4247 4248 <div class="rebuy-bundle-builder__progress-bar-wrapper"> 4249 <div 4250 class="rebuy-bundle-builder__progress-bar-meter" 4251 v-bind:class="[hasTierProgress(products) ? 'has-progress' : 'no-progress']"> 4252 <div 4253 class="rebuy-bundle-builder__progress-bar-meter-fill" 4254 v-bind:style="{ width: products.length == 1 ? '0%' : ((products.length - 1) / (config.discount.tiers.length - 1)) * 100 + '%' }" 4255 role="progressbar" 4256 tabindex="0" 4257 aria-valuemin="0" 4258 aria-valuemax="100" 4259 v-bind:aria-valuenow="tiersPercentageComplete(config.discount.tiers, products)" 4260 aria-labelledby="rebuy-bundle-builder__progress-bar-meter-label" 4261 > 4262 <span class="sr-only"></span> 4263 </div> 4264 </div> 4265 </div> 4266 </div> 4267 </div> 4268 <!-- /END CUSTOM PLACEMENT Bundle Tier Progress Bar --> 4269 4270 <!-- Step Tabs Section --> 4271 <div v-if="isBundleBuilderTabLayout()" class="rebuy-bundle-builder__step-tabs rebuy-bundle-builder__step-tabs--sticky"> 4272 <div class="rebuy-bundle-builder__step-tabs-wrapper"> 4273 <div 4274 v-for="(step, step_index) in config.steps" 4275 class="rebuy-bundle-builder__step-tab" 4276 v-bind:key="'rebuy-bundle-builder__step-tab-' + step_index" 4277 v-bind:class="['rebuy-bundle-builder__step-tab-' + step_index, active_step_index === step_index ? 'active' : '']" 4278 v-bind:aria-label="'Select step tab: ' + step.title" 4279 role="button" 4280 tabindex="0" 4281 v-on:click="handleSelectingBundleStep(step_index)" 4282 v-on:keydown.enter.space="handleSelectingBundleStep(step_index)" 4283 > 4284 <h3 4285 v-if="step.title" 4286 v-html="step.title" 4287 class="rebuy-bundle-builder__step-tab-title"> 4288 </h3> 4289 4290 <p 4291 v-if="step.description" 4292 v-html="step.description" 4293 class="rebuy-bundle-builder__step-tab-description"> 4294 </p> 4295 </div> 4296 </div> 4297 4298 <button 4299 v-on:click="scrollToTargetBundleElement('main', id)" 4300 class="rebuy-bundle-builder__scroll-to-button" 4301 aria-label="scroll to top" 4302 > 4303 <rebuy-icon name="chevron-up"></rebuy-icon> 4304 <span>Top</span> 4305 </button> 4306 </div> 4307 <!-- /Step Tabs Section --> 4308 4309 <!-- Step Section --> 4310 <div 4311 v-for="(step, step_index) in config.steps" 4312 class="rebuy-bundle-builder__step-container" 4313 v-bind:key="'rebuy-bundle-builder__step-container-' + step_index" 4314 v-bind:class="[ 4315 'rebuy-bundle-builder__step-container-' + step_index, 4316 step.unlocked ? '' : 'locked', 4317 isBundleBuilderCollapsibleLayout() ? 'rebuy-bundle-builder__step-container--collapsible' : '', 4318 !shouldRenderBundleStep(step_index) ? 'rebuy-bundle-builder__step-container--not-active' : 'rebuy-bundle-builder__step-container--active' 4319 ]" 4320 aria-label="step" 4321 role="listitem" 4322 > 4323 4324 <!-- Step Header Section --> 4325 <div v-if="!isBundleBuilderTabLayout()" class="rebuy-bundle-builder__step-header" 4326 v-bind:class="[products.some(product => product?.properties?._r_bbsi == step_index) ? 'in-bundle' : 'not-in-bundle']" 4327 > 4328 4329 <div class="rebuy-bundle-builder__step-header-copy-container"> 4330 <h3 4331 v-if="step.title" 4332 v-html="step.title" 4333 class="rebuy-bundle-builder__step-header-title"> 4334 </h3> 4335 4336 <p 4337 v-if="step.description" 4338 v-html="step.description" 4339 class="rebuy-bundle-builder__step-header-description"> 4340 </p> 4341 </div> 4342 4343 <div class="rebuy-bundle-builder__step-header-actions"> 4344 <div v-if="isBundleBuilderCollapsibleLayout()"> 4345 <button 4346 class="rebuy-bundle-builder__step-header-collapse-button" 4347 v-on:click="handleCollapsingBundleStep(step_index)" 4348 v-bind:aria-label="shouldRenderBundleStep(step_index) ? 'Collapse ' + step.title : 'Expand ' + step.title" 4349 > 4350 <rebuy-icon 4351 :name="shouldRenderBundleStep(step_index) ? 'minu
4351s' : 'plus'" 4352 class="rebuy-bundle-builder__step-header-collapse-button-icon"> 4353 </rebuy-icon> 4354 </button> 4355 </div> 4356 4357 <button 4358 v-if="!isBundleBuilderCollapsibleLayout()" 4359 v-on:click="scrollToTargetBundleElement('step', id, (step_index - (step_index === 0 ? 0 : 1)))" 4360 :class="[ 4361 'rebuy-bundle-builder__scroll-to-button', 4362 step_index === 0 ? 'rebuy-bundle-builder__top-button' : 'rebuy-bundle-builder__prev-button', 4363 'rebuy-bundle-builder__step-button-' + step_index 4364 ]" 4365 aria-label="scroll to top" 4366 > 4367 <rebuy-icon name="chevron-up"></rebuy-icon> 4368 <span v-html="step_index === 0 ? 'Top' : 'Prev'"></span> 4369 </button> 4370 </div> 4371 </div> 4372 <!-- /Step Header Section --> 4373 4374 <!-- Step Body Section --> 4375 <div 4376 class="rebuy-bundle-builder__step-body rebuy-product-grid start-column rebuy-product-grid-step-100" 4377 v-bind:class="[getBundleBuilderLayoutClasses(step), 'rebuy-product-grid__step-' + step_index]" 4378 > 4379 <!-- Step Product Section --> 4380 <div 4381 v-for="(product, product_index) in step.products" 4382 v-bind:class="[product.handle, 'product-id-' + product.id, productTagClasses(product), hasBundleBuilderStepSplideCarousel(step) ? 'splide__slide' : '']" 4383 class="rebuy-product-block" 4384 aria-label="product" 4385 role="listitem" 4386 > 4387 <div v-if="product.type !== 'placeholder'" class="rebuy-bundle-builder__step-product"> 4388 <!-- Product Image Section --> 4389 <div class="rebuy-product-media clickable" @click="openVariantModal(product, step, step_index)"> 4390 <div 4391 class="rebuy-product-image" 4392 > 4393 <!-- Preload second img in the background hack, so on hover browser can serve the cached image --> 4394 <img 4395 v-if="product.hover_image" 4396 class="rebuy-style__hidden-block" 4397 v-bind:src="sizeImage(product.hover_image.src, '400x400')" 4398 v-bind:alt="'View ' + product.title" 4399 /> 4400 4401 <img 4402 class="rebuy-style__hover-transition" 4403 v-bind:loading="product_index > 1 ? 'lazy' : 'eager'" 4404 v-bind:src="getBundleBuilderProductImage(product)" 4405 v-bind:alt="'View ' + product.title" 4406 v-on:mouseover="handleProductImageHover(product, true)" 4407 v-on:mouseleave="handleProductImageHover(product, false)" 4408 /> 4409 </div> 4410 4411 <!-- CUSTOM --> 4412 <div v-if="product?.tags?.includes('badge:')" class="rebuy-product-badge-container"> 4413 <div v-for="tag in product.tags.split(',').filter(tag => tag.includes('badge:'))" 4414 v-html="window.formatBadgeText(tag)" 4415 :style="{ backgroundColor: window?.theme?.badgeColors?.background || '#01656f', color: window?.theme?.badgeColors?.color || '#ffffff' }" 4416 v-bind:class="[ window.formatBadgeClass(tag) ]" 4417 class="rebuy-product-badge"></div> 4418 </div> 4419 <!-- END CUSTOM --> 4420 4421 </div> 4422 <!-- End Product Image Section --> 4423 4424 <!-- Product Info Section --> 4425 <div class="rebuy-product-info clickable" @click="openVariantModal(product, step, step_index)"> 4426 <div 4427 role="heading" 4428 aria-level="5" 4429 class="rebuy-product-title" 4430 v-html="product.title" 4431 v-bind:aria-label="'View ' + product.title" 4432 > 4433 </div> 4434 4435 <div class="rebuy-variant-title" v-if="showVariantTitle(product)" v-html="product.selected_variant.title"></div> 4436 4437 <div class="rebuy-product-review" v-if="hasProductReviews(product)" aria-label="product star rating">
4438 <span class="rebuy-star-rating"> 4439 <span 4440 v-if="product.reviews.star_rating" 4441 class="rebuy-star-rating-value sr-only" 4442 v-html="product.reviews.star_rating + ' stars out of 5 stars'" 4443 > 4444 </span> 4445 <span class="rebuy-star-rating-background"></span> 4446 <span class="rebuy-star-rating-foreground" v-bind:style="{ width: productReviewRatingPercentage(product) }"></span> 4447 </span> 4448 <span class="rebuy-review-count" v-html="productReviewCount(product)"></span> 4449 </div> 4450 4451 <div class="rebuy-product-price"> 4452 <div v-if="bundleVariantOnSale(product, product.selected_variant)"> 4453 <span class="rebuy-money sale"> 4454 <span class="sr-only">Sale price</span> 4455 <span tabindex="0" v-html="formatMoney(bundleVariantPrice(product, product.selected_variant))"></span> 4456 </span> 4457 <span class="rebuy-money compare-at"> 4458 <span class="sr-only">Original price</span> 4459 <span v-html="formatMoney(bundleVariantCompareAtPrice(product, product.selected_variant))"></span> 4460 </span> 4461 </div> 4462 <div v-if="!(bundleVariantOnSale(product, product.selected_variant))"> 4463 <span class="rebuy-money"> 4464 <span class="sr-only">Price</span> 4465 <span tabindex="0" v-html="formatMoney(bundleVariantPrice(product, product.selected_variant))"></span> 4466 </span> 4467 </div> 4468 </div> 4469 4470 <div class="rebuy-product-description" v-if="showProductDescription(product)" v-html="text(product.body_html)"></div> 4471 </div> 4472 <!-- /Product Info Section --> 4473 4474 <!-- Product Variant Selection Section --> 4475 <div class="rebuy-product-options" v-if="showVariantSelect(product)"> 4476 <select 4477 :id="id + '-' + 'select' + '-' + product_index" 4478 class="rebuy-select" 4479 v-bind:aria-label="'variant of ' + product.title" 4480 v-model="product.selected_variant_id" 4481 v-on:change="selectVariant(product)"> 4482 <option 4483 v-for="variant in product.variants" 4484 class="rebuy-product-options__option" 4485 :class="{ 'rebuy-product-options__option--oos' : !variantAvailable(variant) }" 4486 v-bind:value="variant.id" 4487 :disabled="!variantAvailable(variant)" 4488 v-html="formatVariantOptionTitle(variant)"> 4489 </option> 4490 </select> 4491 </div> 4492 <!-- /Product Variant Selection Section --> 4493 4494 <!-- Product CTA Section --> 4495 <div class="rebuy-bundle-builder__product-actions rebuy-product-actions"> 4496 <button 4497 v-if="hasProductQuickViewEnabled()" 4498 v-on:click="openVariantModal(product, step, step_index)" 4499 class="rebuy-button secondary rebuy-bundle-builder__product-quick-view" 4500 v-html="getBundleConfigLabel('quick_view_label')" 4501 > 4502 </button> 4503 4504 <div class="rebuy-bundle-builder__product-quantity"> 4505 <div v-if="foundStepProductInBundleHolder(product.
4505selected_variant_id, step_index)"> 4506 <div class="rebuy-bundle-builder__item-quantity-widget"> 4507 <button 4508 class="rebuy-bundle-builder__item-quantity-widget-button" 4509 v-on:click="removeLastAddedProductStep(product.selected_variant_id, step_index)" 4510 v-bind:aria-label="'Decrease quantity of ' + product.title" 4511 > 4512 <rebuy-icon name="minus" class="rebuy-grey"></rebuy-icon> 4513 </button> 4514 4515 <span 4516 class="rebuy-bundle-builder__item-quantity-widget-label" 4517 v-html="getBundleVariantQuantity(product.selected_variant_id, step_index)"> 4518 </span> 4519 4520 <button 4521 class="rebuy-bundle-builder__item-quantity-widget-button" 4522 v-on:click="addProductToBundle(product, step, step_index)" 4523 v-bind:aria-label="'Increase quantity of ' + product.title" 4524 v-bind:disabled="shouldDisableProductAddToBundle(product, step, step_index)" 4525 > 4526 <rebuy-icon name="plus" class="rebuy-grey"></rebuy-icon> 4527 </button> 4528 </div> 4529 </div> 4530 4531 4532 <button 4533 v-if="!foundStepProductInBundleHolder(product.selected_variant_id, step_index)" 4534 class="rebuy-button" 4535 v-bind:disabled="shouldDisableProductAddToBundle(product, step, step_index)" 4536 v-bind:aria-label="buttonAriaLabel(product)" 4537 v-on:click="addProductToBundle(product, step, step_index)" 4538 > 4539 <span v-html="getBundleConfigLabel('add_to_bundle', step)"></span> 4540 </button> 4541 </div> 4542 </div> 4543 <!-- /Product CTA Section --> 4544 </div> 4545 4546 <!-- Product Skeleton Section --> 4547 <div 4548 v-if="product.type === 'placeholder'" 4549 class="rebuy-bundle-builder__step-product-skeleton"> 4550 <span></span> 4551 </div> 4552 <!-- /Product Skeleton Section --> 4553 4554 </div> 4555 <!-- /Step Product Section --> 4556 </div> 4557 <!-- /Step Body Section --> 4558 </div> 4559 <!-- /Step Section --> 4560 </div> 4561 <!-- /Steps Section --> 4562 4563 <!-- Product Group Section --> 4564 <div 4565 class="rebuy-bundle-builder__group-container" 4566 v-bind:class="[has_container_expanded ? 'expanded' : 'default', products?.length >= config?.container_holder?.max_value ? 'bundle-complete' : 'bundle-incomplete']"> 4567 <div class="rebuy-bundle-builder__group-container-inner"> 4568 <div class="rebuy-bundle-builder__group-container-header"> 4569 <div class="rebuy-bundle-builder__group-container-header--left"> 4570 <h3 4571 class="rebuy-bundle-builder__group-container-header-title" 4572 v-html="getBundleConfigLabel('bundle_container_title')" 4573 > 4574 </h3> 4575
4576 <span class="rebuy-bundle-builder__group-container-header-title-count"> 4577 <span 4578 class="rebuy-bundle-builder__group-container-header-products_count" 4579 v-html="getBundleContainerHeaderValue('products_count')"> 4580 </span> 4581 4582 <span class="rebuy-bundle-builder__group-container-header-divider">/</span> 4583 4584 <span 4585 class="rebuy-bundle-builder__group-container-header-container-length" 4586 v-html="getBundleContainerHeaderValue('container_length')"> 4587 </span> 4588 </span> 4589 </div> 4590 4591 <button 4592 class="rebuy-bundle-builder__group-container-header-expand" 4593 v-on:click="handleExpandingBundleContainer()" 4594 > 4595 <rebuy-icon v-if="hasBundleContainerExpanded()" name="chevron-down"></rebuy-icon> 4596 4597 <rebuy-icon v-if="!hasBundleContainerExpanded()" name="chevron-up"></rebuy-icon> 4598 </button> 4599 </div> 4600 4601 <!-- Bundle Products Section --> 4602 <div 4603 class="rebuy-bundle-builder__group-container-body" 4604 v-bind:class="[has_container_expanded ? 'expanded' : 'default']"> 4605 <div class="rebuy-bundle-builder__group-container-body-items"> 4606 4607 <!-- CUSTOM PLACEMENT Bundle Gifts Selecting Section --> 4608 <div v-if="isEligibleDiscountWithGift()" class="rebuy-bundle-builder__group-container-gifts"> 4609 <h3 class="rebuy-bundle-builder__gift-header" v-html="getBundleDiscountTierLabel('gift_header_message')"></h3> 4610 4611 <div 4612 v-for="(product, product_index) in eligible_discount.gift_items" 4613 v-if="product.data" 4614 class="rebuy-bundle-builder__gift-product" 4615 v-bind:key="'rebuy-bundle-builder-gift-product--' + product_index" 4616 > 4617 <div class="rebuy-bundle-builder__gift-product-image"> 4618 <img 4619 v-bind:src="itemImage(product.data, product.data.selected_variant, '80x80')" 4620 v-bind:alt="'View ' + product.data.title" 4621 /> 4622 </div> 4623 4624 <div class="rebuy-bundle-builder__gift-product-info-wrapper"> 4625 <div class="rebuy-bundle-builder__gift-product-info"> 4626 <h3 class="rebuy-bundle-builder__gift-product-title" v-html="product.data.title"></h3> 4627 </div> 4628 4629 <div v-if="product.data.variants.length > 1" class="rebuy-product-options"> 4630 <select 4631 :id="id + '-' + 'gift-select' + '-' + product_index" 4632 class="rebuy-select rebuy-bundle-builder__gift-product-select" 4633 v-bind:aria-label="'variant of ' + product.data.title" 4634 v-model="product.data.selected_variant_id" 4635 v-on:change="selectVariant(product.data)"> 4636 <option 4637 v-for="variant in product.data.variants" 4638 class="rebuy-product-options__option" 4639 :class="{ 'rebuy-product-options__option--oos' : !variantAvailable(variant) }" 4640 v-bind:value="variant.id" 4641 :disabled="!variantAvailable(variant)" 4642 v-html="formatVariantOptionTitle(variant)"> 4643 </option> 4644 </select> 4645 </div> 4646 4647 <div class="rebuy-bundle-builder__gift-product-actions"> 4648 <button 4649 v-if="hasSelectedGiftProduct(product.data)" 4650 class="rebuy-bundle-builder__gift-product-button rebuy-bundle-builder__gift-product-button--remove" 4651 v-on:click="handleRemovingGiftProduct(product.data)"> 4652 <rebuy-icon name="x"></rebuy-icon> 4653 </button> 4654 4655 <button 4656 v-if="!hasSelectedGiftProduct(product.data)" 4657 class="rebuy-button rebuy-bundle-builder__gift-product-button rebuy-bundle-builder__gift-product-button--add" 4658 v-on:click="handleAddingGiftProduct(product.data)">
4659 <span v-html="'Add'"></span> 4660 </button> 4661 </div> 4662 </div> 4663 </div> 4664 </div> 4665 <!-- /Bundle Gifts Selecting Section --> 4666 <div 4667 v-for="(product, product_index) in bundleProducts" 4668 class="rebuy-bundle-builder__product-holder" 4669 aria-label="product" 4670 role="listitem" 4671 > 4672 <div 4673 v-if="product.classification === 'placeholder'" 4674 class="rebuy-bundle-builder__product-holder-template" 4675 > 4676 <div class="rebuy-bundle-builder__product-sign-holder"> 4677 <span class="rebuy-bundle-builder__product-holder-icon"> 4678 <rebuy-icon name="plus"></rebuy-icon> 4679 </span> 4680 </div> 4681 4682 <div class="rebuy-bundle-builder__product-holder-detail"> 4683 <h3 4684 class="rebuy-bundle-builder__product-holder-detail-title" 4685 v-html="getBundleConfigLabel('select_product')"> 4686 </h3> 4687 4688 <p 4689 v-if="product.label" 4690 class="rebuy-bundle-builder__product-holder-detail-description" 4691 v-html="product.label"> 4692 </p> 4693 </div> 4694 </div> 4695 4696 <div v-if="!product.classification" class="rebuy-bundle-builder__product-holder-data"> 4697 <div class="rebuy-bundle-builder__product-holder-info--left"> 4698 <!-- Product Image Section --> 4699 <div class="rebuy-bundle-builder__product-holder-media rebuy-product-media"> 4700 <img 4701 v-bind:src="itemImage(product, product.selected_variant, '80x80')" 4702 v-bind:alt="'View ' + product.title" 4703 /> 4704 </div> 4705 <!-- /Product Image Section --> 4706 4707 <!-- Product Info Section --> 4708 <div class="rebuy-bundle-builder__product-holder-info rebuy-product-info"> 4709 <h3 class="rebuy-bundle-builder__product-holder-info-title rebuy-product-title" v-html="product.title"></h3> 4710 4711 <p 4712 v-if="!shouldHideDefaultVariantTitle(product)" 4713 class="rebuy-bundle-builder__product-holder-info-variant rebuy-variant-title" 4714 v-html="product.selected_variant.title" 4715 > 4716 </p> 4717 4718 <div class="rebuy-bundle-builder__product-holder-info-price rebuy-product-price"> 4719 <div v-if="bundleVariantOnSale(product, product.selected_variant, true)">
4720 <span class="rebuy-money sale"> 4721 <span class="sr-only">Sale price</span> 4722 <span tabindex="0" v-html="formatMoney(bundleVariantPrice(product, product.selected_variant))"></span> 4723 </span> 4724 <span class="rebuy-money compare-at"> 4725 <span class="sr-only">Original price</span> 4726 <span v-html="formatMoney(bundleVariantCompareAtPrice(product, product.selected_variant))"></span> 4727 </span> 4728 <div 4729 v-if="isFixedDiscountBundle()" 4730 class="rebuy-bundle-builder__fixed-discount-line-item-message" 4731 v-html="getBundleConfigLabel('fixed_tier_discount')"> 4732 </div> 4733 </div> 4734 <div v-if="!(bundleVariantOnSale(product, product.selected_variant, true))"> 4735 <span class="rebuy-money"> 4736 <span class="sr-only">Price</span> 4737 <span tabindex="0" v-html="formatMoney(bundleVariantPrice(product, product.selected_variant))"></span> 4738 </span> 4739 </div> 4740 </div> 4741 </div> 4742 </div> 4743 4744 <div class="rebuy-bundle-builder__product-holder-info--right"> 4745 <button 4746 class="rebuy-bundle-builder__product-holder-info-delete" 4747 v-on:click="handleRemovingProductFromBundle(product_index)" 4748 > 4749 <rebuy-icon name="x"></rebuy-icon> 4750 </button> 4751 </div> 4752 <!-- /Product Info Section --> 4753 </div> 4754 </div> 4755 </div> 4756 <!-- /Bundle Products Section --> 4757 4758 <!-- Total Savings Amount --> 4759 <div 4760 v-if="hasBundleBuilderTotalSavingsEnabled() && getBundleTotalSavingAmount(products) > 0" 4761 class="rebuy-bundle-builder__total-savings-container"> 4762 <span class="rebuy-bundle-builder__total-savings-label"> 4763 Total Savings: 4764 </span> 4765 <span 4766 class="rebuy-bundle-builder__total-savings-amount rebuy-money sale" 4767 v-html="formatMoney(getBundleTotalSavingAmount(products))"> 4768 </span> 4769 </div> 4770 <!-- /Total Savings Amount --> 4771 4772 <!-- Subscription Options Section --> 4773 <div v-if="hasSelectedEnabledBundleSubscription()" class="rebuy-bundle-builder__subscription-options"> 4774 <!-- Subscription Radio Box --> 4775 <div 4776 class="rebuy-bundle-builder__action-box-cta rebuy-bundle-builder__action-box-subscription" 4777 v-bind:class="[!hasSellingPlansIntervalList() ? 'rebuy-bundle-builder__action-box-cta--disabled' : '' ]"> 4778 <div class="rebuy-bundle-builder__action-box-top"> 4779 <label class="rebuy-radio-label"> 4780 <input 4781 class="radio-input rebuy-radio rebuy-bundle-builder__action-box-radio" 4782 v-model="selected_purchase_type" 4783 value="subscription" 4784 type="radio" 4785 v-bind:disabled="!hasSellingPlansIntervalList()" 4786 />
4787 <span 4788 class="rebuy-bundle-builder__action-box-label" 4789 v-html="getBundleConfigLabel('switch_to_subscription_title')" 4790 > 4791 </span> 4792 </label> 4793 4794 <div class="rebuy-bundle-builder__action-box-price"> 4795 <span v-if="bundleHasEligibleDiscount(products) || getSubBundleSubtotalSavingPercent(products)"> 4796 <span class="rebuy-money compare-at"> 4797 <span class="sr-only">Original subtotal price</span> 4798 <span v-html="formatMoney(getBundleSubtotal(products))"></span> 4799 </span> 4800 4801 <span class="rebuy-money sale"> 4802 <span class="sr-only">Sale subtotal price</span> 4803 <span tabindex="0" v-html="formatMoney(getSubBundleDiscountedSubtotal(products))"></span> 4804 </span> 4805 </span> 4806 4807 <span v-if="!getSubBundleSubtotalSavingPercent(products) && (!bundleHasEligibleDiscount(products) && getBundleSubtotal(products))" class="rebuy-money sale"> 4808 <span class="sr-only">Subtotal price</span> 4809 <span tabindex="0" v-html="formatMoney(getBundleSubtotal(products))"></span> 4810 </span> 4811 </div> 4812 </div> 4813 4814 <div class="rebuy-bundle-builder__action-box-bottom"> 4815 <p 4816 v-if="getBundleConfigLabel('switch_to_subscription_description')" 4817 class="rebuy-bundle-builder__action-box-description" 4818 v-html="getBundleConfigLabel('switch_to_subscription_description')"> 4819 </p> 4820 4821 <div v-if="hasSellingPlansIntervalList()" class="rebuy-bundle-builder__action-box-details"> 4822 <select 4823 id="rebuy-bundle-builder-subscription-interval" 4824 class="rebuy-select rebuy-bundle-builder__action-box-select" 4825 v-model="selected_interval" 4826 v-on:change="handleSubscriptionIntervalChange($event)" 4827 > 4828 <option 4829 v-for="(interval, interval_index) in selling_plan_interval_list" 4830 v-bind:key="'rebuy-bundle-builder-subscription-interval--' + interval_index" 4831 v-bind:value="interval"> 4832 {{ interval }} 4833 </option> 4834 </select> 4835 4836 <span v-if="getBundleConfigLabel('save_label') && getSubBundleSubtotalSavingPercent(products)" class="rebuy-bundle-builder__action-box-saving"> 4837 <span v-html="getBundleConfigLabel('save_label')"></span> 4838 <span v-html="getSubBundleSubtotalSavingPercent(products)"></span> 4839 </span> 4840 </div> 4841 4842 <p 4843 v-if="hasExcludedBundleDiscountEnabled() && getBundleConfigLabel('excluded_bundle_discount_text')" 4844 class="rebuy-bundle-builder__action-box-note" 4845 v-html="getBundleConfigLabel('excluded_bundle_discount_text')"> 4846 </p> 4847 </div> 4848 </div> 4849 <!-- /Subscription Radio Box --> 4850 4851 <!-- One-time Radio Box --> 4852 <div v-if="!hasBundleBuilderSubscriptionOnlyEnabled()" class="rebuy-bundle-builder__action-box-cta rebuy-bundle-builder__action-box-subscription"> 4853 <div class="rebuy-bundle-builder__action-box-top"> 4854 <label class="rebuy-radio-label"> 4855 <input 4856 class="radio-input rebuy-radio rebuy-bundle-builder__action-box-radio" 4857 v-model="selected_purchase_type" 4858 value="one-time" 4859 type="radio" 4860 />
4861 <span 4862 v-if="getBundleConfigLabel('one_time_title')" 4863 class="rebuy-bundle-builder__action-box-label" 4864 v-html="getBundleConfigLabel('one_time_title')" 4865 > 4866 </span> 4867 </label> 4868 4869 <div class="rebuy-bundle-builder__action-box-price"> 4870 <span v-if="bundleHasEligibleDiscount()"> 4871 <span class="rebuy-money compare-at"> 4872 <span class="sr-only">Original subtotal price</span> 4873 <span v-html="formatMoney(getBundleSubtotal(products))"></span> 4874 </span> 4875 4876 <span class="rebuy-money sale"> 4877 <span class="sr-only">Sale subtotal price</span> 4878 <span tabindex="0" v-html="formatMoney(getBundleDiscountedSubtotal(products))"></span> 4879 </span> 4880 </span> 4881 4882 <span v-if="!bundleHasEligibleDiscount() && getBundleSubtotal(products)" class="rebuy-money sale"> 4883 <span class="sr-only">Subtotal price</span> 4884 <span tabindex="0" v-html="formatMoney(getBundleSubtotal(products))"></span> 4885 </span> 4886 </div> 4887 </div> 4888 4889 <div class="rebuy-bundle-builder__action-box-bottom"> 4890 <p 4891 v-if="getBundleConfigLabel('one_time_description')" 4892 class="rebuy-bundle-builder__action-box-description" 4893 v-html="getBundleConfigLabel('one_time_description')"> 4894 </p> 4895 </div> 4896 </div> 4897 <!-- /One-time Order Radio Box --> 4898 </div> 4899 </div> 4900 <!-- /Subscription Options Section --> 4901 4902 <!-- Add to Cart Section --> 4903 <div class="rebuy-bundle-builder__group-container-action"> 4904 <div class="rebuy-bundle-builder__cta-container"> 4905 <button 4906 class="rebuy-button" 4907 v-on:click="addSelectedProductsToCart()" 4908 v-bind:disabled="shouldDisableAddBundleToCart(products)" 4909 aria-label="Add all selected products to cart" 4910 > 4911 <span v-html="buttonWidgetLabel()"></span> 4912 4913 <span v-if="!hasSelectedEnabledBundleSubscription()"> 4914 <span v-if="bundleHasEligibleDiscount()"> 4915 <span class="rebuy-money sale"> 4916 <span class="sr-only">Sale subtotal price</span> 4917 <span tabindex="0" v-html="formatMoney(getBundleDiscountedSubtotal(products))"></span> 4918 </span> 4919 4920 <span class="rebuy-money compare-at"> 4921 <span class="sr-only">Original subtotal price</span>
4922 <span v-html="formatMoney(getBundleSubtotal(products))"></span> 4923 </span> 4924 </span> 4925 4926 <span v-if="!bundleHasEligibleDiscount() && getBundleSubtotal(products)" class="rebuy-money sale"> 4927 <span class="sr-only">Subtotal price</span> 4928 <span tabindex="0" v-html="formatMoney(getBundleSubtotal(products))"></span> 4929 </span> 4930 </span> 4931 </button> 4932 </div> 4933 </div> 4934 </div> 4935 <!-- /Add to Cart Section --> 4936 </div> 4937 <!-- /Product Group Section --> 4938 </div> 4939 <!-- /Body Section --> 4940 </div> 4941 4942 4943 <div 4944 v-if="has_container_expanded" 4945 class="rebuy-bundle-builder__full-screen-background rebuy-full-screen__background" 4946 v-on:click="handleExpandingBundleContainer()"> 4947 </div> 4948 </div> 4949</script>
4949 4950 4951<!-- Modal --> 4952 4953
4954<script id="rebuy-modal-variant-template" type="text/template"> 4955 <div class="rebuy-modal" v-cloak v-bind:class="[visible ? 'is-visible' : 'is-hidden']" v-on:click="stopPropagation($event)"> 4956 <div class="rebuy-modal__container" v-cloak v-bind:class="[style, visible ? 'is-visible' : 'is-hidden']"> 4957 4958 <!-- CUSTOM --> 4959 <button class="rebuy-modal-close" 4960 v-for="(button, button_index) in buttons" 4961 v-if="button_index == 1" 4962 v-on:click="click(button)" 4963 type="button" 4964 aria-label="Close modal" 4965 > 4966 <svg width="14" height="14" viewBox="0 0 14 14" fill="#000000" xmlns="http://www.w3.org/2000/svg"> 4967 <path d="M13 1L1 13M13 13L1 1" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path> 4968 </svg> 4969 </button> 4970 <!-- /CUSTOM --> 4971 4972 <div class="rebuy-modal__container-body"> 4973 4974 <div class="rebuy-modal__product" v-bind:class="getModalLayoutClasses(settings.layout)"> 4975 4976 <div class="rebuy-modal__product-media"> 4977 <img 4978 class="rebuy-modal__product-media-image" 4979 v-bind:src="sizeImage(getSelectedImage()?.src, '400x400')" 4980 v-bind:alt="product.title" 4981 /> 4982 4983 <div v-if="shouldShowSubImages()" class="rebuy-modal__product-sub-images"> 4984 <div 4985 v-for="(image, index) in product.images" 4986 :key="image.id + '-sub-image-' + index" 4987 class="rebuy-modal__product-sub-image" 4988 v-on:click="handleSelectingImage(image)" 4989 v-bind:class="{ 'is-active': getSelectedImage()?.id === image.id }" 4990 role="button" 4991 tabindex="0"> 4992 <img 4993 v-bind:src="sizeImage(image.src, '200x200')" 4994 v-bind:alt="product.title" 4995 /> 4996 </div> 4997 </div> 4998 4999 <!-- CUSTOM --> 5000 <div v-if="product?.tags?.includes('badge:')" class="rebuy-product-badge-container"> 5001 <div v-for="tag in product.tags.split(',').filter(tag => tag.includes('badge:'))" 5002 v-html="window.formatBadgeText(tag)" 5003 :style="{ backgroundColor: window?.theme?.badgeColors?.background || '#01656f', color: window?.theme?.badgeColors?.color || '#ffffff' }" 5004 v-bind:class="[ window.formatBadgeClass(tag) ]" 5005 class="rebuy-product-badge"></div> 5006 </div> 5007 <!-- END CUSTOM --> 5008 5009 </div> 5010 5011 <div class="rebuy-modal__product-info"> 5012 <h4 class="rebuy-modal__product-title" v-html="product.title"></h4> 5013 <div class="rebuy-modal__product-description" v-html="product.description"></div> 5014 5015 <div class="rebuy-modal__product-price"> 5016 <div v-if="variantOnSale(product, product.selected_variant)"> 5017 <span class="rebuy-money sale" v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 5018 <span class="rebuy-money compare-at" v-html="formatMoney(variantCompareAtPrice(product, product.selected_variant))"></span> 5019 </div> 5020 <div v-if="!(variantOnSale(product, product.selected_variant))"> 5021 <span class="rebuy-money" v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 5022 </div> 5023 </div> 5024 5025 <div class="rebuy-modal__product-options"> 5026 <div v-if="isVariantSelectorButtons()" class="rebuy-modal__product-option" v-for="option in product.options"> 5027 <div class="rebuy-modal__product-option-title">{{ option.name }}</div> 5028 <div class="rebuy-modal__product-option-buttons"> 5029 <button 5030 class="rebuy-option-button" 5031 v-for="(value, index) in option.values" 5032 v-bind:class="{ 'is-active': product.selected_variant['option' + option.position] == value, 'is-unavailable': !variantOptionAvailable(product, 'option' + option.position, value) }" 5033 v-on:click="selectVariantOption(product, 'option' + option.position, value)" 5034 > 5035 {{ value }} 5036 </button> 5037 </div> 5038 </div> 5039 5040 <div v-if="!isVariantSelectorButtons() && shouldShowVariantSelector()" class="rebuy-modal__product-option-select"> 5041 <select 5042 class="rebuy-select" 5043 v-bind:aria-label="'variant of ' + product.title" 5044 v-model="product.selected_variant_id" 5045 v-on:change="selectVariant(product)" 5046 > 5047 <option v-for="variant in product.variants" v-bind:value="variant.id">{{ variant.title }}</option> 5048 </select> 5049 </div> 5050 </div> 5051 5052 </div> 5053 5054 </div> 5055 5056 </div> 5057 5058 <div class="rebuy-modal__container-actions" v-bind:class="[buttons.length > 1 ? 'multi-button' : 'single-button']"> 5059 <button class="rebuy-button" 5060 v-for="button in buttons" 5061 v-bind:class="[button.type]" 5062 v-on:click="click(button)" 5063 v-html="button.label" 5064 type="button" 5065 > 5066 </button> 5067 </div> 5068 5069 </div> 5070</div> 5071</script>
5071 5072 5073<!-- Popup Widget Template -->
5074<script id="rebuy-widget-259326" type="text/template"> 5075<div class="rebuy-widget" 5076v-cloak 5077v-on:click="stopPropagation($event)" 5078v-bind:id="'rebuy-widget-' + id" 5079v-bind:class="['widget-type-' + config.type.replace('_','-'), 'widget-display-' + config.display_type, products.length > 0 ? 'is-visible' : 'is-hidden', 'widget-layout-' + currentLayout()]"> 5080 5081 <div 5082 class="rebuy-widget-container" 5083 v-cloak 5084 v-bind:class="['widget-display-' + config.display_type, visible ? 'is-visible' : 'is-hidden' ]" 5085 v-on:click.self="hide()"> 5086 5087 <div class="rebuy-widget-content"> 5088 <div class="rebuy-modal-close" v-on:click="hide()" aria-label="close modal"> 5089 <rebuy-icon name="x"></rebuy-icon> 5090 </div> 5091 5092 <div class="rebuy-timer" v-if="hasTimer()"> 5093 <p class="rebuy-timer-title" v-if="config.language.timer_title"> 5094 <span v-html="config.language.timer_title"></span> <span class="rebuy-timer-minutes" v-html="config.timer.duration_minutes"></span>:<span class="rebuy-timer-seconds" v-html="config.timer.duration_seconds"></span> 5095 </p> 5096 </div> 5097 5098 <h3 class="super-title" v-if="config.language.super_title != ''" v-html="config.language.super_title"></h3> 5099 5100 <h4 class="primary-title" v-if="config.language.title != ''" v-html="config.language.title"></h4> 5101 5102 <div class="description" v-if="config.language.description != ''" v-html="config.language.description"></div> 5103 5104 <div class="rebuy-product-grid" v-bind:class="layoutClasses" tabindex="0" role="list"> 5105 5106 <div 5107 v-for="(product, product_index) in products" 5108 v-bind:class="[ 5109 product.handle, 5110 'product-id-' + product.id, 5111 cartHasProduct(product) ? 'cart-has-item' : '', 5112 productTagClasses(product), 5113 hasSplideCarousel ? 'splide__slide' : '', 5114 ]" 5115 aria-label="product" 5116 class="rebuy-product-block" 5117 role="listitem" 5118 > 5119 5120 <div class="rebuy-product-media"> 5121 <a 5122 class="rebuy-product-image" 5123 tabindex="-1" 5124 v-bind:href="learnMoreURL(product)" 5125 v-bind:style="imageStyles" 5126 v-on:click="learnMore(product, $event);" 5127 v-bind:class="[hasLearnMore() ? 'clickable' : '']" 5128 rel="nofollow" 5129 > 5130 <img v-bind:loading="product_index > 1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)"> 5131 </a> 5132 5133 <!-- CUSTOM --> 5134 <div v-if="product?.tags?.includes('badge:')" class="rebuy-product-badge-container"> 5135 <div v-for="tag in product.tags.split(',').filter(tag => tag.includes('badge:'))" 5136 v-html="window.formatBadgeText(tag)" 5137 :style="{ backgroundColor: window?.theme?.badgeColors?.background || '#01656f', color: window?.theme?.badgeColors?.color || '#ffffff' }" 5138 v-bind:class="[ window.formatBadgeClass(tag) ]" 5139 class="rebuy-product-badge"></div> 5140 </div> 5141 <!-- END CUSTOM --> 5142 5143 </div> 5144 <div class="rebuy-product-info"> 5145 <h5 5146 class="rebuy-product-title" 5147 v-bind:class="[hasLearnMore() ? 'clickable' : '']"> 5148 <a 5149 v-bind:href="learnMoreURL(product)" 5150 class="rebuy-product-title-link" 5151 v-on:click="learnMore(product, $event);" 5152 v-html="product.title" 5153 v-bind:class="[hasLearnMore() ? 'clickable' : '']" 5154 v-bind:aria-label="'View ' + product.title" 5155 rel="nofollow" 5156 ></a> 5157 </h5> 5158 <div 5159 class="rebuy-product-vendor-container" 5160 v-if="showProductVendor(product.vendor)" 5161 > 5162 <a 5163 class="rebuy-product-vendor" 5164 v-bind:class="[hasEnabledProductVendorLink() ? 'clickable' : '']" 5165 v-html="product.vendor" 5166 v-bind:href="vendorURL(product.vendor)" 5167 v-bind:aria-label="'View ' + product.vendor + ' products'" 5168 rel="nofollow" 5169 ></a> 5170 </div> 5171 <div class="rebuy-variant-title" v-if="showVariantTitle(product)" v-html="product.selected_variant.title"></div> 5172 <div class="rebuy-product-review" v-if="hasProductReviews(product)" aria-label="product star rating">
5173 <span class="rebuy-star-rating"> 5174 <span 5175 v-if="product.reviews.star_rating" 5176 class="rebuy-star-rating-value sr-only" 5177 v-html="product.reviews.star_rating + ' stars out of 5 stars'" 5178 > 5179 </span> 5180 <span class="rebuy-star-rating-background"></span> 5181 <span class="rebuy-star-rating-foreground" v-bind:style="{ width: productReviewRatingPercentage(product) }"></span> 5182 </span> 5183 <span class="rebuy-review-count" v-html="productReviewCount(product)"></span> 5184 </div> 5185 5186 <div class="rebuy-product-price"> 5187 <div v-if="variantOnSale(product, product.selected_variant)"> 5188 <span class="rebuy-money sale"> 5189 <span class="sr-only">Sale price</span> 5190 <span tabindex="0" v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 5191 </span> 5192 <span class="rebuy-money compare-at"> 5193 <span class="sr-only">Original price</span> 5194 <span v-html="formatMoney(variantCompareAtPrice(product, product.selected_variant))"></span> 5195 </span> 5196 </div> 5197 <div v-if="!(variantOnSale(product, product.selected_variant))"> 5198 <span class="rebuy-money"> 5199 <span class="sr-only">Price</span> 5200 <span tabindex="0" v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 5201 </span> 5202 </div> 5203 </div> 5204 <div class="rebuy-product-description" v-if="showProductDescription(product)" v-html="text(product.body_html)"></div> 5205 </div> 5206 <div class="rebuy-product-options" v-if="showVariantSelect(product)"> 5207 <select 5208 title="Select product variant" 5209 :id="id + '-' + 'select' + '-' + product_index" 5210 :class="{ hide : config.view_options.variant_selector === 'buttons' }" 5211 class="rebuy-select" 5212 v-bind:aria-label="'variant of ' + product.title" 5213 v-model="product.selected_variant_id" 5214 v-on:change="selectVariant(product)"> 5215 <option 5216 v-for="variant in product.variants" 5217 class="rebuy-product-options__option" 5218 :class="{ 'rebuy-product-options__option--oos' : !variantAvailable(variant) }" 5219 v-bind:value="variant.id" 5220 :disabled="!variantAvailable(variant)" 5221 v-html="formatVariantOptionTitle(variant)"> 5222 </option> 5223 </select> 5224 5225 <div 5226 class="rebuy-product-options__button-swatches-container" 5227 :class="{ 'rebuy-style__hidden-block' : config.view_options.variant_selector === 'select' }" 5228 > 5229 <div 5230 v-for="option in product.options" 5231 :key="'option-' + product.id + '-' + option.name" 5232 class="rebuy-product-options__button-swatches rebuy-size-swatches" 5233 > 5234 <div 5235 v-for="(value, value_index) in filterOOSOptions(option, product)" 5236 :key="'value-' + product.id + '-' + option.name + '-' + value + '-' + value_index" 5237 > 5238 <div v-if="displayColorSwatches(option)" class="rebuy-product-options__button-swatch rebuy-color-swatch"> 5239 <input 5240 :name="id + '-color-' + product_index" 5241 :id="id + '-color-' + product_index + '-' + value + '-' + value_index" 5242 :checked="hasSwatchOptionSelected(product, value, value_index, 'color')" 5243 :value="value" 5244 type="radio" 5245 class="rebuy-color-input hide" 5246 v-on:change="selectVariantByOption(product, option.name, value)" 5247 :disabled="isDisabledOptionValue(product, option.name, value)" 5248 /> 5249 5250 <label 5251 :for="id + '-color-' + product_index + '-' + value + '-' + value_index" 5252 :style="getMerchantThemeColorAssetStyle(value)" 5253 :title="value" 5254 class="rebuy-color-label" 5255 :class="{ 'rebuy-product-options__button-swatch-label--disabled' : isDisabledOptionValue(product, option.name, value) }" 5256 > 5257 </label> 5258 </div> 5259 5260 <div v-if="!displayColorSwatches(option)" class="rebuy-product-options__button-swatch rebuy-size-swatch"> 5261 <input 5262 :name="id + '-' + option.name + '-' + product_index" 5263 :id="id + '-' + option.name + '-' + product_index + '-' + value" 5264 :checked="hasSwatchOptionSelected(product, value, value_index, option.name)" 5265 :value="value" 5266 type="radio" 5267 class="rebuy-size-input hide" 5268 v-on:change="selectVariantByOption(product, option.name, value)" 5269 :disabled="isDisabledOptionValue(product, option.name, value)" 5270 /> 5271 5272 <label 5273 :for="id + '-' + option.name + '-' + product_index + '-' + value" 5274 class="rebuy-size-label" 5275 :class="{ 'rebuy-product-options__button-swatch-label--disabled' : isDisabledOptionValue(product, option.name, value) }" 5276 > 5277 {{ value }} 5278 </label> 5279 </div> 5280 </div> 5281 </div> 5282 </div> 5283 </div> 5284 5285 <div class="rebuy-product-actions"> 5286 <div class="subscription-checkbox" v-if="showSubscriptionOptions(product)"> 5287 <label class="rebuy-checkbox-label"> 5288 <input 5289 class="checkbox-input rebuy-checkbox" 5290 v-model="product.subscription" 5291 v-on:change="toggleSubscription(product)" 5292 type="checkbox" 5293 :aria-label="upgradeToSubscriptionAriaLabel(product)" 5294 />
5295 <span class="checkbox-label" v-html="upgradeToSubscriptionLabel(product)"></span> 5296 </label> 5297 </div> 5298 5299 <div class="subscription-frequency" v-if="showSubscriptionFrequency(product)"> 5300 <select 5301 class="rebuy-select" 5302 aria-label="subscription frequency" 5303 v-model="product.subscription_frequency" 5304 v-on:change="updateSubscriptionFrequency(product)"> 5305 <option v-for="frequency in product.subscription_frequencies" v-bind:value="frequency">{{ frequencyLabel(frequency, product.subscription_interval) }}</option> 5306 </select> 5307 </div> 5308 5309 <div class="product-quantity" v-if="hasQuantityInputEnabled()"> 5310 <div class="rebuy-select-wrapper"> 5311 <label class="rebuy-label">Quantity</label> 5312 <select 5313 class="rebuy-select" 5314 aria-label="product quantity" 5315 v-model="product.quantity"> 5316 <option v-for="n in maxQuantityInputValue()" v-bind:value="n">{{ n }}</option> 5317 </select> 5318 </div> 5319 </div> 5320 5321 <button 5322 class="rebuy-button" 5323 v-bind:class="{ working: (product.status != 'ready' && product.status != 'selecting') }" 5324 v-bind:disabled="!(variantAvailable(product.selected_variant)) || (product.status != 'ready' && product.status != 'selecting')" 5325 v-bind:aria-label="buttonAriaLabel(product)" 5326 v-on:click="addToCart(product)" 5327 type="button"> 5328 <span v-html="buttonLabel(product)"></span> 5329 </button> 5330 </div> 5331 </div> 5332 5333 </div> 5334 5335 <div class="rebuy-modal-actions" v-if="showContinueButton()"> 5336 <button 5337 class="rebuy-button decline" 5338 v-on:click="hide()" 5339 type="button"> 5340 <span v-html="continueLabel()"></span> 5341 </button> 5342 </div> 5343 5344 <div class="powered-by-rebuy"> 5345 <a v-bind:href="'https://rebuyengine.com/?shop=' + config.shop.myshopify_domain" target="_blank" rel="noopener"> 5346 Powered by Rebuy 5347 </a> 5348 </div> 5349 5350 </div> 5351 5352 </div> 5353</div> 5354</script>
5354 5355 5356 <!-- Launch: Get product badge colors from theme settings -->
5356<script> 5357 window.theme.badgeColors = window?.theme?.badgeColors || { 5358 background: "#ab0000", 5359 color: "#ffffff" 5360 }; 5361 5362 window.formatBadgeClass = (badgeTag) => { 5363 return badgeTag.toLowerCase().trim().replaceAll(':', '-').replaceAll(' ', '-') 5364 } 5365</script>
5365 5366 5367<!-- Home Page widgets --> 5368 5369 <!-- Rebuy END --> 5370
5370<script type="text/javascript" src="https://cdn.attn.tv/homedics/dtag.js?source=app-embed" defer="defer"></script>
5370 5371<style> .h1,.h2,.h3,h1,h2,h3 {letter-spacing: 0.01em;} .product-tags .grid-product__tag--sale {display: none;} @media (max-width: 600px) {.rebuy-product-badge {font-size: 9px; } .product-tags .grid-product__tag {font-size: 9px !important; }} .dg-consent-banner {display: none !important;} .essential_countdown_annoucement_bar_wrapper {display: none !important;} @media screen and (max-width: 749px) {.hero__top-subtitle {font-size: 12px; }} </style> 5372<div id="shopify-block-AWFNNenlBR2N5d2ZuU__12657775114333427046" class="shopify-block shopify-app-block">
5372<script> 5373 5374 window.essentialCountdownTimerConfigs = [{"id":"cmr4toxyj001gy9r0jh3wfs27","name":"Timer 3 oils + Diffuser","title":"Buy Any 3 Oils. Get a FREE Diffuser.","customTitle":"","endDate":"2026-07-19T11:59:00.000Z","startDate":"2026-07-08T20:37:00.000Z","subheading":"Only applicable to 120ml scents. Ends July 19th, 2026","fixedMinutes":"120","repeat":false,"timerType":"toDate","type":"top-bar","published":true,"timerPlacement":"","showOnProducts":[],"showOnCollections":[],"legendCopyDays":"Days","legendCopyHours":"Hrs","legendCopyMins":"Mins","legendCopySecs":"Secs","CTAType":"button","CTALink":"https:\/\/www.homedics.com\/collections\/serenescent-wellness-series","closeButton":false,"buttonText":"Shop now!","updatedAt":"2026-07-08T20:37:20.797Z","createdAt":"2026-07-03T11:01:07.629Z","onceItEnds":"hide","style":{"font":"","image":"https:\/\/cache-essential-apps.cc\/image_backgrounds\/dark_pine_branches.jpg","position":"bottom-page","stickyBar":false,"timerSize":"22","titleSize":"18","borderSize":"1","buttonText":"Shop now!","legendSize":"12","timerColor":"#202223","titleColor":"#202223","borderColor":"#E3E3E3","gradientEnd":"#FFFFFF","legendColor":"#6d7175","singleColor":"#FFFFFF","gradientTurn":"90","timerBgColor":"#E1E2EE","gradientStart":"#DDDDDD","backgroundType":"singleBackground","buttonFontSize":"14","closeIconColor":"#6d7175","subheadingSize":"14","timerStyleType":"Plain","buttonFontColor":"#FFFFFF","subheadingColor":"#6D7175","imageOverlayColor":"#ffffff","timerBorderRadius":"8","buttonBorderRadius":"4","announcementBarStyle":"line-centered","buttonBackgroundColor":"#202223","imageOverlayColorRgba":"rgba(255, 255, 255, 0.20)","imageOverlayColorAlpha":"0.2"},"recurringDays":[],"startType":"today","endType":"never","productTags":[],"showInCountries":["US"],"locationType":"on-countries","translations":[],"showOnProductsInCollections":[],"excludeOnPages":["keywords-in-url","specific-urls"],"excludeOnSpecificUrls":["https:\/\/www.homedics.com\/pages\/build-your-starter-kit"],"excludeOnKeywordsInUrl":["\/pages\/build-your-starter-kit","\/pages\/subscription-bundle"],"excludeOnProducts":[],"excludeOnCollections":[],"duration":919298821},]; 5375 5376 const essentialCollectionId = null; 5377 window.essentialCountdownTimerMeta = { 5378 productData: null, 5379 productCollections: null, 5380 }; 5381 window.essentialProductId = null 5382 window.essentialProductTags = null 5383 window.essentialCollectionId = null 5384 window.essentialCountdownTimerPageTemplate = "customers\/login" 5385 5386</script>
5386 5387 5388 5389 5390<style> 5391 .essential-countdown-timer-img-reset { 5392 /* wipe common globals */ 5393 box-sizing: content-box; 5394 display: inline; 5395 width: auto; 5396 height: auto; 5397 max-width: none; 5398 max-height: none; 5399 margin: 0; 5400 padding: 0; 5401 border: none; 5402 border-radius: 0; 5403 box-shadow: none; 5404 background: none; 5405 object-fit: fill; 5406 object-position: 50% 50%; 5407 filter: none; 5408 opacity: 1; 5409 position: static; 5410 float: none; 5411 clear: none; 5412 vertical-align: baseline; 5413 transform: none; 5414 transition: none; 5415 animation: none; 5416 /* typography sometimes leaks via universal selectors */ 5417 font: inherit; 5418 line-height: normal; 5419 letter-spacing: normal; 5420 text-align: start; 5421 } 5422</style> 5423 5424 5425</div><div id="shopify-block-AVmMvSlRLZkZxelVSe__7594718713064568544" class="shopify-block shopify-app-block"> 5426 5427 5428 5429 5430 5431 5432 5433</div>
5433<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
5433 5434</body> 5435</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.