1<!doctype html> 2<html class="no-js" lang="en"> 3 <head> 4<!-- Start of Booster Apps Seo-0.1--><title>About Us</title><meta name="description" content="" />
4<script type="application/ld+json"> 5 { 6 "@context": "https://schema.org", 7 "@type": "WebSite", 8 "name": "Team Doctors", 9 "url": "https://teamdoctors.com", 10 "potentialAction": { 11 "@type": "SearchAction", 12 "query-input": "required name=query", 13 "target": "https://teamdoctors.com/search?q={query}" 14 } 15 } 16</script>
16<!-- end of Booster Apps SEO --> 17 18 <meta charset="utf-8"> 19 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 20 <meta name="viewport" content="width=device-width,initial-scale=1"> 21 <meta name="theme-color" content=""> 22 <link rel="canonical" href="https://teamdoctors.com/pages/about-us"> 23 24 <link rel="preconnect" href="https://cdn.shopify.com" crossorigin> 25 26 27
27<script src="//teamdoctors.com/cdn/shop/t/40/assets/main.js?v=21054179157073394981776237761" defer="defer" data-defer="true" data-country-list-function="block" data-country-list="" data-country-list-error="<h2>Unfortunately this store isn't available in your country.</h2>" data-animations-type="RfaaO6tc35zLKcDRUCltKqx5sXmgAgKrTClqXyYJb4nkV8I/xi1BjoFOTSDWYyy7mYpaz8tdnUIuo33R4J1YMCHzsxfvRzZwl1pYsCp5+ZuhAvfjIMeuWwVa/Z18t/GmA6L4Wm7s3a5VRGakCsshnlvnWEZ6+yhYLS7h7Kg2oDgY9rhPIOdVKLYbOPSC+DKe0ST+z2XaAEg/X/70GpBodknSyBSv780BkNSlsn53aBN6G01kcGetmqrBwLdIKuSbtvUEVz6c6I9vwn2Ni5mGBYObqP9R5Gu85tetSC3V4z2OWL6Xj1w2hcfcITSk615rP4GL8XEH3aej6YsmyAYMs0Ux/t9IFZPbwreRhb4sjhAhW67LoVTOYXnOPbm6/AXr6RmBPpj6l6/DgaBGR4ednszWnbI03fR+Kvp0cqFcsmNpCMxrl1X3oCjFizIw8yDE"></script>
27 28
28<script src="//teamdoctors.com/cdn/shop/t/40/assets/secondary.js?v=176493633728047177611776237761" defer="defer" data-defer="true" data-is-rtl="false"></script>
28 29 30 <link rel="preconnect" href="https://www.gstatic.com" crossorigin> 31 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin> 32 33 34 35 36 37<meta property="og:site_name" content="Team Doctors"> 38<meta property="og:url" content="https://teamdoctors.com/pages/about-us"> 39<meta property="og:title" content="About Us"> 40<meta property="og:type" content="website"> 41<meta property="og:description" content="Team Doctors"><meta property="og:image" content="http://teamdoctors.com/cdn/shop/files/Logo-New_410x_fada13d7-0da7-41d7-9573-fa61547df968.png?v=1597257974"> 42 <meta property="og:image:secure_url" content="https://teamdoctors.com/cdn/shop/files/Logo-New_410x_fada13d7-0da7-41d7-9573-fa61547df968.png?v=1597257974"> 43 <meta property="og:image:width" content="361"> 44 <meta property="og:image:height" content="335"><meta name="twitter:card" content="summary_large_image"> 45<meta name="twitter:title" content="About Us"> 46<meta name="twitter:description" content="Team Doctors"> 47 48 49
49<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
49<meta name="facebook-domain-verification" content="142j4qmogdzj1dkjsz3zlabn0hisul"> 50<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/29429629027/digital_wallets/dialog"> 51<meta id="in-context-paypal-metadata" data-shop-id="29429629027" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 52<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
52<script async="async" src="/checkouts/internal/preloads.js?locale=en-US"></script>
52 53<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
54<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&shop_id=29429629027" crossorigin="anonymous"></script>
vendor: 1 bytes, line 54
54
55<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":29429629027,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/29429629027","merchantName":"Team Doctors","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","discover","amex","elo","jcb"],"total":{"type":"pending","label":"Team Doctors","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 55
55
56<script id="shopify-features" type="application/json">{"accessToken":"91c8173e40e98bad2f5dd3b4f84d9d3f","betas":["rich-media-storefront-analytics"],"domain":"teamdoctors.com","predictiveSearch":true,"shopId":29429629027,"locale":"en"}</script>
vendor: 1 bytes, line 56
56
57<script>var Shopify = Shopify || {}; 58Shopify.shop = "team-doctors.myshopify.com"; 59Shopify.locale = "en"; 60Shopify.currency = {"active":"USD","rate":"1.0"}; 61Shopify.country = "US"; 62Shopify.theme = {"name":"New Theme - April 2026","id":151249617087,"schema_name":"Shrine PRO","schema_version":"1.3.0","theme_store_id":null,"role":"main"}; 63Shopify.theme.handle = "null"; 64Shopify.theme.style = {"id":null,"handle":null}; 65Shopify.cdnHost = "teamdoctors.com/cdn"; 66Shopify.routes = Shopify.routes || {}; 67Shopify.routes.root = "/"; 68Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 69Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 70Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 71Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 71
71
72<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 72
72
73<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 73
73
74<script> 75 window.ShopifyPay = window.ShopifyPay || {}; 76 window.ShopifyPay.apiHost = "shop.app\/pay"; 77 window.ShopifyPay.redirectState = null; 78</script>
vendor: 1 bytes, line 78
78
79<script> 80 window.Shopify = window.Shopify || {}; 81 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 82 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 83 window.Shopify.SignInWithShop.eligible = true; 84</script>
vendor: 1 bytes, line 84
84
85<script id="shop-js-analytics" type="application/json">{"pageType":"page"}</script>
vendor: 1 bytes, line 85
85
86<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 86
86
87<script type="module"> 88 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 89 90 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 91 92</script>
vendor: 1 bytes, line 92
92
93<script> 94 window.Shopify = window.Shopify || {}; 95 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 96 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"]}; 97</script>
vendor: 1 bytes, line 97
97
98<script>(function() { 99 var isLoaded = false; 100 function asyncLoad() { 101 if (isLoaded) return; 102 isLoaded = true; 103 var urls = ["\/\/code.tidio.co\/6yvsbhuqspjui9j40msodchnsmiq1drq.js?shop=team-doctors.myshopify.com","https:\/\/app-sp.webkul.com\/shopify-gift-onorder\/js\/wk_order_gift.js?shop=team-doctors.myshopify.com","https:\/\/cdn.recovermycart.com\/scripts\/keepcart\/CartJS.min.js?shop=team-doctors.myshopify.com\u0026shop=team-doctors.myshopify.com","https:\/\/trust.conversionbear.com\/script?app=trust_badge\u0026shop=team-doctors.myshopify.com","\/\/cdn.shopify.com\/proxy\/5f8b689599975ed14f23783e9129f74bff8576261edbb8781d9eb12c5a3ece1f\/api.goaffpro.com\/loader.js?shop=team-doctors.myshopify.com\u0026sp-cache-control=cHVibGljLCBtYXgtYWdlPTkwMA","https:\/\/teamdoctorsusa.com\/a\/ldc\/shopify.js?key=48ed0128d40cee10d6c0f542627a6fd207d05371\u0026shop=team-doctors.myshopify.com"]; 104 for (var i = 0; i < urls.length; i++) { 105 var s = document.createElement('script'); 106 s.type = 'text/javascript'; 107 s.async = true; 108 s.src = urls[i]; 109 var x = document.getElementsByTagName('script')[0]; 110 x.parentNode.insertBefore(s, x); 111 } 112 }; 113 if(window.attachEvent) { 114 window.attachEvent('onload', asyncLoad); 115 } else { 116 window.addEventListener('load', asyncLoad, false); 117 } 118})();</script>
vendor: 1 bytes, line 118
118
119<script id="__st">var __st={"a":29429629027,"offset":-18000,"reqid":"3597a89c-bc01-45a1-8be1-e5ca50c71f86-1791584183","pageurl":"teamdoctors.com\/pages\/about-us","s":"pages-49751621731","u":"97cf80157cb4","p":"page","rtyp":"page","rid":49751621731};</script>
vendor: 1 bytes, line 119
119
120<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 120
120
121<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 121
121
122<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//teamdoctors.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 122
122
123<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 = "//teamdoctors.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>
123<script crossorigin="anonymous" defer="defer" src="//teamdoctors.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-f0e26bdf.js?v=20250812"></script>
vendor: 1 bytes, line 123
123
124<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 124
124
125<script> 126 window.Shopify = window.Shopify || {}; 127 window.Shopify.MCP = window.Shopify.MCP || {}; 128 window.Shopify.MCP.enabled = true; 129 window.Shopify.MCP.shop = "team-doctors.myshopify.com"; 130 window.Shopify.MCP.mcpEndpoint = "https:\/\/teamdoctors.com\/api\/mcp"; 131 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?\"\nSet policy_types to also get the store's written policies (full text and URL).\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."},"policy_types":{"type":"array","items":{"type":"string","enum":["refund","shipping","privacy","terms_of_service","terms_of_sale","subscription","legal_notice","contact"]},"description":"Policy kinds to fetch, chosen from the user's question â e.g. [\"refund\"] for returns\/exchanges\/damaged items, [\"contact\"] for phone\/hours\/address. Include every kind the question touches. Omit it to get only FAQ answers."}},"required":["query"]}}]; 132</script>
vendor: 1 bytes, line 132
132
133<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("\/\/teamdoctors.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-f427de6a.js","sha256-ypGF+5vIq4Psw4WG7nsVtdd\/TCfsJWnrNuACdqLCElY=");})(); 134</script>
vendor: 1 bytes, line 134
134
135<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://teamdoctors.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 136</script>
vendor: 1 bytes, line 136
136
137<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 138 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); 139</script>
vendor: 1 bytes, line 139
139
140<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})}})); 141</script>
141 142<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://teamdoctors.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 143<style id="shopify-accelerated-checkout-cart"> 144 #shopify-buyer-consent { 145 margin-top: 1em; 146 display: inline-block; 147 width: 100%; 148} 149 150#shopify-buyer-consent.hidden { 151 display: none; 152} 153 154#shopify-subscription-policy-button { 155 background: none; 156 border: none; 157 padding: 0; 158 text-decoration: underline; 159 font-size: inherit; 160 cursor: pointer; 161} 162 163#shopify-subscription-policy-button::before { 164 box-shadow: none; 165} 166 167 </style>
168<script id="sections-script" data-sections="header,footer" defer="defer" src="//teamdoctors.com/cdn/shop/t/40/compiled_assets/scripts.js?v=105813173562866673361776237783"></script>
vendor: 1 bytes, line 168
168
169<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
169 170 171 172 <style data-shopify> 173 174 @font-face { 175 font-family: Poppins; 176 font-weight: 400; 177 font-style: normal; 178 font-display: swap; 179 src: url("//teamdoctors.com/cdn/fonts/poppins/poppins_n4.0ba78fa5af9b0e1a374041b3ceaadf0a43b41362.woff2") format("woff2"), 180 url("//teamdoctors.com/cdn/fonts/poppins/poppins_n4.214741a72ff2596839fc9760ee7a770386cf16ca.woff") format("woff"); 181} 182 183 @font-face { 184 font-family: Poppins; 185 font-weight: 700; 186 font-style: normal; 187 font-display: swap; 188 src: url("//teamdoctors.com/cdn/fonts/poppins/poppins_n7.56758dcf284489feb014a026f3727f2f20a54626.woff2") format("woff2"), 189 url("//teamdoctors.com/cdn/fonts/poppins/poppins_n7.f34f55d9b3d3205d2cd6f64955ff4b36f0cfd8da.woff") format("woff"); 190} 191 192 @font-face { 193 font-family: Poppins; 194 font-weight: 400; 195 font-style: italic; 196 font-display: swap; 197 src: url("//teamdoctors.com/cdn/fonts/poppins/poppins_i4.846ad1e22474f856bd6b81ba4585a60799a9f5d2.woff2") format("woff2"), 198 url("//teamdoctors.com/cdn/fonts/poppins/poppins_i4.56b43284e8b52fc64c1fd271f289a39e8477e9ec.woff") format("woff"); 199} 200 201 @font-face { 202 font-family: Poppins; 203 font-weight: 700; 204 font-style: italic; 205 font-display: swap; 206 src: url("//teamdoctors.com/cdn/fonts/poppins/poppins_i7.42fd71da11e9d101e1e6c7932199f925f9eea42d.woff2") format("woff2"), 207 url("//teamdoctors.com/cdn/fonts/poppins/poppins_i7.ec8499dbd7616004e21155106d13837fff4cf556.woff") format("woff"); 208} 209 210 211 :root { 212 --font-body-family: Poppins, sans-serif; 213 --font-body-style: normal; 214 --font-body-weight: 400; 215 --font-body-weight-bold: 700; 216 } 217 218 219 220 @font-face { 221 font-family: Poppins; 222 font-weight: 700; 223 font-style: normal; 224 font-display: swap; 225 src: url("//teamdoctors.com/cdn/fonts/poppins/poppins_n7.56758dcf284489feb014a026f3727f2f20a54626.woff2") format("woff2"), 226 url("//teamdoctors.com/cdn/fonts/poppins/poppins_n7.f34f55d9b3d3205d2cd6f64955ff4b36f0cfd8da.woff") format("woff"); 227} 228 229 :root { 230 --font-heading-family: Poppins, sans-serif; 231 --font-heading-style: normal; 232 --font-heading-weight: 700; 233 } 234 235 236 :root { 237 --font-body-scale: 1.0; 238 --font-heading-scale: 1.3; 239 --font-heading-line-height: 0.3; 240 --font-heading-letter-spacing: 0.06rem; 241 242 --color-base-text: 18, 18, 18; 243 --color-shadow: 18, 18, 18; 244 --color-base-background-1: 255, 255, 255; 245 --color-base-background-2: 243, 243, 243; 246 --color-base-solid-button-labels: 255, 255, 255; 247 --color-base-outline-button-labels: 0, 17, 49; 248 --color-base-accent-1: 0, 17, 49; 249 --color-base-accent-2: 20, 90, 125; 250 --payment-terms-background-color: #ffffff; 251 252 --gradient-base-background-1: #ffffff; 253 --gradient-base-background-2: #f3f3f3; 254 --gradient-base-accent-1: #001131; 255 --gradient-base-accent-2: linear-gradient(54deg, rgba(47, 146, 207, 1) 14%, rgba(0, 17, 49, 1) 85%); 256 257 --media-padding: px; 258 --media-border-opacity: 0.1; 259 --media-border-width: 0px; 260 --media-radius: 12px; 261 --media-shadow-opacity: 0.0; 262 --media-shadow-horizontal-offset: 0px; 263 --media-shadow-vertical-offset: 0px; 264 --media-shadow-blur-radius: 20px; 265 --media-shadow-visible: 0; 266 267 --page-width: 160rem; 268 --page-width-margin: 0rem; 269 270 --product-card-image-padding: 0.0rem; 271 --product-card-corner-radius: 1.2rem; 272 --product-card-text-alignment: center; 273 --product-card-border-width: 0.0rem; 274 --product-card-border-opacity: 0.1; 275 --product-card-shadow-opacity: 0.1; 276 --product-card-shadow-visible: 1; 277 --product-card-shadow-horizontal-offset: 0.2rem; 278 --product-card-shadow-vertical-offset: 0.6rem; 279 --product-card-shadow-blur-radius: 1.5rem; 280 281 --collection-card-image-padding: 0.0rem; 282 --collection-card-corner-radius: 1.2rem; 283 --collection-card-text-alignment: center; 284 --collection-card-border-width: 0.0rem; 285 --collection-card-border-opacity: 0.1; 286 --collection-card-shadow-opacity: 0.05; 287 --collection-card-shadow-visible: 1; 288 --collection-card-shadow-horizontal-offset: 0.2rem; 289 --collection-card-shadow-vertical-offset: 0.6rem; 290 --collection-card-shadow-blur-radius: 1.5rem; 291 292 --blog-card-image-padding: 0.0rem; 293 --blog-card-corner-radius: 1.2rem; 294 --blog-card-text-alignment: center; 295 --blog-card-border-width: 0.0rem; 296 --blog-card-border-opacity: 0.1; 297 --blog-card-shadow-opacity: 0.05; 298 --blog-card-shadow-visible: 1; 299 --blog-card-shadow-horizontal-offset: 1.0rem; 300 --blog-card-shadow-vertical-offset: 1.0rem; 301 --blog-card-shadow-blur-radius: 3.5rem; 302 303 --badge-corner-radius: 0.6rem; 304 305 --slider-arrow-size: 3.0rem; 306 --slider-arrow-border-radius: 50.0%; 307 --slider-arrow-icon-size: 0.6em; 308 --pagination-dot-width: 6px; 309 --pagination-dot-height: 6px; 310 --pagination-dot-active-scale: 1.5; 311 --pagination-dot-spacing: 12px; 312 --pagination-dot-radius: 5px; 313 314 --popup-border-width: 1px; 315 --popup-border-opacity: 0.1; 316 --popup-corner-radius: 14px; 317 --popup-shadow-opacity: 0.1; 318 --popup-shadow-horizontal-offset: 10px; 319 --popup-shadow-vertical-offset: 12px; 320 --popup-shadow-blur-radius: 20px; 321 322 --drawer-border-width: 1px; 323 --drawer-border-opacity: 0.1; 324 --drawer-shadow-opacity: 0.0; 325 --drawer-shadow-horizontal-offset: 0px; 326 --drawer-shadow-vertical-offset: 4px; 327 --drawer-shadow-blur-radius: 5px; 328 329 --spacing-sections-desktop: 0px; 330 --spacing-sections-mobile: 0px; 331 332 --grid-desktop-vertical-spacing: 40px; 333 --grid-desktop-horizontal-spacing: 40px; 334 --grid-mobile-vertical-spacing: 20px; 335 --grid-mobile-horizontal-spacing: 20px; 336 337 --text-boxes-border-opacity: 0.1; 338 --text-boxes-border-width: 0px; 339 --text-boxes-radius: 24px; 340 --text-boxes-shadow-opacity: 0.0; 341 --text-boxes-shadow-visible: 0; 342 --text-boxes-shadow-horizontal-offset: 10px; 343 --text-boxes-shadow-vertical-offset: 12px; 344 --text-boxes-shadow-blur-radius: 20px; 345 346 --buttons-radius: 6px; 347 --buttons-radius-outset: 8px; 348 --buttons-border-width: 2px; 349 --buttons-border-opacity: 1.0; 350 --buttons-shadow-opacity: 0.0; 351 --buttons-shadow-visible: 0; 352 --buttons-shadow-horizontal-offset: 0px; 353 --buttons-shadow-vertical-offset: 4px; 354 --buttons-shadow-blur-radius: 5px; 355 --buttons-border-offset: 0.3px; 356 357 --swatches-radius: 50.0%; 358 --swatches-border-opacity: 0.0; 359 --swatches-selected-border-opacity: 0.5; 360 361 --pickers-overlay-opacity: 0.08; 362 --pickers-radius: 8px; 363 --pickers-small-radius: 3.2px; 364 --pickers-border-width: 1px; 365 --pickers-border-color: var(--color-base-accent-1); 366 --pickers-border-opacity: 0.2; 367 --pickers-shadow-opacity: 0.0; 368 --pickers-shadow-horizontal-offset: 0px; 369 --pickers-margin-offset: 0px; 370 --pickers-shadow-vertical-offset: 0px; 371 --pickers-shadow-blur-radius: 0px; 372 --pickers-radius-outset: 9px; 373 --pickers-hover-overlay-opacity: 0.1; 374 --pickers-hover-border-opacity: 0.55; 375 376 --quantity-overlay-opacity: 0.06; 377 --quantity-radius: 8px; 378 --quantity-small-radius: 3.2px; 379 --quantity-border-width: 1px; 380 --quantity-border-color: var(--color-base-accent-1); 381 --quantity-border-opacity: 0.2; 382 --quantity-shadow-opacity: 0.0; 383 --quantity-shadow-horizontal-offset: 0px; 384 --quantity-margin-offset: 0px; 385 --quantity-shadow-vertical-offset: 0px; 386 --quantity-shadow-blur-radius: 0px; 387 --quantity-radius-outset: 9px; 388 --quantity-hover-overlay-opacity: 0.06; 389 --quantity-hover-border-opacity: 0.15; 390 391 --inputs-radius: 6px; 392 --inputs-border-width: 1px; 393 --inputs-border-opacity: 0.6; 394 --inputs-shadow-opacity: 0.0; 395 --inputs-shadow-horizontal-offset: 0px; 396 --inputs-margin-offset: 0px; 397 --inputs-shadow-vertical-offset: 4px; 398 --inputs-shadow-blur-radius: 5px; 399 --inputs-radius-outset: 7px; 400 --inputs-hover-border-opacity: 1; 401 402 --variant-pills-inactive-overlay-opacity: 0.0; 403 --variant-pills-text-size: 1.4rem; 404 --variant-pills-padding-y: 1.0rem; 405 --variant-pills-padding-x: 2.0rem; 406 --variant-pills-radius: 40px; 407 --variant-pills-border-width: 1px; 408 --variant-pills-border-opacity: 0.55; 409 --variant-pills-shadow-opacity: 0.0; 410 --variant-pills-shadow-horizontal-offset: 0px; 411 --variant-pills-shadow-vertical-offset: 4px; 412 --variant-pills-shadow-blur-radius: 5px; 413 } 414 415 *, 416 *::before, 417 *::after { 418 box-sizing: inherit; 419 } 420 421 html { 422 box-sizing: border-box; 423 font-size: calc(var(--font-body-scale) * 62.5%); 424 height: 100%; 425 } 426 427 body { 428 display: grid; 429 grid-template-rows: auto auto 1fr auto;grid-template-rows: auto auto auto 1fr auto;grid-template-columns: 100%; 430 min-height: 100%; 431 margin: 0; 432 overflow-x: hidden; 433 font-size: 1.5rem; 434 letter-spacing: 0.06em; 435 line-height: calc(1 + 0.8 / var(--font-body-scale)); 436 font-family: var(--font-body-family); 437 font-style: var(--font-body-style); 438 font-weight: var(--font-body-weight); 439 440 } 441 442 443 .animate-section { 444 --animation-duration: 650ms; 445 --init-delay: 150ms; 446 --child-delay: 150ms; 447 } 448 .animate-section.animate--hidden .animate-item { 449 opacity: 0; 450 filter: blur(1px); 451 transform: translate(0%, 0%) scale(100%); 452 } 453 .animate-section.animate--shown .animate-item { 454 opacity: 1; 455 filter: blur(0); 456 transform: none; 457 transition: opacity var(--animation-duration) var(--init-delay), 458 filter var(--animation-duration) var(--init-delay),transform var(--animation-duration) var(--init-delay); 459 } 460 .animate-section.animate--shown .animate-item.animate-item--child { 461 transition-delay: calc( 462 var(--init-delay) + (var(--child-delay) * var(--index)) 463 ); 464 } 465 466 467 @media screen and (min-width: 750px) { 468 body { 469 font-size: 1.6rem; 470 } 471 } 472 473 /* fallback */ 474 @font-face { 475 font-family: 'Material Symbols Outlined';
476 src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v141/kJF4BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzBwG-RpA6RzaxHMPdY40KH8nGzv3fzfVJU22ZZLsYEpzC_1qmr5Y0.woff2) format('woff2'); 477 font-style: normal; 478 font-weight: 300; 479 font-display: block; 480 } 481 482 .material-symbols-outlined { 483 font-family: 'Material Symbols Outlined'; 484 font-weight: normal; 485 font-style: normal; 486 font-size: 24px; 487 line-height: 1; 488 letter-spacing: normal; 489 text-transform: none; 490 display: inline-block; 491 white-space: nowrap; 492 word-wrap: normal; 493 direction: ltr; 494 -webkit-font-feature-settings: 'liga'; 495 -webkit-font-smoothing: antialiased; 496 max-width: 1em; 497 overflow: hidden; 498 flex-shrink: 0; 499 font-variation-settings: 500 'FILL' 0, 501 'wght' 300, 502 'GRAD' 0, 503 'opsz' 48; 504 vertical-align: bottom; 505 } 506 .material-symbols-outlined.filled { 507 font-variation-settings: 508 'FILL' 1 509 } 510 511 </style> 512 513 <noscript> 514 <style> 515 .animate-section.animate--hidden .animate-item { 516 opacity: 1; 517 filter: blur(0); 518 transform: none; 519 } 520 </style> 521 </noscript> 522 523 <link href="//teamdoctors.com/cdn/shop/t/40/assets/base.css?v=137280531906220013711782782749" rel="stylesheet" type="text/css" media="all" /> 524 525 526 <link rel="preload" as="font" href="//teamdoctors.com/cdn/fonts/poppins/poppins_n4.0ba78fa5af9b0e1a374041b3ceaadf0a43b41362.woff2" type="font/woff2" crossorigin> 527 528 529 <link rel="preload" as="font" href="//teamdoctors.com/cdn/fonts/poppins/poppins_n7.56758dcf284489feb014a026f3727f2f20a54626.woff2" type="font/woff2" crossorigin> 530 531<link 532 rel="stylesheet" 533 href="//teamdoctors.com/cdn/shop/t/40/assets/component-predictive-search.css?v=76514217051199997821776237761" 534 media="print" 535 onload="this.media='all'" 536 >
536<script> 537 document.documentElement.className = document.documentElement.className.replace('no-js', 'js'); 538 if (Shopify.designMode) { 539 document.documentElement.classList.add('shopify-design-mode'); 540 } 541 </script>
541 542
542<script src="https://cdn.shopify.com/extensions/c1eb4680-ad4e-49c3-898d-493ebb06e626/affirm-pay-over-time-messaging-9/assets/affirm-cart-drawer-embed-handler.js" type="text/javascript" defer="defer"></script>
542 543<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
544<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: 29429629027,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "page"};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 544
544
545<script> 546 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 547</script>
vendor: 1 bytes, line 547
547
548<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}
548).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: 29429629027,storefrontBaseUrl: "https://teamdoctors.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://teamdoctors.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab"],webPixelsConfigList: [{"id":"2308309183","configuration":"{\"publicKey\":\"48ed0128d40cee10d6c0f542627a6fd207d05371\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"acde9d0a95393596ea6382e22c68ec37","type":"APP","apiClientId":158835,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2279702719","configuration":"{\"mailchimp_store_id\":\"store_pzazo2nlbxy4foz3rlgr\", \"mailchimp_user_id\":\"18857947\",\"mailchimp_list_id\":\"d36e765f97\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"e357a49eadeb6216a959d63fa3fb8f55","type":"APP","apiClientId":2585307,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":[]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2002845887","configuration":"{\"webPixelName\":\"Judge.me\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"8acc938b1a30dc7624e304493ca567d7","type":"APP","apiClientId":683015,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
548,"dataSharingState":"unrestricted"},{"id":"1849852095","configuration":"{\"pixel_id\":\"1787360351945078\",\"pixel_type\":\"facebook_pixel\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"bd2f978c17a94bbb8a74d43de2165dc5","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":"978583743","configuration":"{\"shop\":\"team-doctors.myshopify.com\",\"cookie_duration\":\"604800\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"a2e7513c3708f34b1f617d7ce88f9697","type":"APP","apiClientId":2744533,"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":"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":"Team Doctors","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"team-doctors.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/teamdoctors.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"8455539065023","handle":"complete-recovery-solution-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45703649165503","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7253705130175","handle":"vibeassage-pro","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"41663358501055","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8342973219007","handle":"vibeassage-complete-system","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45464249041087","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8342972334271","handle":"vibeassage-relief-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45451957272767","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8342972760255","handle":"vibeassage-performance-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45464251433151","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8342966534335","handle":"vibeassage-core-system","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45464258838719","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8394187342015","handle":"biomemetic-applicator-pads-full-set","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45467248230591","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8433935974591","handle":"relief-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45638352502975","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8433936007359","handle":"performance-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45638352535743","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8358127599807","handle":"biomimetic-comfort-relief-pad","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45310135271615","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8358145917119","handle":"biomimetic-core-recovery-pad","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"453101
54855423935","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8358149750975","handle":"biomimetic-peak-performance-pad","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45310160863423","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8402094031039","handle":"vibeassage®-relief-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45495352852671","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7475904184511","handle":"vibeassage-pro-replacement-cables","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42314400661695","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://teamdoctors.com/cdn","7ec887c8w14f9f074p854094e1m1370c602",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"151249617087","themePublished":"true","eventMetadataId":"2be38574-eda8-40e7-9c03-181b71446dab","pageType":"page","resourceId":"49751621731","shopId":"29429629027","storefrontBaseUrl":"https:\/\/teamdoctors.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\"]","isMerchantRequest":"false","hashVersion":"7ec887c8w14f9f074p854094e1m1370c602","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
548<script> 549 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 550 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 551 window.ShopifyAnalytics.meta.currency = 'USD'; 552 var meta = {"page":{"pageType":"page","resourceType":"page","resourceId":49751621731,"requestId":"3597a89c-bc01-45a1-8be1-e5ca50c71f86-1791584183"}}; 553 for (var attr in meta) { 554 window.ShopifyAnalytics.meta[attr] = meta[attr]; 555 } 556</script>
vendor: 1 bytes, line 556
556
557<script class="analytics"> 558 (function () { 559 var customDocumentWrite = function(content) { 560 var jquery = null; 561 562 if (window.jQuery) { 563 jquery = window.jQuery; 564 } else if (window.Checkout && window.Checkout.$) { 565 jquery = window.Checkout.$; 566 } 567 568 if (jquery) { 569 jquery('body').append(content); 570 } 571 }; 572 573 var hasLoggedConversion = function(token) { 574 if (token) { 575 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 576 } 577 return false; 578 } 579 580 var setCookieIfConversion = function(token) { 581 if (token) { 582 var twoMonthsFromNow = new Date(Date.now()); 583 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 584 585 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 586 } 587 } 588 589 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 590 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 591 if (trekkie.integrations) { 592 return; 593 } 594 trekkie.methods = [ 595 'identify', 596 'page', 597 'ready', 598 'track', 599 'trackForm', 600 'trackLink' 601 ]; 602 trekkie.factory = function(method) { 603 return function() { 604 var args = Array.prototype.slice.call(arguments); 605 args.unshift(method); 606 trekkie.push(args); 607 if (method == 'track' || method == 'page') { 608 var pageUrl; 609 try { 610 pageUrl = window.location.href; 611 } catch (e) {} 612 var pageReferrer; 613 try { 614 pageReferrer = document.referrer; 615 } catch (e) {} 616 try { 617 if (window.__TREKKIE_SHIM_QUEUE == null) { 618 window.__TREKKIE_SHIM_QUEUE = []; 619 } 620 window.__TREKKIE_SHIM_QUEUE.push({ 621 from: 'trekkie-stub', 622 method: method, 623 args: args.slice(1), 624 pageContext: { 625 url: pageUrl, 626 referrer: pageReferrer 627 } 628 }); 629 } catch (e) { 630 // no-op 631 } 632 } 633 return trekkie; 634 }; 635 }; 636 for (var i = 0; i < trekkie.methods.length; i++) { 637 var key = trekkie.methods[i]; 638 trekkie[key] = trekkie.factory(key); 639 } 640 trekkie.load = function(config) { 641 trekkie.config = config || {}; 642 trekkie.config.initialDocumentCookie = document.cookie; 643 var first = document.getElementsByTagName('script')[0]; 644var script = document.createElement('script'); 645script.type = 'text/javascript'; 646script.onerror = function(e) { 647 var scriptFallback = document.createElement('script'); 648 scriptFallback.type = 'text/javascript'; 649 scriptFallback.onerror = function(error) { 650 var Monorail = { 651 produce: function produce(monorailDomain, schemaId, payload) { 652 var currentMs = new Date().getTime(); 653 var event = { 654 schema_id: schemaId, 655 payload: payload, 656 metadata: { 657 event_created_at_ms: currentMs, 658 event_sent_at_ms: currentMs 659 } 660 }; 661 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 662 }, 663 sendRequest: function sendRequest(endpointUrl, payload) { 664 // Try the sendBeacon API 665 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 666 var blobData = new window.Blob([payload], { 667 type: 'text/plain' 668 }); 669 670 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 671 return true; 672 } // sendBeacon was not successful 673 674 } // XHR beacon 675 676 var xhr = new XMLHttpRequest(); 677 678 try { 679 xhr.open('POST', endpointUrl); 680 xhr.setRequestHeader('Content-Type', 'text/plain'); 681 xhr.send(payload); 682 } catch (e) { 683 console.log(e); 684 } 685 686 return false; 687 }, 688 isIos12: function isIos12() { 689 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 690 } 691 }; 692 Monorail.produce('monorail-edge.shopifysvc.com', 693 'trekkie_storefront_load_errors/1.1', 694 {shop_id: 29429629027, 695 theme_id: 151249617087, 696 app_name: "storefront", 697 context_url: window.location.href,
698 source_url: "//teamdoctors.com/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js"}); 699 700 }; 701 scriptFallback.async = true; 702 scriptFallback.src = '//teamdoctors.com/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js'; 703 first.parentNode.insertBefore(scriptFallback, first); 704}; 705script.async = true; 706script.src = '//teamdoctors.com/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js'; 707first.parentNode.insertBefore(script, first); 708 709 }; 710 trekkie.load( 711 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":29429629027,"isMerchantRequest":null,"themeId":151249617087,"themeCityHash":"412120198059539800","contentLanguage":"en","currency":"USD","eventMetadataId":"2be38574-eda8-40e7-9c03-181b71446dab"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 712 ); 713 714 var loaded = false; 715 trekkie.ready(function() { 716 if (loaded) return; 717 loaded = true; 718 719 window.ShopifyAnalytics.lib = window.trekkie; 720 721 var originalDocumentWrite = document.write; 722 document.write = customDocumentWrite; 723 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 724 document.write = originalDocumentWrite; 725 726 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 727 var token = match? match[1]: undefined; 728 if (!hasLoggedConversion(token)) { 729 setCookieIfConversion(token); 730 731 } 732 }); 733 734 window.ShopifyAnalytics.lib.page(null,{"pageType":"page","resourceType":"page","resourceId":49751621731,"requestId":"3597a89c-bc01-45a1-8be1-e5ca50c71f86-1791584183","shopifyEmitted":true}); 735 736 var eventsListenerScript = document.createElement('script'); 737 eventsListenerScript.async = true; 738 eventsListenerScript.src = "//teamdoctors.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 739 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 740})();</script>
vendor: 1 bytes, line 740
740
741<script 742 defer 743 src="https://teamdoctors.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.10.1.min.js" 744 data-application="storefront-renderer" 745 data-shop-id="29429629027" 746 data-render-region="gcp-us-central1" 747 data-page-type="page" 748 data-theme-instance-id="151249617087" 749 data-theme-name="Shrine PRO" 750 data-theme-version="1.3.0" 751 data-monorail-region="shop_domain" 752 data-resource-timing-sampling-rate="10" 753 data-shs="true" 754 data-shs-beacon="true" 755 data-shs-export-with-fetch="true" 756 data-shs-logs-sample-rate="1" 757 data-shs-beacon-endpoint="https://teamdoctors.com/api/collect" 758></script>
758 759<meta name="shopify-y" content="dff0f91a-5621-40d2-810f-eddd3f24775e" data-expiration="1823141783000"><meta name="shopify-s" content="4aa1ca26-b881-436c-a3a8-091d66df67d5" data-expiration="1791585983000"> 760</head> 761 762 <body class="gradient link-btns--arrow action-btns--center"> 763 <a class="skip-to-content-link button visually-hidden" href="#MainContent"> 764 Skip to content 765 </a> 766 767 <!-- BEGIN sections: header-group --> 768<div id="shopify-section-sections--20359605911743__fe1c8c67-b84c-4466-a515-70df3134c1c0" class="shopify-section shopify-section-group-header-group announcement-bar-section"><style data-shopify>.section-sections--20359605911743__fe1c8c67-b84c-4466-a515-70df3134c1c0-padding { 769 padding-top: 12px; 770 padding-bottom: 12px; 771 } 772 773 @media screen and (min-width: 750px) { 774 .section-sections--20359605911743__fe1c8c67-b84c-4466-a515-70df3134c1c0-padding { 775 padding-top: 16px; 776 padding-bottom: 16px; 777 } 778 } 779 780 .announcement-bar-sections--20359605911743__fe1c8c67-b84c-4466-a515-70df3134c1c0.color-custom { 781 --color-background: 221, 29, 29; 782 --gradient-background: #dd1d1d; 783 --color-foreground: 255, 255, 255; 784 }</style> 785 786 787 <div 788 class="announcement-bar announcement-bar-sections--20359605911743__fe1c8c67-b84c-4466-a515-70df3134c1c0 section-sections--20359605911743__fe1c8c67-b84c-4466-a515-70df3134c1c0-padding color-accent-1 gradient" 789 role="region" 790 style="--columns-desktop: 1;--columns-mobile: 1;--gap-desktop:2.8rem;--gap-mobile:1.6rem;" 791 > 792 <div class="page-width"> 793 794 <splide-component 795 data-type='loop' 796 data-autoplay='false' 797 data-autoplay-speed='3' 798 data-slides-desktop="1" 799 data-slides-mobile="1" 800 data-gap-desktop='28' 801 data-gap-mobile='16' 802 data-arrows='false' 803 data-pagination='false' 804 805 data-destroy-desktop="true" 806 807 > 808 809 <div class='splide splide--vertically-centered splide--precalc-width-mobile'> 810 <div class="splide__track"> 811 <ul 812 class="splide__list announcement-bar__desktop-grid" 813 data-columns-desktop="1" 814 data-columns-mobile="1" 815 > 816 817 <li class="splide__slide"> 818 <div class="splide__slide__container"> 819 <div 820 class="announcement-bar__item announcement-bar__item-center" 821 style=" 822 --mobile-text-size: 1.4rem; 823 --desktop-text-size: 1.5rem; 824 --mobile-icon-size: 2.0rem; 825 --desktop-icon-size: 2.6rem; 826 " 827 828 > 829<p class="announcement-bar__message announcement-bar__message--mobile-horizontal announcement-bar__message--desktop-horizontal"> 830 831 <span class="material-icon material-symbols-outlined"> 832 storefront 833</span> 834 835 <span>Welcome to our store</span> 836 </p></div> 837 </div> 838 </li> 839 840</ul> 841 </div> 842 </div> 843 844 </splide-component> 845 846 </div> 847 </div> 848 849
850<script> 851 function copyCode(e) { 852 const btn = e.currentTarget; 853 navigator.clipboard.writeText(btn.dataset.code.trim()); 854 btn.classList.add('success'); 855 setTimeout(() => { 856 btn.classList.remove('success') 857 }, 2000) 858 } 859</script>
859 860 861 862</div><div id="shopify-section-sections--20359605911743__header" class="shopify-section shopify-section-group-header-group section-header"><style> 863 header-drawer { 864 justify-self: start; 865 margin-left: -1.2rem; 866 } 867 868 .header__heading-link.media { 869 --media-radius: 0; 870 width: 200px; 871 max-width: 200px; 872 } 873 874 .header__heading-link.media img { 875 object-fit: contain; 876 } 877 878 .header__heading-link.media .header__heading-logo--secondary { 879 display: none; 880 } 881 882 @media screen and (max-width: 749px) { 883 .header__heading-link.media { 884 width: 130px; 885 max-width: 130px; 886 } 887 } 888 889 890 891 @media screen and (min-width: 990px) { 892 header-drawer { 893 display: none; 894 } 895 } 896 897 898 .menu-drawer-container { 899 display: flex; 900 } 901 902 .list-menu { 903 list-style: none; 904 padding: 0; 905 margin: 0; 906 } 907 908 .list-menu--inline { 909 display: inline-flex; 910 flex-wrap: wrap; 911 } 912 913 summary.list-menu__item { 914 padding-right: 2.7rem; 915 } 916 917 .list-menu__item { 918 display: flex; 919 align-items: center; 920 line-height: calc(1 + 0.3 / var(--font-body-scale)); 921 } 922 923 .list-menu__item--link { 924 text-decoration: none; 925 padding-bottom: 1rem; 926 padding-top: 1rem; 927 line-height: calc(1 + 0.8 / var(--font-body-scale)); 928 } 929 930 @media screen and (min-width: 750px) { 931 .list-menu__item--link { 932 padding-bottom: 0.5rem; 933 padding-top: 0.5rem; 934 } 935 } 936</style><style data-shopify>.header { 937 padding-top: 10px; 938 padding-bottom: 16px; 939 } 940 941 .section-header { 942 position: sticky; /* This is for fixing a Safari z-index issue. PR #2147 */ 943 margin-bottom: 0px; 944 } 945 946 @media screen and (min-width: 750px) { 947 .section-header { 948 margin-bottom: 0px; 949 } 950 } 951 952 @media screen and (min-width: 990px) { 953 .header { 954 padding-top: 20px; 955 padding-bottom: 32px; 956 } 957 }</style> 958 959<svg xmlns="http://www.w3.org/2000/svg" class="hidden"> 960 <symbol id="icon-search" viewbox="0 0 18 19" fill="none"> 961 <path fill-rule="evenodd" clip-rule="evenodd" d="M11.03 11.68A5.784 5.784 0 112.85 3.5a5.784 5.784 0 018.18 8.18zm.26 1.12a6.78 6.78 0 11.72-.7l5.4 5.4a.5.5 0 11-.71.7l-5.41-5.4z" fill="currentColor"/> 962 </symbol> 963 964 <symbol id="icon-reset" class="icon icon-close" fill="none" viewBox="0 0 18 18" stroke="currentColor"> 965 <circle r="8.5" cy="9" cx="9" stroke-opacity="0.2"/> 966 <path d="M6.82972 6.82915L1.17193 1.17097" stroke-linecap="round" stroke-linejoin="round" transform="translate(5 5)"/> 967 <path d="M1.22896 6.88502L6.77288 1.11523" stroke-linecap="round" stroke-linejoin="round" transform="translate(5 5)"/> 968 </symbol> 969 970 <symbol id="icon-close" class="icon icon-close" fill="none" viewBox="0 0 18 17"> 971 <path d="M.865 15.978a.5.5 0 00.707.707l7.433-7.431 7.579 7.282a.501.501 0 00.846-.37.5.5 0 00-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 10-.707-.708L8.991 7.853 1.413.573a.5.5 0 10-.693.72l7.563 7.268-7.418 7.417z" fill="currentColor"> 972 </symbol> 973</svg> 974<sticky-header data-sticky-type="on-scroll-up" class="header-wrapper color-background-1 gradient header-wrapper--border-bottom"> 975 <header class="header header--middle-center header--mobile-center page-width header--has-menu"><header-drawer data-breakpoint="tablet" data-desktop-type="dropdown" data-drawer="RfaaO6tc35zLKcDRUCltKqx5sXmgAgKrTClqXyYJb4nkV8I/xi1BjoFOTSDWYyy7mYpaz8tdnUIuo33R4J1YMCHzsxfvRzZwl1pYsCp5+ZuhAvfjIMeuWwVa/Z18t/GmA6L4Wm7s3a5VRGakCsshnlvnWEZ6+yhYLS7h7Kg2oDgY9rhPIOdVKLYbOPSC+DKe0ST+z2XaAEg/X/70GpBodknSyBSv780BkNSlsn53aBN6G01kcGetmqrBwLdIKuSbtvUEVz6c6I9vwn2Ni5mGBYObqP9R5Gu85tetSC3V4z2OWL6Xj1w2hcfcITSk615rP4GL8XEH3aej6YsmyAYMs0Ux/t9IFZPbwreRhb4sjhAhW67LoVTOYXnOPbm6/AXr6RmBPpj6l6/DgaBGR4ednszWnbI03fR+Kvp0cqFcsmNpCMxrl1X3oCjFizIw8yDE"> 976 <details id="Details-menu-drawer-container" class="menu-drawer-container"> 977 <summary class="header__icon header__icon--menu header__icon--summary link focus-inset" aria-label="Menu"> 978 <span> 979 <svg 980 xmlns="http://www.w3.org/2000/svg" 981 aria-hidden="true" 982 focusable="false" 983 class="icon icon-hamburger" 984 fill="none" 985 viewBox="0 0 18 16" 986> 987 <path d="M1 .5a.5.5 0 100 1h15.71a.5.5 0 000-1H1zM.5 8a.5.5 0 01.5-.5h15.71a.5.5 0 010 1H1A.5.5 0 01.5 8zm0 7a.5.5 0 01.5-.5h15.71a.5.5 0 010 1H1a.5.5 0 01-.5-.5z" fill="currentColor"> 988</svg> 989 990 <svg 991 xmlns="http://www.w3.org/2000/svg" 992 aria-hidden="true" 993 focusable="false" 994 class="icon icon-close" 995 fill="none" 996 viewBox="0 0 18 17" 997> 998 <path d="M.865 15.978a.5.5 0 00.707.707l7.433-7.431 7.579 7.282a.501.501 0 00.846-.37.5.5 0 00-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 10-.707-.708L8.991 7.853 1.413.573a.5.5 0 10-.693.72l7.563 7.268-7.418 7.417z" fill="currentColor"> 999</svg> 1000 1001 </span> 1002 </summary> 1003 <div id="menu-drawer" class="gradient menu-drawer motion-reduce color-background-1" tabindex="-1"> 1004 <div class="menu-drawer__inner-container"> 1005 <div class='menu-drawer__mobile-content menu-drawer__title-and-close-btn'> 1006 <h3 class='menu-drawer__title'>Menu</h3> 1007 <button class='menu-drawer__close-btn menu-drawer__close-menu-btn header__icon header__icon--menu header__icon--summary link focus-inset'> 1008 <svg 1009 xmlns="http://www.w3.org/2000/svg" 1010 aria-hidden="true" 1011 focusable="false" 1012 class="icon icon-close" 1013 fill="none" 1014 viewBox="0 0 18 17" 1015> 1016 <path d="M.865 15.978a.5.5 0 00.707.707l7.433-7.431 7.579 7.282a.501.501 0 00.846-.37.5.5 0 00-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 10-.707-.708L8.991 7.853 1.413.573a.5.5 0 10-.693.72l7.563 7.268-7.418 7.417z" fill="currentColor"> 1017</svg> 1018 1019 </button> 1020 </div> 1021 <div class="menu-drawer__navigation-container"> 1022 <nav class="menu-drawer__navigation"> 1023 <ul class="menu-drawer__menu has-submenu list-menu" role="list"><li><a href="/" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 1024 Home 1025 </a></li><li>
1025<details id="Details-menu-drawer-menu-item-2"> 1026 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 1027 Shop 1028 <svg 1029 viewBox="0 0 14 10" 1030 fill="none" 1031 aria-hidden="true" 1032 focusable="false" 1033 class="icon icon-arrow" 1034 xmlns="http://www.w3.org/2000/svg" 1035> 1036 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 1037</svg> 1038 1039 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 1040 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 1041</svg> 1042 1043 </summary> 1044 <div id="link-shop" class="menu-drawer__submenu has-submenu gradient motion-reduce" tabindex="-1"> 1045 <div class="menu-drawer__inner-submenu"> 1046 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1047 <svg 1048 viewBox="0 0 14 10" 1049 fill="none" 1050 aria-hidden="true" 1051 focusable="false" 1052 class="icon icon-arrow" 1053 xmlns="http://www.w3.org/2000/svg" 1054> 1055 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 1056</svg> 1057 1058 Shop 1059 </button> 1060 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"><li><details id="Details-menu-drawer-submenu-1"> 1061 <summary class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1062 1063 Doctor Recommended 1064 <svg 1065 viewBox="0 0 14 10" 1066 fill="none" 1067 aria-hidden="true" 1068 focusable="false" 1069 class="icon icon-arrow" 1070 xmlns="http://www.w3.org/2000/svg" 1071> 1072 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 1073</svg> 1074 1075 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 1076 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 1077</svg> 1078 1079 </summary> 1080 <div id="childlink-doctor-recommended" class="menu-drawer__submenu has-submenu gradient motion-reduce"> 1081 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1082 <svg 1083 viewBox="0 0 14 10" 1084 fill="none" 1085 aria-hidden="true" 1086 focusable="false" 1087 class="icon icon-arrow" 1088 xmlns="http://www.w3.org/2000/svg" 1089> 1090 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 1091</svg> 1092 1093 Doctor Recommended 1094 </button> 1095 1096 <ul class="products-mega-menu__cards products-mega-menu__cards--mobile"> 1097 1098 1099 1100 1101 <li> 1102 1103<div class="card-wrapper product-card-wrapper underline-links-hover"> 1104 <div 1105 class=" 1106 card 1107 card--card 1108 card--media 1109 color-background-1 gradient 1110 1111 1112 1113 card--badge-sided 1114 1115 1116 " 1117 style="--ratio-percent: 100%;" 1118 > 1119 <div 1120 class="card__inner ratio" 1121 style="--ratio-percent: 100%;" 1122 ><div class="card__media"> 1123 <div class="media media--transparent media--hover-effect"> 1124 1125 <img
1126 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523 1254w 1127 " 1128 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=533" 1129 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 1130 alt="Complete Recovery Solution Bundle - Team Doctors" 1131 class="motion-reduce" 1132 1133 loading="lazy" 1134 1135 width="1254" 1136 height="1254" 1137 id='quick-add-8455539065023-image' 1138 > 1139 1140<img 1141 srcset="//teamdoctors.com/cdn/shop/files/preview_images/b45585c208f5471097460280d2b7e84e.thumbnail.0000000000.jpg?v=1780910014 w 1142 " 1143 src="//teamdoctors.com/cdn/shop/files/preview_images/b45585c208f5471097460280d2b7e84e.thumbnail.0000000000.jpg?v=1780910014&width=533" 1144 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 1145 alt="" 1146 class="motion-reduce" 1147 loading="lazy" 1148 width="" 1149 height="" 1150 ></div> 1151 </div><div class="card__content"> 1152 <div class="card__information"> 1153 <h3 1154 class="card__heading" 1155 1156 > 1157 <a 1158 href="/products/complete-recovery-solution-bundle" 1159 id="StandardCardNoMediaLink--8455539065023" 1160 class="full-unstyled-link" 1161 aria-labelledby="StandardCardNoMediaLink--8455539065023 NoMediaStandardBadge--8455539065023" 1162 > 1163 Complete Biomimetic Recovery System⢠1164 </a> 1165 </h3> 1166 </div> 1167 <div class="card__badge bottom left"> 1168 1169 1170 <span 1171 id="NoMediaStandardBadge--8455539065023" 1172 class="badge badge--bottom-left color-accent-2" 1173 > 1174 <svg 1175 aria-hidden="true" 1176 focusable="false" 1177 class="icon icon-discount color-foreground-text" 1178 viewBox="0 0 12 12" 1179> 1180 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 1181</svg> 1182<span class='nowrap'>SAVE 10%</span> 1183 </span></div> 1184 </div> 1185 </div> 1186 <div class="card__content"> 1187 <div class="card__information"> 1188 <h3 1189 class="card__heading h5" 1190 1191 id="title--8455539065023" 1192 1193 > 1194 <a 1195 href="/products/complete-recovery-solution-bundle" 1196 id="CardLink--8455539065023" 1197 class="full-unstyled-link" 1198 aria-labelledby="CardLink--8455539065023 Badge--8455539065023" 1199 > 1200 Complete Biomimetic Recovery System⢠1201 </a> 1202 </h3> 1203 1204 <div class="product-subtitle"> 1205 The Vibeassage Pro® + The Vibeassage Sport® 1206 </div> 1207 1208 <div class="card-information"><span class="caption-large light"></span> 1209<div 1210 class=" 1211 price price--on-sale " 1212> 1213 <div class="price__container"><div class="price__regular">
1214 <span class="visually-hidden visually-hidden--inline">Regular price</span> 1215 <span class="price-item price-item--regular"> 1216 $1,807.00 1217 </span> 1218 </div> 1219 <div class="price__sale "> 1220 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 1221 <span class="price-item price-item--sale price-item--last"> 1222 $1,807.00 1223 </span> 1224 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 1225 <span class="price__compare-price"> 1226 <s class="price-item price-item--regular"> 1227 $2,008.00 1228 </s> 1229 </span></div> 1230 <small class="unit-price caption hidden"> 1231 <span class="visually-hidden">Unit price</span> 1232 <span class="price-item price-item--last"> 1233 <span></span> 1234 <span aria-hidden="true">/</span> 1235 <span class="visually-hidden"> per </span> 1236 <span> 1237 </span> 1238 </span> 1239 </small> 1240 </div></div> 1241 1242 </div> 1243 </div> 1244 1245<div class="card__badge bottom left"><span 1246 id="Badge--8455539065023" 1247 class="badge badge--bottom-left color-accent-2" 1248 > 1249 10% 1250 </span></div> 1251 </div> 1252 </div> 1253 </div>
1253<script> 1254 (() => { 1255 if (window.cardProductQuickAddVariantFixLoaded) return; 1256 window.cardProductQuickAddVariantFixLoaded = true; 1257 1258 const ADD_TO_CART_TEXT = "Add to cart"; 1259 const SOLD_OUT_TEXT = "Sold out"; 1260 1261 function parseVariants(container) { 1262 if (!container) return []; 1263 1264 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 1265 1266 for (const script of scripts) { 1267 try { 1268 const data = JSON.parse(script.textContent.trim()); 1269 1270 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 1271 return data; 1272 } 1273 1274 if (data && Array.isArray(data.variants)) { 1275 return data.variants; 1276 } 1277 } catch (error) {} 1278 } 1279 1280 return []; 1281 } 1282 1283 function getSelectedOptionValues(container) { 1284 const values = []; 1285 1286 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 1287 const checkedInput = group.querySelector('input[type="radio"]:checked'); 1288 const select = group.querySelector('select'); 1289 1290 if (checkedInput) { 1291 values.push(checkedInput.value); 1292 } else if (select) { 1293 values.push(select.value); 1294 } 1295 }); 1296 1297 return values; 1298 } 1299 1300 function getCurrentVariant(container, form, variants) { 1301 const idInput = form && form.querySelector('[name="id"]'); 1302 const selectedId = idInput && idInput.value; 1303 1304 if (selectedId) { 1305 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 1306 if (byId) return byId; 1307 } 1308 1309 const selectedOptions = getSelectedOptionValues(container); 1310 1311 if (selectedOptions.length) { 1312 return variants.find((variant) => { 1313 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 1314 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 1315 }); 1316 } 1317 1318 return null; 1319 } 1320 1321 function setButtonState(form, variant) { 1322 if (!form) return; 1323 1324 const idInput = form.querySelector('[name="id"]'); 1325 const addButton = form.querySelector('[name="add"]'); 1326 const buttonLabel = 1327 addButton && 1328 (addButton.querySelector('.main-atc__label__text') || 1329 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 1330 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 1331 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 1332 1333 if (!addButton || !idInput || !variant) return; 1334 1335 idInput.value = variant.id; 1336 idInput.disabled = false; 1337 1338 if (spinner) spinner.classList.add('hidden'); 1339 1340 if (variant.available) { 1341 addButton.disabled = false; 1342 addButton.removeAttribute('disabled'); 1343 addButton.removeAttribute('aria-disabled'); 1344 addButton.classList.remove('loading'); 1345 1346 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 1347 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 1348 } else { 1349 addButton.disabled = true; 1350 addButton.setAttribute('disabled', 'disabled'); 1351 addButton.setAttribute('aria-disabled', 'true'); 1352 1353 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 1354 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 1355 } 1356 } 1357 1358 function syncContainer(container) { 1359 if (!container) return; 1360 1361 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 1362 if (!form) return; 1363 1364 const variants = parseVariants(container); 1365 if (!variants.length) return; 1366 1367 const variant = getCurrentVariant(container, form, variants); 1368 if (!variant) return; 1369 1370 setButtonState(form, variant); 1371 } 1372 1373 document.addEventListener('change', (event) => { 1374 const quickAddModal = event.target.closest('quick-add-modal'); 1375 const cardVariantSelects = event.target.closest('card-variant-selects'); 1376 1377 if (quickAddModal) { 1378 setTimeout(() => syncContainer(quickAddModal), 80); 1379 setTimeout(() => syncContainer(quickAddModal), 250); 1380 } 1381 1382 if (cardVariantSelects) { 1383 const card = cardVariantSelects.closest('.card-wrapper'); 1384 if (card) { 1385 setTimeout(() => syncContainer(card), 80); 1386 setTimeout(() => syncContainer(card), 250); 1387 } 1388 } 1389 }); 1390 1391 const observer = new MutationObserver((mutations) => { 1392 mutations.forEach((mutation) => {
1393 mutation.addedNodes.forEach((node) => { 1394 if (!(node instanceof HTMLElement)) return; 1395 1396 if (node.matches && node.matches('quick-add-modal')) { 1397 setTimeout(() => syncContainer(node), 150); 1398 } 1399 1400 node.querySelectorAll && 1401 node.querySelectorAll('quick-add-modal').forEach((modal) => { 1402 setTimeout(() => syncContainer(modal), 150); 1403 }); 1404 }); 1405 }); 1406 }); 1407 1408 observer.observe(document.documentElement, { 1409 childList: true, 1410 subtree: true 1411 }); 1412 1413 document.addEventListener('DOMContentLoaded', () => { 1414 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 1415 }); 1416 })(); 1417</script>
1417 1418 1419 1420 1421 1422 </li> 1423 1424 <li> 1425 1426<div class="card-wrapper product-card-wrapper underline-links-hover"> 1427 <div 1428 class=" 1429 card 1430 card--card 1431 card--media 1432 color-background-1 gradient 1433 1434 1435 1436 card--badge-sided 1437 1438 1439 " 1440 style="--ratio-percent: 100%;" 1441 > 1442 <div 1443 class="card__inner ratio" 1444 style="--ratio-percent: 100%;" 1445 ><div class="card__media"> 1446 <div class="media media--transparent media--hover-effect"> 1447 1448 <img 1449 srcset="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914 w 1450 " 1451 src="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914&width=533" 1452 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 1453 alt="The Vibeassage Pro® with the full 3-pad Biomimetic Systemâ¢" 1454 class="motion-reduce" 1455 1456 loading="lazy" 1457 1458 width="" 1459 height="" 1460 id='quick-add-7253705130175-image' 1461 > 1462 1463<img 1464 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339 810w 1465 " 1466 src="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533" 1467 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 1468 alt="" 1469 class="motion-reduce" 1470 loading="lazy" 1471 width="810" 1472 height="605" 1473 ></div> 1474 </div><div class="card__content"> 1475 <div class="card__information"> 1476 <h3 1477 class="card__heading" 1478 1479 > 1480 <a 1481 href="/products/vibeassage-pro" 1482 id="StandardCardNoMediaLink--7253705130175" 1483 class="full-unstyled-link" 1484 aria-labelledby="StandardCardNoMediaLink--7253705130175 NoMediaStandardBadge--7253705130175" 1485 > 1486 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠1487 </a> 1488 </h3> 1489 </div> 1490 <div class="card__badge bottom left"> 1491 1492 1493 <span 1494 id="NoMediaStandardBadge--7253705130175" 1495 class="badge badge--bottom-left color-accent-2" 1496 > 1497 <svg 1498 aria-hidden="true" 1499 focusable="false" 1500 class="icon icon-discount color-foreground-text" 1501 viewBox="0 0 12 12" 1502> 1503 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 1504</svg> 1505<span class='nowrap'>SAVE 9%</span> 1506 </span></div> 1507 </div> 1508 </div> 1509 <div class="card__content"> 1510 <div class="card__information"> 1511 <h3 1512 class="card__heading h5" 1513 1514 id="title--7253705130175" 1515 1516 > 1517 <a 1518 href="/products/vibeassage-pro" 1519 id="CardLink--7253705130175" 1520 class="full-unstyled-link" 1521 aria-labelledby="CardLink--7253705130175 Badge--7253705130175" 1522 > 1523 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠1524 </a> 1525 </h3> 1526 1527 <div class="card-information"><span class="caption-large light"></span> 1528<div 1529 class=" 1530 price price--on-sale " 1531> 1532 <div class="price__container"><div class="price__regular">
1533 <span class="visually-hidden visually-hidden--inline">Regular price</span> 1534 <span class="price-item price-item--regular"> 1535 $1,579.00 1536 </span> 1537 </div> 1538 <div class="price__sale "> 1539 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 1540 <span class="price-item price-item--sale price-item--last"> 1541 $1,579.00 1542 </span> 1543 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 1544 <span class="price__compare-price"> 1545 <s class="price-item price-item--regular"> 1546 $1,749.00 1547 </s> 1548 </span></div> 1549 <small class="unit-price caption hidden"> 1550 <span class="visually-hidden">Unit price</span> 1551 <span class="price-item price-item--last"> 1552 <span></span> 1553 <span aria-hidden="true">/</span> 1554 <span class="visually-hidden"> per </span> 1555 <span> 1556 </span> 1557 </span> 1558 </small> 1559 </div></div> 1560 1561 </div> 1562 </div> 1563 1564<div class="card__badge bottom left"><span 1565 id="Badge--7253705130175" 1566 class="badge badge--bottom-left color-accent-2" 1567 > 1568 9% 1569 </span></div> 1570 </div> 1571 </div> 1572 </div>
1572<script> 1573 (() => { 1574 if (window.cardProductQuickAddVariantFixLoaded) return; 1575 window.cardProductQuickAddVariantFixLoaded = true; 1576 1577 const ADD_TO_CART_TEXT = "Add to cart"; 1578 const SOLD_OUT_TEXT = "Sold out"; 1579 1580 function parseVariants(container) { 1581 if (!container) return []; 1582 1583 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 1584 1585 for (const script of scripts) { 1586 try { 1587 const data = JSON.parse(script.textContent.trim()); 1588 1589 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 1590 return data; 1591 } 1592 1593 if (data && Array.isArray(data.variants)) { 1594 return data.variants; 1595 } 1596 } catch (error) {} 1597 } 1598 1599 return []; 1600 } 1601 1602 function getSelectedOptionValues(container) { 1603 const values = []; 1604 1605 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 1606 const checkedInput = group.querySelector('input[type="radio"]:checked'); 1607 const select = group.querySelector('select'); 1608 1609 if (checkedInput) { 1610 values.push(checkedInput.value); 1611 } else if (select) { 1612 values.push(select.value); 1613 } 1614 }); 1615 1616 return values; 1617 } 1618 1619 function getCurrentVariant(container, form, variants) { 1620 const idInput = form && form.querySelector('[name="id"]'); 1621 const selectedId = idInput && idInput.value; 1622 1623 if (selectedId) { 1624 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 1625 if (byId) return byId; 1626 } 1627 1628 const selectedOptions = getSelectedOptionValues(container); 1629 1630 if (selectedOptions.length) { 1631 return variants.find((variant) => { 1632 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 1633 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 1634 }); 1635 } 1636 1637 return null; 1638 } 1639 1640 function setButtonState(form, variant) { 1641 if (!form) return; 1642 1643 const idInput = form.querySelector('[name="id"]'); 1644 const addButton = form.querySelector('[name="add"]'); 1645 const buttonLabel = 1646 addButton && 1647 (addButton.querySelector('.main-atc__label__text') || 1648 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 1649 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 1650 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 1651 1652 if (!addButton || !idInput || !variant) return; 1653 1654 idInput.value = variant.id; 1655 idInput.disabled = false; 1656 1657 if (spinner) spinner.classList.add('hidden'); 1658 1659 if (variant.available) { 1660 addButton.disabled = false; 1661 addButton.removeAttribute('disabled'); 1662 addButton.removeAttribute('aria-disabled'); 1663 addButton.classList.remove('loading'); 1664 1665 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 1666 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 1667 } else { 1668 addButton.disabled = true; 1669 addButton.setAttribute('disabled', 'disabled'); 1670 addButton.setAttribute('aria-disabled', 'true'); 1671 1672 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 1673 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 1674 } 1675 } 1676 1677 function syncContainer(container) { 1678 if (!container) return; 1679 1680 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 1681 if (!form) return; 1682 1683 const variants = parseVariants(container); 1684 if (!variants.length) return; 1685 1686 const variant = getCurrentVariant(container, form, variants); 1687 if (!variant) return; 1688 1689 setButtonState(form, variant); 1690 } 1691 1692 document.addEventListener('change', (event) => { 1693 const quickAddModal = event.target.closest('quick-add-modal'); 1694 const cardVariantSelects = event.target.closest('card-variant-selects'); 1695 1696 if (quickAddModal) { 1697 setTimeout(() => syncContainer(quickAddModal), 80); 1698 setTimeout(() => syncContainer(quickAddModal), 250); 1699 } 1700 1701 if (cardVariantSelects) { 1702 const card = cardVariantSelects.closest('.card-wrapper'); 1703 if (card) { 1704 setTimeout(() => syncContainer(card), 80); 1705 setTimeout(() => syncContainer(card), 250); 1706 } 1707 } 1708 }); 1709 1710 const observer = new MutationObserver((mutations) => { 1711 mutations.forEach((mutation) => {
1712 mutation.addedNodes.forEach((node) => { 1713 if (!(node instanceof HTMLElement)) return; 1714 1715 if (node.matches && node.matches('quick-add-modal')) { 1716 setTimeout(() => syncContainer(node), 150); 1717 } 1718 1719 node.querySelectorAll && 1720 node.querySelectorAll('quick-add-modal').forEach((modal) => { 1721 setTimeout(() => syncContainer(modal), 150); 1722 }); 1723 }); 1724 }); 1725 }); 1726 1727 observer.observe(document.documentElement, { 1728 childList: true, 1729 subtree: true 1730 }); 1731 1732 document.addEventListener('DOMContentLoaded', () => { 1733 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 1734 }); 1735 })(); 1736</script>
1736 1737 1738 1739 1740 1741 </li> 1742 1743 <li> 1744 1745<div class="card-wrapper product-card-wrapper underline-links-hover"> 1746 <div 1747 class=" 1748 card 1749 card--card 1750 card--media 1751 color-background-1 gradient 1752 1753 1754 1755 card--badge-sided 1756 1757 1758 " 1759 style="--ratio-percent: 100%;" 1760 > 1761 <div 1762 class="card__inner ratio" 1763 style="--ratio-percent: 100%;" 1764 ><div class="card__media"> 1765 <div class="media media--transparent media--hover-effect"> 1766 1767 <img 1768 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068 1254w 1769 " 1770 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=533" 1771 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 1772 alt="White" 1773 class="motion-reduce" 1774 1775 loading="lazy" 1776 1777 width="1254" 1778 height="1254" 1779 id='quick-add-8342973219007-image' 1780 > 1781 1782<img 1783 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847 1080w 1784 " 1785 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=533" 1786 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 1787 alt="" 1788 class="motion-reduce" 1789 loading="lazy" 1790 width="1080" 1791 height="1080" 1792 ></div> 1793 </div><div class="card__content"> 1794 <div class="card__information"> 1795 <h3 1796 class="card__heading" 1797 1798 > 1799 <a 1800 href="/products/vibeassage-complete-system" 1801 id="StandardCardNoMediaLink--8342973219007" 1802 class="full-unstyled-link" 1803 aria-labelledby="StandardCardNoMediaLink--8342973219007 NoMediaStandardBadge--8342973219007" 1804 > 1805 â Vibeassage⢠Sport with 3 Biomimetic Pads - The Complete System 1806 </a> 1807 </h3> 1808 </div> 1809 <div class="card__badge bottom left"> 1810 1811 </div> 1812 </div> 1813 </div> 1814 <div class="card__content"> 1815 <div class="card__information"> 1816 <h3 1817 class="card__heading h5" 1818 1819 id="title--8342973219007" 1820 1821 > 1822 <a 1823 href="/products/vibeassage-complete-system" 1824 id="CardLink--8342973219007" 1825 class="full-unstyled-link" 1826 aria-labelledby="CardLink--8342973219007 Badge--8342973219007" 1827 > 1828 â Vibeassage⢠Sport with 3 Biomimetic Pads - The Complete System 1829 </a> 1830 </h3> 1831 1832 <div class="card-information"><span class="caption-large light"></span> 1833<div 1834 class=" 1835 price " 1836> 1837 <div class="price__container"><div class="price__regular">
1838 <span class="visually-hidden visually-hidden--inline">Regular price</span> 1839 <span class="price-item price-item--regular"> 1840 From $429.00 1841 </span> 1842 </div> 1843 <div class="price__sale "> 1844 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 1845 <span class="price-item price-item--sale price-item--last"> 1846 From $429.00 1847 </span> 1848 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 1849 <span class="price__compare-price"> 1850 <s class="price-item price-item--regular"> 1851 1852 </s> 1853 </span></div> 1854 <small class="unit-price caption hidden"> 1855 <span class="visually-hidden">Unit price</span> 1856 <span class="price-item price-item--last"> 1857 <span></span> 1858 <span aria-hidden="true">/</span> 1859 <span class="visually-hidden"> per </span> 1860 <span> 1861 </span> 1862 </span> 1863 </small> 1864 </div></div> 1865 1866 </div> 1867 </div> 1868 1869<div class="card__badge bottom left"></div> 1870 </div> 1871 </div> 1872 </div>
1872<script> 1873 (() => { 1874 if (window.cardProductQuickAddVariantFixLoaded) return; 1875 window.cardProductQuickAddVariantFixLoaded = true; 1876 1877 const ADD_TO_CART_TEXT = "Add to cart"; 1878 const SOLD_OUT_TEXT = "Sold out"; 1879 1880 function parseVariants(container) { 1881 if (!container) return []; 1882 1883 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 1884 1885 for (const script of scripts) { 1886 try { 1887 const data = JSON.parse(script.textContent.trim()); 1888 1889 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 1890 return data; 1891 } 1892 1893 if (data && Array.isArray(data.variants)) { 1894 return data.variants; 1895 } 1896 } catch (error) {} 1897 } 1898 1899 return []; 1900 } 1901 1902 function getSelectedOptionValues(container) { 1903 const values = []; 1904 1905 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 1906 const checkedInput = group.querySelector('input[type="radio"]:checked'); 1907 const select = group.querySelector('select'); 1908 1909 if (checkedInput) { 1910 values.push(checkedInput.value); 1911 } else if (select) { 1912 values.push(select.value); 1913 } 1914 }); 1915 1916 return values; 1917 } 1918 1919 function getCurrentVariant(container, form, variants) { 1920 const idInput = form && form.querySelector('[name="id"]'); 1921 const selectedId = idInput && idInput.value; 1922 1923 if (selectedId) { 1924 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 1925 if (byId) return byId; 1926 } 1927 1928 const selectedOptions = getSelectedOptionValues(container); 1929 1930 if (selectedOptions.length) { 1931 return variants.find((variant) => { 1932 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 1933 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 1934 }); 1935 } 1936 1937 return null; 1938 } 1939 1940 function setButtonState(form, variant) { 1941 if (!form) return; 1942 1943 const idInput = form.querySelector('[name="id"]'); 1944 const addButton = form.querySelector('[name="add"]'); 1945 const buttonLabel = 1946 addButton && 1947 (addButton.querySelector('.main-atc__label__text') || 1948 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 1949 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 1950 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 1951 1952 if (!addButton || !idInput || !variant) return; 1953 1954 idInput.value = variant.id; 1955 idInput.disabled = false; 1956 1957 if (spinner) spinner.classList.add('hidden'); 1958 1959 if (variant.available) { 1960 addButton.disabled = false; 1961 addButton.removeAttribute('disabled'); 1962 addButton.removeAttribute('aria-disabled'); 1963 addButton.classList.remove('loading'); 1964 1965 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 1966 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 1967 } else { 1968 addButton.disabled = true; 1969 addButton.setAttribute('disabled', 'disabled'); 1970 addButton.setAttribute('aria-disabled', 'true'); 1971 1972 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 1973 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 1974 } 1975 } 1976 1977 function syncContainer(container) { 1978 if (!container) return; 1979 1980 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 1981 if (!form) return; 1982 1983 const variants = parseVariants(container); 1984 if (!variants.length) return; 1985 1986 const variant = getCurrentVariant(container, form, variants); 1987 if (!variant) return; 1988 1989 setButtonState(form, variant); 1990 } 1991 1992 document.addEventListener('change', (event) => { 1993 const quickAddModal = event.target.closest('quick-add-modal'); 1994 const cardVariantSelects = event.target.closest('card-variant-selects'); 1995 1996 if (quickAddModal) { 1997 setTimeout(() => syncContainer(quickAddModal), 80); 1998 setTimeout(() => syncContainer(quickAddModal), 250); 1999 } 2000 2001 if (cardVariantSelects) { 2002 const card = cardVariantSelects.closest('.card-wrapper'); 2003 if (card) { 2004 setTimeout(() => syncContainer(card), 80); 2005 setTimeout(() => syncContainer(card), 250); 2006 } 2007 } 2008 }); 2009 2010 const observer = new MutationObserver((mutations) => { 2011 mutations.forEach((mutation) => {
2012 mutation.addedNodes.forEach((node) => { 2013 if (!(node instanceof HTMLElement)) return; 2014 2015 if (node.matches && node.matches('quick-add-modal')) { 2016 setTimeout(() => syncContainer(node), 150); 2017 } 2018 2019 node.querySelectorAll && 2020 node.querySelectorAll('quick-add-modal').forEach((modal) => { 2021 setTimeout(() => syncContainer(modal), 150); 2022 }); 2023 }); 2024 }); 2025 }); 2026 2027 observer.observe(document.documentElement, { 2028 childList: true, 2029 subtree: true 2030 }); 2031 2032 document.addEventListener('DOMContentLoaded', () => { 2033 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 2034 }); 2035 })(); 2036</script>
2036 2037 2038 2039 2040 2041 </li> 2042 2043 <li> 2044 2045<div class="card-wrapper product-card-wrapper underline-links-hover"> 2046 <div 2047 class=" 2048 card 2049 card--card 2050 card--media 2051 color-background-1 gradient 2052 2053 2054 2055 card--badge-sided 2056 2057 2058 " 2059 style="--ratio-percent: 100%;" 2060 > 2061 <div 2062 class="card__inner ratio" 2063 style="--ratio-percent: 100%;" 2064 ><div class="card__media"> 2065 <div class="media media--transparent media--hover-effect"> 2066 2067 <img 2068 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068 1254w 2069 " 2070 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=533" 2071 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 2072 alt="White" 2073 class="motion-reduce" 2074 2075 loading="lazy" 2076 2077 width="1254" 2078 height="1254" 2079 id='quick-add-8342972334271-image' 2080 > 2081 2082<img 2083 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068 1254w 2084 " 2085 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=533" 2086 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 2087 alt="" 2088 class="motion-reduce" 2089 loading="lazy" 2090 width="1254" 2091 height="1254" 2092 ></div> 2093 </div><div class="card__content"> 2094 <div class="card__information"> 2095 <h3 2096 class="card__heading" 2097 2098 > 2099 <a 2100 href="/products/vibeassage-relief-bundle" 2101 id="StandardCardNoMediaLink--8342972334271" 2102 class="full-unstyled-link" 2103 aria-labelledby="StandardCardNoMediaLink--8342972334271 NoMediaStandardBadge--8342972334271" 2104 > 2105 Vibeassage® Relief Bundle 2106 </a> 2107 </h3> 2108 </div> 2109 <div class="card__badge bottom left"> 2110 2111 </div> 2112 </div> 2113 </div> 2114 <div class="card__content"> 2115 <div class="card__information"> 2116 <h3 2117 class="card__heading h5" 2118 2119 id="title--8342972334271" 2120 2121 > 2122 <a 2123 href="/products/vibeassage-relief-bundle" 2124 id="CardLink--8342972334271" 2125 class="full-unstyled-link" 2126 aria-labelledby="CardLink--8342972334271 Badge--8342972334271" 2127 > 2128 Vibeassage® Relief Bundle 2129 </a> 2130 </h3> 2131 2132 <div class="card-information"><span class="caption-large light"></span> 2133<div 2134 class=" 2135 price " 2136> 2137 <div class="price__container"><div class="price__regular">
2138 <span class="visually-hidden visually-hidden--inline">Regular price</span> 2139 <span class="price-item price-item--regular"> 2140 From $389.00 2141 </span> 2142 </div> 2143 <div class="price__sale "> 2144 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 2145 <span class="price-item price-item--sale price-item--last"> 2146 From $389.00 2147 </span> 2148 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 2149 <span class="price__compare-price"> 2150 <s class="price-item price-item--regular"> 2151 2152 </s> 2153 </span></div> 2154 <small class="unit-price caption hidden"> 2155 <span class="visually-hidden">Unit price</span> 2156 <span class="price-item price-item--last"> 2157 <span></span> 2158 <span aria-hidden="true">/</span> 2159 <span class="visually-hidden"> per </span> 2160 <span> 2161 </span> 2162 </span> 2163 </small> 2164 </div></div> 2165 2166 </div> 2167 </div> 2168 2169<div class="card__badge bottom left"></div> 2170 </div> 2171 </div> 2172 </div>
2172<script> 2173 (() => { 2174 if (window.cardProductQuickAddVariantFixLoaded) return; 2175 window.cardProductQuickAddVariantFixLoaded = true; 2176 2177 const ADD_TO_CART_TEXT = "Add to cart"; 2178 const SOLD_OUT_TEXT = "Sold out"; 2179 2180 function parseVariants(container) { 2181 if (!container) return []; 2182 2183 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 2184 2185 for (const script of scripts) { 2186 try { 2187 const data = JSON.parse(script.textContent.trim()); 2188 2189 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 2190 return data; 2191 } 2192 2193 if (data && Array.isArray(data.variants)) { 2194 return data.variants; 2195 } 2196 } catch (error) {} 2197 } 2198 2199 return []; 2200 } 2201 2202 function getSelectedOptionValues(container) { 2203 const values = []; 2204 2205 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 2206 const checkedInput = group.querySelector('input[type="radio"]:checked'); 2207 const select = group.querySelector('select'); 2208 2209 if (checkedInput) { 2210 values.push(checkedInput.value); 2211 } else if (select) { 2212 values.push(select.value); 2213 } 2214 }); 2215 2216 return values; 2217 } 2218 2219 function getCurrentVariant(container, form, variants) { 2220 const idInput = form && form.querySelector('[name="id"]'); 2221 const selectedId = idInput && idInput.value; 2222 2223 if (selectedId) { 2224 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 2225 if (byId) return byId; 2226 } 2227 2228 const selectedOptions = getSelectedOptionValues(container); 2229 2230 if (selectedOptions.length) { 2231 return variants.find((variant) => { 2232 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 2233 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 2234 }); 2235 } 2236 2237 return null; 2238 } 2239 2240 function setButtonState(form, variant) { 2241 if (!form) return; 2242 2243 const idInput = form.querySelector('[name="id"]'); 2244 const addButton = form.querySelector('[name="add"]'); 2245 const buttonLabel = 2246 addButton && 2247 (addButton.querySelector('.main-atc__label__text') || 2248 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 2249 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 2250 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 2251 2252 if (!addButton || !idInput || !variant) return; 2253 2254 idInput.value = variant.id; 2255 idInput.disabled = false; 2256 2257 if (spinner) spinner.classList.add('hidden'); 2258 2259 if (variant.available) { 2260 addButton.disabled = false; 2261 addButton.removeAttribute('disabled'); 2262 addButton.removeAttribute('aria-disabled'); 2263 addButton.classList.remove('loading'); 2264 2265 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 2266 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 2267 } else { 2268 addButton.disabled = true; 2269 addButton.setAttribute('disabled', 'disabled'); 2270 addButton.setAttribute('aria-disabled', 'true'); 2271 2272 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 2273 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 2274 } 2275 } 2276 2277 function syncContainer(container) { 2278 if (!container) return; 2279 2280 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 2281 if (!form) return; 2282 2283 const variants = parseVariants(container); 2284 if (!variants.length) return; 2285 2286 const variant = getCurrentVariant(container, form, variants); 2287 if (!variant) return; 2288 2289 setButtonState(form, variant); 2290 } 2291 2292 document.addEventListener('change', (event) => { 2293 const quickAddModal = event.target.closest('quick-add-modal'); 2294 const cardVariantSelects = event.target.closest('card-variant-selects'); 2295 2296 if (quickAddModal) { 2297 setTimeout(() => syncContainer(quickAddModal), 80); 2298 setTimeout(() => syncContainer(quickAddModal), 250); 2299 } 2300 2301 if (cardVariantSelects) { 2302 const card = cardVariantSelects.closest('.card-wrapper'); 2303 if (card) { 2304 setTimeout(() => syncContainer(card), 80); 2305 setTimeout(() => syncContainer(card), 250); 2306 } 2307 } 2308 }); 2309 2310 const observer = new MutationObserver((mutations) => { 2311 mutations.forEach((mutation) => {
2312 mutation.addedNodes.forEach((node) => { 2313 if (!(node instanceof HTMLElement)) return; 2314 2315 if (node.matches && node.matches('quick-add-modal')) { 2316 setTimeout(() => syncContainer(node), 150); 2317 } 2318 2319 node.querySelectorAll && 2320 node.querySelectorAll('quick-add-modal').forEach((modal) => { 2321 setTimeout(() => syncContainer(modal), 150); 2322 }); 2323 }); 2324 }); 2325 }); 2326 2327 observer.observe(document.documentElement, { 2328 childList: true, 2329 subtree: true 2330 }); 2331 2332 document.addEventListener('DOMContentLoaded', () => { 2333 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 2334 }); 2335 })(); 2336</script>
2336 2337 2338 2339 2340 2341 </li> 2342 2343 <li> 2344 2345<div class="card-wrapper product-card-wrapper underline-links-hover"> 2346 <div 2347 class=" 2348 card 2349 card--card 2350 card--media 2351 color-background-1 gradient 2352 2353 2354 2355 card--badge-sided 2356 2357 2358 " 2359 style="--ratio-percent: 100%;" 2360 > 2361 <div 2362 class="card__inner ratio" 2363 style="--ratio-percent: 100%;" 2364 ><div class="card__media"> 2365 <div class="media media--transparent media--hover-effect"> 2366 2367 <img 2368 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763 1254w 2369 " 2370 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=533" 2371 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 2372 alt="White" 2373 class="motion-reduce" 2374 2375 loading="lazy" 2376 2377 width="1254" 2378 height="1254" 2379 id='quick-add-8342972760255-image' 2380 > 2381 2382<img 2383 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068 1254w 2384 " 2385 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=533" 2386 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 2387 alt="" 2388 class="motion-reduce" 2389 loading="lazy" 2390 width="1254" 2391 height="1254" 2392 ></div> 2393 </div><div class="card__content"> 2394 <div class="card__information"> 2395 <h3 2396 class="card__heading" 2397 2398 > 2399 <a 2400 href="/products/vibeassage-performance-bundle" 2401 id="StandardCardNoMediaLink--8342972760255" 2402 class="full-unstyled-link" 2403 aria-labelledby="StandardCardNoMediaLink--8342972760255 NoMediaStandardBadge--8342972760255" 2404 > 2405 Vibeassage® Performance Bundle 2406 </a> 2407 </h3> 2408 </div> 2409 <div class="card__badge bottom left"> 2410 2411 </div> 2412 </div> 2413 </div> 2414 <div class="card__content"> 2415 <div class="card__information"> 2416 <h3 2417 class="card__heading h5" 2418 2419 id="title--8342972760255" 2420 2421 > 2422 <a 2423 href="/products/vibeassage-performance-bundle" 2424 id="CardLink--8342972760255" 2425 class="full-unstyled-link" 2426 aria-labelledby="CardLink--8342972760255 Badge--8342972760255" 2427 > 2428 Vibeassage® Performance Bundle 2429 </a> 2430 </h3> 2431 2432 <div class="card-information"><span class="caption-large light"></span> 2433<div 2434 class=" 2435 price " 2436> 2437 <div class="price__container"><div class="price__regular">
2438 <span class="visually-hidden visually-hidden--inline">Regular price</span> 2439 <span class="price-item price-item--regular"> 2440 From $389.00 2441 </span> 2442 </div> 2443 <div class="price__sale "> 2444 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 2445 <span class="price-item price-item--sale price-item--last"> 2446 From $389.00 2447 </span> 2448 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 2449 <span class="price__compare-price"> 2450 <s class="price-item price-item--regular"> 2451 2452 </s> 2453 </span></div> 2454 <small class="unit-price caption hidden"> 2455 <span class="visually-hidden">Unit price</span> 2456 <span class="price-item price-item--last"> 2457 <span></span> 2458 <span aria-hidden="true">/</span> 2459 <span class="visually-hidden"> per </span> 2460 <span> 2461 </span> 2462 </span> 2463 </small> 2464 </div></div> 2465 2466 </div> 2467 </div> 2468 2469<div class="card__badge bottom left"></div> 2470 </div> 2471 </div> 2472 </div>
2472<script> 2473 (() => { 2474 if (window.cardProductQuickAddVariantFixLoaded) return; 2475 window.cardProductQuickAddVariantFixLoaded = true; 2476 2477 const ADD_TO_CART_TEXT = "Add to cart"; 2478 const SOLD_OUT_TEXT = "Sold out"; 2479 2480 function parseVariants(container) { 2481 if (!container) return []; 2482 2483 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 2484 2485 for (const script of scripts) { 2486 try { 2487 const data = JSON.parse(script.textContent.trim()); 2488 2489 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 2490 return data; 2491 } 2492 2493 if (data && Array.isArray(data.variants)) { 2494 return data.variants; 2495 } 2496 } catch (error) {} 2497 } 2498 2499 return []; 2500 } 2501 2502 function getSelectedOptionValues(container) { 2503 const values = []; 2504 2505 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 2506 const checkedInput = group.querySelector('input[type="radio"]:checked'); 2507 const select = group.querySelector('select'); 2508 2509 if (checkedInput) { 2510 values.push(checkedInput.value); 2511 } else if (select) { 2512 values.push(select.value); 2513 } 2514 }); 2515 2516 return values; 2517 } 2518 2519 function getCurrentVariant(container, form, variants) { 2520 const idInput = form && form.querySelector('[name="id"]'); 2521 const selectedId = idInput && idInput.value; 2522 2523 if (selectedId) { 2524 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 2525 if (byId) return byId; 2526 } 2527 2528 const selectedOptions = getSelectedOptionValues(container); 2529 2530 if (selectedOptions.length) { 2531 return variants.find((variant) => { 2532 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 2533 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 2534 }); 2535 } 2536 2537 return null; 2538 } 2539 2540 function setButtonState(form, variant) { 2541 if (!form) return; 2542 2543 const idInput = form.querySelector('[name="id"]'); 2544 const addButton = form.querySelector('[name="add"]'); 2545 const buttonLabel = 2546 addButton && 2547 (addButton.querySelector('.main-atc__label__text') || 2548 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 2549 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 2550 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 2551 2552 if (!addButton || !idInput || !variant) return; 2553 2554 idInput.value = variant.id; 2555 idInput.disabled = false; 2556 2557 if (spinner) spinner.classList.add('hidden'); 2558 2559 if (variant.available) { 2560 addButton.disabled = false; 2561 addButton.removeAttribute('disabled'); 2562 addButton.removeAttribute('aria-disabled'); 2563 addButton.classList.remove('loading'); 2564 2565 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 2566 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 2567 } else { 2568 addButton.disabled = true; 2569 addButton.setAttribute('disabled', 'disabled'); 2570 addButton.setAttribute('aria-disabled', 'true'); 2571 2572 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 2573 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 2574 } 2575 } 2576 2577 function syncContainer(container) { 2578 if (!container) return; 2579 2580 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 2581 if (!form) return; 2582 2583 const variants = parseVariants(container); 2584 if (!variants.length) return; 2585 2586 const variant = getCurrentVariant(container, form, variants); 2587 if (!variant) return; 2588 2589 setButtonState(form, variant); 2590 } 2591 2592 document.addEventListener('change', (event) => { 2593 const quickAddModal = event.target.closest('quick-add-modal'); 2594 const cardVariantSelects = event.target.closest('card-variant-selects'); 2595 2596 if (quickAddModal) { 2597 setTimeout(() => syncContainer(quickAddModal), 80); 2598 setTimeout(() => syncContainer(quickAddModal), 250); 2599 } 2600 2601 if (cardVariantSelects) { 2602 const card = cardVariantSelects.closest('.card-wrapper'); 2603 if (card) { 2604 setTimeout(() => syncContainer(card), 80); 2605 setTimeout(() => syncContainer(card), 250); 2606 } 2607 } 2608 }); 2609 2610 const observer = new MutationObserver((mutations) => { 2611 mutations.forEach((mutation) => {
2612 mutation.addedNodes.forEach((node) => { 2613 if (!(node instanceof HTMLElement)) return; 2614 2615 if (node.matches && node.matches('quick-add-modal')) { 2616 setTimeout(() => syncContainer(node), 150); 2617 } 2618 2619 node.querySelectorAll && 2620 node.querySelectorAll('quick-add-modal').forEach((modal) => { 2621 setTimeout(() => syncContainer(modal), 150); 2622 }); 2623 }); 2624 }); 2625 }); 2626 2627 observer.observe(document.documentElement, { 2628 childList: true, 2629 subtree: true 2630 }); 2631 2632 document.addEventListener('DOMContentLoaded', () => { 2633 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 2634 }); 2635 })(); 2636</script>
2636 2637 2638 2639 2640 2641 </li> 2642 2643 <li> 2644 2645<div class="card-wrapper product-card-wrapper underline-links-hover"> 2646 <div 2647 class=" 2648 card 2649 card--card 2650 card--media 2651 color-background-1 gradient 2652 2653 2654 2655 card--badge-sided 2656 2657 2658 " 2659 style="--ratio-percent: 100%;" 2660 > 2661 <div 2662 class="card__inner ratio" 2663 style="--ratio-percent: 100%;" 2664 ><div class="card__media"> 2665 <div class="media media--transparent media--hover-effect"> 2666 2667 <img 2668 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068 1254w 2669 " 2670 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=533" 2671 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 2672 alt="White" 2673 class="motion-reduce" 2674 2675 loading="lazy" 2676 2677 width="1254" 2678 height="1254" 2679 id='quick-add-8342966534335-image' 2680 > 2681 2682<img 2683 srcset="//teamdoctors.com/cdn/shop/files/preview_images/d879e7a2fdf742819c922f2bb2e3d0c3.thumbnail.0000000000.jpg?v=1777424140 w 2684 " 2685 src="//teamdoctors.com/cdn/shop/files/preview_images/d879e7a2fdf742819c922f2bb2e3d0c3.thumbnail.0000000000.jpg?v=1777424140&width=533" 2686 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 2687 alt="" 2688 class="motion-reduce" 2689 loading="lazy" 2690 width="" 2691 height="" 2692 ></div> 2693 </div><div class="card__content"> 2694 <div class="card__information"> 2695 <h3 2696 class="card__heading" 2697 2698 > 2699 <a 2700 href="/products/vibeassage-core-system" 2701 id="StandardCardNoMediaLink--8342966534335" 2702 class="full-unstyled-link" 2703 aria-labelledby="StandardCardNoMediaLink--8342966534335 NoMediaStandardBadge--8342966534335" 2704 > 2705 Vibeassage® Core System 2706 </a> 2707 </h3> 2708 </div> 2709 <div class="card__badge bottom left"> 2710 2711 </div> 2712 </div> 2713 </div> 2714 <div class="card__content"> 2715 <div class="card__information"> 2716 <h3 2717 class="card__heading h5" 2718 2719 id="title--8342966534335" 2720 2721 > 2722 <a 2723 href="/products/vibeassage-core-system" 2724 id="CardLink--8342966534335" 2725 class="full-unstyled-link" 2726 aria-labelledby="CardLink--8342966534335 Badge--8342966534335" 2727 > 2728 Vibeassage® Core System 2729 </a> 2730 </h3> 2731 2732 <div class="card-information"><span class="caption-large light"></span> 2733<div 2734 class=" 2735 price " 2736> 2737 <div class="price__container"><div class="price__regular">
2738 <span class="visually-hidden visually-hidden--inline">Regular price</span> 2739 <span class="price-item price-item--regular"> 2740 From $349.00 2741 </span> 2742 </div> 2743 <div class="price__sale "> 2744 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 2745 <span class="price-item price-item--sale price-item--last"> 2746 From $349.00 2747 </span> 2748 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 2749 <span class="price__compare-price"> 2750 <s class="price-item price-item--regular"> 2751 2752 </s> 2753 </span></div> 2754 <small class="unit-price caption hidden"> 2755 <span class="visually-hidden">Unit price</span> 2756 <span class="price-item price-item--last"> 2757 <span></span> 2758 <span aria-hidden="true">/</span> 2759 <span class="visually-hidden"> per </span> 2760 <span> 2761 </span> 2762 </span> 2763 </small> 2764 </div></div> 2765 2766 </div> 2767 </div> 2768 2769<div class="card__badge bottom left"></div> 2770 </div> 2771 </div> 2772 </div>
2772<script> 2773 (() => { 2774 if (window.cardProductQuickAddVariantFixLoaded) return; 2775 window.cardProductQuickAddVariantFixLoaded = true; 2776 2777 const ADD_TO_CART_TEXT = "Add to cart"; 2778 const SOLD_OUT_TEXT = "Sold out"; 2779 2780 function parseVariants(container) { 2781 if (!container) return []; 2782 2783 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 2784 2785 for (const script of scripts) { 2786 try { 2787 const data = JSON.parse(script.textContent.trim()); 2788 2789 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 2790 return data; 2791 } 2792 2793 if (data && Array.isArray(data.variants)) { 2794 return data.variants; 2795 } 2796 } catch (error) {} 2797 } 2798 2799 return []; 2800 } 2801 2802 function getSelectedOptionValues(container) { 2803 const values = []; 2804 2805 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 2806 const checkedInput = group.querySelector('input[type="radio"]:checked'); 2807 const select = group.querySelector('select'); 2808 2809 if (checkedInput) { 2810 values.push(checkedInput.value); 2811 } else if (select) { 2812 values.push(select.value); 2813 } 2814 }); 2815 2816 return values; 2817 } 2818 2819 function getCurrentVariant(container, form, variants) { 2820 const idInput = form && form.querySelector('[name="id"]'); 2821 const selectedId = idInput && idInput.value; 2822 2823 if (selectedId) { 2824 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 2825 if (byId) return byId; 2826 } 2827 2828 const selectedOptions = getSelectedOptionValues(container); 2829 2830 if (selectedOptions.length) { 2831 return variants.find((variant) => { 2832 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 2833 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 2834 }); 2835 } 2836 2837 return null; 2838 } 2839 2840 function setButtonState(form, variant) { 2841 if (!form) return; 2842 2843 const idInput = form.querySelector('[name="id"]'); 2844 const addButton = form.querySelector('[name="add"]'); 2845 const buttonLabel = 2846 addButton && 2847 (addButton.querySelector('.main-atc__label__text') || 2848 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 2849 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 2850 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 2851 2852 if (!addButton || !idInput || !variant) return; 2853 2854 idInput.value = variant.id; 2855 idInput.disabled = false; 2856 2857 if (spinner) spinner.classList.add('hidden'); 2858 2859 if (variant.available) { 2860 addButton.disabled = false; 2861 addButton.removeAttribute('disabled'); 2862 addButton.removeAttribute('aria-disabled'); 2863 addButton.classList.remove('loading'); 2864 2865 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 2866 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 2867 } else { 2868 addButton.disabled = true; 2869 addButton.setAttribute('disabled', 'disabled'); 2870 addButton.setAttribute('aria-disabled', 'true'); 2871 2872 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 2873 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 2874 } 2875 } 2876 2877 function syncContainer(container) { 2878 if (!container) return; 2879 2880 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 2881 if (!form) return; 2882 2883 const variants = parseVariants(container); 2884 if (!variants.length) return; 2885 2886 const variant = getCurrentVariant(container, form, variants); 2887 if (!variant) return; 2888 2889 setButtonState(form, variant); 2890 } 2891 2892 document.addEventListener('change', (event) => { 2893 const quickAddModal = event.target.closest('quick-add-modal'); 2894 const cardVariantSelects = event.target.closest('card-variant-selects'); 2895 2896 if (quickAddModal) { 2897 setTimeout(() => syncContainer(quickAddModal), 80); 2898 setTimeout(() => syncContainer(quickAddModal), 250); 2899 } 2900 2901 if (cardVariantSelects) { 2902 const card = cardVariantSelects.closest('.card-wrapper'); 2903 if (card) { 2904 setTimeout(() => syncContainer(card), 80); 2905 setTimeout(() => syncContainer(card), 250); 2906 } 2907 } 2908 }); 2909 2910 const observer = new MutationObserver((mutations) => { 2911 mutations.forEach((mutation) => {
2912 mutation.addedNodes.forEach((node) => { 2913 if (!(node instanceof HTMLElement)) return; 2914 2915 if (node.matches && node.matches('quick-add-modal')) { 2916 setTimeout(() => syncContainer(node), 150); 2917 } 2918 2919 node.querySelectorAll && 2920 node.querySelectorAll('quick-add-modal').forEach((modal) => { 2921 setTimeout(() => syncContainer(modal), 150); 2922 }); 2923 }); 2924 }); 2925 }); 2926 2927 observer.observe(document.documentElement, { 2928 childList: true, 2929 subtree: true 2930 }); 2931 2932 document.addEventListener('DOMContentLoaded', () => { 2933 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 2934 }); 2935 })(); 2936</script>
2936 2937 2938 2939 2940 2941 </li> 2942 2943 <li> 2944 2945<div class="card-wrapper product-card-wrapper underline-links-hover"> 2946 <div 2947 class=" 2948 card 2949 card--card 2950 card--media 2951 color-background-1 gradient 2952 2953 2954 2955 card--badge-sided 2956 2957 2958 " 2959 style="--ratio-percent: 100%;" 2960 > 2961 <div 2962 class="card__inner ratio" 2963 style="--ratio-percent: 100%;" 2964 ><div class="card__media"> 2965 <div class="media media--transparent media--hover-effect"> 2966 2967 <img 2968 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443 1080w 2969 " 2970 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=533" 2971 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 2972 alt="Biomimetic Applicator Pads (Full Set) - Team Doctors" 2973 class="motion-reduce" 2974 2975 loading="lazy" 2976 2977 width="1080" 2978 height="1080" 2979 id='quick-add-8394187342015-image' 2980 > 2981 2982<img 2983 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492 1080w 2984 " 2985 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533" 2986 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 2987 alt="" 2988 class="motion-reduce" 2989 loading="lazy" 2990 width="1080" 2991 height="1080" 2992 ></div> 2993 </div><div class="card__content"> 2994 <div class="card__information"> 2995 <h3 2996 class="card__heading" 2997 2998 > 2999 <a 3000 href="/products/biomemetic-applicator-pads-full-set" 3001 id="StandardCardNoMediaLink--8394187342015" 3002 class="full-unstyled-link" 3003 aria-labelledby="StandardCardNoMediaLink--8394187342015 NoMediaStandardBadge--8394187342015" 3004 > 3005 Biomimetic Applicator Pads 3006 </a> 3007 </h3> 3008 </div> 3009 <div class="card__badge bottom left"> 3010 3011
3012 <span 3013 id="NoMediaStandardBadge--8394187342015" 3014 class="badge badge--bottom-left color-accent-2" 3015 > 3016 <svg 3017 aria-hidden="true" 3018 focusable="false" 3019 class="icon icon-discount color-foreground-text" 3020 viewBox="0 0 12 12" 3021> 3022 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 3023</svg> 3024<span class='nowrap'>SAVE 21%</span> 3025 </span></div> 3026 </div> 3027 </div> 3028 <div class="card__content"> 3029 <div class="card__information"> 3030 <h3 3031 class="card__heading h5" 3032 3033 id="title--8394187342015" 3034 3035 > 3036 <a 3037 href="/products/biomemetic-applicator-pads-full-set" 3038 id="CardLink--8394187342015" 3039 class="full-unstyled-link" 3040 aria-labelledby="CardLink--8394187342015 Badge--8394187342015" 3041 > 3042 Biomimetic Applicator Pads 3043 </a> 3044 </h3> 3045 3046 <div class="product-subtitle"> 3047 3 Pads - Full Set 3048 </div> 3049 3050 <div class="card-information"><span class="caption-large light"></span> 3051<div 3052 class=" 3053 price price--on-sale " 3054> 3055 <div class="price__container"><div class="price__regular"> 3056 <span class="visually-hidden visually-hidden--inline">Regular price</span> 3057 <span class="price-item price-item--regular"> 3058 $129.00 3059 </span> 3060 </div> 3061 <div class="price__sale "> 3062 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 3063 <span class="price-item price-item--sale price-item--last"> 3064 $129.00 3065 </span> 3066 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 3067 <span class="price__compare-price"> 3068 <s class="price-item price-item--regular"> 3069 $164.85 3070 </s> 3071 </span></div> 3072 <small class="unit-price caption hidden"> 3073 <span class="visually-hidden">Unit price</span> 3074 <span class="price-item price-item--last"> 3075 <span></span> 3076 <span aria-hidden="true">/</span> 3077 <span class="visually-hidden"> per </span> 3078 <span> 3079 </span> 3080 </span> 3081 </small> 3082 </div></div> 3083 3084 </div> 3085 </div> 3086 3087<div class="card__badge bottom left"><span 3088 id="Badge--8394187342015" 3089 class="badge badge--bottom-left color-accent-2" 3090 > 3091 21% 3092 </span></div> 3093 </div> 3094 </div> 3095 </div>
3095<script> 3096 (() => { 3097 if (window.cardProductQuickAddVariantFixLoaded) return; 3098 window.cardProductQuickAddVariantFixLoaded = true; 3099 3100 const ADD_TO_CART_TEXT = "Add to cart"; 3101 const SOLD_OUT_TEXT = "Sold out"; 3102 3103 function parseVariants(container) { 3104 if (!container) return []; 3105 3106 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 3107 3108 for (const script of scripts) { 3109 try { 3110 const data = JSON.parse(script.textContent.trim()); 3111 3112 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 3113 return data; 3114 } 3115 3116 if (data && Array.isArray(data.variants)) { 3117 return data.variants; 3118 } 3119 } catch (error) {} 3120 } 3121 3122 return []; 3123 } 3124 3125 function getSelectedOptionValues(container) { 3126 const values = []; 3127 3128 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 3129 const checkedInput = group.querySelector('input[type="radio"]:checked'); 3130 const select = group.querySelector('select'); 3131 3132 if (checkedInput) { 3133 values.push(checkedInput.value); 3134 } else if (select) { 3135 values.push(select.value); 3136 } 3137 }); 3138 3139 return values; 3140 } 3141 3142 function getCurrentVariant(container, form, variants) { 3143 const idInput = form && form.querySelector('[name="id"]'); 3144 const selectedId = idInput && idInput.value; 3145 3146 if (selectedId) { 3147 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 3148 if (byId) return byId; 3149 } 3150 3151 const selectedOptions = getSelectedOptionValues(container); 3152 3153 if (selectedOptions.length) { 3154 return variants.find((variant) => { 3155 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 3156 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 3157 }); 3158 } 3159 3160 return null; 3161 } 3162 3163 function setButtonState(form, variant) { 3164 if (!form) return; 3165 3166 const idInput = form.querySelector('[name="id"]'); 3167 const addButton = form.querySelector('[name="add"]'); 3168 const buttonLabel = 3169 addButton && 3170 (addButton.querySelector('.main-atc__label__text') || 3171 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 3172 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 3173 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 3174 3175 if (!addButton || !idInput || !variant) return; 3176 3177 idInput.value = variant.id; 3178 idInput.disabled = false; 3179 3180 if (spinner) spinner.classList.add('hidden'); 3181 3182 if (variant.available) { 3183 addButton.disabled = false; 3184 addButton.removeAttribute('disabled'); 3185 addButton.removeAttribute('aria-disabled'); 3186 addButton.classList.remove('loading'); 3187 3188 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 3189 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 3190 } else { 3191 addButton.disabled = true; 3192 addButton.setAttribute('disabled', 'disabled'); 3193 addButton.setAttribute('aria-disabled', 'true'); 3194 3195 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 3196 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 3197 } 3198 } 3199 3200 function syncContainer(container) { 3201 if (!container) return; 3202 3203 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 3204 if (!form) return; 3205 3206 const variants = parseVariants(container); 3207 if (!variants.length) return; 3208 3209 const variant = getCurrentVariant(container, form, variants); 3210 if (!variant) return; 3211 3212 setButtonState(form, variant); 3213 } 3214 3215 document.addEventListener('change', (event) => { 3216 const quickAddModal = event.target.closest('quick-add-modal'); 3217 const cardVariantSelects = event.target.closest('card-variant-selects'); 3218 3219 if (quickAddModal) { 3220 setTimeout(() => syncContainer(quickAddModal), 80); 3221 setTimeout(() => syncContainer(quickAddModal), 250); 3222 } 3223 3224 if (cardVariantSelects) { 3225 const card = cardVariantSelects.closest('.card-wrapper'); 3226 if (card) { 3227 setTimeout(() => syncContainer(card), 80); 3228 setTimeout(() => syncContainer(card), 250); 3229 } 3230 } 3231 }); 3232 3233 const observer = new MutationObserver((mutations) => { 3234 mutations.forEach((mutation) => {
3235 mutation.addedNodes.forEach((node) => { 3236 if (!(node instanceof HTMLElement)) return; 3237 3238 if (node.matches && node.matches('quick-add-modal')) { 3239 setTimeout(() => syncContainer(node), 150); 3240 } 3241 3242 node.querySelectorAll && 3243 node.querySelectorAll('quick-add-modal').forEach((modal) => { 3244 setTimeout(() => syncContainer(modal), 150); 3245 }); 3246 }); 3247 }); 3248 }); 3249 3250 observer.observe(document.documentElement, { 3251 childList: true, 3252 subtree: true 3253 }); 3254 3255 document.addEventListener('DOMContentLoaded', () => { 3256 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 3257 }); 3258 })(); 3259</script>
3259 3260 3261 3262 3263 3264 </li> 3265 3266 <li> 3267 3268<div class="card-wrapper product-card-wrapper underline-links-hover"> 3269 <div 3270 class=" 3271 card 3272 card--card 3273 card--media 3274 color-background-1 gradient 3275 3276 3277 3278 card--badge-sided 3279 3280 3281 " 3282 style="--ratio-percent: 100%;" 3283 > 3284 <div 3285 class="card__inner ratio" 3286 style="--ratio-percent: 100%;" 3287 ><div class="card__media"> 3288 <div class="media media--transparent media--hover-effect"> 3289 3290 <img 3291 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844 1254w 3292 " 3293 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=533" 3294 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 3295 alt="Relief Bundle - Team Doctors" 3296 class="motion-reduce" 3297 3298 loading="lazy" 3299 3300 width="1254" 3301 height="1254" 3302 id='quick-add-8433935974591-image' 3303 > 3304 3305<img 3306 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311 1080w 3307 " 3308 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533" 3309 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 3310 alt="" 3311 class="motion-reduce" 3312 loading="lazy" 3313 width="1080" 3314 height="1080" 3315 ></div> 3316 </div><div class="card__content"> 3317 <div class="card__information"> 3318 <h3 3319 class="card__heading" 3320 3321 > 3322 <a 3323 href="/products/relief-bundle" 3324 id="StandardCardNoMediaLink--8433935974591" 3325 class="full-unstyled-link" 3326 aria-labelledby="StandardCardNoMediaLink--8433935974591 NoMediaStandardBadge--8433935974591" 3327 > 3328 Relief Bundle 3329 </a> 3330 </h3> 3331 </div> 3332 <div class="card__badge bottom left"> 3333 3334
3335 <span 3336 id="NoMediaStandardBadge--8433935974591" 3337 class="badge badge--bottom-left color-accent-2" 3338 > 3339 <svg 3340 aria-hidden="true" 3341 focusable="false" 3342 class="icon icon-discount color-foreground-text" 3343 viewBox="0 0 12 12" 3344> 3345 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 3346</svg> 3347<span class='nowrap'>SAVE 9%</span> 3348 </span></div> 3349 </div> 3350 </div> 3351 <div class="card__content"> 3352 <div class="card__information"> 3353 <h3 3354 class="card__heading h5" 3355 3356 id="title--8433935974591" 3357 3358 > 3359 <a 3360 href="/products/relief-bundle" 3361 id="CardLink--8433935974591" 3362 class="full-unstyled-link" 3363 aria-labelledby="CardLink--8433935974591 Badge--8433935974591" 3364 > 3365 Relief Bundle 3366 </a> 3367 </h3> 3368 3369 <div class="product-subtitle"> 3370 Comfort Relief Pad + Core Recovery Pad 3371 </div> 3372 3373 <div class="card-information"><span class="caption-large light"></span> 3374<div 3375 class=" 3376 price price--on-sale " 3377> 3378 <div class="price__container"><div class="price__regular"> 3379 <span class="visually-hidden visually-hidden--inline">Regular price</span> 3380 <span class="price-item price-item--regular"> 3381 $99.00 3382 </span> 3383 </div> 3384 <div class="price__sale "> 3385 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 3386 <span class="price-item price-item--sale price-item--last"> 3387 $99.00 3388 </span> 3389 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 3390 <span class="price__compare-price"> 3391 <s class="price-item price-item--regular"> 3392 $109.90 3393 </s> 3394 </span></div> 3395 <small class="unit-price caption hidden"> 3396 <span class="visually-hidden">Unit price</span> 3397 <span class="price-item price-item--last"> 3398 <span></span> 3399 <span aria-hidden="true">/</span> 3400 <span class="visually-hidden"> per </span> 3401 <span> 3402 </span> 3403 </span> 3404 </small> 3405 </div></div> 3406 3407 </div> 3408 </div> 3409 3410<div class="card__badge bottom left"><span 3411 id="Badge--8433935974591" 3412 class="badge badge--bottom-left color-accent-2" 3413 > 3414 9% 3415 </span></div> 3416 </div> 3417 </div> 3418 </div>
3418<script> 3419 (() => { 3420 if (window.cardProductQuickAddVariantFixLoaded) return; 3421 window.cardProductQuickAddVariantFixLoaded = true; 3422 3423 const ADD_TO_CART_TEXT = "Add to cart"; 3424 const SOLD_OUT_TEXT = "Sold out"; 3425 3426 function parseVariants(container) { 3427 if (!container) return []; 3428 3429 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 3430 3431 for (const script of scripts) { 3432 try { 3433 const data = JSON.parse(script.textContent.trim()); 3434 3435 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 3436 return data; 3437 } 3438 3439 if (data && Array.isArray(data.variants)) { 3440 return data.variants; 3441 } 3442 } catch (error) {} 3443 } 3444 3445 return []; 3446 } 3447 3448 function getSelectedOptionValues(container) { 3449 const values = []; 3450 3451 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 3452 const checkedInput = group.querySelector('input[type="radio"]:checked'); 3453 const select = group.querySelector('select'); 3454 3455 if (checkedInput) { 3456 values.push(checkedInput.value); 3457 } else if (select) { 3458 values.push(select.value); 3459 } 3460 }); 3461 3462 return values; 3463 } 3464 3465 function getCurrentVariant(container, form, variants) { 3466 const idInput = form && form.querySelector('[name="id"]'); 3467 const selectedId = idInput && idInput.value; 3468 3469 if (selectedId) { 3470 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 3471 if (byId) return byId; 3472 } 3473 3474 const selectedOptions = getSelectedOptionValues(container); 3475 3476 if (selectedOptions.length) { 3477 return variants.find((variant) => { 3478 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 3479 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 3480 }); 3481 } 3482 3483 return null; 3484 } 3485 3486 function setButtonState(form, variant) { 3487 if (!form) return; 3488 3489 const idInput = form.querySelector('[name="id"]'); 3490 const addButton = form.querySelector('[name="add"]'); 3491 const buttonLabel = 3492 addButton && 3493 (addButton.querySelector('.main-atc__label__text') || 3494 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 3495 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 3496 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 3497 3498 if (!addButton || !idInput || !variant) return; 3499 3500 idInput.value = variant.id; 3501 idInput.disabled = false; 3502 3503 if (spinner) spinner.classList.add('hidden'); 3504 3505 if (variant.available) { 3506 addButton.disabled = false; 3507 addButton.removeAttribute('disabled'); 3508 addButton.removeAttribute('aria-disabled'); 3509 addButton.classList.remove('loading'); 3510 3511 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 3512 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 3513 } else { 3514 addButton.disabled = true; 3515 addButton.setAttribute('disabled', 'disabled'); 3516 addButton.setAttribute('aria-disabled', 'true'); 3517 3518 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 3519 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 3520 } 3521 } 3522 3523 function syncContainer(container) { 3524 if (!container) return; 3525 3526 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 3527 if (!form) return; 3528 3529 const variants = parseVariants(container); 3530 if (!variants.length) return; 3531 3532 const variant = getCurrentVariant(container, form, variants); 3533 if (!variant) return; 3534 3535 setButtonState(form, variant); 3536 } 3537 3538 document.addEventListener('change', (event) => { 3539 const quickAddModal = event.target.closest('quick-add-modal'); 3540 const cardVariantSelects = event.target.closest('card-variant-selects'); 3541 3542 if (quickAddModal) { 3543 setTimeout(() => syncContainer(quickAddModal), 80); 3544 setTimeout(() => syncContainer(quickAddModal), 250); 3545 } 3546 3547 if (cardVariantSelects) { 3548 const card = cardVariantSelects.closest('.card-wrapper'); 3549 if (card) { 3550 setTimeout(() => syncContainer(card), 80); 3551 setTimeout(() => syncContainer(card), 250); 3552 } 3553 } 3554 }); 3555 3556 const observer = new MutationObserver((mutations) => { 3557 mutations.forEach((mutation) => {
3558 mutation.addedNodes.forEach((node) => { 3559 if (!(node instanceof HTMLElement)) return; 3560 3561 if (node.matches && node.matches('quick-add-modal')) { 3562 setTimeout(() => syncContainer(node), 150); 3563 } 3564 3565 node.querySelectorAll && 3566 node.querySelectorAll('quick-add-modal').forEach((modal) => { 3567 setTimeout(() => syncContainer(modal), 150); 3568 }); 3569 }); 3570 }); 3571 }); 3572 3573 observer.observe(document.documentElement, { 3574 childList: true, 3575 subtree: true 3576 }); 3577 3578 document.addEventListener('DOMContentLoaded', () => { 3579 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 3580 }); 3581 })(); 3582</script>
3582 3583 3584 3585 3586 3587 </li> 3588 3589 <li> 3590 3591<div class="card-wrapper product-card-wrapper underline-links-hover"> 3592 <div 3593 class=" 3594 card 3595 card--card 3596 card--media 3597 color-background-1 gradient 3598 3599 3600 3601 card--badge-sided 3602 3603 3604 " 3605 style="--ratio-percent: 100%;" 3606 > 3607 <div 3608 class="card__inner ratio" 3609 style="--ratio-percent: 100%;" 3610 ><div class="card__media"> 3611 <div class="media media--transparent media--hover-effect"> 3612 3613 <img 3614 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844 1254w 3615 " 3616 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=533" 3617 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 3618 alt="Performance Bundle - Team Doctors" 3619 class="motion-reduce" 3620 3621 loading="lazy" 3622 3623 width="1254" 3624 height="1254" 3625 id='quick-add-8433936007359-image' 3626 > 3627 3628<img 3629 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322 1080w 3630 " 3631 src="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=533" 3632 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 3633 alt="" 3634 class="motion-reduce" 3635 loading="lazy" 3636 width="1080" 3637 height="1080" 3638 ></div> 3639 </div><div class="card__content"> 3640 <div class="card__information"> 3641 <h3 3642 class="card__heading" 3643 3644 > 3645 <a 3646 href="/products/performance-bundle" 3647 id="StandardCardNoMediaLink--8433936007359" 3648 class="full-unstyled-link" 3649 aria-labelledby="StandardCardNoMediaLink--8433936007359 NoMediaStandardBadge--8433936007359" 3650 > 3651 Performance Bundle 3652 </a> 3653 </h3> 3654 </div> 3655 <div class="card__badge bottom left"> 3656 3657
3658 <span 3659 id="NoMediaStandardBadge--8433936007359" 3660 class="badge badge--bottom-left color-accent-2" 3661 > 3662 <svg 3663 aria-hidden="true" 3664 focusable="false" 3665 class="icon icon-discount color-foreground-text" 3666 viewBox="0 0 12 12" 3667> 3668 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 3669</svg> 3670<span class='nowrap'>SAVE 9%</span> 3671 </span></div> 3672 </div> 3673 </div> 3674 <div class="card__content"> 3675 <div class="card__information"> 3676 <h3 3677 class="card__heading h5" 3678 3679 id="title--8433936007359" 3680 3681 > 3682 <a 3683 href="/products/performance-bundle" 3684 id="CardLink--8433936007359" 3685 class="full-unstyled-link" 3686 aria-labelledby="CardLink--8433936007359 Badge--8433936007359" 3687 > 3688 Performance Bundle 3689 </a> 3690 </h3> 3691 3692 <div class="product-subtitle"> 3693 Core Cecovery Pad + Peak Performance Pad 3694 </div> 3695 3696 <div class="card-information"><span class="caption-large light"></span> 3697<div 3698 class=" 3699 price price--on-sale " 3700> 3701 <div class="price__container"><div class="price__regular"> 3702 <span class="visually-hidden visually-hidden--inline">Regular price</span> 3703 <span class="price-item price-item--regular"> 3704 $99.00 3705 </span> 3706 </div> 3707 <div class="price__sale "> 3708 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 3709 <span class="price-item price-item--sale price-item--last"> 3710 $99.00 3711 </span> 3712 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 3713 <span class="price__compare-price"> 3714 <s class="price-item price-item--regular"> 3715 $109.90 3716 </s> 3717 </span></div> 3718 <small class="unit-price caption hidden"> 3719 <span class="visually-hidden">Unit price</span> 3720 <span class="price-item price-item--last"> 3721 <span></span> 3722 <span aria-hidden="true">/</span> 3723 <span class="visually-hidden"> per </span> 3724 <span> 3725 </span> 3726 </span> 3727 </small> 3728 </div></div> 3729 3730 </div> 3731 </div> 3732 3733<div class="card__badge bottom left"><span 3734 id="Badge--8433936007359" 3735 class="badge badge--bottom-left color-accent-2" 3736 > 3737 9% 3738 </span></div> 3739 </div> 3740 </div> 3741 </div>
3741<script> 3742 (() => { 3743 if (window.cardProductQuickAddVariantFixLoaded) return; 3744 window.cardProductQuickAddVariantFixLoaded = true; 3745 3746 const ADD_TO_CART_TEXT = "Add to cart"; 3747 const SOLD_OUT_TEXT = "Sold out"; 3748 3749 function parseVariants(container) { 3750 if (!container) return []; 3751 3752 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 3753 3754 for (const script of scripts) { 3755 try { 3756 const data = JSON.parse(script.textContent.trim()); 3757 3758 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 3759 return data; 3760 } 3761 3762 if (data && Array.isArray(data.variants)) { 3763 return data.variants; 3764 } 3765 } catch (error) {} 3766 } 3767 3768 return []; 3769 } 3770 3771 function getSelectedOptionValues(container) { 3772 const values = []; 3773 3774 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 3775 const checkedInput = group.querySelector('input[type="radio"]:checked'); 3776 const select = group.querySelector('select'); 3777 3778 if (checkedInput) { 3779 values.push(checkedInput.value); 3780 } else if (select) { 3781 values.push(select.value); 3782 } 3783 }); 3784 3785 return values; 3786 } 3787 3788 function getCurrentVariant(container, form, variants) { 3789 const idInput = form && form.querySelector('[name="id"]'); 3790 const selectedId = idInput && idInput.value; 3791 3792 if (selectedId) { 3793 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 3794 if (byId) return byId; 3795 } 3796 3797 const selectedOptions = getSelectedOptionValues(container); 3798 3799 if (selectedOptions.length) { 3800 return variants.find((variant) => { 3801 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 3802 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 3803 }); 3804 } 3805 3806 return null; 3807 } 3808 3809 function setButtonState(form, variant) { 3810 if (!form) return; 3811 3812 const idInput = form.querySelector('[name="id"]'); 3813 const addButton = form.querySelector('[name="add"]'); 3814 const buttonLabel = 3815 addButton && 3816 (addButton.querySelector('.main-atc__label__text') || 3817 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 3818 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 3819 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 3820 3821 if (!addButton || !idInput || !variant) return; 3822 3823 idInput.value = variant.id; 3824 idInput.disabled = false; 3825 3826 if (spinner) spinner.classList.add('hidden'); 3827 3828 if (variant.available) { 3829 addButton.disabled = false; 3830 addButton.removeAttribute('disabled'); 3831 addButton.removeAttribute('aria-disabled'); 3832 addButton.classList.remove('loading'); 3833 3834 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 3835 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 3836 } else { 3837 addButton.disabled = true; 3838 addButton.setAttribute('disabled', 'disabled'); 3839 addButton.setAttribute('aria-disabled', 'true'); 3840 3841 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 3842 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 3843 } 3844 } 3845 3846 function syncContainer(container) { 3847 if (!container) return; 3848 3849 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 3850 if (!form) return; 3851 3852 const variants = parseVariants(container); 3853 if (!variants.length) return; 3854 3855 const variant = getCurrentVariant(container, form, variants); 3856 if (!variant) return; 3857 3858 setButtonState(form, variant); 3859 } 3860 3861 document.addEventListener('change', (event) => { 3862 const quickAddModal = event.target.closest('quick-add-modal'); 3863 const cardVariantSelects = event.target.closest('card-variant-selects'); 3864 3865 if (quickAddModal) { 3866 setTimeout(() => syncContainer(quickAddModal), 80); 3867 setTimeout(() => syncContainer(quickAddModal), 250); 3868 } 3869 3870 if (cardVariantSelects) { 3871 const card = cardVariantSelects.closest('.card-wrapper'); 3872 if (card) { 3873 setTimeout(() => syncContainer(card), 80); 3874 setTimeout(() => syncContainer(card), 250); 3875 } 3876 } 3877 }); 3878 3879 const observer = new MutationObserver((mutations) => { 3880 mutations.forEach((mutation) => {
3881 mutation.addedNodes.forEach((node) => { 3882 if (!(node instanceof HTMLElement)) return; 3883 3884 if (node.matches && node.matches('quick-add-modal')) { 3885 setTimeout(() => syncContainer(node), 150); 3886 } 3887 3888 node.querySelectorAll && 3889 node.querySelectorAll('quick-add-modal').forEach((modal) => { 3890 setTimeout(() => syncContainer(modal), 150); 3891 }); 3892 }); 3893 }); 3894 }); 3895 3896 observer.observe(document.documentElement, { 3897 childList: true, 3898 subtree: true 3899 }); 3900 3901 document.addEventListener('DOMContentLoaded', () => { 3902 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 3903 }); 3904 })(); 3905</script>
3905 3906 3907 3908 3909 3910 </li> 3911 3912 <li> 3913 3914<div class="card-wrapper product-card-wrapper underline-links-hover"> 3915 <div 3916 class=" 3917 card 3918 card--card 3919 card--media 3920 color-background-1 gradient 3921 3922 3923 3924 card--badge-sided 3925 3926 3927 " 3928 style="--ratio-percent: 100%;" 3929 > 3930 <div 3931 class="card__inner ratio" 3932 style="--ratio-percent: 100%;" 3933 ><div class="card__media"> 3934 <div class="media media--transparent media--hover-effect"> 3935 3936 <img 3937 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006 1080w 3938 " 3939 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533" 3940 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 3941 alt="ð´ Comfort Relief Pad⢠- Team Doctors" 3942 class="motion-reduce" 3943 3944 loading="lazy" 3945 3946 width="1080" 3947 height="1080" 3948 id='quick-add-8358127599807-image' 3949 > 3950 3951<img 3952 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492 1080w 3953 " 3954 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533" 3955 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 3956 alt="" 3957 class="motion-reduce" 3958 loading="lazy" 3959 width="1080" 3960 height="1080" 3961 ></div> 3962 </div><div class="card__content"> 3963 <div class="card__information"> 3964 <h3 3965 class="card__heading" 3966 3967 > 3968 <a 3969 href="/products/biomimetic-comfort-relief-pad" 3970 id="StandardCardNoMediaLink--8358127599807" 3971 class="full-unstyled-link" 3972 aria-labelledby="StandardCardNoMediaLink--8358127599807 NoMediaStandardBadge--8358127599807" 3973 > 3974 ð´ Comfort Relief Pad⢠3975 </a> 3976 </h3> 3977 </div> 3978 <div class="card__badge bottom left"> 3979 3980 </div> 3981 </div> 3982 </div> 3983 <div class="card__content"> 3984 <div class="card__information"> 3985 <h3 3986 class="card__heading h5" 3987 3988 id="title--8358127599807" 3989 3990 > 3991 <a 3992 href="/products/biomimetic-comfort-relief-pad" 3993 id="CardLink--8358127599807" 3994 class="full-unstyled-link" 3995 aria-labelledby="CardLink--8358127599807 Badge--8358127599807" 3996 > 3997 ð´ Comfort Relief Pad⢠3998 </a> 3999 </h3> 4000 4001 <div class="card-information"><span class="caption-large light"></span> 4002<div 4003 class=" 4004 price " 4005> 4006 <div class="price__container"><div class="price__regular">
4007 <span class="visually-hidden visually-hidden--inline">Regular price</span> 4008 <span class="price-item price-item--regular"> 4009 $54.95 4010 </span> 4011 </div> 4012 <div class="price__sale "> 4013 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 4014 <span class="price-item price-item--sale price-item--last"> 4015 $54.95 4016 </span> 4017 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 4018 <span class="price__compare-price"> 4019 <s class="price-item price-item--regular"> 4020 4021 </s> 4022 </span></div> 4023 <small class="unit-price caption hidden"> 4024 <span class="visually-hidden">Unit price</span> 4025 <span class="price-item price-item--last"> 4026 <span></span> 4027 <span aria-hidden="true">/</span> 4028 <span class="visually-hidden"> per </span> 4029 <span> 4030 </span> 4031 </span> 4032 </small> 4033 </div></div> 4034 4035 </div> 4036 </div> 4037 4038<div class="card__badge bottom left"></div> 4039 </div> 4040 </div> 4041 </div>
4041<script> 4042 (() => { 4043 if (window.cardProductQuickAddVariantFixLoaded) return; 4044 window.cardProductQuickAddVariantFixLoaded = true; 4045 4046 const ADD_TO_CART_TEXT = "Add to cart"; 4047 const SOLD_OUT_TEXT = "Sold out"; 4048 4049 function parseVariants(container) { 4050 if (!container) return []; 4051 4052 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 4053 4054 for (const script of scripts) { 4055 try { 4056 const data = JSON.parse(script.textContent.trim()); 4057 4058 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 4059 return data; 4060 } 4061 4062 if (data && Array.isArray(data.variants)) { 4063 return data.variants; 4064 } 4065 } catch (error) {} 4066 } 4067 4068 return []; 4069 } 4070 4071 function getSelectedOptionValues(container) { 4072 const values = []; 4073 4074 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 4075 const checkedInput = group.querySelector('input[type="radio"]:checked'); 4076 const select = group.querySelector('select'); 4077 4078 if (checkedInput) { 4079 values.push(checkedInput.value); 4080 } else if (select) { 4081 values.push(select.value); 4082 } 4083 }); 4084 4085 return values; 4086 } 4087 4088 function getCurrentVariant(container, form, variants) { 4089 const idInput = form && form.querySelector('[name="id"]'); 4090 const selectedId = idInput && idInput.value; 4091 4092 if (selectedId) { 4093 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 4094 if (byId) return byId; 4095 } 4096 4097 const selectedOptions = getSelectedOptionValues(container); 4098 4099 if (selectedOptions.length) { 4100 return variants.find((variant) => { 4101 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 4102 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 4103 }); 4104 } 4105 4106 return null; 4107 } 4108 4109 function setButtonState(form, variant) { 4110 if (!form) return; 4111 4112 const idInput = form.querySelector('[name="id"]'); 4113 const addButton = form.querySelector('[name="add"]'); 4114 const buttonLabel = 4115 addButton && 4116 (addButton.querySelector('.main-atc__label__text') || 4117 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 4118 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 4119 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 4120 4121 if (!addButton || !idInput || !variant) return; 4122 4123 idInput.value = variant.id; 4124 idInput.disabled = false; 4125 4126 if (spinner) spinner.classList.add('hidden'); 4127 4128 if (variant.available) { 4129 addButton.disabled = false; 4130 addButton.removeAttribute('disabled'); 4131 addButton.removeAttribute('aria-disabled'); 4132 addButton.classList.remove('loading'); 4133 4134 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 4135 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 4136 } else { 4137 addButton.disabled = true; 4138 addButton.setAttribute('disabled', 'disabled'); 4139 addButton.setAttribute('aria-disabled', 'true'); 4140 4141 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 4142 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 4143 } 4144 } 4145 4146 function syncContainer(container) { 4147 if (!container) return; 4148 4149 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 4150 if (!form) return; 4151 4152 const variants = parseVariants(container); 4153 if (!variants.length) return; 4154 4155 const variant = getCurrentVariant(container, form, variants); 4156 if (!variant) return; 4157 4158 setButtonState(form, variant); 4159 } 4160 4161 document.addEventListener('change', (event) => { 4162 const quickAddModal = event.target.closest('quick-add-modal'); 4163 const cardVariantSelects = event.target.closest('card-variant-selects'); 4164 4165 if (quickAddModal) { 4166 setTimeout(() => syncContainer(quickAddModal), 80); 4167 setTimeout(() => syncContainer(quickAddModal), 250); 4168 } 4169 4170 if (cardVariantSelects) { 4171 const card = cardVariantSelects.closest('.card-wrapper'); 4172 if (card) { 4173 setTimeout(() => syncContainer(card), 80); 4174 setTimeout(() => syncContainer(card), 250); 4175 } 4176 } 4177 }); 4178 4179 const observer = new MutationObserver((mutations) => { 4180 mutations.forEach((mutation) => {
4181 mutation.addedNodes.forEach((node) => { 4182 if (!(node instanceof HTMLElement)) return; 4183 4184 if (node.matches && node.matches('quick-add-modal')) { 4185 setTimeout(() => syncContainer(node), 150); 4186 } 4187 4188 node.querySelectorAll && 4189 node.querySelectorAll('quick-add-modal').forEach((modal) => { 4190 setTimeout(() => syncContainer(modal), 150); 4191 }); 4192 }); 4193 }); 4194 }); 4195 4196 observer.observe(document.documentElement, { 4197 childList: true, 4198 subtree: true 4199 }); 4200 4201 document.addEventListener('DOMContentLoaded', () => { 4202 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 4203 }); 4204 })(); 4205</script>
4205 4206 4207 4208 4209 4210 </li> 4211 4212 <li> 4213 4214<div class="card-wrapper product-card-wrapper underline-links-hover"> 4215 <div 4216 class=" 4217 card 4218 card--card 4219 card--media 4220 color-background-1 gradient 4221 4222 4223 4224 card--badge-sided 4225 4226 4227 " 4228 style="--ratio-percent: 100%;" 4229 > 4230 <div 4231 class="card__inner ratio" 4232 style="--ratio-percent: 100%;" 4233 ><div class="card__media"> 4234 <div class="media media--transparent media--hover-effect"> 4235 4236 <img 4237 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451 1080w 4238 " 4239 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=533" 4240 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 4241 alt="White" 4242 class="motion-reduce" 4243 4244 loading="lazy" 4245 4246 width="1080" 4247 height="1080" 4248 id='quick-add-8358145917119-image' 4249 > 4250 4251<img 4252 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477 1080w 4253 " 4254 src="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=533" 4255 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 4256 alt="" 4257 class="motion-reduce" 4258 loading="lazy" 4259 width="1080" 4260 height="1080" 4261 ></div> 4262 </div><div class="card__content"> 4263 <div class="card__information"> 4264 <h3 4265 class="card__heading" 4266 4267 > 4268 <a 4269 href="/products/biomimetic-core-recovery-pad" 4270 id="StandardCardNoMediaLink--8358145917119" 4271 class="full-unstyled-link" 4272 aria-labelledby="StandardCardNoMediaLink--8358145917119 NoMediaStandardBadge--8358145917119" 4273 > 4274 ð¡ Core Recovery Pad⢠4275 </a> 4276 </h3> 4277 </div> 4278 <div class="card__badge bottom left"> 4279 4280 </div> 4281 </div> 4282 </div> 4283 <div class="card__content"> 4284 <div class="card__information"> 4285 <h3 4286 class="card__heading h5" 4287 4288 id="title--8358145917119" 4289 4290 > 4291 <a 4292 href="/products/biomimetic-core-recovery-pad" 4293 id="CardLink--8358145917119" 4294 class="full-unstyled-link" 4295 aria-labelledby="CardLink--8358145917119 Badge--8358145917119" 4296 > 4297 ð¡ Core Recovery Pad⢠4298 </a> 4299 </h3> 4300 4301 <div class="card-information"><span class="caption-large light"></span> 4302<div 4303 class=" 4304 price " 4305> 4306 <div class="price__container"><div class="price__regular">
4307 <span class="visually-hidden visually-hidden--inline">Regular price</span> 4308 <span class="price-item price-item--regular"> 4309 $54.95 4310 </span> 4311 </div> 4312 <div class="price__sale "> 4313 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 4314 <span class="price-item price-item--sale price-item--last"> 4315 $54.95 4316 </span> 4317 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 4318 <span class="price__compare-price"> 4319 <s class="price-item price-item--regular"> 4320 4321 </s> 4322 </span></div> 4323 <small class="unit-price caption hidden"> 4324 <span class="visually-hidden">Unit price</span> 4325 <span class="price-item price-item--last"> 4326 <span></span> 4327 <span aria-hidden="true">/</span> 4328 <span class="visually-hidden"> per </span> 4329 <span> 4330 </span> 4331 </span> 4332 </small> 4333 </div></div> 4334 4335 </div> 4336 </div> 4337 4338<div class="card__badge bottom left"></div> 4339 </div> 4340 </div> 4341 </div>
4341<script> 4342 (() => { 4343 if (window.cardProductQuickAddVariantFixLoaded) return; 4344 window.cardProductQuickAddVariantFixLoaded = true; 4345 4346 const ADD_TO_CART_TEXT = "Add to cart"; 4347 const SOLD_OUT_TEXT = "Sold out"; 4348 4349 function parseVariants(container) { 4350 if (!container) return []; 4351 4352 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 4353 4354 for (const script of scripts) { 4355 try { 4356 const data = JSON.parse(script.textContent.trim()); 4357 4358 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 4359 return data; 4360 } 4361 4362 if (data && Array.isArray(data.variants)) { 4363 return data.variants; 4364 } 4365 } catch (error) {} 4366 } 4367 4368 return []; 4369 } 4370 4371 function getSelectedOptionValues(container) { 4372 const values = []; 4373 4374 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 4375 const checkedInput = group.querySelector('input[type="radio"]:checked'); 4376 const select = group.querySelector('select'); 4377 4378 if (checkedInput) { 4379 values.push(checkedInput.value); 4380 } else if (select) { 4381 values.push(select.value); 4382 } 4383 }); 4384 4385 return values; 4386 } 4387 4388 function getCurrentVariant(container, form, variants) { 4389 const idInput = form && form.querySelector('[name="id"]'); 4390 const selectedId = idInput && idInput.value; 4391 4392 if (selectedId) { 4393 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 4394 if (byId) return byId; 4395 } 4396 4397 const selectedOptions = getSelectedOptionValues(container); 4398 4399 if (selectedOptions.length) { 4400 return variants.find((variant) => { 4401 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 4402 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 4403 }); 4404 } 4405 4406 return null; 4407 } 4408 4409 function setButtonState(form, variant) { 4410 if (!form) return; 4411 4412 const idInput = form.querySelector('[name="id"]'); 4413 const addButton = form.querySelector('[name="add"]'); 4414 const buttonLabel = 4415 addButton && 4416 (addButton.querySelector('.main-atc__label__text') || 4417 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 4418 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 4419 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 4420 4421 if (!addButton || !idInput || !variant) return; 4422 4423 idInput.value = variant.id; 4424 idInput.disabled = false; 4425 4426 if (spinner) spinner.classList.add('hidden'); 4427 4428 if (variant.available) { 4429 addButton.disabled = false; 4430 addButton.removeAttribute('disabled'); 4431 addButton.removeAttribute('aria-disabled'); 4432 addButton.classList.remove('loading'); 4433 4434 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 4435 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 4436 } else { 4437 addButton.disabled = true; 4438 addButton.setAttribute('disabled', 'disabled'); 4439 addButton.setAttribute('aria-disabled', 'true'); 4440 4441 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 4442 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 4443 } 4444 } 4445 4446 function syncContainer(container) { 4447 if (!container) return; 4448 4449 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 4450 if (!form) return; 4451 4452 const variants = parseVariants(container); 4453 if (!variants.length) return; 4454 4455 const variant = getCurrentVariant(container, form, variants); 4456 if (!variant) return; 4457 4458 setButtonState(form, variant); 4459 } 4460 4461 document.addEventListener('change', (event) => { 4462 const quickAddModal = event.target.closest('quick-add-modal'); 4463 const cardVariantSelects = event.target.closest('card-variant-selects'); 4464 4465 if (quickAddModal) { 4466 setTimeout(() => syncContainer(quickAddModal), 80); 4467 setTimeout(() => syncContainer(quickAddModal), 250); 4468 } 4469 4470 if (cardVariantSelects) { 4471 const card = cardVariantSelects.closest('.card-wrapper'); 4472 if (card) { 4473 setTimeout(() => syncContainer(card), 80); 4474 setTimeout(() => syncContainer(card), 250); 4475 } 4476 } 4477 }); 4478 4479 const observer = new MutationObserver((mutations) => { 4480 mutations.forEach((mutation) => {
4481 mutation.addedNodes.forEach((node) => { 4482 if (!(node instanceof HTMLElement)) return; 4483 4484 if (node.matches && node.matches('quick-add-modal')) { 4485 setTimeout(() => syncContainer(node), 150); 4486 } 4487 4488 node.querySelectorAll && 4489 node.querySelectorAll('quick-add-modal').forEach((modal) => { 4490 setTimeout(() => syncContainer(modal), 150); 4491 }); 4492 }); 4493 }); 4494 }); 4495 4496 observer.observe(document.documentElement, { 4497 childList: true, 4498 subtree: true 4499 }); 4500 4501 document.addEventListener('DOMContentLoaded', () => { 4502 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 4503 }); 4504 })(); 4505</script>
4505 4506 4507 4508 4509 4510 </li> 4511 4512 <li> 4513 4514<div class="card-wrapper product-card-wrapper underline-links-hover"> 4515 <div 4516 class=" 4517 card 4518 card--card 4519 card--media 4520 color-background-1 gradient 4521 4522 4523 4524 card--badge-sided 4525 4526 4527 " 4528 style="--ratio-percent: 100%;" 4529 > 4530 <div 4531 class="card__inner ratio" 4532 style="--ratio-percent: 100%;" 4533 ><div class="card__media"> 4534 <div class="media media--transparent media--hover-effect"> 4535 4536 <img 4537 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006 1080w 4538 " 4539 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533" 4540 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 4541 alt="ð¢ Peak Performance Pad⢠- Team Doctors" 4542 class="motion-reduce" 4543 4544 loading="lazy" 4545 4546 width="1080" 4547 height="1080" 4548 id='quick-add-8358149750975-image' 4549 > 4550 4551<img 4552 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529 1080w 4553 " 4554 src="//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=533" 4555 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 4556 alt="" 4557 class="motion-reduce" 4558 loading="lazy" 4559 width="1080" 4560 height="1080" 4561 ></div> 4562 </div><div class="card__content"> 4563 <div class="card__information"> 4564 <h3 4565 class="card__heading" 4566 4567 > 4568 <a 4569 href="/products/biomimetic-peak-performance-pad" 4570 id="StandardCardNoMediaLink--8358149750975" 4571 class="full-unstyled-link" 4572 aria-labelledby="StandardCardNoMediaLink--8358149750975 NoMediaStandardBadge--8358149750975" 4573 > 4574 ð¢ Peak Performance Pad⢠4575 </a> 4576 </h3> 4577 </div> 4578 <div class="card__badge bottom left"> 4579 4580 </div> 4581 </div> 4582 </div> 4583 <div class="card__content"> 4584 <div class="card__information"> 4585 <h3 4586 class="card__heading h5" 4587 4588 id="title--8358149750975" 4589 4590 > 4591 <a 4592 href="/products/biomimetic-peak-performance-pad" 4593 id="CardLink--8358149750975" 4594 class="full-unstyled-link" 4595 aria-labelledby="CardLink--8358149750975 Badge--8358149750975" 4596 > 4597 ð¢ Peak Performance Pad⢠4598 </a> 4599 </h3> 4600 4601 <div class="card-information"><span class="caption-large light"></span> 4602<div 4603 class=" 4604 price " 4605> 4606 <div class="price__container"><div class="price__regular">
4607 <span class="visually-hidden visually-hidden--inline">Regular price</span> 4608 <span class="price-item price-item--regular"> 4609 $54.95 4610 </span> 4611 </div> 4612 <div class="price__sale "> 4613 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 4614 <span class="price-item price-item--sale price-item--last"> 4615 $54.95 4616 </span> 4617 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 4618 <span class="price__compare-price"> 4619 <s class="price-item price-item--regular"> 4620 4621 </s> 4622 </span></div> 4623 <small class="unit-price caption hidden"> 4624 <span class="visually-hidden">Unit price</span> 4625 <span class="price-item price-item--last"> 4626 <span></span> 4627 <span aria-hidden="true">/</span> 4628 <span class="visually-hidden"> per </span> 4629 <span> 4630 </span> 4631 </span> 4632 </small> 4633 </div></div> 4634 4635 </div> 4636 </div> 4637 4638<div class="card__badge bottom left"></div> 4639 </div> 4640 </div> 4641 </div>
4641<script> 4642 (() => { 4643 if (window.cardProductQuickAddVariantFixLoaded) return; 4644 window.cardProductQuickAddVariantFixLoaded = true; 4645 4646 const ADD_TO_CART_TEXT = "Add to cart"; 4647 const SOLD_OUT_TEXT = "Sold out"; 4648 4649 function parseVariants(container) { 4650 if (!container) return []; 4651 4652 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 4653 4654 for (const script of scripts) { 4655 try { 4656 const data = JSON.parse(script.textContent.trim()); 4657 4658 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 4659 return data; 4660 } 4661 4662 if (data && Array.isArray(data.variants)) { 4663 return data.variants; 4664 } 4665 } catch (error) {} 4666 } 4667 4668 return []; 4669 } 4670 4671 function getSelectedOptionValues(container) { 4672 const values = []; 4673 4674 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 4675 const checkedInput = group.querySelector('input[type="radio"]:checked'); 4676 const select = group.querySelector('select'); 4677 4678 if (checkedInput) { 4679 values.push(checkedInput.value); 4680 } else if (select) { 4681 values.push(select.value); 4682 } 4683 }); 4684 4685 return values; 4686 } 4687 4688 function getCurrentVariant(container, form, variants) { 4689 const idInput = form && form.querySelector('[name="id"]'); 4690 const selectedId = idInput && idInput.value; 4691 4692 if (selectedId) { 4693 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 4694 if (byId) return byId; 4695 } 4696 4697 const selectedOptions = getSelectedOptionValues(container); 4698 4699 if (selectedOptions.length) { 4700 return variants.find((variant) => { 4701 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 4702 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 4703 }); 4704 } 4705 4706 return null; 4707 } 4708 4709 function setButtonState(form, variant) { 4710 if (!form) return; 4711 4712 const idInput = form.querySelector('[name="id"]'); 4713 const addButton = form.querySelector('[name="add"]'); 4714 const buttonLabel = 4715 addButton && 4716 (addButton.querySelector('.main-atc__label__text') || 4717 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 4718 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 4719 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 4720 4721 if (!addButton || !idInput || !variant) return; 4722 4723 idInput.value = variant.id; 4724 idInput.disabled = false; 4725 4726 if (spinner) spinner.classList.add('hidden'); 4727 4728 if (variant.available) { 4729 addButton.disabled = false; 4730 addButton.removeAttribute('disabled'); 4731 addButton.removeAttribute('aria-disabled'); 4732 addButton.classList.remove('loading'); 4733 4734 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 4735 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 4736 } else { 4737 addButton.disabled = true; 4738 addButton.setAttribute('disabled', 'disabled'); 4739 addButton.setAttribute('aria-disabled', 'true'); 4740 4741 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 4742 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 4743 } 4744 } 4745 4746 function syncContainer(container) { 4747 if (!container) return; 4748 4749 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 4750 if (!form) return; 4751 4752 const variants = parseVariants(container); 4753 if (!variants.length) return; 4754 4755 const variant = getCurrentVariant(container, form, variants); 4756 if (!variant) return; 4757 4758 setButtonState(form, variant); 4759 } 4760 4761 document.addEventListener('change', (event) => { 4762 const quickAddModal = event.target.closest('quick-add-modal'); 4763 const cardVariantSelects = event.target.closest('card-variant-selects'); 4764 4765 if (quickAddModal) { 4766 setTimeout(() => syncContainer(quickAddModal), 80); 4767 setTimeout(() => syncContainer(quickAddModal), 250); 4768 } 4769 4770 if (cardVariantSelects) { 4771 const card = cardVariantSelects.closest('.card-wrapper'); 4772 if (card) { 4773 setTimeout(() => syncContainer(card), 80); 4774 setTimeout(() => syncContainer(card), 250); 4775 } 4776 } 4777 }); 4778 4779 const observer = new MutationObserver((mutations) => { 4780 mutations.forEach((mutation) => {
4781 mutation.addedNodes.forEach((node) => { 4782 if (!(node instanceof HTMLElement)) return; 4783 4784 if (node.matches && node.matches('quick-add-modal')) { 4785 setTimeout(() => syncContainer(node), 150); 4786 } 4787 4788 node.querySelectorAll && 4789 node.querySelectorAll('quick-add-modal').forEach((modal) => { 4790 setTimeout(() => syncContainer(modal), 150); 4791 }); 4792 }); 4793 }); 4794 }); 4795 4796 observer.observe(document.documentElement, { 4797 childList: true, 4798 subtree: true 4799 }); 4800 4801 document.addEventListener('DOMContentLoaded', () => { 4802 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 4803 }); 4804 })(); 4805</script>
4805 4806 4807 4808 4809 4810 </li> 4811 4812 4813</ul> 4814 4815 </div> 4816 </details></li><li><details id="Details-menu-drawer-submenu-2"> 4817 <summary class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 4818 4819 All Products 4820 <svg 4821 viewBox="0 0 14 10" 4822 fill="none" 4823 aria-hidden="true" 4824 focusable="false" 4825 class="icon icon-arrow" 4826 xmlns="http://www.w3.org/2000/svg" 4827> 4828 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 4829</svg> 4830 4831 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 4832 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 4833</svg> 4834 4835 </summary> 4836 <div id="childlink-all-products" class="menu-drawer__submenu has-submenu gradient motion-reduce"> 4837 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 4838 <svg 4839 viewBox="0 0 14 10" 4840 fill="none" 4841 aria-hidden="true" 4842 focusable="false" 4843 class="icon icon-arrow" 4844 xmlns="http://www.w3.org/2000/svg" 4845> 4846 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 4847</svg> 4848 4849 All Products 4850 </button> 4851 4852 <ul class="products-mega-menu__cards products-mega-menu__cards--mobile"> 4853 4854 4855 4856 4857 <li> 4858 4859<div class="card-wrapper product-card-wrapper underline-links-hover"> 4860 <div 4861 class=" 4862 card 4863 card--card 4864 card--media 4865 color-background-1 gradient 4866 4867 4868 4869 card--badge-sided 4870 4871 4872 " 4873 style="--ratio-percent: 100%;" 4874 > 4875 <div 4876 class="card__inner ratio" 4877 style="--ratio-percent: 100%;" 4878 ><div class="card__media"> 4879 <div class="media media--transparent media--hover-effect"> 4880 4881 <img 4882 srcset="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914 w 4883 " 4884 src="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914&width=533" 4885 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 4886 alt="The Vibeassage Pro® with the full 3-pad Biomimetic Systemâ¢" 4887 class="motion-reduce" 4888 4889 loading="lazy" 4890 4891 width="" 4892 height="" 4893 id='quick-add-7253705130175-image' 4894 > 4895 4896<img 4897 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=360 360w,//teamdoctors.c
4897om/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339 810w 4898 " 4899 src="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533" 4900 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 4901 alt="" 4902 class="motion-reduce" 4903 loading="lazy" 4904 width="810" 4905 height="605" 4906 ></div> 4907 </div><div class="card__content"> 4908 <div class="card__information"> 4909 <h3 4910 class="card__heading" 4911 4912 > 4913 <a 4914 href="/products/vibeassage-pro" 4915 id="StandardCardNoMediaLink--7253705130175" 4916 class="full-unstyled-link" 4917 aria-labelledby="StandardCardNoMediaLink--7253705130175 NoMediaStandardBadge--7253705130175" 4918 > 4919 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠4920 </a> 4921 </h3> 4922 </div> 4923 <div class="card__badge bottom left"> 4924 4925 4926 <span 4927 id="NoMediaStandardBadge--7253705130175" 4928 class="badge badge--bottom-left color-accent-2" 4929 > 4930 <svg 4931 aria-hidden="true" 4932 focusable="false" 4933 class="icon icon-discount color-foreground-text" 4934 viewBox="0 0 12 12" 4935> 4936 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 4937</svg> 4938<span class='nowrap'>SAVE 9%</span> 4939 </span></div> 4940 </div> 4941 </div> 4942 <div class="card__content"> 4943 <div class="card__information"> 4944 <h3 4945 class="card__heading h5" 4946 4947 id="title--7253705130175" 4948 4949 > 4950 <a 4951 href="/products/vibeassage-pro" 4952 id="CardLink--7253705130175" 4953 class="full-unstyled-link" 4954 aria-labelledby="CardLink--7253705130175 Badge--7253705130175" 4955 > 4956 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠4957 </a> 4958 </h3> 4959 4960 <div class="card-information"><span class="caption-large light"></span> 4961<div 4962 class=" 4963 price price--on-sale " 4964> 4965 <div class="price__container"><div class="price__regular"> 4966 <span class="visually-hidden visually-hidden--inline">Regular price</span> 4967 <span class="price-item price-item--regular"> 4968 $1,579.00 4969 </span> 4970 </div> 4971 <div class="price__sale "> 4972 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 4973 <span class="price-item price-item--sale price-item--last"> 4974 $1,579.00 4975 </span> 4976 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 4977 <span class="price__compare-price"> 4978 <s class="price-item price-item--regular"> 4979 $1,749.00 4980 </s> 4981 </span></div> 4982 <small class="unit-price caption hidden"> 4983 <span class="visually-hidden">Unit price</span> 4984 <span class="price-item price-item--last"> 4985 <span></span> 4986 <span aria-hidden="true">/</span> 4987 <span class="visually-hidden"> per </span> 4988 <span> 4989 </span> 4990 </span> 4991 </small> 4992 </div></div> 4993 4994 </div> 4995 </div> 4996 4997<div class="card__badge bottom left"><span 4998 id="Badge--7253705130175" 4999 class="badge badge--bottom-left color-accent-2" 5000 > 5001 9% 5002 </span></div> 5003 </div> 5004 </div> 5005 </div>
5005<script> 5006 (() => { 5007 if (window.cardProductQuickAddVariantFixLoaded) return; 5008 window.cardProductQuickAddVariantFixLoaded = true; 5009 5010 const ADD_TO_CART_TEXT = "Add to cart"; 5011 const SOLD_OUT_TEXT = "Sold out"; 5012 5013 function parseVariants(container) { 5014 if (!container) return []; 5015 5016 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 5017 5018 for (const script of scripts) { 5019 try { 5020 const data = JSON.parse(script.textContent.trim()); 5021 5022 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 5023 return data; 5024 } 5025 5026 if (data && Array.isArray(data.variants)) { 5027 return data.variants; 5028 } 5029 } catch (error) {} 5030 } 5031 5032 return []; 5033 } 5034 5035 function getSelectedOptionValues(container) { 5036 const values = []; 5037 5038 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 5039 const checkedInput = group.querySelector('input[type="radio"]:checked'); 5040 const select = group.querySelector('select'); 5041 5042 if (checkedInput) { 5043 values.push(checkedInput.value); 5044 } else if (select) { 5045 values.push(select.value); 5046 } 5047 }); 5048 5049 return values; 5050 } 5051 5052 function getCurrentVariant(container, form, variants) { 5053 const idInput = form && form.querySelector('[name="id"]'); 5054 const selectedId = idInput && idInput.value; 5055 5056 if (selectedId) { 5057 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 5058 if (byId) return byId; 5059 } 5060 5061 const selectedOptions = getSelectedOptionValues(container); 5062 5063 if (selectedOptions.length) { 5064 return variants.find((variant) => { 5065 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 5066 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 5067 }); 5068 } 5069 5070 return null; 5071 } 5072 5073 function setButtonState(form, variant) { 5074 if (!form) return; 5075 5076 const idInput = form.querySelector('[name="id"]'); 5077 const addButton = form.querySelector('[name="add"]'); 5078 const buttonLabel = 5079 addButton && 5080 (addButton.querySelector('.main-atc__label__text') || 5081 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 5082 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 5083 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 5084 5085 if (!addButton || !idInput || !variant) return; 5086 5087 idInput.value = variant.id; 5088 idInput.disabled = false; 5089 5090 if (spinner) spinner.classList.add('hidden'); 5091 5092 if (variant.available) { 5093 addButton.disabled = false; 5094 addButton.removeAttribute('disabled'); 5095 addButton.removeAttribute('aria-disabled'); 5096 addButton.classList.remove('loading'); 5097 5098 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 5099 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 5100 } else { 5101 addButton.disabled = true; 5102 addButton.setAttribute('disabled', 'disabled'); 5103 addButton.setAttribute('aria-disabled', 'true'); 5104 5105 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 5106 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 5107 } 5108 } 5109 5110 function syncContainer(container) { 5111 if (!container) return; 5112 5113 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 5114 if (!form) return; 5115 5116 const variants = parseVariants(container); 5117 if (!variants.length) return; 5118 5119 const variant = getCurrentVariant(container, form, variants); 5120 if (!variant) return; 5121 5122 setButtonState(form, variant); 5123 } 5124 5125 document.addEventListener('change', (event) => { 5126 const quickAddModal = event.target.closest('quick-add-modal'); 5127 const cardVariantSelects = event.target.closest('card-variant-selects'); 5128 5129 if (quickAddModal) { 5130 setTimeout(() => syncContainer(quickAddModal), 80); 5131 setTimeout(() => syncContainer(quickAddModal), 250); 5132 } 5133 5134 if (cardVariantSelects) { 5135 const card = cardVariantSelects.closest('.card-wrapper'); 5136 if (card) { 5137 setTimeout(() => syncContainer(card), 80); 5138 setTimeout(() => syncContainer(card), 250); 5139 } 5140 } 5141 }); 5142 5143 const observer = new MutationObserver((mutations) => { 5144 mutations.forEach((mutation) => {
5145 mutation.addedNodes.forEach((node) => { 5146 if (!(node instanceof HTMLElement)) return; 5147 5148 if (node.matches && node.matches('quick-add-modal')) { 5149 setTimeout(() => syncContainer(node), 150); 5150 } 5151 5152 node.querySelectorAll && 5153 node.querySelectorAll('quick-add-modal').forEach((modal) => { 5154 setTimeout(() => syncContainer(modal), 150); 5155 }); 5156 }); 5157 }); 5158 }); 5159 5160 observer.observe(document.documentElement, { 5161 childList: true, 5162 subtree: true 5163 }); 5164 5165 document.addEventListener('DOMContentLoaded', () => { 5166 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 5167 }); 5168 })(); 5169</script>
5169 5170 5171 5172 5173 5174 </li> 5175 5176 <li> 5177 5178<div class="card-wrapper product-card-wrapper underline-links-hover"> 5179 <div 5180 class=" 5181 card 5182 card--card 5183 card--media 5184 color-background-1 gradient 5185 5186 5187 5188 card--badge-sided 5189 5190 5191 " 5192 style="--ratio-percent: 100%;" 5193 > 5194 <div 5195 class="card__inner ratio" 5196 style="--ratio-percent: 100%;" 5197 ><div class="card__media"> 5198 <div class="media media--transparent media--hover-effect"> 5199 5200 <img 5201 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006 1080w 5202 " 5203 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533" 5204 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 5205 alt="ð¢ Peak Performance Pad⢠- Team Doctors" 5206 class="motion-reduce" 5207 5208 loading="lazy" 5209 5210 width="1080" 5211 height="1080" 5212 id='quick-add-8358149750975-image' 5213 > 5214 5215<img 5216 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529 1080w 5217 " 5218 src="//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=533" 5219 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 5220 alt="" 5221 class="motion-reduce" 5222 loading="lazy" 5223 width="1080" 5224 height="1080" 5225 ></div> 5226 </div><div class="card__content"> 5227 <div class="card__information"> 5228 <h3 5229 class="card__heading" 5230 5231 > 5232 <a 5233 href="/products/biomimetic-peak-performance-pad" 5234 id="StandardCardNoMediaLink--8358149750975" 5235 class="full-unstyled-link" 5236 aria-labelledby="StandardCardNoMediaLink--8358149750975 NoMediaStandardBadge--8358149750975" 5237 > 5238 ð¢ Peak Performance Pad⢠5239 </a> 5240 </h3> 5241 </div> 5242 <div class="card__badge bottom left"> 5243 5244 </div> 5245 </div> 5246 </div> 5247 <div class="card__content"> 5248 <div class="card__information"> 5249 <h3 5250 class="card__heading h5" 5251 5252 id="title--8358149750975" 5253 5254 > 5255 <a 5256 href="/products/biomimetic-peak-performance-pad" 5257 id="CardLink--8358149750975" 5258 class="full-unstyled-link" 5259 aria-labelledby="CardLink--8358149750975 Badge--8358149750975" 5260 > 5261 ð¢ Peak Performance Pad⢠5262 </a> 5263 </h3> 5264 5265 <div class="card-information"><span class="caption-large light"></span> 5266<div 5267 class=" 5268 price " 5269> 5270 <div class="price__container"><div class="price__regular">
5271 <span class="visually-hidden visually-hidden--inline">Regular price</span> 5272 <span class="price-item price-item--regular"> 5273 $54.95 5274 </span> 5275 </div> 5276 <div class="price__sale "> 5277 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 5278 <span class="price-item price-item--sale price-item--last"> 5279 $54.95 5280 </span> 5281 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 5282 <span class="price__compare-price"> 5283 <s class="price-item price-item--regular"> 5284 5285 </s> 5286 </span></div> 5287 <small class="unit-price caption hidden"> 5288 <span class="visually-hidden">Unit price</span> 5289 <span class="price-item price-item--last"> 5290 <span></span> 5291 <span aria-hidden="true">/</span> 5292 <span class="visually-hidden"> per </span> 5293 <span> 5294 </span> 5295 </span> 5296 </small> 5297 </div></div> 5298 5299 </div> 5300 </div> 5301 5302<div class="card__badge bottom left"></div> 5303 </div> 5304 </div> 5305 </div>
5305<script> 5306 (() => { 5307 if (window.cardProductQuickAddVariantFixLoaded) return; 5308 window.cardProductQuickAddVariantFixLoaded = true; 5309 5310 const ADD_TO_CART_TEXT = "Add to cart"; 5311 const SOLD_OUT_TEXT = "Sold out"; 5312 5313 function parseVariants(container) { 5314 if (!container) return []; 5315 5316 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 5317 5318 for (const script of scripts) { 5319 try { 5320 const data = JSON.parse(script.textContent.trim()); 5321 5322 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 5323 return data; 5324 } 5325 5326 if (data && Array.isArray(data.variants)) { 5327 return data.variants; 5328 } 5329 } catch (error) {} 5330 } 5331 5332 return []; 5333 } 5334 5335 function getSelectedOptionValues(container) { 5336 const values = []; 5337 5338 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 5339 const checkedInput = group.querySelector('input[type="radio"]:checked'); 5340 const select = group.querySelector('select'); 5341 5342 if (checkedInput) { 5343 values.push(checkedInput.value); 5344 } else if (select) { 5345 values.push(select.value); 5346 } 5347 }); 5348 5349 return values; 5350 } 5351 5352 function getCurrentVariant(container, form, variants) { 5353 const idInput = form && form.querySelector('[name="id"]'); 5354 const selectedId = idInput && idInput.value; 5355 5356 if (selectedId) { 5357 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 5358 if (byId) return byId; 5359 } 5360 5361 const selectedOptions = getSelectedOptionValues(container); 5362 5363 if (selectedOptions.length) { 5364 return variants.find((variant) => { 5365 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 5366 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 5367 }); 5368 } 5369 5370 return null; 5371 } 5372 5373 function setButtonState(form, variant) { 5374 if (!form) return; 5375 5376 const idInput = form.querySelector('[name="id"]'); 5377 const addButton = form.querySelector('[name="add"]'); 5378 const buttonLabel = 5379 addButton && 5380 (addButton.querySelector('.main-atc__label__text') || 5381 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 5382 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 5383 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 5384 5385 if (!addButton || !idInput || !variant) return; 5386 5387 idInput.value = variant.id; 5388 idInput.disabled = false; 5389 5390 if (spinner) spinner.classList.add('hidden'); 5391 5392 if (variant.available) { 5393 addButton.disabled = false; 5394 addButton.removeAttribute('disabled'); 5395 addButton.removeAttribute('aria-disabled'); 5396 addButton.classList.remove('loading'); 5397 5398 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 5399 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 5400 } else { 5401 addButton.disabled = true; 5402 addButton.setAttribute('disabled', 'disabled'); 5403 addButton.setAttribute('aria-disabled', 'true'); 5404 5405 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 5406 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 5407 } 5408 } 5409 5410 function syncContainer(container) { 5411 if (!container) return; 5412 5413 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 5414 if (!form) return; 5415 5416 const variants = parseVariants(container); 5417 if (!variants.length) return; 5418 5419 const variant = getCurrentVariant(container, form, variants); 5420 if (!variant) return; 5421 5422 setButtonState(form, variant); 5423 } 5424 5425 document.addEventListener('change', (event) => { 5426 const quickAddModal = event.target.closest('quick-add-modal'); 5427 const cardVariantSelects = event.target.closest('card-variant-selects'); 5428 5429 if (quickAddModal) { 5430 setTimeout(() => syncContainer(quickAddModal), 80); 5431 setTimeout(() => syncContainer(quickAddModal), 250); 5432 } 5433 5434 if (cardVariantSelects) { 5435 const card = cardVariantSelects.closest('.card-wrapper'); 5436 if (card) { 5437 setTimeout(() => syncContainer(card), 80); 5438 setTimeout(() => syncContainer(card), 250); 5439 } 5440 } 5441 }); 5442 5443 const observer = new MutationObserver((mutations) => { 5444 mutations.forEach((mutation) => {
5445 mutation.addedNodes.forEach((node) => { 5446 if (!(node instanceof HTMLElement)) return; 5447 5448 if (node.matches && node.matches('quick-add-modal')) { 5449 setTimeout(() => syncContainer(node), 150); 5450 } 5451 5452 node.querySelectorAll && 5453 node.querySelectorAll('quick-add-modal').forEach((modal) => { 5454 setTimeout(() => syncContainer(modal), 150); 5455 }); 5456 }); 5457 }); 5458 }); 5459 5460 observer.observe(document.documentElement, { 5461 childList: true, 5462 subtree: true 5463 }); 5464 5465 document.addEventListener('DOMContentLoaded', () => { 5466 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 5467 }); 5468 })(); 5469</script>
5469 5470 5471 5472 5473 5474 </li> 5475 5476 <li> 5477 5478<div class="card-wrapper product-card-wrapper underline-links-hover"> 5479 <div 5480 class=" 5481 card 5482 card--card 5483 card--media 5484 color-background-1 gradient 5485 5486 5487 5488 card--badge-sided 5489 5490 5491 " 5492 style="--ratio-percent: 100%;" 5493 > 5494 <div 5495 class="card__inner ratio" 5496 style="--ratio-percent: 100%;" 5497 ><div class="card__media"> 5498 <div class="media media--transparent media--hover-effect"> 5499 5500 <img 5501 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451 1080w 5502 " 5503 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=533" 5504 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 5505 alt="White" 5506 class="motion-reduce" 5507 5508 loading="lazy" 5509 5510 width="1080" 5511 height="1080" 5512 id='quick-add-8358145917119-image' 5513 > 5514 5515<img 5516 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477 1080w 5517 " 5518 src="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=533" 5519 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 5520 alt="" 5521 class="motion-reduce" 5522 loading="lazy" 5523 width="1080" 5524 height="1080" 5525 ></div> 5526 </div><div class="card__content"> 5527 <div class="card__information"> 5528 <h3 5529 class="card__heading" 5530 5531 > 5532 <a 5533 href="/products/biomimetic-core-recovery-pad" 5534 id="StandardCardNoMediaLink--8358145917119" 5535 class="full-unstyled-link" 5536 aria-labelledby="StandardCardNoMediaLink--8358145917119 NoMediaStandardBadge--8358145917119" 5537 > 5538 ð¡ Core Recovery Pad⢠5539 </a> 5540 </h3> 5541 </div> 5542 <div class="card__badge bottom left"> 5543 5544 </div> 5545 </div> 5546 </div> 5547 <div class="card__content"> 5548 <div class="card__information"> 5549 <h3 5550 class="card__heading h5" 5551 5552 id="title--8358145917119" 5553 5554 > 5555 <a 5556 href="/products/biomimetic-core-recovery-pad" 5557 id="CardLink--8358145917119" 5558 class="full-unstyled-link" 5559 aria-labelledby="CardLink--8358145917119 Badge--8358145917119" 5560 > 5561 ð¡ Core Recovery Pad⢠5562 </a> 5563 </h3> 5564 5565 <div class="card-information"><span class="caption-large light"></span> 5566<div 5567 class=" 5568 price " 5569> 5570 <div class="price__container"><div class="price__regular">
5571 <span class="visually-hidden visually-hidden--inline">Regular price</span> 5572 <span class="price-item price-item--regular"> 5573 $54.95 5574 </span> 5575 </div> 5576 <div class="price__sale "> 5577 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 5578 <span class="price-item price-item--sale price-item--last"> 5579 $54.95 5580 </span> 5581 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 5582 <span class="price__compare-price"> 5583 <s class="price-item price-item--regular"> 5584 5585 </s> 5586 </span></div> 5587 <small class="unit-price caption hidden"> 5588 <span class="visually-hidden">Unit price</span> 5589 <span class="price-item price-item--last"> 5590 <span></span> 5591 <span aria-hidden="true">/</span> 5592 <span class="visually-hidden"> per </span> 5593 <span> 5594 </span> 5595 </span> 5596 </small> 5597 </div></div> 5598 5599 </div> 5600 </div> 5601 5602<div class="card__badge bottom left"></div> 5603 </div> 5604 </div> 5605 </div>
5605<script> 5606 (() => { 5607 if (window.cardProductQuickAddVariantFixLoaded) return; 5608 window.cardProductQuickAddVariantFixLoaded = true; 5609 5610 const ADD_TO_CART_TEXT = "Add to cart"; 5611 const SOLD_OUT_TEXT = "Sold out"; 5612 5613 function parseVariants(container) { 5614 if (!container) return []; 5615 5616 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 5617 5618 for (const script of scripts) { 5619 try { 5620 const data = JSON.parse(script.textContent.trim()); 5621 5622 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 5623 return data; 5624 } 5625 5626 if (data && Array.isArray(data.variants)) { 5627 return data.variants; 5628 } 5629 } catch (error) {} 5630 } 5631 5632 return []; 5633 } 5634 5635 function getSelectedOptionValues(container) { 5636 const values = []; 5637 5638 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 5639 const checkedInput = group.querySelector('input[type="radio"]:checked'); 5640 const select = group.querySelector('select'); 5641 5642 if (checkedInput) { 5643 values.push(checkedInput.value); 5644 } else if (select) { 5645 values.push(select.value); 5646 } 5647 }); 5648 5649 return values; 5650 } 5651 5652 function getCurrentVariant(container, form, variants) { 5653 const idInput = form && form.querySelector('[name="id"]'); 5654 const selectedId = idInput && idInput.value; 5655 5656 if (selectedId) { 5657 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 5658 if (byId) return byId; 5659 } 5660 5661 const selectedOptions = getSelectedOptionValues(container); 5662 5663 if (selectedOptions.length) { 5664 return variants.find((variant) => { 5665 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 5666 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 5667 }); 5668 } 5669 5670 return null; 5671 } 5672 5673 function setButtonState(form, variant) { 5674 if (!form) return; 5675 5676 const idInput = form.querySelector('[name="id"]'); 5677 const addButton = form.querySelector('[name="add"]'); 5678 const buttonLabel = 5679 addButton && 5680 (addButton.querySelector('.main-atc__label__text') || 5681 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 5682 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 5683 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 5684 5685 if (!addButton || !idInput || !variant) return; 5686 5687 idInput.value = variant.id; 5688 idInput.disabled = false; 5689 5690 if (spinner) spinner.classList.add('hidden'); 5691 5692 if (variant.available) { 5693 addButton.disabled = false; 5694 addButton.removeAttribute('disabled'); 5695 addButton.removeAttribute('aria-disabled'); 5696 addButton.classList.remove('loading'); 5697 5698 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 5699 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 5700 } else { 5701 addButton.disabled = true; 5702 addButton.setAttribute('disabled', 'disabled'); 5703 addButton.setAttribute('aria-disabled', 'true'); 5704 5705 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 5706 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 5707 } 5708 } 5709 5710 function syncContainer(container) { 5711 if (!container) return; 5712 5713 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 5714 if (!form) return; 5715 5716 const variants = parseVariants(container); 5717 if (!variants.length) return; 5718 5719 const variant = getCurrentVariant(container, form, variants); 5720 if (!variant) return; 5721 5722 setButtonState(form, variant); 5723 } 5724 5725 document.addEventListener('change', (event) => { 5726 const quickAddModal = event.target.closest('quick-add-modal'); 5727 const cardVariantSelects = event.target.closest('card-variant-selects'); 5728 5729 if (quickAddModal) { 5730 setTimeout(() => syncContainer(quickAddModal), 80); 5731 setTimeout(() => syncContainer(quickAddModal), 250); 5732 } 5733 5734 if (cardVariantSelects) { 5735 const card = cardVariantSelects.closest('.card-wrapper'); 5736 if (card) { 5737 setTimeout(() => syncContainer(card), 80); 5738 setTimeout(() => syncContainer(card), 250); 5739 } 5740 } 5741 }); 5742 5743 const observer = new MutationObserver((mutations) => { 5744 mutations.forEach((mutation) => {
5745 mutation.addedNodes.forEach((node) => { 5746 if (!(node instanceof HTMLElement)) return; 5747 5748 if (node.matches && node.matches('quick-add-modal')) { 5749 setTimeout(() => syncContainer(node), 150); 5750 } 5751 5752 node.querySelectorAll && 5753 node.querySelectorAll('quick-add-modal').forEach((modal) => { 5754 setTimeout(() => syncContainer(modal), 150); 5755 }); 5756 }); 5757 }); 5758 }); 5759 5760 observer.observe(document.documentElement, { 5761 childList: true, 5762 subtree: true 5763 }); 5764 5765 document.addEventListener('DOMContentLoaded', () => { 5766 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 5767 }); 5768 })(); 5769</script>
5769 5770 5771 5772 5773 5774 </li> 5775 5776 <li> 5777 5778<div class="card-wrapper product-card-wrapper underline-links-hover"> 5779 <div 5780 class=" 5781 card 5782 card--card 5783 card--media 5784 color-background-1 gradient 5785 5786 5787 5788 card--badge-sided 5789 5790 5791 " 5792 style="--ratio-percent: 100%;" 5793 > 5794 <div 5795 class="card__inner ratio" 5796 style="--ratio-percent: 100%;" 5797 ><div class="card__media"> 5798 <div class="media media--transparent media--hover-effect"> 5799 5800 <img 5801 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006 1080w 5802 " 5803 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533" 5804 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 5805 alt="ð´ Comfort Relief Pad⢠- Team Doctors" 5806 class="motion-reduce" 5807 5808 loading="lazy" 5809 5810 width="1080" 5811 height="1080" 5812 id='quick-add-8358127599807-image' 5813 > 5814 5815<img 5816 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492 1080w 5817 " 5818 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533" 5819 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 5820 alt="" 5821 class="motion-reduce" 5822 loading="lazy" 5823 width="1080" 5824 height="1080" 5825 ></div> 5826 </div><div class="card__content"> 5827 <div class="card__information"> 5828 <h3 5829 class="card__heading" 5830 5831 > 5832 <a 5833 href="/products/biomimetic-comfort-relief-pad" 5834 id="StandardCardNoMediaLink--8358127599807" 5835 class="full-unstyled-link" 5836 aria-labelledby="StandardCardNoMediaLink--8358127599807 NoMediaStandardBadge--8358127599807" 5837 > 5838 ð´ Comfort Relief Pad⢠5839 </a> 5840 </h3> 5841 </div> 5842 <div class="card__badge bottom left"> 5843 5844 </div> 5845 </div> 5846 </div> 5847 <div class="card__content"> 5848 <div class="card__information"> 5849 <h3 5850 class="card__heading h5" 5851 5852 id="title--8358127599807" 5853 5854 > 5855 <a 5856 href="/products/biomimetic-comfort-relief-pad" 5857 id="CardLink--8358127599807" 5858 class="full-unstyled-link" 5859 aria-labelledby="CardLink--8358127599807 Badge--8358127599807" 5860 > 5861 ð´ Comfort Relief Pad⢠5862 </a> 5863 </h3> 5864 5865 <div class="card-information"><span class="caption-large light"></span> 5866<div 5867 class=" 5868 price " 5869> 5870 <div class="price__container"><div class="price__regular">
5871 <span class="visually-hidden visually-hidden--inline">Regular price</span> 5872 <span class="price-item price-item--regular"> 5873 $54.95 5874 </span> 5875 </div> 5876 <div class="price__sale "> 5877 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 5878 <span class="price-item price-item--sale price-item--last"> 5879 $54.95 5880 </span> 5881 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 5882 <span class="price__compare-price"> 5883 <s class="price-item price-item--regular"> 5884 5885 </s> 5886 </span></div> 5887 <small class="unit-price caption hidden"> 5888 <span class="visually-hidden">Unit price</span> 5889 <span class="price-item price-item--last"> 5890 <span></span> 5891 <span aria-hidden="true">/</span> 5892 <span class="visually-hidden"> per </span> 5893 <span> 5894 </span> 5895 </span> 5896 </small> 5897 </div></div> 5898 5899 </div> 5900 </div> 5901 5902<div class="card__badge bottom left"></div> 5903 </div> 5904 </div> 5905 </div>
5905<script> 5906 (() => { 5907 if (window.cardProductQuickAddVariantFixLoaded) return; 5908 window.cardProductQuickAddVariantFixLoaded = true; 5909 5910 const ADD_TO_CART_TEXT = "Add to cart"; 5911 const SOLD_OUT_TEXT = "Sold out"; 5912 5913 function parseVariants(container) { 5914 if (!container) return []; 5915 5916 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 5917 5918 for (const script of scripts) { 5919 try { 5920 const data = JSON.parse(script.textContent.trim()); 5921 5922 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 5923 return data; 5924 } 5925 5926 if (data && Array.isArray(data.variants)) { 5927 return data.variants; 5928 } 5929 } catch (error) {} 5930 } 5931 5932 return []; 5933 } 5934 5935 function getSelectedOptionValues(container) { 5936 const values = []; 5937 5938 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 5939 const checkedInput = group.querySelector('input[type="radio"]:checked'); 5940 const select = group.querySelector('select'); 5941 5942 if (checkedInput) { 5943 values.push(checkedInput.value); 5944 } else if (select) { 5945 values.push(select.value); 5946 } 5947 }); 5948 5949 return values; 5950 } 5951 5952 function getCurrentVariant(container, form, variants) { 5953 const idInput = form && form.querySelector('[name="id"]'); 5954 const selectedId = idInput && idInput.value; 5955 5956 if (selectedId) { 5957 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 5958 if (byId) return byId; 5959 } 5960 5961 const selectedOptions = getSelectedOptionValues(container); 5962 5963 if (selectedOptions.length) { 5964 return variants.find((variant) => { 5965 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 5966 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 5967 }); 5968 } 5969 5970 return null; 5971 } 5972 5973 function setButtonState(form, variant) { 5974 if (!form) return; 5975 5976 const idInput = form.querySelector('[name="id"]'); 5977 const addButton = form.querySelector('[name="add"]'); 5978 const buttonLabel = 5979 addButton && 5980 (addButton.querySelector('.main-atc__label__text') || 5981 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 5982 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 5983 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 5984 5985 if (!addButton || !idInput || !variant) return; 5986 5987 idInput.value = variant.id; 5988 idInput.disabled = false; 5989 5990 if (spinner) spinner.classList.add('hidden'); 5991 5992 if (variant.available) { 5993 addButton.disabled = false; 5994 addButton.removeAttribute('disabled'); 5995 addButton.removeAttribute('aria-disabled'); 5996 addButton.classList.remove('loading'); 5997 5998 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 5999 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 6000 } else { 6001 addButton.disabled = true; 6002 addButton.setAttribute('disabled', 'disabled'); 6003 addButton.setAttribute('aria-disabled', 'true'); 6004 6005 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 6006 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 6007 } 6008 } 6009 6010 function syncContainer(container) { 6011 if (!container) return; 6012 6013 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 6014 if (!form) return; 6015 6016 const variants = parseVariants(container); 6017 if (!variants.length) return; 6018 6019 const variant = getCurrentVariant(container, form, variants); 6020 if (!variant) return; 6021 6022 setButtonState(form, variant); 6023 } 6024 6025 document.addEventListener('change', (event) => { 6026 const quickAddModal = event.target.closest('quick-add-modal'); 6027 const cardVariantSelects = event.target.closest('card-variant-selects'); 6028 6029 if (quickAddModal) { 6030 setTimeout(() => syncContainer(quickAddModal), 80); 6031 setTimeout(() => syncContainer(quickAddModal), 250); 6032 } 6033 6034 if (cardVariantSelects) { 6035 const card = cardVariantSelects.closest('.card-wrapper'); 6036 if (card) { 6037 setTimeout(() => syncContainer(card), 80); 6038 setTimeout(() => syncContainer(card), 250); 6039 } 6040 } 6041 }); 6042 6043 const observer = new MutationObserver((mutations) => { 6044 mutations.forEach((mutation) => {
6045 mutation.addedNodes.forEach((node) => { 6046 if (!(node instanceof HTMLElement)) return; 6047 6048 if (node.matches && node.matches('quick-add-modal')) { 6049 setTimeout(() => syncContainer(node), 150); 6050 } 6051 6052 node.querySelectorAll && 6053 node.querySelectorAll('quick-add-modal').forEach((modal) => { 6054 setTimeout(() => syncContainer(modal), 150); 6055 }); 6056 }); 6057 }); 6058 }); 6059 6060 observer.observe(document.documentElement, { 6061 childList: true, 6062 subtree: true 6063 }); 6064 6065 document.addEventListener('DOMContentLoaded', () => { 6066 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 6067 }); 6068 })(); 6069</script>
6069 6070 6071 6072 6073 6074 </li> 6075 6076 <li> 6077 6078<div class="card-wrapper product-card-wrapper underline-links-hover"> 6079 <div 6080 class=" 6081 card 6082 card--card 6083 card--media 6084 color-background-1 gradient 6085 6086 6087 6088 card--badge-sided 6089 6090 6091 " 6092 style="--ratio-percent: 100%;" 6093 > 6094 <div 6095 class="card__inner ratio" 6096 style="--ratio-percent: 100%;" 6097 ><div class="card__media"> 6098 <div class="media media--transparent media--hover-effect"> 6099 6100 <img 6101 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068 1254w 6102 " 6103 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=533" 6104 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 6105 alt="White" 6106 class="motion-reduce" 6107 6108 loading="lazy" 6109 6110 width="1254" 6111 height="1254" 6112 id='quick-add-8342973219007-image' 6113 > 6114 6115<img 6116 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847 1080w 6117 " 6118 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=533" 6119 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 6120 alt="" 6121 class="motion-reduce" 6122 loading="lazy" 6123 width="1080" 6124 height="1080" 6125 ></div> 6126 </div><div class="card__content"> 6127 <div class="card__information"> 6128 <h3 6129 class="card__heading" 6130 6131 > 6132 <a 6133 href="/products/vibeassage-complete-system" 6134 id="StandardCardNoMediaLink--8342973219007" 6135 class="full-unstyled-link" 6136 aria-labelledby="StandardCardNoMediaLink--8342973219007 NoMediaStandardBadge--8342973219007" 6137 > 6138 â Vibeassage⢠Sport with 3 Biomimetic Pads - The Complete System 6139 </a> 6140 </h3> 6141 </div> 6142 <div class="card__badge bottom left"> 6143 6144 </div> 6145 </div> 6146 </div> 6147 <div class="card__content"> 6148 <div class="card__information"> 6149 <h3 6150 class="card__heading h5" 6151 6152 id="title--8342973219007" 6153 6154 > 6155 <a 6156 href="/products/vibeassage-complete-system" 6157 id="CardLink--8342973219007" 6158 class="full-unstyled-link" 6159 aria-labelledby="CardLink--8342973219007 Badge--8342973219007" 6160 > 6161 â Vibeassage⢠Sport with 3 Biomimetic Pads - The Complete System 6162 </a> 6163 </h3> 6164 6165 <div class="card-information"><span class="caption-large light"></span> 6166<div 6167 class=" 6168 price " 6169> 6170 <div class="price__container"><div class="price__regular">
6171 <span class="visually-hidden visually-hidden--inline">Regular price</span> 6172 <span class="price-item price-item--regular"> 6173 From $429.00 6174 </span> 6175 </div> 6176 <div class="price__sale "> 6177 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 6178 <span class="price-item price-item--sale price-item--last"> 6179 From $429.00 6180 </span> 6181 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 6182 <span class="price__compare-price"> 6183 <s class="price-item price-item--regular"> 6184 6185 </s> 6186 </span></div> 6187 <small class="unit-price caption hidden"> 6188 <span class="visually-hidden">Unit price</span> 6189 <span class="price-item price-item--last"> 6190 <span></span> 6191 <span aria-hidden="true">/</span> 6192 <span class="visually-hidden"> per </span> 6193 <span> 6194 </span> 6195 </span> 6196 </small> 6197 </div></div> 6198 6199 </div> 6200 </div> 6201 6202<div class="card__badge bottom left"></div> 6203 </div> 6204 </div> 6205 </div>
6205<script> 6206 (() => { 6207 if (window.cardProductQuickAddVariantFixLoaded) return; 6208 window.cardProductQuickAddVariantFixLoaded = true; 6209 6210 const ADD_TO_CART_TEXT = "Add to cart"; 6211 const SOLD_OUT_TEXT = "Sold out"; 6212 6213 function parseVariants(container) { 6214 if (!container) return []; 6215 6216 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 6217 6218 for (const script of scripts) { 6219 try { 6220 const data = JSON.parse(script.textContent.trim()); 6221 6222 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 6223 return data; 6224 } 6225 6226 if (data && Array.isArray(data.variants)) { 6227 return data.variants; 6228 } 6229 } catch (error) {} 6230 } 6231 6232 return []; 6233 } 6234 6235 function getSelectedOptionValues(container) { 6236 const values = []; 6237 6238 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 6239 const checkedInput = group.querySelector('input[type="radio"]:checked'); 6240 const select = group.querySelector('select'); 6241 6242 if (checkedInput) { 6243 values.push(checkedInput.value); 6244 } else if (select) { 6245 values.push(select.value); 6246 } 6247 }); 6248 6249 return values; 6250 } 6251 6252 function getCurrentVariant(container, form, variants) { 6253 const idInput = form && form.querySelector('[name="id"]'); 6254 const selectedId = idInput && idInput.value; 6255 6256 if (selectedId) { 6257 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 6258 if (byId) return byId; 6259 } 6260 6261 const selectedOptions = getSelectedOptionValues(container); 6262 6263 if (selectedOptions.length) { 6264 return variants.find((variant) => { 6265 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 6266 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 6267 }); 6268 } 6269 6270 return null; 6271 } 6272 6273 function setButtonState(form, variant) { 6274 if (!form) return; 6275 6276 const idInput = form.querySelector('[name="id"]'); 6277 const addButton = form.querySelector('[name="add"]'); 6278 const buttonLabel = 6279 addButton && 6280 (addButton.querySelector('.main-atc__label__text') || 6281 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 6282 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 6283 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 6284 6285 if (!addButton || !idInput || !variant) return; 6286 6287 idInput.value = variant.id; 6288 idInput.disabled = false; 6289 6290 if (spinner) spinner.classList.add('hidden'); 6291 6292 if (variant.available) { 6293 addButton.disabled = false; 6294 addButton.removeAttribute('disabled'); 6295 addButton.removeAttribute('aria-disabled'); 6296 addButton.classList.remove('loading'); 6297 6298 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 6299 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 6300 } else { 6301 addButton.disabled = true; 6302 addButton.setAttribute('disabled', 'disabled'); 6303 addButton.setAttribute('aria-disabled', 'true'); 6304 6305 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 6306 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 6307 } 6308 } 6309 6310 function syncContainer(container) { 6311 if (!container) return; 6312 6313 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 6314 if (!form) return; 6315 6316 const variants = parseVariants(container); 6317 if (!variants.length) return; 6318 6319 const variant = getCurrentVariant(container, form, variants); 6320 if (!variant) return; 6321 6322 setButtonState(form, variant); 6323 } 6324 6325 document.addEventListener('change', (event) => { 6326 const quickAddModal = event.target.closest('quick-add-modal'); 6327 const cardVariantSelects = event.target.closest('card-variant-selects'); 6328 6329 if (quickAddModal) { 6330 setTimeout(() => syncContainer(quickAddModal), 80); 6331 setTimeout(() => syncContainer(quickAddModal), 250); 6332 } 6333 6334 if (cardVariantSelects) { 6335 const card = cardVariantSelects.closest('.card-wrapper'); 6336 if (card) { 6337 setTimeout(() => syncContainer(card), 80); 6338 setTimeout(() => syncContainer(card), 250); 6339 } 6340 } 6341 }); 6342 6343 const observer = new MutationObserver((mutations) => { 6344 mutations.forEach((mutation) => {
6345 mutation.addedNodes.forEach((node) => { 6346 if (!(node instanceof HTMLElement)) return; 6347 6348 if (node.matches && node.matches('quick-add-modal')) { 6349 setTimeout(() => syncContainer(node), 150); 6350 } 6351 6352 node.querySelectorAll && 6353 node.querySelectorAll('quick-add-modal').forEach((modal) => { 6354 setTimeout(() => syncContainer(modal), 150); 6355 }); 6356 }); 6357 }); 6358 }); 6359 6360 observer.observe(document.documentElement, { 6361 childList: true, 6362 subtree: true 6363 }); 6364 6365 document.addEventListener('DOMContentLoaded', () => { 6366 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 6367 }); 6368 })(); 6369</script>
6369 6370 6371 6372 6373 6374 </li> 6375 6376 <li> 6377 6378<div class="card-wrapper product-card-wrapper underline-links-hover"> 6379 <div 6380 class=" 6381 card 6382 card--card 6383 card--media 6384 color-background-1 gradient 6385 6386 6387 6388 card--badge-sided 6389 6390 6391 " 6392 style="--ratio-percent: 100%;" 6393 > 6394 <div 6395 class="card__inner ratio" 6396 style="--ratio-percent: 100%;" 6397 ><div class="card__media"> 6398 <div class="media media--transparent media--hover-effect"> 6399 6400 <img 6401 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068 1254w 6402 " 6403 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=533" 6404 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 6405 alt="White" 6406 class="motion-reduce" 6407 6408 loading="lazy" 6409 6410 width="1254" 6411 height="1254" 6412 id='quick-add-8342972334271-image' 6413 > 6414 6415<img 6416 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068 1254w 6417 " 6418 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=533" 6419 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 6420 alt="" 6421 class="motion-reduce" 6422 loading="lazy" 6423 width="1254" 6424 height="1254" 6425 ></div> 6426 </div><div class="card__content"> 6427 <div class="card__information"> 6428 <h3 6429 class="card__heading" 6430 6431 > 6432 <a 6433 href="/products/vibeassage-relief-bundle" 6434 id="StandardCardNoMediaLink--8342972334271" 6435 class="full-unstyled-link" 6436 aria-labelledby="StandardCardNoMediaLink--8342972334271 NoMediaStandardBadge--8342972334271" 6437 > 6438 Vibeassage® Relief Bundle 6439 </a> 6440 </h3> 6441 </div> 6442 <div class="card__badge bottom left"> 6443 6444 </div> 6445 </div> 6446 </div> 6447 <div class="card__content"> 6448 <div class="card__information"> 6449 <h3 6450 class="card__heading h5" 6451 6452 id="title--8342972334271" 6453 6454 > 6455 <a 6456 href="/products/vibeassage-relief-bundle" 6457 id="CardLink--8342972334271" 6458 class="full-unstyled-link" 6459 aria-labelledby="CardLink--8342972334271 Badge--8342972334271" 6460 > 6461 Vibeassage® Relief Bundle 6462 </a> 6463 </h3> 6464 6465 <div class="card-information"><span class="caption-large light"></span> 6466<div 6467 class=" 6468 price " 6469> 6470 <div class="price__container"><div class="price__regular">
6471 <span class="visually-hidden visually-hidden--inline">Regular price</span> 6472 <span class="price-item price-item--regular"> 6473 From $389.00 6474 </span> 6475 </div> 6476 <div class="price__sale "> 6477 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 6478 <span class="price-item price-item--sale price-item--last"> 6479 From $389.00 6480 </span> 6481 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 6482 <span class="price__compare-price"> 6483 <s class="price-item price-item--regular"> 6484 6485 </s> 6486 </span></div> 6487 <small class="unit-price caption hidden"> 6488 <span class="visually-hidden">Unit price</span> 6489 <span class="price-item price-item--last"> 6490 <span></span> 6491 <span aria-hidden="true">/</span> 6492 <span class="visually-hidden"> per </span> 6493 <span> 6494 </span> 6495 </span> 6496 </small> 6497 </div></div> 6498 6499 </div> 6500 </div> 6501 6502<div class="card__badge bottom left"></div> 6503 </div> 6504 </div> 6505 </div>
6505<script> 6506 (() => { 6507 if (window.cardProductQuickAddVariantFixLoaded) return; 6508 window.cardProductQuickAddVariantFixLoaded = true; 6509 6510 const ADD_TO_CART_TEXT = "Add to cart"; 6511 const SOLD_OUT_TEXT = "Sold out"; 6512 6513 function parseVariants(container) { 6514 if (!container) return []; 6515 6516 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 6517 6518 for (const script of scripts) { 6519 try { 6520 const data = JSON.parse(script.textContent.trim()); 6521 6522 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 6523 return data; 6524 } 6525 6526 if (data && Array.isArray(data.variants)) { 6527 return data.variants; 6528 } 6529 } catch (error) {} 6530 } 6531 6532 return []; 6533 } 6534 6535 function getSelectedOptionValues(container) { 6536 const values = []; 6537 6538 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 6539 const checkedInput = group.querySelector('input[type="radio"]:checked'); 6540 const select = group.querySelector('select'); 6541 6542 if (checkedInput) { 6543 values.push(checkedInput.value); 6544 } else if (select) { 6545 values.push(select.value); 6546 } 6547 }); 6548 6549 return values; 6550 } 6551 6552 function getCurrentVariant(container, form, variants) { 6553 const idInput = form && form.querySelector('[name="id"]'); 6554 const selectedId = idInput && idInput.value; 6555 6556 if (selectedId) { 6557 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 6558 if (byId) return byId; 6559 } 6560 6561 const selectedOptions = getSelectedOptionValues(container); 6562 6563 if (selectedOptions.length) { 6564 return variants.find((variant) => { 6565 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 6566 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 6567 }); 6568 } 6569 6570 return null; 6571 } 6572 6573 function setButtonState(form, variant) { 6574 if (!form) return; 6575 6576 const idInput = form.querySelector('[name="id"]'); 6577 const addButton = form.querySelector('[name="add"]'); 6578 const buttonLabel = 6579 addButton && 6580 (addButton.querySelector('.main-atc__label__text') || 6581 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 6582 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 6583 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 6584 6585 if (!addButton || !idInput || !variant) return; 6586 6587 idInput.value = variant.id; 6588 idInput.disabled = false; 6589 6590 if (spinner) spinner.classList.add('hidden'); 6591 6592 if (variant.available) { 6593 addButton.disabled = false; 6594 addButton.removeAttribute('disabled'); 6595 addButton.removeAttribute('aria-disabled'); 6596 addButton.classList.remove('loading'); 6597 6598 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 6599 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 6600 } else { 6601 addButton.disabled = true; 6602 addButton.setAttribute('disabled', 'disabled'); 6603 addButton.setAttribute('aria-disabled', 'true'); 6604 6605 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 6606 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 6607 } 6608 } 6609 6610 function syncContainer(container) { 6611 if (!container) return; 6612 6613 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 6614 if (!form) return; 6615 6616 const variants = parseVariants(container); 6617 if (!variants.length) return; 6618 6619 const variant = getCurrentVariant(container, form, variants); 6620 if (!variant) return; 6621 6622 setButtonState(form, variant); 6623 } 6624 6625 document.addEventListener('change', (event) => { 6626 const quickAddModal = event.target.closest('quick-add-modal'); 6627 const cardVariantSelects = event.target.closest('card-variant-selects'); 6628 6629 if (quickAddModal) { 6630 setTimeout(() => syncContainer(quickAddModal), 80); 6631 setTimeout(() => syncContainer(quickAddModal), 250); 6632 } 6633 6634 if (cardVariantSelects) { 6635 const card = cardVariantSelects.closest('.card-wrapper'); 6636 if (card) { 6637 setTimeout(() => syncContainer(card), 80); 6638 setTimeout(() => syncContainer(card), 250); 6639 } 6640 } 6641 }); 6642 6643 const observer = new MutationObserver((mutations) => { 6644 mutations.forEach((mutation) => {
6645 mutation.addedNodes.forEach((node) => { 6646 if (!(node instanceof HTMLElement)) return; 6647 6648 if (node.matches && node.matches('quick-add-modal')) { 6649 setTimeout(() => syncContainer(node), 150); 6650 } 6651 6652 node.querySelectorAll && 6653 node.querySelectorAll('quick-add-modal').forEach((modal) => { 6654 setTimeout(() => syncContainer(modal), 150); 6655 }); 6656 }); 6657 }); 6658 }); 6659 6660 observer.observe(document.documentElement, { 6661 childList: true, 6662 subtree: true 6663 }); 6664 6665 document.addEventListener('DOMContentLoaded', () => { 6666 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 6667 }); 6668 })(); 6669</script>
6669 6670 6671 6672 6673 6674 </li> 6675 6676 <li> 6677 6678<div class="card-wrapper product-card-wrapper underline-links-hover"> 6679 <div 6680 class=" 6681 card 6682 card--card 6683 card--media 6684 color-background-1 gradient 6685 6686 6687 6688 card--badge-sided 6689 6690 6691 " 6692 style="--ratio-percent: 100%;" 6693 > 6694 <div 6695 class="card__inner ratio" 6696 style="--ratio-percent: 100%;" 6697 ><div class="card__media"> 6698 <div class="media media--transparent media--hover-effect"> 6699 6700 <img 6701 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443 1080w 6702 " 6703 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=533" 6704 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 6705 alt="Biomimetic Applicator Pads (Full Set) - Team Doctors" 6706 class="motion-reduce" 6707 6708 loading="lazy" 6709 6710 width="1080" 6711 height="1080" 6712 id='quick-add-8394187342015-image' 6713 > 6714 6715<img 6716 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492 1080w 6717 " 6718 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533" 6719 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 6720 alt="" 6721 class="motion-reduce" 6722 loading="lazy" 6723 width="1080" 6724 height="1080" 6725 ></div> 6726 </div><div class="card__content"> 6727 <div class="card__information"> 6728 <h3 6729 class="card__heading" 6730 6731 > 6732 <a 6733 href="/products/biomemetic-applicator-pads-full-set" 6734 id="StandardCardNoMediaLink--8394187342015" 6735 class="full-unstyled-link" 6736 aria-labelledby="StandardCardNoMediaLink--8394187342015 NoMediaStandardBadge--8394187342015" 6737 > 6738 Biomimetic Applicator Pads 6739 </a> 6740 </h3> 6741 </div> 6742 <div class="card__badge bottom left"> 6743 6744
6745 <span 6746 id="NoMediaStandardBadge--8394187342015" 6747 class="badge badge--bottom-left color-accent-2" 6748 > 6749 <svg 6750 aria-hidden="true" 6751 focusable="false" 6752 class="icon icon-discount color-foreground-text" 6753 viewBox="0 0 12 12" 6754> 6755 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 6756</svg> 6757<span class='nowrap'>SAVE 21%</span> 6758 </span></div> 6759 </div> 6760 </div> 6761 <div class="card__content"> 6762 <div class="card__information"> 6763 <h3 6764 class="card__heading h5" 6765 6766 id="title--8394187342015" 6767 6768 > 6769 <a 6770 href="/products/biomemetic-applicator-pads-full-set" 6771 id="CardLink--8394187342015" 6772 class="full-unstyled-link" 6773 aria-labelledby="CardLink--8394187342015 Badge--8394187342015" 6774 > 6775 Biomimetic Applicator Pads 6776 </a> 6777 </h3> 6778 6779 <div class="product-subtitle"> 6780 3 Pads - Full Set 6781 </div> 6782 6783 <div class="card-information"><span class="caption-large light"></span> 6784<div 6785 class=" 6786 price price--on-sale " 6787> 6788 <div class="price__container"><div class="price__regular"> 6789 <span class="visually-hidden visually-hidden--inline">Regular price</span> 6790 <span class="price-item price-item--regular"> 6791 $129.00 6792 </span> 6793 </div> 6794 <div class="price__sale "> 6795 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 6796 <span class="price-item price-item--sale price-item--last"> 6797 $129.00 6798 </span> 6799 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 6800 <span class="price__compare-price"> 6801 <s class="price-item price-item--regular"> 6802 $164.85 6803 </s> 6804 </span></div> 6805 <small class="unit-price caption hidden"> 6806 <span class="visually-hidden">Unit price</span> 6807 <span class="price-item price-item--last"> 6808 <span></span> 6809 <span aria-hidden="true">/</span> 6810 <span class="visually-hidden"> per </span> 6811 <span> 6812 </span> 6813 </span> 6814 </small> 6815 </div></div> 6816 6817 </div> 6818 </div> 6819 6820<div class="card__badge bottom left"><span 6821 id="Badge--8394187342015" 6822 class="badge badge--bottom-left color-accent-2" 6823 > 6824 21% 6825 </span></div> 6826 </div> 6827 </div> 6828 </div>
6828<script> 6829 (() => { 6830 if (window.cardProductQuickAddVariantFixLoaded) return; 6831 window.cardProductQuickAddVariantFixLoaded = true; 6832 6833 const ADD_TO_CART_TEXT = "Add to cart"; 6834 const SOLD_OUT_TEXT = "Sold out"; 6835 6836 function parseVariants(container) { 6837 if (!container) return []; 6838 6839 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 6840 6841 for (const script of scripts) { 6842 try { 6843 const data = JSON.parse(script.textContent.trim()); 6844 6845 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 6846 return data; 6847 } 6848 6849 if (data && Array.isArray(data.variants)) { 6850 return data.variants; 6851 } 6852 } catch (error) {} 6853 } 6854 6855 return []; 6856 } 6857 6858 function getSelectedOptionValues(container) { 6859 const values = []; 6860 6861 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 6862 const checkedInput = group.querySelector('input[type="radio"]:checked'); 6863 const select = group.querySelector('select'); 6864 6865 if (checkedInput) { 6866 values.push(checkedInput.value); 6867 } else if (select) { 6868 values.push(select.value); 6869 } 6870 }); 6871 6872 return values; 6873 } 6874 6875 function getCurrentVariant(container, form, variants) { 6876 const idInput = form && form.querySelector('[name="id"]'); 6877 const selectedId = idInput && idInput.value; 6878 6879 if (selectedId) { 6880 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 6881 if (byId) return byId; 6882 } 6883 6884 const selectedOptions = getSelectedOptionValues(container); 6885 6886 if (selectedOptions.length) { 6887 return variants.find((variant) => { 6888 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 6889 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 6890 }); 6891 } 6892 6893 return null; 6894 } 6895 6896 function setButtonState(form, variant) { 6897 if (!form) return; 6898 6899 const idInput = form.querySelector('[name="id"]'); 6900 const addButton = form.querySelector('[name="add"]'); 6901 const buttonLabel = 6902 addButton && 6903 (addButton.querySelector('.main-atc__label__text') || 6904 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 6905 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 6906 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 6907 6908 if (!addButton || !idInput || !variant) return; 6909 6910 idInput.value = variant.id; 6911 idInput.disabled = false; 6912 6913 if (spinner) spinner.classList.add('hidden'); 6914 6915 if (variant.available) { 6916 addButton.disabled = false; 6917 addButton.removeAttribute('disabled'); 6918 addButton.removeAttribute('aria-disabled'); 6919 addButton.classList.remove('loading'); 6920 6921 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 6922 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 6923 } else { 6924 addButton.disabled = true; 6925 addButton.setAttribute('disabled', 'disabled'); 6926 addButton.setAttribute('aria-disabled', 'true'); 6927 6928 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 6929 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 6930 } 6931 } 6932 6933 function syncContainer(container) { 6934 if (!container) return; 6935 6936 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 6937 if (!form) return; 6938 6939 const variants = parseVariants(container); 6940 if (!variants.length) return; 6941 6942 const variant = getCurrentVariant(container, form, variants); 6943 if (!variant) return; 6944 6945 setButtonState(form, variant); 6946 } 6947 6948 document.addEventListener('change', (event) => { 6949 const quickAddModal = event.target.closest('quick-add-modal'); 6950 const cardVariantSelects = event.target.closest('card-variant-selects'); 6951 6952 if (quickAddModal) { 6953 setTimeout(() => syncContainer(quickAddModal), 80); 6954 setTimeout(() => syncContainer(quickAddModal), 250); 6955 } 6956 6957 if (cardVariantSelects) { 6958 const card = cardVariantSelects.closest('.card-wrapper'); 6959 if (card) { 6960 setTimeout(() => syncContainer(card), 80); 6961 setTimeout(() => syncContainer(card), 250); 6962 } 6963 } 6964 }); 6965 6966 const observer = new MutationObserver((mutations) => { 6967 mutations.forEach((mutation) => {
6968 mutation.addedNodes.forEach((node) => { 6969 if (!(node instanceof HTMLElement)) return; 6970 6971 if (node.matches && node.matches('quick-add-modal')) { 6972 setTimeout(() => syncContainer(node), 150); 6973 } 6974 6975 node.querySelectorAll && 6976 node.querySelectorAll('quick-add-modal').forEach((modal) => { 6977 setTimeout(() => syncContainer(modal), 150); 6978 }); 6979 }); 6980 }); 6981 }); 6982 6983 observer.observe(document.documentElement, { 6984 childList: true, 6985 subtree: true 6986 }); 6987 6988 document.addEventListener('DOMContentLoaded', () => { 6989 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 6990 }); 6991 })(); 6992</script>
6992 6993 6994 6995 6996 6997 </li> 6998 6999 <li> 7000 7001<div class="card-wrapper product-card-wrapper underline-links-hover"> 7002 <div 7003 class=" 7004 card 7005 card--card 7006 card--media 7007 color-background-1 gradient 7008 7009 7010 7011 card--badge-sided 7012 7013 7014 " 7015 style="--ratio-percent: 100%;" 7016 > 7017 <div 7018 class="card__inner ratio" 7019 style="--ratio-percent: 100%;" 7020 ><div class="card__media"> 7021 <div class="media media--transparent media--hover-effect"> 7022 7023 <img 7024 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844 1254w 7025 " 7026 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=533" 7027 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7028 alt="Balance bundle - Team Doctors" 7029 class="motion-reduce" 7030 7031 loading="lazy" 7032 7033 width="1254" 7034 height="1254" 7035 id='quick-add-8402094031039-image' 7036 > 7037 7038<img 7039 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311 1080w 7040 " 7041 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533" 7042 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7043 alt="" 7044 class="motion-reduce" 7045 loading="lazy" 7046 width="1080" 7047 height="1080" 7048 ></div> 7049 </div><div class="card__content"> 7050 <div class="card__information"> 7051 <h3 7052 class="card__heading" 7053 7054 > 7055 <a 7056 href="/products/vibeassage%C2%AE-relief-bundle" 7057 id="StandardCardNoMediaLink--8402094031039" 7058 class="full-unstyled-link" 7059 aria-labelledby="StandardCardNoMediaLink--8402094031039 NoMediaStandardBadge--8402094031039" 7060 > 7061 Balance bundle 7062 </a> 7063 </h3> 7064 </div> 7065 <div class="card__badge bottom left"> 7066 7067
7068 <span 7069 id="NoMediaStandardBadge--8402094031039" 7070 class="badge badge--bottom-left color-accent-2" 7071 > 7072 <svg 7073 aria-hidden="true" 7074 focusable="false" 7075 class="icon icon-discount color-foreground-text" 7076 viewBox="0 0 12 12" 7077> 7078 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 7079</svg> 7080<span class='nowrap'>SAVE 9%</span> 7081 </span></div> 7082 </div> 7083 </div> 7084 <div class="card__content"> 7085 <div class="card__information"> 7086 <h3 7087 class="card__heading h5" 7088 7089 id="title--8402094031039" 7090 7091 > 7092 <a 7093 href="/products/vibeassage%C2%AE-relief-bundle" 7094 id="CardLink--8402094031039" 7095 class="full-unstyled-link" 7096 aria-labelledby="CardLink--8402094031039 Badge--8402094031039" 7097 > 7098 Balance bundle 7099 </a> 7100 </h3> 7101 7102 <div class="product-subtitle"> 7103 Comfort Relief Pad + Peak Performance Pad 7104 </div> 7105 7106 <div class="card-information"><span class="caption-large light"></span> 7107<div 7108 class=" 7109 price price--on-sale " 7110> 7111 <div class="price__container"><div class="price__regular"> 7112 <span class="visually-hidden visually-hidden--inline">Regular price</span> 7113 <span class="price-item price-item--regular"> 7114 $99.00 7115 </span> 7116 </div> 7117 <div class="price__sale "> 7118 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 7119 <span class="price-item price-item--sale price-item--last"> 7120 $99.00 7121 </span> 7122 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 7123 <span class="price__compare-price"> 7124 <s class="price-item price-item--regular"> 7125 $109.95 7126 </s> 7127 </span></div> 7128 <small class="unit-price caption hidden"> 7129 <span class="visually-hidden">Unit price</span> 7130 <span class="price-item price-item--last"> 7131 <span></span> 7132 <span aria-hidden="true">/</span> 7133 <span class="visually-hidden"> per </span> 7134 <span> 7135 </span> 7136 </span> 7137 </small> 7138 </div></div> 7139 7140 </div> 7141 </div> 7142 7143<div class="card__badge bottom left"><span 7144 id="Badge--8402094031039" 7145 class="badge badge--bottom-left color-accent-2" 7146 > 7147 9% 7148 </span></div> 7149 </div> 7150 </div> 7151 </div>
7151<script> 7152 (() => { 7153 if (window.cardProductQuickAddVariantFixLoaded) return; 7154 window.cardProductQuickAddVariantFixLoaded = true; 7155 7156 const ADD_TO_CART_TEXT = "Add to cart"; 7157 const SOLD_OUT_TEXT = "Sold out"; 7158 7159 function parseVariants(container) { 7160 if (!container) return []; 7161 7162 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 7163 7164 for (const script of scripts) { 7165 try { 7166 const data = JSON.parse(script.textContent.trim()); 7167 7168 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 7169 return data; 7170 } 7171 7172 if (data && Array.isArray(data.variants)) { 7173 return data.variants; 7174 } 7175 } catch (error) {} 7176 } 7177 7178 return []; 7179 } 7180 7181 function getSelectedOptionValues(container) { 7182 const values = []; 7183 7184 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 7185 const checkedInput = group.querySelector('input[type="radio"]:checked'); 7186 const select = group.querySelector('select'); 7187 7188 if (checkedInput) { 7189 values.push(checkedInput.value); 7190 } else if (select) { 7191 values.push(select.value); 7192 } 7193 }); 7194 7195 return values; 7196 } 7197 7198 function getCurrentVariant(container, form, variants) { 7199 const idInput = form && form.querySelector('[name="id"]'); 7200 const selectedId = idInput && idInput.value; 7201 7202 if (selectedId) { 7203 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 7204 if (byId) return byId; 7205 } 7206 7207 const selectedOptions = getSelectedOptionValues(container); 7208 7209 if (selectedOptions.length) { 7210 return variants.find((variant) => { 7211 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 7212 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 7213 }); 7214 } 7215 7216 return null; 7217 } 7218 7219 function setButtonState(form, variant) { 7220 if (!form) return; 7221 7222 const idInput = form.querySelector('[name="id"]'); 7223 const addButton = form.querySelector('[name="add"]'); 7224 const buttonLabel = 7225 addButton && 7226 (addButton.querySelector('.main-atc__label__text') || 7227 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 7228 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 7229 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 7230 7231 if (!addButton || !idInput || !variant) return; 7232 7233 idInput.value = variant.id; 7234 idInput.disabled = false; 7235 7236 if (spinner) spinner.classList.add('hidden'); 7237 7238 if (variant.available) { 7239 addButton.disabled = false; 7240 addButton.removeAttribute('disabled'); 7241 addButton.removeAttribute('aria-disabled'); 7242 addButton.classList.remove('loading'); 7243 7244 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 7245 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 7246 } else { 7247 addButton.disabled = true; 7248 addButton.setAttribute('disabled', 'disabled'); 7249 addButton.setAttribute('aria-disabled', 'true'); 7250 7251 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 7252 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 7253 } 7254 } 7255 7256 function syncContainer(container) { 7257 if (!container) return; 7258 7259 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 7260 if (!form) return; 7261 7262 const variants = parseVariants(container); 7263 if (!variants.length) return; 7264 7265 const variant = getCurrentVariant(container, form, variants); 7266 if (!variant) return; 7267 7268 setButtonState(form, variant); 7269 } 7270 7271 document.addEventListener('change', (event) => { 7272 const quickAddModal = event.target.closest('quick-add-modal'); 7273 const cardVariantSelects = event.target.closest('card-variant-selects'); 7274 7275 if (quickAddModal) { 7276 setTimeout(() => syncContainer(quickAddModal), 80); 7277 setTimeout(() => syncContainer(quickAddModal), 250); 7278 } 7279 7280 if (cardVariantSelects) { 7281 const card = cardVariantSelects.closest('.card-wrapper'); 7282 if (card) { 7283 setTimeout(() => syncContainer(card), 80); 7284 setTimeout(() => syncContainer(card), 250); 7285 } 7286 } 7287 }); 7288 7289 const observer = new MutationObserver((mutations) => { 7290 mutations.forEach((mutation) => {
7291 mutation.addedNodes.forEach((node) => { 7292 if (!(node instanceof HTMLElement)) return; 7293 7294 if (node.matches && node.matches('quick-add-modal')) { 7295 setTimeout(() => syncContainer(node), 150); 7296 } 7297 7298 node.querySelectorAll && 7299 node.querySelectorAll('quick-add-modal').forEach((modal) => { 7300 setTimeout(() => syncContainer(modal), 150); 7301 }); 7302 }); 7303 }); 7304 }); 7305 7306 observer.observe(document.documentElement, { 7307 childList: true, 7308 subtree: true 7309 }); 7310 7311 document.addEventListener('DOMContentLoaded', () => { 7312 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 7313 }); 7314 })(); 7315</script>
7315 7316 7317 7318 7319 7320 </li> 7321 7322 <li> 7323 7324<div class="card-wrapper product-card-wrapper underline-links-hover"> 7325 <div 7326 class=" 7327 card 7328 card--card 7329 card--media 7330 color-background-1 gradient 7331 7332 7333 7334 card--badge-sided 7335 7336 7337 " 7338 style="--ratio-percent: 100%;" 7339 > 7340 <div 7341 class="card__inner ratio" 7342 style="--ratio-percent: 100%;" 7343 ><div class="card__media"> 7344 <div class="media media--transparent media--hover-effect"> 7345 7346 <img 7347 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763 1254w 7348 " 7349 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=533" 7350 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7351 alt="White" 7352 class="motion-reduce" 7353 7354 loading="lazy" 7355 7356 width="1254" 7357 height="1254" 7358 id='quick-add-8342972760255-image' 7359 > 7360 7361<img 7362 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068 1254w 7363 " 7364 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=533" 7365 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7366 alt="" 7367 class="motion-reduce" 7368 loading="lazy" 7369 width="1254" 7370 height="1254" 7371 ></div> 7372 </div><div class="card__content"> 7373 <div class="card__information"> 7374 <h3 7375 class="card__heading" 7376 7377 > 7378 <a 7379 href="/products/vibeassage-performance-bundle" 7380 id="StandardCardNoMediaLink--8342972760255" 7381 class="full-unstyled-link" 7382 aria-labelledby="StandardCardNoMediaLink--8342972760255 NoMediaStandardBadge--8342972760255" 7383 > 7384 Vibeassage® Performance Bundle 7385 </a> 7386 </h3> 7387 </div> 7388 <div class="card__badge bottom left"> 7389 7390 </div> 7391 </div> 7392 </div> 7393 <div class="card__content"> 7394 <div class="card__information"> 7395 <h3 7396 class="card__heading h5" 7397 7398 id="title--8342972760255" 7399 7400 > 7401 <a 7402 href="/products/vibeassage-performance-bundle" 7403 id="CardLink--8342972760255" 7404 class="full-unstyled-link" 7405 aria-labelledby="CardLink--8342972760255 Badge--8342972760255" 7406 > 7407 Vibeassage® Performance Bundle 7408 </a> 7409 </h3> 7410 7411 <div class="card-information"><span class="caption-large light"></span> 7412<div 7413 class=" 7414 price " 7415> 7416 <div class="price__container"><div class="price__regular">
7417 <span class="visually-hidden visually-hidden--inline">Regular price</span> 7418 <span class="price-item price-item--regular"> 7419 From $389.00 7420 </span> 7421 </div> 7422 <div class="price__sale "> 7423 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 7424 <span class="price-item price-item--sale price-item--last"> 7425 From $389.00 7426 </span> 7427 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 7428 <span class="price__compare-price"> 7429 <s class="price-item price-item--regular"> 7430 7431 </s> 7432 </span></div> 7433 <small class="unit-price caption hidden"> 7434 <span class="visually-hidden">Unit price</span> 7435 <span class="price-item price-item--last"> 7436 <span></span> 7437 <span aria-hidden="true">/</span> 7438 <span class="visually-hidden"> per </span> 7439 <span> 7440 </span> 7441 </span> 7442 </small> 7443 </div></div> 7444 7445 </div> 7446 </div> 7447 7448<div class="card__badge bottom left"></div> 7449 </div> 7450 </div> 7451 </div>
7451<script> 7452 (() => { 7453 if (window.cardProductQuickAddVariantFixLoaded) return; 7454 window.cardProductQuickAddVariantFixLoaded = true; 7455 7456 const ADD_TO_CART_TEXT = "Add to cart"; 7457 const SOLD_OUT_TEXT = "Sold out"; 7458 7459 function parseVariants(container) { 7460 if (!container) return []; 7461 7462 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 7463 7464 for (const script of scripts) { 7465 try { 7466 const data = JSON.parse(script.textContent.trim()); 7467 7468 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 7469 return data; 7470 } 7471 7472 if (data && Array.isArray(data.variants)) { 7473 return data.variants; 7474 } 7475 } catch (error) {} 7476 } 7477 7478 return []; 7479 } 7480 7481 function getSelectedOptionValues(container) { 7482 const values = []; 7483 7484 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 7485 const checkedInput = group.querySelector('input[type="radio"]:checked'); 7486 const select = group.querySelector('select'); 7487 7488 if (checkedInput) { 7489 values.push(checkedInput.value); 7490 } else if (select) { 7491 values.push(select.value); 7492 } 7493 }); 7494 7495 return values; 7496 } 7497 7498 function getCurrentVariant(container, form, variants) { 7499 const idInput = form && form.querySelector('[name="id"]'); 7500 const selectedId = idInput && idInput.value; 7501 7502 if (selectedId) { 7503 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 7504 if (byId) return byId; 7505 } 7506 7507 const selectedOptions = getSelectedOptionValues(container); 7508 7509 if (selectedOptions.length) { 7510 return variants.find((variant) => { 7511 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 7512 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 7513 }); 7514 } 7515 7516 return null; 7517 } 7518 7519 function setButtonState(form, variant) { 7520 if (!form) return; 7521 7522 const idInput = form.querySelector('[name="id"]'); 7523 const addButton = form.querySelector('[name="add"]'); 7524 const buttonLabel = 7525 addButton && 7526 (addButton.querySelector('.main-atc__label__text') || 7527 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 7528 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 7529 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 7530 7531 if (!addButton || !idInput || !variant) return; 7532 7533 idInput.value = variant.id; 7534 idInput.disabled = false; 7535 7536 if (spinner) spinner.classList.add('hidden'); 7537 7538 if (variant.available) { 7539 addButton.disabled = false; 7540 addButton.removeAttribute('disabled'); 7541 addButton.removeAttribute('aria-disabled'); 7542 addButton.classList.remove('loading'); 7543 7544 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 7545 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 7546 } else { 7547 addButton.disabled = true; 7548 addButton.setAttribute('disabled', 'disabled'); 7549 addButton.setAttribute('aria-disabled', 'true'); 7550 7551 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 7552 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 7553 } 7554 } 7555 7556 function syncContainer(container) { 7557 if (!container) return; 7558 7559 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 7560 if (!form) return; 7561 7562 const variants = parseVariants(container); 7563 if (!variants.length) return; 7564 7565 const variant = getCurrentVariant(container, form, variants); 7566 if (!variant) return; 7567 7568 setButtonState(form, variant); 7569 } 7570 7571 document.addEventListener('change', (event) => { 7572 const quickAddModal = event.target.closest('quick-add-modal'); 7573 const cardVariantSelects = event.target.closest('card-variant-selects'); 7574 7575 if (quickAddModal) { 7576 setTimeout(() => syncContainer(quickAddModal), 80); 7577 setTimeout(() => syncContainer(quickAddModal), 250); 7578 } 7579 7580 if (cardVariantSelects) { 7581 const card = cardVariantSelects.closest('.card-wrapper'); 7582 if (card) { 7583 setTimeout(() => syncContainer(card), 80); 7584 setTimeout(() => syncContainer(card), 250); 7585 } 7586 } 7587 }); 7588 7589 const observer = new MutationObserver((mutations) => { 7590 mutations.forEach((mutation) => {
7591 mutation.addedNodes.forEach((node) => { 7592 if (!(node instanceof HTMLElement)) return; 7593 7594 if (node.matches && node.matches('quick-add-modal')) { 7595 setTimeout(() => syncContainer(node), 150); 7596 } 7597 7598 node.querySelectorAll && 7599 node.querySelectorAll('quick-add-modal').forEach((modal) => { 7600 setTimeout(() => syncContainer(modal), 150); 7601 }); 7602 }); 7603 }); 7604 }); 7605 7606 observer.observe(document.documentElement, { 7607 childList: true, 7608 subtree: true 7609 }); 7610 7611 document.addEventListener('DOMContentLoaded', () => { 7612 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 7613 }); 7614 })(); 7615</script>
7615 7616 7617 7618 7619 7620 </li> 7621 7622 <li> 7623 7624<div class="card-wrapper product-card-wrapper underline-links-hover"> 7625 <div 7626 class=" 7627 card 7628 card--card 7629 card--media 7630 color-background-1 gradient 7631 7632 7633 7634 card--badge-sided 7635 7636 7637 " 7638 style="--ratio-percent: 100%;" 7639 > 7640 <div 7641 class="card__inner ratio" 7642 style="--ratio-percent: 100%;" 7643 ><div class="card__media"> 7644 <div class="media media--transparent media--hover-effect"> 7645 7646 <img 7647 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068 1254w 7648 " 7649 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=533" 7650 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7651 alt="White" 7652 class="motion-reduce" 7653 7654 loading="lazy" 7655 7656 width="1254" 7657 height="1254" 7658 id='quick-add-8342966534335-image' 7659 > 7660 7661<img 7662 srcset="//teamdoctors.com/cdn/shop/files/preview_images/d879e7a2fdf742819c922f2bb2e3d0c3.thumbnail.0000000000.jpg?v=1777424140 w 7663 " 7664 src="//teamdoctors.com/cdn/shop/files/preview_images/d879e7a2fdf742819c922f2bb2e3d0c3.thumbnail.0000000000.jpg?v=1777424140&width=533" 7665 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7666 alt="" 7667 class="motion-reduce" 7668 loading="lazy" 7669 width="" 7670 height="" 7671 ></div> 7672 </div><div class="card__content"> 7673 <div class="card__information"> 7674 <h3 7675 class="card__heading" 7676 7677 > 7678 <a 7679 href="/products/vibeassage-core-system" 7680 id="StandardCardNoMediaLink--8342966534335" 7681 class="full-unstyled-link" 7682 aria-labelledby="StandardCardNoMediaLink--8342966534335 NoMediaStandardBadge--8342966534335" 7683 > 7684 Vibeassage® Core System 7685 </a> 7686 </h3> 7687 </div> 7688 <div class="card__badge bottom left"> 7689 7690 </div> 7691 </div> 7692 </div> 7693 <div class="card__content"> 7694 <div class="card__information"> 7695 <h3 7696 class="card__heading h5" 7697 7698 id="title--8342966534335" 7699 7700 > 7701 <a 7702 href="/products/vibeassage-core-system" 7703 id="CardLink--8342966534335" 7704 class="full-unstyled-link" 7705 aria-labelledby="CardLink--8342966534335 Badge--8342966534335" 7706 > 7707 Vibeassage® Core System 7708 </a> 7709 </h3> 7710 7711 <div class="card-information"><span class="caption-large light"></span> 7712<div 7713 class=" 7714 price " 7715> 7716 <div class="price__container"><div class="price__regular">
7717 <span class="visually-hidden visually-hidden--inline">Regular price</span> 7718 <span class="price-item price-item--regular"> 7719 From $349.00 7720 </span> 7721 </div> 7722 <div class="price__sale "> 7723 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 7724 <span class="price-item price-item--sale price-item--last"> 7725 From $349.00 7726 </span> 7727 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 7728 <span class="price__compare-price"> 7729 <s class="price-item price-item--regular"> 7730 7731 </s> 7732 </span></div> 7733 <small class="unit-price caption hidden"> 7734 <span class="visually-hidden">Unit price</span> 7735 <span class="price-item price-item--last"> 7736 <span></span> 7737 <span aria-hidden="true">/</span> 7738 <span class="visually-hidden"> per </span> 7739 <span> 7740 </span> 7741 </span> 7742 </small> 7743 </div></div> 7744 7745 </div> 7746 </div> 7747 7748<div class="card__badge bottom left"></div> 7749 </div> 7750 </div> 7751 </div>
7751<script> 7752 (() => { 7753 if (window.cardProductQuickAddVariantFixLoaded) return; 7754 window.cardProductQuickAddVariantFixLoaded = true; 7755 7756 const ADD_TO_CART_TEXT = "Add to cart"; 7757 const SOLD_OUT_TEXT = "Sold out"; 7758 7759 function parseVariants(container) { 7760 if (!container) return []; 7761 7762 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 7763 7764 for (const script of scripts) { 7765 try { 7766 const data = JSON.parse(script.textContent.trim()); 7767 7768 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 7769 return data; 7770 } 7771 7772 if (data && Array.isArray(data.variants)) { 7773 return data.variants; 7774 } 7775 } catch (error) {} 7776 } 7777 7778 return []; 7779 } 7780 7781 function getSelectedOptionValues(container) { 7782 const values = []; 7783 7784 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 7785 const checkedInput = group.querySelector('input[type="radio"]:checked'); 7786 const select = group.querySelector('select'); 7787 7788 if (checkedInput) { 7789 values.push(checkedInput.value); 7790 } else if (select) { 7791 values.push(select.value); 7792 } 7793 }); 7794 7795 return values; 7796 } 7797 7798 function getCurrentVariant(container, form, variants) { 7799 const idInput = form && form.querySelector('[name="id"]'); 7800 const selectedId = idInput && idInput.value; 7801 7802 if (selectedId) { 7803 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 7804 if (byId) return byId; 7805 } 7806 7807 const selectedOptions = getSelectedOptionValues(container); 7808 7809 if (selectedOptions.length) { 7810 return variants.find((variant) => { 7811 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 7812 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 7813 }); 7814 } 7815 7816 return null; 7817 } 7818 7819 function setButtonState(form, variant) { 7820 if (!form) return; 7821 7822 const idInput = form.querySelector('[name="id"]'); 7823 const addButton = form.querySelector('[name="add"]'); 7824 const buttonLabel = 7825 addButton && 7826 (addButton.querySelector('.main-atc__label__text') || 7827 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 7828 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 7829 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 7830 7831 if (!addButton || !idInput || !variant) return; 7832 7833 idInput.value = variant.id; 7834 idInput.disabled = false; 7835 7836 if (spinner) spinner.classList.add('hidden'); 7837 7838 if (variant.available) { 7839 addButton.disabled = false; 7840 addButton.removeAttribute('disabled'); 7841 addButton.removeAttribute('aria-disabled'); 7842 addButton.classList.remove('loading'); 7843 7844 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 7845 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 7846 } else { 7847 addButton.disabled = true; 7848 addButton.setAttribute('disabled', 'disabled'); 7849 addButton.setAttribute('aria-disabled', 'true'); 7850 7851 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 7852 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 7853 } 7854 } 7855 7856 function syncContainer(container) { 7857 if (!container) return; 7858 7859 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 7860 if (!form) return; 7861 7862 const variants = parseVariants(container); 7863 if (!variants.length) return; 7864 7865 const variant = getCurrentVariant(container, form, variants); 7866 if (!variant) return; 7867 7868 setButtonState(form, variant); 7869 } 7870 7871 document.addEventListener('change', (event) => { 7872 const quickAddModal = event.target.closest('quick-add-modal'); 7873 const cardVariantSelects = event.target.closest('card-variant-selects'); 7874 7875 if (quickAddModal) { 7876 setTimeout(() => syncContainer(quickAddModal), 80); 7877 setTimeout(() => syncContainer(quickAddModal), 250); 7878 } 7879 7880 if (cardVariantSelects) { 7881 const card = cardVariantSelects.closest('.card-wrapper'); 7882 if (card) { 7883 setTimeout(() => syncContainer(card), 80); 7884 setTimeout(() => syncContainer(card), 250); 7885 } 7886 } 7887 }); 7888 7889 const observer = new MutationObserver((mutations) => { 7890 mutations.forEach((mutation) => {
7891 mutation.addedNodes.forEach((node) => { 7892 if (!(node instanceof HTMLElement)) return; 7893 7894 if (node.matches && node.matches('quick-add-modal')) { 7895 setTimeout(() => syncContainer(node), 150); 7896 } 7897 7898 node.querySelectorAll && 7899 node.querySelectorAll('quick-add-modal').forEach((modal) => { 7900 setTimeout(() => syncContainer(modal), 150); 7901 }); 7902 }); 7903 }); 7904 }); 7905 7906 observer.observe(document.documentElement, { 7907 childList: true, 7908 subtree: true 7909 }); 7910 7911 document.addEventListener('DOMContentLoaded', () => { 7912 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 7913 }); 7914 })(); 7915</script>
7915 7916 7917 7918 7919 7920 </li> 7921 7922 <li> 7923 7924<div class="card-wrapper product-card-wrapper underline-links-hover"> 7925 <div 7926 class=" 7927 card 7928 card--card 7929 card--media 7930 color-background-1 gradient 7931 7932 7933 7934 card--badge-sided 7935 7936 7937 " 7938 style="--ratio-percent: 100%;" 7939 > 7940 <div 7941 class="card__inner ratio" 7942 style="--ratio-percent: 100%;" 7943 ><div class="card__media"> 7944 <div class="media media--transparent media--hover-effect"> 7945 7946 <img 7947 srcset="//teamdoctors.com/cdn/shop/products/ScreenShot2023-04-07at10.46.01PM.png?v=1680925749&width=165 165w,//teamdoctors.com/cdn/shop/products/ScreenShot2023-04-07at10.46.01PM.png?v=1680925749 332w 7948 " 7949 src="//teamdoctors.com/cdn/shop/products/ScreenShot2023-04-07at10.46.01PM.png?v=1680925749&width=533" 7950 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7951 alt="Vibeassage Pro Replacement Cables - Team Doctors" 7952 class="motion-reduce" 7953 7954 loading="lazy" 7955 7956 width="332" 7957 height="279" 7958 id='quick-add-7475904184511-image' 7959 > 7960 7961</div> 7962 </div><div class="card__content"> 7963 <div class="card__information"> 7964 <h3 7965 class="card__heading" 7966 7967 > 7968 <a 7969 href="/products/vibeassage-pro-replacement-cables" 7970 id="StandardCardNoMediaLink--7475904184511" 7971 class="full-unstyled-link" 7972 aria-labelledby="StandardCardNoMediaLink--7475904184511 NoMediaStandardBadge--7475904184511" 7973 > 7974 Vibeassage® Pro Replacement Cables 7975 </a> 7976 </h3> 7977 </div> 7978 <div class="card__badge bottom left"> 7979 7980 </div> 7981 </div> 7982 </div> 7983 <div class="card__content"> 7984 <div class="card__information"> 7985 <h3 7986 class="card__heading h5" 7987 7988 id="title--7475904184511" 7989 7990 > 7991 <a 7992 href="/products/vibeassage-pro-replacement-cables" 7993 id="CardLink--7475904184511" 7994 class="full-unstyled-link" 7995 aria-labelledby="CardLink--7475904184511 Badge--7475904184511" 7996 > 7997 Vibeassage® Pro Replacement Cables 7998 </a> 7999 </h3> 8000 8001 <div class="card-information"><span class="caption-large light"></span> 8002<div 8003 class=" 8004 price " 8005> 8006 <div class="price__container"><div class="price__regular"> 8007 <span class="visually-hidden visually-hidden--inline">Regular price</span> 8008 <span class="price-item price-item--regular"> 8009 $129.00 8010 </span> 8011 </div> 8012 <div class="price__sale "> 8013 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 8014 <span class="price-item price-item--sale price-item--last"> 8015 $129.00 8016 </span> 8017 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 8018 <span class="price__compare-price"> 8019 <s class="price-item price-item--regular"> 8020 8021 </s> 8022 </span></div> 8023 <small class="unit-price caption hidden"> 8024 <span class="visually-hidden">Unit price</span> 8025 <span class="price-item price-item--last"> 8026 <span></span> 8027 <span aria-hidden="true">/</span> 8028 <span class="visually-hidden"> per </span> 8029 <span> 8030 </span> 8031 </span> 8032 </small> 8033 </div></div> 8034 8035 </div> 8036 </div> 8037 8038<div class="card__badge bottom left"></div> 8039 </div> 8040 </div> 8041 </div>
8041<script> 8042 (() => { 8043 if (window.cardProductQuickAddVariantFixLoaded) return; 8044 window.cardProductQuickAddVariantFixLoaded = true; 8045 8046 const ADD_TO_CART_TEXT = "Add to cart"; 8047 const SOLD_OUT_TEXT = "Sold out"; 8048 8049 function parseVariants(container) { 8050 if (!container) return []; 8051 8052 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 8053 8054 for (const script of scripts) { 8055 try { 8056 const data = JSON.parse(script.textContent.trim()); 8057 8058 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 8059 return data; 8060 } 8061 8062 if (data && Array.isArray(data.variants)) { 8063 return data.variants; 8064 } 8065 } catch (error) {} 8066 } 8067 8068 return []; 8069 } 8070 8071 function getSelectedOptionValues(container) { 8072 const values = []; 8073 8074 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 8075 const checkedInput = group.querySelector('input[type="radio"]:checked'); 8076 const select = group.querySelector('select'); 8077 8078 if (checkedInput) { 8079 values.push(checkedInput.value); 8080 } else if (select) { 8081 values.push(select.value); 8082 } 8083 }); 8084 8085 return values; 8086 } 8087 8088 function getCurrentVariant(container, form, variants) { 8089 const idInput = form && form.querySelector('[name="id"]'); 8090 const selectedId = idInput && idInput.value; 8091 8092 if (selectedId) { 8093 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 8094 if (byId) return byId; 8095 } 8096 8097 const selectedOptions = getSelectedOptionValues(container); 8098 8099 if (selectedOptions.length) { 8100 return variants.find((variant) => { 8101 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 8102 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 8103 }); 8104 } 8105 8106 return null; 8107 } 8108 8109 function setButtonState(form, variant) { 8110 if (!form) return; 8111 8112 const idInput = form.querySelector('[name="id"]'); 8113 const addButton = form.querySelector('[name="add"]'); 8114 const buttonLabel = 8115 addButton && 8116 (addButton.querySelector('.main-atc__label__text') || 8117 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 8118 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 8119 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 8120 8121 if (!addButton || !idInput || !variant) return; 8122 8123 idInput.value = variant.id; 8124 idInput.disabled = false; 8125 8126 if (spinner) spinner.classList.add('hidden'); 8127 8128 if (variant.available) { 8129 addButton.disabled = false; 8130 addButton.removeAttribute('disabled'); 8131 addButton.removeAttribute('aria-disabled'); 8132 addButton.classList.remove('loading'); 8133 8134 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 8135 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 8136 } else { 8137 addButton.disabled = true; 8138 addButton.setAttribute('disabled', 'disabled'); 8139 addButton.setAttribute('aria-disabled', 'true'); 8140 8141 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 8142 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 8143 } 8144 } 8145 8146 function syncContainer(container) { 8147 if (!container) return; 8148 8149 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 8150 if (!form) return; 8151 8152 const variants = parseVariants(container); 8153 if (!variants.length) return; 8154 8155 const variant = getCurrentVariant(container, form, variants); 8156 if (!variant) return; 8157 8158 setButtonState(form, variant); 8159 } 8160 8161 document.addEventListener('change', (event) => { 8162 const quickAddModal = event.target.closest('quick-add-modal'); 8163 const cardVariantSelects = event.target.closest('card-variant-selects'); 8164 8165 if (quickAddModal) { 8166 setTimeout(() => syncContainer(quickAddModal), 80); 8167 setTimeout(() => syncContainer(quickAddModal), 250); 8168 } 8169 8170 if (cardVariantSelects) { 8171 const card = cardVariantSelects.closest('.card-wrapper'); 8172 if (card) { 8173 setTimeout(() => syncContainer(card), 80); 8174 setTimeout(() => syncContainer(card), 250); 8175 } 8176 } 8177 }); 8178 8179 const observer = new MutationObserver((mutations) => { 8180 mutations.forEach((mutation) => {
8181 mutation.addedNodes.forEach((node) => { 8182 if (!(node instanceof HTMLElement)) return; 8183 8184 if (node.matches && node.matches('quick-add-modal')) { 8185 setTimeout(() => syncContainer(node), 150); 8186 } 8187 8188 node.querySelectorAll && 8189 node.querySelectorAll('quick-add-modal').forEach((modal) => { 8190 setTimeout(() => syncContainer(modal), 150); 8191 }); 8192 }); 8193 }); 8194 }); 8195 8196 observer.observe(document.documentElement, { 8197 childList: true, 8198 subtree: true 8199 }); 8200 8201 document.addEventListener('DOMContentLoaded', () => { 8202 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 8203 }); 8204 })(); 8205</script>
8205 8206 8207 8208 8209 8210 </li> 8211 8212 <li> 8213 8214<div class="card-wrapper product-card-wrapper underline-links-hover"> 8215 <div 8216 class=" 8217 card 8218 card--card 8219 card--media 8220 color-background-1 gradient 8221 8222 8223 8224 card--badge-sided 8225 8226 8227 " 8228 style="--ratio-percent: 100%;" 8229 > 8230 <div 8231 class="card__inner ratio" 8232 style="--ratio-percent: 100%;" 8233 ><div class="card__media"> 8234 <div class="media media--transparent media--hover-effect"> 8235 8236 <img 8237 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844 1254w 8238 " 8239 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=533" 8240 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8241 alt="Relief Bundle - Team Doctors" 8242 class="motion-reduce" 8243 8244 loading="lazy" 8245 8246 width="1254" 8247 height="1254" 8248 id='quick-add-8433935974591-image' 8249 > 8250 8251<img 8252 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311 1080w 8253 " 8254 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533" 8255 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8256 alt="" 8257 class="motion-reduce" 8258 loading="lazy" 8259 width="1080" 8260 height="1080" 8261 ></div> 8262 </div><div class="card__content"> 8263 <div class="card__information"> 8264 <h3 8265 class="card__heading" 8266 8267 > 8268 <a 8269 href="/products/relief-bundle" 8270 id="StandardCardNoMediaLink--8433935974591" 8271 class="full-unstyled-link" 8272 aria-labelledby="StandardCardNoMediaLink--8433935974591 NoMediaStandardBadge--8433935974591" 8273 > 8274 Relief Bundle 8275 </a> 8276 </h3> 8277 </div> 8278 <div class="card__badge bottom left"> 8279 8280
8281 <span 8282 id="NoMediaStandardBadge--8433935974591" 8283 class="badge badge--bottom-left color-accent-2" 8284 > 8285 <svg 8286 aria-hidden="true" 8287 focusable="false" 8288 class="icon icon-discount color-foreground-text" 8289 viewBox="0 0 12 12" 8290> 8291 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 8292</svg> 8293<span class='nowrap'>SAVE 9%</span> 8294 </span></div> 8295 </div> 8296 </div> 8297 <div class="card__content"> 8298 <div class="card__information"> 8299 <h3 8300 class="card__heading h5" 8301 8302 id="title--8433935974591" 8303 8304 > 8305 <a 8306 href="/products/relief-bundle" 8307 id="CardLink--8433935974591" 8308 class="full-unstyled-link" 8309 aria-labelledby="CardLink--8433935974591 Badge--8433935974591" 8310 > 8311 Relief Bundle 8312 </a> 8313 </h3> 8314 8315 <div class="product-subtitle"> 8316 Comfort Relief Pad + Core Recovery Pad 8317 </div> 8318 8319 <div class="card-information"><span class="caption-large light"></span> 8320<div 8321 class=" 8322 price price--on-sale " 8323> 8324 <div class="price__container"><div class="price__regular"> 8325 <span class="visually-hidden visually-hidden--inline">Regular price</span> 8326 <span class="price-item price-item--regular"> 8327 $99.00 8328 </span> 8329 </div> 8330 <div class="price__sale "> 8331 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 8332 <span class="price-item price-item--sale price-item--last"> 8333 $99.00 8334 </span> 8335 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 8336 <span class="price__compare-price"> 8337 <s class="price-item price-item--regular"> 8338 $109.90 8339 </s> 8340 </span></div> 8341 <small class="unit-price caption hidden"> 8342 <span class="visually-hidden">Unit price</span> 8343 <span class="price-item price-item--last"> 8344 <span></span> 8345 <span aria-hidden="true">/</span> 8346 <span class="visually-hidden"> per </span> 8347 <span> 8348 </span> 8349 </span> 8350 </small> 8351 </div></div> 8352 8353 </div> 8354 </div> 8355 8356<div class="card__badge bottom left"><span 8357 id="Badge--8433935974591" 8358 class="badge badge--bottom-left color-accent-2" 8359 > 8360 9% 8361 </span></div> 8362 </div> 8363 </div> 8364 </div>
8364<script> 8365 (() => { 8366 if (window.cardProductQuickAddVariantFixLoaded) return; 8367 window.cardProductQuickAddVariantFixLoaded = true; 8368 8369 const ADD_TO_CART_TEXT = "Add to cart"; 8370 const SOLD_OUT_TEXT = "Sold out"; 8371 8372 function parseVariants(container) { 8373 if (!container) return []; 8374 8375 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 8376 8377 for (const script of scripts) { 8378 try { 8379 const data = JSON.parse(script.textContent.trim()); 8380 8381 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 8382 return data; 8383 } 8384 8385 if (data && Array.isArray(data.variants)) { 8386 return data.variants; 8387 } 8388 } catch (error) {} 8389 } 8390 8391 return []; 8392 } 8393 8394 function getSelectedOptionValues(container) { 8395 const values = []; 8396 8397 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 8398 const checkedInput = group.querySelector('input[type="radio"]:checked'); 8399 const select = group.querySelector('select'); 8400 8401 if (checkedInput) { 8402 values.push(checkedInput.value); 8403 } else if (select) { 8404 values.push(select.value); 8405 } 8406 }); 8407 8408 return values; 8409 } 8410 8411 function getCurrentVariant(container, form, variants) { 8412 const idInput = form && form.querySelector('[name="id"]'); 8413 const selectedId = idInput && idInput.value; 8414 8415 if (selectedId) { 8416 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 8417 if (byId) return byId; 8418 } 8419 8420 const selectedOptions = getSelectedOptionValues(container); 8421 8422 if (selectedOptions.length) { 8423 return variants.find((variant) => { 8424 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 8425 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 8426 }); 8427 } 8428 8429 return null; 8430 } 8431 8432 function setButtonState(form, variant) { 8433 if (!form) return; 8434 8435 const idInput = form.querySelector('[name="id"]'); 8436 const addButton = form.querySelector('[name="add"]'); 8437 const buttonLabel = 8438 addButton && 8439 (addButton.querySelector('.main-atc__label__text') || 8440 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 8441 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 8442 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 8443 8444 if (!addButton || !idInput || !variant) return; 8445 8446 idInput.value = variant.id; 8447 idInput.disabled = false; 8448 8449 if (spinner) spinner.classList.add('hidden'); 8450 8451 if (variant.available) { 8452 addButton.disabled = false; 8453 addButton.removeAttribute('disabled'); 8454 addButton.removeAttribute('aria-disabled'); 8455 addButton.classList.remove('loading'); 8456 8457 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 8458 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 8459 } else { 8460 addButton.disabled = true; 8461 addButton.setAttribute('disabled', 'disabled'); 8462 addButton.setAttribute('aria-disabled', 'true'); 8463 8464 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 8465 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 8466 } 8467 } 8468 8469 function syncContainer(container) { 8470 if (!container) return; 8471 8472 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 8473 if (!form) return; 8474 8475 const variants = parseVariants(container); 8476 if (!variants.length) return; 8477 8478 const variant = getCurrentVariant(container, form, variants); 8479 if (!variant) return; 8480 8481 setButtonState(form, variant); 8482 } 8483 8484 document.addEventListener('change', (event) => { 8485 const quickAddModal = event.target.closest('quick-add-modal'); 8486 const cardVariantSelects = event.target.closest('card-variant-selects'); 8487 8488 if (quickAddModal) { 8489 setTimeout(() => syncContainer(quickAddModal), 80); 8490 setTimeout(() => syncContainer(quickAddModal), 250); 8491 } 8492 8493 if (cardVariantSelects) { 8494 const card = cardVariantSelects.closest('.card-wrapper'); 8495 if (card) { 8496 setTimeout(() => syncContainer(card), 80); 8497 setTimeout(() => syncContainer(card), 250); 8498 } 8499 } 8500 }); 8501 8502 const observer = new MutationObserver((mutations) => { 8503 mutations.forEach((mutation) => {
8504 mutation.addedNodes.forEach((node) => { 8505 if (!(node instanceof HTMLElement)) return; 8506 8507 if (node.matches && node.matches('quick-add-modal')) { 8508 setTimeout(() => syncContainer(node), 150); 8509 } 8510 8511 node.querySelectorAll && 8512 node.querySelectorAll('quick-add-modal').forEach((modal) => { 8513 setTimeout(() => syncContainer(modal), 150); 8514 }); 8515 }); 8516 }); 8517 }); 8518 8519 observer.observe(document.documentElement, { 8520 childList: true, 8521 subtree: true 8522 }); 8523 8524 document.addEventListener('DOMContentLoaded', () => { 8525 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 8526 }); 8527 })(); 8528</script>
8528 8529 8530 8531 8532 8533 </li> 8534 8535 <li> 8536 8537<div class="card-wrapper product-card-wrapper underline-links-hover"> 8538 <div 8539 class=" 8540 card 8541 card--card 8542 card--media 8543 color-background-1 gradient 8544 8545 8546 8547 card--badge-sided 8548 8549 8550 " 8551 style="--ratio-percent: 100%;" 8552 > 8553 <div 8554 class="card__inner ratio" 8555 style="--ratio-percent: 100%;" 8556 ><div class="card__media"> 8557 <div class="media media--transparent media--hover-effect"> 8558 8559 <img 8560 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844 1254w 8561 " 8562 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=533" 8563 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8564 alt="Performance Bundle - Team Doctors" 8565 class="motion-reduce" 8566 8567 loading="lazy" 8568 8569 width="1254" 8570 height="1254" 8571 id='quick-add-8433936007359-image' 8572 > 8573 8574<img 8575 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322 1080w 8576 " 8577 src="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=533" 8578 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8579 alt="" 8580 class="motion-reduce" 8581 loading="lazy" 8582 width="1080" 8583 height="1080" 8584 ></div> 8585 </div><div class="card__content"> 8586 <div class="card__information"> 8587 <h3 8588 class="card__heading" 8589 8590 > 8591 <a 8592 href="/products/performance-bundle" 8593 id="StandardCardNoMediaLink--8433936007359" 8594 class="full-unstyled-link" 8595 aria-labelledby="StandardCardNoMediaLink--8433936007359 NoMediaStandardBadge--8433936007359" 8596 > 8597 Performance Bundle 8598 </a> 8599 </h3> 8600 </div> 8601 <div class="card__badge bottom left"> 8602 8603
8604 <span 8605 id="NoMediaStandardBadge--8433936007359" 8606 class="badge badge--bottom-left color-accent-2" 8607 > 8608 <svg 8609 aria-hidden="true" 8610 focusable="false" 8611 class="icon icon-discount color-foreground-text" 8612 viewBox="0 0 12 12" 8613> 8614 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 8615</svg> 8616<span class='nowrap'>SAVE 9%</span> 8617 </span></div> 8618 </div> 8619 </div> 8620 <div class="card__content"> 8621 <div class="card__information"> 8622 <h3 8623 class="card__heading h5" 8624 8625 id="title--8433936007359" 8626 8627 > 8628 <a 8629 href="/products/performance-bundle" 8630 id="CardLink--8433936007359" 8631 class="full-unstyled-link" 8632 aria-labelledby="CardLink--8433936007359 Badge--8433936007359" 8633 > 8634 Performance Bundle 8635 </a> 8636 </h3> 8637 8638 <div class="product-subtitle"> 8639 Core Cecovery Pad + Peak Performance Pad 8640 </div> 8641 8642 <div class="card-information"><span class="caption-large light"></span> 8643<div 8644 class=" 8645 price price--on-sale " 8646> 8647 <div class="price__container"><div class="price__regular"> 8648 <span class="visually-hidden visually-hidden--inline">Regular price</span> 8649 <span class="price-item price-item--regular"> 8650 $99.00 8651 </span> 8652 </div> 8653 <div class="price__sale "> 8654 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 8655 <span class="price-item price-item--sale price-item--last"> 8656 $99.00 8657 </span> 8658 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 8659 <span class="price__compare-price"> 8660 <s class="price-item price-item--regular"> 8661 $109.90 8662 </s> 8663 </span></div> 8664 <small class="unit-price caption hidden"> 8665 <span class="visually-hidden">Unit price</span> 8666 <span class="price-item price-item--last"> 8667 <span></span> 8668 <span aria-hidden="true">/</span> 8669 <span class="visually-hidden"> per </span> 8670 <span> 8671 </span> 8672 </span> 8673 </small> 8674 </div></div> 8675 8676 </div> 8677 </div> 8678 8679<div class="card__badge bottom left"><span 8680 id="Badge--8433936007359" 8681 class="badge badge--bottom-left color-accent-2" 8682 > 8683 9% 8684 </span></div> 8685 </div> 8686 </div> 8687 </div>
8687<script> 8688 (() => { 8689 if (window.cardProductQuickAddVariantFixLoaded) return; 8690 window.cardProductQuickAddVariantFixLoaded = true; 8691 8692 const ADD_TO_CART_TEXT = "Add to cart"; 8693 const SOLD_OUT_TEXT = "Sold out"; 8694 8695 function parseVariants(container) { 8696 if (!container) return []; 8697 8698 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 8699 8700 for (const script of scripts) { 8701 try { 8702 const data = JSON.parse(script.textContent.trim()); 8703 8704 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 8705 return data; 8706 } 8707 8708 if (data && Array.isArray(data.variants)) { 8709 return data.variants; 8710 } 8711 } catch (error) {} 8712 } 8713 8714 return []; 8715 } 8716 8717 function getSelectedOptionValues(container) { 8718 const values = []; 8719 8720 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 8721 const checkedInput = group.querySelector('input[type="radio"]:checked'); 8722 const select = group.querySelector('select'); 8723 8724 if (checkedInput) { 8725 values.push(checkedInput.value); 8726 } else if (select) { 8727 values.push(select.value); 8728 } 8729 }); 8730 8731 return values; 8732 } 8733 8734 function getCurrentVariant(container, form, variants) { 8735 const idInput = form && form.querySelector('[name="id"]'); 8736 const selectedId = idInput && idInput.value; 8737 8738 if (selectedId) { 8739 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 8740 if (byId) return byId; 8741 } 8742 8743 const selectedOptions = getSelectedOptionValues(container); 8744 8745 if (selectedOptions.length) { 8746 return variants.find((variant) => { 8747 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 8748 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 8749 }); 8750 } 8751 8752 return null; 8753 } 8754 8755 function setButtonState(form, variant) { 8756 if (!form) return; 8757 8758 const idInput = form.querySelector('[name="id"]'); 8759 const addButton = form.querySelector('[name="add"]'); 8760 const buttonLabel = 8761 addButton && 8762 (addButton.querySelector('.main-atc__label__text') || 8763 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 8764 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 8765 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 8766 8767 if (!addButton || !idInput || !variant) return; 8768 8769 idInput.value = variant.id; 8770 idInput.disabled = false; 8771 8772 if (spinner) spinner.classList.add('hidden'); 8773 8774 if (variant.available) { 8775 addButton.disabled = false; 8776 addButton.removeAttribute('disabled'); 8777 addButton.removeAttribute('aria-disabled'); 8778 addButton.classList.remove('loading'); 8779 8780 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 8781 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 8782 } else { 8783 addButton.disabled = true; 8784 addButton.setAttribute('disabled', 'disabled'); 8785 addButton.setAttribute('aria-disabled', 'true'); 8786 8787 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 8788 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 8789 } 8790 } 8791 8792 function syncContainer(container) { 8793 if (!container) return; 8794 8795 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 8796 if (!form) return; 8797 8798 const variants = parseVariants(container); 8799 if (!variants.length) return; 8800 8801 const variant = getCurrentVariant(container, form, variants); 8802 if (!variant) return; 8803 8804 setButtonState(form, variant); 8805 } 8806 8807 document.addEventListener('change', (event) => { 8808 const quickAddModal = event.target.closest('quick-add-modal'); 8809 const cardVariantSelects = event.target.closest('card-variant-selects'); 8810 8811 if (quickAddModal) { 8812 setTimeout(() => syncContainer(quickAddModal), 80); 8813 setTimeout(() => syncContainer(quickAddModal), 250); 8814 } 8815 8816 if (cardVariantSelects) { 8817 const card = cardVariantSelects.closest('.card-wrapper'); 8818 if (card) { 8819 setTimeout(() => syncContainer(card), 80); 8820 setTimeout(() => syncContainer(card), 250); 8821 } 8822 } 8823 }); 8824 8825 const observer = new MutationObserver((mutations) => { 8826 mutations.forEach((mutation) => {
8827 mutation.addedNodes.forEach((node) => { 8828 if (!(node instanceof HTMLElement)) return; 8829 8830 if (node.matches && node.matches('quick-add-modal')) { 8831 setTimeout(() => syncContainer(node), 150); 8832 } 8833 8834 node.querySelectorAll && 8835 node.querySelectorAll('quick-add-modal').forEach((modal) => { 8836 setTimeout(() => syncContainer(modal), 150); 8837 }); 8838 }); 8839 }); 8840 }); 8841 8842 observer.observe(document.documentElement, { 8843 childList: true, 8844 subtree: true 8845 }); 8846 8847 document.addEventListener('DOMContentLoaded', () => { 8848 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 8849 }); 8850 })(); 8851</script>
8851 8852 8853 8854 8855 8856 </li> 8857 8858 8859</ul> 8860 8861 </div> 8862 </details></li><li><details id="Details-menu-drawer-submenu-3"> 8863 <summary class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 8864 8865 Bundles 8866 <svg 8867 viewBox="0 0 14 10" 8868 fill="none" 8869 aria-hidden="true" 8870 focusable="false" 8871 class="icon icon-arrow" 8872 xmlns="http://www.w3.org/2000/svg" 8873> 8874 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 8875</svg> 8876 8877 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 8878 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 8879</svg> 8880 8881 </summary> 8882 <div id="childlink-bundles" class="menu-drawer__submenu has-submenu gradient motion-reduce"> 8883 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 8884 <svg 8885 viewBox="0 0 14 10" 8886 fill="none" 8887 aria-hidden="true" 8888 focusable="false" 8889 class="icon icon-arrow" 8890 xmlns="http://www.w3.org/2000/svg" 8891> 8892 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 8893</svg> 8894 8895 Bundles 8896 </button> 8897 8898 <ul class="products-mega-menu__cards products-mega-menu__cards--mobile"> 8899 8900 8901 8902 8903 <li> 8904 8905<div class="card-wrapper product-card-wrapper underline-links-hover"> 8906 <div 8907 class=" 8908 card 8909 card--card 8910 card--media 8911 color-background-1 gradient 8912 8913 8914 8915 card--badge-sided 8916 8917 8918 " 8919 style="--ratio-percent: 100%;" 8920 > 8921 <div 8922 class="card__inner ratio" 8923 style="--ratio-percent: 100%;" 8924 ><div class="card__media"> 8925 <div class="media media--transparent media--hover-effect"> 8926 8927 <img 8928 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523 1254w 8929 " 8930 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=533" 8931 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8932 alt="Complete Recovery Solution Bundle - Team Doctors" 8933 class="motion-reduce" 8934 8935 loading="lazy" 8936 8937 width="1254" 8938 height="1254" 8939 id='quick-add-8455539065023-image' 8940 > 8941 8942<img
8943 srcset="//teamdoctors.com/cdn/shop/files/preview_images/b45585c208f5471097460280d2b7e84e.thumbnail.0000000000.jpg?v=1780910014 w 8944 " 8945 src="//teamdoctors.com/cdn/shop/files/preview_images/b45585c208f5471097460280d2b7e84e.thumbnail.0000000000.jpg?v=1780910014&width=533" 8946 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8947 alt="" 8948 class="motion-reduce" 8949 loading="lazy" 8950 width="" 8951 height="" 8952 ></div> 8953 </div><div class="card__content"> 8954 <div class="card__information"> 8955 <h3 8956 class="card__heading" 8957 8958 > 8959 <a 8960 href="/products/complete-recovery-solution-bundle" 8961 id="StandardCardNoMediaLink--8455539065023" 8962 class="full-unstyled-link" 8963 aria-labelledby="StandardCardNoMediaLink--8455539065023 NoMediaStandardBadge--8455539065023" 8964 > 8965 Complete Biomimetic Recovery System⢠8966 </a> 8967 </h3> 8968 </div> 8969 <div class="card__badge bottom left"> 8970 8971 8972 <span 8973 id="NoMediaStandardBadge--8455539065023" 8974 class="badge badge--bottom-left color-accent-2" 8975 > 8976 <svg 8977 aria-hidden="true" 8978 focusable="false" 8979 class="icon icon-discount color-foreground-text" 8980 viewBox="0 0 12 12" 8981> 8982 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 8983</svg> 8984<span class='nowrap'>SAVE 10%</span> 8985 </span></div> 8986 </div> 8987 </div> 8988 <div class="card__content"> 8989 <div class="card__information"> 8990 <h3 8991 class="card__heading h5" 8992 8993 id="title--8455539065023" 8994 8995 > 8996 <a 8997 href="/products/complete-recovery-solution-bundle" 8998 id="CardLink--8455539065023" 8999 class="full-unstyled-link" 9000 aria-labelledby="CardLink--8455539065023 Badge--8455539065023" 9001 > 9002 Complete Biomimetic Recovery System⢠9003 </a> 9004 </h3> 9005 9006 <div class="product-subtitle"> 9007 The Vibeassage Pro® + The Vibeassage Sport® 9008 </div> 9009 9010 <div class="card-information"><span class="caption-large light"></span> 9011<div 9012 class=" 9013 price price--on-sale " 9014> 9015 <div class="price__container"><div class="price__regular"> 9016 <span class="visually-hidden visually-hidden--inline">Regular price</span> 9017 <span class="price-item price-item--regular"> 9018 $1,807.00 9019 </span> 9020 </div> 9021 <div class="price__sale "> 9022 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 9023 <span class="price-item price-item--sale price-item--last"> 9024 $1,807.00 9025 </span> 9026 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 9027 <span class="price__compare-price"> 9028 <s class="price-item price-item--regular"> 9029 $2,008.00 9030 </s> 9031 </span></div> 9032 <small class="unit-price caption hidden"> 9033 <span class="visually-hidden">Unit price</span> 9034 <span class="price-item price-item--last"> 9035 <span></span> 9036 <span aria-hidden="true">/</span> 9037 <span class="visually-hidden"> per </span> 9038 <span> 9039 </span> 9040 </span> 9041 </small> 9042 </div></div> 9043 9044 </div> 9045 </div> 9046 9047<div class="card__badge bottom left"><span 9048 id="Badge--8455539065023" 9049 class="badge badge--bottom-left color-accent-2" 9050 > 9051 10% 9052 </span></div> 9053 </div> 9054 </div> 9055 </div>
9055<script> 9056 (() => { 9057 if (window.cardProductQuickAddVariantFixLoaded) return; 9058 window.cardProductQuickAddVariantFixLoaded = true; 9059 9060 const ADD_TO_CART_TEXT = "Add to cart"; 9061 const SOLD_OUT_TEXT = "Sold out"; 9062 9063 function parseVariants(container) { 9064 if (!container) return []; 9065 9066 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 9067 9068 for (const script of scripts) { 9069 try { 9070 const data = JSON.parse(script.textContent.trim()); 9071 9072 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 9073 return data; 9074 } 9075 9076 if (data && Array.isArray(data.variants)) { 9077 return data.variants; 9078 } 9079 } catch (error) {} 9080 } 9081 9082 return []; 9083 } 9084 9085 function getSelectedOptionValues(container) { 9086 const values = []; 9087 9088 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 9089 const checkedInput = group.querySelector('input[type="radio"]:checked'); 9090 const select = group.querySelector('select'); 9091 9092 if (checkedInput) { 9093 values.push(checkedInput.value); 9094 } else if (select) { 9095 values.push(select.value); 9096 } 9097 }); 9098 9099 return values; 9100 } 9101 9102 function getCurrentVariant(container, form, variants) { 9103 const idInput = form && form.querySelector('[name="id"]'); 9104 const selectedId = idInput && idInput.value; 9105 9106 if (selectedId) { 9107 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 9108 if (byId) return byId; 9109 } 9110 9111 const selectedOptions = getSelectedOptionValues(container); 9112 9113 if (selectedOptions.length) { 9114 return variants.find((variant) => { 9115 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 9116 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 9117 }); 9118 } 9119 9120 return null; 9121 } 9122 9123 function setButtonState(form, variant) { 9124 if (!form) return; 9125 9126 const idInput = form.querySelector('[name="id"]'); 9127 const addButton = form.querySelector('[name="add"]'); 9128 const buttonLabel = 9129 addButton && 9130 (addButton.querySelector('.main-atc__label__text') || 9131 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 9132 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 9133 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 9134 9135 if (!addButton || !idInput || !variant) return; 9136 9137 idInput.value = variant.id; 9138 idInput.disabled = false; 9139 9140 if (spinner) spinner.classList.add('hidden'); 9141 9142 if (variant.available) { 9143 addButton.disabled = false; 9144 addButton.removeAttribute('disabled'); 9145 addButton.removeAttribute('aria-disabled'); 9146 addButton.classList.remove('loading'); 9147 9148 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 9149 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 9150 } else { 9151 addButton.disabled = true; 9152 addButton.setAttribute('disabled', 'disabled'); 9153 addButton.setAttribute('aria-disabled', 'true'); 9154 9155 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 9156 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 9157 } 9158 } 9159 9160 function syncContainer(container) { 9161 if (!container) return; 9162 9163 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 9164 if (!form) return; 9165 9166 const variants = parseVariants(container); 9167 if (!variants.length) return; 9168 9169 const variant = getCurrentVariant(container, form, variants); 9170 if (!variant) return; 9171 9172 setButtonState(form, variant); 9173 } 9174 9175 document.addEventListener('change', (event) => { 9176 const quickAddModal = event.target.closest('quick-add-modal'); 9177 const cardVariantSelects = event.target.closest('card-variant-selects'); 9178 9179 if (quickAddModal) { 9180 setTimeout(() => syncContainer(quickAddModal), 80); 9181 setTimeout(() => syncContainer(quickAddModal), 250); 9182 } 9183 9184 if (cardVariantSelects) { 9185 const card = cardVariantSelects.closest('.card-wrapper'); 9186 if (card) { 9187 setTimeout(() => syncContainer(card), 80); 9188 setTimeout(() => syncContainer(card), 250); 9189 } 9190 } 9191 }); 9192 9193 const observer = new MutationObserver((mutations) => { 9194 mutations.forEach((mutation) => {
9195 mutation.addedNodes.forEach((node) => { 9196 if (!(node instanceof HTMLElement)) return; 9197 9198 if (node.matches && node.matches('quick-add-modal')) { 9199 setTimeout(() => syncContainer(node), 150); 9200 } 9201 9202 node.querySelectorAll && 9203 node.querySelectorAll('quick-add-modal').forEach((modal) => { 9204 setTimeout(() => syncContainer(modal), 150); 9205 }); 9206 }); 9207 }); 9208 }); 9209 9210 observer.observe(document.documentElement, { 9211 childList: true, 9212 subtree: true 9213 }); 9214 9215 document.addEventListener('DOMContentLoaded', () => { 9216 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 9217 }); 9218 })(); 9219</script>
9219 9220 9221 9222 9223 9224 </li> 9225 9226 <li> 9227 9228<div class="card-wrapper product-card-wrapper underline-links-hover"> 9229 <div 9230 class=" 9231 card 9232 card--card 9233 card--media 9234 color-background-1 gradient 9235 9236 9237 9238 card--badge-sided 9239 9240 9241 " 9242 style="--ratio-percent: 100%;" 9243 > 9244 <div 9245 class="card__inner ratio" 9246 style="--ratio-percent: 100%;" 9247 ><div class="card__media"> 9248 <div class="media media--transparent media--hover-effect"> 9249 9250 <img 9251 srcset="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914 w 9252 " 9253 src="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914&width=533" 9254 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9255 alt="The Vibeassage Pro® with the full 3-pad Biomimetic Systemâ¢" 9256 class="motion-reduce" 9257 9258 loading="lazy" 9259 9260 width="" 9261 height="" 9262 id='quick-add-7253705130175-image' 9263 > 9264 9265<img 9266 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339 810w 9267 " 9268 src="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533" 9269 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9270 alt="" 9271 class="motion-reduce" 9272 loading="lazy" 9273 width="810" 9274 height="605" 9275 ></div> 9276 </div><div class="card__content"> 9277 <div class="card__information"> 9278 <h3 9279 class="card__heading" 9280 9281 > 9282 <a 9283 href="/products/vibeassage-pro" 9284 id="StandardCardNoMediaLink--7253705130175" 9285 class="full-unstyled-link" 9286 aria-labelledby="StandardCardNoMediaLink--7253705130175 NoMediaStandardBadge--7253705130175" 9287 > 9288 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠9289 </a> 9290 </h3> 9291 </div> 9292 <div class="card__badge bottom left"> 9293 9294 9295 <span 9296 id="NoMediaStandardBadge--7253705130175" 9297 class="badge badge--bottom-left color-accent-2" 9298 > 9299 <svg 9300 aria-hidden="true" 9301 focusable="false" 9302 class="icon icon-discount color-foreground-text" 9303 viewBox="0 0 12 12" 9304> 9305 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 9306</svg> 9307<span class='nowrap'>SAVE 9%</span> 9308 </span></div> 9309 </div> 9310 </div> 9311 <div class="card__content"> 9312 <div class="card__information"> 9313 <h3 9314 class="card__heading h5" 9315 9316 id="title--7253705130175" 9317 9318 > 9319 <a 9320 href="/products/vibeassage-pro" 9321 id="CardLink--7253705130175" 9322 class="full-unstyled-link" 9323 aria-labelledby="CardLink--7253705130175 Badge--7253705130175" 9324 > 9325 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠9326 </a> 9327 </h3> 9328 9329 <div class="card-information"><span class="caption-large light"></span> 9330<div 9331 class=" 9332 price price--on-sale " 9333> 9334 <div class="price__container"><div class="price__regular">
9335 <span class="visually-hidden visually-hidden--inline">Regular price</span> 9336 <span class="price-item price-item--regular"> 9337 $1,579.00 9338 </span> 9339 </div> 9340 <div class="price__sale "> 9341 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 9342 <span class="price-item price-item--sale price-item--last"> 9343 $1,579.00 9344 </span> 9345 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 9346 <span class="price__compare-price"> 9347 <s class="price-item price-item--regular"> 9348 $1,749.00 9349 </s> 9350 </span></div> 9351 <small class="unit-price caption hidden"> 9352 <span class="visually-hidden">Unit price</span> 9353 <span class="price-item price-item--last"> 9354 <span></span> 9355 <span aria-hidden="true">/</span> 9356 <span class="visually-hidden"> per </span> 9357 <span> 9358 </span> 9359 </span> 9360 </small> 9361 </div></div> 9362 9363 </div> 9364 </div> 9365 9366<div class="card__badge bottom left"><span 9367 id="Badge--7253705130175" 9368 class="badge badge--bottom-left color-accent-2" 9369 > 9370 9% 9371 </span></div> 9372 </div> 9373 </div> 9374 </div>
9374<script> 9375 (() => { 9376 if (window.cardProductQuickAddVariantFixLoaded) return; 9377 window.cardProductQuickAddVariantFixLoaded = true; 9378 9379 const ADD_TO_CART_TEXT = "Add to cart"; 9380 const SOLD_OUT_TEXT = "Sold out"; 9381 9382 function parseVariants(container) { 9383 if (!container) return []; 9384 9385 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 9386 9387 for (const script of scripts) { 9388 try { 9389 const data = JSON.parse(script.textContent.trim()); 9390 9391 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 9392 return data; 9393 } 9394 9395 if (data && Array.isArray(data.variants)) { 9396 return data.variants; 9397 } 9398 } catch (error) {} 9399 } 9400 9401 return []; 9402 } 9403 9404 function getSelectedOptionValues(container) { 9405 const values = []; 9406 9407 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 9408 const checkedInput = group.querySelector('input[type="radio"]:checked'); 9409 const select = group.querySelector('select'); 9410 9411 if (checkedInput) { 9412 values.push(checkedInput.value); 9413 } else if (select) { 9414 values.push(select.value); 9415 } 9416 }); 9417 9418 return values; 9419 } 9420 9421 function getCurrentVariant(container, form, variants) { 9422 const idInput = form && form.querySelector('[name="id"]'); 9423 const selectedId = idInput && idInput.value; 9424 9425 if (selectedId) { 9426 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 9427 if (byId) return byId; 9428 } 9429 9430 const selectedOptions = getSelectedOptionValues(container); 9431 9432 if (selectedOptions.length) { 9433 return variants.find((variant) => { 9434 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 9435 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 9436 }); 9437 } 9438 9439 return null; 9440 } 9441 9442 function setButtonState(form, variant) { 9443 if (!form) return; 9444 9445 const idInput = form.querySelector('[name="id"]'); 9446 const addButton = form.querySelector('[name="add"]'); 9447 const buttonLabel = 9448 addButton && 9449 (addButton.querySelector('.main-atc__label__text') || 9450 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 9451 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 9452 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 9453 9454 if (!addButton || !idInput || !variant) return; 9455 9456 idInput.value = variant.id; 9457 idInput.disabled = false; 9458 9459 if (spinner) spinner.classList.add('hidden'); 9460 9461 if (variant.available) { 9462 addButton.disabled = false; 9463 addButton.removeAttribute('disabled'); 9464 addButton.removeAttribute('aria-disabled'); 9465 addButton.classList.remove('loading'); 9466 9467 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 9468 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 9469 } else { 9470 addButton.disabled = true; 9471 addButton.setAttribute('disabled', 'disabled'); 9472 addButton.setAttribute('aria-disabled', 'true'); 9473 9474 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 9475 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 9476 } 9477 } 9478 9479 function syncContainer(container) { 9480 if (!container) return; 9481 9482 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 9483 if (!form) return; 9484 9485 const variants = parseVariants(container); 9486 if (!variants.length) return; 9487 9488 const variant = getCurrentVariant(container, form, variants); 9489 if (!variant) return; 9490 9491 setButtonState(form, variant); 9492 } 9493 9494 document.addEventListener('change', (event) => { 9495 const quickAddModal = event.target.closest('quick-add-modal'); 9496 const cardVariantSelects = event.target.closest('card-variant-selects'); 9497 9498 if (quickAddModal) { 9499 setTimeout(() => syncContainer(quickAddModal), 80); 9500 setTimeout(() => syncContainer(quickAddModal), 250); 9501 } 9502 9503 if (cardVariantSelects) { 9504 const card = cardVariantSelects.closest('.card-wrapper'); 9505 if (card) { 9506 setTimeout(() => syncContainer(card), 80); 9507 setTimeout(() => syncContainer(card), 250); 9508 } 9509 } 9510 }); 9511 9512 const observer = new MutationObserver((mutations) => { 9513 mutations.forEach((mutation) => {
9514 mutation.addedNodes.forEach((node) => { 9515 if (!(node instanceof HTMLElement)) return; 9516 9517 if (node.matches && node.matches('quick-add-modal')) { 9518 setTimeout(() => syncContainer(node), 150); 9519 } 9520 9521 node.querySelectorAll && 9522 node.querySelectorAll('quick-add-modal').forEach((modal) => { 9523 setTimeout(() => syncContainer(modal), 150); 9524 }); 9525 }); 9526 }); 9527 }); 9528 9529 observer.observe(document.documentElement, { 9530 childList: true, 9531 subtree: true 9532 }); 9533 9534 document.addEventListener('DOMContentLoaded', () => { 9535 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 9536 }); 9537 })(); 9538</script>
9538 9539 9540 9541 9542 9543 </li> 9544 9545 <li> 9546 9547<div class="card-wrapper product-card-wrapper underline-links-hover"> 9548 <div 9549 class=" 9550 card 9551 card--card 9552 card--media 9553 color-background-1 gradient 9554 9555 9556 9557 card--badge-sided 9558 9559 9560 " 9561 style="--ratio-percent: 100%;" 9562 > 9563 <div 9564 class="card__inner ratio" 9565 style="--ratio-percent: 100%;" 9566 ><div class="card__media"> 9567 <div class="media media--transparent media--hover-effect"> 9568 9569 <img 9570 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068 1254w 9571 " 9572 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=533" 9573 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9574 alt="White" 9575 class="motion-reduce" 9576 9577 loading="lazy" 9578 9579 width="1254" 9580 height="1254" 9581 id='quick-add-8342973219007-image' 9582 > 9583 9584<img 9585 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847 1080w 9586 " 9587 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=533" 9588 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9589 alt="" 9590 class="motion-reduce" 9591 loading="lazy" 9592 width="1080" 9593 height="1080" 9594 ></div> 9595 </div><div class="card__content"> 9596 <div class="card__information"> 9597 <h3 9598 class="card__heading" 9599 9600 > 9601 <a 9602 href="/products/vibeassage-complete-system" 9603 id="StandardCardNoMediaLink--8342973219007" 9604 class="full-unstyled-link" 9605 aria-labelledby="StandardCardNoMediaLink--8342973219007 NoMediaStandardBadge--8342973219007" 9606 > 9607 â Vibeassage⢠Sport with 3 Biomimetic Pads - The Complete System 9608 </a> 9609 </h3> 9610 </div> 9611 <div class="card__badge bottom left"> 9612 9613 </div> 9614 </div> 9615 </div> 9616 <div class="card__content"> 9617 <div class="card__information"> 9618 <h3 9619 class="card__heading h5" 9620 9621 id="title--8342973219007" 9622 9623 > 9624 <a 9625 href="/products/vibeassage-complete-system" 9626 id="CardLink--8342973219007" 9627 class="full-unstyled-link" 9628 aria-labelledby="CardLink--8342973219007 Badge--8342973219007" 9629 > 9630 â Vibeassage⢠Sport with 3 Biomimetic Pads - The Complete System 9631 </a> 9632 </h3> 9633 9634 <div class="card-information"><span class="caption-large light"></span> 9635<div 9636 class=" 9637 price " 9638> 9639 <div class="price__container"><div class="price__regular">
9640 <span class="visually-hidden visually-hidden--inline">Regular price</span> 9641 <span class="price-item price-item--regular"> 9642 From $429.00 9643 </span> 9644 </div> 9645 <div class="price__sale "> 9646 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 9647 <span class="price-item price-item--sale price-item--last"> 9648 From $429.00 9649 </span> 9650 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 9651 <span class="price__compare-price"> 9652 <s class="price-item price-item--regular"> 9653 9654 </s> 9655 </span></div> 9656 <small class="unit-price caption hidden"> 9657 <span class="visually-hidden">Unit price</span> 9658 <span class="price-item price-item--last"> 9659 <span></span> 9660 <span aria-hidden="true">/</span> 9661 <span class="visually-hidden"> per </span> 9662 <span> 9663 </span> 9664 </span> 9665 </small> 9666 </div></div> 9667 9668 </div> 9669 </div> 9670 9671<div class="card__badge bottom left"></div> 9672 </div> 9673 </div> 9674 </div>
9674<script> 9675 (() => { 9676 if (window.cardProductQuickAddVariantFixLoaded) return; 9677 window.cardProductQuickAddVariantFixLoaded = true; 9678 9679 const ADD_TO_CART_TEXT = "Add to cart"; 9680 const SOLD_OUT_TEXT = "Sold out"; 9681 9682 function parseVariants(container) { 9683 if (!container) return []; 9684 9685 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 9686 9687 for (const script of scripts) { 9688 try { 9689 const data = JSON.parse(script.textContent.trim()); 9690 9691 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 9692 return data; 9693 } 9694 9695 if (data && Array.isArray(data.variants)) { 9696 return data.variants; 9697 } 9698 } catch (error) {} 9699 } 9700 9701 return []; 9702 } 9703 9704 function getSelectedOptionValues(container) { 9705 const values = []; 9706 9707 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 9708 const checkedInput = group.querySelector('input[type="radio"]:checked'); 9709 const select = group.querySelector('select'); 9710 9711 if (checkedInput) { 9712 values.push(checkedInput.value); 9713 } else if (select) { 9714 values.push(select.value); 9715 } 9716 }); 9717 9718 return values; 9719 } 9720 9721 function getCurrentVariant(container, form, variants) { 9722 const idInput = form && form.querySelector('[name="id"]'); 9723 const selectedId = idInput && idInput.value; 9724 9725 if (selectedId) { 9726 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 9727 if (byId) return byId; 9728 } 9729 9730 const selectedOptions = getSelectedOptionValues(container); 9731 9732 if (selectedOptions.length) { 9733 return variants.find((variant) => { 9734 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 9735 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 9736 }); 9737 } 9738 9739 return null; 9740 } 9741 9742 function setButtonState(form, variant) { 9743 if (!form) return; 9744 9745 const idInput = form.querySelector('[name="id"]'); 9746 const addButton = form.querySelector('[name="add"]'); 9747 const buttonLabel = 9748 addButton && 9749 (addButton.querySelector('.main-atc__label__text') || 9750 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 9751 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 9752 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 9753 9754 if (!addButton || !idInput || !variant) return; 9755 9756 idInput.value = variant.id; 9757 idInput.disabled = false; 9758 9759 if (spinner) spinner.classList.add('hidden'); 9760 9761 if (variant.available) { 9762 addButton.disabled = false; 9763 addButton.removeAttribute('disabled'); 9764 addButton.removeAttribute('aria-disabled'); 9765 addButton.classList.remove('loading'); 9766 9767 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 9768 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 9769 } else { 9770 addButton.disabled = true; 9771 addButton.setAttribute('disabled', 'disabled'); 9772 addButton.setAttribute('aria-disabled', 'true'); 9773 9774 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 9775 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 9776 } 9777 } 9778 9779 function syncContainer(container) { 9780 if (!container) return; 9781 9782 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 9783 if (!form) return; 9784 9785 const variants = parseVariants(container); 9786 if (!variants.length) return; 9787 9788 const variant = getCurrentVariant(container, form, variants); 9789 if (!variant) return; 9790 9791 setButtonState(form, variant); 9792 } 9793 9794 document.addEventListener('change', (event) => { 9795 const quickAddModal = event.target.closest('quick-add-modal'); 9796 const cardVariantSelects = event.target.closest('card-variant-selects'); 9797 9798 if (quickAddModal) { 9799 setTimeout(() => syncContainer(quickAddModal), 80); 9800 setTimeout(() => syncContainer(quickAddModal), 250); 9801 } 9802 9803 if (cardVariantSelects) { 9804 const card = cardVariantSelects.closest('.card-wrapper'); 9805 if (card) { 9806 setTimeout(() => syncContainer(card), 80); 9807 setTimeout(() => syncContainer(card), 250); 9808 } 9809 } 9810 }); 9811 9812 const observer = new MutationObserver((mutations) => { 9813 mutations.forEach((mutation) => {
9814 mutation.addedNodes.forEach((node) => { 9815 if (!(node instanceof HTMLElement)) return; 9816 9817 if (node.matches && node.matches('quick-add-modal')) { 9818 setTimeout(() => syncContainer(node), 150); 9819 } 9820 9821 node.querySelectorAll && 9822 node.querySelectorAll('quick-add-modal').forEach((modal) => { 9823 setTimeout(() => syncContainer(modal), 150); 9824 }); 9825 }); 9826 }); 9827 }); 9828 9829 observer.observe(document.documentElement, { 9830 childList: true, 9831 subtree: true 9832 }); 9833 9834 document.addEventListener('DOMContentLoaded', () => { 9835 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 9836 }); 9837 })(); 9838</script>
9838 9839 9840 9841 9842 9843 </li> 9844 9845 <li> 9846 9847<div class="card-wrapper product-card-wrapper underline-links-hover"> 9848 <div 9849 class=" 9850 card 9851 card--card 9852 card--media 9853 color-background-1 gradient 9854 9855 9856 9857 card--badge-sided 9858 9859 9860 " 9861 style="--ratio-percent: 100%;" 9862 > 9863 <div 9864 class="card__inner ratio" 9865 style="--ratio-percent: 100%;" 9866 ><div class="card__media"> 9867 <div class="media media--transparent media--hover-effect"> 9868 9869 <img 9870 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068 1254w 9871 " 9872 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=533" 9873 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9874 alt="White" 9875 class="motion-reduce" 9876 9877 loading="lazy" 9878 9879 width="1254" 9880 height="1254" 9881 id='quick-add-8342972334271-image' 9882 > 9883 9884<img 9885 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068 1254w 9886 " 9887 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=533" 9888 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9889 alt="" 9890 class="motion-reduce" 9891 loading="lazy" 9892 width="1254" 9893 height="1254" 9894 ></div> 9895 </div><div class="card__content"> 9896 <div class="card__information"> 9897 <h3 9898 class="card__heading" 9899 9900 > 9901 <a 9902 href="/products/vibeassage-relief-bundle" 9903 id="StandardCardNoMediaLink--8342972334271" 9904 class="full-unstyled-link" 9905 aria-labelledby="StandardCardNoMediaLink--8342972334271 NoMediaStandardBadge--8342972334271" 9906 > 9907 Vibeassage® Relief Bundle 9908 </a> 9909 </h3> 9910 </div> 9911 <div class="card__badge bottom left"> 9912 9913 </div> 9914 </div> 9915 </div> 9916 <div class="card__content"> 9917 <div class="card__information"> 9918 <h3 9919 class="card__heading h5" 9920 9921 id="title--8342972334271" 9922 9923 > 9924 <a 9925 href="/products/vibeassage-relief-bundle" 9926 id="CardLink--8342972334271" 9927 class="full-unstyled-link" 9928 aria-labelledby="CardLink--8342972334271 Badge--8342972334271" 9929 > 9930 Vibeassage® Relief Bundle 9931 </a> 9932 </h3> 9933 9934 <div class="card-information"><span class="caption-large light"></span> 9935<div 9936 class=" 9937 price " 9938> 9939 <div class="price__container"><div class="price__regular">
9940 <span class="visually-hidden visually-hidden--inline">Regular price</span> 9941 <span class="price-item price-item--regular"> 9942 From $389.00 9943 </span> 9944 </div> 9945 <div class="price__sale "> 9946 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 9947 <span class="price-item price-item--sale price-item--last"> 9948 From $389.00 9949 </span> 9950 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 9951 <span class="price__compare-price"> 9952 <s class="price-item price-item--regular"> 9953 9954 </s> 9955 </span></div> 9956 <small class="unit-price caption hidden"> 9957 <span class="visually-hidden">Unit price</span> 9958 <span class="price-item price-item--last"> 9959 <span></span> 9960 <span aria-hidden="true">/</span> 9961 <span class="visually-hidden"> per </span> 9962 <span> 9963 </span> 9964 </span> 9965 </small> 9966 </div></div> 9967 9968 </div> 9969 </div> 9970 9971<div class="card__badge bottom left"></div> 9972 </div> 9973 </div> 9974 </div>
9974<script> 9975 (() => { 9976 if (window.cardProductQuickAddVariantFixLoaded) return; 9977 window.cardProductQuickAddVariantFixLoaded = true; 9978 9979 const ADD_TO_CART_TEXT = "Add to cart"; 9980 const SOLD_OUT_TEXT = "Sold out"; 9981 9982 function parseVariants(container) { 9983 if (!container) return []; 9984 9985 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 9986 9987 for (const script of scripts) { 9988 try { 9989 const data = JSON.parse(script.textContent.trim()); 9990 9991 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 9992 return data; 9993 } 9994 9995 if (data && Array.isArray(data.variants)) { 9996 return data.variants; 9997 } 9998 } catch (error) {} 9999 } 10000 10001 return []; 10002 } 10003 10004 function getSelectedOptionValues(container) { 10005 const values = []; 10006 10007 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 10008 const checkedInput = group.querySelector('input[type="radio"]:checked'); 10009 const select = group.querySelector('select'); 10010 10011 if (checkedInput) { 10012 values.push(checkedInput.value); 10013 } else if (select) { 10014 values.push(select.value); 10015 } 10016 }); 10017 10018 return values; 10019 } 10020 10021 function getCurrentVariant(container, form, variants) { 10022 const idInput = form && form.querySelector('[name="id"]'); 10023 const selectedId = idInput && idInput.value; 10024 10025 if (selectedId) { 10026 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 10027 if (byId) return byId; 10028 } 10029 10030 const selectedOptions = getSelectedOptionValues(container); 10031 10032 if (selectedOptions.length) { 10033 return variants.find((variant) => { 10034 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 10035 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 10036 }); 10037 } 10038 10039 return null; 10040 } 10041 10042 function setButtonState(form, variant) { 10043 if (!form) return; 10044 10045 const idInput = form.querySelector('[name="id"]'); 10046 const addButton = form.querySelector('[name="add"]'); 10047 const buttonLabel = 10048 addButton && 10049 (addButton.querySelector('.main-atc__label__text') || 10050 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 10051 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 10052 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 10053 10054 if (!addButton || !idInput || !variant) return; 10055 10056 idInput.value = variant.id; 10057 idInput.disabled = false; 10058 10059 if (spinner) spinner.classList.add('hidden'); 10060 10061 if (variant.available) { 10062 addButton.disabled = false; 10063 addButton.removeAttribute('disabled'); 10064 addButton.removeAttribute('aria-disabled'); 10065 addButton.classList.remove('loading'); 10066 10067 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 10068 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 10069 } else { 10070 addButton.disabled = true; 10071 addButton.setAttribute('disabled', 'disabled'); 10072 addButton.setAttribute('aria-disabled', 'true'); 10073 10074 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 10075 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 10076 } 10077 } 10078 10079 function syncContainer(container) { 10080 if (!container) return; 10081 10082 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 10083 if (!form) return; 10084 10085 const variants = parseVariants(container); 10086 if (!variants.length) return; 10087 10088 const variant = getCurrentVariant(container, form, variants); 10089 if (!variant) return; 10090 10091 setButtonState(form, variant); 10092 } 10093 10094 document.addEventListener('change', (event) => { 10095 const quickAddModal = event.target.closest('quick-add-modal'); 10096 const cardVariantSelects = event.target.closest('card-variant-selects'); 10097 10098 if (quickAddModal) { 10099 setTimeout(() => syncContainer(quickAddModal), 80); 10100 setTimeout(() => syncContainer(quickAddModal), 250); 10101 } 10102 10103 if (cardVariantSelects) { 10104 const card = cardVariantSelects.closest('.card-wrapper'); 10105 if (card) { 10106 setTimeout(() => syncContainer(card), 80); 10107 setTimeout(() => syncContainer(card), 250); 10108 } 10109 } 10110 }); 10111 10112 const observer = new MutationObserver((mutations) => { 10113 mutations.forEach((mutation) => {
10114 mutation.addedNodes.forEach((node) => { 10115 if (!(node instanceof HTMLElement)) return; 10116 10117 if (node.matches && node.matches('quick-add-modal')) { 10118 setTimeout(() => syncContainer(node), 150); 10119 } 10120 10121 node.querySelectorAll && 10122 node.querySelectorAll('quick-add-modal').forEach((modal) => { 10123 setTimeout(() => syncContainer(modal), 150); 10124 }); 10125 }); 10126 }); 10127 }); 10128 10129 observer.observe(document.documentElement, { 10130 childList: true, 10131 subtree: true 10132 }); 10133 10134 document.addEventListener('DOMContentLoaded', () => { 10135 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 10136 }); 10137 })(); 10138</script>
10138 10139 10140 10141 10142 10143 </li> 10144 10145 <li> 10146 10147<div class="card-wrapper product-card-wrapper underline-links-hover"> 10148 <div 10149 class=" 10150 card 10151 card--card 10152 card--media 10153 color-background-1 gradient 10154 10155 10156 10157 card--badge-sided 10158 10159 10160 " 10161 style="--ratio-percent: 100%;" 10162 > 10163 <div 10164 class="card__inner ratio" 10165 style="--ratio-percent: 100%;" 10166 ><div class="card__media"> 10167 <div class="media media--transparent media--hover-effect"> 10168 10169 <img 10170 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763 1254w 10171 " 10172 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-04-30_at_11.44.41.jpg?v=1777520763&width=533" 10173 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10174 alt="White" 10175 class="motion-reduce" 10176 10177 loading="lazy" 10178 10179 width="1254" 10180 height="1254" 10181 id='quick-add-8342972760255-image' 10182 > 10183 10184<img 10185 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068 1254w 10186 " 10187 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_11_59_21_AM.png?v=1777520068&width=533" 10188 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10189 alt="" 10190 class="motion-reduce" 10191 loading="lazy" 10192 width="1254" 10193 height="1254" 10194 ></div> 10195 </div><div class="card__content"> 10196 <div class="card__information"> 10197 <h3 10198 class="card__heading" 10199 10200 > 10201 <a 10202 href="/products/vibeassage-performance-bundle" 10203 id="StandardCardNoMediaLink--8342972760255" 10204 class="full-unstyled-link" 10205 aria-labelledby="StandardCardNoMediaLink--8342972760255 NoMediaStandardBadge--8342972760255" 10206 > 10207 Vibeassage® Performance Bundle 10208 </a> 10209 </h3> 10210 </div> 10211 <div class="card__badge bottom left"> 10212 10213 </div> 10214 </div> 10215 </div> 10216 <div class="card__content"> 10217 <div class="card__information"> 10218 <h3 10219 class="card__heading h5" 10220 10221 id="title--8342972760255" 10222 10223 > 10224 <a 10225 href="/products/vibeassage-performance-bundle" 10226 id="CardLink--8342972760255" 10227 class="full-unstyled-link" 10228 aria-labelledby="CardLink--8342972760255 Badge--8342972760255" 10229 > 10230 Vibeassage® Performance Bundle 10231 </a> 10232 </h3> 10233 10234 <div class="card-information"><span class="caption-large light"></span> 10235<div 10236 class=" 10237 price " 10238> 10239 <div class="price__container"><div class="price__regular">
10240 <span class="visually-hidden visually-hidden--inline">Regular price</span> 10241 <span class="price-item price-item--regular"> 10242 From $389.00 10243 </span> 10244 </div> 10245 <div class="price__sale "> 10246 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 10247 <span class="price-item price-item--sale price-item--last"> 10248 From $389.00 10249 </span> 10250 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 10251 <span class="price__compare-price"> 10252 <s class="price-item price-item--regular"> 10253 10254 </s> 10255 </span></div> 10256 <small class="unit-price caption hidden"> 10257 <span class="visually-hidden">Unit price</span> 10258 <span class="price-item price-item--last"> 10259 <span></span> 10260 <span aria-hidden="true">/</span> 10261 <span class="visually-hidden"> per </span> 10262 <span> 10263 </span> 10264 </span> 10265 </small> 10266 </div></div> 10267 10268 </div> 10269 </div> 10270 10271<div class="card__badge bottom left"></div> 10272 </div> 10273 </div> 10274 </div>
10274<script> 10275 (() => { 10276 if (window.cardProductQuickAddVariantFixLoaded) return; 10277 window.cardProductQuickAddVariantFixLoaded = true; 10278 10279 const ADD_TO_CART_TEXT = "Add to cart"; 10280 const SOLD_OUT_TEXT = "Sold out"; 10281 10282 function parseVariants(container) { 10283 if (!container) return []; 10284 10285 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 10286 10287 for (const script of scripts) { 10288 try { 10289 const data = JSON.parse(script.textContent.trim()); 10290 10291 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 10292 return data; 10293 } 10294 10295 if (data && Array.isArray(data.variants)) { 10296 return data.variants; 10297 } 10298 } catch (error) {} 10299 } 10300 10301 return []; 10302 } 10303 10304 function getSelectedOptionValues(container) { 10305 const values = []; 10306 10307 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 10308 const checkedInput = group.querySelector('input[type="radio"]:checked'); 10309 const select = group.querySelector('select'); 10310 10311 if (checkedInput) { 10312 values.push(checkedInput.value); 10313 } else if (select) { 10314 values.push(select.value); 10315 } 10316 }); 10317 10318 return values; 10319 } 10320 10321 function getCurrentVariant(container, form, variants) { 10322 const idInput = form && form.querySelector('[name="id"]'); 10323 const selectedId = idInput && idInput.value; 10324 10325 if (selectedId) { 10326 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 10327 if (byId) return byId; 10328 } 10329 10330 const selectedOptions = getSelectedOptionValues(container); 10331 10332 if (selectedOptions.length) { 10333 return variants.find((variant) => { 10334 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 10335 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 10336 }); 10337 } 10338 10339 return null; 10340 } 10341 10342 function setButtonState(form, variant) { 10343 if (!form) return; 10344 10345 const idInput = form.querySelector('[name="id"]'); 10346 const addButton = form.querySelector('[name="add"]'); 10347 const buttonLabel = 10348 addButton && 10349 (addButton.querySelector('.main-atc__label__text') || 10350 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 10351 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 10352 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 10353 10354 if (!addButton || !idInput || !variant) return; 10355 10356 idInput.value = variant.id; 10357 idInput.disabled = false; 10358 10359 if (spinner) spinner.classList.add('hidden'); 10360 10361 if (variant.available) { 10362 addButton.disabled = false; 10363 addButton.removeAttribute('disabled'); 10364 addButton.removeAttribute('aria-disabled'); 10365 addButton.classList.remove('loading'); 10366 10367 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 10368 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 10369 } else { 10370 addButton.disabled = true; 10371 addButton.setAttribute('disabled', 'disabled'); 10372 addButton.setAttribute('aria-disabled', 'true'); 10373 10374 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 10375 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 10376 } 10377 } 10378 10379 function syncContainer(container) { 10380 if (!container) return; 10381 10382 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 10383 if (!form) return; 10384 10385 const variants = parseVariants(container); 10386 if (!variants.length) return; 10387 10388 const variant = getCurrentVariant(container, form, variants); 10389 if (!variant) return; 10390 10391 setButtonState(form, variant); 10392 } 10393 10394 document.addEventListener('change', (event) => { 10395 const quickAddModal = event.target.closest('quick-add-modal'); 10396 const cardVariantSelects = event.target.closest('card-variant-selects'); 10397 10398 if (quickAddModal) { 10399 setTimeout(() => syncContainer(quickAddModal), 80); 10400 setTimeout(() => syncContainer(quickAddModal), 250); 10401 } 10402 10403 if (cardVariantSelects) { 10404 const card = cardVariantSelects.closest('.card-wrapper'); 10405 if (card) { 10406 setTimeout(() => syncContainer(card), 80); 10407 setTimeout(() => syncContainer(card), 250); 10408 } 10409 } 10410 }); 10411 10412 const observer = new MutationObserver((mutations) => { 10413 mutations.forEach((mutation) => {
10414 mutation.addedNodes.forEach((node) => { 10415 if (!(node instanceof HTMLElement)) return; 10416 10417 if (node.matches && node.matches('quick-add-modal')) { 10418 setTimeout(() => syncContainer(node), 150); 10419 } 10420 10421 node.querySelectorAll && 10422 node.querySelectorAll('quick-add-modal').forEach((modal) => { 10423 setTimeout(() => syncContainer(modal), 150); 10424 }); 10425 }); 10426 }); 10427 }); 10428 10429 observer.observe(document.documentElement, { 10430 childList: true, 10431 subtree: true 10432 }); 10433 10434 document.addEventListener('DOMContentLoaded', () => { 10435 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 10436 }); 10437 })(); 10438</script>
10438 10439 10440 10441 10442 10443 </li> 10444 10445 <li> 10446 10447<div class="card-wrapper product-card-wrapper underline-links-hover"> 10448 <div 10449 class=" 10450 card 10451 card--card 10452 card--media 10453 color-background-1 gradient 10454 10455 10456 10457 card--badge-sided 10458 10459 10460 " 10461 style="--ratio-percent: 100%;" 10462 > 10463 <div 10464 class="card__inner ratio" 10465 style="--ratio-percent: 100%;" 10466 ><div class="card__media"> 10467 <div class="media media--transparent media--hover-effect"> 10468 10469 <img 10470 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068 1254w 10471 " 10472 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_02_53_35_PM.png?v=1777520068&width=533" 10473 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10474 alt="White" 10475 class="motion-reduce" 10476 10477 loading="lazy" 10478 10479 width="1254" 10480 height="1254" 10481 id='quick-add-8342966534335-image' 10482 > 10483 10484<img 10485 srcset="//teamdoctors.com/cdn/shop/files/preview_images/d879e7a2fdf742819c922f2bb2e3d0c3.thumbnail.0000000000.jpg?v=1777424140 w 10486 " 10487 src="//teamdoctors.com/cdn/shop/files/preview_images/d879e7a2fdf742819c922f2bb2e3d0c3.thumbnail.0000000000.jpg?v=1777424140&width=533" 10488 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10489 alt="" 10490 class="motion-reduce" 10491 loading="lazy" 10492 width="" 10493 height="" 10494 ></div> 10495 </div><div class="card__content"> 10496 <div class="card__information"> 10497 <h3 10498 class="card__heading" 10499 10500 > 10501 <a 10502 href="/products/vibeassage-core-system" 10503 id="StandardCardNoMediaLink--8342966534335" 10504 class="full-unstyled-link" 10505 aria-labelledby="StandardCardNoMediaLink--8342966534335 NoMediaStandardBadge--8342966534335" 10506 > 10507 Vibeassage® Core System 10508 </a> 10509 </h3> 10510 </div> 10511 <div class="card__badge bottom left"> 10512 10513 </div> 10514 </div> 10515 </div> 10516 <div class="card__content"> 10517 <div class="card__information"> 10518 <h3 10519 class="card__heading h5" 10520 10521 id="title--8342966534335" 10522 10523 > 10524 <a 10525 href="/products/vibeassage-core-system" 10526 id="CardLink--8342966534335" 10527 class="full-unstyled-link" 10528 aria-labelledby="CardLink--8342966534335 Badge--8342966534335" 10529 > 10530 Vibeassage® Core System 10531 </a> 10532 </h3> 10533 10534 <div class="card-information"><span class="caption-large light"></span> 10535<div 10536 class=" 10537 price " 10538> 10539 <div class="price__container"><div class="price__regular">
10540 <span class="visually-hidden visually-hidden--inline">Regular price</span> 10541 <span class="price-item price-item--regular"> 10542 From $349.00 10543 </span> 10544 </div> 10545 <div class="price__sale "> 10546 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 10547 <span class="price-item price-item--sale price-item--last"> 10548 From $349.00 10549 </span> 10550 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 10551 <span class="price__compare-price"> 10552 <s class="price-item price-item--regular"> 10553 10554 </s> 10555 </span></div> 10556 <small class="unit-price caption hidden"> 10557 <span class="visually-hidden">Unit price</span> 10558 <span class="price-item price-item--last"> 10559 <span></span> 10560 <span aria-hidden="true">/</span> 10561 <span class="visually-hidden"> per </span> 10562 <span> 10563 </span> 10564 </span> 10565 </small> 10566 </div></div> 10567 10568 </div> 10569 </div> 10570 10571<div class="card__badge bottom left"></div> 10572 </div> 10573 </div> 10574 </div>
10574<script> 10575 (() => { 10576 if (window.cardProductQuickAddVariantFixLoaded) return; 10577 window.cardProductQuickAddVariantFixLoaded = true; 10578 10579 const ADD_TO_CART_TEXT = "Add to cart"; 10580 const SOLD_OUT_TEXT = "Sold out"; 10581 10582 function parseVariants(container) { 10583 if (!container) return []; 10584 10585 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 10586 10587 for (const script of scripts) { 10588 try { 10589 const data = JSON.parse(script.textContent.trim()); 10590 10591 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 10592 return data; 10593 } 10594 10595 if (data && Array.isArray(data.variants)) { 10596 return data.variants; 10597 } 10598 } catch (error) {} 10599 } 10600 10601 return []; 10602 } 10603 10604 function getSelectedOptionValues(container) { 10605 const values = []; 10606 10607 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 10608 const checkedInput = group.querySelector('input[type="radio"]:checked'); 10609 const select = group.querySelector('select'); 10610 10611 if (checkedInput) { 10612 values.push(checkedInput.value); 10613 } else if (select) { 10614 values.push(select.value); 10615 } 10616 }); 10617 10618 return values; 10619 } 10620 10621 function getCurrentVariant(container, form, variants) { 10622 const idInput = form && form.querySelector('[name="id"]'); 10623 const selectedId = idInput && idInput.value; 10624 10625 if (selectedId) { 10626 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 10627 if (byId) return byId; 10628 } 10629 10630 const selectedOptions = getSelectedOptionValues(container); 10631 10632 if (selectedOptions.length) { 10633 return variants.find((variant) => { 10634 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 10635 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 10636 }); 10637 } 10638 10639 return null; 10640 } 10641 10642 function setButtonState(form, variant) { 10643 if (!form) return; 10644 10645 const idInput = form.querySelector('[name="id"]'); 10646 const addButton = form.querySelector('[name="add"]'); 10647 const buttonLabel = 10648 addButton && 10649 (addButton.querySelector('.main-atc__label__text') || 10650 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 10651 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 10652 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 10653 10654 if (!addButton || !idInput || !variant) return; 10655 10656 idInput.value = variant.id; 10657 idInput.disabled = false; 10658 10659 if (spinner) spinner.classList.add('hidden'); 10660 10661 if (variant.available) { 10662 addButton.disabled = false; 10663 addButton.removeAttribute('disabled'); 10664 addButton.removeAttribute('aria-disabled'); 10665 addButton.classList.remove('loading'); 10666 10667 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 10668 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 10669 } else { 10670 addButton.disabled = true; 10671 addButton.setAttribute('disabled', 'disabled'); 10672 addButton.setAttribute('aria-disabled', 'true'); 10673 10674 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 10675 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 10676 } 10677 } 10678 10679 function syncContainer(container) { 10680 if (!container) return; 10681 10682 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 10683 if (!form) return; 10684 10685 const variants = parseVariants(container); 10686 if (!variants.length) return; 10687 10688 const variant = getCurrentVariant(container, form, variants); 10689 if (!variant) return; 10690 10691 setButtonState(form, variant); 10692 } 10693 10694 document.addEventListener('change', (event) => { 10695 const quickAddModal = event.target.closest('quick-add-modal'); 10696 const cardVariantSelects = event.target.closest('card-variant-selects'); 10697 10698 if (quickAddModal) { 10699 setTimeout(() => syncContainer(quickAddModal), 80); 10700 setTimeout(() => syncContainer(quickAddModal), 250); 10701 } 10702 10703 if (cardVariantSelects) { 10704 const card = cardVariantSelects.closest('.card-wrapper'); 10705 if (card) { 10706 setTimeout(() => syncContainer(card), 80); 10707 setTimeout(() => syncContainer(card), 250); 10708 } 10709 } 10710 }); 10711 10712 const observer = new MutationObserver((mutations) => { 10713 mutations.forEach((mutation) => {
10714 mutation.addedNodes.forEach((node) => { 10715 if (!(node instanceof HTMLElement)) return; 10716 10717 if (node.matches && node.matches('quick-add-modal')) { 10718 setTimeout(() => syncContainer(node), 150); 10719 } 10720 10721 node.querySelectorAll && 10722 node.querySelectorAll('quick-add-modal').forEach((modal) => { 10723 setTimeout(() => syncContainer(modal), 150); 10724 }); 10725 }); 10726 }); 10727 }); 10728 10729 observer.observe(document.documentElement, { 10730 childList: true, 10731 subtree: true 10732 }); 10733 10734 document.addEventListener('DOMContentLoaded', () => { 10735 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 10736 }); 10737 })(); 10738</script>
10738 10739 10740 10741 10742 10743 </li> 10744 10745 <li> 10746 10747<div class="card-wrapper product-card-wrapper underline-links-hover"> 10748 <div 10749 class=" 10750 card 10751 card--card 10752 card--media 10753 color-background-1 gradient 10754 10755 10756 10757 card--badge-sided 10758 10759 10760 " 10761 style="--ratio-percent: 100%;" 10762 > 10763 <div 10764 class="card__inner ratio" 10765 style="--ratio-percent: 100%;" 10766 ><div class="card__media"> 10767 <div class="media media--transparent media--hover-effect"> 10768 10769 <img 10770 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443 1080w 10771 " 10772 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=533" 10773 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10774 alt="Biomimetic Applicator Pads (Full Set) - Team Doctors" 10775 class="motion-reduce" 10776 10777 loading="lazy" 10778 10779 width="1080" 10780 height="1080" 10781 id='quick-add-8394187342015-image' 10782 > 10783 10784<img 10785 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492 1080w 10786 " 10787 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533" 10788 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10789 alt="" 10790 class="motion-reduce" 10791 loading="lazy" 10792 width="1080" 10793 height="1080" 10794 ></div> 10795 </div><div class="card__content"> 10796 <div class="card__information"> 10797 <h3 10798 class="card__heading" 10799 10800 > 10801 <a 10802 href="/products/biomemetic-applicator-pads-full-set" 10803 id="StandardCardNoMediaLink--8394187342015" 10804 class="full-unstyled-link" 10805 aria-labelledby="StandardCardNoMediaLink--8394187342015 NoMediaStandardBadge--8394187342015" 10806 > 10807 Biomimetic Applicator Pads 10808 </a> 10809 </h3> 10810 </div> 10811 <div class="card__badge bottom left"> 10812 10813
10814 <span 10815 id="NoMediaStandardBadge--8394187342015" 10816 class="badge badge--bottom-left color-accent-2" 10817 > 10818 <svg 10819 aria-hidden="true" 10820 focusable="false" 10821 class="icon icon-discount color-foreground-text" 10822 viewBox="0 0 12 12" 10823> 10824 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 10825</svg> 10826<span class='nowrap'>SAVE 21%</span> 10827 </span></div> 10828 </div> 10829 </div> 10830 <div class="card__content"> 10831 <div class="card__information"> 10832 <h3 10833 class="card__heading h5" 10834 10835 id="title--8394187342015" 10836 10837 > 10838 <a 10839 href="/products/biomemetic-applicator-pads-full-set" 10840 id="CardLink--8394187342015" 10841 class="full-unstyled-link" 10842 aria-labelledby="CardLink--8394187342015 Badge--8394187342015" 10843 > 10844 Biomimetic Applicator Pads 10845 </a> 10846 </h3> 10847 10848 <div class="product-subtitle"> 10849 3 Pads - Full Set 10850 </div> 10851 10852 <div class="card-information"><span class="caption-large light"></span> 10853<div 10854 class=" 10855 price price--on-sale " 10856> 10857 <div class="price__container"><div class="price__regular"> 10858 <span class="visually-hidden visually-hidden--inline">Regular price</span> 10859 <span class="price-item price-item--regular"> 10860 $129.00 10861 </span> 10862 </div> 10863 <div class="price__sale "> 10864 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 10865 <span class="price-item price-item--sale price-item--last"> 10866 $129.00 10867 </span> 10868 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 10869 <span class="price__compare-price"> 10870 <s class="price-item price-item--regular"> 10871 $164.85 10872 </s> 10873 </span></div> 10874 <small class="unit-price caption hidden"> 10875 <span class="visually-hidden">Unit price</span> 10876 <span class="price-item price-item--last"> 10877 <span></span> 10878 <span aria-hidden="true">/</span> 10879 <span class="visually-hidden"> per </span> 10880 <span> 10881 </span> 10882 </span> 10883 </small> 10884 </div></div> 10885 10886 </div> 10887 </div> 10888 10889<div class="card__badge bottom left"><span 10890 id="Badge--8394187342015" 10891 class="badge badge--bottom-left color-accent-2" 10892 > 10893 21% 10894 </span></div> 10895 </div> 10896 </div> 10897 </div>
10897<script> 10898 (() => { 10899 if (window.cardProductQuickAddVariantFixLoaded) return; 10900 window.cardProductQuickAddVariantFixLoaded = true; 10901 10902 const ADD_TO_CART_TEXT = "Add to cart"; 10903 const SOLD_OUT_TEXT = "Sold out"; 10904 10905 function parseVariants(container) { 10906 if (!container) return []; 10907 10908 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 10909 10910 for (const script of scripts) { 10911 try { 10912 const data = JSON.parse(script.textContent.trim()); 10913 10914 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 10915 return data; 10916 } 10917 10918 if (data && Array.isArray(data.variants)) { 10919 return data.variants; 10920 } 10921 } catch (error) {} 10922 } 10923 10924 return []; 10925 } 10926 10927 function getSelectedOptionValues(container) { 10928 const values = []; 10929 10930 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 10931 const checkedInput = group.querySelector('input[type="radio"]:checked'); 10932 const select = group.querySelector('select'); 10933 10934 if (checkedInput) { 10935 values.push(checkedInput.value); 10936 } else if (select) { 10937 values.push(select.value); 10938 } 10939 }); 10940 10941 return values; 10942 } 10943 10944 function getCurrentVariant(container, form, variants) { 10945 const idInput = form && form.querySelector('[name="id"]'); 10946 const selectedId = idInput && idInput.value; 10947 10948 if (selectedId) { 10949 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 10950 if (byId) return byId; 10951 } 10952 10953 const selectedOptions = getSelectedOptionValues(container); 10954 10955 if (selectedOptions.length) { 10956 return variants.find((variant) => { 10957 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 10958 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 10959 }); 10960 } 10961 10962 return null; 10963 } 10964 10965 function setButtonState(form, variant) { 10966 if (!form) return; 10967 10968 const idInput = form.querySelector('[name="id"]'); 10969 const addButton = form.querySelector('[name="add"]'); 10970 const buttonLabel = 10971 addButton && 10972 (addButton.querySelector('.main-atc__label__text') || 10973 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 10974 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 10975 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 10976 10977 if (!addButton || !idInput || !variant) return; 10978 10979 idInput.value = variant.id; 10980 idInput.disabled = false; 10981 10982 if (spinner) spinner.classList.add('hidden'); 10983 10984 if (variant.available) { 10985 addButton.disabled = false; 10986 addButton.removeAttribute('disabled'); 10987 addButton.removeAttribute('aria-disabled'); 10988 addButton.classList.remove('loading'); 10989 10990 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 10991 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 10992 } else { 10993 addButton.disabled = true; 10994 addButton.setAttribute('disabled', 'disabled'); 10995 addButton.setAttribute('aria-disabled', 'true'); 10996 10997 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 10998 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 10999 } 11000 } 11001 11002 function syncContainer(container) { 11003 if (!container) return; 11004 11005 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 11006 if (!form) return; 11007 11008 const variants = parseVariants(container); 11009 if (!variants.length) return; 11010 11011 const variant = getCurrentVariant(container, form, variants); 11012 if (!variant) return; 11013 11014 setButtonState(form, variant); 11015 } 11016 11017 document.addEventListener('change', (event) => { 11018 const quickAddModal = event.target.closest('quick-add-modal'); 11019 const cardVariantSelects = event.target.closest('card-variant-selects'); 11020 11021 if (quickAddModal) { 11022 setTimeout(() => syncContainer(quickAddModal), 80); 11023 setTimeout(() => syncContainer(quickAddModal), 250); 11024 } 11025 11026 if (cardVariantSelects) { 11027 const card = cardVariantSelects.closest('.card-wrapper'); 11028 if (card) { 11029 setTimeout(() => syncContainer(card), 80); 11030 setTimeout(() => syncContainer(card), 250); 11031 } 11032 } 11033 }); 11034 11035 const observer = new MutationObserver((mutations) => { 11036 mutations.forEach((mutation) => {
11037 mutation.addedNodes.forEach((node) => { 11038 if (!(node instanceof HTMLElement)) return; 11039 11040 if (node.matches && node.matches('quick-add-modal')) { 11041 setTimeout(() => syncContainer(node), 150); 11042 } 11043 11044 node.querySelectorAll && 11045 node.querySelectorAll('quick-add-modal').forEach((modal) => { 11046 setTimeout(() => syncContainer(modal), 150); 11047 }); 11048 }); 11049 }); 11050 }); 11051 11052 observer.observe(document.documentElement, { 11053 childList: true, 11054 subtree: true 11055 }); 11056 11057 document.addEventListener('DOMContentLoaded', () => { 11058 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 11059 }); 11060 })(); 11061</script>
11061 11062 11063 11064 11065 11066 </li> 11067 11068 <li> 11069 11070<div class="card-wrapper product-card-wrapper underline-links-hover"> 11071 <div 11072 class=" 11073 card 11074 card--card 11075 card--media 11076 color-background-1 gradient 11077 11078 11079 11080 card--badge-sided 11081 11082 11083 " 11084 style="--ratio-percent: 100%;" 11085 > 11086 <div 11087 class="card__inner ratio" 11088 style="--ratio-percent: 100%;" 11089 ><div class="card__media"> 11090 <div class="media media--transparent media--hover-effect"> 11091 11092 <img 11093 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844 1254w 11094 " 11095 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=533" 11096 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 11097 alt="Balance bundle - Team Doctors" 11098 class="motion-reduce" 11099 11100 loading="lazy" 11101 11102 width="1254" 11103 height="1254" 11104 id='quick-add-8402094031039-image' 11105 > 11106 11107<img 11108 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311 1080w 11109 " 11110 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533" 11111 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 11112 alt="" 11113 class="motion-reduce" 11114 loading="lazy" 11115 width="1080" 11116 height="1080" 11117 ></div> 11118 </div><div class="card__content"> 11119 <div class="card__information"> 11120 <h3 11121 class="card__heading" 11122 11123 > 11124 <a 11125 href="/products/vibeassage%C2%AE-relief-bundle" 11126 id="StandardCardNoMediaLink--8402094031039" 11127 class="full-unstyled-link" 11128 aria-labelledby="StandardCardNoMediaLink--8402094031039 NoMediaStandardBadge--8402094031039" 11129 > 11130 Balance bundle 11131 </a> 11132 </h3> 11133 </div> 11134 <div class="card__badge bottom left"> 11135 11136
11137 <span 11138 id="NoMediaStandardBadge--8402094031039" 11139 class="badge badge--bottom-left color-accent-2" 11140 > 11141 <svg 11142 aria-hidden="true" 11143 focusable="false" 11144 class="icon icon-discount color-foreground-text" 11145 viewBox="0 0 12 12" 11146> 11147 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 11148</svg> 11149<span class='nowrap'>SAVE 9%</span> 11150 </span></div> 11151 </div> 11152 </div> 11153 <div class="card__content"> 11154 <div class="card__information"> 11155 <h3 11156 class="card__heading h5" 11157 11158 id="title--8402094031039" 11159 11160 > 11161 <a 11162 href="/products/vibeassage%C2%AE-relief-bundle" 11163 id="CardLink--8402094031039" 11164 class="full-unstyled-link" 11165 aria-labelledby="CardLink--8402094031039 Badge--8402094031039" 11166 > 11167 Balance bundle 11168 </a> 11169 </h3> 11170 11171 <div class="product-subtitle"> 11172 Comfort Relief Pad + Peak Performance Pad 11173 </div> 11174 11175 <div class="card-information"><span class="caption-large light"></span> 11176<div 11177 class=" 11178 price price--on-sale " 11179> 11180 <div class="price__container"><div class="price__regular"> 11181 <span class="visually-hidden visually-hidden--inline">Regular price</span> 11182 <span class="price-item price-item--regular"> 11183 $99.00 11184 </span> 11185 </div> 11186 <div class="price__sale "> 11187 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 11188 <span class="price-item price-item--sale price-item--last"> 11189 $99.00 11190 </span> 11191 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 11192 <span class="price__compare-price"> 11193 <s class="price-item price-item--regular"> 11194 $109.95 11195 </s> 11196 </span></div> 11197 <small class="unit-price caption hidden"> 11198 <span class="visually-hidden">Unit price</span> 11199 <span class="price-item price-item--last"> 11200 <span></span> 11201 <span aria-hidden="true">/</span> 11202 <span class="visually-hidden"> per </span> 11203 <span> 11204 </span> 11205 </span> 11206 </small> 11207 </div></div> 11208 11209 </div> 11210 </div> 11211 11212<div class="card__badge bottom left"><span 11213 id="Badge--8402094031039" 11214 class="badge badge--bottom-left color-accent-2" 11215 > 11216 9% 11217 </span></div> 11218 </div> 11219 </div> 11220 </div>
11220<script> 11221 (() => { 11222 if (window.cardProductQuickAddVariantFixLoaded) return; 11223 window.cardProductQuickAddVariantFixLoaded = true; 11224 11225 const ADD_TO_CART_TEXT = "Add to cart"; 11226 const SOLD_OUT_TEXT = "Sold out"; 11227 11228 function parseVariants(container) { 11229 if (!container) return []; 11230 11231 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 11232 11233 for (const script of scripts) { 11234 try { 11235 const data = JSON.parse(script.textContent.trim()); 11236 11237 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 11238 return data; 11239 } 11240 11241 if (data && Array.isArray(data.variants)) { 11242 return data.variants; 11243 } 11244 } catch (error) {} 11245 } 11246 11247 return []; 11248 } 11249 11250 function getSelectedOptionValues(container) { 11251 const values = []; 11252 11253 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 11254 const checkedInput = group.querySelector('input[type="radio"]:checked'); 11255 const select = group.querySelector('select'); 11256 11257 if (checkedInput) { 11258 values.push(checkedInput.value); 11259 } else if (select) { 11260 values.push(select.value); 11261 } 11262 }); 11263 11264 return values; 11265 } 11266 11267 function getCurrentVariant(container, form, variants) { 11268 const idInput = form && form.querySelector('[name="id"]'); 11269 const selectedId = idInput && idInput.value; 11270 11271 if (selectedId) { 11272 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 11273 if (byId) return byId; 11274 } 11275 11276 const selectedOptions = getSelectedOptionValues(container); 11277 11278 if (selectedOptions.length) { 11279 return variants.find((variant) => { 11280 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 11281 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 11282 }); 11283 } 11284 11285 return null; 11286 } 11287 11288 function setButtonState(form, variant) { 11289 if (!form) return; 11290 11291 const idInput = form.querySelector('[name="id"]'); 11292 const addButton = form.querySelector('[name="add"]'); 11293 const buttonLabel = 11294 addButton && 11295 (addButton.querySelector('.main-atc__label__text') || 11296 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 11297 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 11298 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 11299 11300 if (!addButton || !idInput || !variant) return; 11301 11302 idInput.value = variant.id; 11303 idInput.disabled = false; 11304 11305 if (spinner) spinner.classList.add('hidden'); 11306 11307 if (variant.available) { 11308 addButton.disabled = false; 11309 addButton.removeAttribute('disabled'); 11310 addButton.removeAttribute('aria-disabled'); 11311 addButton.classList.remove('loading'); 11312 11313 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 11314 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 11315 } else { 11316 addButton.disabled = true; 11317 addButton.setAttribute('disabled', 'disabled'); 11318 addButton.setAttribute('aria-disabled', 'true'); 11319 11320 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 11321 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 11322 } 11323 } 11324 11325 function syncContainer(container) { 11326 if (!container) return; 11327 11328 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 11329 if (!form) return; 11330 11331 const variants = parseVariants(container); 11332 if (!variants.length) return; 11333 11334 const variant = getCurrentVariant(container, form, variants); 11335 if (!variant) return; 11336 11337 setButtonState(form, variant); 11338 } 11339 11340 document.addEventListener('change', (event) => { 11341 const quickAddModal = event.target.closest('quick-add-modal'); 11342 const cardVariantSelects = event.target.closest('card-variant-selects'); 11343 11344 if (quickAddModal) { 11345 setTimeout(() => syncContainer(quickAddModal), 80); 11346 setTimeout(() => syncContainer(quickAddModal), 250); 11347 } 11348 11349 if (cardVariantSelects) { 11350 const card = cardVariantSelects.closest('.card-wrapper'); 11351 if (card) { 11352 setTimeout(() => syncContainer(card), 80); 11353 setTimeout(() => syncContainer(card), 250); 11354 } 11355 } 11356 }); 11357 11358 const observer = new MutationObserver((mutations) => { 11359 mutations.forEach((mutation) => {
11360 mutation.addedNodes.forEach((node) => { 11361 if (!(node instanceof HTMLElement)) return; 11362 11363 if (node.matches && node.matches('quick-add-modal')) { 11364 setTimeout(() => syncContainer(node), 150); 11365 } 11366 11367 node.querySelectorAll && 11368 node.querySelectorAll('quick-add-modal').forEach((modal) => { 11369 setTimeout(() => syncContainer(modal), 150); 11370 }); 11371 }); 11372 }); 11373 }); 11374 11375 observer.observe(document.documentElement, { 11376 childList: true, 11377 subtree: true 11378 }); 11379 11380 document.addEventListener('DOMContentLoaded', () => { 11381 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 11382 }); 11383 })(); 11384</script>
11384 11385 11386 11387 11388 11389 </li> 11390 11391 <li> 11392 11393<div class="card-wrapper product-card-wrapper underline-links-hover"> 11394 <div 11395 class=" 11396 card 11397 card--card 11398 card--media 11399 color-background-1 gradient 11400 11401 11402 11403 card--badge-sided 11404 11405 11406 " 11407 style="--ratio-percent: 100%;" 11408 > 11409 <div 11410 class="card__inner ratio" 11411 style="--ratio-percent: 100%;" 11412 ><div class="card__media"> 11413 <div class="media media--transparent media--hover-effect"> 11414 11415 <img 11416 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844 1254w 11417 " 11418 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=533" 11419 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 11420 alt="Relief Bundle - Team Doctors" 11421 class="motion-reduce" 11422 11423 loading="lazy" 11424 11425 width="1254" 11426 height="1254" 11427 id='quick-add-8433935974591-image' 11428 > 11429 11430<img 11431 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311 1080w 11432 " 11433 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533" 11434 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 11435 alt="" 11436 class="motion-reduce" 11437 loading="lazy" 11438 width="1080" 11439 height="1080" 11440 ></div> 11441 </div><div class="card__content"> 11442 <div class="card__information"> 11443 <h3 11444 class="card__heading" 11445 11446 > 11447 <a 11448 href="/products/relief-bundle" 11449 id="StandardCardNoMediaLink--8433935974591" 11450 class="full-unstyled-link" 11451 aria-labelledby="StandardCardNoMediaLink--8433935974591 NoMediaStandardBadge--8433935974591" 11452 > 11453 Relief Bundle 11454 </a> 11455 </h3> 11456 </div> 11457 <div class="card__badge bottom left"> 11458 11459
11460 <span 11461 id="NoMediaStandardBadge--8433935974591" 11462 class="badge badge--bottom-left color-accent-2" 11463 > 11464 <svg 11465 aria-hidden="true" 11466 focusable="false" 11467 class="icon icon-discount color-foreground-text" 11468 viewBox="0 0 12 12" 11469> 11470 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 11471</svg> 11472<span class='nowrap'>SAVE 9%</span> 11473 </span></div> 11474 </div> 11475 </div> 11476 <div class="card__content"> 11477 <div class="card__information"> 11478 <h3 11479 class="card__heading h5" 11480 11481 id="title--8433935974591" 11482 11483 > 11484 <a 11485 href="/products/relief-bundle" 11486 id="CardLink--8433935974591" 11487 class="full-unstyled-link" 11488 aria-labelledby="CardLink--8433935974591 Badge--8433935974591" 11489 > 11490 Relief Bundle 11491 </a> 11492 </h3> 11493 11494 <div class="product-subtitle"> 11495 Comfort Relief Pad + Core Recovery Pad 11496 </div> 11497 11498 <div class="card-information"><span class="caption-large light"></span> 11499<div 11500 class=" 11501 price price--on-sale " 11502> 11503 <div class="price__container"><div class="price__regular"> 11504 <span class="visually-hidden visually-hidden--inline">Regular price</span> 11505 <span class="price-item price-item--regular"> 11506 $99.00 11507 </span> 11508 </div> 11509 <div class="price__sale "> 11510 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 11511 <span class="price-item price-item--sale price-item--last"> 11512 $99.00 11513 </span> 11514 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 11515 <span class="price__compare-price"> 11516 <s class="price-item price-item--regular"> 11517 $109.90 11518 </s> 11519 </span></div> 11520 <small class="unit-price caption hidden"> 11521 <span class="visually-hidden">Unit price</span> 11522 <span class="price-item price-item--last"> 11523 <span></span> 11524 <span aria-hidden="true">/</span> 11525 <span class="visually-hidden"> per </span> 11526 <span> 11527 </span> 11528 </span> 11529 </small> 11530 </div></div> 11531 11532 </div> 11533 </div> 11534 11535<div class="card__badge bottom left"><span 11536 id="Badge--8433935974591" 11537 class="badge badge--bottom-left color-accent-2" 11538 > 11539 9% 11540 </span></div> 11541 </div> 11542 </div> 11543 </div>
11543<script> 11544 (() => { 11545 if (window.cardProductQuickAddVariantFixLoaded) return; 11546 window.cardProductQuickAddVariantFixLoaded = true; 11547 11548 const ADD_TO_CART_TEXT = "Add to cart"; 11549 const SOLD_OUT_TEXT = "Sold out"; 11550 11551 function parseVariants(container) { 11552 if (!container) return []; 11553 11554 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 11555 11556 for (const script of scripts) { 11557 try { 11558 const data = JSON.parse(script.textContent.trim()); 11559 11560 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 11561 return data; 11562 } 11563 11564 if (data && Array.isArray(data.variants)) { 11565 return data.variants; 11566 } 11567 } catch (error) {} 11568 } 11569 11570 return []; 11571 } 11572 11573 function getSelectedOptionValues(container) { 11574 const values = []; 11575 11576 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 11577 const checkedInput = group.querySelector('input[type="radio"]:checked'); 11578 const select = group.querySelector('select'); 11579 11580 if (checkedInput) { 11581 values.push(checkedInput.value); 11582 } else if (select) { 11583 values.push(select.value); 11584 } 11585 }); 11586 11587 return values; 11588 } 11589 11590 function getCurrentVariant(container, form, variants) { 11591 const idInput = form && form.querySelector('[name="id"]'); 11592 const selectedId = idInput && idInput.value; 11593 11594 if (selectedId) { 11595 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 11596 if (byId) return byId; 11597 } 11598 11599 const selectedOptions = getSelectedOptionValues(container); 11600 11601 if (selectedOptions.length) { 11602 return variants.find((variant) => { 11603 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 11604 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 11605 }); 11606 } 11607 11608 return null; 11609 } 11610 11611 function setButtonState(form, variant) { 11612 if (!form) return; 11613 11614 const idInput = form.querySelector('[name="id"]'); 11615 const addButton = form.querySelector('[name="add"]'); 11616 const buttonLabel = 11617 addButton && 11618 (addButton.querySelector('.main-atc__label__text') || 11619 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 11620 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 11621 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 11622 11623 if (!addButton || !idInput || !variant) return; 11624 11625 idInput.value = variant.id; 11626 idInput.disabled = false; 11627 11628 if (spinner) spinner.classList.add('hidden'); 11629 11630 if (variant.available) { 11631 addButton.disabled = false; 11632 addButton.removeAttribute('disabled'); 11633 addButton.removeAttribute('aria-disabled'); 11634 addButton.classList.remove('loading'); 11635 11636 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 11637 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 11638 } else { 11639 addButton.disabled = true; 11640 addButton.setAttribute('disabled', 'disabled'); 11641 addButton.setAttribute('aria-disabled', 'true'); 11642 11643 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 11644 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 11645 } 11646 } 11647 11648 function syncContainer(container) { 11649 if (!container) return; 11650 11651 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 11652 if (!form) return; 11653 11654 const variants = parseVariants(container); 11655 if (!variants.length) return; 11656 11657 const variant = getCurrentVariant(container, form, variants); 11658 if (!variant) return; 11659 11660 setButtonState(form, variant); 11661 } 11662 11663 document.addEventListener('change', (event) => { 11664 const quickAddModal = event.target.closest('quick-add-modal'); 11665 const cardVariantSelects = event.target.closest('card-variant-selects'); 11666 11667 if (quickAddModal) { 11668 setTimeout(() => syncContainer(quickAddModal), 80); 11669 setTimeout(() => syncContainer(quickAddModal), 250); 11670 } 11671 11672 if (cardVariantSelects) { 11673 const card = cardVariantSelects.closest('.card-wrapper'); 11674 if (card) { 11675 setTimeout(() => syncContainer(card), 80); 11676 setTimeout(() => syncContainer(card), 250); 11677 } 11678 } 11679 }); 11680 11681 const observer = new MutationObserver((mutations) => { 11682 mutations.forEach((mutation) => {
11683 mutation.addedNodes.forEach((node) => { 11684 if (!(node instanceof HTMLElement)) return; 11685 11686 if (node.matches && node.matches('quick-add-modal')) { 11687 setTimeout(() => syncContainer(node), 150); 11688 } 11689 11690 node.querySelectorAll && 11691 node.querySelectorAll('quick-add-modal').forEach((modal) => { 11692 setTimeout(() => syncContainer(modal), 150); 11693 }); 11694 }); 11695 }); 11696 }); 11697 11698 observer.observe(document.documentElement, { 11699 childList: true, 11700 subtree: true 11701 }); 11702 11703 document.addEventListener('DOMContentLoaded', () => { 11704 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 11705 }); 11706 })(); 11707</script>
11707 11708 11709 11710 11711 11712 </li> 11713 11714 <li> 11715 11716<div class="card-wrapper product-card-wrapper underline-links-hover"> 11717 <div 11718 class=" 11719 card 11720 card--card 11721 card--media 11722 color-background-1 gradient 11723 11724 11725 11726 card--badge-sided 11727 11728 11729 " 11730 style="--ratio-percent: 100%;" 11731 > 11732 <div 11733 class="card__inner ratio" 11734 style="--ratio-percent: 100%;" 11735 ><div class="card__media"> 11736 <div class="media media--transparent media--hover-effect"> 11737 11738 <img 11739 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844 1254w 11740 " 11741 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=533" 11742 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 11743 alt="Performance Bundle - Team Doctors" 11744 class="motion-reduce" 11745 11746 loading="lazy" 11747 11748 width="1254" 11749 height="1254" 11750 id='quick-add-8433936007359-image' 11751 > 11752 11753<img 11754 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322 1080w 11755 " 11756 src="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=533" 11757 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 11758 alt="" 11759 class="motion-reduce" 11760 loading="lazy" 11761 width="1080" 11762 height="1080" 11763 ></div> 11764 </div><div class="card__content"> 11765 <div class="card__information"> 11766 <h3 11767 class="card__heading" 11768 11769 > 11770 <a 11771 href="/products/performance-bundle" 11772 id="StandardCardNoMediaLink--8433936007359" 11773 class="full-unstyled-link" 11774 aria-labelledby="StandardCardNoMediaLink--8433936007359 NoMediaStandardBadge--8433936007359" 11775 > 11776 Performance Bundle 11777 </a> 11778 </h3> 11779 </div> 11780 <div class="card__badge bottom left"> 11781 11782
11783 <span 11784 id="NoMediaStandardBadge--8433936007359" 11785 class="badge badge--bottom-left color-accent-2" 11786 > 11787 <svg 11788 aria-hidden="true" 11789 focusable="false" 11790 class="icon icon-discount color-foreground-text" 11791 viewBox="0 0 12 12" 11792> 11793 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 11794</svg> 11795<span class='nowrap'>SAVE 9%</span> 11796 </span></div> 11797 </div> 11798 </div> 11799 <div class="card__content"> 11800 <div class="card__information"> 11801 <h3 11802 class="card__heading h5" 11803 11804 id="title--8433936007359" 11805 11806 > 11807 <a 11808 href="/products/performance-bundle" 11809 id="CardLink--8433936007359" 11810 class="full-unstyled-link" 11811 aria-labelledby="CardLink--8433936007359 Badge--8433936007359" 11812 > 11813 Performance Bundle 11814 </a> 11815 </h3> 11816 11817 <div class="product-subtitle"> 11818 Core Cecovery Pad + Peak Performance Pad 11819 </div> 11820 11821 <div class="card-information"><span class="caption-large light"></span> 11822<div 11823 class=" 11824 price price--on-sale " 11825> 11826 <div class="price__container"><div class="price__regular"> 11827 <span class="visually-hidden visually-hidden--inline">Regular price</span> 11828 <span class="price-item price-item--regular"> 11829 $99.00 11830 </span> 11831 </div> 11832 <div class="price__sale "> 11833 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 11834 <span class="price-item price-item--sale price-item--last"> 11835 $99.00 11836 </span> 11837 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 11838 <span class="price__compare-price"> 11839 <s class="price-item price-item--regular"> 11840 $109.90 11841 </s> 11842 </span></div> 11843 <small class="unit-price caption hidden"> 11844 <span class="visually-hidden">Unit price</span> 11845 <span class="price-item price-item--last"> 11846 <span></span> 11847 <span aria-hidden="true">/</span> 11848 <span class="visually-hidden"> per </span> 11849 <span> 11850 </span> 11851 </span> 11852 </small> 11853 </div></div> 11854 11855 </div> 11856 </div> 11857 11858<div class="card__badge bottom left"><span 11859 id="Badge--8433936007359" 11860 class="badge badge--bottom-left color-accent-2" 11861 > 11862 9% 11863 </span></div> 11864 </div> 11865 </div> 11866 </div>
11866<script> 11867 (() => { 11868 if (window.cardProductQuickAddVariantFixLoaded) return; 11869 window.cardProductQuickAddVariantFixLoaded = true; 11870 11871 const ADD_TO_CART_TEXT = "Add to cart"; 11872 const SOLD_OUT_TEXT = "Sold out"; 11873 11874 function parseVariants(container) { 11875 if (!container) return []; 11876 11877 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 11878 11879 for (const script of scripts) { 11880 try { 11881 const data = JSON.parse(script.textContent.trim()); 11882 11883 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 11884 return data; 11885 } 11886 11887 if (data && Array.isArray(data.variants)) { 11888 return data.variants; 11889 } 11890 } catch (error) {} 11891 } 11892 11893 return []; 11894 } 11895 11896 function getSelectedOptionValues(container) { 11897 const values = []; 11898 11899 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 11900 const checkedInput = group.querySelector('input[type="radio"]:checked'); 11901 const select = group.querySelector('select'); 11902 11903 if (checkedInput) { 11904 values.push(checkedInput.value); 11905 } else if (select) { 11906 values.push(select.value); 11907 } 11908 }); 11909 11910 return values; 11911 } 11912 11913 function getCurrentVariant(container, form, variants) { 11914 const idInput = form && form.querySelector('[name="id"]'); 11915 const selectedId = idInput && idInput.value; 11916 11917 if (selectedId) { 11918 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 11919 if (byId) return byId; 11920 } 11921 11922 const selectedOptions = getSelectedOptionValues(container); 11923 11924 if (selectedOptions.length) { 11925 return variants.find((variant) => { 11926 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 11927 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 11928 }); 11929 } 11930 11931 return null; 11932 } 11933 11934 function setButtonState(form, variant) { 11935 if (!form) return; 11936 11937 const idInput = form.querySelector('[name="id"]'); 11938 const addButton = form.querySelector('[name="add"]'); 11939 const buttonLabel = 11940 addButton && 11941 (addButton.querySelector('.main-atc__label__text') || 11942 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 11943 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 11944 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 11945 11946 if (!addButton || !idInput || !variant) return; 11947 11948 idInput.value = variant.id; 11949 idInput.disabled = false; 11950 11951 if (spinner) spinner.classList.add('hidden'); 11952 11953 if (variant.available) { 11954 addButton.disabled = false; 11955 addButton.removeAttribute('disabled'); 11956 addButton.removeAttribute('aria-disabled'); 11957 addButton.classList.remove('loading'); 11958 11959 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 11960 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 11961 } else { 11962 addButton.disabled = true; 11963 addButton.setAttribute('disabled', 'disabled'); 11964 addButton.setAttribute('aria-disabled', 'true'); 11965 11966 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 11967 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 11968 } 11969 } 11970 11971 function syncContainer(container) { 11972 if (!container) return; 11973 11974 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 11975 if (!form) return; 11976 11977 const variants = parseVariants(container); 11978 if (!variants.length) return; 11979 11980 const variant = getCurrentVariant(container, form, variants); 11981 if (!variant) return; 11982 11983 setButtonState(form, variant); 11984 } 11985 11986 document.addEventListener('change', (event) => { 11987 const quickAddModal = event.target.closest('quick-add-modal'); 11988 const cardVariantSelects = event.target.closest('card-variant-selects'); 11989 11990 if (quickAddModal) { 11991 setTimeout(() => syncContainer(quickAddModal), 80); 11992 setTimeout(() => syncContainer(quickAddModal), 250); 11993 } 11994 11995 if (cardVariantSelects) { 11996 const card = cardVariantSelects.closest('.card-wrapper'); 11997 if (card) { 11998 setTimeout(() => syncContainer(card), 80); 11999 setTimeout(() => syncContainer(card), 250); 12000 } 12001 } 12002 }); 12003 12004 const observer = new MutationObserver((mutations) => { 12005 mutations.forEach((mutation) => {
12006 mutation.addedNodes.forEach((node) => { 12007 if (!(node instanceof HTMLElement)) return; 12008 12009 if (node.matches && node.matches('quick-add-modal')) { 12010 setTimeout(() => syncContainer(node), 150); 12011 } 12012 12013 node.querySelectorAll && 12014 node.querySelectorAll('quick-add-modal').forEach((modal) => { 12015 setTimeout(() => syncContainer(modal), 150); 12016 }); 12017 }); 12018 }); 12019 }); 12020 12021 observer.observe(document.documentElement, { 12022 childList: true, 12023 subtree: true 12024 }); 12025 12026 document.addEventListener('DOMContentLoaded', () => { 12027 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 12028 }); 12029 })(); 12030</script>
12030 12031 12032 12033 12034 12035 </li> 12036 12037 12038</ul> 12039 12040 </div> 12041 </details></li><li><details id="Details-menu-drawer-submenu-4"> 12042 <summary class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 12043 12044 Pads 12045 <svg 12046 viewBox="0 0 14 10" 12047 fill="none" 12048 aria-hidden="true" 12049 focusable="false" 12050 class="icon icon-arrow" 12051 xmlns="http://www.w3.org/2000/svg" 12052> 12053 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 12054</svg> 12055 12056 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 12057 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 12058</svg> 12059 12060 </summary> 12061 <div id="childlink-pads" class="menu-drawer__submenu has-submenu gradient motion-reduce"> 12062 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 12063 <svg 12064 viewBox="0 0 14 10" 12065 fill="none" 12066 aria-hidden="true" 12067 focusable="false" 12068 class="icon icon-arrow" 12069 xmlns="http://www.w3.org/2000/svg" 12070> 12071 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 12072</svg> 12073 12074 Pads 12075 </button> 12076 12077 <ul class="products-mega-menu__cards products-mega-menu__cards--mobile"> 12078 12079 12080 12081 12082 <li> 12083 12084<div class="card-wrapper product-card-wrapper underline-links-hover"> 12085 <div 12086 class=" 12087 card 12088 card--card 12089 card--media 12090 color-background-1 gradient 12091 12092 12093 12094 card--badge-sided 12095 12096 12097 " 12098 style="--ratio-percent: 100%;" 12099 > 12100 <div 12101 class="card__inner ratio" 12102 style="--ratio-percent: 100%;" 12103 ><div class="card__media"> 12104 <div class="media media--transparent media--hover-effect"> 12105 12106 <img 12107 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443 1080w 12108 " 12109 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=533" 12110 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 12111 alt="Biomimetic Applicator Pads (Full Set) - Team Doctors" 12112 class="motion-reduce" 12113 12114 loading="lazy" 12115 12116 width="1080" 12117 height="1080" 12118 id='quick-add-8394187342015-image' 12119 > 12120 12121<img
12122 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492 1080w 12123 " 12124 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533" 12125 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 12126 alt="" 12127 class="motion-reduce" 12128 loading="lazy" 12129 width="1080" 12130 height="1080" 12131 ></div> 12132 </div><div class="card__content"> 12133 <div class="card__information"> 12134 <h3 12135 class="card__heading" 12136 12137 > 12138 <a 12139 href="/products/biomemetic-applicator-pads-full-set" 12140 id="StandardCardNoMediaLink--8394187342015" 12141 class="full-unstyled-link" 12142 aria-labelledby="StandardCardNoMediaLink--8394187342015 NoMediaStandardBadge--8394187342015" 12143 > 12144 Biomimetic Applicator Pads 12145 </a> 12146 </h3> 12147 </div> 12148 <div class="card__badge bottom left"> 12149 12150 12151 <span 12152 id="NoMediaStandardBadge--8394187342015" 12153 class="badge badge--bottom-left color-accent-2" 12154 > 12155 <svg 12156 aria-hidden="true" 12157 focusable="false" 12158 class="icon icon-discount color-foreground-text" 12159 viewBox="0 0 12 12" 12160> 12161 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 12162</svg> 12163<span class='nowrap'>SAVE 21%</span> 12164 </span></div> 12165 </div> 12166 </div> 12167 <div class="card__content"> 12168 <div class="card__information"> 12169 <h3 12170 class="card__heading h5" 12171 12172 id="title--8394187342015" 12173 12174 > 12175 <a 12176 href="/products/biomemetic-applicator-pads-full-set" 12177 id="CardLink--8394187342015" 12178 class="full-unstyled-link" 12179 aria-labelledby="CardLink--8394187342015 Badge--8394187342015" 12180 > 12181 Biomimetic Applicator Pads 12182 </a> 12183 </h3> 12184 12185 <div class="product-subtitle"> 12186 3 Pads - Full Set 12187 </div> 12188 12189 <div class="card-information"><span class="caption-large light"></span> 12190<div 12191 class=" 12192 price price--on-sale " 12193> 12194 <div class="price__container"><div class="price__regular"> 12195 <span class="visually-hidden visually-hidden--inline">Regular price</span> 12196 <span class="price-item price-item--regular"> 12197 $129.00 12198 </span> 12199 </div> 12200 <div class="price__sale "> 12201 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 12202 <span class="price-item price-item--sale price-item--last"> 12203 $129.00 12204 </span> 12205 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 12206 <span class="price__compare-price"> 12207 <s class="price-item price-item--regular"> 12208 $164.85 12209 </s> 12210 </span></div> 12211 <small class="unit-price caption hidden">
12212 <span class="visually-hidden">Unit price</span> 12213 <span class="price-item price-item--last"> 12214 <span></span> 12215 <span aria-hidden="true">/</span> 12216 <span class="visually-hidden"> per </span> 12217 <span> 12218 </span> 12219 </span> 12220 </small> 12221 </div></div> 12222 12223 </div> 12224 </div> 12225 12226<div class="card__badge bottom left"><span 12227 id="Badge--8394187342015" 12228 class="badge badge--bottom-left color-accent-2" 12229 > 12230 21% 12231 </span></div> 12232 </div> 12233 </div> 12234 </div>
12234<script> 12235 (() => { 12236 if (window.cardProductQuickAddVariantFixLoaded) return; 12237 window.cardProductQuickAddVariantFixLoaded = true; 12238 12239 const ADD_TO_CART_TEXT = "Add to cart"; 12240 const SOLD_OUT_TEXT = "Sold out"; 12241 12242 function parseVariants(container) { 12243 if (!container) return []; 12244 12245 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 12246 12247 for (const script of scripts) { 12248 try { 12249 const data = JSON.parse(script.textContent.trim()); 12250 12251 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 12252 return data; 12253 } 12254 12255 if (data && Array.isArray(data.variants)) { 12256 return data.variants; 12257 } 12258 } catch (error) {} 12259 } 12260 12261 return []; 12262 } 12263 12264 function getSelectedOptionValues(container) { 12265 const values = []; 12266 12267 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 12268 const checkedInput = group.querySelector('input[type="radio"]:checked'); 12269 const select = group.querySelector('select'); 12270 12271 if (checkedInput) { 12272 values.push(checkedInput.value); 12273 } else if (select) { 12274 values.push(select.value); 12275 } 12276 }); 12277 12278 return values; 12279 } 12280 12281 function getCurrentVariant(container, form, variants) { 12282 const idInput = form && form.querySelector('[name="id"]'); 12283 const selectedId = idInput && idInput.value; 12284 12285 if (selectedId) { 12286 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 12287 if (byId) return byId; 12288 } 12289 12290 const selectedOptions = getSelectedOptionValues(container); 12291 12292 if (selectedOptions.length) { 12293 return variants.find((variant) => { 12294 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 12295 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 12296 }); 12297 } 12298 12299 return null; 12300 } 12301 12302 function setButtonState(form, variant) { 12303 if (!form) return; 12304 12305 const idInput = form.querySelector('[name="id"]'); 12306 const addButton = form.querySelector('[name="add"]'); 12307 const buttonLabel = 12308 addButton && 12309 (addButton.querySelector('.main-atc__label__text') || 12310 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 12311 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 12312 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 12313 12314 if (!addButton || !idInput || !variant) return; 12315 12316 idInput.value = variant.id; 12317 idInput.disabled = false; 12318 12319 if (spinner) spinner.classList.add('hidden'); 12320 12321 if (variant.available) { 12322 addButton.disabled = false; 12323 addButton.removeAttribute('disabled'); 12324 addButton.removeAttribute('aria-disabled'); 12325 addButton.classList.remove('loading'); 12326 12327 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 12328 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 12329 } else { 12330 addButton.disabled = true; 12331 addButton.setAttribute('disabled', 'disabled'); 12332 addButton.setAttribute('aria-disabled', 'true'); 12333 12334 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 12335 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 12336 } 12337 } 12338 12339 function syncContainer(container) { 12340 if (!container) return; 12341 12342 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 12343 if (!form) return; 12344 12345 const variants = parseVariants(container); 12346 if (!variants.length) return; 12347 12348 const variant = getCurrentVariant(container, form, variants); 12349 if (!variant) return; 12350 12351 setButtonState(form, variant); 12352 } 12353 12354 document.addEventListener('change', (event) => { 12355 const quickAddModal = event.target.closest('quick-add-modal'); 12356 const cardVariantSelects = event.target.closest('card-variant-selects'); 12357 12358 if (quickAddModal) { 12359 setTimeout(() => syncContainer(quickAddModal), 80); 12360 setTimeout(() => syncContainer(quickAddModal), 250); 12361 } 12362 12363 if (cardVariantSelects) { 12364 const card = cardVariantSelects.closest('.card-wrapper'); 12365 if (card) { 12366 setTimeout(() => syncContainer(card), 80); 12367 setTimeout(() => syncContainer(card), 250); 12368 } 12369 } 12370 }); 12371 12372 const observer = new MutationObserver((mutations) => { 12373 mutations.forEach((mutation) => {
12374 mutation.addedNodes.forEach((node) => { 12375 if (!(node instanceof HTMLElement)) return; 12376 12377 if (node.matches && node.matches('quick-add-modal')) { 12378 setTimeout(() => syncContainer(node), 150); 12379 } 12380 12381 node.querySelectorAll && 12382 node.querySelectorAll('quick-add-modal').forEach((modal) => { 12383 setTimeout(() => syncContainer(modal), 150); 12384 }); 12385 }); 12386 }); 12387 }); 12388 12389 observer.observe(document.documentElement, { 12390 childList: true, 12391 subtree: true 12392 }); 12393 12394 document.addEventListener('DOMContentLoaded', () => { 12395 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 12396 }); 12397 })(); 12398</script>
12398 12399 12400 12401 12402 12403 </li> 12404 12405 <li> 12406 12407<div class="card-wrapper product-card-wrapper underline-links-hover"> 12408 <div 12409 class=" 12410 card 12411 card--card 12412 card--media 12413 color-background-1 gradient 12414 12415 12416 12417 card--badge-sided 12418 12419 12420 " 12421 style="--ratio-percent: 100%;" 12422 > 12423 <div 12424 class="card__inner ratio" 12425 style="--ratio-percent: 100%;" 12426 ><div class="card__media"> 12427 <div class="media media--transparent media--hover-effect"> 12428 12429 <img 12430 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844 1254w 12431 " 12432 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=533" 12433 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 12434 alt="Balance bundle - Team Doctors" 12435 class="motion-reduce" 12436 12437 loading="lazy" 12438 12439 width="1254" 12440 height="1254" 12441 id='quick-add-8402094031039-image' 12442 > 12443 12444<img 12445 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311 1080w 12446 " 12447 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533" 12448 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 12449 alt="" 12450 class="motion-reduce" 12451 loading="lazy" 12452 width="1080" 12453 height="1080" 12454 ></div> 12455 </div><div class="card__content"> 12456 <div class="card__information"> 12457 <h3 12458 class="card__heading" 12459 12460 > 12461 <a 12462 href="/products/vibeassage%C2%AE-relief-bundle" 12463 id="StandardCardNoMediaLink--8402094031039" 12464 class="full-unstyled-link" 12465 aria-labelledby="StandardCardNoMediaLink--8402094031039 NoMediaStandardBadge--8402094031039" 12466 > 12467 Balance bundle 12468 </a> 12469 </h3> 12470 </div> 12471 <div class="card__badge bottom left"> 12472 12473
12474 <span 12475 id="NoMediaStandardBadge--8402094031039" 12476 class="badge badge--bottom-left color-accent-2" 12477 > 12478 <svg 12479 aria-hidden="true" 12480 focusable="false" 12481 class="icon icon-discount color-foreground-text" 12482 viewBox="0 0 12 12" 12483> 12484 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 12485</svg> 12486<span class='nowrap'>SAVE 9%</span> 12487 </span></div> 12488 </div> 12489 </div> 12490 <div class="card__content"> 12491 <div class="card__information"> 12492 <h3 12493 class="card__heading h5" 12494 12495 id="title--8402094031039" 12496 12497 > 12498 <a 12499 href="/products/vibeassage%C2%AE-relief-bundle" 12500 id="CardLink--8402094031039" 12501 class="full-unstyled-link" 12502 aria-labelledby="CardLink--8402094031039 Badge--8402094031039" 12503 > 12504 Balance bundle 12505 </a> 12506 </h3> 12507 12508 <div class="product-subtitle"> 12509 Comfort Relief Pad + Peak Performance Pad 12510 </div> 12511 12512 <div class="card-information"><span class="caption-large light"></span> 12513<div 12514 class=" 12515 price price--on-sale " 12516> 12517 <div class="price__container"><div class="price__regular"> 12518 <span class="visually-hidden visually-hidden--inline">Regular price</span> 12519 <span class="price-item price-item--regular"> 12520 $99.00 12521 </span> 12522 </div> 12523 <div class="price__sale "> 12524 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 12525 <span class="price-item price-item--sale price-item--last"> 12526 $99.00 12527 </span> 12528 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 12529 <span class="price__compare-price"> 12530 <s class="price-item price-item--regular"> 12531 $109.95 12532 </s> 12533 </span></div> 12534 <small class="unit-price caption hidden"> 12535 <span class="visually-hidden">Unit price</span> 12536 <span class="price-item price-item--last"> 12537 <span></span> 12538 <span aria-hidden="true">/</span> 12539 <span class="visually-hidden"> per </span> 12540 <span> 12541 </span> 12542 </span> 12543 </small> 12544 </div></div> 12545 12546 </div> 12547 </div> 12548 12549<div class="card__badge bottom left"><span 12550 id="Badge--8402094031039" 12551 class="badge badge--bottom-left color-accent-2" 12552 > 12553 9% 12554 </span></div> 12555 </div> 12556 </div> 12557 </div>
12557<script> 12558 (() => { 12559 if (window.cardProductQuickAddVariantFixLoaded) return; 12560 window.cardProductQuickAddVariantFixLoaded = true; 12561 12562 const ADD_TO_CART_TEXT = "Add to cart"; 12563 const SOLD_OUT_TEXT = "Sold out"; 12564 12565 function parseVariants(container) { 12566 if (!container) return []; 12567 12568 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 12569 12570 for (const script of scripts) { 12571 try { 12572 const data = JSON.parse(script.textContent.trim()); 12573 12574 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 12575 return data; 12576 } 12577 12578 if (data && Array.isArray(data.variants)) { 12579 return data.variants; 12580 } 12581 } catch (error) {} 12582 } 12583 12584 return []; 12585 } 12586 12587 function getSelectedOptionValues(container) { 12588 const values = []; 12589 12590 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 12591 const checkedInput = group.querySelector('input[type="radio"]:checked'); 12592 const select = group.querySelector('select'); 12593 12594 if (checkedInput) { 12595 values.push(checkedInput.value); 12596 } else if (select) { 12597 values.push(select.value); 12598 } 12599 }); 12600 12601 return values; 12602 } 12603 12604 function getCurrentVariant(container, form, variants) { 12605 const idInput = form && form.querySelector('[name="id"]'); 12606 const selectedId = idInput && idInput.value; 12607 12608 if (selectedId) { 12609 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 12610 if (byId) return byId; 12611 } 12612 12613 const selectedOptions = getSelectedOptionValues(container); 12614 12615 if (selectedOptions.length) { 12616 return variants.find((variant) => { 12617 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 12618 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 12619 }); 12620 } 12621 12622 return null; 12623 } 12624 12625 function setButtonState(form, variant) { 12626 if (!form) return; 12627 12628 const idInput = form.querySelector('[name="id"]'); 12629 const addButton = form.querySelector('[name="add"]'); 12630 const buttonLabel = 12631 addButton && 12632 (addButton.querySelector('.main-atc__label__text') || 12633 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 12634 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 12635 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 12636 12637 if (!addButton || !idInput || !variant) return; 12638 12639 idInput.value = variant.id; 12640 idInput.disabled = false; 12641 12642 if (spinner) spinner.classList.add('hidden'); 12643 12644 if (variant.available) { 12645 addButton.disabled = false; 12646 addButton.removeAttribute('disabled'); 12647 addButton.removeAttribute('aria-disabled'); 12648 addButton.classList.remove('loading'); 12649 12650 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 12651 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 12652 } else { 12653 addButton.disabled = true; 12654 addButton.setAttribute('disabled', 'disabled'); 12655 addButton.setAttribute('aria-disabled', 'true'); 12656 12657 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 12658 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 12659 } 12660 } 12661 12662 function syncContainer(container) { 12663 if (!container) return; 12664 12665 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 12666 if (!form) return; 12667 12668 const variants = parseVariants(container); 12669 if (!variants.length) return; 12670 12671 const variant = getCurrentVariant(container, form, variants); 12672 if (!variant) return; 12673 12674 setButtonState(form, variant); 12675 } 12676 12677 document.addEventListener('change', (event) => { 12678 const quickAddModal = event.target.closest('quick-add-modal'); 12679 const cardVariantSelects = event.target.closest('card-variant-selects'); 12680 12681 if (quickAddModal) { 12682 setTimeout(() => syncContainer(quickAddModal), 80); 12683 setTimeout(() => syncContainer(quickAddModal), 250); 12684 } 12685 12686 if (cardVariantSelects) { 12687 const card = cardVariantSelects.closest('.card-wrapper'); 12688 if (card) { 12689 setTimeout(() => syncContainer(card), 80); 12690 setTimeout(() => syncContainer(card), 250); 12691 } 12692 } 12693 }); 12694 12695 const observer = new MutationObserver((mutations) => { 12696 mutations.forEach((mutation) => {
12697 mutation.addedNodes.forEach((node) => { 12698 if (!(node instanceof HTMLElement)) return; 12699 12700 if (node.matches && node.matches('quick-add-modal')) { 12701 setTimeout(() => syncContainer(node), 150); 12702 } 12703 12704 node.querySelectorAll && 12705 node.querySelectorAll('quick-add-modal').forEach((modal) => { 12706 setTimeout(() => syncContainer(modal), 150); 12707 }); 12708 }); 12709 }); 12710 }); 12711 12712 observer.observe(document.documentElement, { 12713 childList: true, 12714 subtree: true 12715 }); 12716 12717 document.addEventListener('DOMContentLoaded', () => { 12718 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 12719 }); 12720 })(); 12721</script>
12721 12722 12723 12724 12725 12726 </li> 12727 12728 <li> 12729 12730<div class="card-wrapper product-card-wrapper underline-links-hover"> 12731 <div 12732 class=" 12733 card 12734 card--card 12735 card--media 12736 color-background-1 gradient 12737 12738 12739 12740 card--badge-sided 12741 12742 12743 " 12744 style="--ratio-percent: 100%;" 12745 > 12746 <div 12747 class="card__inner ratio" 12748 style="--ratio-percent: 100%;" 12749 ><div class="card__media"> 12750 <div class="media media--transparent media--hover-effect"> 12751 12752 <img 12753 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844 1254w 12754 " 12755 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=533" 12756 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 12757 alt="Relief Bundle - Team Doctors" 12758 class="motion-reduce" 12759 12760 loading="lazy" 12761 12762 width="1254" 12763 height="1254" 12764 id='quick-add-8433935974591-image' 12765 > 12766 12767<img 12768 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311 1080w 12769 " 12770 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533" 12771 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 12772 alt="" 12773 class="motion-reduce" 12774 loading="lazy" 12775 width="1080" 12776 height="1080" 12777 ></div> 12778 </div><div class="card__content"> 12779 <div class="card__information"> 12780 <h3 12781 class="card__heading" 12782 12783 > 12784 <a 12785 href="/products/relief-bundle" 12786 id="StandardCardNoMediaLink--8433935974591" 12787 class="full-unstyled-link" 12788 aria-labelledby="StandardCardNoMediaLink--8433935974591 NoMediaStandardBadge--8433935974591" 12789 > 12790 Relief Bundle 12791 </a> 12792 </h3> 12793 </div> 12794 <div class="card__badge bottom left"> 12795 12796
12797 <span 12798 id="NoMediaStandardBadge--8433935974591" 12799 class="badge badge--bottom-left color-accent-2" 12800 > 12801 <svg 12802 aria-hidden="true" 12803 focusable="false" 12804 class="icon icon-discount color-foreground-text" 12805 viewBox="0 0 12 12" 12806> 12807 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 12808</svg> 12809<span class='nowrap'>SAVE 9%</span> 12810 </span></div> 12811 </div> 12812 </div> 12813 <div class="card__content"> 12814 <div class="card__information"> 12815 <h3 12816 class="card__heading h5" 12817 12818 id="title--8433935974591" 12819 12820 > 12821 <a 12822 href="/products/relief-bundle" 12823 id="CardLink--8433935974591" 12824 class="full-unstyled-link" 12825 aria-labelledby="CardLink--8433935974591 Badge--8433935974591" 12826 > 12827 Relief Bundle 12828 </a> 12829 </h3> 12830 12831 <div class="product-subtitle"> 12832 Comfort Relief Pad + Core Recovery Pad 12833 </div> 12834 12835 <div class="card-information"><span class="caption-large light"></span> 12836<div 12837 class=" 12838 price price--on-sale " 12839> 12840 <div class="price__container"><div class="price__regular"> 12841 <span class="visually-hidden visually-hidden--inline">Regular price</span> 12842 <span class="price-item price-item--regular"> 12843 $99.00 12844 </span> 12845 </div> 12846 <div class="price__sale "> 12847 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 12848 <span class="price-item price-item--sale price-item--last"> 12849 $99.00 12850 </span> 12851 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 12852 <span class="price__compare-price"> 12853 <s class="price-item price-item--regular"> 12854 $109.90 12855 </s> 12856 </span></div> 12857 <small class="unit-price caption hidden"> 12858 <span class="visually-hidden">Unit price</span> 12859 <span class="price-item price-item--last"> 12860 <span></span> 12861 <span aria-hidden="true">/</span> 12862 <span class="visually-hidden"> per </span> 12863 <span> 12864 </span> 12865 </span> 12866 </small> 12867 </div></div> 12868 12869 </div> 12870 </div> 12871 12872<div class="card__badge bottom left"><span 12873 id="Badge--8433935974591" 12874 class="badge badge--bottom-left color-accent-2" 12875 > 12876 9% 12877 </span></div> 12878 </div> 12879 </div> 12880 </div>
12880<script> 12881 (() => { 12882 if (window.cardProductQuickAddVariantFixLoaded) return; 12883 window.cardProductQuickAddVariantFixLoaded = true; 12884 12885 const ADD_TO_CART_TEXT = "Add to cart"; 12886 const SOLD_OUT_TEXT = "Sold out"; 12887 12888 function parseVariants(container) { 12889 if (!container) return []; 12890 12891 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 12892 12893 for (const script of scripts) { 12894 try { 12895 const data = JSON.parse(script.textContent.trim()); 12896 12897 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 12898 return data; 12899 } 12900 12901 if (data && Array.isArray(data.variants)) { 12902 return data.variants; 12903 } 12904 } catch (error) {} 12905 } 12906 12907 return []; 12908 } 12909 12910 function getSelectedOptionValues(container) { 12911 const values = []; 12912 12913 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 12914 const checkedInput = group.querySelector('input[type="radio"]:checked'); 12915 const select = group.querySelector('select'); 12916 12917 if (checkedInput) { 12918 values.push(checkedInput.value); 12919 } else if (select) { 12920 values.push(select.value); 12921 } 12922 }); 12923 12924 return values; 12925 } 12926 12927 function getCurrentVariant(container, form, variants) { 12928 const idInput = form && form.querySelector('[name="id"]'); 12929 const selectedId = idInput && idInput.value; 12930 12931 if (selectedId) { 12932 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 12933 if (byId) return byId; 12934 } 12935 12936 const selectedOptions = getSelectedOptionValues(container); 12937 12938 if (selectedOptions.length) { 12939 return variants.find((variant) => { 12940 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 12941 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 12942 }); 12943 } 12944 12945 return null; 12946 } 12947 12948 function setButtonState(form, variant) { 12949 if (!form) return; 12950 12951 const idInput = form.querySelector('[name="id"]'); 12952 const addButton = form.querySelector('[name="add"]'); 12953 const buttonLabel = 12954 addButton && 12955 (addButton.querySelector('.main-atc__label__text') || 12956 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 12957 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 12958 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 12959 12960 if (!addButton || !idInput || !variant) return; 12961 12962 idInput.value = variant.id; 12963 idInput.disabled = false; 12964 12965 if (spinner) spinner.classList.add('hidden'); 12966 12967 if (variant.available) { 12968 addButton.disabled = false; 12969 addButton.removeAttribute('disabled'); 12970 addButton.removeAttribute('aria-disabled'); 12971 addButton.classList.remove('loading'); 12972 12973 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 12974 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 12975 } else { 12976 addButton.disabled = true; 12977 addButton.setAttribute('disabled', 'disabled'); 12978 addButton.setAttribute('aria-disabled', 'true'); 12979 12980 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 12981 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 12982 } 12983 } 12984 12985 function syncContainer(container) { 12986 if (!container) return; 12987 12988 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 12989 if (!form) return; 12990 12991 const variants = parseVariants(container); 12992 if (!variants.length) return; 12993 12994 const variant = getCurrentVariant(container, form, variants); 12995 if (!variant) return; 12996 12997 setButtonState(form, variant); 12998 } 12999 13000 document.addEventListener('change', (event) => { 13001 const quickAddModal = event.target.closest('quick-add-modal'); 13002 const cardVariantSelects = event.target.closest('card-variant-selects'); 13003 13004 if (quickAddModal) { 13005 setTimeout(() => syncContainer(quickAddModal), 80); 13006 setTimeout(() => syncContainer(quickAddModal), 250); 13007 } 13008 13009 if (cardVariantSelects) { 13010 const card = cardVariantSelects.closest('.card-wrapper'); 13011 if (card) { 13012 setTimeout(() => syncContainer(card), 80); 13013 setTimeout(() => syncContainer(card), 250); 13014 } 13015 } 13016 }); 13017 13018 const observer = new MutationObserver((mutations) => { 13019 mutations.forEach((mutation) => {
13020 mutation.addedNodes.forEach((node) => { 13021 if (!(node instanceof HTMLElement)) return; 13022 13023 if (node.matches && node.matches('quick-add-modal')) { 13024 setTimeout(() => syncContainer(node), 150); 13025 } 13026 13027 node.querySelectorAll && 13028 node.querySelectorAll('quick-add-modal').forEach((modal) => { 13029 setTimeout(() => syncContainer(modal), 150); 13030 }); 13031 }); 13032 }); 13033 }); 13034 13035 observer.observe(document.documentElement, { 13036 childList: true, 13037 subtree: true 13038 }); 13039 13040 document.addEventListener('DOMContentLoaded', () => { 13041 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 13042 }); 13043 })(); 13044</script>
13044 13045 13046 13047 13048 13049 </li> 13050 13051 <li> 13052 13053<div class="card-wrapper product-card-wrapper underline-links-hover"> 13054 <div 13055 class=" 13056 card 13057 card--card 13058 card--media 13059 color-background-1 gradient 13060 13061 13062 13063 card--badge-sided 13064 13065 13066 " 13067 style="--ratio-percent: 100%;" 13068 > 13069 <div 13070 class="card__inner ratio" 13071 style="--ratio-percent: 100%;" 13072 ><div class="card__media"> 13073 <div class="media media--transparent media--hover-effect"> 13074 13075 <img 13076 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844 1254w 13077 " 13078 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=533" 13079 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 13080 alt="Performance Bundle - Team Doctors" 13081 class="motion-reduce" 13082 13083 loading="lazy" 13084 13085 width="1254" 13086 height="1254" 13087 id='quick-add-8433936007359-image' 13088 > 13089 13090<img 13091 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322 1080w 13092 " 13093 src="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=533" 13094 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 13095 alt="" 13096 class="motion-reduce" 13097 loading="lazy" 13098 width="1080" 13099 height="1080" 13100 ></div> 13101 </div><div class="card__content"> 13102 <div class="card__information"> 13103 <h3 13104 class="card__heading" 13105 13106 > 13107 <a 13108 href="/products/performance-bundle" 13109 id="StandardCardNoMediaLink--8433936007359" 13110 class="full-unstyled-link" 13111 aria-labelledby="StandardCardNoMediaLink--8433936007359 NoMediaStandardBadge--8433936007359" 13112 > 13113 Performance Bundle 13114 </a> 13115 </h3> 13116 </div> 13117 <div class="card__badge bottom left"> 13118 13119
13120 <span 13121 id="NoMediaStandardBadge--8433936007359" 13122 class="badge badge--bottom-left color-accent-2" 13123 > 13124 <svg 13125 aria-hidden="true" 13126 focusable="false" 13127 class="icon icon-discount color-foreground-text" 13128 viewBox="0 0 12 12" 13129> 13130 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 13131</svg> 13132<span class='nowrap'>SAVE 9%</span> 13133 </span></div> 13134 </div> 13135 </div> 13136 <div class="card__content"> 13137 <div class="card__information"> 13138 <h3 13139 class="card__heading h5" 13140 13141 id="title--8433936007359" 13142 13143 > 13144 <a 13145 href="/products/performance-bundle" 13146 id="CardLink--8433936007359" 13147 class="full-unstyled-link" 13148 aria-labelledby="CardLink--8433936007359 Badge--8433936007359" 13149 > 13150 Performance Bundle 13151 </a> 13152 </h3> 13153 13154 <div class="product-subtitle"> 13155 Core Cecovery Pad + Peak Performance Pad 13156 </div> 13157 13158 <div class="card-information"><span class="caption-large light"></span> 13159<div 13160 class=" 13161 price price--on-sale " 13162> 13163 <div class="price__container"><div class="price__regular"> 13164 <span class="visually-hidden visually-hidden--inline">Regular price</span> 13165 <span class="price-item price-item--regular"> 13166 $99.00 13167 </span> 13168 </div> 13169 <div class="price__sale "> 13170 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 13171 <span class="price-item price-item--sale price-item--last"> 13172 $99.00 13173 </span> 13174 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 13175 <span class="price__compare-price"> 13176 <s class="price-item price-item--regular"> 13177 $109.90 13178 </s> 13179 </span></div> 13180 <small class="unit-price caption hidden"> 13181 <span class="visually-hidden">Unit price</span> 13182 <span class="price-item price-item--last"> 13183 <span></span> 13184 <span aria-hidden="true">/</span> 13185 <span class="visually-hidden"> per </span> 13186 <span> 13187 </span> 13188 </span> 13189 </small> 13190 </div></div> 13191 13192 </div> 13193 </div> 13194 13195<div class="card__badge bottom left"><span 13196 id="Badge--8433936007359" 13197 class="badge badge--bottom-left color-accent-2" 13198 > 13199 9% 13200 </span></div> 13201 </div> 13202 </div> 13203 </div>
13203<script> 13204 (() => { 13205 if (window.cardProductQuickAddVariantFixLoaded) return; 13206 window.cardProductQuickAddVariantFixLoaded = true; 13207 13208 const ADD_TO_CART_TEXT = "Add to cart"; 13209 const SOLD_OUT_TEXT = "Sold out"; 13210 13211 function parseVariants(container) { 13212 if (!container) return []; 13213 13214 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 13215 13216 for (const script of scripts) { 13217 try { 13218 const data = JSON.parse(script.textContent.trim()); 13219 13220 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 13221 return data; 13222 } 13223 13224 if (data && Array.isArray(data.variants)) { 13225 return data.variants; 13226 } 13227 } catch (error) {} 13228 } 13229 13230 return []; 13231 } 13232 13233 function getSelectedOptionValues(container) { 13234 const values = []; 13235 13236 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 13237 const checkedInput = group.querySelector('input[type="radio"]:checked'); 13238 const select = group.querySelector('select'); 13239 13240 if (checkedInput) { 13241 values.push(checkedInput.value); 13242 } else if (select) { 13243 values.push(select.value); 13244 } 13245 }); 13246 13247 return values; 13248 } 13249 13250 function getCurrentVariant(container, form, variants) { 13251 const idInput = form && form.querySelector('[name="id"]'); 13252 const selectedId = idInput && idInput.value; 13253 13254 if (selectedId) { 13255 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 13256 if (byId) return byId; 13257 } 13258 13259 const selectedOptions = getSelectedOptionValues(container); 13260 13261 if (selectedOptions.length) { 13262 return variants.find((variant) => { 13263 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 13264 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 13265 }); 13266 } 13267 13268 return null; 13269 } 13270 13271 function setButtonState(form, variant) { 13272 if (!form) return; 13273 13274 const idInput = form.querySelector('[name="id"]'); 13275 const addButton = form.querySelector('[name="add"]'); 13276 const buttonLabel = 13277 addButton && 13278 (addButton.querySelector('.main-atc__label__text') || 13279 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 13280 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 13281 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 13282 13283 if (!addButton || !idInput || !variant) return; 13284 13285 idInput.value = variant.id; 13286 idInput.disabled = false; 13287 13288 if (spinner) spinner.classList.add('hidden'); 13289 13290 if (variant.available) { 13291 addButton.disabled = false; 13292 addButton.removeAttribute('disabled'); 13293 addButton.removeAttribute('aria-disabled'); 13294 addButton.classList.remove('loading'); 13295 13296 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 13297 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 13298 } else { 13299 addButton.disabled = true; 13300 addButton.setAttribute('disabled', 'disabled'); 13301 addButton.setAttribute('aria-disabled', 'true'); 13302 13303 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 13304 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 13305 } 13306 } 13307 13308 function syncContainer(container) { 13309 if (!container) return; 13310 13311 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 13312 if (!form) return; 13313 13314 const variants = parseVariants(container); 13315 if (!variants.length) return; 13316 13317 const variant = getCurrentVariant(container, form, variants); 13318 if (!variant) return; 13319 13320 setButtonState(form, variant); 13321 } 13322 13323 document.addEventListener('change', (event) => { 13324 const quickAddModal = event.target.closest('quick-add-modal'); 13325 const cardVariantSelects = event.target.closest('card-variant-selects'); 13326 13327 if (quickAddModal) { 13328 setTimeout(() => syncContainer(quickAddModal), 80); 13329 setTimeout(() => syncContainer(quickAddModal), 250); 13330 } 13331 13332 if (cardVariantSelects) { 13333 const card = cardVariantSelects.closest('.card-wrapper'); 13334 if (card) { 13335 setTimeout(() => syncContainer(card), 80); 13336 setTimeout(() => syncContainer(card), 250); 13337 } 13338 } 13339 }); 13340 13341 const observer = new MutationObserver((mutations) => { 13342 mutations.forEach((mutation) => {
13343 mutation.addedNodes.forEach((node) => { 13344 if (!(node instanceof HTMLElement)) return; 13345 13346 if (node.matches && node.matches('quick-add-modal')) { 13347 setTimeout(() => syncContainer(node), 150); 13348 } 13349 13350 node.querySelectorAll && 13351 node.querySelectorAll('quick-add-modal').forEach((modal) => { 13352 setTimeout(() => syncContainer(modal), 150); 13353 }); 13354 }); 13355 }); 13356 }); 13357 13358 observer.observe(document.documentElement, { 13359 childList: true, 13360 subtree: true 13361 }); 13362 13363 document.addEventListener('DOMContentLoaded', () => { 13364 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 13365 }); 13366 })(); 13367</script>
13367 13368 13369 13370 13371 13372 </li> 13373 13374 <li> 13375 13376<div class="card-wrapper product-card-wrapper underline-links-hover"> 13377 <div 13378 class=" 13379 card 13380 card--card 13381 card--media 13382 color-background-1 gradient 13383 13384 13385 13386 card--badge-sided 13387 13388 13389 " 13390 style="--ratio-percent: 100%;" 13391 > 13392 <div 13393 class="card__inner ratio" 13394 style="--ratio-percent: 100%;" 13395 ><div class="card__media"> 13396 <div class="media media--transparent media--hover-effect"> 13397 13398 <img 13399 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006 1080w 13400 " 13401 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533" 13402 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 13403 alt="ð´ Comfort Relief Pad⢠- Team Doctors" 13404 class="motion-reduce" 13405 13406 loading="lazy" 13407 13408 width="1080" 13409 height="1080" 13410 id='quick-add-8358127599807-image' 13411 > 13412 13413<img 13414 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492 1080w 13415 " 13416 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533" 13417 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 13418 alt="" 13419 class="motion-reduce" 13420 loading="lazy" 13421 width="1080" 13422 height="1080" 13423 ></div> 13424 </div><div class="card__content"> 13425 <div class="card__information"> 13426 <h3 13427 class="card__heading" 13428 13429 > 13430 <a 13431 href="/products/biomimetic-comfort-relief-pad" 13432 id="StandardCardNoMediaLink--8358127599807" 13433 class="full-unstyled-link" 13434 aria-labelledby="StandardCardNoMediaLink--8358127599807 NoMediaStandardBadge--8358127599807" 13435 > 13436 ð´ Comfort Relief Pad⢠13437 </a> 13438 </h3> 13439 </div> 13440 <div class="card__badge bottom left"> 13441 13442 </div> 13443 </div> 13444 </div> 13445 <div class="card__content"> 13446 <div class="card__information"> 13447 <h3 13448 class="card__heading h5" 13449 13450 id="title--8358127599807" 13451 13452 > 13453 <a 13454 href="/products/biomimetic-comfort-relief-pad" 13455 id="CardLink--8358127599807" 13456 class="full-unstyled-link" 13457 aria-labelledby="CardLink--8358127599807 Badge--8358127599807" 13458 > 13459 ð´ Comfort Relief Pad⢠13460 </a> 13461 </h3> 13462 13463 <div class="card-information"><span class="caption-large light"></span> 13464<div 13465 class=" 13466 price " 13467> 13468 <div class="price__container"><div class="price__regular">
13469 <span class="visually-hidden visually-hidden--inline">Regular price</span> 13470 <span class="price-item price-item--regular"> 13471 $54.95 13472 </span> 13473 </div> 13474 <div class="price__sale "> 13475 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 13476 <span class="price-item price-item--sale price-item--last"> 13477 $54.95 13478 </span> 13479 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 13480 <span class="price__compare-price"> 13481 <s class="price-item price-item--regular"> 13482 13483 </s> 13484 </span></div> 13485 <small class="unit-price caption hidden"> 13486 <span class="visually-hidden">Unit price</span> 13487 <span class="price-item price-item--last"> 13488 <span></span> 13489 <span aria-hidden="true">/</span> 13490 <span class="visually-hidden"> per </span> 13491 <span> 13492 </span> 13493 </span> 13494 </small> 13495 </div></div> 13496 13497 </div> 13498 </div> 13499 13500<div class="card__badge bottom left"></div> 13501 </div> 13502 </div> 13503 </div>
13503<script> 13504 (() => { 13505 if (window.cardProductQuickAddVariantFixLoaded) return; 13506 window.cardProductQuickAddVariantFixLoaded = true; 13507 13508 const ADD_TO_CART_TEXT = "Add to cart"; 13509 const SOLD_OUT_TEXT = "Sold out"; 13510 13511 function parseVariants(container) { 13512 if (!container) return []; 13513 13514 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 13515 13516 for (const script of scripts) { 13517 try { 13518 const data = JSON.parse(script.textContent.trim()); 13519 13520 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 13521 return data; 13522 } 13523 13524 if (data && Array.isArray(data.variants)) { 13525 return data.variants; 13526 } 13527 } catch (error) {} 13528 } 13529 13530 return []; 13531 } 13532 13533 function getSelectedOptionValues(container) { 13534 const values = []; 13535 13536 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 13537 const checkedInput = group.querySelector('input[type="radio"]:checked'); 13538 const select = group.querySelector('select'); 13539 13540 if (checkedInput) { 13541 values.push(checkedInput.value); 13542 } else if (select) { 13543 values.push(select.value); 13544 } 13545 }); 13546 13547 return values; 13548 } 13549 13550 function getCurrentVariant(container, form, variants) { 13551 const idInput = form && form.querySelector('[name="id"]'); 13552 const selectedId = idInput && idInput.value; 13553 13554 if (selectedId) { 13555 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 13556 if (byId) return byId; 13557 } 13558 13559 const selectedOptions = getSelectedOptionValues(container); 13560 13561 if (selectedOptions.length) { 13562 return variants.find((variant) => { 13563 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 13564 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 13565 }); 13566 } 13567 13568 return null; 13569 } 13570 13571 function setButtonState(form, variant) { 13572 if (!form) return; 13573 13574 const idInput = form.querySelector('[name="id"]'); 13575 const addButton = form.querySelector('[name="add"]'); 13576 const buttonLabel = 13577 addButton && 13578 (addButton.querySelector('.main-atc__label__text') || 13579 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 13580 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 13581 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 13582 13583 if (!addButton || !idInput || !variant) return; 13584 13585 idInput.value = variant.id; 13586 idInput.disabled = false; 13587 13588 if (spinner) spinner.classList.add('hidden'); 13589 13590 if (variant.available) { 13591 addButton.disabled = false; 13592 addButton.removeAttribute('disabled'); 13593 addButton.removeAttribute('aria-disabled'); 13594 addButton.classList.remove('loading'); 13595 13596 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 13597 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 13598 } else { 13599 addButton.disabled = true; 13600 addButton.setAttribute('disabled', 'disabled'); 13601 addButton.setAttribute('aria-disabled', 'true'); 13602 13603 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 13604 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 13605 } 13606 } 13607 13608 function syncContainer(container) { 13609 if (!container) return; 13610 13611 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 13612 if (!form) return; 13613 13614 const variants = parseVariants(container); 13615 if (!variants.length) return; 13616 13617 const variant = getCurrentVariant(container, form, variants); 13618 if (!variant) return; 13619 13620 setButtonState(form, variant); 13621 } 13622 13623 document.addEventListener('change', (event) => { 13624 const quickAddModal = event.target.closest('quick-add-modal'); 13625 const cardVariantSelects = event.target.closest('card-variant-selects'); 13626 13627 if (quickAddModal) { 13628 setTimeout(() => syncContainer(quickAddModal), 80); 13629 setTimeout(() => syncContainer(quickAddModal), 250); 13630 } 13631 13632 if (cardVariantSelects) { 13633 const card = cardVariantSelects.closest('.card-wrapper'); 13634 if (card) { 13635 setTimeout(() => syncContainer(card), 80); 13636 setTimeout(() => syncContainer(card), 250); 13637 } 13638 } 13639 }); 13640 13641 const observer = new MutationObserver((mutations) => { 13642 mutations.forEach((mutation) => {
13643 mutation.addedNodes.forEach((node) => { 13644 if (!(node instanceof HTMLElement)) return; 13645 13646 if (node.matches && node.matches('quick-add-modal')) { 13647 setTimeout(() => syncContainer(node), 150); 13648 } 13649 13650 node.querySelectorAll && 13651 node.querySelectorAll('quick-add-modal').forEach((modal) => { 13652 setTimeout(() => syncContainer(modal), 150); 13653 }); 13654 }); 13655 }); 13656 }); 13657 13658 observer.observe(document.documentElement, { 13659 childList: true, 13660 subtree: true 13661 }); 13662 13663 document.addEventListener('DOMContentLoaded', () => { 13664 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 13665 }); 13666 })(); 13667</script>
13667 13668 13669 13670 13671 13672 </li> 13673 13674 <li> 13675 13676<div class="card-wrapper product-card-wrapper underline-links-hover"> 13677 <div 13678 class=" 13679 card 13680 card--card 13681 card--media 13682 color-background-1 gradient 13683 13684 13685 13686 card--badge-sided 13687 13688 13689 " 13690 style="--ratio-percent: 100%;" 13691 > 13692 <div 13693 class="card__inner ratio" 13694 style="--ratio-percent: 100%;" 13695 ><div class="card__media"> 13696 <div class="media media--transparent media--hover-effect"> 13697 13698 <img 13699 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451 1080w 13700 " 13701 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=533" 13702 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 13703 alt="White" 13704 class="motion-reduce" 13705 13706 loading="lazy" 13707 13708 width="1080" 13709 height="1080" 13710 id='quick-add-8358145917119-image' 13711 > 13712 13713<img 13714 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477 1080w 13715 " 13716 src="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=533" 13717 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 13718 alt="" 13719 class="motion-reduce" 13720 loading="lazy" 13721 width="1080" 13722 height="1080" 13723 ></div> 13724 </div><div class="card__content"> 13725 <div class="card__information"> 13726 <h3 13727 class="card__heading" 13728 13729 > 13730 <a 13731 href="/products/biomimetic-core-recovery-pad" 13732 id="StandardCardNoMediaLink--8358145917119" 13733 class="full-unstyled-link" 13734 aria-labelledby="StandardCardNoMediaLink--8358145917119 NoMediaStandardBadge--8358145917119" 13735 > 13736 ð¡ Core Recovery Pad⢠13737 </a> 13738 </h3> 13739 </div> 13740 <div class="card__badge bottom left"> 13741 13742 </div> 13743 </div> 13744 </div> 13745 <div class="card__content"> 13746 <div class="card__information"> 13747 <h3 13748 class="card__heading h5" 13749 13750 id="title--8358145917119" 13751 13752 > 13753 <a 13754 href="/products/biomimetic-core-recovery-pad" 13755 id="CardLink--8358145917119" 13756 class="full-unstyled-link" 13757 aria-labelledby="CardLink--8358145917119 Badge--8358145917119" 13758 > 13759 ð¡ Core Recovery Pad⢠13760 </a> 13761 </h3> 13762 13763 <div class="card-information"><span class="caption-large light"></span> 13764<div 13765 class=" 13766 price " 13767> 13768 <div class="price__container"><div class="price__regular">
13769 <span class="visually-hidden visually-hidden--inline">Regular price</span> 13770 <span class="price-item price-item--regular"> 13771 $54.95 13772 </span> 13773 </div> 13774 <div class="price__sale "> 13775 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 13776 <span class="price-item price-item--sale price-item--last"> 13777 $54.95 13778 </span> 13779 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 13780 <span class="price__compare-price"> 13781 <s class="price-item price-item--regular"> 13782 13783 </s> 13784 </span></div> 13785 <small class="unit-price caption hidden"> 13786 <span class="visually-hidden">Unit price</span> 13787 <span class="price-item price-item--last"> 13788 <span></span> 13789 <span aria-hidden="true">/</span> 13790 <span class="visually-hidden"> per </span> 13791 <span> 13792 </span> 13793 </span> 13794 </small> 13795 </div></div> 13796 13797 </div> 13798 </div> 13799 13800<div class="card__badge bottom left"></div> 13801 </div> 13802 </div> 13803 </div>
13803<script> 13804 (() => { 13805 if (window.cardProductQuickAddVariantFixLoaded) return; 13806 window.cardProductQuickAddVariantFixLoaded = true; 13807 13808 const ADD_TO_CART_TEXT = "Add to cart"; 13809 const SOLD_OUT_TEXT = "Sold out"; 13810 13811 function parseVariants(container) { 13812 if (!container) return []; 13813 13814 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 13815 13816 for (const script of scripts) { 13817 try { 13818 const data = JSON.parse(script.textContent.trim()); 13819 13820 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 13821 return data; 13822 } 13823 13824 if (data && Array.isArray(data.variants)) { 13825 return data.variants; 13826 } 13827 } catch (error) {} 13828 } 13829 13830 return []; 13831 } 13832 13833 function getSelectedOptionValues(container) { 13834 const values = []; 13835 13836 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 13837 const checkedInput = group.querySelector('input[type="radio"]:checked'); 13838 const select = group.querySelector('select'); 13839 13840 if (checkedInput) { 13841 values.push(checkedInput.value); 13842 } else if (select) { 13843 values.push(select.value); 13844 } 13845 }); 13846 13847 return values; 13848 } 13849 13850 function getCurrentVariant(container, form, variants) { 13851 const idInput = form && form.querySelector('[name="id"]'); 13852 const selectedId = idInput && idInput.value; 13853 13854 if (selectedId) { 13855 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 13856 if (byId) return byId; 13857 } 13858 13859 const selectedOptions = getSelectedOptionValues(container); 13860 13861 if (selectedOptions.length) { 13862 return variants.find((variant) => { 13863 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 13864 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 13865 }); 13866 } 13867 13868 return null; 13869 } 13870 13871 function setButtonState(form, variant) { 13872 if (!form) return; 13873 13874 const idInput = form.querySelector('[name="id"]'); 13875 const addButton = form.querySelector('[name="add"]'); 13876 const buttonLabel = 13877 addButton && 13878 (addButton.querySelector('.main-atc__label__text') || 13879 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 13880 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 13881 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 13882 13883 if (!addButton || !idInput || !variant) return; 13884 13885 idInput.value = variant.id; 13886 idInput.disabled = false; 13887 13888 if (spinner) spinner.classList.add('hidden'); 13889 13890 if (variant.available) { 13891 addButton.disabled = false; 13892 addButton.removeAttribute('disabled'); 13893 addButton.removeAttribute('aria-disabled'); 13894 addButton.classList.remove('loading'); 13895 13896 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 13897 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 13898 } else { 13899 addButton.disabled = true; 13900 addButton.setAttribute('disabled', 'disabled'); 13901 addButton.setAttribute('aria-disabled', 'true'); 13902 13903 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 13904 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 13905 } 13906 } 13907 13908 function syncContainer(container) { 13909 if (!container) return; 13910 13911 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 13912 if (!form) return; 13913 13914 const variants = parseVariants(container); 13915 if (!variants.length) return; 13916 13917 const variant = getCurrentVariant(container, form, variants); 13918 if (!variant) return; 13919 13920 setButtonState(form, variant); 13921 } 13922 13923 document.addEventListener('change', (event) => { 13924 const quickAddModal = event.target.closest('quick-add-modal'); 13925 const cardVariantSelects = event.target.closest('card-variant-selects'); 13926 13927 if (quickAddModal) { 13928 setTimeout(() => syncContainer(quickAddModal), 80); 13929 setTimeout(() => syncContainer(quickAddModal), 250); 13930 } 13931 13932 if (cardVariantSelects) { 13933 const card = cardVariantSelects.closest('.card-wrapper'); 13934 if (card) { 13935 setTimeout(() => syncContainer(card), 80); 13936 setTimeout(() => syncContainer(card), 250); 13937 } 13938 } 13939 }); 13940 13941 const observer = new MutationObserver((mutations) => { 13942 mutations.forEach((mutation) => {
13943 mutation.addedNodes.forEach((node) => { 13944 if (!(node instanceof HTMLElement)) return; 13945 13946 if (node.matches && node.matches('quick-add-modal')) { 13947 setTimeout(() => syncContainer(node), 150); 13948 } 13949 13950 node.querySelectorAll && 13951 node.querySelectorAll('quick-add-modal').forEach((modal) => { 13952 setTimeout(() => syncContainer(modal), 150); 13953 }); 13954 }); 13955 }); 13956 }); 13957 13958 observer.observe(document.documentElement, { 13959 childList: true, 13960 subtree: true 13961 }); 13962 13963 document.addEventListener('DOMContentLoaded', () => { 13964 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 13965 }); 13966 })(); 13967</script>
13967 13968 13969 13970 13971 13972 </li> 13973 13974 <li> 13975 13976<div class="card-wrapper product-card-wrapper underline-links-hover"> 13977 <div 13978 class=" 13979 card 13980 card--card 13981 card--media 13982 color-background-1 gradient 13983 13984 13985 13986 card--badge-sided 13987 13988 13989 " 13990 style="--ratio-percent: 100%;" 13991 > 13992 <div 13993 class="card__inner ratio" 13994 style="--ratio-percent: 100%;" 13995 ><div class="card__media"> 13996 <div class="media media--transparent media--hover-effect"> 13997 13998 <img 13999 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006 1080w 14000 " 14001 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533" 14002 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 14003 alt="ð¢ Peak Performance Pad⢠- Team Doctors" 14004 class="motion-reduce" 14005 14006 loading="lazy" 14007 14008 width="1080" 14009 height="1080" 14010 id='quick-add-8358149750975-image' 14011 > 14012 14013<img 14014 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529 1080w 14015 " 14016 src="//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=533" 14017 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 14018 alt="" 14019 class="motion-reduce" 14020 loading="lazy" 14021 width="1080" 14022 height="1080" 14023 ></div> 14024 </div><div class="card__content"> 14025 <div class="card__information"> 14026 <h3 14027 class="card__heading" 14028 14029 > 14030 <a 14031 href="/products/biomimetic-peak-performance-pad" 14032 id="StandardCardNoMediaLink--8358149750975" 14033 class="full-unstyled-link" 14034 aria-labelledby="StandardCardNoMediaLink--8358149750975 NoMediaStandardBadge--8358149750975" 14035 > 14036 ð¢ Peak Performance Pad⢠14037 </a> 14038 </h3> 14039 </div> 14040 <div class="card__badge bottom left"> 14041 14042 </div> 14043 </div> 14044 </div> 14045 <div class="card__content"> 14046 <div class="card__information"> 14047 <h3 14048 class="card__heading h5" 14049 14050 id="title--8358149750975" 14051 14052 > 14053 <a 14054 href="/products/biomimetic-peak-performance-pad" 14055 id="CardLink--8358149750975" 14056 class="full-unstyled-link" 14057 aria-labelledby="CardLink--8358149750975 Badge--8358149750975" 14058 > 14059 ð¢ Peak Performance Pad⢠14060 </a> 14061 </h3> 14062 14063 <div class="card-information"><span class="caption-large light"></span> 14064<div 14065 class=" 14066 price " 14067> 14068 <div class="price__container"><div class="price__regular">
14069 <span class="visually-hidden visually-hidden--inline">Regular price</span> 14070 <span class="price-item price-item--regular"> 14071 $54.95 14072 </span> 14073 </div> 14074 <div class="price__sale "> 14075 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 14076 <span class="price-item price-item--sale price-item--last"> 14077 $54.95 14078 </span> 14079 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 14080 <span class="price__compare-price"> 14081 <s class="price-item price-item--regular"> 14082 14083 </s> 14084 </span></div> 14085 <small class="unit-price caption hidden"> 14086 <span class="visually-hidden">Unit price</span> 14087 <span class="price-item price-item--last"> 14088 <span></span> 14089 <span aria-hidden="true">/</span> 14090 <span class="visually-hidden"> per </span> 14091 <span> 14092 </span> 14093 </span> 14094 </small> 14095 </div></div> 14096 14097 </div> 14098 </div> 14099 14100<div class="card__badge bottom left"></div> 14101 </div> 14102 </div> 14103 </div>
14103<script> 14104 (() => { 14105 if (window.cardProductQuickAddVariantFixLoaded) return; 14106 window.cardProductQuickAddVariantFixLoaded = true; 14107 14108 const ADD_TO_CART_TEXT = "Add to cart"; 14109 const SOLD_OUT_TEXT = "Sold out"; 14110 14111 function parseVariants(container) { 14112 if (!container) return []; 14113 14114 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 14115 14116 for (const script of scripts) { 14117 try { 14118 const data = JSON.parse(script.textContent.trim()); 14119 14120 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 14121 return data; 14122 } 14123 14124 if (data && Array.isArray(data.variants)) { 14125 return data.variants; 14126 } 14127 } catch (error) {} 14128 } 14129 14130 return []; 14131 } 14132 14133 function getSelectedOptionValues(container) { 14134 const values = []; 14135 14136 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 14137 const checkedInput = group.querySelector('input[type="radio"]:checked'); 14138 const select = group.querySelector('select'); 14139 14140 if (checkedInput) { 14141 values.push(checkedInput.value); 14142 } else if (select) { 14143 values.push(select.value); 14144 } 14145 }); 14146 14147 return values; 14148 } 14149 14150 function getCurrentVariant(container, form, variants) { 14151 const idInput = form && form.querySelector('[name="id"]'); 14152 const selectedId = idInput && idInput.value; 14153 14154 if (selectedId) { 14155 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 14156 if (byId) return byId; 14157 } 14158 14159 const selectedOptions = getSelectedOptionValues(container); 14160 14161 if (selectedOptions.length) { 14162 return variants.find((variant) => { 14163 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 14164 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 14165 }); 14166 } 14167 14168 return null; 14169 } 14170 14171 function setButtonState(form, variant) { 14172 if (!form) return; 14173 14174 const idInput = form.querySelector('[name="id"]'); 14175 const addButton = form.querySelector('[name="add"]'); 14176 const buttonLabel = 14177 addButton && 14178 (addButton.querySelector('.main-atc__label__text') || 14179 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 14180 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 14181 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 14182 14183 if (!addButton || !idInput || !variant) return; 14184 14185 idInput.value = variant.id; 14186 idInput.disabled = false; 14187 14188 if (spinner) spinner.classList.add('hidden'); 14189 14190 if (variant.available) { 14191 addButton.disabled = false; 14192 addButton.removeAttribute('disabled'); 14193 addButton.removeAttribute('aria-disabled'); 14194 addButton.classList.remove('loading'); 14195 14196 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 14197 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 14198 } else { 14199 addButton.disabled = true; 14200 addButton.setAttribute('disabled', 'disabled'); 14201 addButton.setAttribute('aria-disabled', 'true'); 14202 14203 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 14204 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 14205 } 14206 } 14207 14208 function syncContainer(container) { 14209 if (!container) return; 14210 14211 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 14212 if (!form) return; 14213 14214 const variants = parseVariants(container); 14215 if (!variants.length) return; 14216 14217 const variant = getCurrentVariant(container, form, variants); 14218 if (!variant) return; 14219 14220 setButtonState(form, variant); 14221 } 14222 14223 document.addEventListener('change', (event) => { 14224 const quickAddModal = event.target.closest('quick-add-modal'); 14225 const cardVariantSelects = event.target.closest('card-variant-selects'); 14226 14227 if (quickAddModal) { 14228 setTimeout(() => syncContainer(quickAddModal), 80); 14229 setTimeout(() => syncContainer(quickAddModal), 250); 14230 } 14231 14232 if (cardVariantSelects) { 14233 const card = cardVariantSelects.closest('.card-wrapper'); 14234 if (card) { 14235 setTimeout(() => syncContainer(card), 80); 14236 setTimeout(() => syncContainer(card), 250); 14237 } 14238 } 14239 }); 14240 14241 const observer = new MutationObserver((mutations) => { 14242 mutations.forEach((mutation) => {
14243 mutation.addedNodes.forEach((node) => { 14244 if (!(node instanceof HTMLElement)) return; 14245 14246 if (node.matches && node.matches('quick-add-modal')) { 14247 setTimeout(() => syncContainer(node), 150); 14248 } 14249 14250 node.querySelectorAll && 14251 node.querySelectorAll('quick-add-modal').forEach((modal) => { 14252 setTimeout(() => syncContainer(modal), 150); 14253 }); 14254 }); 14255 }); 14256 }); 14257 14258 observer.observe(document.documentElement, { 14259 childList: true, 14260 subtree: true 14261 }); 14262 14263 document.addEventListener('DOMContentLoaded', () => { 14264 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 14265 }); 14266 })(); 14267</script>
14267 14268 14269 14270 14271 14272 </li> 14273 14274 14275</ul> 14276 14277 </div> 14278 </details></li></ul> 14279 </div> 14280 </div> 14281 </details></li><li><details id="Details-menu-drawer-menu-item-3"> 14282 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset menu-drawer__menu-item--active"> 14283 Discover 14284 <svg 14285 viewBox="0 0 14 10" 14286 fill="none" 14287 aria-hidden="true" 14288 focusable="false" 14289 class="icon icon-arrow" 14290 xmlns="http://www.w3.org/2000/svg" 14291> 14292 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 14293</svg> 14294 14295 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 14296 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 14297</svg> 14298 14299 </summary> 14300 <div id="link-discover" class="menu-drawer__submenu has-submenu gradient motion-reduce" tabindex="-1"> 14301 <div class="menu-drawer__inner-submenu"> 14302 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 14303 <svg 14304 viewBox="0 0 14 10" 14305 fill="none" 14306 aria-hidden="true" 14307 focusable="false" 14308 class="icon icon-arrow" 14309 xmlns="http://www.w3.org/2000/svg" 14310> 14311 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11.793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill="currentColor"> 14312</svg> 14313 14314 Discover 14315 </button> 14316 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"><li><a href="/pages/about-us" class="menu-drawer__menu-item link link--text list-menu__item focus-inset menu-drawer__menu-item--active" aria-current="page"> 14317 Learn More 14318 </a></li><li><a href="/pages/vibeassage-video-tutorials" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 14319 Tutorials 14320 </a></li><li><a href="/pages/contact-us" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 14321 Contact Us 14322 </a></li></ul> 14323 </div> 14324 </div> 14325 </details></li><li><a href="/pages/contact-us" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 14326 Contact Us 14327 </a></li></ul> 14328 </nav> 14329<!-- start secondary nav --> 14330 14331<!-- end secondary nav --> 14332 <div class="menu-drawer__utility-links"><a href="https://teamdoctors.com/customer_authentication/redirect?locale=en®ion_country=US" class="menu-drawer__account link focus-inset h5"> 14333 <svg 14334 xmlns="http://www.w3.org/2000/svg" 14335 aria-hidden="true" 14336 focusable="false" 14337 class="icon icon-account" 14338 fill="none" 14339 viewBox="0 0 18 19" 14340> 14341 <path fill-rule="evenodd" clip-rule="evenodd" d="M6 4.5a3 3 0 116 0 3 3 0 01-6 0zm3-4a4 4 0 100 8 4 4 0 000-8zm5.58 12.15c1.12.82 1.83 2.24 1.91 4.85H1.51c.08-2.6.79-4.03 1.9-4.85C4.66 11.75 6.5 11.5 9 11.5s4.35.26 5.58 1.15zM9 10.5c-2.5 0-4.65.24-6.17 1.35C1.27 12.98.5 14.93.5 18v.5h17V18c0-3.07-.77-5.02-2.33-6.15-1.52-1.1-3.67-1.35-6.17-1.35z" fill="currentColor"> 14342</svg> 14343 14344Log in</a><ul class="list list-social list-unstyled" role="list"></ul> 14345 </div> 14346 </div> 14347 </div> 14348 </div> 14349 </details> 14350</header-drawer> 14351 14352 <nav class="header__inline-menu"> 14353 <ul class="list-menu list-menu--inline" role="list"><li><a href="/" class="header__menu-item header__menu-item--main list-menu__item link link--text focus-inset">
14354 <span>Home</span> 14355 </a></li><li> 14356 <products-mega-menu> 14357 <details id="ProductsMegaMenu-"> 14358 <summary class="menu-shop header__menu-item header__menu-item--main list-menu__item link focus-inset products-mega-menu"> 14359 <span 14360 >Shop</span> 14361 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 14362 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 14363</svg> 14364 14365 </summary> 14366 <div class="products-mega-menu__body color-background-1"> 14367 <div class="products-mega-menu__overlay"> </div> 14368 <div class="page-width"> 14369 <div class="products-mega-menu__container"> 14370 <ul 14371 id="ProductsMegaMenu-List-" 14372 class="products-mega-menu__list" 14373 role="list" 14374 tabindex="-1" 14375 ><li 14376 id="ProductsMegaMenu-Item-shop-1" 14377 class="products-mega-menu__item products-mega-menu__item--active" 14378 > 14379 <a 14380 id="ProductsMegaMenu-Link-shop-1" 14381 href="/collections/doctor-recommended" 14382 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 14383 14384 > 14385 14386 <span>Doctor Recommended</span> 14387 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 14388 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 14389</svg> 14390 14391 </a> 14392 14393 <div class="products-mega-menu__content"> 14394 <ul class="products-mega-menu__cards"> 14395 14396 14397 14398 14399 <li> 14400 14401<div class="card-wrapper product-card-wrapper underline-links-hover"> 14402 <div 14403 class=" 14404 card 14405 card--card 14406 card--media 14407 color-background-1 gradient 14408 14409 14410 14411 card--badge-sided 14412 14413 14414 " 14415 style="--ratio-percent: 100%;" 14416 > 14417 <div 14418 class="card__inner ratio" 14419 style="--ratio-percent: 100%;" 14420 ><div class="card__media"> 14421 <div class="media media--transparent media--hover-effect"> 14422 14423 <img 14424 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523 1254w 14425 " 14426 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=533" 14427 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 14428 alt="Complete Recovery Solution Bundle - Team Doctors" 14429 class="motion-reduce" 14430 14431 loading="lazy" 14432 14433 width="1254" 14434 height="1254" 14435 id='quick-add-8455539065023-image' 14436 > 14437 14438<img 14439 srcset="//teamdoctors.com/cdn/shop/files/preview_images/b45585c208f5471097460280d2b7e84e.thumbnail.0000000000.jpg?v=1780910014 w 14440 "
14441 src="//teamdoctors.com/cdn/shop/files/preview_images/b45585c208f5471097460280d2b7e84e.thumbnail.0000000000.jpg?v=1780910014&width=533" 14442 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 14443 alt="" 14444 class="motion-reduce" 14445 loading="lazy" 14446 width="" 14447 height="" 14448 ></div> 14449 </div><div class="card__content"> 14450 <div class="card__information"> 14451 <h3 14452 class="card__heading" 14453 14454 > 14455 <a 14456 href="/products/complete-recovery-solution-bundle" 14457 id="StandardCardNoMediaLink--8455539065023" 14458 class="full-unstyled-link" 14459 aria-labelledby="StandardCardNoMediaLink--8455539065023 NoMediaStandardBadge--8455539065023" 14460 > 14461 Complete Biomimetic Recovery System⢠14462 </a> 14463 </h3> 14464 </div> 14465 <div class="card__badge bottom left"> 14466 14467 14468 <span 14469 id="NoMediaStandardBadge--8455539065023" 14470 class="badge badge--bottom-left color-accent-2" 14471 > 14472 <svg 14473 aria-hidden="true" 14474 focusable="false" 14475 class="icon icon-discount color-foreground-text" 14476 viewBox="0 0 12 12" 14477> 14478 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 14479</svg> 14480<span class='nowrap'>SAVE 10%</span> 14481 </span></div> 14482 </div> 14483 </div> 14484 <div class="card__content"> 14485 <div class="card__information"> 14486 <h3 14487 class="card__heading h5" 14488 14489 id="title--8455539065023" 14490 14491 > 14492 <a 14493 href="/products/complete-recovery-solution-bundle" 14494 id="CardLink--8455539065023" 14495 class="full-unstyled-link" 14496 aria-labelledby="CardLink--8455539065023 Badge--8455539065023" 14497 > 14498 Complete Biomimetic Recovery System⢠14499 </a> 14500 </h3> 14501 14502 <div class="product-subtitle"> 14503 The Vibeassage Pro® + The Vibeassage Sport® 14504 </div> 14505 14506 <div class="card-information"><span class="caption-large light"></span> 14507<div 14508 class=" 14509 price price--on-sale " 14510> 14511 <div class="price__container"><div class="price__regular"> 14512 <span class="visually-hidden visually-hidden--inline">Regular price</span> 14513 <span class="price-item price-item--regular"> 14514 $1,807.00 14515 </span> 14516 </div> 14517 <div class="price__sale "> 14518 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 14519 <span class="price-item price-item--sale price-item--last"> 14520 $1,807.00 14521 </span> 14522 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 14523 <span class="price__compare-price"> 14524 <s class="price-item price-item--regular"> 14525 $2,008.00 14526 </s> 14527 </span></div> 14528 <small class="unit-price caption hidden"> 14529 <span class="visually-hidden">Unit price</span> 14530 <span class="price-item price-item--last"> 14531 <span></span> 14532 <span aria-hidden="true">/</span> 14533 <span class="visually-hidden"> per </span> 14534 <span> 14535 </span> 14536 </span> 14537 </small> 14538 </div></div> 14539 14540 </div> 14541 </div> 14542 14543<div class="card__badge bottom left"><span 14544 id="Badge--8455539065023" 14545 class="badge badge--bottom-left color-accent-2" 14546 > 14547 10% 14548 </span></div> 14549 </div> 14550 </div> 14551 </div>
14551<script> 14552 (() => { 14553 if (window.cardProductQuickAddVariantFixLoaded) return; 14554 window.cardProductQuickAddVariantFixLoaded = true; 14555 14556 const ADD_TO_CART_TEXT = "Add to cart"; 14557 const SOLD_OUT_TEXT = "Sold out"; 14558 14559 function parseVariants(container) { 14560 if (!container) return []; 14561 14562 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 14563 14564 for (const script of scripts) { 14565 try { 14566 const data = JSON.parse(script.textContent.trim()); 14567 14568 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 14569 return data; 14570 } 14571 14572 if (data && Array.isArray(data.variants)) { 14573 return data.variants; 14574 } 14575 } catch (error) {} 14576 } 14577 14578 return []; 14579 } 14580 14581 function getSelectedOptionValues(container) { 14582 const values = []; 14583 14584 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 14585 const checkedInput = group.querySelector('input[type="radio"]:checked'); 14586 const select = group.querySelector('select'); 14587 14588 if (checkedInput) { 14589 values.push(checkedInput.value); 14590 } else if (select) { 14591 values.push(select.value); 14592 } 14593 }); 14594 14595 return values; 14596 } 14597 14598 function getCurrentVariant(container, form, variants) { 14599 const idInput = form && form.querySelector('[name="id"]'); 14600 const selectedId = idInput && idInput.value; 14601 14602 if (selectedId) { 14603 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 14604 if (byId) return byId; 14605 } 14606 14607 const selectedOptions = getSelectedOptionValues(container); 14608 14609 if (selectedOptions.length) { 14610 return variants.find((variant) => { 14611 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 14612 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 14613 }); 14614 } 14615 14616 return null; 14617 } 14618 14619 function setButtonState(form, variant) { 14620 if (!form) return; 14621 14622 const idInput = form.querySelector('[name="id"]'); 14623 const addButton = form.querySelector('[name="add"]'); 14624 const buttonLabel = 14625 addButton && 14626 (addButton.querySelector('.main-atc__label__text') || 14627 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 14628 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 14629 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 14630 14631 if (!addButton || !idInput || !variant) return; 14632 14633 idInput.value = variant.id; 14634 idInput.disabled = false; 14635 14636 if (spinner) spinner.classList.add('hidden'); 14637 14638 if (variant.available) { 14639 addButton.disabled = false; 14640 addButton.removeAttribute('disabled'); 14641 addButton.removeAttribute('aria-disabled'); 14642 addButton.classList.remove('loading'); 14643 14644 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 14645 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 14646 } else { 14647 addButton.disabled = true; 14648 addButton.setAttribute('disabled', 'disabled'); 14649 addButton.setAttribute('aria-disabled', 'true'); 14650 14651 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 14652 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 14653 } 14654 } 14655 14656 function syncContainer(container) { 14657 if (!container) return; 14658 14659 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 14660 if (!form) return; 14661 14662 const variants = parseVariants(container); 14663 if (!variants.length) return; 14664 14665 const variant = getCurrentVariant(container, form, variants); 14666 if (!variant) return; 14667 14668 setButtonState(form, variant); 14669 } 14670 14671 document.addEventListener('change', (event) => { 14672 const quickAddModal = event.target.closest('quick-add-modal'); 14673 const cardVariantSelects = event.target.closest('card-variant-selects'); 14674 14675 if (quickAddModal) { 14676 setTimeout(() => syncContainer(quickAddModal), 80); 14677 setTimeout(() => syncContainer(quickAddModal), 250); 14678 } 14679 14680 if (cardVariantSelects) { 14681 const card = cardVariantSelects.closest('.card-wrapper'); 14682 if (card) { 14683 setTimeout(() => syncContainer(card), 80); 14684 setTimeout(() => syncContainer(card), 250); 14685 } 14686 } 14687 }); 14688 14689 const observer = new MutationObserver((mutations) => { 14690 mutations.forEach((mutation) => {
14691 mutation.addedNodes.forEach((node) => { 14692 if (!(node instanceof HTMLElement)) return; 14693 14694 if (node.matches && node.matches('quick-add-modal')) { 14695 setTimeout(() => syncContainer(node), 150); 14696 } 14697 14698 node.querySelectorAll && 14699 node.querySelectorAll('quick-add-modal').forEach((modal) => { 14700 setTimeout(() => syncContainer(modal), 150); 14701 }); 14702 }); 14703 }); 14704 }); 14705 14706 observer.observe(document.documentElement, { 14707 childList: true, 14708 subtree: true 14709 }); 14710 14711 document.addEventListener('DOMContentLoaded', () => { 14712 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 14713 }); 14714 })(); 14715</script>
14715 14716 14717 14718 14719 14720 </li> 14721 14722 <li> 14723 14724<div class="card-wrapper product-card-wrapper underline-links-hover"> 14725 <div 14726 class=" 14727 card 14728 card--card 14729 card--media 14730 color-background-1 gradient 14731 14732 14733 14734 card--badge-sided 14735 14736 14737 " 14738 style="--ratio-percent: 100%;" 14739 > 14740 <div 14741 class="card__inner ratio" 14742 style="--ratio-percent: 100%;" 14743 ><div class="card__media"> 14744 <div class="media media--transparent media--hover-effect"> 14745 14746 <img 14747 srcset="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914 w 14748 " 14749 src="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914&width=533" 14750 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 14751 alt="The Vibeassage Pro® with the full 3-pad Biomimetic Systemâ¢" 14752 class="motion-reduce" 14753 14754 loading="lazy" 14755 14756 width="" 14757 height="" 14758 id='quick-add-7253705130175-image' 14759 > 14760 14761<img 14762 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339 810w 14763 " 14764 src="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533" 14765 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 14766 alt="" 14767 class="motion-reduce" 14768 loading="lazy" 14769 width="810" 14770 height="605" 14771 ></div> 14772 </div><div class="card__content"> 14773 <div class="card__information"> 14774 <h3 14775 class="card__heading" 14776 14777 > 14778 <a 14779 href="/products/vibeassage-pro" 14780 id="StandardCardNoMediaLink--7253705130175" 14781 class="full-unstyled-link" 14782 aria-labelledby="StandardCardNoMediaLink--7253705130175 NoMediaStandardBadge--7253705130175" 14783 > 14784 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠14785 </a> 14786 </h3> 14787 </div> 14788 <div class="card__badge bottom left"> 14789 14790 14791 <span 14792 id="NoMediaStandardBadge--7253705130175" 14793 class="badge badge--bottom-left color-accent-2" 14794 > 14795 <svg 14796 aria-hidden="true" 14797 focusable="false" 14798 class="icon icon-discount color-foreground-text" 14799 viewBox="0 0 12 12" 14800> 14801 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 14802</svg> 14803<span class='nowrap'>SAVE 9%</span> 14804 </span></div> 14805 </div> 14806 </div> 14807 <div class="card__content"> 14808 <div class="card__information"> 14809 <h3 14810 class="card__heading h5" 14811 14812 id="title--7253705130175" 14813 14814 > 14815 <a 14816 href="/products/vibeassage-pro" 14817 id="CardLink--7253705130175" 14818 class="full-unstyled-link" 14819 aria-labelledby="CardLink--7253705130175 Badge--7253705130175" 14820 > 14821 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠14822 </a> 14823 </h3> 14824 14825 <div class="card-information"><span class="caption-large light"></span> 14826<div 14827 class=" 14828 price price--on-sale " 14829> 14830 <div class="price__container"><div class="price__regular">
14831 <span class="visually-hidden visually-hidden--inline">Regular price</span> 14832 <span class="price-item price-item--regular"> 14833 $1,579.00 14834 </span> 14835 </div> 14836 <div class="price__sale "> 14837 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 14838 <span class="price-item price-item--sale price-item--last"> 14839 $1,579.00 14840 </span> 14841 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 14842 <span class="price__compare-price"> 14843 <s class="price-item price-item--regular"> 14844 $1,749.00 14845 </s> 14846 </span></div> 14847 <small class="unit-price caption hidden"> 14848 <span class="visually-hidden">Unit price</span> 14849 <span class="price-item price-item--last"> 14850 <span></span> 14851 <span aria-hidden="true">/</span> 14852 <span class="visually-hidden"> per </span> 14853 <span> 14854 </span> 14855 </span> 14856 </small> 14857 </div></div> 14858 14859 </div> 14860 </div> 14861 14862<div class="card__badge bottom left"><span 14863 id="Badge--7253705130175" 14864 class="badge badge--bottom-left color-accent-2" 14865 > 14866 9% 14867 </span></div> 14868 </div> 14869 </div> 14870 </div>
14870<script> 14871 (() => { 14872 if (window.cardProductQuickAddVariantFixLoaded) return; 14873 window.cardProductQuickAddVariantFixLoaded = true; 14874 14875 const ADD_TO_CART_TEXT = "Add to cart"; 14876 const SOLD_OUT_TEXT = "Sold out"; 14877 14878 function parseVariants(container) { 14879 if (!container) return []; 14880 14881 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 14882 14883 for (const script of scripts) { 14884 try { 14885 const data = JSON.parse(script.textContent.trim()); 14886 14887 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 14888 return data; 14889 } 14890 14891 if (data && Array.isArray(data.variants)) { 14892 return data.variants; 14893 } 14894 } catch (error) {} 14895 } 14896 14897 return []; 14898 } 14899 14900 function getSelectedOptionValues(container) { 14901 const values = []; 14902 14903 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 14904 const checkedInput = group.querySelector('input[type="radio"]:checked'); 14905 const select = group.querySelector('select'); 14906 14907 if (checkedInput) { 14908 values.push(checkedInput.value); 14909 } else if (select) { 14910 values.push(select.value); 14911 } 14912 }); 14913 14914 return values; 14915 } 14916 14917 function getCurrentVariant(container, form, variants) { 14918 const idInput = form && form.querySelector('[name="id"]'); 14919 const selectedId = idInput && idInput.value; 14920 14921 if (selectedId) { 14922 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 14923 if (byId) return byId; 14924 } 14925 14926 const selectedOptions = getSelectedOptionValues(container); 14927 14928 if (selectedOptions.length) { 14929 return variants.find((variant) => { 14930 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 14931 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 14932 }); 14933 } 14934 14935 return null; 14936 } 14937 14938 function setButtonState(form, variant) { 14939 if (!form) return; 14940 14941 const idInput = form.querySelector('[name="id"]'); 14942 const addButton = form.querySelector('[name="add"]'); 14943 const buttonLabel = 14944 addButton && 14945 (addButton.querySelector('.main-atc__label__text') || 14946 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 14947 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 14948 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 14949 14950 if (!addButton || !idInput || !variant) return; 14951 14952 idInput.value = variant.id; 14953 idInput.disabled = false; 14954 14955 if (spinner) spinner.classList.add('hidden'); 14956 14957 if (variant.available) { 14958 addButton.disabled = false; 14959 addButton.removeAttribute('disabled'); 14960 addButton.removeAttribute('aria-disabled'); 14961 addButton.classList.remove('loading'); 14962 14963 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 14964 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 14965 } else { 14966 addButton.disabled = true; 14967 addButton.setAttribute('disabled', 'disabled'); 14968 addButton.setAttribute('aria-disabled', 'true'); 14969 14970 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 14971 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 14972 } 14973 } 14974 14975 function syncContainer(container) { 14976 if (!container) return; 14977 14978 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 14979 if (!form) return; 14980 14981 const variants = parseVariants(container); 14982 if (!variants.length) return; 14983 14984 const variant = getCurrentVariant(container, form, variants); 14985 if (!variant) return; 14986 14987 setButtonState(form, variant); 14988 } 14989 14990 document.addEventListener('change', (event) => { 14991 const quickAddModal = event.target.closest('quick-add-modal'); 14992 const cardVariantSelects = event.target.closest('card-variant-selects'); 14993 14994 if (quickAddModal) { 14995 setTimeout(() => syncContainer(quickAddModal), 80); 14996 setTimeout(() => syncContainer(quickAddModal), 250); 14997 } 14998 14999 if (cardVariantSelects) { 15000 const card = cardVariantSelects.closest('.card-wrapper'); 15001 if (card) { 15002 setTimeout(() => syncContainer(card), 80); 15003 setTimeout(() => syncContainer(card), 250); 15004 } 15005 } 15006 }); 15007 15008 const observer = new MutationObserver((mutations) => { 15009 mutations.forEach((mutation) => {
15010 mutation.addedNodes.forEach((node) => { 15011 if (!(node instanceof HTMLElement)) return; 15012 15013 if (node.matches && node.matches('quick-add-modal')) { 15014 setTimeout(() => syncContainer(node), 150); 15015 } 15016 15017 node.querySelectorAll && 15018 node.querySelectorAll('quick-add-modal').forEach((modal) => { 15019 setTimeout(() => syncContainer(modal), 150); 15020 }); 15021 }); 15022 }); 15023 }); 15024 15025 observer.observe(document.documentElement, { 15026 childList: true, 15027 subtree: true 15028 }); 15029 15030 document.addEventListener('DOMContentLoaded', () => { 15031 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 15032 }); 15033 })(); 15034</script>
15034 15035 15036 15037 15038 15039 </li> 15040 15041 <li> 15042 15043<div class="card-wrapper product-card-wrapper underline-links-hover"> 15044 <div 15045 class=" 15046 card 15047 card--card 15048 card--media 15049 color-background-1 gradient 15050 15051 15052 15053 card--badge-sided 15054 15055 15056 " 15057 style="--ratio-percent: 100%;" 15058 > 15059 <div 15060 class="card__inner ratio" 15061 style="--ratio-percent: 100%;" 15062 ><div class="card__media"> 15063 <div class="media media--transparent media--hover-effect"> 15064 15065 <img 15066 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068 1254w 15067 " 15068 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=533" 15069 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 15070 alt="White" 15071 class="motion-reduce" 15072 15073 loading="lazy" 15074 15075 width="1254" 15076 height="1254" 15077 id='quick-add-8342973219007-image' 15078 > 15079 15080<img 15081 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847 1080w 15082 " 15083 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=533" 15084 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 15085 alt="" 15086 class="motion-reduce" 15087 loading="lazy" 15088 width="1080" 15089 height="1080" 15090 ></div> 15091 </div><div class="card__content"> 15092 <div class="card__information"> 15093 <h3 15094 class="card__heading" 15095 15096 > 15097 <a 15098 href="/products/vibeassage-complete-system" 15099 id="StandardCardNoMediaLink--8342973219007" 15100 class="full-unstyled-link" 15101 aria-labelledby="StandardCardNoMediaLink--8342973219007 NoMediaStandardBadge--8342973219007" 15102 > 15103 â Vibeassage⢠Sport with 3 Biomimetic Pads - The Complete System 15104 </a> 15105 </h3> 15106 </div> 15107 <div class="card__badge bottom left"> 15108 15109 </div> 15110 </div> 15111 </div> 15112 <div class="card__content"> 15113 <div class="card__information"> 15114 <h3 15115 class="card__heading h5" 15116 15117 id="title--8342973219007" 15118 15119 > 15120 <a 15121 href="/products/vibeassage-complete-system" 15122 id="CardLink--8342973219007" 15123 class="full-unstyled-link" 15124 aria-labelledby="CardLink--8342973219007 Badge--8342973219007" 15125 > 15126 â Vibeassage⢠Sport with 3 Biomimetic Pads - The Complete System 15127 </a> 15128 </h3> 15129 15130 <div class="card-information"><span class="caption-large light"></span> 15131<div 15132 class=" 15133 price " 15134> 15135 <div class="price__container"><div class="price__regular">
15136 <span class="visually-hidden visually-hidden--inline">Regular price</span> 15137 <span class="price-item price-item--regular"> 15138 From $429.00 15139 </span> 15140 </div> 15141 <div class="price__sale "> 15142 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 15143 <span class="price-item price-item--sale price-item--last"> 15144 From $429.00 15145 </span> 15146 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 15147 <span class="price__compare-price"> 15148 <s class="price-item price-item--regular"> 15149 15150 </s> 15151 </span></div> 15152 <small class="unit-price caption hidden"> 15153 <span class="visually-hidden">Unit price</span> 15154 <span class="price-item price-item--last"> 15155 <span></span> 15156 <span aria-hidden="true">/</span> 15157 <span class="visually-hidden"> per </span> 15158 <span> 15159 </span> 15160 </span> 15161 </small> 15162 </div></div> 15163 15164 </div> 15165 </div> 15166 15167<div class="card__badge bottom left"></div> 15168 </div> 15169 </div> 15170 </div>
15170<script> 15171 (() => { 15172 if (window.cardProductQuickAddVariantFixLoaded) return; 15173 window.cardProductQuickAddVariantFixLoaded = true; 15174 15175 const ADD_TO_CART_TEXT = "Add to cart"; 15176 const SOLD_OUT_TEXT = "Sold out"; 15177 15178 function parseVariants(container) { 15179 if (!container) return []; 15180 15181 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 15182 15183 for (const script of scripts) { 15184 try { 15185 const data = JSON.parse(script.textContent.trim()); 15186 15187 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 15188 return data; 15189 } 15190 15191 if (data && Array.isArray(data.variants)) { 15192 return data.variants; 15193 } 15194 } catch (error) {} 15195 } 15196 15197 return []; 15198 } 15199 15200 function getSelectedOptionValues(container) { 15201 const values = []; 15202 15203 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 15204 const checkedInput = group.querySelector('input[type="radio"]:checked'); 15205 const select = group.querySelector('select'); 15206 15207 if (checkedInput) { 15208 values.push(checkedInput.value); 15209 } else if (select) { 15210 values.push(select.value); 15211 } 15212 }); 15213 15214 return values; 15215 } 15216 15217 function getCurrentVariant(container, form, variants) { 15218 const idInput = form && form.querySelector('[name="id"]'); 15219 const selectedId = idInput && idInput.value; 15220 15221 if (selectedId) { 15222 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 15223 if (byId) return byId; 15224 } 15225 15226 const selectedOptions = getSelectedOptionValues(container); 15227 15228 if (selectedOptions.length) { 15229 return variants.find((variant) => { 15230 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 15231 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 15232 }); 15233 } 15234 15235 return null; 15236 } 15237 15238 function setButtonState(form, variant) { 15239 if (!form) return; 15240 15241 const idInput = form.querySelector('[name="id"]'); 15242 const addButton = form.querySelector('[name="add"]'); 15243 const buttonLabel = 15244 addButton && 15245 (addButton.querySelector('.main-atc__label__text') || 15246 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 15247 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 15248 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 15249 15250 if (!addButton || !idInput || !variant) return; 15251 15252 idInput.value = variant.id; 15253 idInput.disabled = false; 15254 15255 if (spinner) spinner.classList.add('hidden'); 15256 15257 if (variant.available) { 15258 addButton.disabled = false; 15259 addButton.removeAttribute('disabled'); 15260 addButton.removeAttribute('aria-disabled'); 15261 addButton.classList.remove('loading'); 15262 15263 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 15264 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 15265 } else { 15266 addButton.disabled = true; 15267 addButton.setAttribute('disabled', 'disabled'); 15268 addButton.setAttribute('aria-disabled', 'true'); 15269 15270 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 15271 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 15272 } 15273 } 15274 15275 function syncContainer(container) { 15276 if (!container) return; 15277 15278 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 15279 if (!form) return; 15280 15281 const variants = parseVariants(container); 15282 if (!variants.length) return; 15283 15284 const variant = getCurrentVariant(container, form, variants); 15285 if (!variant) return; 15286 15287 setButtonState(form, variant); 15288 } 15289 15290 document.addEventListener('change', (event) => { 15291 const quickAddModal = event.target.closest('quick-add-modal'); 15292 const cardVariantSelects = event.target.closest('card-variant-selects'); 15293 15294 if (quickAddModal) { 15295 setTimeout(() => syncContainer(quickAddModal), 80); 15296 setTimeout(() => syncContainer(quickAddModal), 250); 15297 } 15298 15299 if (cardVariantSelects) { 15300 const card = cardVariantSelects.closest('.card-wrapper'); 15301 if (card) { 15302 setTimeout(() => syncContainer(card), 80); 15303 setTimeout(() => syncContainer(card), 250); 15304 } 15305 } 15306 }); 15307 15308 const observer = new MutationObserver((mutations) => { 15309 mutations.forEach((mutation) => {
15310 mutation.addedNodes.forEach((node) => { 15311 if (!(node instanceof HTMLElement)) return; 15312 15313 if (node.matches && node.matches('quick-add-modal')) { 15314 setTimeout(() => syncContainer(node), 150); 15315 } 15316 15317 node.querySelectorAll && 15318 node.querySelectorAll('quick-add-modal').forEach((modal) => { 15319 setTimeout(() => syncContainer(modal), 150); 15320 }); 15321 }); 15322 }); 15323 }); 15324 15325 observer.observe(document.documentElement, { 15326 childList: true, 15327 subtree: true 15328 }); 15329 15330 document.addEventListener('DOMContentLoaded', () => { 15331 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 15332 }); 15333 })(); 15334</script>
15334 15335 15336 15337 15338 15339 </li> 15340 15341 <li> 15342 15343<div class="card-wrapper product-card-wrapper underline-links-hover"> 15344 <div 15345 class=" 15346 card 15347 card--card 15348 card--media 15349 color-background-1 gradient 15350 15351 15352 15353 card--badge-sided 15354 15355 15356 " 15357 style="--ratio-percent: 100%;" 15358 > 15359 <div 15360 class="card__inner ratio" 15361 style="--ratio-percent: 100%;" 15362 ><div class="card__media"> 15363 <div class="media media--transparent media--hover-effect"> 15364 15365 <img 15366 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068 1254w 15367 " 15368 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=533" 15369 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 15370 alt="White" 15371 class="motion-reduce" 15372 15373 loading="lazy" 15374 15375 width="1254" 15376 height="1254" 15377 id='quick-add-8342972334271-image' 15378 > 15379 15380<img 15381 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068 1254w 15382 " 15383 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=533" 15384 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 15385 alt="" 15386 class="motion-reduce" 15387 loading="lazy" 15388 width="1254" 15389 height="1254" 15390 ></div> 15391 </div><div class="card__content"> 15392 <div class="card__information"> 15393 <h3 15394 class="card__heading" 15395 15396 > 15397 <a 15398 href="/products/vibeassage-relief-bundle" 15399 id="StandardCardNoMediaLink--8342972334271" 15400 class="full-unstyled-link" 15401 aria-labelledby="StandardCardNoMediaLink--8342972334271 NoMediaStandardBadge--8342972334271" 15402 > 15403 Vibeassage® Relief Bundle 15404 </a> 15405 </h3> 15406 </div> 15407 <div class="card__badge bottom left"> 15408 15409 </div> 15410 </div> 15411 </div> 15412 <div class="card__content"> 15413 <div class="card__information"> 15414 <h3 15415 class="card__heading h5" 15416 15417 id="title--8342972334271" 15418 15419 > 15420 <a 15421 href="/products/vibeassage-relief-bundle" 15422 id="CardLink--8342972334271" 15423 class="full-unstyled-link" 15424 aria-labelledby="CardLink--8342972334271 Badge--8342972334271" 15425 > 15426 Vibeassage® Relief Bundle 15427 </a> 15428 </h3> 15429 15430 <div class="card-information"><span class="caption-large light"></span> 15431<div 15432 class=" 15433 price " 15434> 15435 <div class="price__container"><div class="price__regular">
15436 <span class="visually-hidden visually-hidden--inline">Regular price</span> 15437 <span class="price-item price-item--regular"> 15438 From $389.00 15439 </span> 15440 </div> 15441 <div class="price__sale "> 15442 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 15443 <span class="price-item price-item--sale price-item--last"> 15444 From $389.00 15445 </span> 15446 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 15447 <span class="price__compare-price"> 15448 <s class="price-item price-item--regular"> 15449 15450 </s> 15451 </span></div> 15452 <small class="unit-price caption hidden"> 15453 <span class="visually-hidden">Unit price</span> 15454 <span class="price-item price-item--last"> 15455 <span></span> 15456 <span aria-hidden="true">/</span> 15457 <span class="visually-hidden"> per </span> 15458 <span> 15459 </span> 15460 </span> 15461 </small> 15462 </div></div> 15463 15464 </div> 15465 </div> 15466 15467<div class="card__badge bottom left"></div> 15468 </div> 15469 </div> 15470 </div>
15470<script> 15471 (() => { 15472 if (window.cardProductQuickAddVariantFixLoaded) return; 15473 window.cardProductQuickAddVariantFixLoaded = true; 15474 15475 const ADD_TO_CART_TEXT = "Add to cart"; 15476 const SOLD_OUT_TEXT = "Sold out"; 15477 15478 function parseVariants(container) { 15479 if (!container) return []; 15480 15481 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 15482 15483 for (const script of scripts) { 15484 try { 15485 const data = JSON.parse(script.textContent.trim()); 15486 15487 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 15488 return data; 15489 } 15490 15491 if (data && Array.isArray(data.variants)) { 15492 return data.variants; 15493 } 15494 } catch (error) {} 15495 } 15496 15497 return []; 15498 } 15499 15500 function getSelectedOptionValues(container) { 15501 const values = []; 15502 15503 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 15504 const checkedInput = group.querySelector('input[type="radio"]:checked'); 15505 const select = group.querySelector('select'); 15506 15507 if (checkedInput) { 15508 values.push(checkedInput.value); 15509 } else if (select) { 15510 values.push(select.value); 15511 } 15512 }); 15513 15514 return values; 15515 } 15516 15517 function getCurrentVariant(container, form, variants) { 15518 const idInput = form && form.querySelector('[name="id"]'); 15519 const selectedId = idInput && idInput.value; 15520 15521 if (selectedId) { 15522 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 15523 if (byId) return byId; 15524 } 15525 15526 const selectedOptions = getSelectedOptionValues(container); 15527 15528 if (selectedOptions.length) { 15529 return variants.find((variant) => { 15530 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 15531 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 15532 }); 15533 } 15534 15535 return null; 15536 } 15537 15538 function setButtonState(form, variant) { 15539 if (!form) return; 15540 15541 const idInput = form.querySelector('[name="id"]'); 15542 const addButton = form.querySelector('[name="add"]'); 15543 const buttonLabel = 15544 addButton && 15545 (addButton.querySelector('.main-atc__label__text') || 15546 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 15547 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 15548 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 15549 15550 if (!addButton || !idInput || !variant) return; 15551 15552 idInput.value = variant.id; 15553 idInput.disabled = false; 15554 15555 if (spinner) spinner.classList.add('hidden'); 15556 15557 if (variant.available) { 15558 addButton.disabled = false; 15559 addButton.removeAttribute('disabled'); 15560 addButton.removeAttribute('aria-disabled'); 15561 addButton.classList.remove('loading'); 15562 15563 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 15564 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 15565 } else { 15566 addButton.disabled = true; 15567 addButton.setAttribute('disabled', 'disabled'); 15568 addButton.setAttribute('aria-disabled', 'true'); 15569 15570 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 15571 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 15572 } 15573 } 15574 15575 function syncContainer(container) { 15576 if (!container) return; 15577 15578 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 15579 if (!form) return; 15580 15581 const variants = parseVariants(container); 15582 if (!variants.length) return; 15583 15584 const variant = getCurrentVariant(container, form, variants); 15585 if (!variant) return; 15586 15587 setButtonState(form, variant); 15588 } 15589 15590 document.addEventListener('change', (event) => { 15591 const quickAddModal = event.target.closest('quick-add-modal'); 15592 const cardVariantSelects = event.target.closest('card-variant-selects'); 15593 15594 if (quickAddModal) { 15595 setTimeout(() => syncContainer(quickAddModal), 80); 15596 setTimeout(() => syncContainer(quickAddModal), 250); 15597 } 15598 15599 if (cardVariantSelects) { 15600 const card = cardVariantSelects.closest('.card-wrapper'); 15601 if (card) { 15602 setTimeout(() => syncContainer(card), 80); 15603 setTimeout(() => syncContainer(card), 250); 15604 } 15605 } 15606 }); 15607 15608 const observer = new MutationObserver((mutations) => { 15609 mutations.forEach((mutation) => {
15610 mutation.addedNodes.forEach((node) => { 15611 if (!(node instanceof HTMLElement)) return; 15612 15613 if (node.matches && node.matches('quick-add-modal')) { 15614 setTimeout(() => syncContainer(node), 150); 15615 } 15616 15617 node.querySelectorAll && 15618 node.querySelectorAll('quick-add-modal').forEach((modal) => { 15619 setTimeout(() => syncContainer(modal), 150); 15620 }); 15621 }); 15622 }); 15623 }); 15624 15625 observer.observe(document.documentElement, { 15626 childList: true, 15627 subtree: true 15628 }); 15629 15630 document.addEventListener('DOMContentLoaded', () => { 15631 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 15632 }); 15633 })(); 15634</script>
15634 15635 15636 15637 15638 15639 </li> 15640 15641 15642</ul> 15643 </div> 15644 </li><li 15645 id="ProductsMegaMenu-Item-shop-2" 15646 class="products-mega-menu__item" 15647 > 15648 <a 15649 id="ProductsMegaMenu-Link-shop-2" 15650 href="/collections/all" 15651 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 15652 15653 > 15654 15655 <span>All Products</span> 15656 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 15657 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 15658</svg> 15659 15660 </a> 15661 15662 <div class="products-mega-menu__content"> 15663 <ul class="products-mega-menu__cards"> 15664 15665 15666 15667 15668 <li> 15669 15670<div class="card-wrapper product-card-wrapper underline-links-hover"> 15671 <div 15672 class=" 15673 card 15674 card--card 15675 card--media 15676 color-background-1 gradient 15677 15678 15679 15680 card--badge-sided 15681 15682 15683 " 15684 style="--ratio-percent: 100%;" 15685 > 15686 <div 15687 class="card__inner ratio" 15688 style="--ratio-percent: 100%;" 15689 ><div class="card__media"> 15690 <div class="media media--transparent media--hover-effect"> 15691 15692 <img 15693 srcset="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914 w 15694 " 15695 src="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914&width=533" 15696 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 15697 alt="The Vibeassage Pro® with the full 3-pad Biomimetic Systemâ¢" 15698 class="motion-reduce" 15699 15700 loading="lazy" 15701 15702 width="" 15703 height="" 15704 id='quick-add-7253705130175-image' 15705 > 15706 15707<img 15708 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339 810w 15709 " 15710 src="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533" 15711 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 15712 alt="" 15713 class="motion-reduce" 15714 loading="lazy" 15715 width="810" 15716 height="605" 15717 ></div> 15718 </div><div class="card__content"> 15719 <div class="card__information"> 15720 <h3 15721 class="card__heading" 15722 15723 > 15724 <a 15725 href="/products/vibeassage-pro" 15726 id="StandardCardNoMediaLink--7253705130175" 15727 class="full-unstyled-link" 15728 aria-labelledby="StandardCardNoMediaLink--7253705130175 NoMediaStandardBadge--7253705130175" 15729 > 15730 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠15731 </a> 15732 </h3> 15733 </div> 15734 <div class="card__badge bottom left"> 15735 15736
15737 <span 15738 id="NoMediaStandardBadge--7253705130175" 15739 class="badge badge--bottom-left color-accent-2" 15740 > 15741 <svg 15742 aria-hidden="true" 15743 focusable="false" 15744 class="icon icon-discount color-foreground-text" 15745 viewBox="0 0 12 12" 15746> 15747 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 15748</svg> 15749<span class='nowrap'>SAVE 9%</span> 15750 </span></div> 15751 </div> 15752 </div> 15753 <div class="card__content"> 15754 <div class="card__information"> 15755 <h3 15756 class="card__heading h5" 15757 15758 id="title--7253705130175" 15759 15760 > 15761 <a 15762 href="/products/vibeassage-pro" 15763 id="CardLink--7253705130175" 15764 class="full-unstyled-link" 15765 aria-labelledby="CardLink--7253705130175 Badge--7253705130175" 15766 > 15767 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠15768 </a> 15769 </h3> 15770 15771 <div class="card-information"><span class="caption-large light"></span> 15772<div 15773 class=" 15774 price price--on-sale " 15775> 15776 <div class="price__container"><div class="price__regular"> 15777 <span class="visually-hidden visually-hidden--inline">Regular price</span> 15778 <span class="price-item price-item--regular"> 15779 $1,579.00 15780 </span> 15781 </div> 15782 <div class="price__sale "> 15783 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 15784 <span class="price-item price-item--sale price-item--last"> 15785 $1,579.00 15786 </span> 15787 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 15788 <span class="price__compare-price"> 15789 <s class="price-item price-item--regular"> 15790 $1,749.00 15791 </s> 15792 </span></div> 15793 <small class="unit-price caption hidden"> 15794 <span class="visually-hidden">Unit price</span> 15795 <span class="price-item price-item--last"> 15796 <span></span> 15797 <span aria-hidden="true">/</span> 15798 <span class="visually-hidden"> per </span> 15799 <span> 15800 </span> 15801 </span> 15802 </small> 15803 </div></div> 15804 15805 </div> 15806 </div> 15807 15808<div class="card__badge bottom left"><span 15809 id="Badge--7253705130175" 15810 class="badge badge--bottom-left color-accent-2" 15811 > 15812 9% 15813 </span></div> 15814 </div> 15815 </div> 15816 </div>
15816<script> 15817 (() => { 15818 if (window.cardProductQuickAddVariantFixLoaded) return; 15819 window.cardProductQuickAddVariantFixLoaded = true; 15820 15821 const ADD_TO_CART_TEXT = "Add to cart"; 15822 const SOLD_OUT_TEXT = "Sold out"; 15823 15824 function parseVariants(container) { 15825 if (!container) return []; 15826 15827 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 15828 15829 for (const script of scripts) { 15830 try { 15831 const data = JSON.parse(script.textContent.trim()); 15832 15833 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 15834 return data; 15835 } 15836 15837 if (data && Array.isArray(data.variants)) { 15838 return data.variants; 15839 } 15840 } catch (error) {} 15841 } 15842 15843 return []; 15844 } 15845 15846 function getSelectedOptionValues(container) { 15847 const values = []; 15848 15849 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 15850 const checkedInput = group.querySelector('input[type="radio"]:checked'); 15851 const select = group.querySelector('select'); 15852 15853 if (checkedInput) { 15854 values.push(checkedInput.value); 15855 } else if (select) { 15856 values.push(select.value); 15857 } 15858 }); 15859 15860 return values; 15861 } 15862 15863 function getCurrentVariant(container, form, variants) { 15864 const idInput = form && form.querySelector('[name="id"]'); 15865 const selectedId = idInput && idInput.value; 15866 15867 if (selectedId) { 15868 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 15869 if (byId) return byId; 15870 } 15871 15872 const selectedOptions = getSelectedOptionValues(container); 15873 15874 if (selectedOptions.length) { 15875 return variants.find((variant) => { 15876 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 15877 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 15878 }); 15879 } 15880 15881 return null; 15882 } 15883 15884 function setButtonState(form, variant) { 15885 if (!form) return; 15886 15887 const idInput = form.querySelector('[name="id"]'); 15888 const addButton = form.querySelector('[name="add"]'); 15889 const buttonLabel = 15890 addButton && 15891 (addButton.querySelector('.main-atc__label__text') || 15892 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 15893 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 15894 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 15895 15896 if (!addButton || !idInput || !variant) return; 15897 15898 idInput.value = variant.id; 15899 idInput.disabled = false; 15900 15901 if (spinner) spinner.classList.add('hidden'); 15902 15903 if (variant.available) { 15904 addButton.disabled = false; 15905 addButton.removeAttribute('disabled'); 15906 addButton.removeAttribute('aria-disabled'); 15907 addButton.classList.remove('loading'); 15908 15909 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 15910 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 15911 } else { 15912 addButton.disabled = true; 15913 addButton.setAttribute('disabled', 'disabled'); 15914 addButton.setAttribute('aria-disabled', 'true'); 15915 15916 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 15917 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 15918 } 15919 } 15920 15921 function syncContainer(container) { 15922 if (!container) return; 15923 15924 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 15925 if (!form) return; 15926 15927 const variants = parseVariants(container); 15928 if (!variants.length) return; 15929 15930 const variant = getCurrentVariant(container, form, variants); 15931 if (!variant) return; 15932 15933 setButtonState(form, variant); 15934 } 15935 15936 document.addEventListener('change', (event) => { 15937 const quickAddModal = event.target.closest('quick-add-modal'); 15938 const cardVariantSelects = event.target.closest('card-variant-selects'); 15939 15940 if (quickAddModal) { 15941 setTimeout(() => syncContainer(quickAddModal), 80); 15942 setTimeout(() => syncContainer(quickAddModal), 250); 15943 } 15944 15945 if (cardVariantSelects) { 15946 const card = cardVariantSelects.closest('.card-wrapper'); 15947 if (card) { 15948 setTimeout(() => syncContainer(card), 80); 15949 setTimeout(() => syncContainer(card), 250); 15950 } 15951 } 15952 }); 15953 15954 const observer = new MutationObserver((mutations) => { 15955 mutations.forEach((mutation) => {
15956 mutation.addedNodes.forEach((node) => { 15957 if (!(node instanceof HTMLElement)) return; 15958 15959 if (node.matches && node.matches('quick-add-modal')) { 15960 setTimeout(() => syncContainer(node), 150); 15961 } 15962 15963 node.querySelectorAll && 15964 node.querySelectorAll('quick-add-modal').forEach((modal) => { 15965 setTimeout(() => syncContainer(modal), 150); 15966 }); 15967 }); 15968 }); 15969 }); 15970 15971 observer.observe(document.documentElement, { 15972 childList: true, 15973 subtree: true 15974 }); 15975 15976 document.addEventListener('DOMContentLoaded', () => { 15977 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 15978 }); 15979 })(); 15980</script>
15980 15981 15982 15983 15984 15985 </li> 15986 15987 <li> 15988 15989<div class="card-wrapper product-card-wrapper underline-links-hover"> 15990 <div 15991 class=" 15992 card 15993 card--card 15994 card--media 15995 color-background-1 gradient 15996 15997 15998 15999 card--badge-sided 16000 16001 16002 " 16003 style="--ratio-percent: 100%;" 16004 > 16005 <div 16006 class="card__inner ratio" 16007 style="--ratio-percent: 100%;" 16008 ><div class="card__media"> 16009 <div class="media media--transparent media--hover-effect"> 16010 16011 <img 16012 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006 1080w 16013 " 16014 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_GreenPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533" 16015 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 16016 alt="ð¢ Peak Performance Pad⢠- Team Doctors" 16017 class="motion-reduce" 16018 16019 loading="lazy" 16020 16021 width="1080" 16022 height="1080" 16023 id='quick-add-8358149750975-image' 16024 > 16025 16026<img 16027 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529 1080w 16028 " 16029 src="//teamdoctors.com/cdn/shop/files/Vibassage_Green_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124529&width=533" 16030 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 16031 alt="" 16032 class="motion-reduce" 16033 loading="lazy" 16034 width="1080" 16035 height="1080" 16036 ></div> 16037 </div><div class="card__content"> 16038 <div class="card__information"> 16039 <h3 16040 class="card__heading" 16041 16042 > 16043 <a 16044 href="/products/biomimetic-peak-performance-pad" 16045 id="StandardCardNoMediaLink--8358149750975" 16046 class="full-unstyled-link" 16047 aria-labelledby="StandardCardNoMediaLink--8358149750975 NoMediaStandardBadge--8358149750975" 16048 > 16049 ð¢ Peak Performance Pad⢠16050 </a> 16051 </h3> 16052 </div> 16053 <div class="card__badge bottom left"> 16054 16055 </div> 16056 </div> 16057 </div> 16058 <div class="card__content"> 16059 <div class="card__information"> 16060 <h3 16061 class="card__heading h5" 16062 16063 id="title--8358149750975" 16064 16065 > 16066 <a 16067 href="/products/biomimetic-peak-performance-pad" 16068 id="CardLink--8358149750975" 16069 class="full-unstyled-link" 16070 aria-labelledby="CardLink--8358149750975 Badge--8358149750975" 16071 > 16072 ð¢ Peak Performance Pad⢠16073 </a> 16074 </h3> 16075 16076 <div class="card-information"><span class="caption-large light"></span> 16077<div 16078 class=" 16079 price " 16080> 16081 <div class="price__container"><div class="price__regular">
16082 <span class="visually-hidden visually-hidden--inline">Regular price</span> 16083 <span class="price-item price-item--regular"> 16084 $54.95 16085 </span> 16086 </div> 16087 <div class="price__sale "> 16088 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 16089 <span class="price-item price-item--sale price-item--last"> 16090 $54.95 16091 </span> 16092 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 16093 <span class="price__compare-price"> 16094 <s class="price-item price-item--regular"> 16095 16096 </s> 16097 </span></div> 16098 <small class="unit-price caption hidden"> 16099 <span class="visually-hidden">Unit price</span> 16100 <span class="price-item price-item--last"> 16101 <span></span> 16102 <span aria-hidden="true">/</span> 16103 <span class="visually-hidden"> per </span> 16104 <span> 16105 </span> 16106 </span> 16107 </small> 16108 </div></div> 16109 16110 </div> 16111 </div> 16112 16113<div class="card__badge bottom left"></div> 16114 </div> 16115 </div> 16116 </div>
16116<script> 16117 (() => { 16118 if (window.cardProductQuickAddVariantFixLoaded) return; 16119 window.cardProductQuickAddVariantFixLoaded = true; 16120 16121 const ADD_TO_CART_TEXT = "Add to cart"; 16122 const SOLD_OUT_TEXT = "Sold out"; 16123 16124 function parseVariants(container) { 16125 if (!container) return []; 16126 16127 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 16128 16129 for (const script of scripts) { 16130 try { 16131 const data = JSON.parse(script.textContent.trim()); 16132 16133 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 16134 return data; 16135 } 16136 16137 if (data && Array.isArray(data.variants)) { 16138 return data.variants; 16139 } 16140 } catch (error) {} 16141 } 16142 16143 return []; 16144 } 16145 16146 function getSelectedOptionValues(container) { 16147 const values = []; 16148 16149 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 16150 const checkedInput = group.querySelector('input[type="radio"]:checked'); 16151 const select = group.querySelector('select'); 16152 16153 if (checkedInput) { 16154 values.push(checkedInput.value); 16155 } else if (select) { 16156 values.push(select.value); 16157 } 16158 }); 16159 16160 return values; 16161 } 16162 16163 function getCurrentVariant(container, form, variants) { 16164 const idInput = form && form.querySelector('[name="id"]'); 16165 const selectedId = idInput && idInput.value; 16166 16167 if (selectedId) { 16168 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 16169 if (byId) return byId; 16170 } 16171 16172 const selectedOptions = getSelectedOptionValues(container); 16173 16174 if (selectedOptions.length) { 16175 return variants.find((variant) => { 16176 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 16177 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 16178 }); 16179 } 16180 16181 return null; 16182 } 16183 16184 function setButtonState(form, variant) { 16185 if (!form) return; 16186 16187 const idInput = form.querySelector('[name="id"]'); 16188 const addButton = form.querySelector('[name="add"]'); 16189 const buttonLabel = 16190 addButton && 16191 (addButton.querySelector('.main-atc__label__text') || 16192 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 16193 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 16194 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 16195 16196 if (!addButton || !idInput || !variant) return; 16197 16198 idInput.value = variant.id; 16199 idInput.disabled = false; 16200 16201 if (spinner) spinner.classList.add('hidden'); 16202 16203 if (variant.available) { 16204 addButton.disabled = false; 16205 addButton.removeAttribute('disabled'); 16206 addButton.removeAttribute('aria-disabled'); 16207 addButton.classList.remove('loading'); 16208 16209 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 16210 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 16211 } else { 16212 addButton.disabled = true; 16213 addButton.setAttribute('disabled', 'disabled'); 16214 addButton.setAttribute('aria-disabled', 'true'); 16215 16216 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 16217 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 16218 } 16219 } 16220 16221 function syncContainer(container) { 16222 if (!container) return; 16223 16224 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 16225 if (!form) return; 16226 16227 const variants = parseVariants(container); 16228 if (!variants.length) return; 16229 16230 const variant = getCurrentVariant(container, form, variants); 16231 if (!variant) return; 16232 16233 setButtonState(form, variant); 16234 } 16235 16236 document.addEventListener('change', (event) => { 16237 const quickAddModal = event.target.closest('quick-add-modal'); 16238 const cardVariantSelects = event.target.closest('card-variant-selects'); 16239 16240 if (quickAddModal) { 16241 setTimeout(() => syncContainer(quickAddModal), 80); 16242 setTimeout(() => syncContainer(quickAddModal), 250); 16243 } 16244 16245 if (cardVariantSelects) { 16246 const card = cardVariantSelects.closest('.card-wrapper'); 16247 if (card) { 16248 setTimeout(() => syncContainer(card), 80); 16249 setTimeout(() => syncContainer(card), 250); 16250 } 16251 } 16252 }); 16253 16254 const observer = new MutationObserver((mutations) => { 16255 mutations.forEach((mutation) => {
16256 mutation.addedNodes.forEach((node) => { 16257 if (!(node instanceof HTMLElement)) return; 16258 16259 if (node.matches && node.matches('quick-add-modal')) { 16260 setTimeout(() => syncContainer(node), 150); 16261 } 16262 16263 node.querySelectorAll && 16264 node.querySelectorAll('quick-add-modal').forEach((modal) => { 16265 setTimeout(() => syncContainer(modal), 150); 16266 }); 16267 }); 16268 }); 16269 }); 16270 16271 observer.observe(document.documentElement, { 16272 childList: true, 16273 subtree: true 16274 }); 16275 16276 document.addEventListener('DOMContentLoaded', () => { 16277 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 16278 }); 16279 })(); 16280</script>
16280 16281 16282 16283 16284 16285 </li> 16286 16287 <li> 16288 16289<div class="card-wrapper product-card-wrapper underline-links-hover"> 16290 <div 16291 class=" 16292 card 16293 card--card 16294 card--media 16295 color-background-1 gradient 16296 16297 16298 16299 card--badge-sided 16300 16301 16302 " 16303 style="--ratio-percent: 100%;" 16304 > 16305 <div 16306 class="card__inner ratio" 16307 style="--ratio-percent: 100%;" 16308 ><div class="card__media"> 16309 <div class="media media--transparent media--hover-effect"> 16310 16311 <img 16312 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451 1080w 16313 " 16314 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_YellowPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459451&width=533" 16315 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 16316 alt="White" 16317 class="motion-reduce" 16318 16319 loading="lazy" 16320 16321 width="1080" 16322 height="1080" 16323 id='quick-add-8358145917119-image' 16324 > 16325 16326<img 16327 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477 1080w 16328 " 16329 src="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124477&width=533" 16330 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 16331 alt="" 16332 class="motion-reduce" 16333 loading="lazy" 16334 width="1080" 16335 height="1080" 16336 ></div> 16337 </div><div class="card__content"> 16338 <div class="card__information"> 16339 <h3 16340 class="card__heading" 16341 16342 > 16343 <a 16344 href="/products/biomimetic-core-recovery-pad" 16345 id="StandardCardNoMediaLink--8358145917119" 16346 class="full-unstyled-link" 16347 aria-labelledby="StandardCardNoMediaLink--8358145917119 NoMediaStandardBadge--8358145917119" 16348 > 16349 ð¡ Core Recovery Pad⢠16350 </a> 16351 </h3> 16352 </div> 16353 <div class="card__badge bottom left"> 16354 16355 </div> 16356 </div> 16357 </div> 16358 <div class="card__content"> 16359 <div class="card__information"> 16360 <h3 16361 class="card__heading h5" 16362 16363 id="title--8358145917119" 16364 16365 > 16366 <a 16367 href="/products/biomimetic-core-recovery-pad" 16368 id="CardLink--8358145917119" 16369 class="full-unstyled-link" 16370 aria-labelledby="CardLink--8358145917119 Badge--8358145917119" 16371 > 16372 ð¡ Core Recovery Pad⢠16373 </a> 16374 </h3> 16375 16376 <div class="card-information"><span class="caption-large light"></span> 16377<div 16378 class=" 16379 price " 16380> 16381 <div class="price__container"><div class="price__regular">
16382 <span class="visually-hidden visually-hidden--inline">Regular price</span> 16383 <span class="price-item price-item--regular"> 16384 $54.95 16385 </span> 16386 </div> 16387 <div class="price__sale "> 16388 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 16389 <span class="price-item price-item--sale price-item--last"> 16390 $54.95 16391 </span> 16392 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 16393 <span class="price__compare-price"> 16394 <s class="price-item price-item--regular"> 16395 16396 </s> 16397 </span></div> 16398 <small class="unit-price caption hidden"> 16399 <span class="visually-hidden">Unit price</span> 16400 <span class="price-item price-item--last"> 16401 <span></span> 16402 <span aria-hidden="true">/</span> 16403 <span class="visually-hidden"> per </span> 16404 <span> 16405 </span> 16406 </span> 16407 </small> 16408 </div></div> 16409 16410 </div> 16411 </div> 16412 16413<div class="card__badge bottom left"></div> 16414 </div> 16415 </div> 16416 </div>
16416<script> 16417 (() => { 16418 if (window.cardProductQuickAddVariantFixLoaded) return; 16419 window.cardProductQuickAddVariantFixLoaded = true; 16420 16421 const ADD_TO_CART_TEXT = "Add to cart"; 16422 const SOLD_OUT_TEXT = "Sold out"; 16423 16424 function parseVariants(container) { 16425 if (!container) return []; 16426 16427 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 16428 16429 for (const script of scripts) { 16430 try { 16431 const data = JSON.parse(script.textContent.trim()); 16432 16433 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 16434 return data; 16435 } 16436 16437 if (data && Array.isArray(data.variants)) { 16438 return data.variants; 16439 } 16440 } catch (error) {} 16441 } 16442 16443 return []; 16444 } 16445 16446 function getSelectedOptionValues(container) { 16447 const values = []; 16448 16449 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 16450 const checkedInput = group.querySelector('input[type="radio"]:checked'); 16451 const select = group.querySelector('select'); 16452 16453 if (checkedInput) { 16454 values.push(checkedInput.value); 16455 } else if (select) { 16456 values.push(select.value); 16457 } 16458 }); 16459 16460 return values; 16461 } 16462 16463 function getCurrentVariant(container, form, variants) { 16464 const idInput = form && form.querySelector('[name="id"]'); 16465 const selectedId = idInput && idInput.value; 16466 16467 if (selectedId) { 16468 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 16469 if (byId) return byId; 16470 } 16471 16472 const selectedOptions = getSelectedOptionValues(container); 16473 16474 if (selectedOptions.length) { 16475 return variants.find((variant) => { 16476 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 16477 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 16478 }); 16479 } 16480 16481 return null; 16482 } 16483 16484 function setButtonState(form, variant) { 16485 if (!form) return; 16486 16487 const idInput = form.querySelector('[name="id"]'); 16488 const addButton = form.querySelector('[name="add"]'); 16489 const buttonLabel = 16490 addButton && 16491 (addButton.querySelector('.main-atc__label__text') || 16492 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 16493 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 16494 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 16495 16496 if (!addButton || !idInput || !variant) return; 16497 16498 idInput.value = variant.id; 16499 idInput.disabled = false; 16500 16501 if (spinner) spinner.classList.add('hidden'); 16502 16503 if (variant.available) { 16504 addButton.disabled = false; 16505 addButton.removeAttribute('disabled'); 16506 addButton.removeAttribute('aria-disabled'); 16507 addButton.classList.remove('loading'); 16508 16509 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 16510 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 16511 } else { 16512 addButton.disabled = true; 16513 addButton.setAttribute('disabled', 'disabled'); 16514 addButton.setAttribute('aria-disabled', 'true'); 16515 16516 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 16517 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 16518 } 16519 } 16520 16521 function syncContainer(container) { 16522 if (!container) return; 16523 16524 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 16525 if (!form) return; 16526 16527 const variants = parseVariants(container); 16528 if (!variants.length) return; 16529 16530 const variant = getCurrentVariant(container, form, variants); 16531 if (!variant) return; 16532 16533 setButtonState(form, variant); 16534 } 16535 16536 document.addEventListener('change', (event) => { 16537 const quickAddModal = event.target.closest('quick-add-modal'); 16538 const cardVariantSelects = event.target.closest('card-variant-selects'); 16539 16540 if (quickAddModal) { 16541 setTimeout(() => syncContainer(quickAddModal), 80); 16542 setTimeout(() => syncContainer(quickAddModal), 250); 16543 } 16544 16545 if (cardVariantSelects) { 16546 const card = cardVariantSelects.closest('.card-wrapper'); 16547 if (card) { 16548 setTimeout(() => syncContainer(card), 80); 16549 setTimeout(() => syncContainer(card), 250); 16550 } 16551 } 16552 }); 16553 16554 const observer = new MutationObserver((mutations) => { 16555 mutations.forEach((mutation) => {
16556 mutation.addedNodes.forEach((node) => { 16557 if (!(node instanceof HTMLElement)) return; 16558 16559 if (node.matches && node.matches('quick-add-modal')) { 16560 setTimeout(() => syncContainer(node), 150); 16561 } 16562 16563 node.querySelectorAll && 16564 node.querySelectorAll('quick-add-modal').forEach((modal) => { 16565 setTimeout(() => syncContainer(modal), 150); 16566 }); 16567 }); 16568 }); 16569 }); 16570 16571 observer.observe(document.documentElement, { 16572 childList: true, 16573 subtree: true 16574 }); 16575 16576 document.addEventListener('DOMContentLoaded', () => { 16577 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 16578 }); 16579 })(); 16580</script>
16580 16581 16582 16583 16584 16585 </li> 16586 16587 <li> 16588 16589<div class="card-wrapper product-card-wrapper underline-links-hover"> 16590 <div 16591 class=" 16592 card 16593 card--card 16594 card--media 16595 color-background-1 gradient 16596 16597 16598 16599 card--badge-sided 16600 16601 16602 " 16603 style="--ratio-percent: 100%;" 16604 > 16605 <div 16606 class="card__inner ratio" 16607 style="--ratio-percent: 100%;" 16608 ><div class="card__media"> 16609 <div class="media media--transparent media--hover-effect"> 16610 16611 <img 16612 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006 1080w 16613 " 16614 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321.jpg?v=1775459006&width=533" 16615 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 16616 alt="ð´ Comfort Relief Pad⢠- Team Doctors" 16617 class="motion-reduce" 16618 16619 loading="lazy" 16620 16621 width="1080" 16622 height="1080" 16623 id='quick-add-8358127599807-image' 16624 > 16625 16626<img 16627 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492 1080w 16628 " 16629 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533" 16630 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 16631 alt="" 16632 class="motion-reduce" 16633 loading="lazy" 16634 width="1080" 16635 height="1080" 16636 ></div> 16637 </div><div class="card__content"> 16638 <div class="card__information"> 16639 <h3 16640 class="card__heading" 16641 16642 > 16643 <a 16644 href="/products/biomimetic-comfort-relief-pad" 16645 id="StandardCardNoMediaLink--8358127599807" 16646 class="full-unstyled-link" 16647 aria-labelledby="StandardCardNoMediaLink--8358127599807 NoMediaStandardBadge--8358127599807" 16648 > 16649 ð´ Comfort Relief Pad⢠16650 </a> 16651 </h3> 16652 </div> 16653 <div class="card__badge bottom left"> 16654 16655 </div> 16656 </div> 16657 </div> 16658 <div class="card__content"> 16659 <div class="card__information"> 16660 <h3 16661 class="card__heading h5" 16662 16663 id="title--8358127599807" 16664 16665 > 16666 <a 16667 href="/products/biomimetic-comfort-relief-pad" 16668 id="CardLink--8358127599807" 16669 class="full-unstyled-link" 16670 aria-labelledby="CardLink--8358127599807 Badge--8358127599807" 16671 > 16672 ð´ Comfort Relief Pad⢠16673 </a> 16674 </h3> 16675 16676 <div class="card-information"><span class="caption-large light"></span> 16677<div 16678 class=" 16679 price " 16680> 16681 <div class="price__container"><div class="price__regular">
16682 <span class="visually-hidden visually-hidden--inline">Regular price</span> 16683 <span class="price-item price-item--regular"> 16684 $54.95 16685 </span> 16686 </div> 16687 <div class="price__sale "> 16688 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 16689 <span class="price-item price-item--sale price-item--last"> 16690 $54.95 16691 </span> 16692 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 16693 <span class="price__compare-price"> 16694 <s class="price-item price-item--regular"> 16695 16696 </s> 16697 </span></div> 16698 <small class="unit-price caption hidden"> 16699 <span class="visually-hidden">Unit price</span> 16700 <span class="price-item price-item--last"> 16701 <span></span> 16702 <span aria-hidden="true">/</span> 16703 <span class="visually-hidden"> per </span> 16704 <span> 16705 </span> 16706 </span> 16707 </small> 16708 </div></div> 16709 16710 </div> 16711 </div> 16712 16713<div class="card__badge bottom left"></div> 16714 </div> 16715 </div> 16716 </div>
16716<script> 16717 (() => { 16718 if (window.cardProductQuickAddVariantFixLoaded) return; 16719 window.cardProductQuickAddVariantFixLoaded = true; 16720 16721 const ADD_TO_CART_TEXT = "Add to cart"; 16722 const SOLD_OUT_TEXT = "Sold out"; 16723 16724 function parseVariants(container) { 16725 if (!container) return []; 16726 16727 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 16728 16729 for (const script of scripts) { 16730 try { 16731 const data = JSON.parse(script.textContent.trim()); 16732 16733 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 16734 return data; 16735 } 16736 16737 if (data && Array.isArray(data.variants)) { 16738 return data.variants; 16739 } 16740 } catch (error) {} 16741 } 16742 16743 return []; 16744 } 16745 16746 function getSelectedOptionValues(container) { 16747 const values = []; 16748 16749 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 16750 const checkedInput = group.querySelector('input[type="radio"]:checked'); 16751 const select = group.querySelector('select'); 16752 16753 if (checkedInput) { 16754 values.push(checkedInput.value); 16755 } else if (select) { 16756 values.push(select.value); 16757 } 16758 }); 16759 16760 return values; 16761 } 16762 16763 function getCurrentVariant(container, form, variants) { 16764 const idInput = form && form.querySelector('[name="id"]'); 16765 const selectedId = idInput && idInput.value; 16766 16767 if (selectedId) { 16768 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 16769 if (byId) return byId; 16770 } 16771 16772 const selectedOptions = getSelectedOptionValues(container); 16773 16774 if (selectedOptions.length) { 16775 return variants.find((variant) => { 16776 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 16777 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 16778 }); 16779 } 16780 16781 return null; 16782 } 16783 16784 function setButtonState(form, variant) { 16785 if (!form) return; 16786 16787 const idInput = form.querySelector('[name="id"]'); 16788 const addButton = form.querySelector('[name="add"]'); 16789 const buttonLabel = 16790 addButton && 16791 (addButton.querySelector('.main-atc__label__text') || 16792 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 16793 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 16794 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 16795 16796 if (!addButton || !idInput || !variant) return; 16797 16798 idInput.value = variant.id; 16799 idInput.disabled = false; 16800 16801 if (spinner) spinner.classList.add('hidden'); 16802 16803 if (variant.available) { 16804 addButton.disabled = false; 16805 addButton.removeAttribute('disabled'); 16806 addButton.removeAttribute('aria-disabled'); 16807 addButton.classList.remove('loading'); 16808 16809 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 16810 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 16811 } else { 16812 addButton.disabled = true; 16813 addButton.setAttribute('disabled', 'disabled'); 16814 addButton.setAttribute('aria-disabled', 'true'); 16815 16816 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 16817 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 16818 } 16819 } 16820 16821 function syncContainer(container) { 16822 if (!container) return; 16823 16824 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 16825 if (!form) return; 16826 16827 const variants = parseVariants(container); 16828 if (!variants.length) return; 16829 16830 const variant = getCurrentVariant(container, form, variants); 16831 if (!variant) return; 16832 16833 setButtonState(form, variant); 16834 } 16835 16836 document.addEventListener('change', (event) => { 16837 const quickAddModal = event.target.closest('quick-add-modal'); 16838 const cardVariantSelects = event.target.closest('card-variant-selects'); 16839 16840 if (quickAddModal) { 16841 setTimeout(() => syncContainer(quickAddModal), 80); 16842 setTimeout(() => syncContainer(quickAddModal), 250); 16843 } 16844 16845 if (cardVariantSelects) { 16846 const card = cardVariantSelects.closest('.card-wrapper'); 16847 if (card) { 16848 setTimeout(() => syncContainer(card), 80); 16849 setTimeout(() => syncContainer(card), 250); 16850 } 16851 } 16852 }); 16853 16854 const observer = new MutationObserver((mutations) => { 16855 mutations.forEach((mutation) => {
16856 mutation.addedNodes.forEach((node) => { 16857 if (!(node instanceof HTMLElement)) return; 16858 16859 if (node.matches && node.matches('quick-add-modal')) { 16860 setTimeout(() => syncContainer(node), 150); 16861 } 16862 16863 node.querySelectorAll && 16864 node.querySelectorAll('quick-add-modal').forEach((modal) => { 16865 setTimeout(() => syncContainer(modal), 150); 16866 }); 16867 }); 16868 }); 16869 }); 16870 16871 observer.observe(document.documentElement, { 16872 childList: true, 16873 subtree: true 16874 }); 16875 16876 document.addEventListener('DOMContentLoaded', () => { 16877 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 16878 }); 16879 })(); 16880</script>
16880 16881 16882 16883 16884 16885 </li> 16886 16887 16888</ul> 16889 </div> 16890 </li><li 16891 id="ProductsMegaMenu-Item-shop-3" 16892 class="products-mega-menu__item" 16893 > 16894 <a 16895 id="ProductsMegaMenu-Link-shop-3" 16896 href="/collections/vibeassage-bundle" 16897 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 16898 16899 > 16900 16901 <span>Bundles</span> 16902 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 16903 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 16904</svg> 16905 16906 </a> 16907 16908 <div class="products-mega-menu__content"> 16909 <ul class="products-mega-menu__cards"> 16910 16911 16912 16913 16914 <li> 16915 16916<div class="card-wrapper product-card-wrapper underline-links-hover"> 16917 <div 16918 class=" 16919 card 16920 card--card 16921 card--media 16922 color-background-1 gradient 16923 16924 16925 16926 card--badge-sided 16927 16928 16929 " 16930 style="--ratio-percent: 100%;" 16931 > 16932 <div 16933 class="card__inner ratio" 16934 style="--ratio-percent: 100%;" 16935 ><div class="card__media"> 16936 <div class="media media--transparent media--hover-effect"> 16937 16938 <img 16939 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523 1254w 16940 " 16941 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Jun_9_2026_11_25_11_AM.png?v=1780975523&width=533" 16942 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 16943 alt="Complete Recovery Solution Bundle - Team Doctors" 16944 class="motion-reduce" 16945 16946 loading="lazy" 16947 16948 width="1254" 16949 height="1254" 16950 id='quick-add-8455539065023-image' 16951 > 16952 16953<img 16954 srcset="//teamdoctors.com/cdn/shop/files/preview_images/b45585c208f5471097460280d2b7e84e.thumbnail.0000000000.jpg?v=1780910014 w 16955 " 16956 src="//teamdoctors.com/cdn/shop/files/preview_images/b45585c208f5471097460280d2b7e84e.thumbnail.0000000000.jpg?v=1780910014&width=533" 16957 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 16958 alt="" 16959 class="motion-reduce" 16960 loading="lazy" 16961 width="" 16962 height="" 16963 ></div> 16964 </div><div class="card__content"> 16965 <div class="card__information"> 16966 <h3 16967 class="card__heading" 16968 16969 > 16970 <a 16971 href="/products/complete-recovery-solution-bundle" 16972 id="StandardCardNoMediaLink--8455539065023" 16973 class="full-unstyled-link" 16974 aria-labelledby="StandardCardNoMediaLink--8455539065023 NoMediaStandardBadge--8455539065023" 16975 > 16976 Complete Biomimetic Recovery System⢠16977 </a> 16978 </h3> 16979 </div> 16980 <div class="card__badge bottom left"> 16981 16982
16983 <span 16984 id="NoMediaStandardBadge--8455539065023" 16985 class="badge badge--bottom-left color-accent-2" 16986 > 16987 <svg 16988 aria-hidden="true" 16989 focusable="false" 16990 class="icon icon-discount color-foreground-text" 16991 viewBox="0 0 12 12" 16992> 16993 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 16994</svg> 16995<span class='nowrap'>SAVE 10%</span> 16996 </span></div> 16997 </div> 16998 </div> 16999 <div class="card__content"> 17000 <div class="card__information"> 17001 <h3 17002 class="card__heading h5" 17003 17004 id="title--8455539065023" 17005 17006 > 17007 <a 17008 href="/products/complete-recovery-solution-bundle" 17009 id="CardLink--8455539065023" 17010 class="full-unstyled-link" 17011 aria-labelledby="CardLink--8455539065023 Badge--8455539065023" 17012 > 17013 Complete Biomimetic Recovery System⢠17014 </a> 17015 </h3> 17016 17017 <div class="product-subtitle"> 17018 The Vibeassage Pro® + The Vibeassage Sport® 17019 </div> 17020 17021 <div class="card-information"><span class="caption-large light"></span> 17022<div 17023 class=" 17024 price price--on-sale " 17025> 17026 <div class="price__container"><div class="price__regular"> 17027 <span class="visually-hidden visually-hidden--inline">Regular price</span> 17028 <span class="price-item price-item--regular"> 17029 $1,807.00 17030 </span> 17031 </div> 17032 <div class="price__sale "> 17033 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 17034 <span class="price-item price-item--sale price-item--last"> 17035 $1,807.00 17036 </span> 17037 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 17038 <span class="price__compare-price"> 17039 <s class="price-item price-item--regular"> 17040 $2,008.00 17041 </s> 17042 </span></div> 17043 <small class="unit-price caption hidden"> 17044 <span class="visually-hidden">Unit price</span> 17045 <span class="price-item price-item--last"> 17046 <span></span> 17047 <span aria-hidden="true">/</span> 17048 <span class="visually-hidden"> per </span> 17049 <span> 17050 </span> 17051 </span> 17052 </small> 17053 </div></div> 17054 17055 </div> 17056 </div> 17057 17058<div class="card__badge bottom left"><span 17059 id="Badge--8455539065023" 17060 class="badge badge--bottom-left color-accent-2" 17061 > 17062 10% 17063 </span></div> 17064 </div> 17065 </div> 17066 </div>
17066<script> 17067 (() => { 17068 if (window.cardProductQuickAddVariantFixLoaded) return; 17069 window.cardProductQuickAddVariantFixLoaded = true; 17070 17071 const ADD_TO_CART_TEXT = "Add to cart"; 17072 const SOLD_OUT_TEXT = "Sold out"; 17073 17074 function parseVariants(container) { 17075 if (!container) return []; 17076 17077 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 17078 17079 for (const script of scripts) { 17080 try { 17081 const data = JSON.parse(script.textContent.trim()); 17082 17083 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 17084 return data; 17085 } 17086 17087 if (data && Array.isArray(data.variants)) { 17088 return data.variants; 17089 } 17090 } catch (error) {} 17091 } 17092 17093 return []; 17094 } 17095 17096 function getSelectedOptionValues(container) { 17097 const values = []; 17098 17099 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 17100 const checkedInput = group.querySelector('input[type="radio"]:checked'); 17101 const select = group.querySelector('select'); 17102 17103 if (checkedInput) { 17104 values.push(checkedInput.value); 17105 } else if (select) { 17106 values.push(select.value); 17107 } 17108 }); 17109 17110 return values; 17111 } 17112 17113 function getCurrentVariant(container, form, variants) { 17114 const idInput = form && form.querySelector('[name="id"]'); 17115 const selectedId = idInput && idInput.value; 17116 17117 if (selectedId) { 17118 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 17119 if (byId) return byId; 17120 } 17121 17122 const selectedOptions = getSelectedOptionValues(container); 17123 17124 if (selectedOptions.length) { 17125 return variants.find((variant) => { 17126 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 17127 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 17128 }); 17129 } 17130 17131 return null; 17132 } 17133 17134 function setButtonState(form, variant) { 17135 if (!form) return; 17136 17137 const idInput = form.querySelector('[name="id"]'); 17138 const addButton = form.querySelector('[name="add"]'); 17139 const buttonLabel = 17140 addButton && 17141 (addButton.querySelector('.main-atc__label__text') || 17142 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 17143 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 17144 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 17145 17146 if (!addButton || !idInput || !variant) return; 17147 17148 idInput.value = variant.id; 17149 idInput.disabled = false; 17150 17151 if (spinner) spinner.classList.add('hidden'); 17152 17153 if (variant.available) { 17154 addButton.disabled = false; 17155 addButton.removeAttribute('disabled'); 17156 addButton.removeAttribute('aria-disabled'); 17157 addButton.classList.remove('loading'); 17158 17159 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 17160 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 17161 } else { 17162 addButton.disabled = true; 17163 addButton.setAttribute('disabled', 'disabled'); 17164 addButton.setAttribute('aria-disabled', 'true'); 17165 17166 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 17167 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 17168 } 17169 } 17170 17171 function syncContainer(container) { 17172 if (!container) return; 17173 17174 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 17175 if (!form) return; 17176 17177 const variants = parseVariants(container); 17178 if (!variants.length) return; 17179 17180 const variant = getCurrentVariant(container, form, variants); 17181 if (!variant) return; 17182 17183 setButtonState(form, variant); 17184 } 17185 17186 document.addEventListener('change', (event) => { 17187 const quickAddModal = event.target.closest('quick-add-modal'); 17188 const cardVariantSelects = event.target.closest('card-variant-selects'); 17189 17190 if (quickAddModal) { 17191 setTimeout(() => syncContainer(quickAddModal), 80); 17192 setTimeout(() => syncContainer(quickAddModal), 250); 17193 } 17194 17195 if (cardVariantSelects) { 17196 const card = cardVariantSelects.closest('.card-wrapper'); 17197 if (card) { 17198 setTimeout(() => syncContainer(card), 80); 17199 setTimeout(() => syncContainer(card), 250); 17200 } 17201 } 17202 }); 17203 17204 const observer = new MutationObserver((mutations) => { 17205 mutations.forEach((mutation) => {
17206 mutation.addedNodes.forEach((node) => { 17207 if (!(node instanceof HTMLElement)) return; 17208 17209 if (node.matches && node.matches('quick-add-modal')) { 17210 setTimeout(() => syncContainer(node), 150); 17211 } 17212 17213 node.querySelectorAll && 17214 node.querySelectorAll('quick-add-modal').forEach((modal) => { 17215 setTimeout(() => syncContainer(modal), 150); 17216 }); 17217 }); 17218 }); 17219 }); 17220 17221 observer.observe(document.documentElement, { 17222 childList: true, 17223 subtree: true 17224 }); 17225 17226 document.addEventListener('DOMContentLoaded', () => { 17227 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 17228 }); 17229 })(); 17230</script>
17230 17231 17232 17233 17234 17235 </li> 17236 17237 <li> 17238 17239<div class="card-wrapper product-card-wrapper underline-links-hover"> 17240 <div 17241 class=" 17242 card 17243 card--card 17244 card--media 17245 color-background-1 gradient 17246 17247 17248 17249 card--badge-sided 17250 17251 17252 " 17253 style="--ratio-percent: 100%;" 17254 > 17255 <div 17256 class="card__inner ratio" 17257 style="--ratio-percent: 100%;" 17258 ><div class="card__media"> 17259 <div class="media media--transparent media--hover-effect"> 17260 17261 <img 17262 srcset="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914 w 17263 " 17264 src="//teamdoctors.com/cdn/shop/files/preview_images/f70ac36becac4c468aa54f1b22548538.thumbnail.0000000000.jpg?v=1775457914&width=533" 17265 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 17266 alt="The Vibeassage Pro® with the full 3-pad Biomimetic Systemâ¢" 17267 class="motion-reduce" 17268 17269 loading="lazy" 17270 17271 width="" 17272 height="" 17273 id='quick-add-7253705130175-image' 17274 > 17275 17276<img 17277 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339 810w 17278 " 17279 src="//teamdoctors.com/cdn/shop/files/Vibassage_ApplicatorPad_RedPad_Image_Shopify_V1_Draft_20260321_8735cf09-28eb-4b55-b617-a42227f0002d.jpg?v=1776132339&width=533" 17280 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 17281 alt="" 17282 class="motion-reduce" 17283 loading="lazy" 17284 width="810" 17285 height="605" 17286 ></div> 17287 </div><div class="card__content"> 17288 <div class="card__information"> 17289 <h3 17290 class="card__heading" 17291 17292 > 17293 <a 17294 href="/products/vibeassage-pro" 17295 id="StandardCardNoMediaLink--7253705130175" 17296 class="full-unstyled-link" 17297 aria-labelledby="StandardCardNoMediaLink--7253705130175 NoMediaStandardBadge--7253705130175" 17298 > 17299 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠17300 </a> 17301 </h3> 17302 </div> 17303 <div class="card__badge bottom left"> 17304 17305 17306 <span 17307 id="NoMediaStandardBadge--7253705130175" 17308 class="badge badge--bottom-left color-accent-2" 17309 > 17310 <svg 17311 aria-hidden="true" 17312 focusable="false" 17313 class="icon icon-discount color-foreground-text" 17314 viewBox="0 0 12 12" 17315> 17316 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 17317</svg> 17318<span class='nowrap'>SAVE 9%</span> 17319 </span></div> 17320 </div> 17321 </div> 17322 <div class="card__content"> 17323 <div class="card__information"> 17324 <h3 17325 class="card__heading h5" 17326 17327 id="title--7253705130175" 17328 17329 > 17330 <a 17331 href="/products/vibeassage-pro" 17332 id="CardLink--7253705130175" 17333 class="full-unstyled-link" 17334 aria-labelledby="CardLink--7253705130175 Badge--7253705130175" 17335 > 17336 The Vibeassage Pro® with the full 3-pad Biomimetic System⢠17337 </a> 17338 </h3> 17339 17340 <div class="card-information"><span class="caption-large light"></span> 17341<div 17342 class=" 17343 price price--on-sale " 17344> 17345 <div class="price__container"><div class="price__regular">
17346 <span class="visually-hidden visually-hidden--inline">Regular price</span> 17347 <span class="price-item price-item--regular"> 17348 $1,579.00 17349 </span> 17350 </div> 17351 <div class="price__sale "> 17352 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 17353 <span class="price-item price-item--sale price-item--last"> 17354 $1,579.00 17355 </span> 17356 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 17357 <span class="price__compare-price"> 17358 <s class="price-item price-item--regular"> 17359 $1,749.00 17360 </s> 17361 </span></div> 17362 <small class="unit-price caption hidden"> 17363 <span class="visually-hidden">Unit price</span> 17364 <span class="price-item price-item--last"> 17365 <span></span> 17366 <span aria-hidden="true">/</span> 17367 <span class="visually-hidden"> per </span> 17368 <span> 17369 </span> 17370 </span> 17371 </small> 17372 </div></div> 17373 17374 </div> 17375 </div> 17376 17377<div class="card__badge bottom left"><span 17378 id="Badge--7253705130175" 17379 class="badge badge--bottom-left color-accent-2" 17380 > 17381 9% 17382 </span></div> 17383 </div> 17384 </div> 17385 </div>
17385<script> 17386 (() => { 17387 if (window.cardProductQuickAddVariantFixLoaded) return; 17388 window.cardProductQuickAddVariantFixLoaded = true; 17389 17390 const ADD_TO_CART_TEXT = "Add to cart"; 17391 const SOLD_OUT_TEXT = "Sold out"; 17392 17393 function parseVariants(container) { 17394 if (!container) return []; 17395 17396 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 17397 17398 for (const script of scripts) { 17399 try { 17400 const data = JSON.parse(script.textContent.trim()); 17401 17402 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 17403 return data; 17404 } 17405 17406 if (data && Array.isArray(data.variants)) { 17407 return data.variants; 17408 } 17409 } catch (error) {} 17410 } 17411 17412 return []; 17413 } 17414 17415 function getSelectedOptionValues(container) { 17416 const values = []; 17417 17418 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 17419 const checkedInput = group.querySelector('input[type="radio"]:checked'); 17420 const select = group.querySelector('select'); 17421 17422 if (checkedInput) { 17423 values.push(checkedInput.value); 17424 } else if (select) { 17425 values.push(select.value); 17426 } 17427 }); 17428 17429 return values; 17430 } 17431 17432 function getCurrentVariant(container, form, variants) { 17433 const idInput = form && form.querySelector('[name="id"]'); 17434 const selectedId = idInput && idInput.value; 17435 17436 if (selectedId) { 17437 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 17438 if (byId) return byId; 17439 } 17440 17441 const selectedOptions = getSelectedOptionValues(container); 17442 17443 if (selectedOptions.length) { 17444 return variants.find((variant) => { 17445 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 17446 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 17447 }); 17448 } 17449 17450 return null; 17451 } 17452 17453 function setButtonState(form, variant) { 17454 if (!form) return; 17455 17456 const idInput = form.querySelector('[name="id"]'); 17457 const addButton = form.querySelector('[name="add"]'); 17458 const buttonLabel = 17459 addButton && 17460 (addButton.querySelector('.main-atc__label__text') || 17461 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 17462 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 17463 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 17464 17465 if (!addButton || !idInput || !variant) return; 17466 17467 idInput.value = variant.id; 17468 idInput.disabled = false; 17469 17470 if (spinner) spinner.classList.add('hidden'); 17471 17472 if (variant.available) { 17473 addButton.disabled = false; 17474 addButton.removeAttribute('disabled'); 17475 addButton.removeAttribute('aria-disabled'); 17476 addButton.classList.remove('loading'); 17477 17478 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 17479 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 17480 } else { 17481 addButton.disabled = true; 17482 addButton.setAttribute('disabled', 'disabled'); 17483 addButton.setAttribute('aria-disabled', 'true'); 17484 17485 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 17486 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 17487 } 17488 } 17489 17490 function syncContainer(container) { 17491 if (!container) return; 17492 17493 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 17494 if (!form) return; 17495 17496 const variants = parseVariants(container); 17497 if (!variants.length) return; 17498 17499 const variant = getCurrentVariant(container, form, variants); 17500 if (!variant) return; 17501 17502 setButtonState(form, variant); 17503 } 17504 17505 document.addEventListener('change', (event) => { 17506 const quickAddModal = event.target.closest('quick-add-modal'); 17507 const cardVariantSelects = event.target.closest('card-variant-selects'); 17508 17509 if (quickAddModal) { 17510 setTimeout(() => syncContainer(quickAddModal), 80); 17511 setTimeout(() => syncContainer(quickAddModal), 250); 17512 } 17513 17514 if (cardVariantSelects) { 17515 const card = cardVariantSelects.closest('.card-wrapper'); 17516 if (card) { 17517 setTimeout(() => syncContainer(card), 80); 17518 setTimeout(() => syncContainer(card), 250); 17519 } 17520 } 17521 }); 17522 17523 const observer = new MutationObserver((mutations) => { 17524 mutations.forEach((mutation) => {
17525 mutation.addedNodes.forEach((node) => { 17526 if (!(node instanceof HTMLElement)) return; 17527 17528 if (node.matches && node.matches('quick-add-modal')) { 17529 setTimeout(() => syncContainer(node), 150); 17530 } 17531 17532 node.querySelectorAll && 17533 node.querySelectorAll('quick-add-modal').forEach((modal) => { 17534 setTimeout(() => syncContainer(modal), 150); 17535 }); 17536 }); 17537 }); 17538 }); 17539 17540 observer.observe(document.documentElement, { 17541 childList: true, 17542 subtree: true 17543 }); 17544 17545 document.addEventListener('DOMContentLoaded', () => { 17546 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 17547 }); 17548 })(); 17549</script>
17549 17550 17551 17552 17553 17554 </li> 17555 17556 <li> 17557 17558<div class="card-wrapper product-card-wrapper underline-links-hover"> 17559 <div 17560 class=" 17561 card 17562 card--card 17563 card--media 17564 color-background-1 gradient 17565 17566 17567 17568 card--badge-sided 17569 17570 17571 " 17572 style="--ratio-percent: 100%;" 17573 > 17574 <div 17575 class="card__inner ratio" 17576 style="--ratio-percent: 100%;" 17577 ><div class="card__media"> 17578 <div class="media media--transparent media--hover-effect"> 17579 17580 <img 17581 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068 1254w 17582 " 17583 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_18_08_PM.png?v=1777520068&width=533" 17584 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 17585 alt="White" 17586 class="motion-reduce" 17587 17588 loading="lazy" 17589 17590 width="1254" 17591 height="1254" 17592 id='quick-add-8342973219007-image' 17593 > 17594 17595<img 17596 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847 1080w 17597 " 17598 src="//teamdoctors.com/cdn/shop/files/Vibassage_Applicator_RedPad_Image_Shopify_V1_Draft_20260321_5a01574d-94a9-4ac8-b20b-9febc559d787.jpg?v=1775888847&width=533" 17599 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 17600 alt="" 17601 class="motion-reduce" 17602 loading="lazy" 17603 width="1080" 17604 height="1080" 17605 ></div> 17606 </div><div class="card__content"> 17607 <div class="card__information"> 17608 <h3 17609 class="card__heading" 17610 17611 > 17612 <a 17613 href="/products/vibeassage-complete-system" 17614 id="StandardCardNoMediaLink--8342973219007" 17615 class="full-unstyled-link" 17616 aria-labelledby="StandardCardNoMediaLink--8342973219007 NoMediaStandardBadge--8342973219007" 17617 > 17618 â Vibeassage⢠Sport with 3 Biomimetic Pads - The Complete System 17619 </a> 17620 </h3> 17621 </div> 17622 <div class="card__badge bottom left"> 17623 17624 </div> 17625 </div> 17626 </div> 17627 <div class="card__content"> 17628 <div class="card__information"> 17629 <h3 17630 class="card__heading h5" 17631 17632 id="title--8342973219007" 17633 17634 > 17635 <a 17636 href="/products/vibeassage-complete-system" 17637 id="CardLink--8342973219007" 17638 class="full-unstyled-link" 17639 aria-labelledby="CardLink--8342973219007 Badge--8342973219007" 17640 > 17641 â Vibeassage⢠Sport with 3 Biomimetic Pads - The Complete System 17642 </a> 17643 </h3> 17644 17645 <div class="card-information"><span class="caption-large light"></span> 17646<div 17647 class=" 17648 price " 17649> 17650 <div class="price__container"><div class="price__regular">
17651 <span class="visually-hidden visually-hidden--inline">Regular price</span> 17652 <span class="price-item price-item--regular"> 17653 From $429.00 17654 </span> 17655 </div> 17656 <div class="price__sale "> 17657 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 17658 <span class="price-item price-item--sale price-item--last"> 17659 From $429.00 17660 </span> 17661 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 17662 <span class="price__compare-price"> 17663 <s class="price-item price-item--regular"> 17664 17665 </s> 17666 </span></div> 17667 <small class="unit-price caption hidden"> 17668 <span class="visually-hidden">Unit price</span> 17669 <span class="price-item price-item--last"> 17670 <span></span> 17671 <span aria-hidden="true">/</span> 17672 <span class="visually-hidden"> per </span> 17673 <span> 17674 </span> 17675 </span> 17676 </small> 17677 </div></div> 17678 17679 </div> 17680 </div> 17681 17682<div class="card__badge bottom left"></div> 17683 </div> 17684 </div> 17685 </div>
17685<script> 17686 (() => { 17687 if (window.cardProductQuickAddVariantFixLoaded) return; 17688 window.cardProductQuickAddVariantFixLoaded = true; 17689 17690 const ADD_TO_CART_TEXT = "Add to cart"; 17691 const SOLD_OUT_TEXT = "Sold out"; 17692 17693 function parseVariants(container) { 17694 if (!container) return []; 17695 17696 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 17697 17698 for (const script of scripts) { 17699 try { 17700 const data = JSON.parse(script.textContent.trim()); 17701 17702 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 17703 return data; 17704 } 17705 17706 if (data && Array.isArray(data.variants)) { 17707 return data.variants; 17708 } 17709 } catch (error) {} 17710 } 17711 17712 return []; 17713 } 17714 17715 function getSelectedOptionValues(container) { 17716 const values = []; 17717 17718 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 17719 const checkedInput = group.querySelector('input[type="radio"]:checked'); 17720 const select = group.querySelector('select'); 17721 17722 if (checkedInput) { 17723 values.push(checkedInput.value); 17724 } else if (select) { 17725 values.push(select.value); 17726 } 17727 }); 17728 17729 return values; 17730 } 17731 17732 function getCurrentVariant(container, form, variants) { 17733 const idInput = form && form.querySelector('[name="id"]'); 17734 const selectedId = idInput && idInput.value; 17735 17736 if (selectedId) { 17737 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 17738 if (byId) return byId; 17739 } 17740 17741 const selectedOptions = getSelectedOptionValues(container); 17742 17743 if (selectedOptions.length) { 17744 return variants.find((variant) => { 17745 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 17746 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 17747 }); 17748 } 17749 17750 return null; 17751 } 17752 17753 function setButtonState(form, variant) { 17754 if (!form) return; 17755 17756 const idInput = form.querySelector('[name="id"]'); 17757 const addButton = form.querySelector('[name="add"]'); 17758 const buttonLabel = 17759 addButton && 17760 (addButton.querySelector('.main-atc__label__text') || 17761 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 17762 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 17763 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 17764 17765 if (!addButton || !idInput || !variant) return; 17766 17767 idInput.value = variant.id; 17768 idInput.disabled = false; 17769 17770 if (spinner) spinner.classList.add('hidden'); 17771 17772 if (variant.available) { 17773 addButton.disabled = false; 17774 addButton.removeAttribute('disabled'); 17775 addButton.removeAttribute('aria-disabled'); 17776 addButton.classList.remove('loading'); 17777 17778 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 17779 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 17780 } else { 17781 addButton.disabled = true; 17782 addButton.setAttribute('disabled', 'disabled'); 17783 addButton.setAttribute('aria-disabled', 'true'); 17784 17785 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 17786 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 17787 } 17788 } 17789 17790 function syncContainer(container) { 17791 if (!container) return; 17792 17793 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 17794 if (!form) return; 17795 17796 const variants = parseVariants(container); 17797 if (!variants.length) return; 17798 17799 const variant = getCurrentVariant(container, form, variants); 17800 if (!variant) return; 17801 17802 setButtonState(form, variant); 17803 } 17804 17805 document.addEventListener('change', (event) => { 17806 const quickAddModal = event.target.closest('quick-add-modal'); 17807 const cardVariantSelects = event.target.closest('card-variant-selects'); 17808 17809 if (quickAddModal) { 17810 setTimeout(() => syncContainer(quickAddModal), 80); 17811 setTimeout(() => syncContainer(quickAddModal), 250); 17812 } 17813 17814 if (cardVariantSelects) { 17815 const card = cardVariantSelects.closest('.card-wrapper'); 17816 if (card) { 17817 setTimeout(() => syncContainer(card), 80); 17818 setTimeout(() => syncContainer(card), 250); 17819 } 17820 } 17821 }); 17822 17823 const observer = new MutationObserver((mutations) => { 17824 mutations.forEach((mutation) => {
17825 mutation.addedNodes.forEach((node) => { 17826 if (!(node instanceof HTMLElement)) return; 17827 17828 if (node.matches && node.matches('quick-add-modal')) { 17829 setTimeout(() => syncContainer(node), 150); 17830 } 17831 17832 node.querySelectorAll && 17833 node.querySelectorAll('quick-add-modal').forEach((modal) => { 17834 setTimeout(() => syncContainer(modal), 150); 17835 }); 17836 }); 17837 }); 17838 }); 17839 17840 observer.observe(document.documentElement, { 17841 childList: true, 17842 subtree: true 17843 }); 17844 17845 document.addEventListener('DOMContentLoaded', () => { 17846 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 17847 }); 17848 })(); 17849</script>
17849 17850 17851 17852 17853 17854 </li> 17855 17856 <li> 17857 17858<div class="card-wrapper product-card-wrapper underline-links-hover"> 17859 <div 17860 class=" 17861 card 17862 card--card 17863 card--media 17864 color-background-1 gradient 17865 17866 17867 17868 card--badge-sided 17869 17870 17871 " 17872 style="--ratio-percent: 100%;" 17873 > 17874 <div 17875 class="card__inner ratio" 17876 style="--ratio-percent: 100%;" 17877 ><div class="card__media"> 17878 <div class="media media--transparent media--hover-effect"> 17879 17880 <img 17881 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068 1254w 17882 " 17883 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_21_24_PM.png?v=1777520068&width=533" 17884 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 17885 alt="White" 17886 class="motion-reduce" 17887 17888 loading="lazy" 17889 17890 width="1254" 17891 height="1254" 17892 id='quick-add-8342972334271-image' 17893 > 17894 17895<img 17896 srcset="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=165 165w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=360 360w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=533 533w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=720 720w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=940 940w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=1066 1066w,//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068 1254w 17897 " 17898 src="//teamdoctors.com/cdn/shop/files/ChatGPT_Image_Apr_23_2026_01_30_07_PM.png?v=1777520068&width=533" 17899 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 17900 alt="" 17901 class="motion-reduce" 17902 loading="lazy" 17903 width="1254" 17904 height="1254" 17905 ></div> 17906 </div><div class="card__content"> 17907 <div class="card__information"> 17908 <h3 17909 class="card__heading" 17910 17911 > 17912 <a 17913 href="/products/vibeassage-relief-bundle" 17914 id="StandardCardNoMediaLink--8342972334271" 17915 class="full-unstyled-link" 17916 aria-labelledby="StandardCardNoMediaLink--8342972334271 NoMediaStandardBadge--8342972334271" 17917 > 17918 Vibeassage® Relief Bundle 17919 </a> 17920 </h3> 17921 </div> 17922 <div class="card__badge bottom left"> 17923 17924 </div> 17925 </div> 17926 </div> 17927 <div class="card__content"> 17928 <div class="card__information"> 17929 <h3 17930 class="card__heading h5" 17931 17932 id="title--8342972334271" 17933 17934 > 17935 <a 17936 href="/products/vibeassage-relief-bundle" 17937 id="CardLink--8342972334271" 17938 class="full-unstyled-link" 17939 aria-labelledby="CardLink--8342972334271 Badge--8342972334271" 17940 > 17941 Vibeassage® Relief Bundle 17942 </a> 17943 </h3> 17944 17945 <div class="card-information"><span class="caption-large light"></span> 17946<div 17947 class=" 17948 price " 17949> 17950 <div class="price__container"><div class="price__regular">
17951 <span class="visually-hidden visually-hidden--inline">Regular price</span> 17952 <span class="price-item price-item--regular"> 17953 From $389.00 17954 </span> 17955 </div> 17956 <div class="price__sale "> 17957 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 17958 <span class="price-item price-item--sale price-item--last"> 17959 From $389.00 17960 </span> 17961 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 17962 <span class="price__compare-price"> 17963 <s class="price-item price-item--regular"> 17964 17965 </s> 17966 </span></div> 17967 <small class="unit-price caption hidden"> 17968 <span class="visually-hidden">Unit price</span> 17969 <span class="price-item price-item--last"> 17970 <span></span> 17971 <span aria-hidden="true">/</span> 17972 <span class="visually-hidden"> per </span> 17973 <span> 17974 </span> 17975 </span> 17976 </small> 17977 </div></div> 17978 17979 </div> 17980 </div> 17981 17982<div class="card__badge bottom left"></div> 17983 </div> 17984 </div> 17985 </div>
17985<script> 17986 (() => { 17987 if (window.cardProductQuickAddVariantFixLoaded) return; 17988 window.cardProductQuickAddVariantFixLoaded = true; 17989 17990 const ADD_TO_CART_TEXT = "Add to cart"; 17991 const SOLD_OUT_TEXT = "Sold out"; 17992 17993 function parseVariants(container) { 17994 if (!container) return []; 17995 17996 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 17997 17998 for (const script of scripts) { 17999 try { 18000 const data = JSON.parse(script.textContent.trim()); 18001 18002 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 18003 return data; 18004 } 18005 18006 if (data && Array.isArray(data.variants)) { 18007 return data.variants; 18008 } 18009 } catch (error) {} 18010 } 18011 18012 return []; 18013 } 18014 18015 function getSelectedOptionValues(container) { 18016 const values = []; 18017 18018 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 18019 const checkedInput = group.querySelector('input[type="radio"]:checked'); 18020 const select = group.querySelector('select'); 18021 18022 if (checkedInput) { 18023 values.push(checkedInput.value); 18024 } else if (select) { 18025 values.push(select.value); 18026 } 18027 }); 18028 18029 return values; 18030 } 18031 18032 function getCurrentVariant(container, form, variants) { 18033 const idInput = form && form.querySelector('[name="id"]'); 18034 const selectedId = idInput && idInput.value; 18035 18036 if (selectedId) { 18037 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 18038 if (byId) return byId; 18039 } 18040 18041 const selectedOptions = getSelectedOptionValues(container); 18042 18043 if (selectedOptions.length) { 18044 return variants.find((variant) => { 18045 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 18046 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 18047 }); 18048 } 18049 18050 return null; 18051 } 18052 18053 function setButtonState(form, variant) { 18054 if (!form) return; 18055 18056 const idInput = form.querySelector('[name="id"]'); 18057 const addButton = form.querySelector('[name="add"]'); 18058 const buttonLabel = 18059 addButton && 18060 (addButton.querySelector('.main-atc__label__text') || 18061 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 18062 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 18063 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 18064 18065 if (!addButton || !idInput || !variant) return; 18066 18067 idInput.value = variant.id; 18068 idInput.disabled = false; 18069 18070 if (spinner) spinner.classList.add('hidden'); 18071 18072 if (variant.available) { 18073 addButton.disabled = false; 18074 addButton.removeAttribute('disabled'); 18075 addButton.removeAttribute('aria-disabled'); 18076 addButton.classList.remove('loading'); 18077 18078 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 18079 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 18080 } else { 18081 addButton.disabled = true; 18082 addButton.setAttribute('disabled', 'disabled'); 18083 addButton.setAttribute('aria-disabled', 'true'); 18084 18085 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 18086 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 18087 } 18088 } 18089 18090 function syncContainer(container) { 18091 if (!container) return; 18092 18093 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 18094 if (!form) return; 18095 18096 const variants = parseVariants(container); 18097 if (!variants.length) return; 18098 18099 const variant = getCurrentVariant(container, form, variants); 18100 if (!variant) return; 18101 18102 setButtonState(form, variant); 18103 } 18104 18105 document.addEventListener('change', (event) => { 18106 const quickAddModal = event.target.closest('quick-add-modal'); 18107 const cardVariantSelects = event.target.closest('card-variant-selects'); 18108 18109 if (quickAddModal) { 18110 setTimeout(() => syncContainer(quickAddModal), 80); 18111 setTimeout(() => syncContainer(quickAddModal), 250); 18112 } 18113 18114 if (cardVariantSelects) { 18115 const card = cardVariantSelects.closest('.card-wrapper'); 18116 if (card) { 18117 setTimeout(() => syncContainer(card), 80); 18118 setTimeout(() => syncContainer(card), 250); 18119 } 18120 } 18121 }); 18122 18123 const observer = new MutationObserver((mutations) => { 18124 mutations.forEach((mutation) => {
18125 mutation.addedNodes.forEach((node) => { 18126 if (!(node instanceof HTMLElement)) return; 18127 18128 if (node.matches && node.matches('quick-add-modal')) { 18129 setTimeout(() => syncContainer(node), 150); 18130 } 18131 18132 node.querySelectorAll && 18133 node.querySelectorAll('quick-add-modal').forEach((modal) => { 18134 setTimeout(() => syncContainer(modal), 150); 18135 }); 18136 }); 18137 }); 18138 }); 18139 18140 observer.observe(document.documentElement, { 18141 childList: true, 18142 subtree: true 18143 }); 18144 18145 document.addEventListener('DOMContentLoaded', () => { 18146 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 18147 }); 18148 })(); 18149</script>
18149 18150 18151 18152 18153 18154 </li> 18155 18156 18157</ul> 18158 </div> 18159 </li><li 18160 id="ProductsMegaMenu-Item-shop-4" 18161 class="products-mega-menu__item" 18162 > 18163 <a 18164 id="ProductsMegaMenu-Link-shop-4" 18165 href="/collections/pads" 18166 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 18167 18168 > 18169 18170 <span>Pads</span> 18171 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 18172 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 18173</svg> 18174 18175 </a> 18176 18177 <div class="products-mega-menu__content"> 18178 <ul class="products-mega-menu__cards"> 18179 18180 18181 18182 18183 <li> 18184 18185<div class="card-wrapper product-card-wrapper underline-links-hover"> 18186 <div 18187 class=" 18188 card 18189 card--card 18190 card--media 18191 color-background-1 gradient 18192 18193 18194 18195 card--badge-sided 18196 18197 18198 " 18199 style="--ratio-percent: 100%;" 18200 > 18201 <div 18202 class="card__inner ratio" 18203 style="--ratio-percent: 100%;" 18204 ><div class="card__media"> 18205 <div class="media media--transparent media--hover-effect"> 18206 18207 <img 18208 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443 1080w 18209 " 18210 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_Yellow_Green_Pad_Image_Shopify_V1_Draft_20260411.jpg?v=1776124443&width=533" 18211 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 18212 alt="Biomimetic Applicator Pads (Full Set) - Team Doctors" 18213 class="motion-reduce" 18214 18215 loading="lazy" 18216 18217 width="1080" 18218 height="1080" 18219 id='quick-add-8394187342015-image' 18220 > 18221 18222<img 18223 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492 1080w 18224 "
18225 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411.jpg?v=1776124492&width=533" 18226 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 18227 alt="" 18228 class="motion-reduce" 18229 loading="lazy" 18230 width="1080" 18231 height="1080" 18232 ></div> 18233 </div><div class="card__content"> 18234 <div class="card__information"> 18235 <h3 18236 class="card__heading" 18237 18238 > 18239 <a 18240 href="/products/biomemetic-applicator-pads-full-set" 18241 id="StandardCardNoMediaLink--8394187342015" 18242 class="full-unstyled-link" 18243 aria-labelledby="StandardCardNoMediaLink--8394187342015 NoMediaStandardBadge--8394187342015" 18244 > 18245 Biomimetic Applicator Pads 18246 </a> 18247 </h3> 18248 </div> 18249 <div class="card__badge bottom left"> 18250 18251 18252 <span 18253 id="NoMediaStandardBadge--8394187342015" 18254 class="badge badge--bottom-left color-accent-2" 18255 > 18256 <svg 18257 aria-hidden="true" 18258 focusable="false" 18259 class="icon icon-discount color-foreground-text" 18260 viewBox="0 0 12 12" 18261> 18262 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 18263</svg> 18264<span class='nowrap'>SAVE 21%</span> 18265 </span></div> 18266 </div> 18267 </div> 18268 <div class="card__content"> 18269 <div class="card__information"> 18270 <h3 18271 class="card__heading h5" 18272 18273 id="title--8394187342015" 18274 18275 > 18276 <a 18277 href="/products/biomemetic-applicator-pads-full-set" 18278 id="CardLink--8394187342015" 18279 class="full-unstyled-link" 18280 aria-labelledby="CardLink--8394187342015 Badge--8394187342015" 18281 > 18282 Biomimetic Applicator Pads 18283 </a> 18284 </h3> 18285 18286 <div class="product-subtitle"> 18287 3 Pads - Full Set 18288 </div> 18289 18290 <div class="card-information"><span class="caption-large light"></span> 18291<div 18292 class=" 18293 price price--on-sale " 18294> 18295 <div class="price__container"><div class="price__regular"> 18296 <span class="visually-hidden visually-hidden--inline">Regular price</span> 18297 <span class="price-item price-item--regular"> 18298 $129.00 18299 </span> 18300 </div> 18301 <div class="price__sale "> 18302 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 18303 <span class="price-item price-item--sale price-item--last"> 18304 $129.00 18305 </span> 18306 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 18307 <span class="price__compare-price"> 18308 <s class="price-item price-item--regular"> 18309 $164.85 18310 </s> 18311 </span></div> 18312 <small class="unit-price caption hidden"> 18313 <span class="visually-hidden">Unit price</span> 18314 <span class="price-item price-item--last"> 18315 <span></span> 18316 <span aria-hidden="true">/</span> 18317 <span class="visually-hidden"> per </span> 18318 <span> 18319 </span> 18320 </span> 18321 </small> 18322 </div></div> 18323 18324 </div> 18325 </div> 18326 18327<div class="card__badge bottom left"><span 18328 id="Badge--8394187342015" 18329 class="badge badge--bottom-left color-accent-2" 18330 > 18331 21% 18332 </span></div> 18333 </div> 18334 </div> 18335 </div>
18335<script> 18336 (() => { 18337 if (window.cardProductQuickAddVariantFixLoaded) return; 18338 window.cardProductQuickAddVariantFixLoaded = true; 18339 18340 const ADD_TO_CART_TEXT = "Add to cart"; 18341 const SOLD_OUT_TEXT = "Sold out"; 18342 18343 function parseVariants(container) { 18344 if (!container) return []; 18345 18346 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 18347 18348 for (const script of scripts) { 18349 try { 18350 const data = JSON.parse(script.textContent.trim()); 18351 18352 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 18353 return data; 18354 } 18355 18356 if (data && Array.isArray(data.variants)) { 18357 return data.variants; 18358 } 18359 } catch (error) {} 18360 } 18361 18362 return []; 18363 } 18364 18365 function getSelectedOptionValues(container) { 18366 const values = []; 18367 18368 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 18369 const checkedInput = group.querySelector('input[type="radio"]:checked'); 18370 const select = group.querySelector('select'); 18371 18372 if (checkedInput) { 18373 values.push(checkedInput.value); 18374 } else if (select) { 18375 values.push(select.value); 18376 } 18377 }); 18378 18379 return values; 18380 } 18381 18382 function getCurrentVariant(container, form, variants) { 18383 const idInput = form && form.querySelector('[name="id"]'); 18384 const selectedId = idInput && idInput.value; 18385 18386 if (selectedId) { 18387 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 18388 if (byId) return byId; 18389 } 18390 18391 const selectedOptions = getSelectedOptionValues(container); 18392 18393 if (selectedOptions.length) { 18394 return variants.find((variant) => { 18395 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 18396 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 18397 }); 18398 } 18399 18400 return null; 18401 } 18402 18403 function setButtonState(form, variant) { 18404 if (!form) return; 18405 18406 const idInput = form.querySelector('[name="id"]'); 18407 const addButton = form.querySelector('[name="add"]'); 18408 const buttonLabel = 18409 addButton && 18410 (addButton.querySelector('.main-atc__label__text') || 18411 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 18412 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 18413 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 18414 18415 if (!addButton || !idInput || !variant) return; 18416 18417 idInput.value = variant.id; 18418 idInput.disabled = false; 18419 18420 if (spinner) spinner.classList.add('hidden'); 18421 18422 if (variant.available) { 18423 addButton.disabled = false; 18424 addButton.removeAttribute('disabled'); 18425 addButton.removeAttribute('aria-disabled'); 18426 addButton.classList.remove('loading'); 18427 18428 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 18429 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 18430 } else { 18431 addButton.disabled = true; 18432 addButton.setAttribute('disabled', 'disabled'); 18433 addButton.setAttribute('aria-disabled', 'true'); 18434 18435 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 18436 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 18437 } 18438 } 18439 18440 function syncContainer(container) { 18441 if (!container) return; 18442 18443 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 18444 if (!form) return; 18445 18446 const variants = parseVariants(container); 18447 if (!variants.length) return; 18448 18449 const variant = getCurrentVariant(container, form, variants); 18450 if (!variant) return; 18451 18452 setButtonState(form, variant); 18453 } 18454 18455 document.addEventListener('change', (event) => { 18456 const quickAddModal = event.target.closest('quick-add-modal'); 18457 const cardVariantSelects = event.target.closest('card-variant-selects'); 18458 18459 if (quickAddModal) { 18460 setTimeout(() => syncContainer(quickAddModal), 80); 18461 setTimeout(() => syncContainer(quickAddModal), 250); 18462 } 18463 18464 if (cardVariantSelects) { 18465 const card = cardVariantSelects.closest('.card-wrapper'); 18466 if (card) { 18467 setTimeout(() => syncContainer(card), 80); 18468 setTimeout(() => syncContainer(card), 250); 18469 } 18470 } 18471 }); 18472 18473 const observer = new MutationObserver((mutations) => { 18474 mutations.forEach((mutation) => {
18475 mutation.addedNodes.forEach((node) => { 18476 if (!(node instanceof HTMLElement)) return; 18477 18478 if (node.matches && node.matches('quick-add-modal')) { 18479 setTimeout(() => syncContainer(node), 150); 18480 } 18481 18482 node.querySelectorAll && 18483 node.querySelectorAll('quick-add-modal').forEach((modal) => { 18484 setTimeout(() => syncContainer(modal), 150); 18485 }); 18486 }); 18487 }); 18488 }); 18489 18490 observer.observe(document.documentElement, { 18491 childList: true, 18492 subtree: true 18493 }); 18494 18495 document.addEventListener('DOMContentLoaded', () => { 18496 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 18497 }); 18498 })(); 18499</script>
18499 18500 18501 18502 18503 18504 </li> 18505 18506 <li> 18507 18508<div class="card-wrapper product-card-wrapper underline-links-hover"> 18509 <div 18510 class=" 18511 card 18512 card--card 18513 card--media 18514 color-background-1 gradient 18515 18516 18517 18518 card--badge-sided 18519 18520 18521 " 18522 style="--ratio-percent: 100%;" 18523 > 18524 <div 18525 class="card__inner ratio" 18526 style="--ratio-percent: 100%;" 18527 ><div class="card__media"> 18528 <div class="media media--transparent media--hover-effect"> 18529 18530 <img 18531 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844 1254w 18532 " 18533 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45.jpg?v=1780447844&width=533" 18534 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 18535 alt="Balance bundle - Team Doctors" 18536 class="motion-reduce" 18537 18538 loading="lazy" 18539 18540 width="1254" 18541 height="1254" 18542 id='quick-add-8402094031039-image' 18543 > 18544 18545<img 18546 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311 1080w 18547 " 18548 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533" 18549 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 18550 alt="" 18551 class="motion-reduce" 18552 loading="lazy" 18553 width="1080" 18554 height="1080" 18555 ></div> 18556 </div><div class="card__content"> 18557 <div class="card__information"> 18558 <h3 18559 class="card__heading" 18560 18561 > 18562 <a 18563 href="/products/vibeassage%C2%AE-relief-bundle" 18564 id="StandardCardNoMediaLink--8402094031039" 18565 class="full-unstyled-link" 18566 aria-labelledby="StandardCardNoMediaLink--8402094031039 NoMediaStandardBadge--8402094031039" 18567 > 18568 Balance bundle 18569 </a> 18570 </h3> 18571 </div> 18572 <div class="card__badge bottom left"> 18573 18574
18575 <span 18576 id="NoMediaStandardBadge--8402094031039" 18577 class="badge badge--bottom-left color-accent-2" 18578 > 18579 <svg 18580 aria-hidden="true" 18581 focusable="false" 18582 class="icon icon-discount color-foreground-text" 18583 viewBox="0 0 12 12" 18584> 18585 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 18586</svg> 18587<span class='nowrap'>SAVE 9%</span> 18588 </span></div> 18589 </div> 18590 </div> 18591 <div class="card__content"> 18592 <div class="card__information"> 18593 <h3 18594 class="card__heading h5" 18595 18596 id="title--8402094031039" 18597 18598 > 18599 <a 18600 href="/products/vibeassage%C2%AE-relief-bundle" 18601 id="CardLink--8402094031039" 18602 class="full-unstyled-link" 18603 aria-labelledby="CardLink--8402094031039 Badge--8402094031039" 18604 > 18605 Balance bundle 18606 </a> 18607 </h3> 18608 18609 <div class="product-subtitle"> 18610 Comfort Relief Pad + Peak Performance Pad 18611 </div> 18612 18613 <div class="card-information"><span class="caption-large light"></span> 18614<div 18615 class=" 18616 price price--on-sale " 18617> 18618 <div class="price__container"><div class="price__regular"> 18619 <span class="visually-hidden visually-hidden--inline">Regular price</span> 18620 <span class="price-item price-item--regular"> 18621 $99.00 18622 </span> 18623 </div> 18624 <div class="price__sale "> 18625 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 18626 <span class="price-item price-item--sale price-item--last"> 18627 $99.00 18628 </span> 18629 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 18630 <span class="price__compare-price"> 18631 <s class="price-item price-item--regular"> 18632 $109.95 18633 </s> 18634 </span></div> 18635 <small class="unit-price caption hidden"> 18636 <span class="visually-hidden">Unit price</span> 18637 <span class="price-item price-item--last"> 18638 <span></span> 18639 <span aria-hidden="true">/</span> 18640 <span class="visually-hidden"> per </span> 18641 <span> 18642 </span> 18643 </span> 18644 </small> 18645 </div></div> 18646 18647 </div> 18648 </div> 18649 18650<div class="card__badge bottom left"><span 18651 id="Badge--8402094031039" 18652 class="badge badge--bottom-left color-accent-2" 18653 > 18654 9% 18655 </span></div> 18656 </div> 18657 </div> 18658 </div>
18658<script> 18659 (() => { 18660 if (window.cardProductQuickAddVariantFixLoaded) return; 18661 window.cardProductQuickAddVariantFixLoaded = true; 18662 18663 const ADD_TO_CART_TEXT = "Add to cart"; 18664 const SOLD_OUT_TEXT = "Sold out"; 18665 18666 function parseVariants(container) { 18667 if (!container) return []; 18668 18669 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 18670 18671 for (const script of scripts) { 18672 try { 18673 const data = JSON.parse(script.textContent.trim()); 18674 18675 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 18676 return data; 18677 } 18678 18679 if (data && Array.isArray(data.variants)) { 18680 return data.variants; 18681 } 18682 } catch (error) {} 18683 } 18684 18685 return []; 18686 } 18687 18688 function getSelectedOptionValues(container) { 18689 const values = []; 18690 18691 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 18692 const checkedInput = group.querySelector('input[type="radio"]:checked'); 18693 const select = group.querySelector('select'); 18694 18695 if (checkedInput) { 18696 values.push(checkedInput.value); 18697 } else if (select) { 18698 values.push(select.value); 18699 } 18700 }); 18701 18702 return values; 18703 } 18704 18705 function getCurrentVariant(container, form, variants) { 18706 const idInput = form && form.querySelector('[name="id"]'); 18707 const selectedId = idInput && idInput.value; 18708 18709 if (selectedId) { 18710 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 18711 if (byId) return byId; 18712 } 18713 18714 const selectedOptions = getSelectedOptionValues(container); 18715 18716 if (selectedOptions.length) { 18717 return variants.find((variant) => { 18718 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 18719 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 18720 }); 18721 } 18722 18723 return null; 18724 } 18725 18726 function setButtonState(form, variant) { 18727 if (!form) return; 18728 18729 const idInput = form.querySelector('[name="id"]'); 18730 const addButton = form.querySelector('[name="add"]'); 18731 const buttonLabel = 18732 addButton && 18733 (addButton.querySelector('.main-atc__label__text') || 18734 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 18735 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 18736 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 18737 18738 if (!addButton || !idInput || !variant) return; 18739 18740 idInput.value = variant.id; 18741 idInput.disabled = false; 18742 18743 if (spinner) spinner.classList.add('hidden'); 18744 18745 if (variant.available) { 18746 addButton.disabled = false; 18747 addButton.removeAttribute('disabled'); 18748 addButton.removeAttribute('aria-disabled'); 18749 addButton.classList.remove('loading'); 18750 18751 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 18752 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 18753 } else { 18754 addButton.disabled = true; 18755 addButton.setAttribute('disabled', 'disabled'); 18756 addButton.setAttribute('aria-disabled', 'true'); 18757 18758 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 18759 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 18760 } 18761 } 18762 18763 function syncContainer(container) { 18764 if (!container) return; 18765 18766 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 18767 if (!form) return; 18768 18769 const variants = parseVariants(container); 18770 if (!variants.length) return; 18771 18772 const variant = getCurrentVariant(container, form, variants); 18773 if (!variant) return; 18774 18775 setButtonState(form, variant); 18776 } 18777 18778 document.addEventListener('change', (event) => { 18779 const quickAddModal = event.target.closest('quick-add-modal'); 18780 const cardVariantSelects = event.target.closest('card-variant-selects'); 18781 18782 if (quickAddModal) { 18783 setTimeout(() => syncContainer(quickAddModal), 80); 18784 setTimeout(() => syncContainer(quickAddModal), 250); 18785 } 18786 18787 if (cardVariantSelects) { 18788 const card = cardVariantSelects.closest('.card-wrapper'); 18789 if (card) { 18790 setTimeout(() => syncContainer(card), 80); 18791 setTimeout(() => syncContainer(card), 250); 18792 } 18793 } 18794 }); 18795 18796 const observer = new MutationObserver((mutations) => { 18797 mutations.forEach((mutation) => {
18798 mutation.addedNodes.forEach((node) => { 18799 if (!(node instanceof HTMLElement)) return; 18800 18801 if (node.matches && node.matches('quick-add-modal')) { 18802 setTimeout(() => syncContainer(node), 150); 18803 } 18804 18805 node.querySelectorAll && 18806 node.querySelectorAll('quick-add-modal').forEach((modal) => { 18807 setTimeout(() => syncContainer(modal), 150); 18808 }); 18809 }); 18810 }); 18811 }); 18812 18813 observer.observe(document.documentElement, { 18814 childList: true, 18815 subtree: true 18816 }); 18817 18818 document.addEventListener('DOMContentLoaded', () => { 18819 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 18820 }); 18821 })(); 18822</script>
18822 18823 18824 18825 18826 18827 </li> 18828 18829 <li> 18830 18831<div class="card-wrapper product-card-wrapper underline-links-hover"> 18832 <div 18833 class=" 18834 card 18835 card--card 18836 card--media 18837 color-background-1 gradient 18838 18839 18840 18841 card--badge-sided 18842 18843 18844 " 18845 style="--ratio-percent: 100%;" 18846 > 18847 <div 18848 class="card__inner ratio" 18849 style="--ratio-percent: 100%;" 18850 ><div class="card__media"> 18851 <div class="media media--transparent media--hover-effect"> 18852 18853 <img 18854 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844 1254w 18855 " 18856 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_2.jpg?v=1780447844&width=533" 18857 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 18858 alt="Relief Bundle - Team Doctors" 18859 class="motion-reduce" 18860 18861 loading="lazy" 18862 18863 width="1254" 18864 height="1254" 18865 id='quick-add-8433935974591-image' 18866 > 18867 18868<img 18869 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311 1080w 18870 " 18871 src="//teamdoctors.com/cdn/shop/files/Vibassage_Red_CrossPad_Image_Shopify_V2_Draft_20260411_ef19b072-da76-4c40-90c6-c2f8ac372781.jpg?v=1778771311&width=533" 18872 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 18873 alt="" 18874 class="motion-reduce" 18875 loading="lazy" 18876 width="1080" 18877 height="1080" 18878 ></div> 18879 </div><div class="card__content"> 18880 <div class="card__information"> 18881 <h3 18882 class="card__heading" 18883 18884 > 18885 <a 18886 href="/products/relief-bundle" 18887 id="StandardCardNoMediaLink--8433935974591" 18888 class="full-unstyled-link" 18889 aria-labelledby="StandardCardNoMediaLink--8433935974591 NoMediaStandardBadge--8433935974591" 18890 > 18891 Relief Bundle 18892 </a> 18893 </h3> 18894 </div> 18895 <div class="card__badge bottom left"> 18896 18897
18898 <span 18899 id="NoMediaStandardBadge--8433935974591" 18900 class="badge badge--bottom-left color-accent-2" 18901 > 18902 <svg 18903 aria-hidden="true" 18904 focusable="false" 18905 class="icon icon-discount color-foreground-text" 18906 viewBox="0 0 12 12" 18907> 18908 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 18909</svg> 18910<span class='nowrap'>SAVE 9%</span> 18911 </span></div> 18912 </div> 18913 </div> 18914 <div class="card__content"> 18915 <div class="card__information"> 18916 <h3 18917 class="card__heading h5" 18918 18919 id="title--8433935974591" 18920 18921 > 18922 <a 18923 href="/products/relief-bundle" 18924 id="CardLink--8433935974591" 18925 class="full-unstyled-link" 18926 aria-labelledby="CardLink--8433935974591 Badge--8433935974591" 18927 > 18928 Relief Bundle 18929 </a> 18930 </h3> 18931 18932 <div class="product-subtitle"> 18933 Comfort Relief Pad + Core Recovery Pad 18934 </div> 18935 18936 <div class="card-information"><span class="caption-large light"></span> 18937<div 18938 class=" 18939 price price--on-sale " 18940> 18941 <div class="price__container"><div class="price__regular"> 18942 <span class="visually-hidden visually-hidden--inline">Regular price</span> 18943 <span class="price-item price-item--regular"> 18944 $99.00 18945 </span> 18946 </div> 18947 <div class="price__sale "> 18948 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 18949 <span class="price-item price-item--sale price-item--last"> 18950 $99.00 18951 </span> 18952 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 18953 <span class="price__compare-price"> 18954 <s class="price-item price-item--regular"> 18955 $109.90 18956 </s> 18957 </span></div> 18958 <small class="unit-price caption hidden"> 18959 <span class="visually-hidden">Unit price</span> 18960 <span class="price-item price-item--last"> 18961 <span></span> 18962 <span aria-hidden="true">/</span> 18963 <span class="visually-hidden"> per </span> 18964 <span> 18965 </span> 18966 </span> 18967 </small> 18968 </div></div> 18969 18970 </div> 18971 </div> 18972 18973<div class="card__badge bottom left"><span 18974 id="Badge--8433935974591" 18975 class="badge badge--bottom-left color-accent-2" 18976 > 18977 9% 18978 </span></div> 18979 </div> 18980 </div> 18981 </div>
18981<script> 18982 (() => { 18983 if (window.cardProductQuickAddVariantFixLoaded) return; 18984 window.cardProductQuickAddVariantFixLoaded = true; 18985 18986 const ADD_TO_CART_TEXT = "Add to cart"; 18987 const SOLD_OUT_TEXT = "Sold out"; 18988 18989 function parseVariants(container) { 18990 if (!container) return []; 18991 18992 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 18993 18994 for (const script of scripts) { 18995 try { 18996 const data = JSON.parse(script.textContent.trim()); 18997 18998 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 18999 return data; 19000 } 19001 19002 if (data && Array.isArray(data.variants)) { 19003 return data.variants; 19004 } 19005 } catch (error) {} 19006 } 19007 19008 return []; 19009 } 19010 19011 function getSelectedOptionValues(container) { 19012 const values = []; 19013 19014 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 19015 const checkedInput = group.querySelector('input[type="radio"]:checked'); 19016 const select = group.querySelector('select'); 19017 19018 if (checkedInput) { 19019 values.push(checkedInput.value); 19020 } else if (select) { 19021 values.push(select.value); 19022 } 19023 }); 19024 19025 return values; 19026 } 19027 19028 function getCurrentVariant(container, form, variants) { 19029 const idInput = form && form.querySelector('[name="id"]'); 19030 const selectedId = idInput && idInput.value; 19031 19032 if (selectedId) { 19033 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 19034 if (byId) return byId; 19035 } 19036 19037 const selectedOptions = getSelectedOptionValues(container); 19038 19039 if (selectedOptions.length) { 19040 return variants.find((variant) => { 19041 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 19042 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 19043 }); 19044 } 19045 19046 return null; 19047 } 19048 19049 function setButtonState(form, variant) { 19050 if (!form) return; 19051 19052 const idInput = form.querySelector('[name="id"]'); 19053 const addButton = form.querySelector('[name="add"]'); 19054 const buttonLabel = 19055 addButton && 19056 (addButton.querySelector('.main-atc__label__text') || 19057 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 19058 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 19059 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 19060 19061 if (!addButton || !idInput || !variant) return; 19062 19063 idInput.value = variant.id; 19064 idInput.disabled = false; 19065 19066 if (spinner) spinner.classList.add('hidden'); 19067 19068 if (variant.available) { 19069 addButton.disabled = false; 19070 addButton.removeAttribute('disabled'); 19071 addButton.removeAttribute('aria-disabled'); 19072 addButton.classList.remove('loading'); 19073 19074 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 19075 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 19076 } else { 19077 addButton.disabled = true; 19078 addButton.setAttribute('disabled', 'disabled'); 19079 addButton.setAttribute('aria-disabled', 'true'); 19080 19081 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 19082 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 19083 } 19084 } 19085 19086 function syncContainer(container) { 19087 if (!container) return; 19088 19089 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 19090 if (!form) return; 19091 19092 const variants = parseVariants(container); 19093 if (!variants.length) return; 19094 19095 const variant = getCurrentVariant(container, form, variants); 19096 if (!variant) return; 19097 19098 setButtonState(form, variant); 19099 } 19100 19101 document.addEventListener('change', (event) => { 19102 const quickAddModal = event.target.closest('quick-add-modal'); 19103 const cardVariantSelects = event.target.closest('card-variant-selects'); 19104 19105 if (quickAddModal) { 19106 setTimeout(() => syncContainer(quickAddModal), 80); 19107 setTimeout(() => syncContainer(quickAddModal), 250); 19108 } 19109 19110 if (cardVariantSelects) { 19111 const card = cardVariantSelects.closest('.card-wrapper'); 19112 if (card) { 19113 setTimeout(() => syncContainer(card), 80); 19114 setTimeout(() => syncContainer(card), 250); 19115 } 19116 } 19117 }); 19118 19119 const observer = new MutationObserver((mutations) => { 19120 mutations.forEach((mutation) => {
19121 mutation.addedNodes.forEach((node) => { 19122 if (!(node instanceof HTMLElement)) return; 19123 19124 if (node.matches && node.matches('quick-add-modal')) { 19125 setTimeout(() => syncContainer(node), 150); 19126 } 19127 19128 node.querySelectorAll && 19129 node.querySelectorAll('quick-add-modal').forEach((modal) => { 19130 setTimeout(() => syncContainer(modal), 150); 19131 }); 19132 }); 19133 }); 19134 }); 19135 19136 observer.observe(document.documentElement, { 19137 childList: true, 19138 subtree: true 19139 }); 19140 19141 document.addEventListener('DOMContentLoaded', () => { 19142 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 19143 }); 19144 })(); 19145</script>
19145 19146 19147 19148 19149 19150 </li> 19151 19152 <li> 19153 19154<div class="card-wrapper product-card-wrapper underline-links-hover"> 19155 <div 19156 class=" 19157 card 19158 card--card 19159 card--media 19160 color-background-1 gradient 19161 19162 19163 19164 card--badge-sided 19165 19166 19167 " 19168 style="--ratio-percent: 100%;" 19169 > 19170 <div 19171 class="card__inner ratio" 19172 style="--ratio-percent: 100%;" 19173 ><div class="card__media"> 19174 <div class="media media--transparent media--hover-effect"> 19175 19176 <img 19177 srcset="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=165 165w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=360 360w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=533 533w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=720 720w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=940 940w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=1066 1066w,//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844 1254w 19178 " 19179 src="//teamdoctors.com/cdn/shop/files/WhatsApp_Image_2026-06-03_at_07.06.45_1.jpg?v=1780447844&width=533" 19180 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 19181 alt="Performance Bundle - Team Doctors" 19182 class="motion-reduce" 19183 19184 loading="lazy" 19185 19186 width="1254" 19187 height="1254" 19188 id='quick-add-8433936007359-image' 19189 > 19190 19191<img 19192 srcset="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=165 165w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=360 360w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=533 533w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=720 720w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=940 940w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=1066 1066w,//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322 1080w 19193 " 19194 src="//teamdoctors.com/cdn/shop/files/Vibassage_Yellow_CrossPad_Image_Shopify_V2_Draft_20260411_8d4411ea-7ce7-4dcd-b34b-6738fa708be0.jpg?v=1778771322&width=533" 19195 sizes="(min-width: 1600px) 367px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 19196 alt="" 19197 class="motion-reduce" 19198 loading="lazy" 19199 width="1080" 19200 height="1080" 19201 ></div> 19202 </div><div class="card__content"> 19203 <div class="card__information"> 19204 <h3 19205 class="card__heading" 19206 19207 > 19208 <a 19209 href="/products/performance-bundle" 19210 id="StandardCardNoMediaLink--8433936007359" 19211 class="full-unstyled-link" 19212 aria-labelledby="StandardCardNoMediaLink--8433936007359 NoMediaStandardBadge--8433936007359" 19213 > 19214 Performance Bundle 19215 </a> 19216 </h3> 19217 </div> 19218 <div class="card__badge bottom left"> 19219 19220
19221 <span 19222 id="NoMediaStandardBadge--8433936007359" 19223 class="badge badge--bottom-left color-accent-2" 19224 > 19225 <svg 19226 aria-hidden="true" 19227 focusable="false" 19228 class="icon icon-discount color-foreground-text" 19229 viewBox="0 0 12 12" 19230> 19231 <path fill-rule="evenodd" clip-rule="evenodd" d="M7 0h3a2 2 0 012 2v3a1 1 0 01-.3.7l-6 6a1 1 0 01-1.4 0l-4-4a1 1 0 010-1.4l6-6A1 1 0 017 0zm2 2a1 1 0 102 0 1 1 0 00-2 0z" fill="currentColor"> 19232</svg> 19233<span class='nowrap'>SAVE 9%</span> 19234 </span></div> 19235 </div> 19236 </div> 19237 <div class="card__content"> 19238 <div class="card__information"> 19239 <h3 19240 class="card__heading h5" 19241 19242 id="title--8433936007359" 19243 19244 > 19245 <a 19246 href="/products/performance-bundle" 19247 id="CardLink--8433936007359" 19248 class="full-unstyled-link" 19249 aria-labelledby="CardLink--8433936007359 Badge--8433936007359" 19250 > 19251 Performance Bundle 19252 </a> 19253 </h3> 19254 19255 <div class="product-subtitle"> 19256 Core Cecovery Pad + Peak Performance Pad 19257 </div> 19258 19259 <div class="card-information"><span class="caption-large light"></span> 19260<div 19261 class=" 19262 price price--on-sale " 19263> 19264 <div class="price__container"><div class="price__regular"> 19265 <span class="visually-hidden visually-hidden--inline">Regular price</span> 19266 <span class="price-item price-item--regular"> 19267 $99.00 19268 </span> 19269 </div> 19270 <div class="price__sale "> 19271 <span class="visually-hidden visually-hidden--inline compare-price-label">Regular price</span> 19272 <span class="price-item price-item--sale price-item--last"> 19273 $99.00 19274 </span> 19275 <span class="visually-hidden visually-hidden--inline regular-price-label">Sale price</span> 19276 <span class="price__compare-price"> 19277 <s class="price-item price-item--regular"> 19278 $109.90 19279 </s> 19280 </span></div> 19281 <small class="unit-price caption hidden"> 19282 <span class="visually-hidden">Unit price</span> 19283 <span class="price-item price-item--last"> 19284 <span></span> 19285 <span aria-hidden="true">/</span> 19286 <span class="visually-hidden"> per </span> 19287 <span> 19288 </span> 19289 </span> 19290 </small> 19291 </div></div> 19292 19293 </div> 19294 </div> 19295 19296<div class="card__badge bottom left"><span 19297 id="Badge--8433936007359" 19298 class="badge badge--bottom-left color-accent-2" 19299 > 19300 9% 19301 </span></div> 19302 </div> 19303 </div> 19304 </div>
19304<script> 19305 (() => { 19306 if (window.cardProductQuickAddVariantFixLoaded) return; 19307 window.cardProductQuickAddVariantFixLoaded = true; 19308 19309 const ADD_TO_CART_TEXT = "Add to cart"; 19310 const SOLD_OUT_TEXT = "Sold out"; 19311 19312 function parseVariants(container) { 19313 if (!container) return []; 19314 19315 const scripts = Array.from(container.querySelectorAll('script[type="application/json"]')); 19316 19317 for (const script of scripts) { 19318 try { 19319 const data = JSON.parse(script.textContent.trim()); 19320 19321 if (Array.isArray(data) && data.some((item) => item && item.id && Object.prototype.hasOwnProperty.call(item, 'available'))) { 19322 return data; 19323 } 19324 19325 if (data && Array.isArray(data.variants)) { 19326 return data.variants; 19327 } 19328 } catch (error) {} 19329 } 19330 19331 return []; 19332 } 19333 19334 function getSelectedOptionValues(container) { 19335 const values = []; 19336 19337 container.querySelectorAll('fieldset, .product-form__input').forEach((group) => { 19338 const checkedInput = group.querySelector('input[type="radio"]:checked'); 19339 const select = group.querySelector('select'); 19340 19341 if (checkedInput) { 19342 values.push(checkedInput.value); 19343 } else if (select) { 19344 values.push(select.value); 19345 } 19346 }); 19347 19348 return values; 19349 } 19350 19351 function getCurrentVariant(container, form, variants) { 19352 const idInput = form && form.querySelector('[name="id"]'); 19353 const selectedId = idInput && idInput.value; 19354 19355 if (selectedId) { 19356 const byId = variants.find((variant) => String(variant.id) === String(selectedId)); 19357 if (byId) return byId; 19358 } 19359 19360 const selectedOptions = getSelectedOptionValues(container); 19361 19362 if (selectedOptions.length) { 19363 return variants.find((variant) => { 19364 const options = variant.options || [variant.option1, variant.option2, variant.option3].filter(Boolean); 19365 return selectedOptions.every((value, index) => String(options[index]) === String(value)); 19366 }); 19367 } 19368 19369 return null; 19370 } 19371 19372 function setButtonState(form, variant) { 19373 if (!form) return; 19374 19375 const idInput = form.querySelector('[name="id"]'); 19376 const addButton = form.querySelector('[name="add"]'); 19377 const buttonLabel = 19378 addButton && 19379 (addButton.querySelector('.main-atc__label__text') || 19380 addButton.querySelector('span:not(.sold-out-message):not(.icon-wrap)')); 19381 const soldOutMessage = addButton && addButton.querySelector('.sold-out-message'); 19382 const spinner = addButton && addButton.querySelector('.loading-overlay__spinner'); 19383 19384 if (!addButton || !idInput || !variant) return; 19385 19386 idInput.value = variant.id; 19387 idInput.disabled = false; 19388 19389 if (spinner) spinner.classList.add('hidden'); 19390 19391 if (variant.available) { 19392 addButton.disabled = false; 19393 addButton.removeAttribute('disabled'); 19394 addButton.removeAttribute('aria-disabled'); 19395 addButton.classList.remove('loading'); 19396 19397 if (buttonLabel) buttonLabel.textContent = ADD_TO_CART_TEXT; 19398 if (soldOutMessage) soldOutMessage.classList.add('hidden'); 19399 } else { 19400 addButton.disabled = true; 19401 addButton.setAttribute('disabled', 'disabled'); 19402 addButton.setAttribute('aria-disabled', 'true'); 19403 19404 if (buttonLabel) buttonLabel.textContent = SOLD_OUT_TEXT; 19405 if (soldOutMessage) soldOutMessage.classList.remove('hidden'); 19406 } 19407 } 19408 19409 function syncContainer(container) { 19410 if (!container) return; 19411 19412 const form = container.querySelector('form[action*="/cart/add"], form[data-type="add-to-cart-form"]'); 19413 if (!form) return; 19414 19415 const variants = parseVariants(container); 19416 if (!variants.length) return; 19417 19418 const variant = getCurrentVariant(container, form, variants); 19419 if (!variant) return; 19420 19421 setButtonState(form, variant); 19422 } 19423 19424 document.addEventListener('change', (event) => { 19425 const quickAddModal = event.target.closest('quick-add-modal'); 19426 const cardVariantSelects = event.target.closest('card-variant-selects'); 19427 19428 if (quickAddModal) { 19429 setTimeout(() => syncContainer(quickAddModal), 80); 19430 setTimeout(() => syncContainer(quickAddModal), 250); 19431 } 19432 19433 if (cardVariantSelects) { 19434 const card = cardVariantSelects.closest('.card-wrapper'); 19435 if (card) { 19436 setTimeout(() => syncContainer(card), 80); 19437 setTimeout(() => syncContainer(card), 250); 19438 } 19439 } 19440 }); 19441 19442 const observer = new MutationObserver((mutations) => { 19443 mutations.forEach((mutation) => {
19444 mutation.addedNodes.forEach((node) => { 19445 if (!(node instanceof HTMLElement)) return; 19446 19447 if (node.matches && node.matches('quick-add-modal')) { 19448 setTimeout(() => syncContainer(node), 150); 19449 } 19450 19451 node.querySelectorAll && 19452 node.querySelectorAll('quick-add-modal').forEach((modal) => { 19453 setTimeout(() => syncContainer(modal), 150); 19454 }); 19455 }); 19456 }); 19457 }); 19458 19459 observer.observe(document.documentElement, { 19460 childList: true, 19461 subtree: true 19462 }); 19463 19464 document.addEventListener('DOMContentLoaded', () => { 19465 document.querySelectorAll('quick-add-modal, .card-wrapper').forEach(syncContainer); 19466 }); 19467 })(); 19468</script>
19468 19469 19470 19471 19472 19473 </li> 19474 19475 19476</ul> 19477 </div> 19478 </li></ul> 19479 </div> 19480 </div> 19481 </div> 19482 </details> 19483</products-mega-menu> 19484 19485 19486</li><li> 19487 <header-menu> 19488 <details id="Details-HeaderMenu-3"> 19489 <summary class="header__menu-item header__menu-item--main list-menu__item link focus-inset"> 19490 <span class="header__active-menu-item">Discover</span> 19491 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 19492 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 19493</svg> 19494 19495 </summary> 19496 <ul id="HeaderMenu-MenuList-3" class="header__submenu list-menu list-menu--disclosure gradient caption-large motion-reduce global-settings-popup" role="list" tabindex="-1"><li><a href="/pages/about-us" class="menu-discover header__menu-item list-menu__item link link--text focus-inset caption-large" aria-current="page"> 19497 Learn More 19498 </a></li><li><a href="/pages/vibeassage-video-tutorials" class="menu-discover header__menu-item list-menu__item link link--text focus-inset caption-large"> 19499 Tutorials 19500 </a></li><li><a href="/pages/contact-us" class="menu-discover header__menu-item list-menu__item link link--text focus-inset caption-large"> 19501 Contact Us 19502 </a></li></ul> 19503 </details> 19504 </header-menu> 19505 19506</li><li><a href="/pages/contact-us" class="header__menu-item header__menu-item--main list-menu__item link link--text focus-inset"> 19507 <span>Contact Us</span> 19508 </a></li></ul> 19509 </nav> 19510 19511<a href="/" 19512 class="header__heading-link link link--text focus-inset media media--transparent ratio"style="--ratio-percent: 15.888194189040085%" 19513 19514 ><img src="//teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Banner_-_Light_Background_copy.png?v=1776239745&width=500" alt="Team Doctors" srcset="//teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Banner_-_Light_Background_copy.png?v=1776239745&width=50 50w, //teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Banner_-_Light_Background_copy.png?v=1776239745&width=100 100w, //teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Banner_-_Light_Background_copy.png?v=1776239745&width=150 150w, //teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Banner_-_Light_Background_copy.png?v=1776239745&width=200 200w, //teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Banner_-_Light_Background_copy.png?v=1776239745&width=250 250w, //teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Banner_-_Light_Background_copy.png?v=1776239745&width=300 300w, //teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Banner_-_Light_Background_copy.png?v=1776239745&width=400 400w, //teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Banner_-_Light_Background_copy.png?v=1776239745&width=500 500w" width="200" height="31.776388378080174" class="header__heading-logo header__heading-logo--main"> 19515</a><div class="header__icons"> 19516 <details-modal class="header__search"> 19517 <details> 19518 <summary class="header__icon header__icon--search header__icon--summary link focus-inset modal__toggle" aria-haspopup="dialog" aria-label="Search"> 19519 <span> 19520 <svg class="modal__toggle-open icon icon-search" aria-hidden="true" focusable="false"> 19521 <use href="#icon-search"> 19522 </svg> 19523 <svg class="modal__toggle-close icon icon-close" aria-hidden="true" focusable="false"> 19524 <use href="#icon-close"> 19525 </svg> 19526 </span> 19527 </summary> 19528 <div class="search-modal modal__content gradient" role="dialog" aria-modal="true" aria-label="Search"> 19529 <div class="modal-overlay"></div> 19530 <div class="search-modal__content search-modal__content--right search-modal__content-bottom" tabindex="-1"><predictive-search class="search-modal__form" data-main='false' data-loading-text="Loading..."><form action="/search" method="get" role="search" class="search search-modal__form search-modal__form--border-light search-modal__form--polyfill search-modal__form--predictive" data-modal="RfaaO6tc35zLKcDRUCltKqx5sXmgAgKrTClqXyYJb4nkV8I/xi1BjoFOTSDWYyy7mYpaz8tdnUIuo33R4J1YMCHzsxfvRzZwl1pYsCp5+ZuhAvfjIMeuWwVa/Z18t/GmA6L4Wm7s3a5VRGakCsshnlvnWEZ6+yhYLS7h7Kg2oDgY9rhPIOdVKLYbOPSC+DKe0ST+z2XaAEg/X/70GpBodknSyBSv780BkNSlsn53aBN6G01kcGetmqrBwLdIKuSbtvUEVz6c6I9vwn2Ni5mGBYObqP9R5Gu85tetSC3V4z2OWL6Xj1w2hcfcITSk615rP4GL8XEH3aej6YsmyAYMs0Ux/t9IFZPbwreRhb4sjhAhW67LoVTOYXnOPbm6/AXr6RmBPpj6l6/DgaBGR4ednszWnbI03fR+Kvp0cqFcsmNpCMxrl1X3oCjFizIw8yDE"> 19531 <div class="field"> 19532 <input class="search__input field__input" 19533 id="Search-In-Modal" 19534 type="search" 19535 name="q" 19536 value="" 19537 placeholder="Search"role="combobox" 19538 aria-expanded="false" 19539 aria-owns="predictive-search-results" 19540 aria-controls="predictive-search-results" 19541 aria-haspopup="listbox"
19542 aria-autocomplete="list" 19543 autocorrect="off" 19544 autocomplete="off" 19545 autocapitalize="off" 19546 spellcheck="false"> 19547 <label class="field__label" for="Search-In-Modal">Search</label> 19548 <input type="hidden" name="options[prefix]" value="last"> 19549 <button type="reset" class="reset__button field__button hidden" aria-label="Clear search term"> 19550 <svg class="icon icon-close" aria-hidden="true" focusable="false"> 19551 <use xlink:href="#icon-reset"> 19552 </svg> 19553 </button> 19554 <button class="search__button field__button" aria-label="Search"> 19555 <svg class="icon icon-search" aria-hidden="true" focusable="false"> 19556 <use href="#icon-search"> 19557 </svg> 19558 </button> 19559 </div><div class="predictive-search predictive-search--header" tabindex="-1" data-predictive-search> 19560 <div class="predictive-search__loading-state"> 19561 <svg aria-hidden="true" focusable="false" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 19562 <circle class="path" fill="none" stroke-width="6" cx="33" cy="33" r="30"></circle> 19563 </svg> 19564 </div> 19565 </div> 19566 19567 <span class="predictive-search-status visually-hidden" role="status" aria-hidden="true"></span></form></predictive-search><button type="button" class="search-modal__close-button modal__close-button link link--text focus-inset" aria-label="Close"> 19568 <svg class="icon icon-close" aria-hidden="true" focusable="false"> 19569 <use href="#icon-close"> 19570 </svg> 19571 </button> 19572 </div> 19573 </div> 19574 </details> 19575 </details-modal><a href="https://teamdoctors.com/customer_authentication/redirect?locale=en®ion_country=US" class="header__icon header__icon--account link focus-inset small-hide"> 19576 <svg 19577 xmlns="http://www.w3.org/2000/svg" 19578 aria-hidden="true" 19579 focusable="false" 19580 class="icon icon-account" 19581 fill="none" 19582 viewBox="0 0 18 19" 19583> 19584 <path fill-rule="evenodd" clip-rule="evenodd" d="M6 4.5a3 3 0 116 0 3 3 0 01-6 0zm3-4a4 4 0 100 8 4 4 0 000-8zm5.58 12.15c1.12.82 1.83 2.24 1.91 4.85H1.51c.08-2.6.79-4.03 1.9-4.85C4.66 11.75 6.5 11.5 9 11.5s4.35.26 5.58 1.15zM9 10.5c-2.5 0-4.65.24-6.17 1.35C1.27 12.98.5 14.93.5 18v.5h17V18c0-3.07-.77-5.02-2.33-6.15-1.52-1.1-3.67-1.35-6.17-1.35z" fill="currentColor"> 19585</svg> 19586 19587 <span class="visually-hidden">Log in</span> 19588 </a><a href="/cart" class="header__icon header__icon--cart link focus-inset" id="cart-icon-bubble"> 19589 <svg class="icon icon-cart" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 35.53 44.83" style='transform: scale(0.9);'> 19590 <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M12.36,10.93l29.38-.08q.72,16.41,1.45,32.8H10.66Z" transform="translate(-9.16 -0.32)"/> 19591 <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M19.39,10.85V9.52a7.7,7.7,0,1,1,15.39,0v1.33" transform="translate(-9.16 -0.32)"/> 19592 <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M19.12,15.46a7.7,7.7,0,0,0,15.08,0" transform="translate(-9.16 -0.32)"/> 19593 </svg> 19594<span class="visually-hidden">Cart</span></a> 19595 </div> 19596 </header> 19597</sticky-header> 19598
19599<script type="application/ld+json"> 19600 { 19601 "@context": "http://schema.org", 19602 "@type": "Organization", 19603 "name": "Team Doctors", 19604 19605 "logo": "https:\/\/teamdoctors.com\/cdn\/shop\/files\/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Banner_-_Light_Background_copy.png?v=1776239745\u0026width=500", 19606 19607 "sameAs": [ 19608 "", 19609 "", 19610 "", 19611 "", 19612 "", 19613 "", 19614 "", 19615 "", 19616 "" 19617 ], 19618 "url": "https:\/\/teamdoctors.com\/pages\/about-us" 19619 } 19620</script>
19620 19621</div> 19622<!-- END sections: header-group --> 19623<div id="shopify-section-cart-drawer" class="shopify-section"> 19624 19625<style> 19626 .drawer { 19627 visibility: hidden; 19628 } 19629 19630 19631 19632</style> 19633 19634<cart-drawer class="drawer is-empty cart-drawer--desktop-width-normal cart-drawer--mobile-width-full" data-type='modal'> 19635 <div id="CartDrawer" class="cart-drawer"> 19636 <div id="CartDrawer-Overlay" class="cart-drawer__overlay"></div> 19637 <div 19638 class="drawer__inner" 19639 role="dialog" 19640 aria-modal="true" 19641 aria-label="Your cart" 19642 tabindex="-1" 19643 ><div class="drawer__inner-empty"> 19644 <div class="cart-drawer__warnings center"> 19645 <div class="cart-drawer__empty-content"> 19646 <h2 class="cart__empty-text">Your cart is empty</h2> 19647 <button 19648 class="drawer__close" 19649 type="button" 19650 onclick="this.closest('cart-drawer').close()" 19651 aria-label="Close" 19652 > 19653 <svg 19654 xmlns="http://www.w3.org/2000/svg" 19655 aria-hidden="true" 19656 focusable="false" 19657 class="icon icon-close" 19658 fill="none" 19659 viewBox="0 0 18 17" 19660> 19661 <path d="M.865 15.978a.5.5 0 00.707.707l7.433-7.431 7.579 7.282a.501.501 0 00.846-.37.5.5 0 00-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 10-.707-.708L8.991 7.853 1.413.573a.5.5 0 10-.693.72l7.563 7.268-7.418 7.417z" fill="currentColor"> 19662</svg> 19663 19664 </button> 19665 19666 <a href="/collections/all" class="button"> 19667 Continue shopping 19668 </a> 19669 19670<p class="cart__login-title h3">Have an account?</p> 19671 <p class="cart__login-paragraph"> 19672 <a href="https://teamdoctors.com/customer_authentication/redirect?locale=en®ion_country=US" class="link underlined-link">Log in</a> to check out faster. 19673 </p></div> 19674 </div></div><div class="drawer__header" style='--alignment:flex-start'> 19675 <h2 class="drawer__heading"> 19676 19677 Cart ⢠0 items 19678 </h2> 19679 <button 19680 class="drawer__close" 19681 type="button" 19682 onclick="this.closest('cart-drawer').close()" 19683 aria-label="Close" 19684 > 19685 <svg 19686 xmlns="http://www.w3.org/2000/svg" 19687 aria-hidden="true" 19688 focusable="false" 19689 class="icon icon-close" 19690 fill="none" 19691 viewBox="0 0 18 17" 19692> 19693 <path d="M.865 15.978a.5.5 0 00.707.707l7.433-7.431 7.579 7.282a.501.501 0 00.846-.37.5.5 0 00-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 10-.707-.708L8.991 7.853 1.413.573a.5.5 0 10-.693.72l7.563 7.268-7.418 7.417z" fill="currentColor"> 19694</svg> 19695 19696 </button> 19697 </div> 19698 <div class="cart-drawer__body"> 19699 19700 19701 19702 19703 19704 <div class='cart-timer color-inverse' style="--font-size:1.4rem;--margin-top: 0.0rem;--margin-bottom: 1.5rem;" > 19705 <strong>Cart reserved for 19706 <countdown-timer data-duration="300"></countdown-timer> 19707 </strong> 19708 </div> 19709 19710 19711 19712 <cart-drawer-items 19713 19714 class=" is-empty" 19715 19716 style="--image-size: 20%;--title-size:1.5rem;--margin-top: 2.1rem;--margin-bottom: 2.1rem;" 19717 19718 > 19719 <form 19720 action="/cart" 19721 id="CartDrawer-Form" 19722 class="cart__contents cart-drawer__form" 19723 method="post" 19724 > 19725 <div id="CartDrawer-CartItems" class="drawer__contents js-contents"><p id="CartDrawer-LiveRegionText" class="visually-hidden" role="status"></p> 19726 <p id="CartDrawer-LineItemStatus" class="visually-hidden" aria-hidden="true" role="status"> 19727 Loading... 19728 </p> 19729 </div> 19730 <div id="CartDrawer-CartErrors" role="alert"></div> 19731 </form> 19732 </cart-drawer-items> 19733 19734 19735 19736 19737 19738 19739 19740 19741 </div> 19742 <div class="drawer__footer"> 19743 19744 19745 19746 19747 19748 19749 <div class="cart-drawer__footer" style="--margin-top: 1.5rem;--margin-bottom: 1.5rem;" > 19750 <div class="cart-drawer__totals" role="status" style='--spacing:1.0rem;'> 19751 19752 19753 19754 19755 19756 19757 <p class='cart-drawer__totals__row cart-drawer__totals__row--spaced text-color-text' style='--text-size:2.0rem;'>
19758 <span><strong>Subtotal</strong></span><span><strong><span class='cart-drawer__totals__row__money'>$0.00</span></strong></span> 19759 </p> 19760 19761 </div> 19762 19763 <p class='cart-drawer__total-savings spaced text-color-accent-1'> 19764 19765 </p> 19766 19767 </div> 19768 19769 19770 19771 <style> 19772 19773 #CartDrawer-Checkout { 19774 --icon-scale: 1.2em; 19775 --icon-spacing: 10px; 19776 } 19777 19778 19779 </style> 19780 <div class="cart__ctas" style="--margin-top: 1.5rem;--margin-bottom: 1.5rem;" > 19781 <noscript> 19782 <button type="submit" class="cart__update-button button button--secondary" form="CartDrawer-Form"> 19783 Update 19784 </button> 19785 </noscript> 19786 <div class='tnc-checkbox-warning tnc-checkbox-warning--above-button hidden' style='margin-bottom: 0.6em;'></div> 19787 <button 19788 type="submit" 19789 id="CartDrawer-Checkout" 19790 class="cart__checkout-button button" 19791 name="checkout" 19792 form="CartDrawer-Form" 19793 19794 disabled 19795 19796 > 19797 <span class='button__label'> 19798 Check out 19799 19800 </span> 19801 </button><div class='tnc-checkbox-warning tnc-checkbox-warning--under-button hidden' style='margin-top: 0.6em;'></div> 19802 </div> 19803 19804 <div class='payment-badges-block' style="--margin-top: 1.2rem;--margin-bottom: 1.2rem;" > 19805 <ul class="payment-badges" role="list"> 19806 19807 19808 19809 <li class="list-payment__item"> 19810 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-amazon"><title id="pi-amazon">Amazon</title><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" fill-rule="nonzero" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF" fill-rule="nonzero"/><path d="M25.26 16.23c-1.697 1.48-4.157 2.27-6.275 2.27-2.97 0-5.644-1.3-7.666-3.463-.16-.17-.018-.402.173-.27 2.183 1.504 4.882 2.408 7.67 2.408 1.88 0 3.95-.46 5.85-1.416.288-.145.53.222.248.47v.001zm.706-.957c-.216-.328-1.434-.155-1.98-.078-.167.024-.193-.148-.043-.27.97-.81 2.562-.576 2.748-.305.187.272-.047 2.16-.96 3.063-.14.138-.272.064-.21-.12.205-.604.664-1.96.446-2.29h-.001z" fill="#F90" fill-rule="nonzero"/><path d="M21.814 15.291c-.574-.498-.676-.73-.993-1.205-.947 1.012-1.618 1.315-2.85 1.315-1.453 0-2.587-.938-2.587-2.818 0-1.467.762-2.467 1.844-2.955.94-.433 2.25-.51 3.25-.628v-.235c0-.43.033-.94-.208-1.31-.212-.333-.616-.47-.97-.47-.66 0-1.25.353-1.392 1.085-.03.163-.144.323-.3.33l-1.677-.187c-.14-.033-.296-.153-.257-.38.386-2.125 2.223-2.766 3.867-2.766.84 0 1.94.234 2.604.9.842.82.762 1.918.762 3.11v2.818c0 .847.335 1.22.65 1.676.113.164.138.36-.003.482-.353.308-.98.88-1.326 1.2a.367.367 0 0 1-.414.038zm-1.659-2.533c.34-.626.323-1.214.323-1.918v-.392c-1.25 0-2.57.28-2.57 1.82 0 .782.386 1.31 1.05 1.31.487 0 .922-.312 1.197-.82z" fill="#221F1F"/></svg> 19811 19812 </li> 19813 <li class="list-payment__item"> 19814 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-american_express"><title id="pi-american_express">American Express</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#0071CE" style="fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;"/>
19814<path d="M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z" stroke="black" stroke-opacity="0.07" style="stroke:black;stroke-opacity:0.07;"/><path d="M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z" fill="white" style="fill:white;fill-opacity:1;"/></svg> 19815 19816 </li> 19817 <li class="list-payment__item"> 19818 <svg class="icon icon--full-color" version="1.1" xmlns="http://www.w3.org/2000/svg" role="img" x="0" y="0" width="38" height="24" viewBox="0 0 165.521 105.965" xml:space="preserve" aria-labelledby="pi-apple_pay"><title id="pi-apple_pay">Apple Pay</title><path fill="#000" d="M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z" /><path fill="#FFF" d="M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875" /><g><g><path fill="#000" d="M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858" /><path fill="#000" d="M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048" /></g><g><path fill="#000" d="M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z" />
19818<path fill="#000" d="M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z" /><path fill="#000" d="M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z" /></g></g></svg> 19819 19820 </li> 19821 <li class="list-payment__item"> 19822 <svg class="icon icon--full-color" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img" width="38" height="24" aria-labelledby="pi-diners_club"><title id="pi-diners_club">Diners Club</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"/><path d="M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z" fill="#3086C8"/></svg> 19823 </li> 19824 <li class="list-payment__item"> 19825 <svg class="icon icon--full-color" viewBox="0 0 38 24" width="38" height="24" role="img" aria-labelledby="pi-discover" fill="none" xmlns="http://www.w3.org/2000/svg"><title id="pi-discover">Discover</title><path fill="#000" opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z" fill="#fff"/><path d="M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z" fill="#231F20"/><path d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint0_linear)"/><path opacity=".65" d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint1_linear)"/><path d="M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z" fill="#231F20"/><path d="M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z" fill="#231F20"/><path d="M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z" fill="#F48120"/><defs><linearGradient id="pi-paint0_linear" x1="21.657" y1="12.275" x2="19.632" y2="9.104" gradientUnits="userSpaceOnUse"><stop stop-color="#F89F20"/><stop offset=".25" stop-color="#F79A20"/><stop offset=".533" stop-color="#F68D20"/><stop offset=".62" stop-color="#F58720"/><stop offset=".723" stop-color="#F48120"/><stop offset="1" stop-color="#F37521"/></linearGradient><linearGradient id="pi-paint1_linear" x1="21.338" y1="12.232" x2="18.378" y2="6.446" gradientUnits="userSpaceOnUse"><stop stop-color="#F58720"/><stop offset=".359" stop-color="#E16F27"/><stop offset=".703" stop-color="#D4602C"/><stop offset=".982" stop-color="#D05B2E"/></linearGradient></defs></svg> 19826 </li> 19827 <li class="list-payment__item"> 19828 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-google_pay"><title id="pi-google_pay">Google Pay</title><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF"/><path d="M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.
1982806zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z" fill="#5F6368"/><path d="M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z" fill="#4285F4"/><path d="M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z" fill="#34A853"/><path d="M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z" fill="#FBBC04"/><path d="M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z" fill="#EA4335"/></svg> 19829 19830 </li> 19831 <li class="list-payment__item"> 19832 <svg class="icon icon--full-color" width="38" height="24" role="img" aria-labelledby="pi-jcb" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg"><title id="pi-jcb">JCB</title><g fill="none" fill-rule="evenodd"><g fill-rule="nonzero"><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF"/></g><path d="M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z" fill="#006EBC"/><path d="M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z" fill="#F00036"/><path d="M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z" fill="#2AB419"/>
19832<path d="M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z" fill="#FFF" fill-rule="nonzero"/></g></svg> 19833 </li> 19834 <li class="list-payment__item"> 19835 <svg class="icon icon--full-color" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-maestro"><title id="pi-maestro">Maestro</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"/><circle fill="#EB001B" cx="15" cy="12" r="7"/><circle fill="#00A2E5" cx="23" cy="12" r="7"/><path fill="#7375CF" d="M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z"/></svg> 19836 </li> 19837 <li class="list-payment__item"> 19838 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-master"><title id="pi-master">Mastercard</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#1C1C1C" style="fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#232323" style="fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;"/><path d="M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z" fill="#EB001B" style="fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;"/><path d="M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z" fill="#F79E1B" style="fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;"/><path d="M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z" fill="#FF5F00" style="fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;"/></svg> 19839 19840 </li> 19841 <li class="list-payment__item"> 19842 <svg class="icon icon--full-color" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-paypal"><title id="pi-paypal">PayPal</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"/><path fill="#003087" d="M23.9 8.3c.2-1 0-1.7-.6-2.3-.6-.7-1.7-1-3.1-1h-4.1c-.3 0-.5.2-.6.5L14 15.6c0 .2.1.4.3.4H17l.4-3.4 1.8-2.2 4.7-2.1z"/><path fill="#3086C8" d="M23.9 8.3l-.2.2c-.5 2.8-2.2 3.8-4.6 3.8H18c-.3 0-.5.2-.6.5l-.6 3.9-.2 1c0 .2.1.4.3.4H19c.3 0 .5-.2.5-.4v-.1l.4-2.4v-.1c0-.2.3-.4.5-.4h.3c2.1 0 3.7-.8 4.1-3.2.2-1 .1-1.8-.4-2.4-.1-.5-.3-.7-.5-.8z"/>
19842<path fill="#012169" d="M23.3 8.1c-.1-.1-.2-.1-.3-.1-.1 0-.2 0-.3-.1-.3-.1-.7-.1-1.1-.1h-3c-.1 0-.2 0-.2.1-.2.1-.3.2-.3.4l-.7 4.4v.1c0-.3.3-.5.6-.5h1.3c2.5 0 4.1-1 4.6-3.8v-.2c-.1-.1-.3-.2-.5-.2h-.1z"/></svg> 19843 </li> 19844 <li class="list-payment__item"> 19845 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-shopify_pay"><title id="pi-shopify_pay">Shop Pay</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000"/><path d="M35.889 0C37.05 0 38 .982 38 2.182v19.636c0 1.2-.95 2.182-2.111 2.182H2.11C.95 24 0 23.018 0 21.818V2.182C0 .982.95 0 2.111 0H35.89z" fill="#5A31F4"/><path d="M9.35 11.368c-1.017-.223-1.47-.31-1.47-.705 0-.372.306-.558.92-.558.54 0 .934.238 1.225.704a.079.079 0 00.104.03l1.146-.584a.082.082 0 00.032-.114c-.475-.831-1.353-1.286-2.51-1.286-1.52 0-2.464.755-2.464 1.956 0 1.275 1.15 1.597 2.17 1.82 1.02.222 1.474.31 1.474.705 0 .396-.332.582-.993.582-.612 0-1.065-.282-1.34-.83a.08.08 0 00-.107-.035l-1.143.57a.083.083 0 00-.036.111c.454.92 1.384 1.437 2.627 1.437 1.583 0 2.539-.742 2.539-1.98s-1.155-1.598-2.173-1.82v-.003zM15.49 8.855c-.65 0-1.224.232-1.636.646a.04.04 0 01-.069-.03v-2.64a.08.08 0 00-.08-.081H12.27a.08.08 0 00-.08.082v8.194a.08.08 0 00.08.082h1.433a.08.08 0 00.081-.082v-3.594c0-.695.528-1.227 1.239-1.227.71 0 1.226.521 1.226 1.227v3.594a.08.08 0 00.081.082h1.433a.08.08 0 00.081-.082v-3.594c0-1.51-.981-2.577-2.355-2.577zM20.753 8.62c-.778 0-1.507.24-2.03.588a.082.082 0 00-.027.109l.632 1.088a.08.08 0 00.11.03 2.5 2.5 0 011.318-.366c1.25 0 2.17.891 2.17 2.068 0 1.003-.736 1.745-1.669 1.745-.76 0-1.288-.446-1.288-1.077 0-.361.152-.657.548-.866a.08.08 0 00.032-.113l-.596-1.018a.08.08 0 00-.098-.035c-.799.299-1.359 1.018-1.359 1.984 0 1.46 1.152 2.55 2.76 2.55 1.877 0 3.227-1.313 3.227-3.195 0-2.018-1.57-3.492-3.73-3.492zM28.675 8.843c-.724 0-1.373.27-1.845.746-.026.027-.069.007-.069-.029v-.572a.08.08 0 00-.08-.082h-1.397a.08.08 0 00-.08.082v8.182a.08.08 0 00.08.081h1.433a.08.08 0 00.081-.081v-2.683c0-.036.043-.054.069-.03a2.6 2.6 0 001.808.7c1.682 0 2.993-1.373 2.993-3.157s-1.313-3.157-2.993-3.157zm-.271 4.929c-.956 0-1.681-.768-1.681-1.783s.723-1.783 1.681-1.783c.958 0 1.68.755 1.68 1.783 0 1.027-.713 1.783-1.681 1.783h.001z" fill="#fff"/></svg> 19846 19847 </li> 19848 <li class="list-payment__item"> 19849 <svg class="icon icon--full-color" viewBox="-36 25 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-unionpay"><title id="pi-unionpay">Union Pay</title><path fill="#005B9A" d="M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z"/><path fill="#E9292D" d="M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z"/><path fill="#0E73B9" d="M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z"/><path fill="#059DA4" d="M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z"/><path fill="#fff" d="M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85
19849h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19"/></svg> 19850 </li> 19851 <li class="list-payment__item"> 19852 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-visa"><title id="pi-visa">Visa</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#142FBD" style="fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#1532CB" style="fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;"/><path d="M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778
1985216.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z" fill="white" style="fill:white;fill-opacity:1;"/></svg> 19853 19854 </li></ul> 19855 </div> 19856 19857 <!-- end footer --> 19858 </div> 19859 </div> 19860 </div> 19861</cart-drawer> 19862
19863<script> 19864 document.addEventListener('DOMContentLoaded', function () { 19865 function isIE() { 19866 const ua = window.navigator.userAgent; 19867 const msie = ua.indexOf('MSIE '); 19868 const trident = ua.indexOf('Trident/'); 19869 19870 return msie > 0 || trident > 0; 19871 } 19872 19873 if (!isIE()) return; 19874 const cartSubmitInput = document.createElement('input'); 19875 cartSubmitInput.setAttribute('name', 'checkout'); 19876 cartSubmitInput.setAttribute('type', 'hidden'); 19877 document.querySelector('#cart').appendChild(cartSubmitInput); 19878 document.querySelector('#checkout').addEventListener('click', function (event) { 19879 document.querySelector('#cart').submit(); 19880 }); 19881 }); 19882</script>
19882 19883 19884</div><main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1"> 19885 <section id="shopify-section-template--20359605715135__main" class="shopify-section section"><style data-shopify>.section-template--20359605715135__main-padding { 19886 padding-top: 27px; 19887 padding-bottom: 27px; 19888 } 19889 19890 @media screen and (min-width: 750px) { 19891 .section-template--20359605715135__main-padding { 19892 padding-top: 36px; 19893 padding-bottom: 36px; 19894 } 19895 }</style><div class="page-width page-width--narrow section-template--20359605715135__main-padding"> 19896 <h1 class="main-page-title page-title h0"> 19897 About Us 19898 </h1> 19899 <div class="rte"> 19900 19901 </div> 19902</div> 19903 19904 19905</section><section id="shopify-section-template--20359605715135__newsletter" class="shopify-section section"><style data-shopify>.section-template--20359605715135__newsletter-padding { 19906 padding-top: 51px; 19907 padding-bottom: 39px; 19908 } 19909 19910 @media screen and (min-width: 750px) { 19911 .section-template--20359605715135__newsletter-padding { 19912 padding-top: 68px; 19913 padding-bottom: 52px; 19914 } 19915 } 19916 19917 .color-scheme-template--20359605715135__newsletter.color-custom { 19918 --color-background: 255, 255, 255; 19919 --gradient-background: #FFFFFF; 19920 19921 --color-foreground: 46, 42, 57; 19922 --color-button: 221, 29, 29; 19923 --color-button-text: 255, 255, 255; 19924 } 19925 19926</style><div class="newsletter center content-for-grouping animate-section animate--hidden always-display"> 19927 19928 <div class="newsletter__wrapper color-scheme-template--20359605715135__newsletter color-background-2 gradient content-container isolate content-container--full-width section-template--20359605715135__newsletter-padding"><h2 class="h1 title-with-highlight animate-item animate-item--child" style="--hightlight-color:#6D388B;--index:1;"> 19929 Subscribe to our emails 19930 </h2><div class="newsletter__subheading rte animate-item animate-item--child" style="--index:2;"><p>Join our email list for exclusive offers and the latest news. </p></div><div class='animate-item animate-item--child' style="--index:3;"> 19931 <form method="post" action="/contact#contact_form" id="contact_form" accept-charset="UTF-8" class="newsletter-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /> 19932 <input type="hidden" name="contact[tags]" value="newsletter"> 19933 <div class="newsletter-form__field-wrapper"> 19934 <div class="field"> 19935 <input 19936 id="NewsletterForm--template--20359605715135__newsletter" 19937 type="email" 19938 name="contact[email]" 19939 class="field__input" 19940 value="" 19941 aria-required="true" 19942 autocorrect="off" 19943 autocapitalize="off" 19944 autocomplete="email" 19945 19946 placeholder="Email" 19947 required 19948 > 19949 <label class="field__label" for="NewsletterForm--template--20359605715135__newsletter"> 19950 Email 19951 </label> 19952 19953 </div> 19954 19955 <button 19956 type="submit" 19957 class="button newsletter__solid-btn button--full-width" 19958 name="commit" 19959 id="Subscribe" 19960 aria-label="Subscribe" 19961 > 19962 Sign up 19963 </button> 19964 19965</div></form> 19966 </div></div> 19967</div> 19968 19969 19970</section> 19971 </main> 19972 19973 <div id="shopify-section-promo-popup" class="shopify-section"> 19974</div> 19975 <div id="shopify-section-scroll-to-top-btn" class="shopify-section"><style data-shopify> 19976 .scroll-to-top-btn-scroll-to-top-btn { 19977 --offset-x: 2.0rem; 19978 --offset-y: 2.0rem; 19979 } 19980 @media screen and (max-width: 749px) { 19981 .scroll-to-top-btn-scroll-to-top-btn { 19982 --offset-x: 1.5rem; 19983 --offset-y: 1.5rem; 19984 } 19985 } 19986</style> 19987 19988 19989 <button 19990 class="floating-btn scroll-to-top-btn scroll-to-top-btn-bottom-right scroll-to-top-btn-scroll-to-top-btn color-accent-1" 19991 onclick="handleScrollToTop()" 19992 19993 style="display:none;" 19994 19995 > 19996 <svg 19997 aria-hidden="true" 19998 focusable="false" 19999 data-prefix="fas" 20000 data-icon="chevron-up" 20001 class="svg-inline--fa fa-chevron-up " 20002 role="img" 20003 xmlns="http://www.w3.org/2000/svg"
20004 viewBox="0 0 512 512" 20005 > 20006 <path fill="currentColor" d="M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"></path> 20007 </svg> 20008 </button> 20009 20010
20010<script> 20011 20012 function checkBtnVisibility() { 20013 const scrollToTopBtn = document.querySelector('.scroll-to-top-btn'); 20014 if (scrollToTopBtn) { 20015 if (window.scrollY > 400) { 20016 scrollToTopBtn.style.display = ''; 20017 } else { 20018 scrollToTopBtn.style.display = 'none'; 20019 } 20020 } 20021 } 20022 checkBtnVisibility() 20023 20024 window.addEventListener('scroll', checkBtnVisibility) 20025 20026 20027 function handleScrollToTop() { 20028 window.scrollTo({ 20029 top: 0, 20030 behavior: "smooth" 20031 }) 20032 } 20033 </script>
20033 20034 20035 20036 20037 20038</div> 20039 <div id="shopify-section-global-music-player" class="shopify-section"><style data-shopify> 20040 .music-player-global-music-player { 20041 --offset-x: 2.0rem; 20042 --offset-y: 2.0rem; 20043 } 20044 @media screen and (max-width: 749px) { 20045 .music-player-global-music-player { 20046 --offset-x: 1.5rem; 20047 --offset-y: 1.5rem; 20048 } 20049 } 20050</style> 20051 20052 20053 20054 20055</div> 20056 <!-- BEGIN sections: footer-group --> 20057<div id="shopify-section-sections--20359605878975__footer" class="shopify-section shopify-section-group-footer-group"> 20058<style data-shopify>.footer { 20059 margin-top: 0px; 20060 } 20061 20062 .section-sections--20359605878975__footer-padding { 20063 padding-top: 24px; 20064 padding-bottom: 15px; 20065 } 20066 20067 @media screen and (min-width: 750px) { 20068 .footer { 20069 margin-top: 0px; 20070 } 20071 20072 .section-sections--20359605878975__footer-padding { 20073 padding-top: 32px; 20074 padding-bottom: 20px; 20075 } 20076 } 20077 20078 .color-scheme-sections--20359605878975__footer.color-custom { 20079 --color-background: 18, 18, 18; 20080 --gradient-background: #121212; 20081 20082 --color-foreground: 255, 255, 255; 20083 --color-button: 255, 255, 255; 20084 --color-button-text: 18, 18, 18; 20085 --color-base-outline-button-labels: 255, 255, 255; 20086 } 20087 20088</style><footer class="footer color-scheme-sections--20359605878975__footer color-accent-1 gradient section-sections--20359605878975__footer-padding animate-section animate--hidden" data-animations='' data-type='RfaaO6tc35zLKcDRUCltKqx5sXmgAgKrTClqXyYJb4nkV8I/xi1BjoFOTSDWYyy7mYpaz8tdnUIuo33R4J1YMCHzsxfvRzZwl1pYsCp5+ZuhAvfjIMeuWwVa/Z18t/GmA6L4Wm7s3a5VRGakCsshnlvnWEZ6+yhYLS7h7Kg2oDgY9rhPIOdVKLYbOPSC+DKe0ST+z2XaAEg/X/70GpBodknSyBSv780BkNSlsn53aBN6G01kcGetmqrBwLdIKuSbtvUEVz6c6I9vwn2Ni5mGBYObqP9R5Gu85tetSC3V4z2OWL6Xj1w2hcfcITSk615rP4GL8XEH3aej6YsmyAYMs0Ux/t9IFZPbwreRhb4sjhAhW67LoVTOYXnOPbm6/AXr6RmBPpj6l6/DgaBGR4ednszWnbI03fR+Kvp0cqFcsmNpCMxrl1X3oCjFizIw8yDE'><div class="footer__content-top page-width"><div class="footer__blocks-wrapper grid"><div 20089 class="footer-block grid__item footer-block--desktop-4 footer-block--mobile-2 animate-item animate-item--child" 20090 style="--index: 0;" 20091 ><div class="footer-block__details-content footer-block-image center"><div 20092 class="footer-block__image-wrapper global-media-settings" 20093 style="max-width: min(100%, 100px);" 20094 > 20095 20096 <img 20097 srcset="//teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Square_-_For_Dark_Background.png?v=1776239957&width=100, //teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Square_-_For_Dark_Background.png?v=1776239957&width=200 2x" 20098 src="//teamdoctors.com/cdn/shop/files/Logo_-_Team_Doctors_-_Print_Logo_-_Team_Doctors_Square_-_For_Dark_Background.png?v=1776239957&width=760" 20099 alt="" 20100 loading="lazy" 20101 width="1787" 20102 height="1520" 20103 > 20104 20105 </div></div></div><div 20106 class="footer-block grid__item footer-block--menu footer-block--desktop-4 footer-block--mobile-1 animate-item animate-item--child" 20107 style="--index: 1;" 20108 ><h2 class="footer-block__heading">Quick links</h2><ul class="footer-block__details-content list-unstyled"><li> 20109 <a 20110 href="/pages/privacy-policy" 20111 class="link link--text list-menu__item list-menu__item--link" 20112 > 20113 Privacy Policy 20114 </a> 20115 </li><li> 20116 <a 20117 href="/pages/return-policy-1" 20118 class="link link--text list-menu__item list-menu__item--link" 20119 > 20120 Return & Refund Policy 20121 </a> 20122 </li></ul></div><div 20123 class="footer-block grid__item footer-block--desktop-4 footer-block--mobile-2 animate-item animate-item--child" 20124 style="--index: 2;" 20125 ><h2 class="footer-block__heading">Subscribe to our emails</h2> 20126 <div> 20127 <div class="footer-block__details-content footer-block__details-content-mb rte"> 20128 <p>Join our email list for exclusive offers and the latest news.</p> 20129 </div><form method="post" action="/contact#ContactFooter" id="ContactFooter" accept-charset="UTF-8" class="footer__newsletter newsletter-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="contact[tags]" value="newsletter"> 20130 <div class="newsletter-form__field-wrapper"> 20131 <div class="field"> 20132 <input 20133 id="NewsletterForm--sections--20359605878975__footer" 20134 type="email" 20135 name="contact[email]" 20136 class="field__input" 20137 value="" 20138 aria-required="true" 20139 autocorrect="off" 20140 autocapitalize="off" 20141 autocomplete="email" 20142 20143 placeholder="Email" 20144 required 20145 > 20146 <label class="field__label" for="NewsletterForm--sections--20359605878975__footer"> 20147 Email 20148 </label> 20149 20150 </div></div> 20151 20152 <button 20153 type="submit" 20154 class="button newsletter__solid-btn button--full-width" 20155 name="commit" 20156 id="Subscribe" 20157 aria-label="Subscribe" 20158 > 20159 Sign up 20160 </button> 20161 20162</form></div></div></div><div class="footer-block--newsletter"></div> 20163 </div>
20163<div class="footer__content-bottom animate-item animate-item--child" style="--index: 3;"> 20164 <div class="footer__content-bottom-wrapper page-width"> 20165 <div class="footer__column footer__localization isolate"></div> 20166 <div class="footer__column footer__column--info"><div class="footer__payment"> 20167 <span class="visually-hidden">Payment methods</span> 20168 <ul class="list list-payment" role="list"> 20169 20170 20171<li class="list-payment__item"> 20172 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-amazon"><title id="pi-amazon">Amazon</title><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" fill-rule="nonzero" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF" fill-rule="nonzero"/><path d="M25.26 16.23c-1.697 1.48-4.157 2.27-6.275 2.27-2.97 0-5.644-1.3-7.666-3.463-.16-.17-.018-.402.173-.27 2.183 1.504 4.882 2.408 7.67 2.408 1.88 0 3.95-.46 5.85-1.416.288-.145.53.222.248.47v.001zm.706-.957c-.216-.328-1.434-.155-1.98-.078-.167.024-.193-.148-.043-.27.97-.81 2.562-.576 2.748-.305.187.272-.047 2.16-.96 3.063-.14.138-.272.064-.21-.12.205-.604.664-1.96.446-2.29h-.001z" fill="#F90" fill-rule="nonzero"/><path d="M21.814 15.291c-.574-.498-.676-.73-.993-1.205-.947 1.012-1.618 1.315-2.85 1.315-1.453 0-2.587-.938-2.587-2.818 0-1.467.762-2.467 1.844-2.955.94-.433 2.25-.51 3.25-.628v-.235c0-.43.033-.94-.208-1.31-.212-.333-.616-.47-.97-.47-.66 0-1.25.353-1.392 1.085-.03.163-.144.323-.3.33l-1.677-.187c-.14-.033-.296-.153-.257-.38.386-2.125 2.223-2.766 3.867-2.766.84 0 1.94.234 2.604.9.842.82.762 1.918.762 3.11v2.818c0 .847.335 1.22.65 1.676.113.164.138.36-.003.482-.353.308-.98.88-1.326 1.2a.367.367 0 0 1-.414.038zm-1.659-2.533c.34-.626.323-1.214.323-1.918v-.392c-1.25 0-2.57.28-2.57 1.82 0 .782.386 1.31 1.05 1.31.487 0 .922-.312 1.197-.82z" fill="#221F1F"/></svg> 20173 20174 </li><li class="list-payment__item"> 20175 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-american_express"><title id="pi-american_express">American Express</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#0071CE" style="fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;"/><path d="M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z" stroke="black" stroke-opacity="0.07" style="stroke:black;stroke-opacity:0.07;"/><path d="M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z" fill="white" style="fill:white;fill-opacity:1;"/></svg> 20176 20177 </li><li class="list-payment__item"> 20178 <svg class="icon icon--full-color" version="1.1" xmlns="http://www.w3.org/2000/svg" role="img" x="0" y="0" width="38" height="24" viewBox="0 0 165.521 105.965" xml:space="preserve" aria-labelledby="pi-apple_pay"><title id="pi-apple_pay">Apple Pay</title><path fill="#000" d="M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z" /><path fill="#FFF" d="M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558
201780 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875" /><g><g><path fill="#000" d="M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858" /><path fill="#000" d="M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048" /></g><g><path fill="#000" d="M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z" /><path fill="#000" d="M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z" /><path fill="#000" d="M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z" /></g></g></svg> 20179 20180 </li><li class="list-payment__item"> 20181 <svg class="icon icon--full-color" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img" width="38" height="24" aria-labelledby="pi-diners_club"><title id="pi-diners_club">Diners Club</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"/><path d="M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z" fill="#3086C8"/></svg> 20182 </li><li class="list-payment__item"> 20183 <svg class="icon icon--full-color" viewBox="0 0 38 24" width="38" height="24" role="img" aria-labelledby="pi-discover" fill="none" xmlns="http://www.w3.org/2000/svg"><title id="pi-discover">Discover</title><path fill="#000" opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z" fill="#fff"/><path d="M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z" fill="#231F20"/><path d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint0_linear)"/><path opacity=".65" d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint1_linear)"/><path d="M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z" fill="#231F20"/><path d="M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z" fill="#231F20"/><path d="M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z" fill="#F48120"/><defs><linearGradient id="pi-paint0_linear" x1="21.657" y1="12.275" x2="19.632" y2="9.104" gradientUnits="userSpaceOnUse"><stop stop-color="#F89F20"/><stop offset=".25" stop-color="#F79A20"/><stop offset=".533" stop-color="#F68D20"/><stop offset=".62" stop-color="#F58720"/><stop offset=".723" stop-color="#F48120"/><stop offset="1" stop-color="#F37521"/></linearGradient><linearGradient id="pi-paint1_linear" x1="21.338" y1="12.232" x2="18.378" y2="6.446" gradientUnits="userSpaceOnUse"><stop stop-color="#F58720"/><stop offset=".359" stop-color="#E16F27"/><stop offset=".703" stop-color="#D4602C"/><stop offset=".982" stop-color="#D05B2E"/></linearGradient></defs></svg> 20184 </li><li class="list-payment__item"> 20185 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-google_pay"><title id="pi-google_pay">Google Pay</title><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF"/><path d="M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.
2018506zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z" fill="#5F6368"/><path d="M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z" fill="#4285F4"/><path d="M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z" fill="#34A853"/><path d="M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z" fill="#FBBC04"/><path d="M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z" fill="#EA4335"/></svg> 20186 20187 </li><li class="list-payment__item"> 20188 <svg class="icon icon--full-color" width="38" height="24" role="img" aria-labelledby="pi-jcb" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg"><title id="pi-jcb">JCB</title><g fill="none" fill-rule="evenodd"><g fill-rule="nonzero"><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF"/></g><path d="M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z" fill="#006EBC"/><path d="M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z" fill="#F00036"/><path d="M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z" fill="#2AB419"/>
20188<path d="M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z" fill="#FFF" fill-rule="nonzero"/></g></svg> 20189 </li><li class="list-payment__item"> 20190 <svg class="icon icon--full-color" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-maestro"><title id="pi-maestro">Maestro</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"/><circle fill="#EB001B" cx="15" cy="12" r="7"/><circle fill="#00A2E5" cx="23" cy="12" r="7"/><path fill="#7375CF" d="M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z"/></svg> 20191 </li><li class="list-payment__item"> 20192 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-master"><title id="pi-master">Mastercard</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#1C1C1C" style="fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#232323" style="fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;"/><path d="M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z" fill="#EB001B" style="fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;"/><path d="M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z" fill="#F79E1B" style="fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;"/><path d="M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z" fill="#FF5F00" style="fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;"/></svg> 20193 20194 </li><li class="list-payment__item"> 20195 <svg class="icon icon--full-color" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-paypal"><title id="pi-paypal">PayPal</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"/><path fill="#003087" d="M23.9 8.3c.2-1 0-1.7-.6-2.3-.6-.7-1.7-1-3.1-1h-4.1c-.3 0-.5.2-.6.5L14 15.6c0 .2.1.4.3.4H17l.4-3.4 1.8-2.2 4.7-2.1z"/><path fill="#3086C8" d="M23.9 8.3l-.2.2c-.5 2.8-2.2 3.8-4.6 3.8H18c-.3 0-.5.2-.6.5l-.6 3.9-.2 1c0 .2.1.4.3.4H19c.3 0 .5-.2.5-.4v-.1l.4-2.4v-.1c0-.2.3-.4.5-.4h.3c2.1 0 3.7-.8 4.1-3.2.2-1 .1-1.8-.4-2.4-.1-.5-.3-.7-.5-.8z"/><path fill="#012169" d="M23.3 8.1c-.1-.1-.2-.1-.3-.1-.1 0-.2 0-.3-.1-.3-.1-.7-.1-1.1-.1h-3c-.1 0-.2
201950-.2.1-.2.1-.3.2-.3.4l-.7 4.4v.1c0-.3.3-.5.6-.5h1.3c2.5 0 4.1-1 4.6-3.8v-.2c-.1-.1-.3-.2-.5-.2h-.1z"/></svg> 20196 </li><li class="list-payment__item"> 20197 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-shopify_pay"><title id="pi-shopify_pay">Shop Pay</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000"/><path d="M35.889 0C37.05 0 38 .982 38 2.182v19.636c0 1.2-.95 2.182-2.111 2.182H2.11C.95 24 0 23.018 0 21.818V2.182C0 .982.95 0 2.111 0H35.89z" fill="#5A31F4"/><path d="M9.35 11.368c-1.017-.223-1.47-.31-1.47-.705 0-.372.306-.558.92-.558.54 0 .934.238 1.225.704a.079.079 0 00.104.03l1.146-.584a.082.082 0 00.032-.114c-.475-.831-1.353-1.286-2.51-1.286-1.52 0-2.464.755-2.464 1.956 0 1.275 1.15 1.597 2.17 1.82 1.02.222 1.474.31 1.474.705 0 .396-.332.582-.993.582-.612 0-1.065-.282-1.34-.83a.08.08 0 00-.107-.035l-1.143.57a.083.083 0 00-.036.111c.454.92 1.384 1.437 2.627 1.437 1.583 0 2.539-.742 2.539-1.98s-1.155-1.598-2.173-1.82v-.003zM15.49 8.855c-.65 0-1.224.232-1.636.646a.04.04 0 01-.069-.03v-2.64a.08.08 0 00-.08-.081H12.27a.08.08 0 00-.08.082v8.194a.08.08 0 00.08.082h1.433a.08.08 0 00.081-.082v-3.594c0-.695.528-1.227 1.239-1.227.71 0 1.226.521 1.226 1.227v3.594a.08.08 0 00.081.082h1.433a.08.08 0 00.081-.082v-3.594c0-1.51-.981-2.577-2.355-2.577zM20.753 8.62c-.778 0-1.507.24-2.03.588a.082.082 0 00-.027.109l.632 1.088a.08.08 0 00.11.03 2.5 2.5 0 011.318-.366c1.25 0 2.17.891 2.17 2.068 0 1.003-.736 1.745-1.669 1.745-.76 0-1.288-.446-1.288-1.077 0-.361.152-.657.548-.866a.08.08 0 00.032-.113l-.596-1.018a.08.08 0 00-.098-.035c-.799.299-1.359 1.018-1.359 1.984 0 1.46 1.152 2.55 2.76 2.55 1.877 0 3.227-1.313 3.227-3.195 0-2.018-1.57-3.492-3.73-3.492zM28.675 8.843c-.724 0-1.373.27-1.845.746-.026.027-.069.007-.069-.029v-.572a.08.08 0 00-.08-.082h-1.397a.08.08 0 00-.08.082v8.182a.08.08 0 00.08.081h1.433a.08.08 0 00.081-.081v-2.683c0-.036.043-.054.069-.03a2.6 2.6 0 001.808.7c1.682 0 2.993-1.373 2.993-3.157s-1.313-3.157-2.993-3.157zm-.271 4.929c-.956 0-1.681-.768-1.681-1.783s.723-1.783 1.681-1.783c.958 0 1.68.755 1.68 1.783 0 1.027-.713 1.783-1.681 1.783h.001z" fill="#fff"/></svg> 20198 20199 </li><li class="list-payment__item"> 20200 <svg class="icon icon--full-color" viewBox="-36 25 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-unionpay"><title id="pi-unionpay">Union Pay</title><path fill="#005B9A" d="M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z"/><path fill="#E9292D" d="M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z"/><path fill="#0E73B9" d="M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z"/><path fill="#059DA4" d="M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z"/><path fill="#fff" d="M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.
20200635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19"/></svg> 20201 </li><li class="list-payment__item"> 20202 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-visa"><title id="pi-visa">Visa</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#142FBD" style="fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#1532CB" style="fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;"/><path d="M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778
2020216.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z" fill="white" style="fill:white;fill-opacity:1;"/></svg> 20203 20204 </li></ul> 20205 </div></div> 20206 </div> 20207 <div class="footer__content-bottom-wrapper page-width"> 20208 <div class="footer__copyright caption"> 20209 <small class="copyright__content"> 20210 © 2026, <a href="/" title="">Team Doctors</a></small> 20211 20212 <small class="copyright__content">Powered by <a href="https://shrinesolutions.com/" target="_blank" title="https://shrinesolutions.com/">Shrine</a></small> 20213 20214</div> 20215 </div> 20216 </div> 20217</footer> 20218 20219 20220 20221 20222</div> 20223<!-- END sections: footer-group --> 20224 20225 <ul hidden> 20226 <li id="a11y-refresh-page-message">Choosing a selection results in a full page refresh.</li> 20227 <li id="a11y-new-window-message">Opens in a new window.</li> 20228 </ul> 20229 20230
20230<script> 20231 window.shopUrl = 'https://teamdoctors.com'; 20232 window.routes = { 20233 cart_add_url: '/cart/add', 20234 cart_change_url: '/cart/change', 20235 cart_update_url: '/cart/update', 20236 cart_clear_url: '/cart/clear', 20237 cart_url: '/cart', 20238 predictive_search_url: '/search/suggest' 20239 }; 20240 20241 window.cartStrings = { 20242 error: `There was an error while updating your cart. Please try again.`, 20243 quantityError: `You can only add [quantity] of this item to your cart.` 20244 } 20245 20246 window.variantStrings = { 20247 addToCart: `Add to cart`, 20248 soldOut: `Sold out`, 20249 unavailable: `Unavailable`, 20250 unavailable_with_option: `[value] - Unavailable`, 20251 } 20252 20253 window.accessibilityStrings = { 20254 imageAvailable: `Image [index] is now available in gallery view`, 20255 shareSuccess: `Link copied to clipboard`, 20256 pauseSlideshow: `Pause slideshow`, 20257 playSlideshow: `Play slideshow`, 20258 } 20259 </script>
20259 20260 20261
20261<script> 20262 const productForm = document.querySelector('product-form[data-main="true"]'); 20263 if (productForm) { 20264 document.querySelectorAll('[id^="SectionAtcBtn-"]').forEach(btn => { 20265 btn.addEventListener('click', (e) => { 20266 productForm.handleSubmit(e); 20267 }) 20268 }) 20269 } 20270 20271 20272 const stickyAtc = document.querySelector('.sticky-atc'); 20273 let bottomMargin = 50; 20274 if (stickyAtc) bottomMargin += stickyAtc.clientHeight; 20275 const shrineAnimationsObserver = new IntersectionObserver(elements => { 20276 elements.forEach(element => { 20277 if (element.isIntersecting) { 20278 element.target.classList.add('animate--shown'); 20279 } 20280 20281 }) 20282 }, { rootMargin: `0px 0px -${bottomMargin}px 0px` }) 20283 20284 function initAnimations(rootElement = document, isThemeEditorEvent = false) { 20285 const elementsToAnimate = rootElement.querySelectorAll('.animate-section'); 20286 if (elementsToAnimate.length == 0) return; 20287 20288 20289 elementsToAnimate.forEach(element => { 20290 if (isThemeEditorEvent) { 20291 element.classList.add('animate--shown'); 20292 return; 20293 } 20294 shrineAnimationsObserver.observe(element); 20295 }) 20296 } 20297 20298 window.addEventListener('DOMContentLoaded', () => initAnimations()); 20299 if (Shopify.designMode) { 20300 document.addEventListener('shopify:section:load', (event) => initAnimations(event.target, true)); 20301 document.addEventListener('shopify:section:reorder', () => initAnimations(document, true)); 20302 } 20303 20304 </script>
20304 20305 20306
20306<script> 20307 (function () { 20308 var links = document.links; 20309 for (let i = 0; i < links.length; i++) { 20310 if (links[i].hostname !== window.location.hostname) { 20311 links[i].target = '_blank'; 20312 links[i].rel = 'noreferrer noopener'; 20313 } 20314 } 20315 })(); 20316 </script>
20316 20317 20318 20319
20319<script> 20320 window.addEventListener("contextmenu", (e) => { 20321 e.preventDefault(); 20322 }); 20323 document.addEventListener("selectstart", (e) => { 20324 e.preventDefault(); 20325 }); 20326 document.addEventListener('DOMContentLoaded', function() { 20327 document.querySelectorAll('img').forEach(img => { 20328 img.addEventListener('dragstart', function(e) { 20329 e.preventDefault(); 20330 }) 20331 }) 20332 }) 20333 function ctrlShiftKey(e, keyCode) { 20334 return e.ctrlKey && e.shiftKey && e.keyCode === keyCode.charCodeAt(0); 20335 } 20336 document.addEventListener('keydown', function(e) { 20337 if ( 20338 event.keyCode === 123 || 20339 ctrlShiftKey(e, 'I') || 20340 ctrlShiftKey(e, 'J') || 20341 ctrlShiftKey(e, 'C') || 20342 (e.ctrlKey && e.keyCode === 'U'.charCodeAt(0)) 20343 ) { 20344 e.preventDefault(); 20345 } 20346 }) 20347 </script>
20347 20348 20349 20350 <style> </style> 20351<div id="shopify-block-AcFN1M1hVN1RCVTB6Y__5057006142565981955" class="shopify-block shopify-app-block">
20351<script type="text/javascript"> 20352 const promoConfig = { 20353 fontSize: '16', 20354 logoType: 'logo', 20355 logoColor: 'blue', 20356 pageType: 'cart', 20357 textAlign: 'left' 20358 }; 20359 const drawerAppData = '{}'; 20360 const drawerPromoAppConfig = (drawerAppData == '{}') ? {} : JSON.parse('') ; 20361 const drawerHasRegionKeys = drawerPromoAppConfig.hasOwnProperty('region_public_keys'); 20362 let drawerPublicKey = null; 20363 if (Shopify.country == 'US') 20364 drawerPublicKey = (drawerHasRegionKeys) ? drawerPromoAppConfig.region_public_keys.us : null; 20365 if (Shopify.country == 'CA') 20366 drawerPublicKey = (drawerHasRegionKeys) ? drawerPromoAppConfig.region_public_keys.ca : null; 20367 const affirmPublicApiKeyCartDrawer = ('') ? '' : drawerPublicKey; 20368 const customDrawerTotalSelector = ('') ? '' : null; 20369 const customAdjacentElementSelector = ('') ? '' : null; 20370 const customAddToCartSelector = ('') ? '' : null; 20371 const customCartDrawerSelector = ('') ? '' : null; 20372 const publicKeyEntered = ('') ? '' : null; 20373</script>
20373 20374 20375</div>
20375<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
20375 20376</body> 20377</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.