1<!doctype html><html class="no-js" lang="en" dir="ltr"> 2 <head> 3<!-- Start of Shoplift scripts --> 4<!-- 2026-05-26T15:45:31.2489962Z --> 5<style>.shoplift-hide { opacity: 0 !important; }</style> 6<style id="sl-preview-bar-hide">#preview-bar-iframe, #PBarNextFrameWrapper { display: none !important; }</style>
7<script type="text/javascript">(function(rootPath, template, themeRole, themeId, isThemePreview){ /* Generated on 2026-05-26T16:03:34.5666694Z */(function(){"use strict";var tt=document.createElement("style");tt.textContent=`#shoplift-preview-control{position:fixed;max-width:332px;height:56px;background-color:#141414;z-index:9999;bottom:20px;display:flex;border-radius:8px;box-shadow:13px 22px 7px #0000,9px 14px 7px #00000003,5px 8px 6px #0000000d,2px 4px 4px #00000017,1px 1px 2px #0000001a,0 0 #0000001a;align-items:center;margin:0 auto;left:16px;right:16px;opacity:0;transform:translateY(20px);visibility:hidden;transition:opacity .4s ease-in-out,transform .4s ease-in-out,visibility 0s .4s}#shoplift-preview-control.visible{opacity:1;transform:translateY(0);visibility:visible;transition:opacity .4s ease-in-out,transform .4s ease-in-out,visibility 0s 0s}#shoplift-preview-control *{font-family:Inter,sans-serif;color:#fff;box-sizing:border-box;font-size:16px}#shoplift-preview-variant-title{font-weight:400;line-height:140%;font-size:16px;text-align:start;letter-spacing:-.16px;flex-grow:1;text-wrap:nowrap;overflow:hidden;text-overflow:ellipsis}#shoplift-preview-variant-selector{position:relative;display:block;padding:6px 0;height:100%;min-width:0;flex:1 1 auto}#shoplift-preview-variant-menu-trigger{border:none;cursor:pointer;width:100%;background-color:transparent;padding:0 16px;border-left:1px solid #333;border-right:1px solid #333;height:100%;display:flex;align-items:center;justify-content:start;gap:8px}#shoplift-preview-variant-selector .menu-variant-label{width:24px;height:24px;border-radius:50%;padding:6px;display:flex;justify-content:center;align-items:center;font-size:12px;font-style:normal;font-weight:600;line-height:100%;letter-spacing:-.12px;flex-shrink:0}#shoplift-preview-variant-selector .preview-variant-menu{position:absolute;bottom:110%;transform:translate3d(0,20px,0);visibility:hidden;pointer-events:none;opacity:0;cursor:pointer;background-color:#141414;border:1px solid #141414;border-radius:6px;width:100%;max-height:156px;overflow-y:auto;box-shadow:0 8px 16px #0003;z-index:1;transition:opacity .3s ease-in-out,transform .3s ease-in-out,visibility 0s .3s}#shoplift-preview-variant-selector .preview-variant-menu.preview-variant-menu__visible{visibility:visible;pointer-events:auto;opacity:100;transform:translateZ(0);transition:opacity .3s ease-in-out,transform .3s ease-in-out,visibility 0s 0s}@media screen and (max-width:400px){#shoplift-preview-variant-selector .preview-variant-menu{position:fixed;left:0;right:0;width:auto;bottom:110%}}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item{padding:12px 16px;display:flex;overflow:hidden}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item .menu-variant-label{margin-right:6px}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item span{overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap;white-space:nowrap;color:#f6f6f6;font-size:14px;font-style:normal;font-weight:500}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:hover{background-color:#545454}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:last-of-type{border-bottom-left-radius:6px;border-bottom-right-radius:6px}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:first-of-type{border-top-left-radius:6px;border-top-right-radius:6px}#shoplift-preview-control div:has(#shoplift-exit-preview-button){padding:0 16px}#shoplift-exit-preview-button{padding:6px 8px;font-weight:500;line-height:75%;border-radius:4px;background-color:transparent;border:none;text-decoration:none}#shoplift-exit-preview-button:hover{cursor:pointer;background-color:#333}#shoplift-preview-subscription-warning{position:relative;display:flex;align-items:center;gap:6px;padding:6px 10px;margin:0 4px;border-left:1px solid #333;cursor:help;outline:none}#shoplift-preview-subscription-warning__icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background-color:#f59e0b;color:#141414!important;font-weight:700;font-size:12px!important;line-height:1;flex-shrink:0}#shoplift-preview-subscription-warning__label{font-size:13px!important;font-weight:500;color:#fbbf24!important;text-wrap:nowrap;white-space:nowrap}#shoplift-preview-subscription-warning__tooltip{position:absolute;bottom:calc(100% + 8px);right:0;max-width:320px;width:max-content;padding:10px 12px;border-radius:6px;background-color:#1f1f1f;color:#fff!important;font-size:12px!important;line-height:1.4!important;box-shadow:0 8px 16px #0000004d;z-index:10000;opacity:0;visibility:hidden;transform:translateY(4px);transition:opacity .2s ease-in-out,transform .2s ease-in-out,visibility 0s .2s;pointer-events:none}#shoplift-preview-subscription-warning__tooltip.shoplift-preview-subscription-warning__tooltip--visible{opacity:1;visibility:visible;transform:translateY(0);transition:opacity .2s ease-in-out,transform .2s ease-in-out,visibility 0s 0s}#shoplift-preview-subscription-warning:focus-visible{box-shadow:inset 0 0 0 2px #f59e0b;border-radius:4px}#shoplift-preview-control:has(#shoplift-preview-subscription-warning){max-width:480px}/*$vite$:1*/`,document.head.appendChild(tt);var ht=" daum[ /]| deusu/| yadirectfetcher|(?:^|[^g])news(?!sapphire)|(?<! (?:channel/|google/))google(?!(app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!(?: ya| yandex|^job|inapp;) ?)search|(?<!(?:lib))http|(?<![hg]m)score|@[a-z][\\w-]+\\.|\\(\\)|\\.com|\\b\\d{13}\\b|^<|^[\\w \\.\\-\\(?:\\):]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[^ ]{50,}$|^\\d+\\b|^\\w+/[\\w\\(\\)]*$|^active|^ad muncher|^amaya|^avsdevicesdk/|^biglotron|^bot|^bw/|^clamav[ /]|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d \\(compatible;?\\)$|^mozilla/\\d\\.\\d \\w*$|^navermailapp|^netsurf|^offline|^owler|^postman|^python|^rank|^read|^reed|^rest|^rss|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor/|^track|^valid|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|^{{.*}}$|admin|analyzer|archive|ask jeeves/teoma|bit\\.ly/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check|chrome-lighthouse|chromeframe|classifier|clean|cloud|crawl|cypress/|dareboost|datanyze|dejaclick|detect|dmbrowser|download|evc-batch/|feed|firep
7hp|gomezagent|headless|httrack|hubspot marketing grader|hydra|ibisbrowser|images|insight|inspect|iplabel|ips-agent|java(?!;)|library|mail\\.ru/|manager|measure|neustar wpm|node|nutch|offbyone|optimize|pageburst|pagespeed|parser|perl|phantomjs|pingdom|powermarks|preview|proxy|ptst[ /]\\d|reputation|resolver|retriever|rexx;|rigor|rss\\b|scan|scrape|server|sogou|sparkler/|speedcurve|spider|splash|statuscake|synapse|synthetic|tools|torrent|trace|transcoder|url|virtuoso|wappalyzer|watch|webglance|webkit2png|whatcms/|zgrab",ft=/bot|spider|crawl|http|lighthouse/i,z;function gt(){if(z instanceof RegExp)return z;try{z=new RegExp(ht,"i")}catch{z=ft}return z}function mt(a){return!!a&>().test(a)}class Q{timestamp;constructor(){this.timestamp=new Date}}class yt extends Q{type;testId;hypothesisId;constructor(t,e,i){super(),this.type=3,this.testId=t,this.hypothesisId=e,this.timestamp=i}}class vt extends Q{type;path;constructor(t){super(),this.type=4,this.path=t}}class wt extends Q{type;cart;constructor(t){super(),this.type=5,this.cart=t}}class et extends Error{isBot;constructor(){super(),this.isBot=!0}}function bt(a,t,e){for(const i of t.selectors){const s=a.querySelectorAll(i.cssSelector);for(let r=0;r<s.length;r++)e(t.testId,t.hypothesisId)}st(a,t,(i,s,r,n,o)=>o(s,r),e)}function U(a,t,e){for(const i of t.selectors)rt(a,t.testId,t.hypothesisId,i,e??(()=>{}));st(a,t,rt,e??(()=>{}))}function it(a){return a.urlPatterns.reduce((t,e)=>{switch(e.operator){case"contains":return t+`.*${e}.*`;case"endsWith":return t+`.*${e}`;case"startsWith":return t+`${e}.*`}},"")}function st(a,t,e,i){new MutationObserver(()=>{for(const r of t.selectors)e(a,t.testId,t.hypothesisId,r,i)}).observe(a.documentElement,{childList:!0,subtree:!0})}function rt(a,t,e,i,s){const r=a.querySelectorAll(i.cssSelector);for(let n=0;n<r.length;n++){let o=r.item(n);if(o instanceof HTMLElement&&o.dataset.shoplift!==""){o.dataset.shoplift="";for(const l of i.actions.sort(kt))o=St(a,i.cssSelector,o,l)}}return r.length>0&&s?(s(t,e),!0):!1}function St(a,t,e,i){switch(i.type){case"innerHtml":e.innerHTML=i.value;break;case"attribute":Ct(e,i.scope,i.value);break;case"css":Tt(a,t,i.value);break;case"js":It(a,e,i);break;case"copy":return Pt(e);case"remove":At(e);break;case"move":Et(e,parseInt(i.value));break}return e}function Ct(a,t,e){a.setAttribute(t,e)}function Tt(a,t,e){const i=a.createElement("style");i.innerHTML=`${t} { ${e} }`,a.getElementsByTagName("head")[0]?.appendChild(i)}function It(a,t,e){Function("document","element",`"use strict"; ${e.value}`)(a,t)}function Pt(a){const t=a.cloneNode(!0);if(!a.parentNode)throw"Can't copy node outside of DOM";return a.parentNode.insertBefore(t,a.nextSibling),t}function At(a){a.remove()}function Et(a,t){if(t===0)return;const e=Array.prototype.slice.call(a.parentElement.children).indexOf(a),i=Math.min(Math.max(e+t,0),a.parentElement.children.length-1);a.parentElement.children.item(i).insertAdjacentElement(t>0?"afterend":"beforebegin",a)}function kt(a,t){return nt(a)-nt(t)}function nt(a){return a.type==="copy"||a.type==="remove"?0:1}var M=(a=>(a[a.Template=0]="Template",a[a.Theme=1]="Theme",a[a.UrlRedirect=2]="UrlRedirect",a[a.Script=3]="Script",a[a.Dom=4]="Dom",a[a.Price=5]="Price",a))(M||{});const xt="data:image/svg+xml,%3csvg%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M9.96001%207.90004C9.86501%207.90004%209.77001%207.86504%209.69501%207.79004L6.43501%204.53004C6.19501%204.29004%205.80501%204.29004%205.56501%204.53004L2.30501%207.79004C2.16001%207.93504%201.92001%207.93504%201.77501%207.79004C1.63001%207.64504%201.63001%207.40504%201.77501%207.26004L5.03501%204.00004C5.56501%203.47004%206.43001%203.47004%206.96501%204.00004L10.225%207.26004C10.37%207.40504%2010.37%207.64504%2010.225%207.79004C10.15%207.86004%2010.055%207.90004%209.96001%207.90004Z'%20fill='white'/%3e%3c/svg%3e",_t="data:image/svg+xml,%3csvg%20width='14'%20height='24'%20viewBox='0%200%2014%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M12.3976%2014.5255C12.2833%2013.8788%2012.0498%2013.3024%2011.6952%2012.7961C11.3416%2012.2898%2010.9209%2011.8353%2010.4353%2011.4317C9.94868%2011.0291%209.43546%2010.6488%208.89565%2010.292C8.48487%2010.049%208.09577%209.78565%207.72637%209.50402C7.35697%209.2224%207.08016%208.89503%206.89694%208.51987C6.71273%208.14471%206.67826%207.69533%206.79055%207.1697C6.86345%206.83216%206.97476%206.54647%207.12351%206.31162C7.27324%206.07778%207.47124%205.89986%207.7175%205.77684C7.96377%205.65483%208.21989%205.59383%208.48389%205.59383C8.88087%205.59383%209.17639%205.7016%209.3734%205.91714C9.56943%206.13268%209.68271%206.42345%209.71424%206.78946C9.74576%207.15547%209.72015%207.55401%209.63839%207.98509C9.55663%208.41617%209.43645%208.84724%209.27687%209.27934L13.5127%208.80149C13.9638%207.52656%2014.1017%206.42447%2013.9264%205.49725C13.751%204.56901%2013.2664%203.85122%2012.4724%203.34491C12.239%203.19648%2011.9779%203.07041%2011.6893%202.96569L12.0026%201.50979L9.86397%200L
77.3875%201.50979L7.11169%202.78878C6.65166%202.8874%206.21724%203.01957%205.8114%203.19038C4.85292%203.594%204.06684%204.15115%203.45117%204.86385C2.83452%205.57655%202.42571%206.40108%202.22378%207.33847C2.06616%208.06947%202.04942%208.70796%202.17551%209.25087C2.30061%209.7948%202.52028%2010.2828%202.8355%2010.7139C3.14974%2011.145%203.51816%2011.5344%203.93977%2011.881C4.36039%2012.2288%204.782%2012.5521%205.20164%2012.851C5.68334%2013.1702%206.13844%2013.5169%206.56497%2013.8921C6.99052%2014.2672%207.31954%2014.7125%207.55004%2015.228C7.78055%2015.7445%207.81502%2016.3769%207.65347%2017.1262C7.56482%2017.5389%207.43676%2017.8765%207.27028%2018.1388C7.10381%2018.4011%206.89596%2018.5983%206.64772%2018.7295C6.3985%2018.8606%206.12071%2018.9267%205.8114%2018.9267C5.21641%2018.9267%204.79776%2018.6034%204.62833%2018.1632C4.4589%2017.7229%204.47367%2017.2583%204.60075%2016.5639C4.72782%2015.8705%205.05092%2015.1395%205.37107%2014.3699H1.17665C1.17665%2014.3699%200.207341%2016.1115%200.0310135%2017.6762C-0.0655232%2018.5302%200.0635208%2019.2653%200.41519%2019.8844C0.76686%2020.5036%201.33032%2020.9814%202.10655%2021.319C2.39222%2021.443%202.7104%2021.5447%203.05813%2021.623L2.54589%2024H7.17473L7.7047%2021.5386C8.08493%2021.442%208.43857%2021.3231%208.76562%2021.1787C9.73985%2020.7476%2010.52%2020.1427%2011.1071%2019.3649C11.6932%2018.5871%2012.0873%2017.7291%2012.2892%2016.7917C12.4744%2015.9295%2012.5099%2015.1741%2012.3966%2014.5275L12.3976%2014.5255Z'%20fill='white'/%3e%3c/svg%3e";async function Rt(a){let t=a.replace(/-/g,"+").replace(/_/g,"/");for(;t.length%4;)t+="=";const e=atob(t),i=Uint8Array.from(e,n=>n.charCodeAt(0)),s=new Blob([i]).stream().pipeThrough(new DecompressionStream("gzip")),r=await new Response(s).text();return JSON.parse(r)}function F(a,t){return typeof t=="string"&&/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+(?:Z|[+-]\d+)/.test(t)?new Date(t):t}function X(a,t){return t}function q(a,t=!1,e=!1,i=","){const s=a/100;if(e){const n=Math.round(s).toLocaleString("en-US");return i!==","?n.replace(/,/g,i):n}else{const r=t?",":".",n=s.toFixed(2).split("."),o=parseInt(n[0],10),l=n[1]??"00",c=o.toLocaleString("en-US");return i!==","?`${c.replace(/,/g,i)}${r}${l}`:t?`${c.replace(/,/g,".")}${r}${l}`:`${c}${r}${l}`}}function H(a,t,e,i){const s=t.replace("{{amount}}",q(a,!1,!1)).replace("{{amount_no_decimals}}",q(a,!1,!0)).replace("{{amount_with_comma_separator}}",q(a,!0,!1)).replace("{{amount_no_decimals_with_comma_separator}}",q(a,!0,!0)).replace("{{amount_with_space_separator}}",q(a,!1,!1," ")).replace("{{amount_no_decimals_with_space_separator}}",q(a,!1,!0," ")).replace("{{amount_with_apostrophe_separator}}",q(a,!1,!1,"'")).replace("{{amount_no_decimals_with_apostrophe_separator}}",q(a,!1,!0,"'")).replace("{{amount_with_period_and_space_separator}}",q(a,!1,!1,". ")).replace("{{amount_no_decimals_with_period_and_space_separator}}",q(a,!1,!0,". "));return i?`${s} ${e}`:s}function ot(a){return a.replace(/[^\d.,\s-]/g,"").trim()}function j(a){const t=new Map;for(const[e,i,s]of a.variants)t.set(e,{priceInCents:i,compareAtPriceInCents:s});return t}function Dt(a,t,e,i){const{priceInCents:s,compareAtPriceInCents:r}=e,{moneyFormat:n,currency:o,currencyCodeEnabled:l}=i;if(a.getAttribute("data-sl-attribute-p")===t)a.innerHTML=H(s,n,o,l);else if(a.getAttribute("data-sl-attribute-cap")===t)r<=0||r<=s?a.remove():a.innerHTML=H(r,n,o,l);else if(a.getAttribute("data-sl-attribute-discount")===t&&!(r<=0||r<=s)){const d=Math.round((r-s)/r*100),p=ot(H(r-s,n,o,!1)),h=a.getAttribute("data-sl-format")||"percent";h==="percent"?a.textContent=`-${d}%`:h==="amount"?a.textContent=`-${p}`:h==="both"&&(a.textContent=`-${d}% (-${p})`)}}function Ot(a){const t=[],e={id:"url-pattern",operator:"contains",value:"/"};for(const[i,s,r]of a.variants){t.push({id:`p-${i}`,cssSelector:`[data-sl-attribute-p="${i}"]`,urlPatterns:[e],actions:[{id:`p-action-${i}`,type:"innerHtml",scope:"price",value:H(s,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]});const n=r<=0||r<=s;if(t.push({id:`cap-${i}`,cssSelector:`[data-sl-attribute-cap="${i}"]`,urlPatterns:[e],actions:[{id:`cap-action-${i}`,type:n?"remove":"innerHtml",scope:"compare-at-price",value:n?"":H(r,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]}),!n&&r>s){const o=Math.round((r-s)/r*100),l=ot(H(r-s,a.moneyFormat,a.currency,!1));t.push({id:`d-${i}`,cssSelector:`[data-sl-attribute-discount="${i}"]`,urlPatterns:[e],actions:[{id:`d-action-${i}`,type:"js",scope:null,value:`var format = element.getAttribute('data-sl-format') || 'percent'; if (format === 'percent') { element.textContent = '-${o}%'; } else if (format === 'amount') { element.textContent = '-${l}'; } else if (format === 'both') { element.textContent = '-${o}% (-${l})'; }`}]})}}return t}const Jt="modulepreload",Yt=function(a){return"/"+a},Zt={}
7,Vt=function(t,e,i){let s=Promise.resolve();function r(n){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=n,window.dispatchEvent(o),!o.defaultPrevented)throw n}return s.then(n=>{for(const o of n||[])o.status==="rejected"&&r(o.reason);return t().catch(r)})};function at(a,t,e){const i=e?a.plans.filter(c=>!c.variantId||c.variantId===e):a.plans,s=[],r=[];for(const c of i)c.direction==="decrease"?(s.push(c.existingShopifyPlanId),r.push(c.createdShopifyPlanId)):(s.push(c.createdShopifyPlanId),r.push(c.existingShopifyPlanId));const n=t?s:r,o=t?r:s;if(e)for(const c of a.plans)for(const d of[c.existingShopifyPlanId,c.createdShopifyPlanId])d&&!n.includes(d)&&!o.includes(d)&&o.push(d);const l={};for(let c=0;c<o.length;c++){const d=o[c],p=n[c];d&&p&&(l[d]=p)}return{showPlanIds:n,hidePlanIds:o,swapMap:l}}function lt(a,t,e){const i=t?a.plans.find(r=>r.variantId===t):void 0;if(i)return i.direction;if(e){const r=a.plans.find(n=>n.productId===e);if(r)return r.direction}return a.plans.find(r=>!r.variantId)?.direction??null}function K(a,t){const e=t?a.plans.filter(r=>!r.productId||r.productId===t):a.plans,i={};for(const r of e)i[r.existingShopifyPlanId]=r.existingDiscountAmount,i[r.createdShopifyPlanId]=r.existingDiscountAmount;const s=Math.max(...Object.values(i),0);return{discountMap:i,maxDiscount:s}}function W(a){const t=document.querySelector('form[action*="/cart/add"] input[name="product-id"]')?.value;if(t)return t;if(a){for(const r of Array.from(document.querySelectorAll("[data-sl-attribute-p]"))){const n=r.getAttribute("data-sl-attribute-p");if(!n)continue;const o=a.variants.find(l=>l[0]===n);if(o?.[3])return o[3]}const s=document.querySelector('form[action*="/cart/add"] input[name="id"]')?.value;if(s){const r=a.variants.find(n=>n[0]===s);if(r?.[3])return r[3]}}const e=window,i=e.ShopifyAnalytics?.meta?.product?.id??e.meta?.product?.id;return i!=null?String(i):null}function D(a,t){return a.widget.selectors[t]??[]}function N(a,t){return a.replace(/[\d.]+%/,`${t}%`)}function $(a,t){const e=document.createTreeWalker(a,NodeFilter.SHOW_TEXT);let i=e.nextNode();for(;i;){if(i.nodeValue!==null){const s=t(i.nodeValue);if(s!==i.nodeValue){i.nodeValue=s;return}}i=e.nextNode()}}function ct(a,t){return a===null?!1:a==="decrease"?!t:t}async function Lt(a){if(a.subscriptionSwapDone)return;const t=a.getActiveAssignment();if(!t)return;const e=a.getHypothesis(t.hypothesisId);if(!e?.subscriptionData)return;a.subscriptionSwapDone=!0;const i=e.subscriptionData,s=e.isControl,r=[...new Set(i.plans.map(d=>d.direction))].join(",");a.log(`[SUB-SWAP] ${s?"A":"B"} side, directions=${r}`);const n=i.plans.some(d=>d.variantId);let o=!1,l=!1;function c(){if(!l){l=!0;try{const d=n?document.querySelector("select[name='id'], input[name='id']")?.value:void 0,{showPlanIds:p,hidePlanIds:h,swapMap:u}=at(i,s,d);a.swapMap=u;const b=D(i,"widgetParent"),k=D(i,"subscriptionPlans"),S=D(i,"subscriptionInput");if(!b.length||!k.length||!S.length)return;const P=document.querySelector(b[0].selector);if(!P?.shadowRoot)return;const _=P.shadowRoot.querySelector(k[0].selector);if(!_?.shadowRoot)return;const C=S[0].selector;let m=null;if(i.widget.widgetType==="buttons"||i.widget.widgetType==="radio"){const y=Array.from(_.shadowRoot.querySelectorAll(C));if(!y.length)return;for(const v of y){const g=v.closest("label");g&&(p.includes(v.value)?g.style.display="":h.includes(v.value)&&(g.style.display="none"))}const w=y.some(v=>p.includes(v.value)&&v.checked),T=y.some(v=>h.includes(v.value)&&v.checked);if((w||T)&&(o=!1),!w&&!o){o=!0;for(const v of y)if(p.includes(v.value)){v.closest("label")?.click(),v.dispatchEvent(new Event("change",{bubbles:!0}));break}}const f=y.find(v=>v.checked);m=f&&p.includes(f.value)?f.value:p[0]??null}else if(i.widget.widgetType==="dropdown"){const y=_.shadowRoot.querySelector("select");if(!y)return;for(const w of Array.from(y.options))h.includes(w.value)&&(w.style.display="none",w.disabled=!0);if(h.includes(y.value)){const w=Array.from(y.options).find(T=>p.includes(T.value));w&&(y.value=w.value,y.dispatchEvent(new Event("change",{bubbles:!0})))}m=p.includes(y.value)?y.value:p[0]??null}if(m){const y=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const w of y)w.value!==m&&(w.value=m)}}finally{l=!1}}}
7if(a.subscriptionHideWrongPlans=c,a.swapMap=at(i,s).swapMap,c(),n){const d=document.querySelector("select[name='id'], input[name='id']");d&&d.addEventListener("change",c)}}function B(a){const t=D(a,"widgetParent");return t.length?document.querySelector(t[0].selector)?.shadowRoot??null:null}function J(a,t){const e=D(a,"subscriptionPlans");return e.length?t.querySelector(e[0].selector)?.shadowRoot??null:null}function Y(a,t){const e=new URLSearchParams(window.location.search).get("variant");if(e)return e;{const i=document.querySelector('form[action*="/cart/add"] input[name="id"]')?.value;if(i)return i}return a.size>0?[...a.keys()][0]:void 0}function G(a,t){return H(a,t.moneyFormat,t.currency,t.currencyCodeEnabled)}function $t({originalFetch:a,swapMap:t,slptValue:e,getSelectedPlanId:i,log:s}){if(window.fetch.__shoplift_intercepted)return s("[SUB-INTERCEPT] already installed â skipping"),()=>{};function r(o){if(i){const l=i();if(l)return t[l]??l}return t[o]??o}const n=function(o,l){if((typeof o=="string"?o:o instanceof URL?o.href:o.url).includes("/cart/add")&&l?.body)try{if(l.body instanceof FormData){const d=l.body.get("selling_plan");d?l.body.set("selling_plan",r(String(d))):(!d||d==="")&&e&&l.body.set("properties[_slpt]",e)}else if(typeof l.body=="string"){const d=JSON.parse(l.body);if(d.items)for(const p of d.items){const h=String(p.selling_plan??"");h?p.selling_plan=r(h):!p.selling_plan&&e&&(p.properties||(p.properties={}),p.properties._slpt=e)}else if(d.id){const p=String(d.selling_plan??"");p?d.selling_plan=r(p):!d.selling_plan&&e&&(d.properties||(d.properties={}),d.properties._slpt=e)}l.body=JSON.stringify(d)}}catch(d){s("[SUB-INTERCEPT] body parse failed; cart-add proceeds with un-swapped plan",d)}return a.call(window,o,l)};return n.__shoplift_intercepted=!0,window.fetch=n,function(){window.fetch===n&&(window.fetch=a)}}function Mt({log:a}){if(window.fetch.__shoplift_intercepted)return a("[SUB-PREVIEW-BLOCK] already installed â skipping"),()=>{};const t=window.fetch,e=function(i,s){const r=typeof i=="string"?i:i instanceof URL?i.href:i.url;return r.includes("/cart/add")?(a("[SUB-PREVIEW-BLOCK] cart-add blocked in preview mode",{url:r}),Promise.resolve(new Response(JSON.stringify({id:0,properties:{},quantity:0,variant_id:0,key:"preview",title:"Preview â cart-add blocked",price:0,original_price:0,line_price:0,original_line_price:0,total_discount:0,discounts:[],preview:!0}),{status:200,headers:{"Content-Type":"application/json"}}))):t.call(window,i,s)};return e.__shoplift_intercepted=!0,window.fetch=e,function(){window.fetch===e&&(window.fetch=t)}}function dt({data:a,runUpdates:t,debounceMs:e=150}){let i=null;function s(){i&&clearTimeout(i),t(),i=setTimeout(t,e)}let r=null;const n=[],o={childList:!0,subtree:!0,characterData:!0,attributes:!0};function l(h){for(const u of n)u.disconnect();n.length=0;for(const u of Array.from(h.querySelectorAll("*")))if(u.shadowRoot){const b=new MutationObserver(s);b.observe(u.shadowRoot,o),n.push(b)}}function c(){const h=B(a);return h?(r&&r.disconnect(),l(h),r=new MutationObserver(u=>{u.some(b=>b.type==="childList"&&b.addedNodes.length>0)&&l(h),s()}),r.observe(h,o),!0):!1}const d=document.body||document.documentElement,p=new MutationObserver(()=>{c()&&s()});return p.observe(d,{childList:!0,subtree:!0}),c()&&s(),t(),function(){i&&(clearTimeout(i),i=null),p.disconnect(),r&&(r.disconnect(),r=null);for(const u of n)u.disconnect();n.length=0}}async function qt(a){if(a.subscriptionPriceDone)return;const t=a.getActiveAssignment(),e=t?a.getHypothesis(t.hypothesisId):void 0,i=e?.subscriptionData?null:a.findActiveSubscriptionTestControl(),s=e?.subscriptionData?e:i?.hypothesis;if(!s?.subscriptionData)return;const r=e?.subscriptionData?t.testId:i.testId;a.subscriptionPriceDone=!0;const n=s.subscriptionData,o=s.isControl,l=s.priceData,c=n.widget.widgetType;let d=W(l),p=K(n,d),h=p.discountMap,u=p.maxDiscount;function b(){const g=W(l);g!==d&&(d=g,p=K(n,d),h=p.discountMap,u=p.maxDiscount,a.log(`[SUB-PRICE] scope refreshed side=${o?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${u}`))}a.log(`[SUB-PRICE] side=${o?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${u}
7`),a.updatePriceTestHiddenInputs(r,o?"control":"variant",!1);function k(){if(!l)return null;const g=j(l),I=Y(g),A=lt(n,I,d);if(!ct(A,o))return null;const E=I?g.get(I):void 0;return E?{formattedVariantPrice:G(E.priceInCents,l),formattedDiscounted:G(E.priceInCents*(1-u/100),l)}:null}$t({originalFetch:a.fetch,swapMap:a.swapMap??{},slptValue:a.slptValue??void 0,log:a.log,getSelectedPlanId:()=>{const g=B(n);if(!g)return null;const I=J(n,g);if(!I)return null;const A=D(n,"subscriptionInput"),E=A.length?A[0].selector:'input[name="rc_plan"]';return I.querySelector(`${E}:checked`)?.value??null}});function S(g){const I=D(n,"subscriptionDiscount");for(const A of I)if(A.selector.includes("badge")||A.selector.includes("__badge")){const E=g.querySelector(A.selector);E?.textContent&&!E.textContent.includes(`${u}%`)&&$(E,x=>N(x,u))}}function P(g){const I=k();if(!I)return;const A=D(n,"subscriptionCompareAt");for(const E of A){const x=g.querySelector(E.selector)||g.querySelector(`[part~="${E.selector}"]`);x?.textContent&&!x.textContent.includes(I.formattedVariantPrice)&&$(x,R=>/\d/.test(R)?I.formattedVariantPrice:R)}}function _(g,I){const A=D(n,"subscriptionCompareAt"),E=I===0?"none":"";for(const x of A){const R=g.querySelector(x.selector)||g.querySelector(`[part~="${x.selector}"]`);R&&(E==="none"?R.style.display!=="none"&&(R.style.display="none"):R.style.display==="none"&&(R.style.display=""))}}function C(g){const I=D(n,"subscriptionInput"),A=I.length?I[0].selector:'input[name="rc_plan"]',E=D(n,"subscriptionPlanDiscount"),x=E.length?E[0].selector:".rc-plans-button__discount";for(const R of Array.from(g.querySelectorAll("label"))){const V=R.querySelector(A),O=R.querySelector(x);if(V&&O){const L=h[V.value];if(L!==void 0){if(L===0)O.style.display!=="none"&&(O.style.display="none");else if(O.style.display==="none"&&(O.style.display=""),O.textContent){const Z=O.textContent.match(/[\d.]+%/)?.[0];Z&&Z!==`${L}%`&&$(O,Kt=>N(Kt,L))}}}}}function m(g){const I=g.querySelector("select");if(I)for(const A of Array.from(I.options)){const E=h[A.value];if(E!==void 0&&A.textContent){const x=A.textContent.match(/[\d.]+%/)?.[0];x&&x!==`${E}%`&&(A.textContent=N(A.textContent,E))}}}function y(g,I){const E=D(n,"subscriptionDiscount").filter(x=>x.selector.includes("benefit")||x.selector==="rc-benefits");for(const x of E){const R=g.querySelector(x.selector);if(R?.shadowRoot){for(const V of Array.from(R.shadowRoot.querySelectorAll("li")))if(V.textContent?.includes("Save")){const O=V;if(I===0)O.style.display!=="none"&&(O.style.display="none");else{O.style.display==="none"&&(O.style.display="");const L=V.textContent.match(/[\d.]+%/)?.[0];L&&L!==`${I}%`&&$(V,Z=>N(Z,I))}}}}}let w=!1;function T(){if(!w){w=!0;try{if(b(),d!==null&&Object.keys(h).length===0)return;const g=B(n);if(!g)return;S(g),l&&P(g);const I=J(n,g);let A=u;if(I){const E=D(n,"subscriptionInput"),x=E.length?E[0].selector:'input[name="rc_plan"]',R=I.querySelector(`${x}:checked`);if(R){const V=h[R.value];V!==void 0&&(A=V)}c==="buttons"||c==="radio"?C(I):m(I)}_(g,A),y(g,A)}finally{w=!1}}}function f(){const g=k();if(!g)return;const I=B(n);if(!I)return;const A=D(n,"onetimeToggle"),E=A.length?A[0].selector:'input[value="onetime"]';if(!I.querySelector(E)?.checked)return;const R=D(n,"subscriptionPrice");for(const V of R){const O=I.querySelector(V.selector)||I.querySelector(`[part~="${V.selector}"]`);O?.textContent&&!O.textContent.includes(g.formattedDiscounted)&&$(O,L=>/\d/.test(L)?g.formattedDiscounted:L)}}function v(){a.subscriptionHideWrongPlans&&a.subscriptionHideWrongPlans(),T(),a.subscriptionUpdateOneTime&&a.subscriptionUpdateOneTime(),f()}dt({data:n,runUpdates:v})}async function Ht(a){if(a.subscriptionOneTimeDone)return;const t=a.getActiveAssignment(),e=t?a.getHypothesis(t.hypothesisId):void 0,i=!!(e?.subscriptionData&&e.priceData),s=i?null:a.findActiveSubscriptionTestControl(),r=i?e:s?.hypothesis;if(!r?.subscriptionData||!r.priceData)return;const n=i?t.testId:s.testId;a.subscriptionOneTimeDone=!0;const o=r.subscriptionData,l=r.priceData,c=j(l),d=r.isControl,p=d?"control":"variant";a.slptValue=`${n}:${p}
7:f`,a.updatePriceTestHiddenInputs(n,p,!1);function h(){const u=B(o);if(!u)return;const b=Y(c);if(!b)return;const k=W(l),S=lt(o,b,k);if(!ct(S,d))return;const P=c.get(b);if(!P)return;const _=H(P.priceInCents,l.moneyFormat,l.currency,l.currencyCodeEnabled),C=D(o,"onetimePrice");if(!C.length)return;const m=D(o,"onetimeContainer"),y=m.length?m[0].selector:'[part~="rc-purchase-option__onetime"]',T=u.querySelector(y)??u;for(const f of C){let v=null;try{v=T.querySelector(f.selector)}catch{v=null}v??=T.querySelector(`[part~="${f.selector}"]`),v&&v.textContent&&!v.textContent.includes(_)&&$(v,g=>/\d/.test(g)?_:g)}}a.subscriptionUpdateOneTime=h,h()}async function Nt(a,t){const{subscriptionPreviewRender:e}=await Vt(async()=>{const{subscriptionPreviewRender:i}=await Promise.resolve().then(()=>jt);return{subscriptionPreviewRender:i}},void 0);return e(a.subscriptionData,a.priceData,a.isControl,t)}function Ut(a,t){const e=a.widget.selectors.widgetParent??[],i=a.widget.selectors.subscriptionPlans??[],s=a.widget.selectors.subscriptionInput??[];if(!e.length||!i.length||!s.length){t("[SUB-GLOBAL-HIDE] Missing required selectors â skipping");return}const r=e[0].selector,n=i[0].selector,o=s[0].selector;let l=!1,c=null,d=!1;function p(){if(!d){d=!0;try{h()}finally{d=!1}}}function h(){const P=document.querySelector(r);if(!P?.shadowRoot)return;const _=P.shadowRoot.querySelector(n);if(!_?.shadowRoot)return;_.shadowRoot!==c&&(c=_.shadowRoot,l=!1);let C=0;if(a.widget.widgetType==="buttons"||a.widget.widgetType==="radio"){const m=Array.from(_.shadowRoot.querySelectorAll(o));for(const f of m)if(a.planIds.includes(f.value)){f.disabled||(f.disabled=!0);const v=f.closest("label");v&&v.style.display!=="none"&&(v.style.display="none",C++)}const y=m.filter(f=>!a.planIds.includes(f.value));if(!y.some(f=>f.checked)&&!l&&y.length>0){l=!0;const f=y[0];f.closest("label")?.click(),f.dispatchEvent(new Event("change",{bubbles:!0})),t(`[SUB-GLOBAL-HIDE] Preselected first visible plan input=${f.value}`)}const T=y.find(f=>f.checked)??y[0];if(T){const f=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const v of f)v.value!==T.value&&(v.value=T.value,t(`[SUB-GLOBAL-HIDE] Mirrored plan id ${T.value} to form selling_plan input`))}}else if(a.widget.widgetType==="dropdown"){const m=_.shadowRoot.querySelector("select");if(!m)return;for(const T of Array.from(m.options))a.planIds.includes(T.value)&&(T.style.display!=="none"&&(T.style.display="none"),T.disabled||(T.disabled=!0),C++);const y=Array.from(m.options).filter(T=>!a.planIds.includes(T.value)),w=y.some(T=>T.value===m.value);y.length>0&&!w&&!l&&(l=!0,m.value=y[0].value,m.dispatchEvent(new Event("change",{bubbles:!0})),t(`[SUB-GLOBAL-HIDE] Preselected first visible option=${y[0].value}`))}C>0&&t(`[SUB-GLOBAL-HIDE] Hidden ${C} B-side plan buttons`)}const u={childList:!0,subtree:!0,characterData:!0};let b=null;function k(P){b?.disconnect(),b=new MutationObserver(()=>p()),b.observe(P,u)}function S(){const P=document.querySelector(r);if(!P?.shadowRoot)return!1;p(),new MutationObserver(()=>{p();const m=P.shadowRoot.querySelector(n);m?.shadowRoot&&k(m.shadowRoot)}).observe(P.shadowRoot,u);const C=P.shadowRoot.querySelector(n);return C?.shadowRoot&&k(C.shadowRoot),!0}if(!S()){t("[SUB-GLOBAL-HIDE] Widget not in DOM yet â waiting via MutationObserver");const P=new MutationObserver(()=>{S()&&P.disconnect()});P.observe(document.body??document.documentElement,{childList:!0,subtree:!0})}}const ut="Limited preview",Ft="Add-to-cart and checkout prices won't reflect this test until it launches â test selling plans are not created in your subscription app until after a test is launched.",Bt=5e3;function zt(){const a=document.createElement("div");a.id="shoplift-preview-subscription-warning";const t=document.createElement("span");t.id="shoplift-preview-subscription-warning__icon",t.setAttribute("aria-hidden","true"),t.textContent="!";const e=document.createElement("span");e.id="shoplift-preview-subscription-warning__label",e.textContent=ut;const i=document.createElement("div");i.id="shoplift-preview-subscription-warning__tooltip",i.setAttribute("role","tooltip"),i.textContent=Ft,a.appendChild(t),a.appendChild(e),a.appendChild(i),a.setAttribute("tabindex","0"),a.setAttribute("aria-describedby",i.id),a.setAttribute("aria-label",ut);let s=null;function r(){s!==null&&(clearTimeout(s),s=null)}function n(){i.classList.add("shoplift-preview-subscription-warning__tooltip--visible")}function o(){i.classList.remove("shoplift-preview-subscription-warning__tooltip--visible")}function l(){n(),r(),s=setTimeout(()=>{o(),s=null},Bt)}function c(){r(),n()}function d(){s===null&&o()}a.addEventListener("mouseenter",c),a.addEventListener("mouseleave",d),a.addEventListener("focus",c),a.addEventListener("blur",d);function p(u){try{const b=u.target;if(!(b instanceof Element))return;(b.closest('form[action*="/cart/add"] button[type="submit"], form[action*="/cart/add"] input[type="submit"]')!==null||b.closest('[name="add"], button[name="add"], [data-add-to-cart], button[data-add-to-cart]')!==null)&&l()}catch{}}
7document.addEventListener("click",p,!0);function h(){r(),document.removeEventListener("click",p,!0),a.removeEventListener("mouseenter",c),a.removeEventListener("mouseleave",d),a.removeEventListener("focus",c),a.removeEventListener("blur",d),a.remove()}return{root:a,tooltip:i,cleanup:h}}let pt=!1;class Wt{constructor(t,e,i,s,r,n,o,l,c,d,p,h,u){this.shop=t,this.host=e,this.eventHost=i,this.disableReferrerOverride=l,this.logHistory=[],this.legacySessionKey=`SHOPLIFT_SESSION_${this.shop}`,this.cssHideClass=s?"shoplift-hide":"",this.testConfigs=p.map(k=>({...k,startAt:new Date(k.startAt),statusHistory:k.statusHistory.map(S=>({...S,createdAt:new Date(S.createdAt)}))})),this.inactiveTestConfigs=h,this.hiddenSubscriptionPlans=u,this.sendPageView=!!r,this.shopliftDebug=n===!0,this.telemetryEnabled=c===!0,this.gaConfig=o!=={"sendEvents":false,"mode":"gtag"}?o:{sendEvents:!1},this.fetch=window.fetch.bind(window),this.localStorageSet=window.localStorage.setItem.bind(window.localStorage),this.localStorageGet=window.localStorage.getItem.bind(window.localStorage);const b=this.getDeviceType();this.device=b!=="tablet"?b:"mobile",this.state=this.loadState(),this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.testsFilteredByAudience=p.filter(k=>
7k.status=="active"),this.getCountryTimeout=d===1000?1e3:d,this.log("State Loaded",JSON.stringify(this.state))}DATA_SL_ATTRIBUTE_P="data-sl-attribute-p";DATA_SL_TEST_ID="data-sl-test-id";VIEWPORT_TRACK_THRESHOLD=.5;temporarySessionKey="Shoplift_Session";essentialSessionKey="Shoplift_Essential";analyticsSessionKey="Shoplift_Analytics";priceSelectorsSessionKey="Shoplift_PriceSelectors_v2";legacySessionKey;cssHideClass;testConfigs;inactiveTestConfigs;hiddenSubscriptionPlans;testsFilteredByAudience;sendPageView;shopliftDebug;gaConfig;telemetryEnabled;getCountryTimeout;state;subscriptionPreviewWarningCleanup=null;shopifyAnalyticsId;cookie=document.cookie;isSyncing=!1;isSyncingGA=!1;fetch;localStorageSet;localStorageGet;sessionStorageSet=window.sessionStorage.setItem.bind(window.sessionStorage);sessionStorageGet=window.sessionStorage.getItem.bind(window.sessionStorage);urlParams=new URLSearchParams(window.location.search);device;logHistory;activeViewportObservers=new Map;clientIdRetryCount=0;deriveCategoryFromExistingTests(){if(!this.state.temporary.testCategory&&this.state.essential.visitorTests.length>0){const t=this.state.essential.visitorTests.some(e=>{if(!e.hypothesisId)return!1;const i=this.getHypothesis(e.hypothesisId);return i&&["theme","basicScript","price"].includes(i.type)});this.state.temporary.testCategory=t?"global":"conditional",this.persistTemporaryState(),this.log("Derived test category from existing visitorTests: %s",this.state.temporary.testCategory)}}
7async init(){try{if(this.log("Shoplift script initializing"),window.Shopify&&window.Shopify.designMode){this.log("Skipping script for design mode");return}if(window.location.href.includes("slScreenshot=true")){this.log("Skipping script for screenshot");return}if(window.location.hostname.endsWith(".edgemesh.com")){this.log("Skipping script for preview");return}if(window.location.href.includes("isShopliftMerchant")){const s=this.urlParams.get("isShopliftMerchant")==="true";this.log("Setting merchant session to %s",s),this.state.temporary.isMerchant=s,this.persistTemporaryState()}if(this.state.temporary.isMerchant){this.log("Setting up preview for merchant"),typeof window.shoplift!="object"&&this.setShopliftStub(),this.state.temporary.previewConfig||this.hidePage(),await this.initPreview(),document.querySelector("#sl-preview-bar-hide")?.remove();return}if(this.state.temporary.previewConfig=void 0,mt(navigator.userAgent))return;const t=this.state.essential.visitorTests.filter(s=>s.hypothesisId&&+s.createdAt>Date.now()-6e4);if(t.length===0)this.sendDiagnosticTelemetry("page-landed",null);else for(const s of t)this.sendDiagnosticTelemetry("page-landed",s.testId,{hypothesisId:s.hypothesisId,isControl:s.assignedTo==="control",testType:s.testType??"unknown"});if(navigator.userAgent.includes("Chrome/118")){this.log("Random: %o",[Math.random(),Math.random(),Math.random()]);const s=await this.makeRequest({url:`${this.eventHost}/api/v0/events/ip`,method:"get"}).then(r=>r?.json());this.log(`IP: ${s}`),this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify(this.debugState(),X)}).catch()}if(this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.monitorConsentChange(),this.checkForThemePreview())return;if(!this.disableReferrerOverride&&this.state.temporary.originalReferrer!=null){this.log(`Overriding referrer from '${document.referrer}' to '${this.state.temporary.originalReferrer}'`);const s=this.state.temporary.originalReferrer;delete this.state.temporary.originalReferrer,this.persistTemporaryState(),Object.defineProperty(document,"referrer",{get:()=>s,enumerable:!0,configurable:!0})}if(await this.refreshVisitor(this.shopifyAnalyticsId),await this.handleVisitorTest()){this.log("Redirecting for visitor test");return}this.setShoplift(),this.showPage(),this.ensureCartAttributesForExistingPriceTests(!1);const i=this.state.essential.visitorTests.some(s=>(s.hypothesisId?this.getHypothesis(s.hypothesisId):void 0)?.subscriptionData!=null)||Object.values(this.state.temporary.testReservations??{}).some(s=>this.getHypothesis(s.hypothesisId)?.subscriptionData!=null);this.hiddenSubscriptionPlans&&!i&&(this.log(`[SUB-GLOBAL] Visitor not in subscription test â hiding ${this.hiddenSubscriptionPlans.planIds.length} B-side plans`),Ut(this.hiddenSubscriptionPlans,s=>this.log(s))),await this.subscriptionSwap(),await this.subscriptionOneTimePrice(),await this.subscriptionPriceChange(),await this.finalize(),console.log("SHOPLIFT SCRIPT INITIALIZED!")}catch(t){if(t instanceof et)return;throw t}finally{typeof window.shoplift!="object"&&this.setShopliftStub()}}getVariantColor(t){switch(t){case"a":return{text:"#141414",bg:"#E2E2E2"};case"b":return{text:"rgba(255, 255, 255, 1)",bg:"rgba(37, 99, 235, 1)"}}}getDefaultVariantTitle(t){return t.title?t.title:t.type==="price"?t.isControl?"Original prices":"Variant prices":t.isControl?"Original":"Untitled variant "+t.label.toUpperCase()}async initPreview(){const t=this.urlParams.get("previewConfig");if(t){this.state.temporary.previewConfig=void 0,this.log("Setting up the preview"),this.log("Found preview config, writing to temporary state");const e=await Rt(t);if(this.state.temporary.previewConfig=e,this.state.temporary.previewConfig.testTypeCategory===M.Price){this.hidePage(!0);const s=this.state.temporary.previewConfig;let r=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/${s.isDraft||!1}`;s.shopifyProductId&&(r+=`?productId=${s.shopifyProductId}`);const n=await this.makeJsonRequest({method:"get",url:r}).catch(o=>(this.log("Error getting domSelectors",o),null));
7if(s.variants.forEach(o=>o.domSelectors=n[o.id]?.domSelectors),s.isDraft){const o=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/subscription-preview`,l=await this.makeJsonRequest({method:"get",url:o}).catch(c=>(this.log("No subscription preview data for draft (test may not have a subscription widget)",c),null));l?.subscriptionData&&s.variants.forEach(c=>{c.subscriptionData=l.subscriptionData,c.priceData=l.priceData})}}this.persistTemporaryState();const i=new URL(window.location.toString());i.searchParams.delete("previewConfig"),this.queueRedirect(i)}else if(this.state.temporary.previewConfig){this.showPage();const e=this.state.temporary.previewConfig;if(e.testTypeCategory===M.Template&&this.handleTemplatePreview(e)&&this.initPreviewControls(e),e.testTypeCategory===M.UrlRedirect&&this.handleUrlPreview(e)&&this.initPreviewControls(e),e.testTypeCategory===M.Script&&this.handleScriptPreview(e)&&this.initPreviewControls(e),e.testTypeCategory===M.Price){const i=await this.handlePricePreview(e);e.isDraft?await this.handleSubscriptionPricePreview(e):await this.handleSubscriptionLivePreview(e),i&&this.initPreviewControls(e)}}}initPreviewControls(t){document.addEventListener("DOMContentLoaded",()=>{const e=t.variants.find(b=>b.id===t.currentVariant),i=e?.label||"a",s=t.variants,r=document.createElement("div");r.id="shoplift-preview-control";const n=document.createElement("div"),o=document.createElement("img");o.src=_t,o.height=24,o.width=14,n.style.padding="0 16px",n.style.lineHeight="100%",n.appendChild(o),r.appendChild(n);const l=document.createElement("div");l.id="shoplift-preview-variant-selector";const c=document.createElement("button");c.id="shoplift-preview-variant-menu-trigger";const d=document.createElement("div");d.className="menu-variant-label",d.style.backgroundColor=this.getVariantColor(i).bg,d.style.color=this.getVariantColor(i).text,d.innerText=i.toUpperCase(),c.appendChild(d);const p=document.createElement("span");if(p.id="shoplift-preview-variant-title",p.innerText=e?this.getDefaultVariantTitle(e):"Untitled variant "+i.toUpperCase(),c.appendChild(p),s.length>1){const b=document.createElement("img");b.src=xt,b.width=12,b.height=12,b.style.height="12px",b.style.width="12px",c.appendChild(b);const k=document.createElement("div");k.className="preview-variant-menu";for(const S of t.variants.filter(P=>P.id!==t.currentVariant)){const P=document.createElement("div");P.className="preview-variant-menu--item";const _=document.createElement("div");_.className="menu-variant-label",_.style.backgroundColor=this.getVariantColor(S.label).bg,_.style.color=this.getVariantColor(S.label).text,_.style.flexShrink="0",_.innerText=S.label.toUpperCase(),P.appendChild(_);const C=document.createElement("span");C.innerText=this.getDefaultVariantTitle(S),P.appendChild(C),P.addEventListener("click",()=>{this.pickVariant(S.id)}),k.appendChild(P)}l.appendChild(k),c.addEventListener("click",()=>{k.className!=="preview-variant-menu preview-variant-menu__visible"?k.classList.add("preview-variant-menu__visible"):k.classList.remove("preview-variant-menu__visible")}),document.addEventListener("click",S=>{S.target instanceof Element&&!c.contains(S.target)&&k.className==="preview-variant-menu preview-variant-menu__visible"&&k.classList.remove("preview-variant-menu__visible")})}else c.style.pointerEvents="none",d.style.margin="0";if(l.appendChild(c),r.appendChild(l),t.hasSubscription){this.subscriptionPreviewWarningCleanup?.();const b=zt();r.appendChild(b.root),this.subscriptionPreviewWarningCleanup=b.cleanup}const h=document.createElement("div"),u=document.createElement("button");u.id="shoplift-exit-preview-button",u.innerText="Exit",h.appendChild(u),u.addEventListener("click",()=>{this.exitPreview()}),r.appendChild(h),document.body.appendChild(r),requestAnimationFrame(()=>{r.classList.add("visible")})}),this.ensureCartAttributesForExistingPriceTests(!0)}pickVariant(t){if(this.state.temporary.previewConfig){const e=this.state.temporary.previewConfig,i=new URL(window.location.toString());if(e.testTypeCategory===M.UrlRedirect){const s=e.variants.find(r=>r.id===e.currentVariant)?.redirectUrl;if(i.pathname===s){const r=e.variants.find(n=>n.id===t)?.redirectUrl;r&&(i.pathname=r)}}if(e.testTypeCategory===M.Template){const s=e.variants.find(r=>r.id===e.currentVariant)?.pathName;if(s&&i.pathname===s){const r=e.variants.find(n=>n.id===t)?.pathName;r&&r!==s&&(i.pathname=r)}}e.currentVariant=t,this.persistTemporaryState(),this.queueRedirect(i)}}exitPreview(){const t=new URL(window.location.toString());if(this.state.temporary.previewConfig?.testTypeCategory===M.Template&&t.searchParams.delete("view"),this.state.temporary.previewConfig?.testTypeCategory===M.Script&&t.searchParams.delete("slVariant"),this.state.temporary.previewConfig?.testTypeCategory===M.UrlRedirect){const i=this.state.temporary.previewConfig.variants.filter(r=>!r.isControl&&r.redirectUrl!==null).map(r=>r.redirectUrl),s=this.state.temporary.previewConfig.variants.find(r=>r.label==="a")?.redirectUrl;i.includes(t.pathname)&&s&&(t.pathname=s)}this.state.temporary.isMerchant=!1,t.searchParams.delete("isShopliftMerchant"),this.state.temporary.previewConfig=void 0,this.persistTemporaryState(),this.subscriptionPreviewWarningCleanup?.(),this.subscriptionPreviewWarningCleanup=null,this.hidePage(),this.queueRedirect(t)}handleTemplatePreview(t){const e=t.currentVariant,i=t.variants.find(l=>l.id===e);if(!i)return!1;const s=t.variants.find(l=>l.isControl);if(!s)return!1;this.log("Setting up template preview for type",s.type);
7const r=new URL(window.location.toString()),n=r.searchParams.get("view"),o=i.type===s.type;return!o&&!i.isControl&&template.suffix===s.affix&&this.typeFromTemplate()===s.type&&i.pathName!==null?(this.log("Hit control template type, redirecting to the variant url"),this.hidePage(),r.pathname=i.pathName,this.queueRedirect(r),!0):(!i.isControl&&this.typeFromTemplate()==i.type&&template.suffix===s.affix&&o&&n!==(i.affix||"__DEFAULT__")&&(this.log("Template type and affix match control, updating the view param"),r.searchParams.delete("view"),this.log("Setting the new viewParam to",i.affix||"__DEFAULT__"),this.hidePage(),r.searchParams.set("view",i.affix||"__DEFAULT__"),this.queueRedirect(r)),n!==null&&n!==(i.affix||"__DEFAULT__")&&(r.searchParams.delete("view"),this.hidePage(),this.queueRedirect(r)),!0)}handleUrlPreview(t){const e=t.currentVariant,i=t.variants.find(n=>n.id===e),s=t.variants.find(n=>n.isControl)?.redirectUrl;if(!i)return!1;this.log("Setting up URL redirect preview");const r=new URL(window.location.toString());return r.pathname===s&&!i.isControl&&i.redirectUrl!==null&&(this.log("Url matches control, redirecting"),this.hidePage(),r.pathname=i.redirectUrl,this.queueRedirect(r)),!0}handleScriptPreview(t){const e=t.currentVariant,i=t.variants.find(n=>n.id===e);if(!i)return!1;this.log("Setting up script preview");const s=new URL(window.location.toString());return s.searchParams.get("slVariant")!==i.id&&(this.log("current id doesn't match the variant, redirecting"),s.searchParams.delete("slVariant"),this.log("Setting the new slVariantParam"),this.hidePage(),s.searchParams.set("slVariant",i.id),this.queueRedirect(s)),!0}async handlePricePreview(t){const e=t.currentVariant,i=t.variants.find(s=>s.id===e);return i?(this.log("Setting up price preview"),i.domSelectors&&i.domSelectors.length>0&&(U(document,{testId:t.testId,hypothesisId:i.id,selectors:i.domSelectors}),this.ensureCartAttributesForExistingPriceTests(!0)),!0):!1}async handleSubscriptionPricePreview(t){const e=t.variants.find(i=>i.id===t.currentVariant);e?.subscriptionData&&(this.log("Setting up subscription price preview"),await Nt({id:e.id,isControl:e.isControl,subscriptionData:e.subscriptionData,priceData:e.priceData},(i,...s)=>this.log(i,...s)))}async handleSubscriptionLivePreview(t){this.testConfigs.find(s=>s.id===t.testId)?.hypotheses.find(s=>s.id===t.currentVariant)?.subscriptionData&&(this.log("Setting up subscription live preview"),this.subscriptionSwapDone=!1,this.subscriptionOneTimeDone=!1,this.subscriptionPriceDone=!1,await this.subscriptionSwap(),await this.subscriptionOneTimePrice(),await this.subscriptionPriceChange())}async finalize(){const t=await this.getCartState();t!==null&&this.queueCartUpdate(t),this.pruneStateAndSave(),await this.syncAllEvents()}setShoplift(){this.log("Setting up public API");const e=this.urlParams.get("slVariant")==="true",i=e?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:async s=>{if(this.log("Script checking variant for hypothesis '%s'",s),e)return this.log("Forcing variant for hypothesis '%s'",s),!0;if(i!==null)return this.log("Forcing hypothesis '%s'",i),s===i;const r=this.testConfigs.find(o=>o.hypotheses.some(l=>l.id===s));if(!r)return this.log("No test found for hypothesis '%s'",s),!1;const n=this.state.essential.visitorTests.find(o=>o.testId===r.id);return n?(this.log("Active visitor test found",s),n.hypothesisId===s):(await this.manuallySplitVisitor(r),this.testConfigs.some(o=>o.hypotheses.some(l=>l.id===s&&this.state.essential.visitorTests.some(c=>c.hypothesisId===l.id))))},setAnalyticsConsent:async s=>{await this.onConsentChange(s,!0)},getVisitorData:()=>({visitor:this.state.analytics.visitor,visitorTests:this.state.essential.visitorTests.filter(s=>!s.isInvalid).map(s=>{const{shouldSendToGa:r,savedAt:n,...o}=s;return o})})}}setShopliftStub(){this.log("Setting up stubbed public API");const e=this.urlParams.get("slVariant")==="true",i=e?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:s=>Promise.resolve(e||s===i),setAnalyticsConsent:()=>Promise.resolve(),getVisitorData:()=>({visitor:null,visitorTests:[]})}}async manuallySplitVisitor(t){this.log("Starting manual split for test '%s'",t.id),await this.handleVisitorTest([t]);const e=this.getReservationForTest(t.id);e&&!e.isRealized&&e.entryCriteriaKey&&(this.log("Realizing manual API reservation for test '%s'",t.id),this.realizeReservationForCriteria(e.entryCriteriaKey)),this.saveState(),this.syncAllEvents()}async handleVisitorTest(t){await this.filterTestsByAudience(this.testConfigs,this.state.analytics.visitor??this.buildBaseVisitor(),this.state.essential.visitorTests),this.pruneStaleVisitorTests(),this.deriveC
7ategoryFromExistingTests(),this.clearStaleReservations();let e=t?t.filter(i=>this.testsFilteredByAudience.some(s=>s.id===i.id)):[...this.testsForUrl(this.testsFilteredByAudience),...this.domTestsForUrl(this.testsFilteredByAudience)];try{if(e.length===0)return this.log("No tests found"),!1;this.log("Checking for existing visitor test on page");const i=this.getCurrentVisitorHypothesis(e);if(i){this.log("Found current visitor test");const l=this.considerRedirect(i);return l&&(this.log("Redirecting for current visitor test"),this.redirect(i)),l}const s=this.getReservationForCurrentPage();if(s){this.log("Found matching reservation for current page: %s",s.testId);const l=this.getHypothesis(s.hypothesisId);if(l){l.type!=="price"&&this.realizeReservationForCriteria(s.entryCriteriaKey);const c=this.considerRedirect(l);return c&&this.redirect(l),c}}this.log("No active test relation for test page");const r=this.testsForUrl(this.inactiveTestConfigs.filter(l=>this.testIsPaused(l)&&l.hypotheses.some(c=>this.state.essential.visitorTests.some(d=>d.hypothesisId===c.id)))).map(l=>l.id);if(r.length>0)return this.log("Visitor has paused tests for test page, skipping test assignment: %o",r),!1;if(!this.state.temporary.testCategory){const l=this.testsFilteredByAudience.filter(d=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(d))),c=this.testsFilteredByAudience.filter(d=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(d)));if(this.log("Category dice roll - global tests: %o, conditional tests: %o",l.map(d=>({id:d.id,title:d.title,criteria:this.getEntryCriteriaKey(d)})),c.map(d=>({id:d.id,title:d.title,criteria:this.getEntryCriteriaKey(d)}))),l.length>0&&c.length>0){const d=l.length,p=c.length,h=d+p,u=Math.random()*h;this.state.temporary.testCategory=u<d?"global":"conditional",this.log("Category dice roll: rolled %.2f of %d (global weight: %d, conditional weight: %d), selected '%s'",u,h,d,p,this.state.temporary.testCategory)}else l.length>0?(this.state.temporary.testCategory="global",this.log("Only global tests available, setting category to global")):(this.state.temporary.testCategory="conditional",this.log("Only conditional tests available, setting category to conditional"));this.persistTemporaryState()}const n=this.state.temporary.testCategory;if(this.log("Visitor test category: %s",n),n==="global"){const l=this.testsFilteredByAudience.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)));for(const c of l)this.markTestAsBlocked(c,"category:global");e=e.filter(c=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)))}else{const l=this.testsFilteredByAudience.filter(c=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)));for(const c of l)this.markTestAsBlocked(c,"category:conditional");e=e.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)))}if(e.length===0)return this.log("No tests remaining after category filter"),!1;this.createReservations(e);const o=this.getReservationForCurrentPage();if(o&&!o.isRealized){const l=this.getHypothesis(o.hypothesisId);if(l){l.type!=="price"&&this.realizeReservationForCriteria(o.entryCriteriaKey);const c=this.considerRedirect(l);return c&&(this.log("Redirecting for new test"),this.redirect(l)),c}}return!1}finally{this.includeInDomTests(),this.saveState()}}includeInDomTests(){this.applyControlForAudienceFilteredPriceTests();const t=this.getDomTestsForCurrentUrl(),e=this.getVisitorDomHypothesis(t);for(const i of t){this.log("Evaluating dom test '%s'",i.id);const s=i.hypotheses.some(u=>u.type==="price");if(this.state.essential.visitorTests.find(u=>u.testId===i.id&&u.isInvalid&&!u.hypothesisId)){if(this.log("Visitor is blocked from test '%s', applying control prices if price test",i.id),s){const u=i.hypotheses.find(b=>b.isControl);u?.priceData&&(this.applyPriceTestWithMapLookup(i.id,u,[u],()=>{this.log("Control prices applied for blocked visitor, no metrics tracked")}),this.updatePriceTestHiddenInputs(i.id,"control",!1))}continue}const n=this.getReservationForTest(i.id);let o=null,l=!1;const c=e.find(u=>i.hypotheses.some(b=>u.id===b.id));if(n)o=this.getHypothesis(n.hypothesisId)??null,this.log("Using reserved hypothesis '%s' for test '%s'",n.hypothesisId,i.id);else if(c)o=c,this.log("Using existing hypothesis assignment for test '%s'",i.id);else if(s){const u=this.visitorActiveTestTypeWithReservations();u?(l=!0,this.log("Visitor already in test type '%s', treating as non-test for price test '%s'",u,i.id)):o=this.pickHypothesis(i)}else o=this.pickHypothesis(i);if(l&&s){const u=i.hypotheses.find(b=>b.isControl);u?.priceData&&(this.log("Applying control prices for non-test visitor on price test '%s' (Map-based)",i.id),this.applyPriceTestWithMapLookup(i.id,u,[u],()=>{this.log("Control prices applied for non-test visitor, no metrics tracked")}
7),this.updatePriceTestHiddenInputs(i.id,"control",!1));continue}if(!o){this.log("Failed to pick hypothesis for test");continue}this.sendDiagnosticTelemetry("assignment",i.id,{hypothesisId:o.id,isControl:o.isControl,testType:o.type});const d=i.bayesianRevision??4,p=o.type==="price",h=d>=5;if(p&&h){if(this.log(`Price test with Map-based lookup (v${d}): ${i.id}`),!o.priceData){this.log("No price data for hypothesis '%s', skipping",o.id);continue}const u=o.isControl?"control":"variant";this.log(`Setting up Map-based price test for ${u} (test: ${i.id})`),this.applyPriceTestWithMapLookup(i.id,o,i.hypotheses,b=>{const k=this.getReservationForTest(b);k&&!k.isRealized&&k.entryCriteriaKey?this.realizeReservationForCriteria(k.entryCriteriaKey):this.queueAddVisitorToTest(b,o),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(p&&!h){this.log(`Price test without viewport tracking (v${d}): ${i.id}`);const u=this.getDomSelectorsForHypothesis(o);if(u.length===0)continue;U(document,{testId:i.id,hypothesisId:o.id,selectors:u},b=>{this.queueAddVisitorToTest(b,o),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(!o.domSelectors||o.domSelectors.length===0){this.log("No selectors found, skipping hypothesis");continue}U(document,{testId:i.id,hypothesisId:o.id,selectors:o.domSelectors},u=>{this.queueAddVisitorToTest(u,o),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()})}}considerRedirect(t){if(this.log("Considering redirect for hypothesis '%s'",t.id),t.isControl)return this.log("Skipping redirect for control"),!1;if(t.type==="basicScript"||t.type==="manualScript")return this.log("Skipping redirect for script test"),!1;const e=this.state.essential.visitorTests.find(n=>n.hypothesisId===t.id),i=new URL(window.location.toString()),r=new URLSearchParams(window.location.search).get("view");if(t.type==="theme"){if(!(t.themeId===themeId)){if(this.log("Theme id '%s' is not hypothesis theme ID '%s'",t.themeId,themeId),this.isAppProxyPath())return this.log("On App Proxy path, skipping theme redirect to avoid infinite loop"),!1;if(e&&e.themeId!==t.themeId&&(e.themeId===themeId||!this.isThemePreview()))this.log("On old theme, redirecting and updating local visitor"),e.themeId=t.themeId;else if(this.isThemePreview())return this.log("On non-test theme, skipping redirect"),!1;return this.log("Hiding page to redirect for theme test"),this.hidePage(),!0}return!1}else if(t.type!=="dom"&&t.type!=="price"&&t.affix!==template.suffix&&t.affix!==r||t.redirectPath&&!i.pathname.endsWith(t.redirectPath))return this.log("Hiding page to redirect for template test"),this.hidePage(),!0;return this.log("Not redirecting"),!1}redirect(t){if(this.log("Redirecting to hypothesis '%s'",t.id),t.isControl)return;const e=new URL(window.location.toString());if(e.searchParams.delete("view"),t.redirectPath){const i=RegExp("^(/w{2}-w{2})/").exec(e.pathname);if(i&&i.length>1){const s=i[1];e.pathname=`${s}${t.redirectPath}`}else e.pathname=t.redirectPath}else t.type==="theme"?(e.searchParams.set("_ab","0"),e.searchParams.set("_fd","0"),e.searchParams.set("_sc","1"),e.searchParams.set("preview_theme_id",t.themeId.toString())):t.type!=="urlRedirect"&&e.searchParams.set("view",t.affix);this.queueRedirect(e)}async refreshVisitor(t){if(t===null||!this.state.essential.isFirstLoad||!this.testConfigs.some(i=>i.visitorOption!=="all"))return;this.log("Refreshing visitor"),this.hidePage();const e=await this.getVisitor(t);e&&e.id&&this.updateLocalVisitor(e)}buildBaseVisitor(){return{shopifyAnalyticsId:this.shopifyAnalyticsId,device:this.device,country:null,...this.state.essential.initialState}}getInitialState(){const t=this.getUTMValue("utm_source")??"",e=this.getUTMValue("utm_medium")??"",i=this.getUTMValue("utm_campaign")??"",s=this.getUTMValue("utm_content")??"",r=window.document.referrer,n=this.device;return{createdAt:new Date,utmSource:t,utmMedium:e,utmCampaign:i,utmContent:s,referrer:r,device:n}}checkForThemePreview(){return this.log("Checking for theme preview"),window.location.hostname.endsWith(".shopifypreview.com")?(this.log("on shopify preview domain"),this.clearThemeBar(!0,!1,this.state),document.querySelector("#sl-preview-bar-hide")?.remove(),!1):this.isThemePreview()?this.state.essential.visitorTests.some(t=>t.isThemeTest&&t.hypothesisId!=null&&this.getHypothesis(t.hypothesisId)&&t.themeId===themeId)?(this.log("On active theme test, remov
7ing theme bar"),this.clearThemeBar(!1,!0,this.state),!1):this.state.essential.visitorTests.some(t=>t.isThemeTest&&t.hypothesisId!=null&&!this.getHypothesis(t.hypothesisId)&&t.themeId===themeId)?(this.log("Visitor is on an inactive theme test, redirecting to main theme"),this.redirectToMainTheme(),!0):this.state.essential.isFirstLoad?(this.log("No visitor found on theme preview, redirecting to main theme"),this.redirectToMainTheme(),!0):this.inactiveTestConfigs.some(t=>t.hypotheses.some(e=>e.themeId===themeId))?(this.log("Current theme is an inactive theme test, redirecting to main theme"),this.redirectToMainTheme(),!0):this.testConfigs.some(t=>t.hypotheses.some(e=>e.themeId===themeId))?(this.log("Falling back to clearing theme bar"),this.clearThemeBar(!1,!0,this.state),!1):(this.log("No tests on current theme, skipping script"),this.clearThemeBar(!0,!1,this.state),document.querySelector("#sl-preview-bar-hide")?.remove(),!0):(this.log("Not on theme preview"),this.clearThemeBar(!0,!1,this.state),!1)}redirectToMainTheme(){this.hidePage();const t=new URL(window.location.toString());t.searchParams.set("preview_theme_id",""),this.queueRedirect(t)}testsForUrl(t){const e=new URL(window.location.href),i=this.typeFromTemplate();return t.filter(s=>s.hypotheses.some(r=>r.type!=="dom"&&r.type!=="price"&&(r.isControl&&r.type===i&&r.affix===template.suffix||r.type==="theme"||r.isControl&&r.type==="urlRedirect"&&r.redirectPath&&e.pathname.endsWith(r.redirectPath)||r.type==="basicScript"))&&(s.ignoreTestViewParameterEnforcement||!e.searchParams.has("view")||s.hypotheses.map(r=>r.affix).includes(e.searchParams.get("view")??"")))}domTestsForUrl(t){const e=new URL(window.location.href);return t.filter(i=>i.hypotheses.some(s=>s.type!=="dom"&&s.type!=="price"?!1:s.type==="price"&&s.priceData&&s.priceData.variants.length>0?!0:s.domSelectors&&s.domSelectors.some(r=>new RegExp(it(r)).test(e.toString()))))}async filterTestsByAudience(t,e,i){const s=[];let r=e.country;!r&&t.some(n=>n.requiresCountry&&!i.some(o=>o.testId===n.id))&&(this.log("Hiding page to check geoip"),this.hidePage(),r=await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/get-country`,signal:AbortSignal.timeout(this.getCountryTimeout)}).catch(n=>(this.log("Error getting country",n),null)));for(const n of t){if(this.log("Checking audience for test '%s'",n.id),this.state.essential.visitorTests.some(c=>c.testId===n.id&&c.hypothesisId==null)){console.log(`Skipping blocked test '${n.id}'`);continue}const o=this.visitorCreatedDuringTestActive(n.statusHistory);(i.some(c=>c.testId===n.id&&(n.device==="all"||n.device===e.device&&n.device===this.device))||this.isTargetAudience(n,e,o,r))&&(this.log("Visitor is in audience for test '%s'",n.id),s.push(n))}this.testsFilteredByAudience=s}isTargetAudience(t,e,i,s){const r=this.getChannel(e);return(t.device==="all"||t.device===e.device&&t.device===this.device)&&(t.visitorOption==="all"||t.visitorOption==="new"&&i||t.visitorOption==="returning"&&!i)&&(t.targetAudiences.length===0||t.targetAudiences.reduce((n,o)=>n||o.reduce((l,c)=>l&&c(e,i,r,s),!0),!1))}visitorCreatedDuringTestActive(t){let e="";for(const i of t){if(this.state.analytics.visitor!==null&&this.state.analytics.visitor.createdAt<i.createdAt||this.state.essential.initialState.createdAt<i.createdAt)break;e=i.status}return e==="active"}getDomTestsForCurrentUrl(){return this.domTestsForUrl(this.testsFilteredByAudience)}getCurrentVisitorHypothesis(t){return t.flatMap(e=>e.hypotheses).find(e=>e.type!=="dom"&&e.type!=="price"&&this.state.essential.visitorTests.some(i=>i.hypothesisId===e.id))}getVisitorDomHypothesis(t){return t.flatMap(e=>e.hypotheses).filter(e=>(e.type==="dom"||e.type==="price")&&this.state.essential.visitorTests.some(i=>i.hypothesisId===e.id))}getHypothesis(t){return this.testConfigs.filter(e=>e.hypotheses.some(i=>i.id===t)).map(e=>e.hypotheses.find(i=>i.id===t))[0]}getActiveAssignment(){if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const e=this.state.temporary.previewConfig;return e.currentVariant&&e.testId?{testId:e.testId,hypothesisId:e.currentVariant}:null}const t=this.state.essential.visitorTests.find(e=>e.hypothesisId);return t?.hypothesisId?{testId:t.testId,hypothesisId:t.hypothesisId}:null}findActiveSubscriptionTestControl(){for(const t of this.testConfigs){const e=t.hypotheses.find(i=>i.isControl);if(e?.subscriptionData)return{testId:t.id,hypothesis:e}}return null}getDomSelectorsForHypothesis(t){if(!t)return[];if(t.domSelectors&&t.domSelectors.length>0)return t.domSelectors;if(t.priceData){const e=`${this.priceSelectorsSessionKey}_${t.id}`;try{const s=sessionStorage.getItem(e);if(s){const r=JSON.parse(s);return t.domSelectors=r,this.log("Loaded %d price selectors from cache for hypothesis '%s'",r.length,t.id),r}}catch{}const i=Ot(t.priceData);t.domSelectors=i;try{sessionStorage.setItem(e,JSON.stringify(i)),this.log("Generated and cached %d price selectors for hypothesis '%s'",i.length,t.id)}catch{this.log("Generated %d price selectors for hypothesis '%s' (cache unavailable)",i.length,t.id)}return i}return[]}hasThemeTest(t){return t.some(e=>e.hypotheses.some(i=>i.type==="theme"))}hasTestThatIsNotThemeTest(t){return t.some(e=>e.hypotheses.some(i=>i.type!=="theme"&&i.type!=="dom"&&i.type!=="price"))}hasThemeAndOtherTestTypes(t){return this.hasThemeTest(t)&&this.hasTestThatIsNotThemeTest(t)}testIsPaused(t){return t.status==="paused"||t.status==="incompatible"||t.status==="suspended"}visitorActiveTestType(){const t=this.state.essential.visitorTests.filter(e=>this.testConfigs.some(i=>i.hypotheses.some(s=>s.id==e.hypothesisId)));return t.length===0?null:t.some(e=>e.isThemeTest)?"theme":"templateOrUrlRedirect"}getReservationType(t){return t==="price"||this.isTemplateTestType(t)?"deferred":"immediate"}isTemplateTestType(t){return["product","collection","landing","index","cart","search","blog","article","collectionList"].includes(t)}getEntryCriteriaKey(t){const e=t.hypotheses.find(i=>i.isControl);if(!e)return`unknown:${t.id}`;switch(e.type){case"theme":return"global:theme";case"basicScript":return"global:autoApi";case"price":return"global:price";case"manualScript":return`conditional:manualApi:${t.id}`;case"urlRedirect":return`conditional:url:${e.redirectPath||"unknown"}`;default:return`conditional:template:${e.type}`}}isGlobalEntryCriteria(t){return t.startsWith("global:")}groupTestsByEntryCriteria(t){const e=new Map;for(const i of t){const s=this.getEntryCriteriaKey(i),r=e.get(s)||[];r.push(i),e.set(s,r)}return e}doesCurrentPageMatchEntryCriteria(t){if(this.isGlobalEntryCriteria(t))return!0;
7if(t==="conditional:manualApi")return!1;if(t.startsWith("conditional:url:")){const e=t.replace("conditional:url:","");return window.location.pathname.endsWith(e)}if(t.startsWith("conditional:template:")){const e=t.replace("conditional:template:","");return this.typeFromTemplate()===e}return!1}hasActiveReservation(){const t=this.getActiveReservations();return Object.values(t).some(e=>!e.isRealized)}getActiveReservation(){const t=this.getActiveReservations();return Object.values(t).find(e=>!e.isRealized)??null}clearStaleReservations(){const t=this.state.temporary.testReservations;if(!t)return;let e=!1;for(const[i,s]of Object.entries(t)){const r=this.testConfigs.find(o=>o.id===s.testId);if(!r){this.log("Test '%s' no longer in config, clearing reservation for criteria '%s'",s.testId,i),delete t[i],e=!0;continue}if(r.status!=="active"){this.log("Test '%s' status is '%s', clearing reservation for criteria '%s'",s.testId,r.status,i),delete t[i],e=!0;continue}this.testsFilteredByAudience.some(o=>o.id===s.testId)||(this.log("Visitor no longer passes audience for test '%s', clearing reservation for criteria '%s'",s.testId,i),delete t[i],e=!0)}e&&this.persistTemporaryState()}createReservations(t){if(this.state.temporary.testReservations||(this.state.temporary.testReservations={}),this.state.temporary.rolledEntryCriteria||(this.state.temporary.rolledEntryCriteria=[]),this.state.temporary.testCategory==="global"){this.createSingleReservation(t,"global");return}const i=t.filter(o=>this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(o))),s=t.filter(o=>!this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(o)));this.log("Conditional tests split - matching current page: %d, not matching: %d",i.length,s.length),i.length>0&&this.log("Tests matching current page (same pool): %o",i.map(o=>({id:o.id,title:o.title,criteria:this.getEntryCriteriaKey(o)})));const r=`conditional:current-page:${this.typeFromTemplate()}`;if(i.length>0&&!this.state.temporary.rolledEntryCriteria.includes(r)){this.createSingleReservation(i,r);for(const o of i){const l=this.getEntryCriteriaKey(o);this.state.temporary.rolledEntryCriteria.includes(l)||this.state.temporary.rolledEntryCriteria.push(l)}}const n=this.groupTestsByEntryCriteria(s);for(const[o,l]of n){if(this.state.temporary.rolledEntryCriteria.includes(o)){this.log("Already rolled for criteria '%s', skipping",o);continue}if(l.some(S=>this.state.essential.visitorTests.some(P=>P.testId===S.id))){this.log("Visitor already has VT for criteria '%s', skipping",o),this.state.temporary.rolledEntryCriteria.push(o);continue}const d=[...l].sort((S,P)=>S.id.localeCompare(P.id));this.log("Test dice roll for criteria '%s' - available tests: %o",o,d.map(S=>({id:S.id,title:S.title})));const p=Math.floor(Math.random()*d.length),h=d[p];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",p+1,l.length,h.id,h.title);const u=this.pickHypothesis(h);if(!u){this.log("No hypothesis picked for test '%s'",h.id);continue}this.sendDiagnosticTelemetry("assignment",h.id,{hypothesisId:u.id,isControl:u.isControl,testType:u.type});const b=this.getReservationType(u.type),k={testId:h.id,hypothesisId:u.id,testType:u.type,reservationType:b,isThemeTest:u.type==="theme",themeId:u.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:o};this.state.temporary.testReservations[o]=k,this.state.temporary.rolledEntryCriteria.push(o),this.log("Created %s reservation for test '%s' (criteria: %s)",b,h.id,o);for(const S of l)S.id!==h.id&&this.markTestAsBlocked(S,o)}this.persistTemporaryState()}createSingleReservation(t,e){if(this.state.temporary.rolledEntryCriteria.includes(e)){this.log("Already rolled for pool '%s', skipping",e);return}if(t.some(p=>this.state.essential.visitorTests.some(h=>h.testId===p.id&&!h.isInvalid))){this.log("Visitor already has VT for pool '%s', skipping",e),this.state.temporary.rolledEntryCriteria.push(e);return}if(t.length===0){this.log("No tests in pool '%s'",e);return}const s=[...t].sort((p,h)=>p.id.localeCompare(h.id));this.log("Test dice roll for pool '%s' - available tests: %o",e,s.map(p=>({id:p.id,title:p.title,criteria:this.getEntryCriteriaKey(p)})));const r=Math.floor(Math.random()*s.length),n=s[r];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",r,t.length,n.id,n.title);const o=this.pickHypothesis(n);if(!o){this.log("No hypothesis picked for test '%s'",n.id);return}this.sendDiagnosticTelemetry("assignment",n.id,{hypothesisId:o.id,isControl:o.isControl,testType:o.type});const l=this.getReservationType(o.type),c=this.getEntryCriteriaKey(n),d={testId:n.id,hypothesisId:o.id,testType:o.type,reservationType:l,isThemeTest:o.type==="theme",themeId:o.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:c};this.state.temporary.testReservations[c]=d,this.state.temporary.rolledEntryCriteria.push(e),this.log("Created %s reservation for test '%s' from pool '%s' (criteria: %s)",l,n.id,e,c);for(const p of t)p.id!==n.id&&this.markTestAsBlocked(p,`pool:${e}`);this.persistTemporaryState()}markTestAsBlocked(t,e){this.state.essential.visitorTests.some(i=>i.testId===t.id)||(this.log("Blocking visitor from test '%s' (reason: %s)",t.id,e),this.state.essential.visitorTests.push({createdAt:new Date,testId:t.id,hypothesisId:null,isThemeTest:t.hypotheses.some(i=>
7i.type==="theme"),shouldSendToGa:!1,isSaved:!0,isInvalid:!0,themeId:void 0}))}realizeReservationForCriteria(t){const e=this.state.temporary.testReservations?.[t];if(!e)return this.log("No reservation found for criteria '%s'",t),!1;if(e.isRealized)return this.log("Reservation already realized for criteria '%s'",t),!1;if(this.state.essential.visitorTests.some(s=>s.testId===e.testId&&!s.isInvalid))return this.log("Visitor already assigned to test '%s'",e.testId),!1;const i=this.getHypothesis(e.hypothesisId);return i?(e.isRealized=!0,this.persistTemporaryState(),this.queueAddVisitorToTest(e.testId,i),this.saveState(),this.log("Realized reservation for test '%s' (criteria: %s)",e.testId,t),!0):(this.log("Hypothesis '%s' not found",e.hypothesisId),!1)}getActiveReservations(){return this.state.temporary.testReservations??{}}getReservationForCurrentPage(){const t=this.getActiveReservations();for(const[e,i]of Object.entries(t)){if(i.isRealized)continue;const s=this.testConfigs.find(r=>r.id===i.testId);if(!(!s||s.status!=="active")&&this.doesCurrentPageMatchEntryCriteria(e))return i}return null}getReservationForTest(t){const e=this.getActiveReservations();return Object.values(e).find(i=>i.testId===t)??null}getReservationTestType(){const t=this.getActiveReservations(),e=Object.values(t);if(e.length===0)return null;for(const i of e)if(i.isThemeTest)return"theme";for(const i of e)if(i.testType==="price")return"price";return e.some(i=>!i.isRealized)?"templateOrUrlRedirect":null}hasPriceTests(t){return t.some(e=>e.hypotheses.some(i=>i.type==="price"))}_priceTestProductIds=null;getPriceTestProductIds(){if(this._priceTestProductIds)return this._priceTestProductIds;const t=new Set;for(const e of this.testConfigs)for(const i of e.hypotheses)if(i.type==="price"){for(const s of i.domSelectors||[]){const r=s.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);r?.[1]&&t.add(r[1])}if(i.priceData?.variants)for(const[s]of i.priceData.variants)t.add(s)}return this._priceTestProductIds=t,this.log("Built price test product ID cache with %d products",t.size),t}isProductInAnyPriceTest(t){return this.getPriceTestProductIds().has(t)}visitorActiveTestTypeWithReservations(){const t=this.getActiveReservations();for(const r of Object.values(t)){if(r.isThemeTest)return"theme";if(r.testType==="price")return"price"}if(Object.values(t).some(r=>!r.isRealized)){if(this.state.temporary.testCategory==="global")for(const n of Object.values(t)){if(n.testType==="theme")return"theme";if(n.testType==="price")return"price";if(n.testType==="basicScript")return"theme"}return"templateOrUrlRedirect"}const i=this.state.essential.visitorTests.filter(r=>!r.isInvalid&&this.testConfigs.some(n=>n.hypotheses.some(o=>o.id===r.hypothesisId)));return i.length===0?null:i.some(r=>this.getHypothesis(r.hypothesisId)?.type==="price")?"price":i.some(r=>r.isThemeTest)?"theme":"templateOrUrlRedirect"}applyControlForAudienceFilteredPriceTests(){const t=this.testConfigs.filter(s=>s.status==="active"&&s.hypotheses.some(r=>r.type==="price"));if(t.length===0)return;const e=this.testsFilteredByAudience.filter(s=>s.hypotheses.some(r=>r.type==="price")),i=t.filter(s=>!e.some(r=>r.id===s.id));if(i.length!==0){this.log("Found %d price tests filtered by audience, applying control selectors",i.length);for(const s of i){const r=s.hypotheses.find(c=>c.isControl),n=this.getDomSelectorsForHypothesis(r);if(n.length===0){this.log("No control selectors for audience-filtered price test '%s'",s.id);continue}const o=new URL(window.location.href);n.some(c=>{try{return new RegExp(it(c)).test(o.toString())}catch{return!1}})&&(this.log("Applying control selectors for audience-filtered price test '%s'",s.id),U(document,{testId:s.id,hypothesisId:r.id,selectors:n},()=>{}),this.updatePriceTestHiddenInputs(s.id,"control",!1))}}}pickHypothesis(t){let e=Math.random();const i=t.hypotheses.reduce((r,n)=>r+n.visitorCount,0);return t.hypotheses.sort((r,n)=>r.isControl?n.isControl?0:-1:n.isControl?1:0).reduce((r,n)=>{if(r!==null)return r;const l=t.hypotheses.reduce((c,d)=>c&&d.visitorCount>20,!0)?n.visitorCount/i-n.trafficPercentage:0;return e<=n.trafficPercentage-l?n:(e-=n.trafficPercentage-l,null)},null)}typeFromTemplate(){switch(template.type){case"list-collections":return"collectionList";case"page":return"landing";case"article":case"blog":case"cart":case"collection":case"index":case"product":case"search":return template.type;default:return null}}queueRedirect(t){this.saveState(),this.disableReferrerOverride||(this.log(`Saving temporary referrer override '${document.referrer}'`),this.state.temporary.originalReferrer=document.referrer,this.persistTemporaryState()),window.setTimeout(()=>window.location.assign(t),0),window.setTimeout(()=>{this.syncAllEvents()},2e3)}scheduleRetrySync(){this.clientIdRetryCount>=5||(this.clientIdRetryCount++,window.setTimeout(()=>{this.syncAllEvents()},500))}async syncAllEvents(){const t=async()=>
7{if(this.isSyncing){window.setTimeout(()=>{(async()=>await t())()},500);return}try{if(this.isSyncing=!0,this.syncGAEvents(),this.shopifyAnalyticsId||(this.shopifyAnalyticsId=this.getShopifyAnalyticsId()),!this.shopifyAnalyticsId){this.scheduleRetrySync();return}await this.syncEvents()}finally{this.isSyncing=!1}};await t()}async syncEvents(){if(!this.state.essential.consentApproved||!this.shopifyAnalyticsId||this.state.analytics.queue.length===0)return;const t=this.state.analytics.queue.length,e=this.state.analytics.queue.splice(0,t);this.log("Syncing %s events",t);try{const i={shop:this.shop,visitorDetails:{shopifyAnalyticsId:this.shopifyAnalyticsId,device:this.state.analytics.visitor?.device??this.device,country:this.state.analytics.visitor?.country??null,...this.state.essential.initialState},events:this.state.essential.visitorTests.filter(r=>!r.isInvalid&&!r.isSaved&&r.hypothesisId!=null).map(r=>new yt(r.testId,r.hypothesisId,r.createdAt)).concat(e)};await this.sendEvents(i);for(const r of this.state.essential.visitorTests.filter(n=>!n.isInvalid&&!n.isSaved&&n.hypothesisId!=null))this.sendDiagnosticTelemetry("event-delivered",r.testId,{hypothesisId:r.hypothesisId,isControl:r.assignedTo==="control",testType:r.testType??"unknown"});const s=await this.getVisitor(this.shopifyAnalyticsId);s!==null&&this.updateLocalVisitor(s);for(const r of this.state.essential.visitorTests.filter(n=>!n.isInvalid&&!n.isSaved))r.isSaved=!0,r.savedAt=Date.now()}catch{this.state.analytics.queue.splice(0,0,...e)}finally{this.saveState()}}syncGAEvents(){if(!this.gaConfig.sendEvents){if(pt)return;pt=!0,this.log("UseGtag is false â skipping GA Events");return}if(this.isSyncingGA){this.log("Already syncing GA - skipping GA events");return}const t=this.state.essential.visitorTests.filter(e=>e.shouldSendToGa);t.length!==0&&(this.isSyncingGA=!0,this.log("Syncing %s GA Events",t.length),Promise.allSettled(t.map(e=>this.sendGAEvent(e))).then(()=>this.log("All gtag events sent")).finally(()=>this.isSyncingGA=!1))}sendGAEvent(t){return new Promise(e=>{this.log("Sending GA Event for test %s, hypothesis %s",t.testId,t.hypothesisId);const i=()=>{this.log("GA acknowledged event for hypothesis %s",t.hypothesisId),t.shouldSendToGa=!1,this.persistEssentialState(),e()},s={exp_variant_string:`SL-${t.testId}-${t.hypothesisId}`};
7this.shopliftDebug&&Object.assign(s,{debug_mode:!0});function r(n,o,l){window.dataLayer=window.dataLayer||[],window.dataLayer.push(arguments)}this.gaConfig.mode==="gtag"?r("event","experience_impression",{...s,event_callback:i}):(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"experience_impression",...s,eventCallback:i}))})}updateLocalVisitor(t){let e;({visitorTests:e,...this.state.analytics.visitor}=t),this.log("updateLocalVisitor - server returned %d tests: %o",e.length,e.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isInvalid:s.isInvalid}))),this.log("updateLocalVisitor - local has %d tests: %o",this.state.essential.visitorTests.length,this.state.essential.visitorTests.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isSaved:s.isSaved,isInvalid:s.isInvalid})));const i=300*1e3;for(const s of this.state.essential.visitorTests.filter(r=>r.isSaved&&(!r.savedAt||Date.now()-r.savedAt>i)&&!e.some(n=>n.testId===r.testId)))this.log("updateLocalVisitor - marking LOCAL test as INVALID (isSaved && not in server): testId=%s, hypothesisId=%s",s.testId,s.hypothesisId),s.isInvalid=!0;for(const s of e){const r=this.state.essential.visitorTests.findIndex(o=>o.testId===s.testId);if(!(r!==-1))this.log("updateLocalVisitor - ADDING server test (not found locally): testId=%s, hypothesisId=%s",s.testId,s.hypothesisId),this.state.essential.visitorTests.push(s);else{const o=this.state.essential.visitorTests.at(r);this.log("updateLocalVisitor - REPLACING local test with server test: testId=%s, local hypothesisId=%s -> server hypothesisId=%s, local isInvalid=%s -> false",s.testId,o?.hypothesisId,s.hypothesisId,o?.isInvalid),s.isInvalid=!1,s.shouldSendToGa=o?.shouldSendToGa??!1,s.testType=o?.testType,s.assignedTo=o?.assignedTo,s.testTitle=o?.testTitle,this.state.essential.visitorTests.splice(r,1,s)}}this.log("updateLocalVisitor - FINAL local tests: %o",this.state.essential.visitorTests.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isSaved:s.isSaved,isInvalid:s.isInvalid}))),this.state.analytics.visitor.storedAt=new Date}async getVisitor(t){try{return await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/by-key/${this.shop}/${t}`})}catch{return null}}async sendEvents(t){await this.makeRequest({method:"post",url:`${this.eventHost}/api/v0/events`,data:JSON.stringify(t)})}sendDiagnosticTelemetry(t,e,i){if(!this.telemetryEnabled||!navigator.sendBeacon)return;const s=this.state.essential.consentApproved,r=JSON.stringify({shop:this.shop,testId:e,checkpoint:t,device:this.device,...s?{visitorId:this.shopifyAnalyticsId??"unknown"}:{},clientTimestamp:Date.now(),consentApproved:s,hasConsentInteraction:this.state.essential.hasConsentInteraction,...i});navigator.sendBeacon(`${this.eventHost}/api/v0/telemetry`,new Blob([r],{type:"text/plain"}))}getUTMValue(t){const i=decodeURIComponent(window.location.search.substring(1)).split("&");for(let s=0;s<i.length;s++){const r=i[s].split("=");if(r[0]===t)return r[1]||null}return null}hidePage(t){this.log("Hiding page"),this.cssHideClass&&!window.document.documentElement.classList.contains(this.cssHideClass)&&(window.document.documentElement.classList.add(this.cssHideClass),t||setTimeout(this.removeAsyncHide(this.cssHideClass),2e3))}showPage(){this.cssHideClass&&this.removeAsyncHide(this.cssHideClass)()}getDeviceType(){function t(){let i=!1;return(function(s){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|
7sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(s.substr(0,4)))&&(i=!0)})(navigator.userAgent||navigator.vendor),i}function e(){let i=!1;return(function(s){(/android|ipad|playbook|silk/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(s.substr(0,4)))&&(i=!0)})(navigator.userAgent||navigator.vendor),i}return t()?"mobile":e()?"tablet":"desktop"}removeAsyncHide(t){return()=>{t&&window.document.documentElement.classList.remove(t)}}async getCartState(){try{let t=await this.makeJsonRequest({method:"get",url:`${window.location.origin}/cart.js`});return t===null||(t.note===null&&(t=await this.makeJsonRequest({method:"post",url:`${window.location.origin}/cart/update.js`,data:JSON.stringify({note:""})})),t==null)?null:{token:t.token,total_price:t.total_price,total_discount:t.total_discount,currency:t.currency,items_subtotal_price:t.items_subtotal_price,items:t.items.map(e=>({quantity:e.quantity,variant_id:e.variant_id,key:e.key,price:e.price,final_line_price:e.final_line_price,sku:e.sku,product_id:e.product_id}))}}catch(t){return this.log("Error sending cart info",t),null}}ensureCartAttributesForExistingPriceTests(t){try{if(this.log("Checking visitor assignments for active price tests"),t&&this.state.temporary.previewConfig){const e=this.state.temporary.previewConfig;this.log("Using preview config for merchant:",e.testId);let i="variant";if(e.variants&&e.variants.length>0){const s=e.variants.find(r=>r.id===e.currentVariant);s&&s.isControl&&(i="control")}this.log("Merchant preview - updating hidden inputs:",e.testId,i),this.updatePriceTestHiddenInputs(e.testId,i,!0);return}for(const e of this.state.essential.visitorTests){const i=this.testConfigs.find(n=>n.id===e.testId);if(!i){this.log("Test config not found:",e.testId);continue}const s=i.hypotheses.find(n=>n.id===e.hypothesisId);if(!s||s.type!=="price")continue;const r=s.isControl?"control":"variant";this.log("Updating hidden inputs for price test:",e.testId,r),this.updatePriceTestHiddenInputs(e.testId,r,t)}}catch(e){this.log("Error ensuring cart attributes for existing price tests:",e)}}subscriptionSwapDone=!1;subscriptionHideWrongPlans=null;subscriptionPriceDone=!1;subscriptionUpdateOneTime=null;subscriptionOneTimeDone=!1;swapMap=null;slptValue=null;async subscriptionSwap(){await Lt(this)}async subscriptionPriceChange(){await qt(this)}async subscriptionOneTimePrice(){await Ht(this)}
7updatePriceTestHiddenInputs(t,e,i){try{this.cleanupPriceTestObservers();const s=`${t}:${e}:${i?"t":"f"}`,r=C=>{const m=C.getAttribute("data-sl-pid");if(!m)return!0;if(i&&this.state.temporary.previewConfig){const w=this.state.temporary.previewConfig,T=e==="control"?"a":"b",f=w.variants.find(v=>v.label===T);if(!f)return!1;for(const v of f.domSelectors||[]){const g=v.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);if(g){const I=g[1];if(this.log(`Extracted ID from selector: ${I}, comparing to: ${m}`),I===m)return this.log("Product ID match found in preview config:",m,"variant:",f.label),!0}else this.log(`Could not extract ID from selector: ${v.cssSelector}`)}return this.log("No product ID match in preview config for:",m,"variant:",T),!1}const y=this.testConfigs.find(w=>w.id===t);if(!y)return this.log("Test config not found for testId:",t),!1;for(const w of y.hypotheses||[]){for(const T of w.domSelectors||[]){const f=T.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);if(f&&f[1]===m)return this.log("Product ID match found in domSelectors:",m,"for test:",t),!0}if(w.priceData?.variants){for(const T of w.priceData.variants)if(T[0]===m)return this.log("Product ID match found in priceData:",m,"for test:",t),!0}}return this.log("No product ID match for:",m,"in test:",t),!1},n=new Set;let o=!1,l=null;const c=(C,m)=>{if(document.querySelectorAll("[data-sl-attribute-p]").forEach(w=>{if(w instanceof Element&&w.nodeType===Node.ELEMENT_NODE&&w.isConnected&&document.contains(w))try{C.observe(w,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0,attributes:!1})}catch(T){this.log(`Failed to observe element (${m}):`,T)}}),document.body&&document.body.isConnected)try{C.observe(document.body,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0,attributes:!1})}catch(w){this.log(`Failed to observe document.body (${m}):`,w)}},d=(C,m,y,w)=>{const T=C.filter(f=>{const v=f.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);return v&&v[1]===w});this.log(`Applying ${y} DOM selectors, total: ${C.length}, filtered: ${T.length}`),T.length>0&&U(document,{testId:t,hypothesisId:m,selectors:T})},p=(C,m)=>{this.log(`Applying DOM selector changes for product ID: ${C}`),m.disconnect(),o=!0;try{if(i&&this.state.temporary.previewConfig){const y=e==="control"?"a":"b",w=this.state.temporary.previewConfig.variants.find(T=>T.label===y);if(!w?.domSelectors){this.log(`No DOM selectors found for preview variant: ${y}`);return}d(w.domSelectors,w.id,"preview config",C)}else{const y=this.testConfigs.find(T=>T.id===t);if(!y){this.log(`No test config found for testId: ${t}`);return}const w=y.hypotheses.find(T=>e==="control"?T.isControl:!T.isControl);if(!w?.domSelectors){this.log(`No DOM selectors found for assignment: ${e}`);return}d(w.domSelectors,w.id,"live config",C)}}finally{l!==null&&clearTimeout(l),l=window.setTimeout(()=>{o=!1,l=null,c(m,"reconnection"),this.log("Re-established innerHTML observer after DOM changes")},50)}},h=new MutationObserver(C=>{if(!o)for(const m of C){if(m.type!=="childList"&&m.type!=="characterData")continue;let y=m.target;m.type==="characterData"&&(y=m.target.parentElement||m.target.parentNode);let w=y,T=w.getAttribute("data-sl-attribute-p");for(;!T&&w.parentElement;)w=w.parentElement,T=w.getAttribute("data-sl-attribute-p");if(!T)continue;const f=w.innerHTML||w.textContent||"";let v="";m.type==="characterData"&&m.oldValue!==null&&(v=m.oldValue),this.log(`innerHTML changed on element with data-sl-attribute-p="${T}"`),v&&this.log(`Previous content: "${v}"`),this.log(`Current content: "${f}"`),p(T,h)}});c(h,"initial setup"),n.add(h);const u=new MutationObserver(C=>{C.forEach(m=>{m.addedNodes.forEach(y=>{if(y.nodeType===Node.ELEMENT_NODE){const w=y;k(w);const T=w.matches('input[name="properties[_slpt]"]')?[w]:w.querySelectorAll('input[name="properties[_slpt]"]');T.length>0&&this.log(`MutationObserver found ${T.length} new hidden input(s)`),T.forEach(f=>{const v=f.getAttribute("data-sl-pid");if(this.log(`MutationObserver checking new input with data-sl-pid="${v}"`),r(f))f.value!==s&&(f.value=s,this.log("Updated newly added hidden input:",s)),S(f);else{const g=f.getAttribute("data-sl-pid");g&&this.isProductInAnyPriceTest(g)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",g):(f.remove(),this.log("Removed newly added non-matching hidden input for product ID:",g))}})}})})});n.add(u);const b=new MutationObserver(C=>
7{C.forEach(m=>{if(m.type==="attributes"&&m.attributeName==="data-sl-pid"){const y=m.target;if(this.log("AttributeObserver detected data-sl-pid attribute change on:",y.tagName),y.matches('input[name="properties[_slpt]"]')){const w=y,T=m.oldValue,f=w.getAttribute("data-sl-pid");this.log(`data-sl-pid changed from "${T}" to "${f}" - triggering payment placement updates`),r(w)?(w.value!==s&&(w.value=s,this.log("Updated hidden input after data-sl-pid change:",s)),f&&p(f,h),this.log("Re-running payment placement updates after variant change"),k(document.body)):f&&this.isProductInAnyPriceTest(f)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",f):(w.remove(),this.log("Removed non-matching hidden input after data-sl-pid change:",f))}}})});n.add(b);const k=C=>{C.tagName==="SHOPIFY-PAYMENT-TERMS"&&(this.log("MutationObserver found new shopify-payment-terms element"),this.updateShopifyPaymentTerms(t,e));const m=C.querySelectorAll("shopify-payment-terms");m.length>0&&(this.log(`MutationObserver found ${m.length} shopify-payment-terms in added node`),this.updateShopifyPaymentTerms(t,e)),C.tagName==="AFTERPAY-PLACEMENT"&&(this.log("MutationObserver found new afterpay-placement element"),this.updateAfterpayPlacements(t,e,"afterpay"));const y=C.querySelectorAll("afterpay-placement");y.length>0&&(this.log(`MutationObserver found ${y.length} afterpay-placement in added node`),this.updateAfterpayPlacements(t,e,"afterpay")),C.tagName==="SQUARE-PLACEMENT"&&(this.log("MutationObserver found new square-placement element"),this.updateAfterpayPlacements(t,e,"square"));const w=C.querySelectorAll("square-placement");w.length>0&&(this.log(`MutationObserver found ${w.length} square-placement in added node`),this.updateAfterpayPlacements(t,e,"square")),C.tagName==="KLARNA-PLACEMENT"&&(this.log("MutationObserver found new klarna-placement element"),this.updateKlarnaPlacements(t,e));const T=C.querySelectorAll("klarna-placement");T.length>0&&(this.log(`MutationObserver found ${T.length} klarna-placement in added node`),this.updateKlarnaPlacements(t,e))},S=C=>{b.observe(C,{attributes:!0,attributeFilter:["data-sl-pid"],attributeOldValue:!0,subtree:!1});const m=C.getAttribute("data-sl-pid");this.log(`Started AttributeObserver on specific input with data-sl-pid="${m}"`)},P=()=>{const C=document.querySelectorAll('input[name="properties[_slpt]"]');this.log(`Found ${C.length} existing hidden inputs to check`),C.forEach(m=>{const y=m.getAttribute("data-sl-pid");this.log(`Checking existing input with data-sl-pid="${y}"`),r(m)?(m.value=s,this.log("Updated existing hidden input:",s),y&&(this.log("Applying initial DOM selector changes for existing product"),p(y,h)),S(m)):y&&this.isProductInAnyPriceTest(y)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",y):(m.remove(),this.log("Removed non-matching hidden input for product ID:",y))})},_=()=>{document.body?(u.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver on document.body"),P(),k(document.body)):document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{document.body&&(u.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver after DOMContentLoaded"),P(),k(document.body))}):(this.log("Set timeout on observer"),setTimeout(_,10))};_(),window.__shopliftPriceTestObservers=n,window.__shopliftPriceTestValue=s,this.log("Set up DOM observer for price test hidden inputs")}catch(s){this.log("Error updating price test hidden inputs:",s)}}updateKlarnaPlacements(t,e){this.updatePlacementElements(t,e,"klarna-placement",(i,s)=>{i.setAttribute("data-purchase-amount",s.toString())})}cleanupPriceTestObservers(){const t=window.__shopliftPriceTestObservers;t&&(t.forEach(e=>{e.disconnect()}),t.clear(),this.log("Cleaned up existing price test observers")),delete window.__shopliftPriceTestObservers,delete window.__shopliftPriceTestValue}updateAfterpayPlacements(t,e,i="afterpay"){const s=i==="square"?"square-placement":"afterpay-placement";if(document.querySelectorAll(s).length===0){this.log(`No ${s} elements found on page - early return`);return}this.updatePlacementElements(t,e,s,(n,o)=>
7{if(i==="afterpay"){const l=(o/100).toFixed(2);n.setAttribute("data-amount",l)}else n.setAttribute("data-amount",o.toString())}),this.log("updateAfterpayPlacements completed")}updatePlacementElements(t,e,i,s){const r=document.querySelectorAll(i);if(r.length===0){this.log(`No ${i} elements found - early return`);return}let n;if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const l=e==="control"?"a":"b",c=this.state.temporary.previewConfig.variants.find(d=>d.label===l);if(!c?.domSelectors){this.log(`No variant found for label ${l} in preview config for ${i}`);return}n=c.domSelectors,this.log(`Using preview config for ${i} in merchant mode, variant: ${l}`)}else{const l=this.testConfigs.find(d=>d.id===t);if(!l){this.log(`No testConfig found for id: ${t} - early return`);return}const c=l.hypotheses.find(d=>e==="control"?d.isControl:!d.isControl);if(!c?.domSelectors){this.log(`No hypothesis or domSelectors found for assignment: ${e} - early return`);return}n=c.domSelectors}const o=new RegExp(`${this.DATA_SL_ATTRIBUTE_P}=["'](\\d+)["']`);r.forEach(l=>{let c=null;const d=l.parentElement;if(d&&(c=d.querySelector('input[name="properties[_slpt]"]')),c||(c=l.querySelector('input[name="properties[_slpt]"]')),!c){this.log(`No hidden input found for ${i} element`);return}const p=c.getAttribute("data-sl-pid");if(!p){this.log("Hidden input has no data-sl-pid attribute - skipping");return}const h=n.find(S=>{const P=S.cssSelector.match(o);return P&&P[1]===p});if(!h){this.log(`No matching selector found for productId: ${p} - skipping element`);return}const u=h.actions.find(S=>S.scope==="price");if(!u?.value){this.log("No price action or value found - skipping element");return}const b=parseFloat(u.value.replace(/[^0-9.]/g,""));if(Number.isNaN(b)){this.log(`Invalid price "${u.value}" for product ${p} - skipping`);return}const k=Math.round(b*100);s(l,k)}),this.log(`updatePlacementElements completed for ${i}`)}updateShopifyPaymentTerms(t,e){const i=document.querySelectorAll("shopify-payment-terms");if(i.length===0)return;this.log("Store using shopify payments");let s;if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const n=e==="control"?"a":"b",o=this.state.temporary.previewConfig.variants.find(l=>l.label===n);if(!o||!o.domSelectors){this.log(`No variant found for label ${n} in preview config`);return}s=o.domSelectors,this.log(`Using preview config for shopify-payment-terms in merchant mode, variant: ${n}`)}else{const n=this.testConfigs.find(l=>l.id===t);if(!n)return;const o=n.hypotheses.find(l=>e==="control"?l.isControl===!0:l.isControl===!1);if(!o||!o.domSelectors)return;s=o.domSelectors}const r=new RegExp(`${this.DATA_SL_ATTRIBUTE_P}=["'](\\d+)["']`);i.forEach(n=>{const o=n.getAttribute("variant-id");if(!o)return;const l=s.find(c=>{const d=c.cssSelector.match(r);return d&&d[1]===o});if(l){const c=l.actions.find(d=>d.scope==="price");if(c&&c.value){const d=n.getAttribute("shopify-meta");if(d)try{const p=JSON.parse(d);if(p.variants&&Array.isArray(p.variants)){const h=p.variants.find(u=>u.id?.toString()===o);if(h){h.full_price=c.value;const u=parseFloat(c.value.replace(/[^0-9.]/g,""));if(h.number_of_payment_terms&&h.number_of_payment_terms>1){const b=u/h.number_of_payment_terms;h.price_per_term=`$${b.toFixed(2)}`}n.setAttribute("shopify-meta",JSON.stringify(p))}}}catch(p){this.log("Error parsing/updating shoplift-meta:",p)}}}})}async makeJsonRequest(t){const e=await this.makeRequest(t);return e===null?null:JSON.parse(await e.text(),F)}async makeRequest(t){const{url:e,method:i,headers:s,data:r,signal:n}=t,o=new Headers;if(s)for(const c in s)o.append(c,s[c]);(!s||!s.Accept)&&o.append("Accept","application/json"),(!s||!s["Content-Type"])&&o.append("Content-Type","application/json"),(this.eventHost.includes("ngrok.io")||this.eventHost.includes("ngrok-free.app"))&&o.append("ngrok-skip-browser-warning","1234");const l=await this.fetch(e,{method:i,headers:o,body:r,signal:n});if(!l.ok){if(l.status===204)return null;if(l.status===422){const c=await l.json();if(typeof c<"u"&&c.isBot)throw new et}throw new Error(`Error sending shoplift request ${l.status}`)}return l}queueAddVisitorToTest(t,e){if(this.state.essential.visitorTests.some(s=>s.testId===t))return;const i=this.testConfigs.find(s=>s.id===t);if(this.state.essential.visitorTests.push({createdAt:new Date,testId:t,hypothesisId:e.id,isThemeTest:e.type==="theme",themeId:e.themeId,isSaved:!1,isInvalid:!1,shouldSe
7ndToGa:!0,testType:e.type,assignedTo:e.isControl?"control":"variant",testTitle:i?.title}),e.type==="price"){const s=e.isControl?"control":"variant";this.log("Price test assignment detected, updating cart attributes:",t,s),this.updatePriceTestHiddenInputs(t,s,!1)}}queueCartUpdate(t){this.queueEvent(new wt(t))}queuePageView(t){this.queueEvent(new vt(t))}queueEvent(t){!this.state.essential.consentApproved&&this.state.essential.hasConsentInteraction||this.state.analytics.queue.length>10||this.state.analytics.queue.push(t)}legacyGetLocalStorageVisitor(){const t=this.localStorageGet(this.legacySessionKey);if(t)try{return JSON.parse(t,F)}catch{}return null}pruneStaleVisitorTests(){this.state.essential.visitorTests=this.state.essential.visitorTests.filter(t=>this.testConfigs.some(e=>e.id==t.testId)||this.inactiveTestConfigs.filter(e=>this.testIsPaused(e)).some(e=>e.id===t.testId))}pruneStateAndSave(){this.pruneStaleVisitorTests(),this.saveState()}saveState(){this.persistEssentialState(),this.persistAnalyticsState()}loadState(){const t=this.loadAnalyticsState(),e={analytics:t,essential:this.loadEssentialState(t),temporary:this.loadTemporaryState()},i=this.legacyGetLocalStorageVisitor(),s=this.legacyGetCookieVisitor(),r=[i,s].filter(n=>n!==null).sort((n,o)=>+o.storedAt-+n.storedAt)[0];return e.analytics.visitor===null&&r&&({visitorTests:e.essential.visitorTests,...e.analytics.visitor}=r,e.essential.isFirstLoad=!1,e.essential.initialState={createdAt:r.createdAt,referrer:r.referrer,utmCampaign:r.utmCampaign,utmContent:r.utmContent,utmMedium:r.utmMedium,utmSource:r.utmSource,device:r.device},this.deleteCookie("SHOPLIFT"),this.deleteLocalStorage(this.legacySessionKey)),!e.essential.consentApproved&&e.essential.hasConsentInteraction&&this.deleteLocalStorage(this.analyticsSessionKey),e}loadEssentialState(t){const e=this.loadLocalStorage(this.essentialSessionKey),i=this.loadCookie(this.essentialSessionKey),s=this.getInitialState();t.visitor?.device&&(s.device=t.visitor.device);const r={timestamp:new Date,consentApproved:!1,hasConsentInteraction:!1,debugMode:!1,initialState:s,visitorTests:[],isFirstLoad:!0},n=[e,i].filter(o=>o!==null).sort((o,l)=>+l.timestamp-+o.timestamp)[0]??r;return n.initialState||(t.visitor!==null?n.initialState=t.visitor:(n.initialState=s,n.initialState.createdAt=n.timestamp)),n}loadAnalyticsState(){const t=this.loadLocalStorage(this.analyticsSessionKey),e=this.loadCookie(this.analyticsSessionKey),i={timestamp:new Date,visitor:null,queue:[]},s=[t,e].filter(r=>r!==null).sort((r,n)=>+n.timestamp-+r.timestamp)[0]??i;return s.queue.length===0&&t&&t.queue.length>1&&(s.queue=t.queue),s}loadTemporaryState(){const t=this.sessionStorageGet(this.temporarySessionKey),e=t?JSON.parse(t,F):null,i=this.loadCookie(this.temporarySessionKey);return e??i??{isMerchant:!1,timestamp:new Date}}persistEssentialState(){this.log("Persisting essential state"),this.state.essential.isFirstLoad=!1,this.state.essential.timestamp=new Date,this.persistLocalStorageState(this.essentialSessionKey,this.state.essential),this.persistCookieState(this.essentialSessionKey,this.state.essential)}persistAnalyticsState(){this.log("Persisting analytics state"),this.state.essential.consentApproved&&(this.state.analytics.timestamp=new Date,this.persistLocalStorageState(this.analyticsSessionKey,this.state.analytics),this.persistCookieState(this.analyticsSessionKey,{...this.state.analytics,queue:[]}))}persistTemporaryState(){this.log("Setting temporary session state"),this.state.temporary.timestamp=new Date,this.sessionStorageSet(this.temporarySessionKey,JSON.stringify(this.state.temporary)),this.persistCookieState(this.temporarySessionKey,this.state.temporary,!0)}loadLocalStorage(t){const e=this.localStorageGet(t);if(e===null)return null;try{return JSON.parse(e,F)}catch{return null}}loadCookie(t){const e=this.getCookie(t);if(e===null)return null;try{return JSON.parse(e,F)}catch{return null}}persistLocalStorageState(t,e){this.localStorageSet(t,JSON.stringify(e))}persistCookieState(t,e,i=!1){const s=JSON.stringify(e),r=i?"":`expires=${new Date(new Date().getTime()+864e5*365).toUTCString()};`;document.cookie=`${t}=${s};domain=.${window.location.hostname};path=/;SameSite=Strict;${r}`}deleteCookie(t){const e=new Date(0).toUTCString();document.cookie=`${t}=;domain=.${window.location.hostname};path=/;expires=${e};`}deleteLocalStorage(t){window.localStorage.removeItem(t)}getChannel(t){return[{"name":"cross-network","test":(v) => new RegExp(".*cross-network.*", "i").test(v.utmCampaign)}
7,{"name":"direct","test":(v) => v.utmSource === "" && v.utmMedium === ""},{"name":"paid-shopping","test":(v) => (new RegExp("^(?:Google|IGShopping|aax-us-east\.amazon-adsystem\.com|aax\.amazon-adsystem\.com|alibaba|alibaba\.com|amazon|amazon\.co\.uk|amazon\.com|apps\.shopify\.com|checkout\.shopify\.com|checkout\.stripe\.com|cr\.shopping\.naver\.com|cr2\.shopping\.naver\.com|ebay|ebay\.co\.uk|ebay\.com|ebay\.com\.au|ebay\.de|etsy|etsy\.com|m\.alibaba\.com|m\.shopping\.naver\.com|mercadolibre|mercadolibre\.com|mercadolibre\.com\.ar|mercadolibre\.com\.mx|message\.alibaba\.com|msearch\.shopping\.naver\.com|nl\.shopping\.net|no\.shopping\.net|offer\.alibaba\.com|one\.walmart\.com|order\.shopping\.yahoo\.co\.jp|partners\.shopify\.com|s3\.amazonaws\.com|se\.shopping\.net|shop\.app|shopify|shopify\.com|shopping\.naver\.com|shopping\.yahoo\.co\.jp|shopping\.yahoo\.com|shopzilla|shopzilla\.com|simplycodes\.com|store\.shopping\.yahoo\.co\.jp|stripe|stripe\.com|uk\.shopping\.net|walmart|walmart\.com)$", "i").test(v.utmSource) || new RegExp("^(.*(([^a-df-z]|^)shop|shopping).*)$", "i").test(v.utmCampaign)) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-search","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|yandex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-social","test":(v) => new RegExp("^(?:43things|43things\.com|51\.com|5ch\.net|Hatena|ImageShack|academia\.edu|activerain|activerain\.com|activeworlds|activeworlds\.com|addthis|addthis\.com|airg\.ca|allnurses\.com|allrecipes\.com|alumniclass|alumniclass\.com|ameba\.jp|ameblo\.jp|americantowns|americantowns\.com|amp\.reddit\.com|ancestry\.com|anobii|anobii\.com|answerbag|answerbag\.com|answers\.yahoo\.com|aolanswers|aolanswers\.com|apps\.facebook\.com|ar\.pinterest\.com|artstation\.com|askubuntu|askubuntu\.com|asmallworld\.com|athlinks|athlinks\.com|away\.vk\.com|awe\.sm|b\.hatena\.ne\.jp|baby-gaga|baby-gaga\.com|babyblog\.ru|badoo|badoo\.com|bebo|bebo\.com|beforeitsnews|beforeitsnews\.com|bharatstudent|bharatstudent\.com|biip\.no|biswap\.org|bit\.ly|blackcareernetwork\.com|blackplanet|blackplanet\.com|blip\.fm|blog\.com|blog\.feedspot\.com|blog\.goo\.ne\.jp|blog\.naver\.com|blog\.yahoo\.co\.jp|blogg\.no|bloggang\.com|blogger|blogger\.com|blogher|blogher\.com|bloglines|bloglines\.com|blogs\.com|blogsome|blogsome\.com|blogspot|blogspot\.com|blogster|blogster\.com|blurtit|blurtit\.com|bookmarks\.yahoo\.co\.jp|bookmarks\.yahoo\.com|br\.pinterest\.com|brightkite|brightkite\.com|brizzly|brizzly\.com|business\.facebook\.com|buzzfeed|buzzfeed\.com|buzznet|buzznet\.com|cafe\.naver\.com|cafemom|cafemom\.com|camospace|camospace\.com|canalblog\.com|care\.com|care2|care2\.com|caringbridge\.org|catster|catster\.com|cbnt\.io|cellufun|cellufun\.com|centerblog\.net|chat\.zalo\.me|chegg\.com|chicagonow|chicagonow\.com|chiebukuro\.yahoo\.co\.jp|classmates|classmates\.com|classquest|classquest\.com|co\.pinterest\.com|cocolog-nifty|cocolog-nifty\.com|copainsdavant\.linternaute\.com|couchsurfing\.org|cozycot|cozycot\.com|cross\.tv|crunchyroll|crunchyroll\.com|cyworld|cyworld\.com|cz\.pinterest\.com|d\.hatena\.ne\.jp|dailystrength\.org|deluxe\.com|deviantart|deviantart\.com|dianping|dianping\.com|digg|digg\.com|diigo|diigo\.com|discover\.hubpages\.com|disqus|disqus\.com|dogster|dogster\.com|dol2day|dol2day\.com|doostang|doostang\.com|dopplr|dopplr\.com|douban|douban\.com|draft\.blogger\.com|draugiem\.lv|drugs-forum|drugs-forum\.com|dzone|dzone\.com|edublogs\.org|elftown|elftown\.com|epicurious\.com|everforo\.com|exblog\.jp|extole|extole\.com|facebook|facebook\.com|faceparty|faceparty\.com|fandom\.com|fanpop|fanpop\.com|fark|fark\.com|fb|fb\.me|fc2|fc2\.com|feedspot|feministing|feministing\.com|filmaffinity|filmaffinity\.com|flickr|flickr\.com|flipboard|flipboard\.com|folkdirect|folkdirect\.com|foodservice|foodservice\.com|forums\.androidcentral\.com|forums\.crackberry\.com|forums\.imore\.com|forums\.nexopia\.com|forums\.webosnation\.com|forums\.wpcentral\.com|fotki|fotki\.com|fotolog|fotolog\.com|foursquare|foursquare\.com|free\.facebook\.com|friendfeed|friendfeed\.com|fruehstueckstreff\.org|fubar|fubar\.com|gaiaonline|gaiaonline\.com|gamerdna|gamerdna\.com|gather\.com|geni\.com|getpocket\.com|glassboard|glassboard\.com|glassdoor|glassdoor\.com|godtube|godtube\.com|goldenline\.pl|goldstar|goldstar\.com|goo\.gl|gooblog|goodreads|goodreads\.com|google\+|googlegroups\.com|googleplus|govloop|govloop\.com|gowalla|gowalla\.com|gree\.jp|groups\.google\.com|gulli\.com|gutefrage\.net|habbo|habbo\.com|hi5|hi5\.com|hootsuite|hootsuite\.com|houzz|houzz\.com|hoverspot|hoverspot\.com|hr\.com|hu\.pinterest\.com|hubculture|hubculture\.com|hubpages\.com|hyves\.net|hyves\.nl|ibibo|ibibo\.com|id\.pinterest\.com|identi\.ca|ig|imageshack\.com|imageshack\.us|imvu|imvu\.com|in\.pinterest\.com|insanejournal|insanejournal\.com|instagram|instagram\.com|instapaper|instapaper\.com|internations\.org|interpals\.net|intherooms|intherooms\.com|irc-galleria\.net|is\.gd|italki|italki\.com|jammerdirect|jammerdirect\.com|jappy\.com|jappy\.de|kaboodle\.com|k
7akao|kakao\.com|kakaocorp\.com|kaneva|kaneva\.com|kin\.naver\.com|l\.facebook\.com|l\.instagram\.com|l\.messenger\.com|last\.fm|librarything|librarything\.com|lifestream\.aol\.com|line|line\.me|linkedin|linkedin\.com|listal|listal\.com|listography|listography\.com|livedoor\.com|livedoorblog|livejournal|livejournal\.com|lm\.facebook\.com|lnkd\.in|m\.blog\.naver\.com|m\.cafe\.naver\.com|m\.facebook\.com|m\.kin\.naver\.com|m\.vk\.com|m\.yelp\.com|mbga\.jp|medium\.com|meetin\.org|meetup|meetup\.com|meinvz\.net|meneame\.net|menuism\.com|messages\.google\.com|messages\.yahoo\.co\.jp|messenger|messenger\.com|mix\.com|mixi\.jp|mobile\.facebook\.com|mocospace|mocospace\.com|mouthshut|mouthshut\.com|movabletype|movabletype\.com|mubi|mubi\.com|my\.opera\.com|myanimelist\.net|myheritage|myheritage\.com|mylife|mylife\.com|mymodernmet|mymodernmet\.com|myspace|myspace\.com|netvibes|netvibes\.com|news\.ycombinator\.com|newsshowcase|nexopia|ngopost\.org|niconico|nicovideo\.jp|nightlifelink|nightlifelink\.com|ning|ning\.com|nl\.pinterest\.com|odnoklassniki\.ru|odnoklassniki\.ua|okwave\.jp|old\.reddit\.com|oneworldgroup\.org|onstartups|onstartups\.com|opendiary|opendiary\.com|oshiete\.goo\.ne\.jp|out\.reddit\.com|over-blog\.com|overblog\.com|paper\.li|partyflock\.nl|photobucket|photobucket\.com|pinboard|pinboard\.in|pingsta|pingsta\.com|pinterest|pinterest\.at|pinterest\.ca|pinterest\.ch|pinterest\.cl|pinterest\.co\.kr|pinterest\.co\.uk|pinterest\.com|pinterest\.com\.au|pinterest\.com\.mx|pinterest\.de|pinterest\.es|pinterest\.fr|pinterest\.it|pinterest\.jp|pinterest\.nz|pinterest\.ph|pinterest\.pt|pinterest\.ru|pinterest\.se|pixiv\.net|pl\.pinterest\.com|playahead\.se|plurk|plurk\.com|plus\.google\.com|plus\.url\.google\.com|pocket\.co|posterous|posterous\.com|pro\.homeadvisor\.com|pulse\.yahoo\.com|qapacity|qapacity\.com|quechup|quechup\.com|quora|quora\.com|qzone\.qq\.com|ravelry|ravelry\.com|reddit|reddit\.com|redux|redux\.com|renren|renren\.com|researchgate\.net|reunion|reunion\.com|reverbnation|reverbnation\.com|rtl\.de|ryze|ryze\.com|salespider|salespider\.com|scoop\.it|screenrant|screenrant\.com|scribd|scribd\.com|scvngr|scvngr\.com|secondlife|secondlife\.com|serverfault|serverfault\.com|shareit|sharethis|sharethis\.com|shvoong\.com|sites\.google\.com|skype|skyrock|skyrock\.com|slashdot\.org|slideshare\.net|smartnews\.com|snapchat|snapchat\.com|social|sociallife\.com\.br|socialvibe|socialvibe\.com|spaces\.live\.com|spoke|spoke\.com|spruz|spruz\.com|ssense\.com|stackapps|stackapps\.com|stackexchange|stackexchange\.com|stackoverflow|stackoverflow\.com|stardoll\.com|stickam|stickam\.com|studivz\.net|suomi24\.fi|superuser|superuser\.com|sweeva|sweeva\.com|t\.co|t\.me|tagged|tagged\.com|taggedmail|taggedmail\.com|talkbiznow|talkbiznow\.com|taringa\.net|techmeme|techmeme\.com|tencent|tencent\.com|tiktok|tiktok\.com|tinyurl|tinyurl\.com|toolbox|toolbox\.com|touch\.facebook\.com|tr\.pinterest\.com|travellerspoint|travellerspoint\.com|tripadvisor|tripadvisor\.com|trombi|trombi\.com|trustpilot|tudou|tudou\.com|tuenti|tuenti\.com|tumblr|tumblr\.com|tweetdeck|tweetdeck\.com|twitter|twitter\.com|twoo\.com|typepad|typepad\.com|unblog\.fr|urbanspoon\.com|ushareit\.com|ushi\.cn|vampirefreaks|vampirefreaks\.com|vampirerave|vampirerave\.com|vg\.no|video\.ibm\.com|vk\.com|vkontakte\.ru|wakoopa|wakoopa\.com|wattpad|wattpad\.com|web\.facebook\.com|web\.skype\.com|webshots|webshots\.com|wechat|wechat\.com|weebly|weebly\.com|weibo|weibo\.com|wer-weiss-was\.de|weread|weread\.com|whatsapp|whatsapp\.com|wiki\.answers\.com|wikihow\.com|wikitravel\.org|woot\.com|wordpress|wordpress\.com|wordpress\.org|xanga|xanga\.com|xing|xing\.com|yahoo-mbga\.jp|yammer|yammer\.com|yelp|yelp\.co\.uk|yelp\.com|youroom\.in|za\.pinterest\.com|zalo|zoo\.gr|zooppa|zooppa\.com)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-video","test":(v) => new RegExp("^(?:blog\.twitch\.tv|crackle|crackle\.com|curiositystream|curiositystream\.com|d\.tube|dailymotion|dailymotion\.com|dashboard\.twitch\.tv|disneyplus|disneyplus\.com|fast\.wistia\.net|help\.hulu\.com|help\.netflix\.com|hulu|hulu\.com|id\.twitch\.tv|iq\.com|iqiyi|iqiyi\.com|jobs\.netflix\.com|justin\.tv|m\.twitch\.tv|m\.youtube\.com|music\.youtube\.com|netflix|netflix\.com|player\.twitch\.tv|player\.vimeo\.com|ted|ted\.com|twitch|twitch\.tv|utreon|utreon\.com|veoh|veoh\.com|viadeo\.journaldunet\.com|vimeo|vimeo\.com|wistia|wistia\.com|youku|youku\.com|youtube|youtube\.com)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"display","test":(v) =>
7 new RegExp("^(?:display|banner|expandable|interstitial|cpm)$", "i").test(v.utmMedium)},{"name":"paid-other","test":(v) => new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"organic-shopping","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|yandex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) || new RegExp("^(.*(([^a-df-z]|^)shop|shopping).*)$", "i").test(v.utmCampaign)},{"name":"organic-social","test":(v) => new RegExp("^(?:43things|43things\.com|51\.com|5ch\.net|Hatena|ImageShack|academia\.edu|activerain|activerain\.com|activeworlds|activeworlds\.com|addthis|addthis\.com|airg\.ca|allnurses\.com|allrecipes\.com|alumniclass|alumniclass\.com|ameba\.jp|ameblo\.jp|americantowns|americantowns\.com|amp\.reddit\.com|ancestry\.com|anobii|anobii\.com|answerbag|answerbag\.com|answers\.yahoo\.com|aolanswers|aolanswers\.com|apps\.facebook\.com|ar\.pinterest\.com|artstation\.com|askubuntu|askubuntu\.com|asmallworld\.com|athlinks|athlinks\.com|away\.vk\.com|awe\.sm|b\.hatena\.ne\.jp|baby-gaga|baby-gaga\.com|babyblog\.ru|badoo|badoo\.com|bebo|bebo\.com|beforeitsnews|beforeitsnews\.com|bharatstudent|bharatstudent\.com|biip\.no|biswap\.org|bit\.ly|blackcareernetwork\.com|blackplanet|blackplanet\.com|blip\.fm|blog\.com|blog\.feedspot\.com|blog\.goo\.ne\.jp|blog\.naver\.com|blog\.yahoo\.co\.jp|blogg\.no|bloggang\.com|blogger|blogger\.com|blogher|blogher\.com|bloglines|bloglines\.com|blogs\.com|blogsome|blogsome\.com|blogspot|blogspot\.com|blogster|blogster\.com|blurtit|blurtit\.com|bookmarks\.yahoo\.co\.jp|bookmarks\.yahoo\.com|br\.pinterest\.com|brightkite|brightkite\.com|brizzly|brizzly\.com|business\.facebook\.com|buzzfeed|buzzfeed\.com|buzznet|buzznet\.com|cafe\.naver\.com|cafemom|cafemom\.com|camospace|camospace\.com|canalblog\.com|care\.com|care2|care2\.com|caringbridge\.org|catster|catster\.com|cbnt\.io|cellufun|cellufun\.com|centerblog\.net|chat\.zalo\.me|chegg\.com|chicagonow|chicagonow\.com|chiebukuro\.yahoo\.co\.jp|classmates|classmates\.com|classquest|classquest\.com|co\.pinterest\.com|cocolog-nifty|cocolog-nifty\.com|copainsdavant\.linternaute\.com|couchsurfing\.org|cozycot|cozycot\.com|cross\.tv|crunchyroll|crunchyroll\.com|cyworld|cyworld\.com|cz\.pinterest\.com|d\.hatena\.ne\.jp|dailystrength\.org|deluxe\.com|deviantart|deviantart\.com|dianping|dianping\.com|digg|digg\.com|diigo|diigo\.com|discover\.hubpages\.com|disqus|disqus\.com|dogster|dogster\.com|dol2day|dol2day\.com|doostang|doostang\.com|dopplr|dopplr\.com|douban|douban\.com|draft\.blogger\.com|draugiem\.lv|drugs-forum|drugs-forum\.com|dzone|dzone\.com|edublogs\.org|elftown|elftown\.com|epicurious\.com|everforo\.com|exblog\.jp|extole|extole\.com|facebook|facebook\.com|faceparty|faceparty\.com|fandom\.com|fanpop|fanpop\.com|fark|fark\.com|fb|fb\.me|fc2|fc2\.com|feedspot|feministing|feministing\.com|filmaffinity|filmaffinity\.com|flickr|flickr\.com|flipboard|flipboard\.com|folkdirect|folkdirect\.com|foodservice|foodservice\.com|forums\.androidcentral\.com|forums\.crackberry\.com|forums\.imore\.com|forums\.nexopia\.com|forums\.webosnation\.com|forums\.wpcentral\.com|fotki|fotki\.com|fotolog|fotolog\.com|foursquare|foursquare\.com|free\.facebook\.com|friendfeed|friendfeed\.com|fruehstueckstreff\.org|fubar|fubar\.com|gaiaonline|gaiaonline\.com|gamerdna|gamerdna\.com|gather\.com|geni\.com|getpocket\.com|glassboard|glassboard\.com|glassdoor|glassdoor\.com|godtube|godtube\.com|goldenline\.pl|goldstar|goldstar\.com|goo\.gl|gooblog|goodreads|goodreads\.com|google\+|googlegroups\.com|googleplus|govloop|govloop\.com|gowalla|gowalla\.com|gree\.jp|groups\.google\.com|gulli\.com|gutefrage\.net|habbo|habbo\.com|hi5|hi5\.com|hootsuite|hootsuite\.com|houzz|houzz\.com|hoverspot|hoverspot\.com|hr\.com|hu\.pinterest\.com|hubculture|hubculture\.com|hubpages\.com|hyves\.net|hyves\.nl|ibibo|ibibo\.com|id\.pinterest\.com|identi\.ca|ig|imageshack\.com|imageshack\.us|imvu|imvu\.com|in\.pinterest\.com|insanejournal|insanejournal\.com|instagram|instagram\.com|instapaper|instapaper\.com|internations\.org|interpals\.net|intherooms|intherooms\.com|irc-galleria\.net|is\.gd|italki|italki\.com|jammerdirect|jammerdirect\.com|jappy\.com|jappy\.de|kaboodle\.com|k
7akao|kakao\.com|kakaocorp\.com|kaneva|kaneva\.com|kin\.naver\.com|l\.facebook\.com|l\.instagram\.com|l\.messenger\.com|last\.fm|librarything|librarything\.com|lifestream\.aol\.com|line|line\.me|linkedin|linkedin\.com|listal|listal\.com|listography|listography\.com|livedoor\.com|livedoorblog|livejournal|livejournal\.com|lm\.facebook\.com|lnkd\.in|m\.blog\.naver\.com|m\.cafe\.naver\.com|m\.facebook\.com|m\.kin\.naver\.com|m\.vk\.com|m\.yelp\.com|mbga\.jp|medium\.com|meetin\.org|meetup|meetup\.com|meinvz\.net|meneame\.net|menuism\.com|messages\.google\.com|messages\.yahoo\.co\.jp|messenger|messenger\.com|mix\.com|mixi\.jp|mobile\.facebook\.com|mocospace|mocospace\.com|mouthshut|mouthshut\.com|movabletype|movabletype\.com|mubi|mubi\.com|my\.opera\.com|myanimelist\.net|myheritage|myheritage\.com|mylife|mylife\.com|mymodernmet|mymodernmet\.com|myspace|myspace\.com|netvibes|netvibes\.com|news\.ycombinator\.com|newsshowcase|nexopia|ngopost\.org|niconico|nicovideo\.jp|nightlifelink|nightlifelink\.com|ning|ning\.com|nl\.pinterest\.com|odnoklassniki\.ru|odnoklassniki\.ua|okwave\.jp|old\.reddit\.com|oneworldgroup\.org|onstartups|onstartups\.com|opendiary|opendiary\.com|oshiete\.goo\.ne\.jp|out\.reddit\.com|over-blog\.com|overblog\.com|paper\.li|partyflock\.nl|photobucket|photobucket\.com|pinboard|pinboard\.in|pingsta|pingsta\.com|pinterest|pinterest\.at|pinterest\.ca|pinterest\.ch|pinterest\.cl|pinterest\.co\.kr|pinterest\.co\.uk|pinterest\.com|pinterest\.com\.au|pinterest\.com\.mx|pinterest\.de|pinterest\.es|pinterest\.fr|pinterest\.it|pinterest\.jp|pinterest\.nz|pinterest\.ph|pinterest\.pt|pinterest\.ru|pinterest\.se|pixiv\.net|pl\.pinterest\.com|playahead\.se|plurk|plurk\.com|plus\.google\.com|plus\.url\.google\.com|pocket\.co|posterous|posterous\.com|pro\.homeadvisor\.com|pulse\.yahoo\.com|qapacity|qapacity\.com|quechup|quechup\.com|quora|quora\.com|qzone\.qq\.com|ravelry|ravelry\.com|reddit|reddit\.com|redux|redux\.com|renren|renren\.com|researchgate\.net|reunion|reunion\.com|reverbnation|reverbnation\.com|rtl\.de|ryze|ryze\.com|salespider|salespider\.com|scoop\.it|screenrant|screenrant\.com|scribd|scribd\.com|scvngr|scvngr\.com|secondlife|secondlife\.com|serverfault|serverfault\.com|shareit|sharethis|sharethis\.com|shvoong\.com|sites\.google\.com|skype|skyrock|skyrock\.com|slashdot\.org|slideshare\.net|smartnews\.com|snapchat|snapchat\.com|social|sociallife\.com\.br|socialvibe|socialvibe\.com|spaces\.live\.com|spoke|spoke\.com|spruz|spruz\.com|ssense\.com|stackapps|stackapps\.com|stackexchange|stackexchange\.com|stackoverflow|stackoverflow\.com|stardoll\.com|stickam|stickam\.com|studivz\.net|suomi24\.fi|superuser|superuser\.com|sweeva|sweeva\.com|t\.co|t\.me|tagged|tagged\.com|taggedmail|taggedmail\.com|talkbiznow|talkbiznow\.com|taringa\.net|techmeme|techmeme\.com|tencent|tencent\.com|tiktok|tiktok\.com|tinyurl|tinyurl\.com|toolbox|toolbox\.com|touch\.facebook\.com|tr\.pinterest\.com|travellerspoint|travellerspoint\.com|tripadvisor|tripadvisor\.com|trombi|trombi\.com|trustpilot|tudou|tudou\.com|tuenti|tuenti\.com|tumblr|tumblr\.com|tweetdeck|tweetdeck\.com|twitter|twitter\.com|twoo\.com|typepad|typepad\.com|unblog\.fr|urbanspoon\.com|ushareit\.com|ushi\.cn|vampirefreaks|vampirefreaks\.com|vampirerave|vampirerave\.com|vg\.no|video\.ibm\.com|vk\.com|vkontakte\.ru|wakoopa|wakoopa\.com|wattpad|wattpad\.com|web\.facebook\.com|web\.skype\.com|webshots|webshots\.com|wechat|wechat\.com|weebly|weebly\.com|weibo|weibo\.com|wer-weiss-was\.de|weread|weread\.com|whatsapp|whatsapp\.com|wiki\.answers\.com|wikihow\.com|wikitravel\.org|woot\.com|wordpress|wordpress\.com|wordpress\.org|xanga|xanga\.com|xing|xing\.com|yahoo-mbga\.jp|yammer|yammer\.com|yelp|yelp\.co\.uk|yelp\.com|youroom\.in|za\.pinterest\.com|zalo|zoo\.gr|zooppa|zooppa\.com)$", "i").test(v.utmSource) || new RegExp("^(?:social|social-network|social-media|sm|social network|social media)$", "i").test(v.utmMedium)},{"name":"organic-video","test":(v) => new RegExp("^(?:blog\.twitch\.tv|crackle|crackle\.com|curiositystream|curiositystream\.com|d\.tube|dailymotion|dailymotion\.com|dashboard\.twitch\.tv|disneyplus|disneyplus\.com|fast\.wistia\.net|help\.hulu\.com|help\.netflix\.com|hulu|hulu\.com|id\.twitch\.tv|iq\.com|iqiyi|iqiyi\.com|jobs\.netflix\.com|justin\.tv|m\.twitch\.tv|m\.youtube\.com|music\.youtube\.com|netflix|netflix\.com|player\.twitch\.tv|player\.vimeo\.com|ted|ted\.com|twitch|twitch\.tv|utreon|utreon\.com|veoh|veoh\.com|viadeo\.journaldunet\.com|vimeo|vimeo\.com|wistia|wistia\.com|youku|youku\.com|youtube|youtube\.com)$", "i").test(v.utmSource) || new RegExp("^(.*video.*)$", "i").test(v.utmMedium)},{"name":"organic-search","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|y
7andex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) || v.utmMedium.toLowerCase() === "organic"},{"name":"referral","test":(v) => new RegExp("^(?:referral|app|link)$", "i").test(v.utmMedium)},{"name":"email","test":(v) => new RegExp("^(?:email|e-mail|e_mail|e mail)$", "i").test(v.utmMedium) || new RegExp("^(?:email|e-mail|e_mail|e mail)$", "i").test(v.utmSource)},{"name":"affiliate","test":(v) => v.utmMedium.toLowerCase() === "affiliate"},{"name":"audio","test":(v) => v.utmMedium.toLowerCase() === "audio"},{"name":"sms","test":(v) => v.utmSource.toLowerCase() === "sms" || v.utmMedium.toLowerCase() === "sms"},{"name":"mobile-push-notification","test":(v) => v.utmSource.toLowerCase() === "firebase" || new RegExp("(?:.*mobile.*|.*notification.*|push$)", "i").test(v.utmMedium)}].find(i=>i.test(t))?.name??"other"}getShopifyAnalyticsId(){const t=this.getCookie("_shopify_y");if(t)return t;try{const e=this.localStorageGet("Shoplift_ClientId");if(e)return e}catch{}return null}legacyGetCookieVisitor(){const t=this.getCookie("SHOPLIFT");return t===null?null:JSON.parse(t,F)}getCookie(t){const e=this.cookie.split("; ").filter(i=>i.split("=").at(0)===t).at(0);return e===void 0?null:e.split("=").slice(1).join("=")}monitorConsentChange(){document.addEventListener("visitorConsentCollected",t=>{(async()=>await this.onConsentChange(t.detail.analyticsAllowed,!0))()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>this.loadShopifyConsentApiWithRetry()):this.loadShopifyConsentApiWithRetry()}loadShopifyConsentApiWithRetry(){let t=0;const e=()=>{this.loadShopifyConsentApi()||t++<10&&window.setTimeout(e,100)};e()}loadShopifyConsentApi(){if(window.Shopify){this.log("Loading Shopify features");const t=async()=>{if(!window.Shopify){this.log("Shopify object missing... suddenly?");return}if(window.Shopify.customerPrivacy===void 0){this.log("Shopify CustomerPrivacy api still missing, trying again in 1000ms"),e=window.setTimeout(()=>{(async()=>await t())()},1e3);return}const i=window.Shopify.customerPrivacy.getTrackingConsent();await this.onConsentChange(window.Shopify.customerPrivacy.analyticsProcessingAllowed(),i==="yes")};let e=window.setTimeout(()=>{(async()=>await t())()},5e3);return window.Shopify.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],i=>{(async()=>{if(window.clearTimeout(e),i){this.log("Error loading consent tracking",i);return}await t()})()}),!0}return!1}async onConsentChange(t,e){try{if(this.log("Consent change detected",t,e),this.state.essential.consentApproved=t,this.state.essential.hasConsentInteraction=e,!this.state.essential.consentApproved){this.state.essential.hasConsentInteraction&&(this.state.analytics.queue.length=0),this.saveState();return}this.cookie=document.cookie,this.shopifyAnalyticsId=this.getShopifyAnalyticsId();for(const i of this.state.analytics.queue.filter(s=>s.type===1||s.type===2)){const s=i;s.shopifyAnalyticsId=this.shopifyAnalyticsId}this.saveState(),await this.syncAllEvents()}catch(i){this.log("Error syncing on consent change",i)}}isThemePreview(){return isThemePreview||themeRole!=="main"}isAppProxyPath(){const t=["/apps/","/tools/","/a/"],e=window.location.pathname;return t.some(i=>e.startsWith(i))}clearThemeBar(t,e,i){const s=structuredClone(i);this.log("Looking for theme bar"),this.waitForElement(null,"body").then(r=>this.waitForElement(r,"#preview-bar-iframe, #PBarNextFrameWrapper").then(n=>(this.log("Found theme bar"),e&&(this.log("Removing theme bar"),n.remove()),t?this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify({...this.debugState(),stateAtEvaluation:s},X)}):Promise.resolve(null)))).catch(r=>console.error(r))}waitForElement(t,e){return new Promise(i=>{const s=document.querySelector(e);if(s){i(s);return}const r=new MutationObserver(n=>{const o=document.querySelector(e);if(o){r.disconnect(),i(o);return}});r.observe(t??document.documentElement,{childList:!0})})}setDebug(t){this.state.essential.debugMode=t,this.saveState()}log(t,...e){let i=0;const s=t.replace(/%[sdoOfF]/g,r=>{if(i>=e.length)return r;const n=e[i++];return r==="%o"||r==="%O"?JSON.stringify(n):String(n)});this.logHistory.push(`[${new Date().toISOString()}][SL] ${s}`),!(!this.state.essential.debugMode&&!this.shopliftDebug)&&console.debug(`[SL] ${t}`,...e)}debugState(){return{state:this.state,storage:{essential:this.loadLocalStorage(this.essentialSessionKey),analytics:this.loadLocalStorage(this.analyticsSessionKey)},params:{shop:this.shop,host:this.host,eventHost:this.eventHost,cssHideClass:this.cssHideClass,testConfigs:this.testConfigs,inactiveTestConfigs:this.inactiveTestConfigs,sendPageView:this.sendPageView,isShopifyMerchantCookie
7:this.getCookie("is_shopify_merchant"),themeId,url:window.location.href,isThemePreview,themeRole,gaConfig:this.gaConfig},logHistory:this.logHistory}}createViewportObserver(t,e={}){const{threshold:i=this.VIEWPORT_TRACK_THRESHOLD,triggerOnce:s=!0}=e,r=new Set;return new IntersectionObserver(n=>{n.forEach(o=>{if(o.isIntersecting&&!r.has(o.target)){const l=o.target,c=l.getAttribute(this.DATA_SL_TEST_ID);c&&(t(c,l),s&&r.add(l))}})},{threshold:i})}applyChangesWithViewport(t,e,i,s){const r=e.selectorsForViewportTracking??e.selectors,n=o=>{if(this.state.essential.visitorTests.some(h=>h.testId===o)||this.activeViewportObservers.has(o))return;const l=[];if(r.forEach(h=>{t.querySelectorAll(h.cssSelector).forEach(b=>l.push(b))}),l.length===0)return;let c=!1;const d=()=>{c||(c=!0,i(o),p.disconnect(),this.activeViewportObservers.delete(o))},p=this.createViewportObserver(()=>{d()},{triggerOnce:!0,...s});this.activeViewportObservers.set(o,p),this.log(`Created viewport observer for test ${o}, observing ${l.length} elements`),l.forEach(h=>{h.setAttribute(this.DATA_SL_TEST_ID,String(o)),p.observe(h)}),setTimeout(()=>{c||l.forEach(h=>{const u=h.getBoundingClientRect(),b=s?.threshold??this.VIEWPORT_TRACK_THRESHOLD,k=Math.min(u.bottom,window.innerHeight)-Math.max(u.top,0),S=Math.min(u.right,window.innerWidth)-Math.max(u.left,0);u.top<window.innerHeight&&u.bottom>0&&u.left<window.innerWidth&&u.right>0&&k>0&&S>0&&k>=u.height*b&&(this.log(`Price element already visible in viewport for test ${o}:`,h),d())})},100)};e.selectors.length>0&&U(t,e,()=>{}),bt(t,{testId:e.testId,hypothesisId:e.hypothesisId,selectors:r},o=>{n(o)})}applyPriceTestWithMapLookup(t,e,i,s){if(!e.priceData){this.log("No price data for hypothesis '%s'",e.id);return}this.log("Hypothesis '%s' isControl=%s, priceData has %d variants",e.id,e.isControl,e.priceData.variants.length);const r=e.priceData.variants.slice(0,3);for(const[S,P,_]of r)this.log(" Sample priceData: variant=%s, price=%d, compareAt=%d",S,P,_);const n=j(e.priceData),o=new Set;for(const S of i)if(S.priceData)for(const[P]of S.priceData.variants)o.add(P);this.log("Price test Map lookup: %d products in hypothesis, %d total products to track",n.size,o.size);const l=e.priceData,c=new WeakSet;let d=!1;const p="[data-sl-attribute-p], [data-sl-attribute-cap], [data-sl-attribute-discount]",h=S=>{if(c.has(S))return;const P=S.getAttribute("data-sl-attribute-p"),_=S.getAttribute("data-sl-attribute-cap"),C=S.getAttribute("data-sl-attribute-discount"),m=P||_||C;if(!m||!o.has(m))return;c.add(S);const y=n.get(m);y&&(this.log("Applying price for product %s: %d cents (compare at: %d cents)",m,y.priceInCents,y.compareAtPriceInCents),Dt(S,m,y,l),this.log("Applied price to element for product %s",m)),!d&&!this.state.essential.visitorTests.some(w=>w.testId===t)&&(S.setAttribute(this.DATA_SL_TEST_ID,String(t)),this.setupElementViewportTracking(S,t,()=>{d||(d=!0,s(t))}))},u=()=>{const S=document.querySelectorAll(p);this.log("Scanning for price elements, found: %d",S.length),S.forEach(h)},b=new MutationObserver(S=>{for(const P of S)P.type==="childList"&&P.addedNodes.forEach(_=>{if(_.nodeType===Node.ELEMENT_NODE){const C=_;(C.hasAttribute("data-sl-attribute-p")||C.hasAttribute("data-sl-attribute-cap")||C.hasAttribute("data-sl-attribute-discount"))&&h(C),C.querySelectorAll(p).forEach(h)}}),P.type==="attributes"&&P.target instanceof Element&&h(P.target)}),k=document.body||document.documentElement;b.observe(k,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-sl-attribute-p","data-sl-attribute-cap","data-sl-attribute-discount"]}),this.log("MutationObserver started for price elements"),u(),document.readyState==="loading"&&document.addEventListener("DOMContentLoaded",()=>{this.log("DOMContentLoaded - rescanning for price elements"),u()}),setTimeout(()=>{this.log("Delayed rescan for price elements"),u()},100),setTimeout(()=>{this.log("Final rescan for price elements"),u()},500)}setupElementViewportTracking(t,e,i){const s=this.VIEWPORT_TRACK_THRESHOLD,r=t.getBoundingClientRect(),n=Math.min(r.bottom,window.innerHeight)-Math.max(r.top,0),o=Math.min(r.right,window.innerWidth)-Math.max(r.left,0);if(r.top<window.innerHeight&&r.bottom>0&&r.left<window.innerWidth&&r.right>0&&n>0&&o>0&&n>=r.height*s){this.log("Price element already visible for test %s",e),i();return}const c=new IntersectionObserver(d=>{for(const p of d)if(p.isIntersecting&&p.intersectionRatio>=s){this.log("Price element entered viewport for test %s",e),c.disconnect(),i();break}},{threshold:s});c.observe(t)}debug(){const t=this.debugState();console.log(JSON.stringify(t,X,2))}}(async function(){window.shopliftInstance||(window.shopliftInstance=new Wt("paceline-2350.myshopify.com","https://app.shoplift.ai","https://events.shoplift.ai",false,false,false,{"sendEvents":false,"mode":"gtag"},false,false,1000,[],[{"id":"c657e8d3-78c3-4fbd-bf8f-720811d69b72","bayesianRevision":3,"status":"paused","hypotheses":[{"id":"c6dea9f1-2a95-4f26-ad8c-6dc64ed7e616","type":"landing","themeId":174791459089,"affix":"app-portal","isControl":true,"redirectPath":null},{"id":"4485cfd3-4bbe-44c1-aab1-0a84cfb68e2c","type":"landing","themeId":174791459089,"affix":"sl-FA946626","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"6546fd33-0cb4-459a-b359-ddb728b86bbd","bayesianRevision":3,"status":"paused","hypotheses":[{"id":"98c1b2e8-2bc1-4fe2-ba78-101c9ed75ae4","type":"landing","themeId":174791459089,"affix":"app-portal","isControl":true,"redirectPath":null},{"id":"bd7c4d3a-07f9-482d-a063-1400a1d0a111","type":"landing","themeId":174791459089,"affix":"sl-6FE1258
7E","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"0874e3de-a3de-452e-9166-062e525e8f60","bayesianRevision":3,"status":"cancelled","hypotheses":[{"id":"602ed0fc-af75-417c-baa9-65e3647f407c","type":"theme","themeId":169467281681,"affix":"","isControl":true,"redirectPath":null},{"id":"0644adbc-e031-48e6-b3c7-c9b5cc7d037d","type":"theme","themeId":169946284305,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"6d9b5763-0beb-479f-9007-d27db4bc1d83","bayesianRevision":3,"status":"cancelled","hypotheses":[{"id":"d60dbd5d-0965-45de-b8b2-6f73dc72eb5b","type":"theme","themeId":169467281681,"affix":"","isControl":true,"redirectPath":null},{"id":"dd9454ba-4bfe-4591-b5a8-be5961982b5d","type":"theme","themeId":169921380625,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false}],null),await window.shopliftInstance.init())})();async function Gt(a,t,e,i){const s=Mt({log:i});if(e)return i("[SUB-PREVIEW] A side â no overlay applied; widget renders naturally"),s;const r=a.widget.widgetType,n=t?j(t):null;let o=W(t),l=K(a,o),c=l.discountMap,d=l.maxDiscount;function p(){const f=W(t);f!==o&&(o=f,l=K(a,o),c=l.discountMap,d=l.maxDiscount,i(`[SUB-PREVIEW] scope refreshed currentProductId=${o??"n/a"}, maxDiscount=${d}`))}i(`[SUB-PREVIEW] side=B, currentProductId=${o??"n/a"}, maxDiscount=${d}`);function h(f){if(!t||!n)return null;const v=Y(n),g=v?n.get(v):void 0;return g?{formattedVariantPrice:G(g.priceInCents,t),formattedDiscounted:G(g.priceInCents*(1-f/100),t)}:null}function u(f){const v=J(a,f);if(!v)return d;const g=D(a,"subscriptionInput"),I=g.length?g[0].selector:'input[name="rc_plan"]',A=v.querySelector(`${I}:checked`);if(A){const E=c[A.value];if(E!==void 0)return E}return d}function b(f){const v=D(a,"subscriptionDiscount");for(const g of v)if(g.selector.includes("badge")||g.selector.includes("__badge")){const I=f.querySelector(g.selector);I?.textContent&&!I.textContent.includes(`${d}%`)&&$(I,A=>N(A,d))}}function k(f,v){const g=h(v);if(!g)return;const I=D(a,"subscriptionCompareAt");for(const A of I){const E=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);E?.textContent&&!E.textContent.includes(g.formattedVariantPrice)&&$(E,x=>/\d/.test(x)?g.formattedVariantPrice:x)}}function S(f,v){const g=h(v);if(!g)return;const I=D(a,"subscriptionPrice");for(const A of I){const E=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);E?.textContent&&!E.textContent.includes(g.formattedDiscounted)&&$(E,x=>/\d/.test(x)?g.formattedDiscounted:x)}}function P(f){const v=D(a,"subscriptionInput"),g=v.length?v[0].selector:'input[name="rc_plan"]',I=D(a,"subscriptionPlanDiscount"),A=I.length?I[0].selector:".rc-plans-button__discount";for(const E of Array.from(f.querySelectorAll("label"))){const x=E.querySelector(g),R=E.querySelector(A);if(x&&R?.textContent){const V=c[x.value];if(V!==void 0){const O=R.textContent.match(/[\d.]+%/)?.[0];O&&O!==`${V}%`&&$(R,L=>N(L,V))}}}}function _(f){const v=f.querySelector("select");if(v)for(const g of Array.from(v.options)){const I=c[g.value];if(I!==void 0&&g.textContent){const A=g.textContent.match(/[\d.]+%/)?.[0];A&&A!==`${I}%`&&(g.textContent=N(g.textContent,I))}}}function C(f){const v=D(a,"onetimePrice");if(!v.length||!t||!n)return;const g=Y(n),I=g?n.get(g):void 0;if(!I)return;const A=G(I.priceInCents,t),E=D(a,"onetimeContainer"),x=E.length?E[0].selector:'[part~="rc-purchase-option__onetime"]',R=f.querySelector(x);if(R)for(const V of v){const O=R.querySelector(`[part~="${V.selector}"]`);O?.textContent&&!O.textContent.includes(A)&&$(O,L=>/\d/.test(L)?A:L)}}function m(f,v){const I=D(a,"subscriptionDiscount").filter(A=>A.selector.includes("benefit")||A.selector==="rc-benefits");for(const A of I){const E=f.querySelector(A.selector);if(E?.shadowRoot){for(const x of Array.from(E.shadowRoot.querySelectorAll("li")))if(x.textContent?.includes("Save")){const R=x.textContent.match(/[\d.]+%/)?.[0];R&&R!==`${v}%`&&$(x,V=>N(V,v))}}}}let y=!1;function w(){if(!y){y=!0;try{p();const f=B(a);if(!f)return;const v=u(f);b(f),k(f,v),S(f,v),C(f);const g=J(a,f);g&&(r==="buttons"||r==="radio"?P(g):_(g)),m(f,v)}finally{y=!1}}}const T=dt({data:a,runUpdates:w});return function(){T(),s()}}const jt=Object.freeze(Object.defineProperty({__proto__:null,subscriptionPreviewRender:Gt},Symbol.toStringTag,{value:"Module"}))})(); })("/", { suffix: "blogs", type: "page" }, "main", 183449977105, false)</script>
7 8<!-- End of Shoplift scripts --> 9 10 <!-- For iOS26 make Safari navbar not interfere with Shopify CTA buttons --> 11 <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
12<script> 13 window.Shopify = window.Shopify || {theme: {id: 183449977105, role: 'main' } }; 14 window._template = { 15 directory: "", 16 name: "page", 17 suffix: "blogs" 18 } 19 </script>
19 20 21 <meta charset="utf-8"> 22 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 23 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5, viewport-fit=cover"> 24 <meta name="theme-color" content="#14191f"> 25 <link rel="canonical" href="https://paceline.fit/pages/blogs"> 26 <link rel="preconnect" href="https://cdn.shopify.com" crossorigin> 27 <link rel="preload" as="style" href="//paceline.fit/cdn/shop/t/76/assets/app.css?v=177358856208548552351779034828"> 28<link rel="preload" as="style" href="//paceline.fit/cdn/shop/t/76/assets/product-grid.css?v=182556147575089601361779034828"> 29 30 31 32<link rel="preload" as="script" href="//paceline.fit/cdn/shop/t/76/assets/header.js?v=6094887744313169711779034828"> 33<link rel="preload" as="script" href="//paceline.fit/cdn/shop/t/76/assets/vendor.min.js?v=3813312436454354751779034828"> 34<link rel="preload" as="script" href="//paceline.fit/cdn/shop/t/76/assets/app.js?v=91368911961534120321779034828"> 35
36<script> 37window.lazySizesConfig = window.lazySizesConfig || {}; 38window.lazySizesConfig.expand = 250; 39window.lazySizesConfig.loadMode = 1; 40window.lazySizesConfig.loadHidden = false; 41</script>
41 42 43 44 <link rel="icon" type="image/png" href="//paceline.fit/cdn/shop/files/Paceline_Logo_Icon_tiny_ps-bimi.svg?crop=center&height=32&v=1748449553&width=32"> 45 46 <title> 47 Health & Wellness Tips and Advice | Paceline 48 </title> 49 50 51 <meta name="description" content="Explore expert health and wellness tips, trends, and guides to help you live better. Stay informed and discover top brands to shop at Paceline."> 52 53<link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin> 54 55<meta property="og:site_name" content="Paceline"> 56<meta property="og:url" content="https://paceline.fit/pages/blogs"> 57<meta property="og:title" content="Health & Wellness Tips and Advice | Paceline"> 58<meta property="og:type" content="website"> 59<meta property="og:description" content="Explore expert health and wellness tips, trends, and guides to help you live better. Stay informed and discover top brands to shop at Paceline."><meta property="og:image" content="http://paceline.fit/cdn/shop/files/Gemini_Generated_Image_m9tcsum9tcsum9tc_crop.png?v=1775242000"> 60 <meta property="og:image:secure_url" content="https://paceline.fit/cdn/shop/files/Gemini_Generated_Image_m9tcsum9tcsum9tc_crop.png?v=1775242000"> 61 <meta property="og:image:width" content="2048"> 62 <meta property="og:image:height" content="1330"><meta name="twitter:card" content="summary_large_image"> 63<meta name="twitter:title" content="Health & Wellness Tips and Advice | Paceline"> 64<meta name="twitter:description" content="Explore expert health and wellness tips, trends, and guides to help you live better. Stay informed and discover top brands to shop at Paceline."> 65 66 67 <link href="//paceline.fit/cdn/shop/t/76/assets/app.css?v=177358856208548552351779034828" rel="stylesheet" type="text/css" media="all" /> 68 <link href="//paceline.fit/cdn/shop/t/76/assets/product-grid.css?v=182556147575089601361779034828" rel="stylesheet" type="text/css" media="all" /> 69<link href="//paceline.fit/cdn/shop/t/76/assets/product.css?v=152283141068544812601782421677" rel="stylesheet" type="text/css" media="all" /><link href="//paceline.fit/cdn/shop/t/76/assets/custom.css?v=71117223159326658531787689996" rel="stylesheet" type="text/css" media="all" /><style data-shopify> 70 @font-face { 71 font-family: Barlow; 72 font-weight: 500; 73 font-style: normal; 74 font-display: swap; 75 src: url("//paceline.fit/cdn/fonts/barlow/barlow_n5.a193a1990790eba0cc5cca569d23799830e90f07.woff2") format("woff2"), 76 url("//paceline.fit/cdn/fonts/barlow/barlow_n5.ae31c82169b1dc0715609b8cc6a610b917808358.woff") format("woff"); 77} 78 79@font-face { 80 font-family: Barlow; 81 font-weight: 500; 82 font-style: normal; 83 font-display: swap; 84 src: url("//paceline.fit/cdn/fonts/barlow/barlow_n5.a193a1990790eba0cc5cca569d23799830e90f07.woff2") format("woff2"), 85 url("//paceline.fit/cdn/fonts/barlow/barlow_n5.ae31c82169b1dc0715609b8cc6a610b917808358.woff") format("woff"); 86} 87 88@font-face { 89 font-family: Barlow; 90 font-weight: 600; 91 font-style: normal; 92 font-display: swap; 93 src: url("//paceline.fit/cdn/fonts/barlow/barlow_n6.329f582a81f63f125e63c20a5a80ae9477df68e1.woff2") format("woff2"), 94 url("//paceline.fit/cdn/fonts/barlow/barlow_n6.0163402e36247bcb8b02716880d0b39568412e9e.woff") format("woff"); 95} 96 97@font-face { 98 font-family: Barlow; 99 font-weight: 500; 100 font-style: italic; 101 font-display: swap; 102 src: url("//paceline.fit/cdn/fonts/barlow/barlow_i5.714d58286997b65cd479af615cfa9bb0a117a573.woff2") format("woff2"), 103 url("//paceline.fit/cdn/fonts/barlow/barlow_i5.0120f77e6447d3b5df4bbec8ad8c2d029d87fb21.woff") format("woff"); 104} 105 106@font-face { 107 font-family: Barlow; 108 font-weight: 600; 109 font-style: italic; 110 font-display: swap; 111 src: url("//paceline.fit/cdn/fonts/barlow/barlow_i6.5a22bd20fb27bad4d7674cc6e666fb9c77d813bb.woff2") format("woff2"), 112 url("//paceline.fit/cdn/fonts/barlow/barlow_i6.1c8787fcb59f3add01a87f21b38c7ef797e3b3a1.woff") format("woff"); 113} 114 115 116 @font-face { 117 font-family: Barlow; 118 font-weight: 700; 119 font-style: normal; 120 font-display: swap; 121 src: url("//paceline.fit/cdn/fonts/barlow/barlow_n7.691d1d11f150e857dcbc1c10ef03d825bc378d81.woff2") format("woff2"), 122 url("//paceline.fit/cdn/fonts/barlow/barlow_n7.4fdbb1cb7da0e2c2f88492243ffa2b4f91924840.woff") format("woff"); 123} 124 125@font-face { 126 font-family: Barlow; 127 font-weight: 400; 128 font-style: normal; 129 font-display: swap; 130 src: url("//paceline.fit/cdn/fonts/barlow/barlow_n4.038c60d7ea9ddb238b2f64ba6f463ba6c0b5e5ad.woff2") format("woff2"), 131 url("//paceline.fit/cdn/fonts/barlow/barlow_n4.074a9f2b990b38aec7d56c68211821e455b6d075.woff") format("woff"); 132} 133 134h1,h2,h3,h4,h5,h6, 135 .h1,.h2,.h3,.h4,.h5,.h6, 136 .logolink.text-logo, 137 .heading-font, 138 .h1-xlarge, 139 .h1-large, 140 blockquote p, 141 blockquote span, 142 .customer-addresses .my-address .address-index { 143 font-style: normal; 144 font-weight: 700; 145 font-family: Barlow, sans-serif; 146 } 147 body, 148 .body-font, 149 .thb-product-detail .product-title { 150 font-style: normal; 151 font-weight: 500; 152 font-family: Barlow, sans-serif; 153 } 154 :root { 155 --mobile-swipe-width: calc(90vw - 15px); 156 --grid-width: 1440px; 157 --grid-width-row: 1540px; 158 --font-body-scale: 1.5; 159 --font-body-line-height-scale: 1.0; 160 --font-body-letter-spacing: 0.0em; 161 --font-announcement-scale: 1.0; 162 --font-body-medium-weight: 500; 163 --font-body-bold-weight: 600; 164 --font-heading-scale: 1.5; 165 --font-heading-line-height-scale: 1.0; 166 --font-heading-letter-spacing: 0.0em; 167 --font-navigation-scale: 1.25; 168 --font-product-price-scale: 1.0; 169 --font-product-title-scale: 1.0; 170 --font-product-title-line-height-scale: 1.0; 171 --button-letter-spacing: 0.0em; 172 173 --block-border-radius: 24px; 174 --button-border-radius: 40px; 175 --input-border-radius: 8px; 176 177 --bg-body: #14191f; 178 --bg-body-rgb: 20,25,31; 179 --bg-body-darken: #0e1116; 180 --payment-terms-background-color: #14191f; 181 182 --color-body: #ace3f6; 183 --color-body-rgb: 172,227,246; 184 --color-heading: #ffffff; 185 --color-heading-rgb: 255,255,255; 186 187 --color-accent: #47c2eb; 188 --color-accent-hover: #27b7e7; 189 --color-accent-rgb: 71,194,235; 190 --color-border: #374353; 191 --color-form-border: #374353; 192 --color-overlay-rgb: 159,163,167; 193 194 --shopify-accelerated-checkout-button-block-size: 50px; 195 --shopify-accelerated-checkout-inline-alignment: center; 196 --shopify-accelerated-checkout-skeleton-animation-duration: 0.25s; 197 --shopify-accelerated-checkout-button-border-radius: 40px; 198 199 --color-drawer-bg: #1f252e; 200 --color-drawer-bg-rgb: 31,37,46; 201 202 --color-announcement-bar-text: #ffffff; 203 --color-announcement-bar-bg: #083645; 204 205 --color-secondary-menu-text: #ffffff; 206 --color-secondary-menu-bg: #14191f; 207 208 --color-header-bg: #000000; 209 --color-header-bg-rgb: 0,0,0; 210 --color-header-text: #ffffff; 211 --color-header-text-rgb: 255,255,255; 212 --color-header-links: #47c2eb; 213 --color-header-links-rgb: 71,194,235; 214 --color-header-links-hover: #ffffff; 215 --color-header-links-hover-rgb: 255,255,255; 216 --color-header-icons: #47c2eb; 217 --color-header-border: #374353; 218 219 --solid-button-background: #47c2eb; 220 --solid-button-background-hover: #27b7e7; 221 --solid-button-label: #000000; 222 --white-button-label: #000000; 223 224 --color-price: #ffffff; 225 --color-price-rgb: 255,255,255; 226 --color-price-discounted: #47eb99; 227 228 --color-star: #47c2eb; 229 230 --color-inventory-instock: #47eb99; 231 --color-inventory-lowstock: #ebeb47;--section-spacing-mobile: 40px; 232 --section-spacing-desktop: 80px;--color-product-card-bg: #083645;--color-article-card-bg: #14191f;--color-badge-text: #000000; 233 --color-badge-sold-out: #ff1a66; 234 --color-badge-sale: #47eb99; 235 --color-badge-preorder: #666666; 236 --badge-corner-radius: 14px; 237 238 239 --color-footer-heading: #FFFFFF; 240 --color-footer-heading-rgb: 255,255,255; 241 --color-footer-text: #ffffff; 242 --color-footer-text-rgb: 255,255,255; 243 --color-footer-link: #47c2eb; 244 --color-footer-link-hover: #47c2eb; 245 --color-footer-border: #374353; 246 --color-footer-border-rgb: 55,67,83; 247 --color-footer-bg: #14191f; 248 }.badge[data-badge="complimentary"]{ 249 background: #47eb99; 250 } 251 252 253 254 255</style> 256 257 <link href="//paceline.fit/cdn/shop/t/76/assets/eyw-cta.css?v=85536993686553618661779034828" rel="stylesheet" type="text/css" media="all" /> 258
258<script src="//paceline.fit/cdn/shop/t/76/assets/eyw-cta.js?v=178159439790297051031779034828" defer></script>
258 259 260
260<script> 261 window.theme = window.theme || {}; 262 theme = { 263 settings: { 264 money_with_currency_format:"${{amount}}", 265 cart_drawer:true}, 266 routes: { 267 root_url: '/', 268 cart_url: '/cart', 269 cart_add_url: '/cart/add', 270 search_url: '/search', 271 cart_change_url: '/cart/change', 272 cart_update_url: '/cart/update', 273 predictive_search_url: '/search/suggest', 274 }, 275 variantStrings: { 276 addToCart: `Add to cart`, 277 soldOut: `Sold out`, 278 unavailable: `Unavailable`, 279 preOrder: `Pre-order`, 280 }, 281 strings: { 282 requiresTerms: `You must agree with the terms and conditions of sales to check out`, 283 shippingEstimatorNoResults: `Sorry, we do not ship to your address.`, 284 shippingEstimatorOneResult: `There is one shipping rate for your address:`, 285 shippingEstimatorMultipleResults: `There are several shipping rates for your address:`, 286 shippingEstimatorError: `One or more error occurred while retrieving shipping rates:` 287 } 288 }; 289 </script>
289 290
290<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
290<meta name="facebook-domain-verification" content="412e7go3qw6pntdm99z9qop0r3b0sr"> 291<meta name="google-site-verification" content="tt4KO02bYSKHNqgbrlkLmfKU-vx9AkIFnp2MUUYcl5A"> 292<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/71067468049/digital_wallets/dialog"> 293<meta id="in-context-paypal-metadata" data-shop-id="71067468049" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 294<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
294<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=36962577"></script>
294 295<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
296<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=36962577&shop_id=71067468049" crossorigin="anonymous"></script>
vendor: 1 bytes, line 296
296
297<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":71067468049,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/71067468049","merchantName":"Paceline","requiredBillingContactFields":["postalAddress","email"],"requiredShippingContactFields":["postalAddress","email"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Paceline","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 297
297
298<script id="shopify-features" type="application/json">{"accessToken":"ecc92a040bea518a6877a91757718d0e","betas":["rich-media-storefront-analytics"],"domain":"paceline.fit","predictiveSearch":true,"shopId":71067468049,"locale":"en"}</script>
vendor: 1 bytes, line 298
298
299<script>var Shopify = Shopify || {}; 300Shopify.shop = "paceline-2350.myshopify.com"; 301Shopify.locale = "en"; 302Shopify.currency = {"active":"USD","rate":"1.0"}; 303Shopify.country = "US"; 304Shopify.theme = {"name":"Vision 5\/17\/26 (New Brand)","id":183449977105,"schema_name":"Vision","schema_version":"8.1.0","theme_store_id":2053,"role":"main"}; 305Shopify.theme.handle = "null"; 306Shopify.theme.style = {"id":null,"handle":null}; 307Shopify.cdnHost = "paceline.fit/cdn"; 308Shopify.routes = Shopify.routes || {}; 309Shopify.routes.root = "/"; 310Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 311Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 312Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 313Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 313
313
314<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 314
314
315<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 315
315
316<script> 317 window.ShopifyPay = window.ShopifyPay || {}; 318 window.ShopifyPay.apiHost = "shop.app\/pay"; 319 window.ShopifyPay.redirectState = null; 320</script>
vendor: 1 bytes, line 320
320
321<script> 322 window.Shopify = window.Shopify || {}; 323 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 324 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 325 window.Shopify.SignInWithShop.eligible = true; 326</script>
vendor: 1 bytes, line 326
326
327<script id="shop-js-analytics" type="application/json">{"pageType":"page"}</script>
vendor: 1 bytes, line 327
327
328<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 328
328
329<script type="module"> 330 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 331 332 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 333 334</script>
vendor: 1 bytes, line 334
334
335<script> 336 window.Shopify = window.Shopify || {}; 337 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 338 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"]}; 339</script>
vendor: 1 bytes, line 339
339
340<script id="__st">var __st={"a":71067468049,"offset":-25200,"reqid":"363f47be-fc5a-47ce-92e0-5a3762458893-1790916010","pageurl":"paceline.fit\/pages\/blogs","s":"pages-133785288977","u":"c687cb51619b","p":"page","rtyp":"page","rid":133785288977};</script>
vendor: 1 bytes, line 340
340
341<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 341
341
342<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 342
342
343<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//paceline.fit/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 343
343
344<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 = "//paceline.fit/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>
344<script crossorigin="anonymous" defer="defer" src="//paceline.fit/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 344
344
345<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 345
345
346<script> 347 window.Shopify = window.Shopify || {}; 348 window.Shopify.MCP = window.Shopify.MCP || {}; 349 window.Shopify.MCP.enabled = true; 350 window.Shopify.MCP.shop = "paceline-2350.myshopify.com"; 351 window.Shopify.MCP.mcpEndpoint = "https:\/\/paceline.fit\/api\/mcp"; 352 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 353</script>
vendor: 1 bytes, line 353
353
354<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("\/\/paceline.fit\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 355</script>
vendor: 1 bytes, line 355
355
356<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://paceline.fit/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 357</script>
vendor: 1 bytes, line 357
357
358<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 359 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); 360</script>
vendor: 1 bytes, line 360
360
361<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})}})); 362</script>
vendor: 1 bytes, line 362
362
363<script id='scb4127' type='text/javascript' async='' src='https://paceline.fit/cdn/shopifycloud/privacy-banner/storefront-banner.js'></script>
363<script integrity="sha256-/LA1C2Bx6899fYCos0FS9qLj2opaGFm7AXrTUvBEb4s=" data-source-attribution="shopify.remote_product_tracking" data-shopify-remote-tracking="{"session_id":"01M3XEK8HQMXX4AJXAR51DC5VY","publisher_shop_id":71067468049,"theme_id":183449977105,"theme_published":true,"theme_store_id":2053,"placement":"collection","event_data":{"handle":"blogs","page_type":"page"},"recommendations_tracking_enabled":true}" defer="defer" src="//paceline.fit/cdn/shopifycloud/storefront/assets/storefront/remote_product_tracking-91d95044.js" crossorigin="anonymous"></script>
363 364<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://paceline.fit/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 365<style id="shopify-accelerated-checkout-cart"> 366 #shopify-buyer-consent { 367 margin-top: 1em; 368 display: inline-block; 369 width: 100%; 370} 371 372#shopify-buyer-consent.hidden { 373 display: none; 374} 375 376#shopify-subscription-policy-button { 377 background: none; 378 border: none; 379 padding: 0; 380 text-decoration: underline; 381 font-size: inherit; 382 cursor: pointer; 383} 384 385#shopify-subscription-policy-button::before { 386 box-shadow: none; 387} 388 389 </style> 390
391<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
391 <!-- Header hook for plugins --> 392 393
394<script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
394 395 396 397<meta name="msvalidate.01" content="FD2B941C8831954C41B2CA87DAF6ABAC" /><!-- paceline-responsive-fonts-v1 --> 398<style> 399 :root { 400 --font-body-scale: 0.9375 !important; 401 --font-heading-scale: 0.875 !important; 402 --font-navigation-scale: 1.0 !important; 403 --font-body-line-height-scale: 1.0 !important; 404 --font-heading-line-height-scale: 1.0 !important; 405 } 406 @media (min-width: 768px) { 407 :root { 408 --font-body-scale: 0.96875 !important; 409 --font-heading-scale: 0.9375 !important; 410 } 411 } 412 @media (min-width: 1068px) { 413 :root { 414 --font-body-scale: 1.0 !important; 415 --font-heading-scale: 1.0 !important; 416 } 417 } 418 .breadcrumb, [class*="breadcrumb"], nav[aria-label*="Breadcrumb"] { 419 font-size: 0.8125rem !important; 420 white-space: nowrap; 421 overflow: hidden; 422 text-overflow: ellipsis; 423 } 424 @media (max-width: 767px) { 425 .product-title, .product__title, 426 main[data-template="product"] h1 { 427 font-size: 1.5rem !important; 428 line-height: 1.2 !important; 429 } 430 } 431 .product-description, .product__description, 432 .product-single__description { 433 font-size: 0.9375rem !important; 434 line-height: 1.6 !important; 435 } 436 cart-drawer, .cart-drawer, [class*="cart-drawer"], 437 .side-panel, [class*="side-panel"] { 438 font-size: 0.9375rem; 439 } 440 cart-drawer .cart-item__name, 441 .cart-drawer .cart-item__name, 442 [class*="cart-drawer"] [class*="item"] a { 443 font-size: 0.875rem !important; 444 line-height: 1.3 !important; 445 } 446 cart-drawer [class*="price"], 447 .cart-drawer [class*="price"] { 448 font-size: 0.9375rem !important; 449 } 450 @media (max-width: 767px) { 451 .collection-title, .collection__title, 452 main[data-template="collection"] h1 { 453 font-size: 1.75rem !important; 454 line-height: 1.2 !important; 455 } 456 } 457 .product__policies, [class*="policies"], 458 shopify-payment-terms { 459 font-size: 0.8125rem !important; 460 } 461 @media (max-width: 767px) { 462 .button, button[name="add"], 463 .single-add-to-cart-button, 464 .add-to-cart-button { 465 font-size: 1rem !important; 466 } 467 } 468 469 /* ââ Footer (footer-second): keep 2-column layout ââ */ 470 .footer-links-wrapper { 471 display: flex !important; 472 flex-direction: row !important; 473 justify-content: space-between !important; 474 flex-wrap: nowrap !important; 475 gap: 30px !important; 476 } 477 .footer-text { 478 flex: 0 1 auto !important; 479 min-width: 0 !important; 480 } 481 .footer-links { 482 display: flex !important; 483 flex-direction: row !important; 484 gap: 40px !important; 485 flex: 1 1 auto !important; 486 justify-content: flex-end !important; 487 flex-wrap: nowrap !important; 488 } 489 .footer-column { 490 min-width: 0 !important; 491 flex-shrink: 0 !important; 492 } 493 @media (max-width: 540px) { 494 .footer-links-wrapper { 495 flex-wrap: wrap !important; 496 flex-direction: column-reverse !important; 497 } 498 .footer-links { 499 flex-wrap: wrap !important; 500 justify-content: space-between !important; 501 gap: 20px !important; 502 width: 100% !important; 503 } 504 .footer-column { 505 flex: 1 1 40% !important; 506 } 507 } 508 509 /* ââ Search drawer: fix oversized product card grid ââ */ 510 .search-drawer .thb-predictive-search--promotion-products .products { 511 display: flex !important; 512 flex-wrap: wrap !important; 513 gap: 12px !important; 514 grid-template-columns: none !important; 515 } 516 .search-drawer .thb-predictive-search--promotion-products .products > .columns { 517 flex: 0 0 calc(50% - 6px) !important; 518 max-width: calc(50% - 6px) !important; 519 width: calc(50% - 6px) !important; 520 } 521 .search-drawer product-card { 522 display: flex !important; 523 flex-direction: column !important; 524 } 525 .search-drawer .product-featured-image { 526 aspect-ratio: 1 !important; 527 overflow: hidden !important; 528 flex-shrink: 0 !important; 529 } 530 .search-drawer .product-featured-image-link { 531 height: 0 !important; 532 padding-bottom: 100% !important; 533 } 534 .search-drawer .product-featured-image img { 535 width: 100% !important; 536 height: 100% !important; 537 object-fit: cover !important; 538 } 539 .search-drawer .product-card-info { 540 display: block !important; 541 padding: 8px 4px !important; 542 } 543 .search-drawer .product-card-title { 544 font-size: 0.8125rem !important; 545 line-height: 1.3 !important; 546 display: block !important; 547 } 548 .search-drawer .product-card-vendor { 549 font-size: 0.6875rem !important; 550 display: block !important; 551 } 552 .search-drawer .product-card--add-to-cart-button-wrapper { 553 display: block !important; 554 } 555</style> 556<!-- /paceline-responsive-fonts-v1 --> 557 <!-- pcl-analytics --> 558
558<script>window.__PCL_USER__={email:null,id:null};</script>
558 559
559<script src="//paceline.fit/cdn/shop/t/76/assets/pcl-analytics.js?v=117044519712212592641790202952" type="text/javascript"></script>
559 560 <!-- BEGIN app block: shopify://apps/judge-me-reviews/blocks/judgeme_core/61ccd3b1-a9f2-4160-9fe9-4fec8413e5d8 --><!-- Start of Judge.me Core --> 561 562 563 564 565 566 567 568<link rel="dns-prefetch" href="https://cdn.judge.me"> 569<link rel="dns-prefetch" href="https://cdn1.judge.me"> 570<link rel="dns-prefetch" href="https://api.judge.me"> 571
572<script data-cfasync='false' class='jdgm-settings-script'>window.jdgmSettings={"pagination":5,"disable_web_reviews":false,"coupon_receiving_condition":"with_picture","coupon_value_type":"fixed_amount","coupon_value_percentage":10,"coupon_value_fixed_amount":1.0,"coupon_discount_type":"single","coupon_tier_text_enabled":false,"coupon_tier_text_percentage":10,"coupon_tier_text_fixed_amount":0,"coupon_tier_photo_enabled":false,"coupon_tier_photo_percentage":10,"coupon_tier_photo_fixed_amount":0,"coupon_tier_video_enabled":false,"coupon_tier_video_percentage":10,"coupon_tier_video_fixed_amount":0,"enable_coupons":true,"badge_no_review_text":"No reviews","badge_n_reviews_text":"{{ n }}","badge_star_color":"#47C2EB","hide_badge_preview_if_no_reviews":true,"badge_hide_text":false,"enforce_center_preview_badge":false,"widget_title":"Customer Reviews","widget_open_form_text":"Write a review","widget_close_form_text":"Cancel Review","widget_refresh_page_text":"Refresh page","widget_summary_text":"Based on {{ number_of_reviews }} review/reviews","widget_no_review_text":"Be the first to write a review","widget_name_field_text":"Display name","widget_verified_name_field_text":"Verified Name (public)","widget_name_placeholder_text":"Display name","widget_required_field_error_text":"This field is required.","widget_email_field_text":"Email (kept private, only used to contact you if needed)","widget_verified_email_field_text":"Verified Email (private, can not be edited)","widget_email_placeholder_text":"Your email address","widget_email_field_error_text":"Please enter a valid email address.","widget_rating_field_text":"Rating","widget_review_title_field_text":"Review Title","widget_review_title_placeholder_text":"Give your review a title","widget_review_body_field_text":"Review content","widget_review_body_placeholder_text":"Start writing here...","widget_pictures_field_text":"Picture/Video (optional)","widget_submit_review_text":"Submit Review","widget_submit_verified_review_text":"Submit Verified Review","widget_submit_success_msg_with_auto_publish":"Thank y
572ou! Please refresh the page in a few moments to see your review. You can remove or edit your review by logging into \u003ca href='https://judge.me/login' target='_blank' rel='nofollow noopener'\u003eJudge.me\u003c/a\u003e","widget_submit_success_msg_no_auto_publish":"Thank you! Your review will be published as soon as it is approved by the shop admin. You can remove or edit your review by logging into \u003ca href='https://judge.me/login' target='_blank' rel='nofollow noopener'\u003eJudge.me\u003c/a\u003e","widget_show_default_reviews_out_of_total_text":"Showing {{ n_reviews_shown }} out of {{ n_reviews }} reviews.","widget_show_all_link_text":"Show all","widget_show_less_link_text":"Show less","widget_author_said_text":"{{ reviewer_name }} said:","widget_days_text":"{{ n }} days ago","widget_weeks_text":"{{ n }} week/weeks ago","widget_months_text":"{{ n }} month/months ago","widget_years_text":"{{ n }} year/years ago","widget_yesterday_text":"Yesterday","widget_today_text":"Today","widget_replied_text":"\u003e\u003e {{ shop_name }} replied:","widget_read_more_text":"Read more","widget_reviewer_name_as_initial":"last_initial","widget_rating_filter_color":"#47C2EB","widget_rating_filter_see_all_text":"See all reviews","widget_sorting_most_recent_text":"Most Recent","widget_sorting_highest_rating_text":"Highest Rating","widget_sorting_lowest_rating_text":"Lowest Rating","widget_sorting_with_pictures_text":"Only Pictures","widget_sorting_most_helpful_text":"Most Helpful","widget_open_question_form_text":"Ask a question","widget_reviews_subtab_text":"Reviews","widget_questions_subtab_text":"Questions","widget_question_label_text":"Question","widget_answer_label_text":"Answer","widget_question_placeholder_text":"Write your question here","widget_submit_question_text":"Submit Question","widget_question_submit_success_text":"Thank you for your question! We will notify you once it gets answered.","widget_star_color":"#47C2EB","verified_badge_text":"Verified","verified_badge_bg_color":"","verified_badge_text_color":"#000000","verified_badge_placement":"left-of-reviewer-name","widget_review_max_height":8,"widget_hide_border":false,"widget_social_share":true,"widget_thumb":true,"widget_review_location_show":true,"widget_location_format":"city_state_code_only","all_reviews_include_out_of_store_products":true,"all_reviews_out_of_store_text":"(out of store)","all_reviews_pagination":100,"all_reviews_product_name_prefix_text":"about","enable_review_pictures":true,"enable_question_anwser":true,"widget_theme":"align","review_date_format":"mm/dd/yyyy","default_sort_method":"most-recent","enable_ai_review_visibility":true,"widget_product_reviews_subtab_text":"Product Reviews","widget_shop_reviews_subtab_text":"Shop Reviews","widget_other_products_reviews_text":"Reviews for other products","widget_store_reviews_subtab_text":"Store reviews","widget_product_variant_reference_text":"Review for","widget_no_store_reviews_text":"This store hasn't received any reviews yet","widget_web_restriction_product_reviews_text":"This product hasn't received any reviews yet","widget_no_items_text":"No items found","widget_show_more_text":"Show more","widget_write_a_store_review_text":"Write a Store Review","widget_product_and_store_reviews_text":"Product and store reviews","widget_reviews_in_collection_text":"Reviews in this collection","widget_other_languages_heading":"Reviews in Other Languages","widget_translate_review_text":"Translate review to {{ language }}","widget_translating_review_text":"Translating...","widget_show_original_translation_text":"Show original ({{ language }})","widget_translate_review_failed_text":"Review couldn't be translated.","widget_translate_review_retry_text":"Retry","widget_translate_review_try_again_later_text":"Try again later","show_product_url_for_grouped_product":false,"widget_sorting_pictures_first_text":"Pictures First","show_pictures_on_all_rev_page_mobile":false,"show_pictures_on_all_rev_page_desktop":false,"floating_tab_hide_mobile_install_preference":false,"floating_tab_button_name":"â
Reviews","floating_tab_title":"Let customers speak for us","floating_tab_button_color":"","floating_tab_button_background_color":"","floating_tab_url":"","floating_tab_url_enabled":false,"floating_tab_tab_style":"text","all_reviews_text_badge_text":"Customers rate us {{ shop.metafields.judgeme.all_reviews_rating | round: 1 }}/5 based on {{ shop.metafields.judgeme.all_reviews_count }} reviews.","all_reviews_text_badge_text_branded_style":"{{ shop.metafields.judgeme.all_reviews_rating | round: 1 }} out of 5 stars based on {{ shop.metafields.judgeme.all_reviews_count }} reviews","is_all_reviews_text_badge_a_link":false,"show_stars_for_all_reviews_text_badge":false,"all_reviews_text_badge_url":"","all_reviews_text_style":"text","all_reviews_text_color_style":"judgeme_brand_color","all_reviews_text_color":"#108474","all_reviews_text_show_jm_brand":true,"featured_carousel_show_header":true,"featured_carousel_title":"Real, unedited feedback","testimonials_carousel_title":"Customers are saying","videos_carousel_title":"Real customer stories","cards_carousel_title":"Customers are saying","featured_carousel_count_text":"from 10k+ orders","featured_carousel_add_link_to_all_reviews_page":false,"featured_carousel_url":"","featured_carousel_show_images":true,"featured_carousel_autoslide_interval":5,"featured_carousel_arrows_on_the_sides":false,"featured_carousel_height":250,"featured_carousel_width":80,"featured_carousel_image_size":0,"featured_carousel_image_height":250,"featured_carousel_arrow_color":"#eeeeee","verified_count_badge_style":"branded","verified_count_badge_orientation":"horizontal","verified_count_badge_color_style":"judgeme_brand_color","verified_count_badge_color":"#108474","is_verified_count_badge_a_link":false,"verified_count_badge_url":"","verified_count_badge_show_jm_brand":true,"widget_rating_preset_default":5,"widget_first_sub_tab":"product-reviews","widget_show_histogram":true,"widget_histogram_use_custom_color":true,"widget_pagination_use_custom_color":true,"widget_star_use_custom_color":true,"widget_verified_badge_use_custom_color":true,"widget_write_review_use_custom_color":false,"picture_reminder_submit_button":"Upload Pictures","enable_review_videos":true,"mute_video_by_default":true,"widget_sorting_videos_first_text":"Videos First","widget_review_pending_text":"Pending","featured_carousel_items_for_large_screen":3,"social_share_options_order":"Facebook,Twitter","remove_microdata_snippet":false,"disable_json_ld":false,"enable_json_ld_products":false,"preview_badge_show_question_text":true,"preview_badge_no_question_text":"No questions (yet)","preview_badge_n_question_text":"{{ number_of_questions }} question/questions","qa_badge_show_icon":false,"qa_badge_position":"same-row","remove_judgeme_branding":true,"widget_add_search_bar":true,"widget_search_bar_placeholder":"Search","widget_sorting_verified_only_text":"Verified only","widget_sorting_most_relevant_text":"Most Relevant","featured_carousel_theme":"compact","featured_carousel_show_rating":true,"featured_carousel_show_title":true,"featured_carousel_show_body":true,"featured_carousel_show_date":true,"featured_carousel_show_reviewer":true,"featured_carousel_show_product":true,"featured_carousel_header_background_color":"#108474","featured_carousel_header_text_color":"#ffffff","featured_carousel_name_product_separator":"reviewed","featured_carousel_full_star_background":"#108474","featured_carousel_empty_star_background":"#dadada","featured_carousel_vertical_theme_background":"#f9fafb","featured_carousel_verified_badge_enable":true,"featured_carousel_verified_badge_color":"#108474","featured_carousel_border_style":"round","featured_carousel_review_line_length_limit":3,"featured_carousel_more_reviews_button_text":"Read more reviews","featured_carousel_view_product_button_text":"View product","all_reviews_page_load_reviews_on":"scroll","all_reviews_page_load_more_text":"Load More Reviews","disable_fb_tab_reviews":false,"enable_ajax_cdn_cache":false,"widget_advanced_speed_features":5,"widget_public_name_text":"displayed publicly like","default_reviewer_name":"John Smith","default_reviewer_name_has_non_latin":true,"widget_reviewer_anonymous":"Anonymous","medals_widget_title":"Judge.me Review Medals","medals_widget_background_color":"#f9fafb","medals_widget_position":"footer_all_pages","medals_widget_border_color":"#f9fafb","medals_widget_verified_text_position":"left","medals_widget_use_monochromatic_version":false,"medals_widget_elements_color":"#108474","show_reviewer_avatar":true,"widget_invalid_yt_video_url_error_text":"Not a YouTube video URL","widget_max_length_field_error_text":"Please enter no more than {0} characters.","widget_show_country_flag":false,"widget_show_collected_via_shop_app":true,"widget_verified_by_shop_badge_style":"dark","widget_verified_by_shop_text":"Verified by Shop","widget_show_photo_gallery":true,"widget_load_with_code_splitting":true,"widget_ugc_install_preference":false,"widget_ugc_title":"Made by us, Shared by you","widget_ugc_subt
572itle":"Tag us to see your picture featured in our page","widget_ugc_arrows_color":"#ffffff","widget_ugc_primary_button_text":"Buy Now","widget_ugc_primary_button_background_color":"#108474","widget_ugc_primary_button_text_color":"#ffffff","widget_ugc_primary_button_border_width":"0","widget_ugc_primary_button_border_style":"none","widget_ugc_primary_button_border_color":"#108474","widget_ugc_primary_button_border_radius":"25","widget_ugc_secondary_button_text":"Load More","widget_ugc_secondary_button_background_color":"#ffffff","widget_ugc_secondary_button_text_color":"#108474","widget_ugc_secondary_button_border_width":"2","widget_ugc_secondary_button_border_style":"solid","widget_ugc_secondary_button_border_color":"#108474","widget_ugc_secondary_button_border_radius":"25","widget_ugc_reviews_button_text":"View Reviews","widget_ugc_reviews_button_background_color":"#ffffff","widget_ugc_reviews_button_text_color":"#108474","widget_ugc_reviews_button_border_width":"2","widget_ugc_reviews_button_border_style":"solid","widget_ugc_reviews_button_border_color":"#108474","widget_ugc_reviews_button_border_radius":"25","widget_ugc_reviews_button_link_to":"judgeme-reviews-page","widget_ugc_show_post_date":true,"widget_ugc_max_width":"800","widget_rating_metafield_value_type":true,"widget_primary_color":"#47C2EB","widget_enable_secondary_color":false,"widget_secondary_color":"#000000","widget_summary_average_rating_text":"{{ average_rating }} out of 5","widget_media_grid_title":"Customer photos \u0026 videos","widget_media_grid_see_more_text":"See more","widget_round_style":true,"widget_show_product_medals":false,"widget_verified_by_judgeme_text":"Verified by Judge.me","widget_show_store_medals":true,"widget_verified_by_judgeme_text_in_store_medals":"Verified by Judge.me","widget_media_field_exceed_quantity_message":"Sorry, we can only accept {{ max_media }} for one review.","widget_media_field_exceed_limit_message":"{{ file_name }} is too large, please select a {{ media_type }} less than {{ size_limit }}MB.","widget_review_submitted_text":"Review Submitted!","widget_question_submitted_text":"Question Submitted!","widget_close_form_text_question":"Cancel","widget_write_your_answer_here_text":"Write your answer here","widget_enabled_branded_link":true,"widget_show_collected_by_judgeme":false,"widget_reviewer_name_color":"","widget_write_review_text_color":"","widget_write_review_bg_color":"","widget_collected_by_judgeme_text":"collected by Judge.me","widget_pagination_type":"load_more","widget_load_more_text":"Load More","widget_load_more_color":"#47C2EB","widget_full_review_text":"Full Review","widget_read_more_reviews_text":"Read More Reviews","widget_read_questions_text":"Read Questions","widget_questions_and_answers_text":"Questions \u0026 Answers","widget_verified_by_text":"Verified by","widget_verified_text":"Verified","widget_number_of_reviews_text":"{{ number_of_reviews }} reviews","widget_back_button_text":"Back","widget_next_button_text":"Next","widget_custom_forms_filter_button":"Filters","custom_forms_style":"horizontal","widget_show_review_information":false,"how_reviews_are_collected":"How reviews are collected?","widget_show_review_keywords":true,"widget_gdpr_statement":"How we use your data: We'll only contact you about the review you left, and only if necessary. By submitting your review, you agree to Judge.me's \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms\u003c/a\u003e, \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy\u003c/a\u003e and \u003ca href='https://judge.me/content-policy' target='_blank' rel='nofollow noopener'\u003econtent\u003c/a\u003e policies.","widget_multilingual_sorting_enabled":false,"widget_translate_review_content_enabled":false,"widget_translate_review_content_method":"manual","popup_widget_review_selection":"automatically_with_pictures","popup_widget_round_border_style":true,"popup_widget_show_title":true,"popup_widget_show_body":true,"popup_widget_show_reviewer":false,"popup_widget_show_product":true,"popup_widget_show_pictures":true,"popup_widget_use_review_picture":true,"popup_widget_show_on_home_page":true,"popup_widget_show_on_product_page":true,"popup_widget_show_on_collection_page":true,"popup_widget_show_on_cart_page":true,"popup_widget_position":"bottom_left","popup_widget_first_review_delay":5,"popup_widget_duration":5,"popup_widget_interval":5,"popup_widget_review_count":5,"popup_widget_hide_on_mobile":true,"review_snippet_widget_round_border_style":true,"review_snippet_widget_card_color":"#FFFFFF","review_snippet_widget_text_color":"#000000","review_snippet_widget_lighter_text_color":"#7B7B7B","review_snippet_widget_slider_arrows_background_color":"#FFFFFF","review_snippet_widget_slider_arrows_color":"#000000","review_snippet_widget_star_color":"#47C2EB","show_product_variant":false,"all_reviews_product_variant_label_text":"Variant: ","widget_show_verified_branding":false,"widget_ai_summary_title":"Customers say","widget_ai_summary_disclaimer":"AI-powered review summary based on recent customer reviews","widget_show_ai_summary":false,"widget_show_ai_summary_bg":false,"write_review_button_visibility":"everyone","store_summary_widget_heading":"Customers rate this store","store_summary_widget_button_text":"View customer reviews","store_summary_widget_button_theme_text":"See AI reviews summary","widget_show_review_title_input":true,"widget_autofill_review_title":true,"redirect_reviewers_invited_via_email":"external_form","request_store_review_after_product_review":true,"request_review_other_products_in_order":true,"review_form_color_scheme":"default","review_form_corner_style":"square","review_form_star_color":"#47C2EB","review_form_text_color":"#333333","review_form_background_color":"#ffffff","review_form_field_background_color":"#fafafa","review_form_button_color":"#47C2EB","review_form_button_text_color":"#ffffff","review_form_modal_overlay_color":"#000000","review_form_theme":"multi_step","review_form_location":"in_store_popup","review_form_external_page_background_color":"#C5F7F0","review_content_screen_title_text":"How would you rate this product?","review_content_introduction_text":"We would love it if you would share a bit about your experience.","store_review_form_title_text":"How would you rate this store?","store_review_form_introduction_text":"We would love it if you would share a bit about your experience.","show_review_guidance_text":true,"one_star_review_guidance_text":"Poor","five_star_review_guidance_text":"Great","customer_information_screen_title_text":"About you","customer_information_introduction_text":"Please tell us more about you.","custom_questions_screen_title_text":"Your experience in more detail","custom_questions_introduction_text":"Here are a few questions to help us understand more about your experience.","review_submitted_screen_title_text":"Thanks for your review!","review_submitted_screen_thank_you_text":"We are processing it and it will appear on the store soon.","review_submitted_screen_email_verification_text":"Please confirm your email by clicking the link we just sent you. This helps us keep reviews authentic.","confirm_email_screen_title_text":"Confirm your email","confirm_email_screen_message_text":"To help keep reviews authentic, we'll send you a secure link to continue writing your review. It only takes a moment.","check_email_screen_title_text":"Check your email","check_email_screen_message_text":"We sent you an email to {{ email }}. Click the button on the email to continue.","check_email_screen_resend_message_text":"Email resent!","check_email_resend_hint_text":"Didn't get the email? Check your spam folder or [resend the email].","verification_email_rate_limit_error_text":"You've reached the limit for review attempts on this product. Please check your inbox or try again later.","review_submitted_request_store_review_text":"Would you like to share your experience of shopping with us?","review_submitted_review_other_products_text":"Would you like to review these products?","store_review_screen_title_text":"Would you like to share your experience of shopping with us?","store_review_introduction_text":"We value your feedback and use it to improve. Please share any thoughts or suggestions you have.","reviewer_media_screen_title_picture_text":"Share a picture","reviewer_media_introduction_picture_text":"Upload a photo to support your review.","reviewer_media_screen_title_video_text":"Share a video","reviewer_media_introduction_video_text":"Upload a video to support your review.","reviewer_media_screen_title_picture_or_video_text":"Share a picture or video","reviewer_media_introduction_picture_or_video_text":"Upload a photo or video to support your review.","reviewer_media_
572youtube_url_text":"Paste your Youtube URL here","advanced_settings_next_step_button_text":"Next","advanced_settings_close_review_button_text":"Close","modal_write_review_flow":false,"write_review_flow_required_text":"Required","write_review_flow_privacy_message_text":"We respect your privacy.","write_review_flow_anonymous_text":"Post review as anonymous","write_review_flow_visibility_text":"This won't be visible to other customers.","write_review_flow_multiple_selection_help_text":"Select as many as you like","write_review_flow_single_selection_help_text":"Select one option","write_review_flow_required_field_error_text":"This field is required","write_review_flow_invalid_email_error_text":"Please enter a valid email address","write_review_flow_max_length_error_text":"Max. {{ max_length }} characters.","write_review_flow_media_upload_text":"\u003cb\u003eClick to upload\u003c/b\u003e or drag and drop","write_review_flow_gdpr_statement":"We'll only contact you about your review if necessary. By submitting your review, you agree to our \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms and conditions\u003c/a\u003e and \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy policy\u003c/a\u003e.","rating_only_reviews_enabled":false,"show_negative_reviews_help_screen":false,"new_review_flow_help_screen_rating_threshold":3,"negative_review_resolution_screen_title_text":"Tell us more","negative_review_resolution_text":"Your experience matters to us. If there were issues with your purchase, we're here to help. Feel free to reach out to us, we'd love the opportunity to make things right.","negative_review_resolution_button_text":"Contact us","negative_review_resolution_proceed_with_review_text":"Leave a review","negative_review_resolution_subject":"Issue with purchase from {{ shop_name }}.{{ order_name }}","coupon_promo_intro_any_review_text":"Write a review and get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_with_photo_text":"Write a review and add a photo or video to get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_with_video_text":"Write a review and add a video to get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_up_to_any_review_text":"Write a review and get a coupon for up to {{ amount }} off your next purchase","coupon_promo_intro_up_to_with_photo_text":"Write a review and add a photo or video to get a coupon for up to {{ amount }} off your next purchase","coupon_promo_intro_external_text":"Write a review and get a reward for your next purchase","coupon_promo_intro_external_with_photo_text":"Write a review and add a photo or video to get a reward for your next purchase","coupon_promo_intro_external_with_video_text":"Write a review and add a video to get a reward for your next purchase","coupon_promo_media_photo_text":"Add a photo or video and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_photo_only_text":"Add a photo and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_video_text":"Add a video and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_external_photo_text":"Add a photo or video and get a reward for your next purchase","coupon_promo_media_external_photo_only_text":"Add a photo and get a reward for your next purchase","coupon_promo_media_external_video_text":"Add a video and get a reward for your next purchase","coupon_promo_success_text":"You've got a coupon for your next purchase at {{ shop_name }}!","coupon_promo_success_subtext":"You'll receive your coupon email within the hour.","preview_badge_collection_page_install_status":false,"widget_review_custom_css":"","preview_badge_custom_css":"","preview_badge_stars_count":"5-stars","featured_carousel_custom_css":"","floating_tab_custom_css":"","all_reviews_widget_custom_css":"","medals_widget_custom_css":"","verified_badge_custom_css":"","all_reviews_text_custom_css":"","transparency_badges_collected_via_store_invite":false,"transparency_badges_from_another_provider":false,"transparency_badges_collected_from_store_visitor":false,"transparency_badges_collected_by_verified_review_provider":true,"transparency_badges_earned_reward":false,"transparency_badges_collected_via_store_invite_text":"Review collected via store invitation","transparency_badges_from_another_provider_text":"Review collected from another provider","transparency_badges_collected_from_store_visitor_text":"Review collected from a store visitor","transparency_badges_written_in_google_text":"Review written in Google","transparency_badges_written_in_etsy_text":"Review written in Etsy","transparency_badges_written_in_shop_app_text":"Review written in Shop App","transparency_badges_earned_reward_text":"Review earned a reward for future purchase","product_review_widget_per_page":10,"widget_other_languages_reviews_per_page":3,"widget_store_review_label_text":"Review about the store","widget_cart_mode_aggregate_heading_text":"Customers rate this store","checkout_comment_extension_title_on_product_page":"Customer Comments","checkout_comment_extension_num_latest_comment_show":5,"checkout_comment_extension_format":"name_and_timestamp","checkout_comment_customer_name":"last_initial","checkout_comment_comment_notification":true,"preview_badge_collection_page_install_preference":false,"preview_badge_home_page_install_preference":false,"preview_badge_product_page_install_preference":false,"review_widget_install_preference":"","review_carousel_install_preference":false,"floating_reviews_tab_install_preference":"none","verified_reviews_count_badge_install_preference":false,"all_reviews_text_install_preference":false,"review_widget_best_location":false,"judgeme_medals_install_preference":false,"review_widget_revamp_enabled":false,"review_widget_qna_enabled":false,"review_widget_header_theme":"minimal","review_widget_widget_title_enabled":true,"review_widget_header_text_size":"medium","review_widget_header_text_weight":"regular","review_widget_average_rating_style":"compact","review_widget_bar_chart_enabled":true,"review_widget_bar_chart_type":"numbers","review_widget_bar_chart_style":"standard","review_widget_expanded_media_gallery_enabled":false,"review_widget_show_review_highlights":false,"review_widget_show_review_keywords_in_gray":false,"review_widget_reviews_section_theme":"standard","review_widget_image_style":"thumbnails","review_widget_review_image_ratio":"square","review_widget_stars_size":"medium","review_widget_verified_badge":"standard_text","review_widget_review_title_text_size":"medium","review_widget_review_text_size":"medium","review_widget_review_text_length":"medium","review_widget_number_of_columns_desktop":3,"review_widget_carousel_transition_speed":5,"review_widget_custom_questions_answers_display":"always","review_widget_card_section_size":"small","review_widget_button_text_color":"#FFFFFF","review_widget_text_color":"#000000","review_widget_lighter_text_color":"#7B7B7B","review_widget_corner_styling":"soft","review_widget_review_word_singular":"review","review_widget_review_word_plural"
572:"reviews","review_widget_voting_label":"Helpful?","review_widget_shop_reply_label":"Reply from {{ shop_name }}:","review_widget_filters_title":"Filters","review_widget_filter_rating_title":"Rating","review_widget_filter_keyword_title":"Keyword","review_widget_clear_filters_text":"Clear filters","review_widget_expand_more_text":"More","review_widget_review_highlights_title":"Review highlights","qna_widget_question_word_singular":"Question","qna_widget_question_word_plural":"Questions","qna_widget_answer_reply_label":"Answer from {{ answerer_name }}:","qna_content_screen_title_text":"Ask a question about this product","qna_widget_question_required_field_error_text":"Please enter your question.","qna_widget_flow_gdpr_statement":"We'll only contact you about your question if necessary. By submitting your question, you agree to our \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms and conditions\u003c/a\u003e and \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy policy\u003c/a\u003e.","qna_widget_question_submitted_text":"Thanks for your question!","qna_widget_close_form_text_question":"Close","qna_widget_question_submit_success_text":"Weâll notify you by email when your question is answered.","all_reviews_widget_v2025_enabled":false,"all_reviews_widget_v2025_header_theme":"default","all_reviews_widget_v2025_widget_title_enabled":true,"all_reviews_widget_v2025_header_text_size":"medium","all_reviews_widget_v2025_header_text_weight":"regular","all_reviews_widget_v2025_average_rating_style":"compact","all_reviews_widget_v2025_bar_chart_enabled":true,"all_reviews_widget_v2025_bar_chart_type":"numbers","all_reviews_widget_v2025_bar_chart_style":"standard","all_reviews_widget_v2025_expanded_media_gallery_enabled":false,"all_reviews_widget_v2025_show_store_medals":true,"all_reviews_widget_v2025_show_photo_gallery":true,"all_reviews_widget_v2025_show_review_keywords":false,"all_reviews_widget_v2025_show_ai_summary":false,"all_reviews_widget_v2025_show_ai_summary_bg":false,"all_reviews_widget_v2025_show_review_highlights":false,"all_reviews_widget_v2025_show_review_keywords_in_gray":false,"all_reviews_widget_v2025_add_search_bar":false,"all_reviews_widget_v2025_default_sort_method":"most-recent","all_reviews_widget_v2025_reviews_per_page":10,"all_reviews_widget_v2025_reviews_section_theme":"default","all_reviews_widget_v2025_image_style":"thumbnails","all_reviews_widget_v2025_review_image_ratio":"square","all_reviews_widget_v2025_stars_size":"medium","all_reviews_widget_v2025_verified_badge":"standard_text","all_reviews_widget_v2025_review_title_text_size":"medium","all_reviews_widget_v2025_review_text_size":"medium","all_reviews_widget_v2025_review_text_length":"medium","all_reviews_widget_v2025_number_of_columns_desktop":3,"all_reviews_widget_v2025_carousel_transition_speed":5,"all_reviews_widget_v2025_custom_questions_answers_display":"always","all_reviews_widget_v2025_review_dates":false,"all_reviews_widget_v2025_card_section_size":"small","all_reviews_widget_v2025_show_product_variant":false,"all_reviews_widget_v2025_show_reviewer_avatar":true,"all_reviews_widget_v2025_reviewer_name_as_initial":"","all_reviews_widget_v2025_review_location_show":false,"all_reviews_widget_v2025_location_format":"","all_reviews_widget_v2025_show_country_flag":false,"all_reviews_widget_v2025_widget_thumb":false,"all_reviews_widget_v2025_verified_by_shop_badge_style":"light","all_reviews_widget_v2025_social_share":false,"all_reviews_widget_v2025_social_share_options_order":"Facebook,Twitter,LinkedIn,Pinterest","all_reviews_widget_v2025_pagination_type":"standard","all_reviews_widget_v2025_button_text_color":"#FFFFFF","all_reviews_widget_v2025_text_color":"#000000","all_reviews_widget_v2025_lighter_text_color":"#7B7B7B","all_reviews_widget_v2025_corner_styling":"soft","all_reviews_widget_v2025_title":"Customer reviews","all_reviews_widget_v2025_ai_summary_title":"Customers say about this store","all_reviews_widget_v2025_no_review_text":"Be the first to write a review","all_reviews_widget_v2025_review_highlights_title":"Review highlights","reviews_grid_widget_show_sample_reviews":false,"reviews_grid_widget_review_selection":"all","reviews_grid_widget_select_products":[],"reviews_grid_widget_show_media_only":false,"reviews_grid_widget_display_order":"media_first","reviews_grid_widget_card_grouping":"per_media","reviews_grid_widget_columns_desktop":3,"reviews_grid_widget_rows_desktop":3,"reviews_grid_widget_columns_mobile":2,"reviews_grid_widget_rows_mobile":6,"reviews_grid_widget_show_stars":true,"reviews_grid_widget_show_reviewer_name":true,"reviews_grid_widget_show_review_title_on_hover_desktop":true,"reviews_grid_widget_corner_styling":"soft","reviews_grid_widget_card_spacing":"medium","reviews_grid_widget_header_text_color":"#000000","reviews_grid_widget_star_and_reviewer_name_color":"#F9F9F9","reviews_grid_widget_overlay_and_background_color":"#000000","reviews_grid_widget_content_color":"#F9F9F9","reviews_grid_widget_header_text":"From our customers","reviews_grid_widget_show_average_rating":true,"trust_badge_enabled":false,"trust_badge_structure":"outline","trust_badge_color":"black","trust_badge_star":"black","trust_badge_rating_display_default":"show_avg_text","platform":"shopify","branding_url":"https://app.judge.me/reviews/stores/marketplace.paceline.fit","branding_text":"Powered by Judge.me","locale":"en","reply_name":"Paceline","shop_currency":"USD","widget_version":"3.0","footer":true,"autopublish":true,"review_dates":true,"enable_custom_form":false,"shop_use_review_site":true,"shop_locale":"en","enable_multi_locales_translations":true,"show_review_title_input":true,"autofill_review_title":true,"review_verification_email_status":"always","require_verification_before_submit":false,"sign_in_with_
572shop_enabled":false,"customer_account_validation_enabled":true,"most_relevant_sort_enabled":true,"coupon_promo_invited_eligible":true,"coupon_promo_web_eligible":false,"uses_coupon_integration":false,"uses_external_coupon":false,"can_be_branded":true,"rtl_stars_enabled_ar":true,"rtl_stars_enabled_he":true,"reply_name_text":"Paceline"};</script>
572 <style class='jdgm-settings-style'>.jdgm-xx{left:0}:root{--jdgm-primary-color: #47C2EB;--jdgm-secondary-color: rgba(71,194,235,0.1);--jdgm-star-color: #47C2EB;--jdgm-write-review-text-color: white;--jdgm-write-review-bg-color: #47C2EB;--jdgm-paginate-color: #47C2EB;--jdgm-border-radius: 10;--jdgm-reviewer-name-color: #47C2EB}.jdgm-histogram__bar-content{background-color:#47C2EB}.jdgm-rev[data-verified-buyer=true] .jdgm-rev__icon.jdgm-rev__icon:after,.jdgm-rev__buyer-badge.jdgm-rev__buyer-badge{color:#000000;background-color:#47C2EB}.jdgm-review-widget--small .jdgm-gallery.jdgm-gallery .jdgm-gallery__thumbnail-link:nth-child(8) .jdgm-gallery__thumbnail-wrapper.jdgm-gallery__thumbnail-wrapper:before{content:"See more"}@media only screen and (min-width: 768px){.jdgm-gallery.jdgm-gallery .jdgm-gallery__thumbnail-link:nth-child(8) .jdgm-gallery__thumbnail-wrapper.jdgm-gallery__thumbnail-wrapper:before{content:"See more"}}.jdgm-rev__thumb-btn{color:#47C2EB}.jdgm-rev__thumb-btn:hover{opacity:0.8}.jdgm-rev__thumb-btn:not([disabled]):hover,.jdgm-rev__thumb-btn:hover,.jdgm-rev__thumb-btn:active,.jdgm-rev__thumb-btn:visited{color:#47C2EB}.jdgm-preview-badge .jdgm-star.jdgm-star{color:#47C2EB}.jdgm-prev-badge[data-average-rating='0.00']{display:none !important}.jdgm-author-fullname{display:none !important}.jdgm-author-all-initials{display:none !important}.jdgm-rev-widg__title{visibility:hidden}.jdgm-rev-widg__summary-text{visibility:hidden}.jdgm-prev-badge__text{visibility:hidden}.jdgm-rev__prod-link-prefix:before{content:'about'}.jdgm-rev__variant-label:before{content:'Variant: '}.jdgm-rev__out-of-store-text:before{content:'(out of store)'}@media only screen and (min-width: 768px){.jdgm-rev__pics .jdgm-rev_all-rev-page-picture-separator,.jdgm-rev__pics .jdgm-rev__product-picture{display:none}}@media only screen and (max-width: 768px){.jdgm-rev__pics .jdgm-rev_all-rev-page-picture-separator,.jdgm-rev__pics .jdgm-rev__product-picture{display:none}}.jdgm-preview-badge[data-template="product"]{display:none !important}.jdgm-preview-badge[data-template="collection"]{display:none !important}.jdgm-preview-badge[data-template="index"]{display:none !important}.jdgm-review-widget[data-from-snippet="true"]{display:none !important}.jdgm-verified-count-badget[data-from-snippet="true"]{display:none !important}.jdgm-carousel-wrapper[data-from-snippet="true"]{display:none !important}.jdgm-all-reviews-text[data-from-snippet="true"]{display:none !important}.jdgm-medals-section[data-from-snippet="true"]{display:none !important}.jdgm-ugc-media-wrapper[data-from-snippet="true"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_via_store_invitation"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_from_another_provider"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_from_store_visitor"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_earned_for_future_purchase"]{display:none !important}.jdgm-review-snippet-widget{--jdgm-snippet-card-color: #fff;--jdgm-snippet-text-color: #000;--jdgm-snippet-lighter-text-color: #7B7B7B;--jdgm-snippet-star-color: #47C2EB;--jdgm-snippet-border-radius: 8px;--jdgm-snippet-arrows-bg-color: #fff;--jdgm-snippet-arrows-color: #000}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__cards-container .jdgm-rev-snippet-card{border-radius:8px;background:#fff}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__cards-container .jdgm-rev-snippet-card__rev-rating .jdgm-star{color:#47C2EB}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__prev-btn,.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__next-btn{border-radius:50%;background:#fff}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__prev-btn>svg,.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__next-btn>svg{fill:#000}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jm-mfp-content,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__icon,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__pic-img,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__reply{border-radius:8px}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev[data-verified-buyer="true"] .jdgm-full-rev__icon::after{border-radius:8px}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-rev__buyer-badge{border-radius:calc( 8px / 2 )}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-full-rev__replier::before{content:'Paceline'}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-full-rev__product-button{border-radius:calc( 8px * 6 )} 573</style> <style class='jdgm-settings-style'></style> 574 575 576 577 578 <style class='jdgm-miracle-styles'> 579 @-webkit-keyframes jdgm-spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes jdgm-spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}@font-face{font-family:'JudgemeStar';src:url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAScAA0AAAAABrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAEgAAAABoAAAAcbyQ+3kdERUYAAARgAAAAHgAAACAAMwAGT1MvMgAAAZgAAABGAAAAVi+vS9xjbWFwAAAB8AAAAEAAAAFKwBMjvmdhc3AAAARYAAAACAAAAAj//wADZ2x5ZgAAAkAAAAEJAAABdH33LXtoZWFkAAABMAAAAC0AAAA2BroQKWhoZWEAAAFgAAAAHAAAACQD5QHQaG10eAAAAeAAAAAPAAAAFAYAAABsb2NhAAACMAAAAA4AAAAOAO4AeG1heHAAAAF8AAAAHAAAACAASgAvbmFtZQAAA0wAAADeAAABkorWfVZwb3N0AAAELAAAACkAAABEp3ubLXgBY2BkYADhPPP4OfH8Nl8ZuJkYQODS2fRrCPr/aSYGxq1ALgcDWBoAO60LkwAAAHgBY2BkYGDc+v80gx4TAwgASaAICmABAFB+Arl4AWNgZGBgYGPQYWBiAAIwyQgWc2AAAwAHVQB6eAFjYGRiYJzAwMrAwejDmMbAwOAOpb8ySDK0MDAwMbByMsCBAAMCBKS5pjA4PGB4wMR44P8BBj3GrQymQGFGkBwAjtgK
579/gAAeAFjYoAAEA1jAwAAZAAHAHgB3crBCcAwDEPRZydkih567CDdf4ZskmLwFBV8xBfCaC4BXkOUmx4sU0h2ngNb9V0vQCxaRKIAevT7fGWuBrEAAAAAAAAAAAA0AHgAugAAeAF9z79Kw1AUx/FzTm7un6QmJtwmQ5Bg1abgEGr/BAqlU6Gju+Cgg1MkQ/sA7Vj7BOnmO/gUvo2Lo14NqIO6/IazfD8HEODtmQCfoANwNsyp2/GJt3WKQrd1NLiYYWx2PBqOsmJMEOznPOTzfSCrhAtbbLdmeFLJV9eKd63WLrZcIcuaEVdssWCKM6pLCfTVOYbz/0pNSMSZKLIZpvh78sAUH6PlMrreTCabP9r+Z/puPZ2ur/RqpQHgh+MIegCnXeM4MRAPjYN//5tj4ZtTjkFqEdmeMShlEJ7tVAly2TAkx6R68Fl4E/aVvn8JqHFQ4JS1434gXKcuL31dDhzs3YbsEOAd/IU88gAAAHgBfY4xTgMxEEVfkk0AgRCioKFxQYd2ZRtpixxgRU2RfhU5q5VWseQ4JdfgAJyBlmNwAM7ABRhZQ0ORwp7nr+eZAa54YwYg9zm3ynPOeFRe8MCrciXOh/KSS76UV5L/iDmrLiS5AeU519wrL3jmSbkS5115yR2fyivJv9kx0ZMZ2RLZw27q87iNQi8EBo5FSPIMw3HqBboi5lKTGAGDp8FKXWP+t9TU01Lj5His1Ba6uM9dTEMwvrFmbf5GC/q2drW3ruXUhhsCiQOjznFlCzYhHUZp4xp76vsvQh89CQAAeAFjYGJABowM6IANLMrEyMTIzMjCXpyRWJBqZshWXJJYBKOMAFHFBucAAAAAAAAB//8AAngBY2BkYGDgA2IJBhBgAvKZGViBJAuYxwAABJsAOgAAeAFjYGBgZACCk535hiD60tn0azAaAEqpB6wAAA==") format("woff");font-weight:normal;font-style:normal}.jdgm-star{font-family:'JudgemeStar';display:inline !important;text-decoration:none !important;padding:0 4px 0 0 !important;margin:0 !important;font-weight:bold;opacity:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.jdgm-star:hover{opacity:1}.jdgm-star:last-of-type{padding:0 !important}.jdgm-star.jdgm--on:before{content:"\e000"}.jdgm-star.jdgm--off:before{content:"\e001"}.jdgm-star.jdgm--half:before{content:"\e002"}.jdgm-widget *{margin:0;line-height:1.4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-overflow-scrolling:touch}.jdgm-hidden{display:none !important;visibility:hidden !important}.jdgm-temp-hidden{display:none}.jdgm-spinner{width:40px;height:40px;margin:auto;border-radius:50%;border-top:2px solid #eee;border-right:2px solid #eee;border-bottom:2px solid #eee;border-left:2px solid #ccc;-webkit-animation:jdgm-spin 0.8s infinite linear;animation:jdgm-spin 0.8s infinite linear}.jdgm-prev-badge{display:block !important} 580 581</style> 582 583 584 585 586 587 588 589 590 591 592 593 594 <link id="judgeme_widget_align_css" rel="stylesheet" type="text/css" media="nope!" onload="this.media='all'" href="https://cdn.shopify.com/extensions/01a0f14c-14c3-7c54-8630-ec498be121ab/judgeme-770/assets/widget_v3_theme_align.css"> 595 596 597 598
599<script data-cfasync='false' class='jdgm-script'> 600!function(e){window.jdgm=window.jdgm||{}; 601/* INF-1976 */ 602var _jdgmBlocked=function(){var raw=(window.jdgmSettings||{}).hostname_allowlist;var list=(raw==null?"":""+raw).split(/[\s,]+/).map(function(h){return h.trim().toLowerCase().replace(/\.$/,"");}).filter(function(h){return h;});if(!list.length)return false;var host=(e.location.hostname||"").toLowerCase().replace(/\.$/,"");if(/(^|\.)shopifypreview\.com$/.test(host))return false;var bare=host.replace(/^www\./,"");for(var i=0;i<list.length;i++){var en=list[i];if(en.indexOf("*.")===0){var b=en.slice(2);if(host===b||host.slice(-(b.length+1))==="."+b)return false;}else if(bare===en.replace(/^www\./,""))return false;}return true;}(); 603if(_jdgmBlocked){jdgm._loaderExecuted=true;jdgm._blocked=true;var _jdgmS=e.createElement("style");_jdgmS.textContent='[class^="jdgm-"],[class*=" jdgm-"]{display:none !important}';(e.head||e.documentElement).appendChild(_jdgmS);return;} 604jdgm.CDN_HOST="https://cdnwidget.judge.me/",jdgm.CDN_HOST_ALT="https://cdn2.judge.me/cdn/widget_frontend/",jdgm.API_HOST="https://api.judge.me/",jdgm.CDN_BASE_URL="https://cdn.shopify.com/extensions/01a0f14c-14c3-7c54-8630-ec498be121ab/judgeme-770/assets/",jdgm.CDN_API_HOST="https://cdn.judge.me/", 605jdgm.docReady=function(d){(e.attachEvent?"complete"===e.readyState:"loading"!==e.readyState)? 606setTimeout(d,0):e.addEventListener("DOMContentLoaded",d)},jdgm.loadCSS=function(d,t,o,a){ 607!o&&jdgm.loadCSS.requestedUrls.indexOf(d)>=0||(jdgm.loadCSS.requestedUrls.push(d), 608(a=e.createElement("link")).rel="stylesheet",a.class="jdgm-stylesheet",a.media="nope!", 609a.href=d,a.onload=function(){this.media="all",t&&setTimeout(t)},e.body.appendChild(a))}, 610jdgm.loadCSS.requestedUrls=[],jdgm.loadJS=function(e,d){var t=new XMLHttpRequest; 611t.onreadystatechange=function(){4===t.readyState&&t.status>=200&&t.status<300&&(Function(t.response)(),d&&d(t.response))}, 612t.open("GET",e),t.onerror=function(){if(e.indexOf(jdgm.CDN_HOST)===0&&jdgm.CDN_HOST_ALT!==jdgm.CDN_HOST){var f=e.replace(jdgm.CDN_HOST,jdgm.CDN_HOST_ALT);jdgm.loadJS(f,d)}},t.send()},jdgm.docReady((function(){(window.jdgmLoadCSS||e.querySelectorAll( 613".jdgm-widget, .jdgm-all-reviews-page").length>0)&&(jdgmSettings.widget_load_with_code_splitting? 614parseFloat(jdgmSettings.widget_version)>=3?jdgm.loadCSS(jdgm.CDN_BASE_URL+"widget_v3_base.css"): 615jdgm.loadCSS(jdgm.CDN_BASE_URL+"widget_base.css"):jdgm.loadCSS(jdgm.CDN_BASE_URL+"shopify_v2.css") 616)}))}(document); 617</script>
617 618<noscript><link rel="stylesheet" type="text/css" media="all" href="https://cdn.shopify.com/extensions/01a0f14c-14c3-7c54-8630-ec498be121ab/judgeme-770/assets/shopify_v2.css"></noscript> 619 620<!-- BEGIN app snippet: theme_fix_tags -->
620<script> 621 (function() { 622 var jdgmThemeFixes = null; 623 if (!jdgmThemeFixes) return; 624 625 // "All themes" fix: CSS and JS applied on every theme. CSS is injected 626 // before the per-theme fix so the theme-specific CSS wins the cascade. 627 // HTML is never applied globally (too risky). 628 var allThemesFix = jdgmThemeFixes['all']; 629 if (allThemesFix && allThemesFix.css) { 630 var allStyleTag = document.createElement('style'); 631 allStyleTag.classList.add('jdgm-theme-fix-style-all'); 632 allStyleTag.innerHTML = allThemesFix.css; 633 document.head.append(allStyleTag); 634 }; 635 636 if (allThemesFix && allThemesFix.js) { 637 var allScriptTag = document.createElement('script'); 638 allScriptTag.classList.add('jdgm-theme-fix-script-all'); 639 allScriptTag.innerHTML = allThemesFix.js; 640 document.head.append(allScriptTag); 641 }; 642 643 var thisThemeFix = jdgmThemeFixes[Shopify.theme.id]; 644 if (!thisThemeFix) return; 645 646 if (thisThemeFix.html) { 647 document.addEventListener("DOMContentLoaded", function() { 648 var htmlDiv = document.createElement('div'); 649 htmlDiv.classList.add('jdgm-theme-fix-html'); 650 htmlDiv.innerHTML = thisThemeFix.html; 651 document.body.append(htmlDiv); 652 }); 653 }; 654 655 if (thisThemeFix.css) { 656 var styleTag = document.createElement('style'); 657 styleTag.classList.add('jdgm-theme-fix-style'); 658 styleTag.innerHTML = thisThemeFix.css; 659 document.head.append(styleTag); 660 }; 661 662 if (thisThemeFix.js) { 663 var scriptTag = document.createElement('script'); 664 scriptTag.classList.add('jdgm-theme-fix-script'); 665 scriptTag.innerHTML = thisThemeFix.js; 666 document.head.append(scriptTag); 667 }; 668 })(); 669</script>
669 670<!-- END app snippet --> 671<!-- End of Judge.me Core --> 672 673 674 675<!-- END app block --><link href="https://cdn.shopify.com/extensions/01a039c6-265a-77a1-ba13-3a9b8dfdc273/personapay-discount-app-178/assets/persona-app.css" rel="stylesheet" type="text/css" media="all">
676<script src="https://cdn.shopify.com/extensions/01a0f14c-14c3-7c54-8630-ec498be121ab/judgeme-770/assets/loader.js" type="text/javascript" defer="defer"></script>
676 677<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
678<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: 71067468049,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 678
678
679<script> 680 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 681</script>
vendor: 1 bytes, line 681
681
682<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}
682).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: 71067468049,storefrontBaseUrl: "https://paceline.fit",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://paceline.fit/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2294710545","configuration":"{\"shopId\":\"paceline-2350.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"31536d5a2ef62c1887054e49fd58dba0","type":"APP","apiClientId":4845829,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
682,"dataSharingState":"unrestricted"},{"id":"1897660689","configuration":"{\"appSettingSchemaVersion\":\"2.0\",\"sdkUrl\":\"sdk.iad-06.braze.com\",\"sdkVersion\":\"6.8.0\",\"userTrackingBehavior\":\"on_visit\",\"apiKey\":\"2d32e6f4-6782-4dfc-8426-fdd306b10739\",\"shopDomain\":\"paceline-2350.myshopify.com\",\"features\":\"WEB_SDK_FEATURE,ACCOUNT_LOGIN_FEATURE,VIEW_PRODUCTS_FEATURE,PURCHASE_COMMERCE_EVENTS_FEATURE,IN_BROWSER_MESSAGES_FEATURE\",\"appEmbedEnabled\":\"true\",\"selectedExternalId\":\"custom-id\",\"customIdEndpoint\":\"https:\\\/\\\/api.paceline.fit\\\/shopify-integration\\\/public\\\/braze\\\/external-id\",\"thirdPartyTagManagerEnabled\":\"false\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"822da2ffc90491a56bbbb828cb94f546","type":"APP","apiClientId":4371083,"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":"unrestricted"},{"id":"1397195025","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"]},"dataSharingState":"unrestricted"},{"id":"836567313","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-5GH54HJ3L8\\\",\\\"AW-10868406134\\\",\\\"GT-TQTHTB2\\\"],\\\"target_country\\\":\\\"US\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-5GH54HJ3L8\\\",\\\"AW-10868406134\\\/U62HCM3Ox9MYEPbuur4o\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-5GH54HJ3L8\\\",\\\"AW-10868406134\\\/wVsACM_Nx9MYEPbuur4o\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-5GH54HJ3L8\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-5GH54HJ3L8\\\",\\\"AW-10868406134\\\/XracCMzNx9MYEPbuur4o\\\",\\\"MC-5FV1Z28DZS\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-5GH54HJ3L8\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-5GH54HJ3L8\\\",\\\"AW-10868406134\\\/Ve9oCMbNx9MYEPbuur4o\\\",\\\"MC-5FV1Z28DZS\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-5GH54HJ3L8\\\",\\\"AW-10868406134\\\/X9k8CMnNx9MYEPbuur4o\\\",\\\"MC-5FV1Z28DZS\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-5GH54HJ3L8\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-5GH54HJ3L8\\\",\\\"AW-10868406134\\\/u2FpCNDOx9MYEPbuur4o\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-5GH54HJ3L8\\\",\\\"AW-10868406134\\\/Q72uCMrOx9MYEPbuur4o\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-5GH54HJ3L8\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"687374609","configuration":"{\"pixelCode\":\"CMNEVHRC77U58IEMMQNG\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"22e92c2ad45662f435e4801458fb78cc","type":"APP","apiClientId":4383523,"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"},{"id":"355991825","configuration":"{\"pixel_id\":\"872912193874554\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"71860497","configuration":"{\"myshopifyDomain\":\"paceline-2350.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"23b97d18e2aa74363140dc29c9284e87","type":"APP","apiClientId":2775569,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"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":"Paceline","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"paceline-2350.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/paceline.fit"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"
68210773370339601","handle":"100-mineral-antioxidant-sunscreen-spray-with-spf-30","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049580060945","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773370011921","handle":"100-mineral-antioxidant-sunscreen-spray-with-spf-50","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049579405585","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773370568977","handle":"100-mineral-sunscreen-lotion-with-spf-30","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049580650769","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773344813329","handle":"100-plant-protein-powder-limited-edition-flavor","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049547981073","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773345042705","handle":"100-plant-protein-10-travel-packs","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049548308753","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773344944401","handle":"100-plant-protein-powder","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049548144913","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773222228241","handle":"12ct-mixed-box","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049336168721","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11022937129233","handle":"12ct-sour-puff-variety-box","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53449135292689","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11038889410833","handle":"3-pack-buzzpatch-bundle","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53496981487889","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11038889345297","handle":"3-pack-magic-patch-bundle","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53496981422353","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773375516945","handle":"4-in-1-magnesium-powder","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049589006609","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11241956213009","handle":"5-revival-2-in-1-pant-anthracite-black","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"54713728401681","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11241956278545","handle":"5-revival-2-in-1-pant-black-black","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"54713728631057","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"15408342434065","handle":"5-revival-2-in-1-short-black-stealth-green","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"67609429442833","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}
682,{"id":"15408296165649","handle":"5-revival-2-in-1-short-navy-black","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"67609372426513","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10135302373649","handle":"5-hydroxytryptophan","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50549566177553","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10135302635793","handle":"5-mthf-1-mg","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50549568045329","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11185915560209","handle":"5-mthf-1-mg-90-servings","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"54374632194321","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10135302799633","handle":"5-mthf-5-mg","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50549568176401","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"15408369107217","handle":"7-8-high-waist-airlift-legging-taupe","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"67609466208529","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773066875153","handle":"8-flavor-variety","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53048481022225","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11098226098449","handle":"9-loaded-protein-samples-shaker-bottle","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53682449875217","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11241928392977","handle":"abrazo-fleece-half-zip-jacket-mens","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"54713637208337","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11241986359569","handle":"abrazo-fleece-half-zip-jacket-womens","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"54713812123921","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773371715857","handle":"acetyl-l-carnitine","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049583239441","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10135302963473","handle":"acetyl-l-carnitine-formerly-carnityl","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50549568373009","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11113049686289","handle":"active-creatine","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53726589452561","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11113049522449","handle":"active-essential-amino-acids-dragon-fruit","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53726589223185","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11113049620753","handle":"active-essential-amino-acids-mango","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53726589255953","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}
682,{"id":"11113049555217","handle":"active-glutamine","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53726589387025","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11113049391377","handle":"active-protein-chocolate","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53726589157649","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11113049456913","handle":"active-protein-unflavored","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53726589288721","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11113049653521","handle":"active-protein-vanilla","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53726589419793","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773344190737","handle":"adaptogen-stack","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049547227409","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10135303127313","handle":"adrenal-cortex","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50549569126673","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11199827050769","handle":"advanced-4-in-1-boost","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"54462791418129","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10135303258385","handle":"advanced-bone-support-formerly-oscap","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50549569257745","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10135303422225","handle":"advanced-dha","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50549569487121","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10135303618833","handle":"advanced-digestive-enzymes-180-count-formerly-bio-gest","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50549569716497","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10135312695569","handle":"ferrasorb","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50549586067729","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773375877393","handle":"cognitive-support-supplement","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049589596433","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10135303815441","handle":"advanced-nutrients","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50549570240785","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11185915527441","handle":"advanced-pre-workout","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"54374632161553","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10237028008209","handle":"advanced-testosterone-support","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50981472502033","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}
682,{"id":"11170009710865","handle":"adventure-towel","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"54119197606161","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773371322641","handle":"after-sun-cooling-lotion","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049582125329","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10773369258257","handle":"after-sun-cooling-spray","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53049578094865","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"11170009907473","handle":"afters","isCollective":true,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"54119198621969","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"15407509504273","handle":"airbrush-real-dress-black","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"67608211816721","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"15407528247569","handle":"airlift-high-waist-elongated-legging-black","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"67608231346449","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://paceline.fit/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"183449977105","themeStoreId":"2053","themePublished":"true","eventMetadataId":"0348620b-d679-4ed6-b7f3-8eb07d99d9ab","pageType":"page","resourceId":"133785288977","shopId":"71067468049","storefrontBaseUrl":"https:\/\/paceline.fit","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
682<script> 683 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 684 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 685 window.ShopifyAnalytics.meta.currency = 'USD'; 686 var meta = {"page":{"pageType":"page","resourceType":"page","resourceId":133785288977,"requestId":"363f47be-fc5a-47ce-92e0-5a3762458893-1790916010"}}; 687 for (var attr in meta) { 688 window.ShopifyAnalytics.meta[attr] = meta[attr]; 689 } 690</script>
vendor: 1 bytes, line 690
690
691<script class="analytics"> 692 (function () { 693 var customDocumentWrite = function(content) { 694 var jquery = null; 695 696 if (window.jQuery) { 697 jquery = window.jQuery; 698 } else if (window.Checkout && window.Checkout.$) { 699 jquery = window.Checkout.$; 700 } 701 702 if (jquery) { 703 jquery('body').append(content); 704 } 705 }; 706 707 var hasLoggedConversion = function(token) { 708 if (token) { 709 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 710 } 711 return false; 712 } 713 714 var setCookieIfConversion = function(token) { 715 if (token) { 716 var twoMonthsFromNow = new Date(Date.now()); 717 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 718 719 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 720 } 721 } 722 723 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 724 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 725 if (trekkie.integrations) { 726 return; 727 } 728 trekkie.methods = [ 729 'identify', 730 'page', 731 'ready', 732 'track', 733 'trackForm', 734 'trackLink' 735 ]; 736 trekkie.factory = function(method) { 737 return function() { 738 var args = Array.prototype.slice.call(arguments); 739 args.unshift(method); 740 trekkie.push(args); 741 if (method == 'track' || method == 'page') { 742 var pageUrl; 743 try { 744 pageUrl = window.location.href; 745 } catch (e) {} 746 var pageReferrer; 747 try { 748 pageReferrer = document.referrer; 749 } catch (e) {} 750 try { 751 if (window.__TREKKIE_SHIM_QUEUE == null) { 752 window.__TREKKIE_SHIM_QUEUE = []; 753 } 754 window.__TREKKIE_SHIM_QUEUE.push({ 755 from: 'trekkie-stub', 756 method: method, 757 args: args.slice(1), 758 pageContext: { 759 url: pageUrl, 760 referrer: pageReferrer 761 } 762 }); 763 } catch (e) { 764 // no-op 765 } 766 } 767 return trekkie; 768 }; 769 }; 770 for (var i = 0; i < trekkie.methods.length; i++) { 771 var key = trekkie.methods[i]; 772 trekkie[key] = trekkie.factory(key); 773 } 774 trekkie.load = function(config) { 775 trekkie.config = config || {}; 776 trekkie.config.initialDocumentCookie = document.cookie; 777 var first = document.getElementsByTagName('script')[0]; 778var script = document.createElement('script'); 779script.type = 'text/javascript'; 780script.onerror = function(e) { 781 var scriptFallback = document.createElement('script'); 782 scriptFallback.type = 'text/javascript'; 783 scriptFallback.onerror = function(error) { 784 var Monorail = { 785 produce: function produce(monorailDomain, schemaId, payload) { 786 var currentMs = new Date().getTime(); 787 var event = { 788 schema_id: schemaId, 789 payload: payload, 790 metadata: { 791 event_created_at_ms: currentMs, 792 event_sent_at_ms: currentMs 793 } 794 }; 795 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 796 }, 797 sendRequest: function sendRequest(endpointUrl, payload) { 798 // Try the sendBeacon API 799 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 800 var blobData = new window.Blob([payload], { 801 type: 'text/plain' 802 }); 803 804 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 805 return true; 806 } // sendBeacon was not successful 807 808 } // XHR beacon 809 810 var xhr = new XMLHttpRequest(); 811 812 try { 813 xhr.open('POST', endpointUrl); 814 xhr.setRequestHeader('Content-Type', 'text/plain'); 815 xhr.send(payload); 816 } catch (e) { 817 console.log(e); 818 } 819 820 return false; 821 }, 822 isIos12: function isIos12() { 823 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 824 } 825 }; 826 Monorail.produce('monorail-edge.shopifysvc.com', 827 'trekkie_storefront_load_errors/1.1', 828 {shop_id: 71067468049, 829 theme_id: 183449977105, 830 app_name: "storefront", 831 context_url: window.location.href, 832 source_url: "//paceline.fit/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 833 834 }; 835 scriptFallback.async = true; 836 scriptFallback.src = '//paceline.fit/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 837 first.parentNode.insertBefore(scriptFallback, first); 838}; 839script.async = true; 840script.src = '//paceline.fit/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 841first.parentNode.insertBefore(script, first); 842 843 }; 844 trekkie.load( 845 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":71067468049,"isMerchantRequest":null,"themeId":183449977105,"themeCityHash":"6020370487569006638","contentLanguage":"en","currency":"USD","eventMetadataId":"0348620b-d679-4ed6-b7f3-8eb07d99d9ab"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 846 ); 847 848 var loaded = false;
849 trekkie.ready(function() { 850 if (loaded) return; 851 loaded = true; 852 853 window.ShopifyAnalytics.lib = window.trekkie; 854 855 var originalDocumentWrite = document.write; 856 document.write = customDocumentWrite; 857 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 858 document.write = originalDocumentWrite; 859 860 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 861 var token = match? match[1]: undefined; 862 if (!hasLoggedConversion(token)) { 863 setCookieIfConversion(token); 864 865 } 866 }); 867 868 window.ShopifyAnalytics.lib.page(null,{"pageType":"page","resourceType":"page","resourceId":133785288977,"requestId":"363f47be-fc5a-47ce-92e0-5a3762458893-1790916010","shopifyEmitted":true}); 869 870 var eventsListenerScript = document.createElement('script'); 871 eventsListenerScript.async = true; 872 eventsListenerScript.src = "//paceline.fit/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 873 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 874})();</script>
vendor: 1 bytes, line 874
874
875<script 876 defer 877 src="https://paceline.fit/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 878 data-application="storefront-renderer" 879 data-shop-id="71067468049" 880 data-render-region="gcp-us-central1" 881 data-page-type="page" 882 data-theme-instance-id="183449977105" 883 data-theme-name="Vision" 884 data-theme-version="8.1.0" 885 data-monorail-region="shop_domain" 886 data-resource-timing-sampling-rate="10" 887 data-shs="true" 888 data-shs-beacon="true" 889 data-shs-export-with-fetch="true" 890 data-shs-logs-sample-rate="1" 891 data-shs-beacon-endpoint="https://paceline.fit/api/collect" 892></script>
892 893<meta name="shopify-y" content="00000000-0000-0000-5000-000000000000" data-expiration="1822473610000"><meta name="shopify-s" content="00000000-0000-0000-5000-000000000000" data-expiration="1790917810000"><meta name="new-cookie-storage-activated" content="t"> 894</head> 895<body class="animations-false button-uppercase-false navigation-uppercase-true product-card-spacing-medium article-card-spacing-large template-page template-page-blogs"> 896 <a class="screen-reader-shortcut" href="#main-content">Skip to content</a> 897 <div id="wrapper"> 898 <div class="header--sticky"></div> 899 <!-- BEGIN sections: header-group --> 900<div id="shopify-section-sections--26041080578321__header" class="shopify-section shopify-section-group-header-group header-section"><theme-header 901 id="header" 902 class="header style1 header--shadow-small transparent--false header-sticky--active" 903> 904 <div class="header--inner"><div class="thb-header-mobile-left"> 905 <details class="mobile-toggle-wrapper"> 906 <summary class="mobile-toggle"> 907 <span></span> 908 <span></span> 909 <span></span> 910 </summary><nav id="mobile-menu" class="mobile-menu-drawer" role="dialog" tabindex="-1"> 911 <div class="mobile-menu-drawer--inner"><ul class="mobile-menu"><li><a href="/pages/about-us" title="About Us">About Us</a></li><li><a href="https://pacelinefit.app.link/Lp2VOz4MMBb" title="App">App</a></li><li><a href="/pages/the-marketplace" title="Rewards">Rewards</a></li></ul><div class="thb-mobile-menu-footer"><a class="thb-mobile-account-link" href="/account/login" title="Login 912"><svg width="19" height="20" viewBox="0 0 19 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 913<path d="M9.47368 0C6.56842 0 4.21053 2.35789 4.21053 5.26316C4.21053 8.16842 6.56842 10.5263 9.47368 10.5263C12.3789 10.5263 14.7368 8.16842 14.7368 5.26316C14.7368 2.35789 12.3789 0 9.47368 0ZM9.47368 8.42105C7.72632 8.42105 6.31579 7.01053 6.31579 5.26316C6.31579 3.51579 7.72632 2.10526 9.47368 2.10526C11.2211 2.10526 12.6316 3.51579 12.6316 5.26316C12.6316 7.01053 11.2211 8.42105 9.47368 8.42105ZM18.9474 20V18.9474C18.9474 14.8737 15.6526 11.5789 11.5789 11.5789H7.36842C3.29474 11.5789 0 14.8737 0 18.9474V20H2.10526V18.9474C2.10526 16.0421 4.46316 13.6842 7.36842 13.6842H11.5789C14.4842 13.6842 16.8421 16.0421 16.8421 18.9474V20H18.9474Z" fill="var(--color-header-icons, --color-accent)"/> 914</svg> Login 915</a><div class="no-js-hidden"></div> 916 </div> 917 </div> 918</nav> 919<link rel="stylesheet" href="//paceline.fit/cdn/shop/t/76/assets/mobile-menu.css?v=145268918413881177521779034828" media="print" onload="this.media='all'"> 920<noscript><link href="//paceline.fit/cdn/shop/t/76/assets/mobile-menu.css?v=145268918413881177521779034828" rel="stylesheet" type="text/css" media="all" /></noscript> 921</details> 922 923</div> 924 925 <a class="logolink" href="/"> 926 <img 927 src="//paceline.fit/cdn/shop/files/Logo_White_1.svg?v=1677111621" 928 class="logoimg" 929 alt="Paceline" 930 width="2600" 931 height="650" 932 ><img 933 src="//paceline.fit/cdn/shop/files/Logo_White_1.svg?v=1677111621" 934 class="logoimg logoimg--light" 935 alt="Paceline" 936 width="2600" 937 height="650" 938 > 939 </a> 940 941<full-menu class="full-menu"> 942 <ul class="thb-full-menu" role="menubar"><li role="none" class="" > 943 <a role="menuitem" class="thb-full-menu--link" href="/pages/about-us">About Us</a></li><li role="none" class="" > 944 <a role="menuitem" class="thb-full-menu--link" href="https://pacelinefit.app.link/Lp2VOz4MMBb">App</a></li><li role="none" class="" > 945 <a role="menuitem" class="thb-full-menu--link" href="/pages/the-marketplace">Rewards</a></li></ul> 946 947</full-menu> 948 949<div class="thb-secondary-area thb-header-right"> 950 <a href="https://pacelinefit.app.link/WEB" class="thb-download-btn">Download The App</a><a class="thb-secondary-area-item thb-quick-search" href="/search" title="Search"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 951<path d="M8.97208 0C4.0309 0 0 4.03029 0 8.97187C0 13.9135 4.03038 17.9437 8.97208 17.9437C11.0258 17.9437 12.9198 17.249 14.4348 16.0808L18.0149 19.6608C18.4672 20.1131 19.209 20.1131 19.6608 19.6608C20.1131 19.2085 20.1131 18.476 19.6608 18.0238L16.0714 14.4438C17.2422 12.9282 17.9436 11.0281 17.9436 8.97187C17.9436 4.0308 13.9138 0 8.97208 0ZM8.97208 2.3152C12.6618 2.3152 15.6284 5.2817 15.6284 8.97135C15.6284 12.661 12.6618 15.6275 8.97208 15.6275C5.28235 15.6275 2.31578 12.661 2.31578 8.97135C2.31578 5.2817 5.28235 2.3152 8.97208 2.3152Z" fill="var(--color-header-icons, --color-accent)"/> 952</svg></a><a class="thb-secondary-area-item thb-secondary-cart" href="/cart" id="cart-drawer-toggle"> 953 <div class="thb-secondary-item-icon"> 954 <svg width="24" height="20" viewBox="0 0 24 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 955<path d="M10.974 17.9841C10.974 19.0977 10.0716 20 8.95805 20C7.84447 20 6.94214 19.0977 6.94214 17.9841C6.94214 16.8705 7.84447 15.9682 8.95805 15.9
955682C10.0716 15.9682 10.974 16.8705 10.974 17.9841Z" fill="var(--color-header-icons, --color-body)"/> 956<path d="M19.1436 17.9841C19.1436 19.0977 18.2413 20 17.1277 20C16.0141 20 15.1118 19.0977 15.1118 17.9841C15.1118 16.8705 16.0141 15.9682 17.1277 15.9682C18.2413 15.9682 19.1436 16.8705 19.1436 17.9841Z" fill="var(--color-header-icons, --color-body)"/> 957<path d="M22.0614 3.12997H9.51503V5.25199H20.7352L19.462 10.6631C19.3843 11.0141 19.1896 11.3286 18.9102 11.555C18.6307 11.7815 18.283 11.9065 17.9235 11.9098H9.22325C8.859 11.9122 8.50518 11.79 8.22003 11.5631C7.93536 11.3362 7.73689 11.0184 7.65826 10.6631L5.43015 0.822281C5.37615 0.588291 5.24447 0.379879 5.05643 0.230674C4.86885 0.0809966 4.63581 0 4.39566 0H0.947388V2.12202H3.54686L5.5893 11.1406C5.77166 11.9662 6.23206 12.7037 6.89377 13.2304C7.55548 13.7566 8.37776 14.0399 9.22325 14.0323H17.9235C18.7643 14.0342 19.5804 13.7481 20.2369 13.2223C20.8934 12.6966 21.3495 11.9619 21.5309 11.1411L23.0959 4.43018C23.1689 4.11519 23.0936 3.78363 22.8923 3.53069C22.6909 3.27776 22.385 3.12997 22.0614 3.12997Z" fill="var(--color-header-icons, --color-accent)"/> 958</svg> 959 960 <span class="thb-item-count">0 961</span> 962 </div> 963 </a> 964</div> 965 966<style> 967.thb-download-btn { 968 font-size: 20px; 969 line-height: 40px; 970 font-size: 16px; 971 font-weight: 500; 972 text-transform: uppercase; 973 letter-spacing: 0.045em; 974 fill: #FFFFFF; 975 color: #FFFFFF; 976 background-color: var( --e-global-color-c417389 ); 977 border-radius: 32px 32px 32px 32px; 978 box-shadow: 0px 0px 0px 0px rgba(0,0,0,0.5); 979 padding: 8px 24px 8px 24px; 980 background: #47c2eb; 981 color: #000; 982} 983 984.thb-download-btn:hover { 985 color: #000; 986} 987 988/***** Responsiveness *****/ 989 990 991 992</style> 993 994</div><style data-shopify>:root { 995 --logo-height: 46px; 996 --logo-height-mobile: 26px; 997 } 998 </style></theme-header>
998<script src="//paceline.fit/cdn/shop/t/76/assets/header.js?v=6094887744313169711779034828" type="text/javascript"></script>
998<script type="application/ld+json"> 999 { 1000 "@context": "http://schema.org", 1001 "@type": "Organization", 1002 "name": "Paceline", 1003 1004 "logo": "https:\/\/paceline.fit\/cdn\/shop\/files\/Logo_White_1.svg?v=1677111621\u0026width=2600", 1005 1006 "sameAs": [ 1007 "", 1008 "https:\/\/www.facebook.com\/PacelineFit\/", 1009 "", 1010 "https:\/\/www.instagram.com\/paceline.fit\/", 1011 "https:\/\/www.tiktok.com\/@paceline.fit?lang=en", 1012 "", 1013 "", 1014 "", 1015 "" 1016 ], 1017 "url": "https:\/\/paceline.fit\/pages\/blogs" 1018 } 1019</script>
1019 1020<style> @media (max-width: 1024px) {#shopify-section-sections--26041080578321__header .header .thb-download-btn {display: none; }} </style></div><section id="shopify-section-sections--26041080578321__custom_liquid_KRHcFR" class="shopify-section shopify-section-group-header-group section-custom-liquid"><div class="row full-width-row-full"> 1021 <div class="small-12 columns"> 1022 <style> 1023 #shopify-section-template--26041087328529__rich_text_and_button_xdzAyT [data-block-id="template--26041087328529__rich_text_and_button_xdzAyT__button_3cBkCU"] .button { 1024 font-size: 18px !important; 1025 width: 240px !important; 1026 } 1027</style> 1028 </div> 1029</div> 1030 1031<style> #shopify-section-sections--26041080578321__custom_liquid_KRHcFR .hud {margin: 16px auto 0px auto; width: 358px; height: 64px; border-radius: 36px; background: #000000; line-height: 100%;} #shopify-section-sections--26041080578321__custom_liquid_KRHcFR .hud_body {height: 52px; padding: 12px 32px 0px 32px; display: flex; flex-flow: row nowrap; flex: 0 1 auto; justify-content: space-between;} #shopify-section-sections--26041080578321__custom_liquid_KRHcFR .hud_cell {display: flex; flex-flow: column nowrap; justify-content: center; width: 100%; text-align: center;} #shopify-section-sections--26041080578321__custom_liquid_KRHcFR .hud_cell span {line-height: 75%;} #shopify-section-sections--26041080578321__custom_liquid_KRHcFR .hud_cell_right_border {border-right: 2px solid #374353;} #shopify-section-sections--26041080578321__custom_liquid_KRHcFR .hud_label {font-size: small; color: #ace3f6;} #shopify-section-sections--26041080578321__custom_liquid_KRHcFR .hud_value {font-size: xx-large;} </style></section> 1032<!-- END sections: header-group --> 1033 <div role="main" id="main-content"> 1034 <div id="shopify-section-template--26041088082193__image_with_text_overlay_q9KyJX" class="shopify-section section-image-with-text-overlay"><link href="//paceline.fit/cdn/shop/t/76/assets/image-with-text-overlay.css?v=10786319536132918571779034828" rel="stylesheet" type="text/css" media="all" /><div class="row full-width-row-full"> 1035 <div class="small-12 columns"> 1036 <image-with-text-overlay class="image-with-text-overlay image-with-text-overlay--full-width-true text-center mobile-height-500 desktop-height-650 section-spacing section-spacing--disable-top section-spacing--disable-bottom" style="--text-color: #ffffff; --overlay-color-rgb: 0,0,0; --overlay-opacity: 0.3"> 1037 <div class="image-with-text-overlay--bg parallax--false"> 1038 1039 1040<img class="lazyload " width="4460" height="2977" data-sizes="auto" src="//paceline.fit/cdn/shop/files/purple-sunset-reflects-off-calm-coastal-waters.jpg?crop=center&height=13&v=1780334799&width=20" data-srcset="//paceline.fit/cdn/shop/files/purple-sunset-reflects-off-calm-coastal-waters.jpg?v=1780334799&width=375 375w,//paceline.fit/cdn/shop/files/purple-sunset-reflects-off-calm-coastal-waters.jpg?v=1780334799&width=4460 4460w" fetchpriority="high" alt="" style="object-position: 50.0% 50.0%;" /> 1041 1042</div> 1043 1044 <div class="image-with-text-overlay--content content-middle-center"> 1045 <div class="image-with-text-overlay--content-inner content-width-medium"> 1046 1047<h1 class="h1-xlarge image-with-text-overlay--heading" >THE MINUTES</h1> 1048<div class="rte description-size--medium" ><p>Fitness and wellness insights from experts.</p></div> 1049 </div> 1050 </div> 1051 </image-with-text-overlay> 1052 </div> 1053</div>
1054<script src="//paceline.fit/cdn/shop/t/76/assets/image-with-text-overlay.js?v=170233136777036907291779034828" defer="defer"></script>
1054 1055 1056</div><div id="shopify-section-template--26041088082193__spacer_mNFbcc" class="shopify-section section-spacer"><link href="//paceline.fit/cdn/shop/t/76/assets/spacer.css?v=17582184688244891781779034828" rel="stylesheet" type="text/css" media="all" /> 1057<div class="row"> 1058 <div class="small-12 columns"> 1059 <div class="spacer" style="--spacer-mobile: 50px; --spacer-desktop: 100px;"></div> 1060 </div> 1061</div> 1062 1063</div><section id="shopify-section-template--26041088082193__our_blogs_header_VMTpgN" class="shopify-section blog-header-section page-header-section our-blog-header-section"><link href="//paceline.fit/cdn/shop/t/76/assets/page-header.css?v=79513033968406292251779034828" rel="stylesheet" type="text/css" media="all" /> 1064<div class="row"> 1065 <div class="small-12 columns"> 1066 <div class="page-header"> 1067 <h1 class="page-header--title h2"></h1> 1068 <div class="page-header--tags"> 1069 <scroll-shadow> 1070 <div class="blog-header__tags--inner"><!-- <a href="" title="All" class="active">All</a> --> 1071 1072 1073<div class="blog-categories"> 1074 <div class="blog-categories--desktop"> 1075 <a href="https://paceline.fit/pages/blogs" class="active">All</a> 1076 1077 1078 1079 1080 <a href="/blogs/news" class="">News</a> 1081 1082 1083 1084 1085 <a href="/blogs/hydration" class="">Hydration</a> 1086 1087 1088 1089 1090 <a href="/blogs/nutrition" class="">Nutrition</a> 1091 1092 1093 1094 1095 <a href="/blogs/fitness" class="">Fitness</a> 1096 1097 1098 1099 1100 <a href="/blogs/recovery" class="">Recovery</a> 1101 1102 1103 1104 1105 <a href="/blogs/sleep" class="">Sleep</a> 1106 1107 1108 1109 1110 <a href="/blogs/mindfulness" class="">Mindfulness</a> 1111 1112 </div> 1113 1114 <div class="blog-categories--mobile"> 1115 <select onchange="if(this.value) window.location.href=this.value"> 1116 <option value="https://paceline.fit/pages/blogs" selected>All</option> 1117 1118 1119 <option value="/blogs/news" > 1120 News 1121 </option> 1122 1123 1124 <option value="/blogs/hydration" > 1125 Hydration 1126 </option> 1127 1128 1129 <option value="/blogs/nutrition" > 1130 Nutrition 1131 </option> 1132 1133 1134 <option value="/blogs/fitness" > 1135 Fitness 1136 </option> 1137 1138 1139 <option value="/blogs/recovery" > 1140 Recovery 1141 </option> 1142 1143 1144 <option value="/blogs/sleep" > 1145 Sleep 1146 </option> 1147 1148 1149 <option value="/blogs/mindfulness" > 1150 Mindfulness 1151 </option> 1152 1153 </select> 1154 </div> 1155</div> 1156 </div> 1157 </scroll-shadow> 1158 </div> 1159 1160 </div> 1161 </div> 1162</div> 1163 1164 1165 1166<!--Our Css Starts here --> 1167<style> 1168.our-blog-header-section .blog-header__tags--inner { 1169 display: flex; 1170 justify-content: center; 1171 gap: 45px; 1172} 1173.our-blog-header-section .page-header { 1174 /* padding: 25px 0; */ 1175 padding-bottom: 50px; 1176} 1177 1178.our-blog-header-section .page-header--tags a:hover, .page-header--tags a.active { 1179 color: #47c2eb; 1180 background: transparent; 1181} 1182 1183.our-blog-header-section .page-header--tags a { 1184 font-size: 22px; 1185 font-weight: 400; 1186 background: transparent; 1187 1188} 1189 1190.our-blog-header-section .page-header--tags a { 1191 font-size: 22px; 1192 height: 19px; 1193 border-radius: 0px; 1194 font-weight: 400; 1195 background: transparent; 1196 border-left: 1px solid #29313d; 1197 text-transform: uppercase; 1198} 1199.our-blog-header-section .blog-categories--desktop { 1200 display: flex; 1201 gap: 30px; 1202 flex-wrap: wrap; 1203} 1204 1205.our-blog-header-section .blog-categories--mobile { 1206 display: none; 1207} 1208 1209@media (max-width: 1160px) { 1210 .our-blog-header-section .blog-header__tags--inner { 1211 gap: 0px; 1212 max-width: 100%; 1213 margin: 0 auto; 1214 width: 100%; 1215} 1216.our-blog-header-section .page-header--tags a { 1217 font-size: 16px; 1218} 1219} 1220@media (max-width: 1280px) { 1221.our-blog-header-section .page-header--tags a { 1222 font-size: 16px; 1223} 1224} 1225 1226 1227@media (max-width: 768px) { 1228 .our-blog-header-section .blog-categories--desktop { 1229 display: none; 1230 } 1231 .our-blog-header-section .blog-categories--mobile { 1232 display: block; 1233 margin-top: 10px; 1234 } 1235.our-blog-header-section .blog-categories--mobile select { 1236 appearance: none; 1237 background: #1f252e url('data:image/svg+xml;
1237utf8,<svg fill="white" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 10l5 5 5-5z"/></svg>') no-repeat right 10px center; 1238 padding-right: 30px; 1239 background-size: 16px; 1240 border: 1px solid #ccc; 1241 border-radius: 4px; 1242 width: auto; 1243 text-align: center; 1244 font-size: 22px; 1245 font-weight: 600; 1246} 1247 1248} 1249</style> 1250</section><div id="shopify-section-template--26041088082193__spacer_zkWmdc" class="shopify-section section-spacer"><link href="//paceline.fit/cdn/shop/t/76/assets/spacer.css?v=17582184688244891781779034828" rel="stylesheet" type="text/css" media="all" /> 1251<div class="row"> 1252 <div class="small-12 columns"> 1253 <div class="spacer has-border-separator" style="--spacer-mobile: 0px; --spacer-desktop: 65px;"></div> 1254 </div> 1255</div> 1256 1257</div><div id="shopify-section-template--26041088082193__featured_blog_DfAD7r" class="shopify-section section-featured-blog"><div class="row"> 1258 <div class="small-12 columns"> 1259 <div class="blog-posts swipe-on-mobile section-spacing section-spacing--disable-top"> 1260 <div class="section-header"> 1261 <div class="section-header--content"><h3 class="section-header--title"> 1262 Nutrition 1263 1264 </h3></div><div class="section-header--button"> 1265 1266 <a href="/blogs/nutrition" title="View all posts" role="link" class="text-button text-button--has-icon" >View all posts <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1267<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1268</svg> 1269</span></a> 1270 1271 </div></div> 1272 <div class="row articles no-padding"> 1273 1274 1275 <div class="small-12 medium-4 columns"> 1276 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1277 <figure class="featured-image"> 1278 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1279 <a href="/blogs/nutrition/what-glp-1-users-actually-buy-protein-fiber-supplements" class="featured-image-link" title="What GLP-1 Users Actually Buy: Protein, Fiber, Supplements & Wraparound Wellness"></a> 1280 </div> 1281 </figure> 1282 <div class="blog-post-info"> 1283 1284 <aside class="post-meta"> 1285 September 22 2026 1286 </aside> 1287 1288 <h5><a href="/blogs/nutrition/what-glp-1-users-actually-buy-protein-fiber-supplements" title="What GLP-1 Users Actually Buy: Protein, Fiber, Supplements & Wraparound Wellness">What GLP-1 Users Actually Buy: Protein, Fiber, Supplements & Wraparound Wellness</a></h5> 1289 1290 <div class="post-excerpt"> 1291 <p>Most people on GLP-1 medications are not only eating lessâthey are rebuilding a shopping basket around protein, fiber, produce, and...</p> 1292 </div> 1293 1294 1295 1296 <a href="/blogs/nutrition/what-glp-1-users-actually-buy-protein-fiber-supplements" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1297<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1298</svg> 1299</span></a> 1300 1301 1302 </div> 1303</div> 1304 </div> 1305 1306 <div class="small-12 medium-4 columns"> 1307 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1308 <figure class="featured-image"> 1309 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1310 <a href="/blogs/nutrition/the-best-protein-powders-of-2026-compared" class="featured-image-link" title="The Best Protein Powders of 2026, Compared"></a> 1311 </div> 1312 </figure> 1313 <div class="blog-post-info"> 1314 1315 <aside class="post-meta"> 1316 July 21 2026 1317 </aside> 1318 1319 <h5><a href="/blogs/nutrition/the-best-protein-powders-of-2026-compared" title="The Best Protein Powders of 2026, Compared">The Best Protein Powders of 2026, Compared</a></h5> 1320 1321 <div class="post-excerpt"> 1322 <p>The best protein powders of 2026 fall into two broad camps: whey-based options for fast absorption and muscle repair, and...</p> 1323 </div> 1324 1325 1326 1327 <a href="/blogs/nutrition/the-best-protein-powders-of-2026-compared" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span>
1327<svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1328<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1329</svg> 1330</span></a> 1331 1332 1333 </div> 1334</div> 1335 </div> 1336 1337 <div class="small-12 medium-4 columns"> 1338 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1339 <figure class="featured-image"> 1340 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1341 <a href="/blogs/nutrition/protein-and-nutrition-on-glp-1-medications-how-to-eat-to-stay-strong" class="featured-image-link" title="Protein and Nutrition on GLP-1 Medications: How to Eat to Stay Strong"></a> 1342 </div> 1343 </figure> 1344 <div class="blog-post-info"> 1345 1346 <aside class="post-meta"> 1347 July 05 2026 1348 </aside> 1349 1350 <h5><a href="/blogs/nutrition/protein-and-nutrition-on-glp-1-medications-how-to-eat-to-stay-strong" title="Protein and Nutrition on GLP-1 Medications: How to Eat to Stay Strong">Protein and Nutrition on GLP-1 Medications: How to Eat to Stay Strong</a></h5> 1351 1352 <div class="post-excerpt"> 1353 <p>On a GLP-1 medication, eating well means prioritizing protein â roughly 1.2 to 1.6 grams per kilogram of body weight...</p> 1354 </div> 1355 1356 1357 1358 <a href="/blogs/nutrition/protein-and-nutrition-on-glp-1-medications-how-to-eat-to-stay-strong" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1359<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1360</svg> 1361</span></a> 1362 1363 1364 </div> 1365</div> 1366 </div> 1367 1368 1369 </div> 1370 </div> 1371 </div> 1372</div> 1373<link href="//paceline.fit/cdn/shop/t/76/assets/blog.css?v=94662841745255899761779034828" rel="stylesheet" type="text/css" media="all" /> 1374 1375</div><div id="shopify-section-template--26041088082193__featured_blog_WkGpkx" class="shopify-section section-featured-blog"><div class="row"> 1376 <div class="small-12 columns"> 1377 <div class="blog-posts swipe-on-mobile section-spacing section-spacing--disable-top"> 1378 <div class="section-header"> 1379 <div class="section-header--content"><h3 class="section-header--title"> 1380 Hydration 1381 1382 </h3></div><div class="section-header--button"> 1383 1384 <a href="/blogs/hydration" title="View all posts" role="link" class="text-button text-button--has-icon" >View all posts <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1385<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1386</svg> 1387</span></a> 1388 1389 </div></div> 1390 <div class="row articles no-padding"> 1391 1392 1393 <div class="small-12 medium-4 columns"> 1394 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1395 <figure class="featured-image"> 1396 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1397 <a href="/blogs/hydration/the-best-electrolyte-supplements-for-hydration-in-2026" class="featured-image-link" title="The Best Electrolyte Supplements for Hydration in 2026"></a> 1398 </div> 1399 </figure> 1400 <div class="blog-post-info"> 1401 1402 <aside class="post-meta"> 1403 July 28 2026 1404 </aside> 1405 1406 <h5><a href="/blogs/hydration/the-best-electrolyte-supplements-for-hydration-in-2026" title="The Best Electrolyte Supplements for Hydration in 2026">The Best Electrolyte Supplements for Hydration in 2026</a></h5> 1407 1408 <div class="post-excerpt"> 1409 <p>The best electrolyte supplements in 2026 combine sodium, potassium, magnesium, and chloride in clinically informed ratios to support fluid balance,...</p> 1410 </div> 1411 1412 1413 1414 <a href="/blogs/hydration/the-best-electrolyte-supplements-for-hydration-in-2026" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1415<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1416</svg> 1417</span></a> 1418 1419 1420 </div> 1421</div> 1422 </div> 1423 1424 <div class="small-12 medium-4 columns"> 1425 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1426 <figure class="featured-image"> 1427 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1428 <a href="/blogs/hydration/the-importance-of-hydration-fuel-for-exercise-and-everyday-life" class="featured-image-link" title="The Importance of Hydration: Fuel for Exercise and Everyday Life"> 1429<img class="lazyload " width="2973" height="4460" data-sizes="auto" src="//paceline.fit/cdn/shop/articles/a-wooden-tray-carries-a-cocktail-glass.jpg?crop=center&height=20&v=1721761455&width=20" data-srcset="//paceline.fit/cdn/shop/articles/a-wooden-tray-carries-a-cocktail-glass.jpg?v=1721761455&width=320 320w,//paceline.fit/cdn/shop/articles/a-wooden-tray-carries-a-cocktail-glass.jpg?v=1721761455&width=640 640w" fetchpriority="auto" alt="The Importance of Hydration: Fuel for Exercise and Everyday Life" /> 1430</a> 1431 </div> 1432 </figure> 1433 <div class="blog-post-info"> 1434 1435 <aside class="post-meta"> 1436 July 23 2024 1437 </aside> 1438 1439 <h5><a href="/blogs/hydration/the-importance-of-hydration-fuel-for-exercise-and-everyday-life" title="The Importance of Hydration: Fuel for Exercise and Everyday Life">The Importance of Hydration: Fuel for Exercise and Everyday Life</a></h5> 1440 1441 <div class="post-excerpt"> 1442 <p>Staying hydrated is a fundamental aspect of maintaining good health, whether youâre an elite athlete, a weekend warrior, or simply...</p> 1443 </div> 1444 1445 1446 1447 <a href="/blogs/hydration/the-importance-of-hydration-fuel-for-exercise-and-everyday-life" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span>
1447<svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1448<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1449</svg> 1450</span></a> 1451 1452 1453 </div> 1454</div> 1455 </div> 1456 1457 <div class="small-12 medium-4 columns"> 1458 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1459 <figure class="featured-image"> 1460 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1461 <a href="/blogs/hydration/electrolytes-what-are-the-benefits" class="featured-image-link" title="Electrolytes: What are the benefits?"> 1462<img class="lazyload " width="2973" height="4460" data-sizes="auto" src="//paceline.fit/cdn/shop/articles/clear-water-glass-reflecting-on-blue.jpg?crop=center&height=20&v=1712852913&width=20" data-srcset="//paceline.fit/cdn/shop/articles/clear-water-glass-reflecting-on-blue.jpg?v=1712852913&width=320 320w,//paceline.fit/cdn/shop/articles/clear-water-glass-reflecting-on-blue.jpg?v=1712852913&width=640 640w" fetchpriority="auto" alt="Electrolytes: What are the benefits?" /> 1463</a> 1464 </div> 1465 </figure> 1466 <div class="blog-post-info"> 1467 1468 <aside class="post-meta"> 1469 April 11 2024 1470 </aside> 1471 1472 <h5><a href="/blogs/hydration/electrolytes-what-are-the-benefits" title="Electrolytes: What are the benefits?">Electrolytes: What are the benefits?</a></h5> 1473 1474 <div class="post-excerpt"> 1475 <p>Â Electrolytes are essential minerals that carry an electric charge and play crucial roles in various bodily functions. Here are some...</p> 1476 </div> 1477 1478 1479 1480 <a href="/blogs/hydration/electrolytes-what-are-the-benefits" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1481<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1482</svg> 1483</span></a> 1484 1485 1486 </div> 1487</div> 1488 </div> 1489 1490 1491 </div> 1492 </div> 1493 </div> 1494</div> 1495<link href="//paceline.fit/cdn/shop/t/76/assets/blog.css?v=94662841745255899761779034828" rel="stylesheet" type="text/css" media="all" /> 1496 1497</div><div id="shopify-section-template--26041088082193__featured_blog_Y9BrRD" class="shopify-section section-featured-blog"><div class="row"> 1498 <div class="small-12 columns"> 1499 <div class="blog-posts swipe-on-mobile section-spacing section-spacing--disable-top"> 1500 <div class="section-header"> 1501 <div class="section-header--content"><h3 class="section-header--title"> 1502 Fitness 1503 1504 </h3></div><div class="section-header--button"> 1505 1506 <a href="/blogs/fitness" title="View all posts" role="link" class="text-button text-button--has-icon" >View all posts <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1507<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1508</svg> 1509</span></a> 1510 1511 </div></div> 1512 <div class="row articles no-padding"> 1513 1514 1515 <div class="small-12 medium-4 columns"> 1516 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1517 <figure class="featured-image"> 1518 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1519 <a href="/blogs/fitness/apple-watch-garmin-oura-whoop-heart-rate-hrv-accuracy" class="featured-image-link" title="Apple Watch vs Garmin vs Oura vs Whoop: How Accurate Are Heart Rate and HRV?"></a> 1520 </div> 1521 </figure> 1522 <div class="blog-post-info"> 1523 1524 <aside class="post-meta"> 1525 September 28 2026 1526 </aside> 1527 1528 <h5><a href="/blogs/fitness/apple-watch-garmin-oura-whoop-heart-rate-hrv-accuracy" title="Apple Watch vs Garmin vs Oura vs Whoop: How Accurate Are Heart Rate and HRV?">Apple Watch vs Garmin vs Oura vs Whoop: How Accurate Are Heart Rate and HRV?</a></h5> 1529 1530 <div class="post-excerpt"> 1531 <p>Most modern wearables get resting heart rate close to an ECG. The trouble starts when you exercise hard, and especially...</p> 1532 </div> 1533 1534 1535 1536 <a href="/blogs/fitness/apple-watch-garmin-oura-whoop-heart-rate-hrv-accuracy" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span>
1536<svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1537<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1538</svg> 1539</span></a> 1540 1541 1542 </div> 1543</div> 1544 </div> 1545 1546 <div class="small-12 medium-4 columns"> 1547 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1548 <figure class="featured-image"> 1549 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1550 <a href="/blogs/fitness/how-to-build-a-fitness-routine-you-will-actually-enjoy-and-keep" class="featured-image-link" title="How to Build a Fitness Routine You Will Actually Enjoy and Keep"></a> 1551 </div> 1552 </figure> 1553 <div class="blog-post-info"> 1554 1555 <aside class="post-meta"> 1556 September 15 2026 1557 </aside> 1558 1559 <h5><a href="/blogs/fitness/how-to-build-a-fitness-routine-you-will-actually-enjoy-and-keep" title="How to Build a Fitness Routine You Will Actually Enjoy and Keep">How to Build a Fitness Routine You Will Actually Enjoy and Keep</a></h5> 1560 1561 <div class="post-excerpt"> 1562 <p>The best way to build a fitness routine you stick to is to choose activities you genuinely enjoy, start smaller...</p> 1563 </div> 1564 1565 1566 1567 <a href="/blogs/fitness/how-to-build-a-fitness-routine-you-will-actually-enjoy-and-keep" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1568<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1569</svg> 1570</span></a> 1571 1572 1573 </div> 1574</div> 1575 </div> 1576 1577 <div class="small-12 medium-4 columns"> 1578 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1579 <figure class="featured-image"> 1580 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1581 <a href="/blogs/fitness/how-to-set-personalized-fitness-goals-that-actually-stick" class="featured-image-link" title="How to Set Personalized Fitness Goals That Actually Stick"></a> 1582 </div> 1583 </figure> 1584 <div class="blog-post-info"> 1585 1586 <aside class="post-meta"> 1587 August 11 2026 1588 </aside> 1589 1590 <h5><a href="/blogs/fitness/how-to-set-personalized-fitness-goals-that-actually-stick" title="How to Set Personalized Fitness Goals That Actually Stick">How to Set Personalized Fitness Goals That Actually Stick</a></h5> 1591 1592 <div class="post-excerpt"> 1593 <p>Setting personalized fitness goals means anchoring your targets to your current fitness level, lifestyle, and motivations â not someone else's...</p> 1594 </div> 1595 1596 1597 1598 <a href="/blogs/fitness/how-to-set-personalized-fitness-goals-that-actually-stick" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1599<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1600</svg> 1601</span></a> 1602 1603 1604 </div> 1605</div> 1606 </div> 1607 1608 1609 </div> 1610 </div> 1611 </div> 1612</div> 1613<link href="//paceline.fit/cdn/shop/t/76/assets/blog.css?v=94662841745255899761779034828" rel="stylesheet" type="text/css" media="all" /> 1614 1615</div><div id="shopify-section-template--26041088082193__featured_blog_wpUYE9" class="shopify-section section-featured-blog"><div class="row"> 1616 <div class="small-12 columns"> 1617 <div class="blog-posts swipe-on-mobile section-spacing section-spacing--disable-top"> 1618 <div class="section-header"> 1619 <div class="section-header--content"><h3 class="section-header--title"> 1620 Recovery 1621 1622 </h3></div><div class="section-header--button"> 1623 1624 <a href="/blogs/recovery" title="View all posts" role="link" class="text-button text-button--has-icon" >View all posts <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1625<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1626</svg> 1627</span></a> 1628 1629 </div></div> 1630 <div class="row articles no-padding"> 1631 1632 1633 <div class="small-12 medium-4 columns"> 1634 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1635 <figure class="featured-image"> 1636 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1637 <a href="/blogs/recovery/the-best-recovery-supplements-of-2026-tested" class="featured-image-link" title="The Best Recovery Supplements of 2026, Tested"></a> 1638 </div> 1639 </figure> 1640 <div class="blog-post-info"> 1641 1642 <aside class="post-meta"> 1643 September 17 2026 1644 </aside> 1645 1646 <h5><a href="/blogs/recovery/the-best-recovery-supplements-of-2026-tested" title="The Best Recovery Supplements of 2026, Tested">The Best Recovery Supplements of 2026, Tested</a></h5> 1647 1648 <div class="post-excerpt"> 1649 <p>Recovery isn't one thing. It's sleep, it's nutrition, it's what you do between sessions that lets you come back steady....</p> 1650 </div> 1651 1652 1653 1654 <a href="/blogs/recovery/the-best-recovery-supplements-of-2026-tested" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span>
1654<svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1655<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1656</svg> 1657</span></a> 1658 1659 1660 </div> 1661</div> 1662 </div> 1663 1664 <div class="small-12 medium-4 columns"> 1665 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1666 <figure class="featured-image"> 1667 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1668 <a href="/blogs/recovery/the-best-recovery-brands-of-2026-tested" class="featured-image-link" title="The Best Recovery Brands of 2026, Tested"></a> 1669 </div> 1670 </figure> 1671 <div class="blog-post-info"> 1672 1673 <aside class="post-meta"> 1674 June 23 2026 1675 </aside> 1676 1677 <h5><a href="/blogs/recovery/the-best-recovery-brands-of-2026-tested" title="The Best Recovery Brands of 2026, Tested">The Best Recovery Brands of 2026, Tested</a></h5> 1678 1679 <div class="post-excerpt"> 1680 <p>The best recovery brands of 2026 include Hyperice, Normatec, RAD Roller, Therabody, and Bala â each offering distinct muscle recovery...</p> 1681 </div> 1682 1683 1684 1685 <a href="/blogs/recovery/the-best-recovery-brands-of-2026-tested" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1686<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1687</svg> 1688</span></a> 1689 1690 1691 </div> 1692</div> 1693 </div> 1694 1695 <div class="small-12 medium-4 columns"> 1696 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1697 <figure class="featured-image"> 1698 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1699 <a href="/blogs/recovery/the-complete-post-workout-recovery-routine" class="featured-image-link" title="The Complete Post-Workout Recovery Routine"></a> 1700 </div> 1701 </figure> 1702 <div class="blog-post-info"> 1703 1704 <aside class="post-meta"> 1705 June 16 2026 1706 </aside> 1707 1708 <h5><a href="/blogs/recovery/the-complete-post-workout-recovery-routine" title="The Complete Post-Workout Recovery Routine">The Complete Post-Workout Recovery Routine</a></h5> 1709 1710 <div class="post-excerpt"> 1711 <p>Building a consistent post-workout recovery routine is just as important as the training itself â yet it's the part most...</p> 1712 </div> 1713 1714 1715 1716 <a href="/blogs/recovery/the-complete-post-workout-recovery-routine" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1717<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1718</svg> 1719</span></a> 1720 1721 1722 </div> 1723</div> 1724 </div> 1725 1726 1727 </div> 1728 </div> 1729 </div> 1730</div> 1731<link href="//paceline.fit/cdn/shop/t/76/assets/blog.css?v=94662841745255899761779034828" rel="stylesheet" type="text/css" media="all" /> 1732 1733</div><div id="shopify-section-template--26041088082193__featured_blog_diGpRx" class="shopify-section section-featured-blog"><div class="row"> 1734 <div class="small-12 columns"> 1735 <div class="blog-posts swipe-on-mobile section-spacing section-spacing--disable-top"> 1736 <div class="section-header"> 1737 <div class="section-header--content"><h3 class="section-header--title"> 1738 Sleep 1739 1740 </h3></div><div class="section-header--button"> 1741 1742 <a href="/blogs/sleep" title="View all posts" role="link" class="text-button text-button--has-icon" >View all posts <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1743<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1744</svg> 1745</span></a> 1746 1747 </div></div> 1748 <div class="row articles no-padding"> 1749 1750 1751 <div class="small-12 medium-4 columns"> 1752 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1753 <figure class="featured-image"> 1754 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1755 <a href="/blogs/sleep/the-best-cooling-bedding-for-hot-sleepers-in-2026" class="featured-image-link" title="The Best Cooling Bedding for Hot Sleepers in 2026"></a> 1756 </div> 1757 </figure> 1758 <div class="blog-post-info"> 1759 1760 <aside class="post-meta"> 1761 July 07 2026 1762 </aside> 1763 1764 <h5><a href="/blogs/sleep/the-best-cooling-bedding-for-hot-sleepers-in-2026" title="The Best Cooling Bedding for Hot Sleepers in 2026">The Best Cooling Bedding for Hot Sleepers in 2026</a></h5> 1765 1766 <div class="post-excerpt"> 1767 <p>The best cooling bedding for hot sleepers in 2026 combines breathable natural fiber
1767s â particularly eucalyptus and bamboo â with...</p> 1768 </div> 1769 1770 1771 1772 <a href="/blogs/sleep/the-best-cooling-bedding-for-hot-sleepers-in-2026" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1773<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1774</svg> 1775</span></a> 1776 1777 1778 </div> 1779</div> 1780 </div> 1781 1782 <div class="small-12 medium-4 columns"> 1783 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1784 <figure class="featured-image"> 1785 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1786 <a href="/blogs/sleep/sleep-and-fitness-how-a-good-nights-sleep-can-improve-your-performance" class="featured-image-link" title="Sleep and Fitness: How a Good Night's Sleep Can Improve Your Performance"> 1787<img class="lazyload " width="1344" height="768" data-sizes="auto" src="//paceline.fit/cdn/shop/articles/out-0_eac119ef-bd14-4c77-8332-dfc56e9b5e7a.png?crop=center&height=20&v=1739228675&width=20" data-srcset="//paceline.fit/cdn/shop/articles/out-0_eac119ef-bd14-4c77-8332-dfc56e9b5e7a.png?v=1739228675&width=320 320w,//paceline.fit/cdn/shop/articles/out-0_eac119ef-bd14-4c77-8332-dfc56e9b5e7a.png?v=1739228675&width=640 640w" fetchpriority="auto" alt="Sleep and Fitness: How a Good Night's Sleep Can Improve Your Performance" /> 1788</a> 1789 </div> 1790 </figure> 1791 <div class="blog-post-info"> 1792 1793 <aside class="post-meta"> 1794 October 03 2024 1795 </aside> 1796 1797 <h5><a href="/blogs/sleep/sleep-and-fitness-how-a-good-nights-sleep-can-improve-your-performance" title="Sleep and Fitness: How a Good Night's Sleep Can Improve Your Performance">Sleep and Fitness: How a Good Night's Sleep Can Improve Your Performance</a></h5> 1798 1799 <div class="post-excerpt"> 1800 <p>It's no secret that getting enough sleep is crucial for our overall health and well-being. But did you know that...</p> 1801 </div> 1802 1803 1804 1805 <a href="/blogs/sleep/sleep-and-fitness-how-a-good-nights-sleep-can-improve-your-performance" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1806<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1807</svg> 1808</span></a> 1809 1810 1811 </div> 1812</div> 1813 </div> 1814 1815 <div class="small-12 medium-4 columns"> 1816 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1817 <figure class="featured-image"> 1818 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1819 <a href="/blogs/sleep/alcohol-and-its-effect-on-sleep-exercise-what-you-need-to-know" class="featured-image-link" title="Sober October? Alcohol and its Effect on Sleep & Exercise"> 1820<img class="lazyload " width="4460" height="2974" data-sizes="auto" src="//paceline.fit/cdn/shop/articles/pouring-alcohol-with-jigger.jpg?crop=center&height=20&v=1727292648&width=20" data-srcset="//paceline.fit/cdn/shop/articles/pouring-alcohol-with-jigger.jpg?v=1727292648&width=320 320w,//paceline.fit/cdn/shop/articles/pouring-alcohol-with-jigger.jpg?v=1727292648&width=640 640w" fetchpriority="auto" alt="Sober October? Alcohol and its Effect on Sleep & Exercise" /> 1821</a> 1822 </div> 1823 </figure> 1824 <div class="blog-post-info"> 1825 1826 <aside class="post-meta"> 1827 September 25 2024 1828 </aside> 1829 1830 <h5><a href="/blogs/sleep/alcohol-and-its-effect-on-sleep-exercise-what-you-need-to-know" title="Sober October? Alcohol and its Effect on Sleep & Exercise">Sober October? Alcohol and its Effect on Sleep & Exercise</a></h5> 1831 1832 <div class="post-excerpt"> 1833 <p>Alcohol is often seen as a way to relax after a long day, celebrate with friends, or unwind after a...</p> 1834 </div> 1835 1836 1837 1838 <a href="/blogs/sleep/alcohol-and-its-effect-on-sleep-exercise-what-you-need-to-know" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span>
1838<svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1839<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1840</svg> 1841</span></a> 1842 1843 1844 </div> 1845</div> 1846 </div> 1847 1848 1849 </div> 1850 </div> 1851 </div> 1852</div> 1853<link href="//paceline.fit/cdn/shop/t/76/assets/blog.css?v=94662841745255899761779034828" rel="stylesheet" type="text/css" media="all" /> 1854 1855</div><div id="shopify-section-template--26041088082193__featured_blog_J9zBBG" class="shopify-section section-featured-blog"><div class="row"> 1856 <div class="small-12 columns"> 1857 <div class="blog-posts swipe-on-mobile section-spacing section-spacing--disable-top"> 1858 <div class="section-header"> 1859 <div class="section-header--content"><h3 class="section-header--title"> 1860 Mindfulness 1861 1862 </h3></div><div class="section-header--button"> 1863 1864 <a href="/blogs/mindfulness" title="View all posts" role="link" class="text-button text-button--has-icon" >View all posts <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1865<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1866</svg> 1867</span></a> 1868 1869 </div></div> 1870 <div class="row articles no-padding"> 1871 1872 1873 <div class="small-12 medium-4 columns"> 1874 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1875 <figure class="featured-image"> 1876 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1877 <a href="/blogs/mindfulness/why-you-should-choose-organic-and-natural-fabrics-for-your-clothing" class="featured-image-link" title="Why You Should Choose Organic and Natural Fabrics for Your Clothing"> 1878<img class="lazyload " width="4460" height="2973" data-sizes="auto" src="//paceline.fit/cdn/shop/articles/white-cotton-t-shirts-on-store-rack.jpg?crop=center&height=20&v=1739919145&width=20" data-srcset="//paceline.fit/cdn/shop/articles/white-cotton-t-shirts-on-store-rack.jpg?v=1739919145&width=320 320w,//paceline.fit/cdn/shop/articles/white-cotton-t-shirts-on-store-rack.jpg?v=1739919145&width=640 640w" fetchpriority="auto" alt="Why You Should Choose Organic and Natural Fabrics for Your Clothing" /> 1879</a> 1880 </div> 1881 </figure> 1882 <div class="blog-post-info"> 1883 1884 <aside class="post-meta"> 1885 February 18 2025 1886 </aside> 1887 1888 <h5><a href="/blogs/mindfulness/why-you-should-choose-organic-and-natural-fabrics-for-your-clothing" title="Why You Should Choose Organic and Natural Fabrics for Your Clothing">Why You Should Choose Organic and Natural Fabrics for Your Clothing</a></h5> 1889 1890 <div class="post-excerpt"> 1891 <p>In a world where fast fashion dominates, the materials we wear often take a backseat to style and affordability. However,...</p> 1892 </div> 1893 1894 1895 1896 <a href="/blogs/mindfulness/why-you-should-choose-organic-and-natural-fabrics-for-your-clothing" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1897<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1898</svg> 1899</span></a> 1900 1901 1902 </div> 1903</div> 1904 </div> 1905 1906 <div class="small-12 medium-4 columns"> 1907 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1908 <figure class="featured-image"> 1909 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1910 <a href="/blogs/mindfulness/the-hidden-dangers-of-fragrance-why-you-should-choose-clean-scents" class="featured-image-link" title="The Hidden Dangers of Fragrance: Why You Should Choose Clean Scents"> 1911<img class="lazyload " width="990" height="990" data-sizes="auto" src="//paceline.fit/cdn/shop/articles/Vitruvi_Humidifier.webp?crop=center&height=20&v=1739229453&width=20" data-srcset="//paceline.fit/cdn/shop/articles/Vitruvi_Humidifier.webp?v=1739229453&width=320 320w,//paceline.fit/cdn/shop/articles/Vitruvi_Humidifier.webp?v=1739229453&width=640 640w" fetchpriority="auto" alt="The Hidden Dangers of Fragrance: Why You Should Choose Clean Scents" /> 1912</a> 1913 </div> 1914 </figure> 1915 <div class="blog-post-info"> 1916 1917 <aside class="post-meta"> 1918 February 10 2025 1919 </aside> 1920 1921 <h5><a href="/blogs/mindfulness/the-hidden-dangers-of-fragrance-why-you-should-choose-clean-scents" title="The Hidden Dangers of Fragrance: Why You Should Choose Clean Scents">The Hidden Dangers of Fragrance: Why You Should Choose Clean Scents</a></h5> 1922 1923 <div class="post-excerpt"> 1924 <p>From perfumes to candles, room sprays to laundry detergents, fragrances are everywhere. But while they may smell delightful, many synthetic...</p> 1925 </div> 1926 1927 1928 1929 <a href="/blogs/mindfulness/the-hidden-dangers-of-fragrance-why-you-should-choose-clean-scents" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span>
1929<svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1930<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1931</svg> 1932</span></a> 1933 1934 1935 </div> 1936</div> 1937 </div> 1938 1939 <div class="small-12 medium-4 columns"> 1940 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1941 <figure class="featured-image"> 1942 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 1943 <a href="/blogs/mindfulness/the-importance-of-skincare-for-health-why-what-you-put-on-your-skin-matters" class="featured-image-link" title="The Importance of Skincare for Health: Why What You Put on Your Skin Matters"> 1944<img class="lazyload " width="2977" height="4460" data-sizes="auto" src="//paceline.fit/cdn/shop/articles/hand-holds-a-skin-exfoliator-towards-the-camera.jpg?crop=center&height=20&v=1736891445&width=20" data-srcset="//paceline.fit/cdn/shop/articles/hand-holds-a-skin-exfoliator-towards-the-camera.jpg?v=1736891445&width=320 320w,//paceline.fit/cdn/shop/articles/hand-holds-a-skin-exfoliator-towards-the-camera.jpg?v=1736891445&width=640 640w" fetchpriority="auto" alt="The Importance of Skincare for Health: Why What You Put on Your Skin Matters" /> 1945</a> 1946 </div> 1947 </figure> 1948 <div class="blog-post-info"> 1949 1950 <aside class="post-meta"> 1951 January 14 2025 1952 </aside> 1953 1954 <h5><a href="/blogs/mindfulness/the-importance-of-skincare-for-health-why-what-you-put-on-your-skin-matters" title="The Importance of Skincare for Health: Why What You Put on Your Skin Matters">The Importance of Skincare for Health: Why What You Put on Your Skin Matters</a></h5> 1955 1956 <div class="post-excerpt"> 1957 <p>Â Skincare is often thought of as a luxury or beauty routine, but itâs much more than just vanity. The...</p> 1958 </div> 1959 1960 1961 1962 <a href="/blogs/mindfulness/the-importance-of-skincare-for-health-why-what-you-put-on-your-skin-matters" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1963<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1964</svg> 1965</span></a> 1966 1967 1968 </div> 1969</div> 1970 </div> 1971 1972 1973 </div> 1974 </div> 1975 </div> 1976</div> 1977<link href="//paceline.fit/cdn/shop/t/76/assets/blog.css?v=94662841745255899761779034828" rel="stylesheet" type="text/css" media="all" /> 1978 1979</div><div id="shopify-section-template--26041088082193__featured_blog_qcDq7i" class="shopify-section section-featured-blog"><div class="row"> 1980 <div class="small-12 columns"> 1981 <div class="blog-posts swipe-on-mobile section-spacing section-spacing--disable-top"> 1982 <div class="section-header"> 1983 <div class="section-header--content"><h3 class="section-header--title"> 1984 News 1985 1986 </h3></div><div class="section-header--button"> 1987 1988 <a href="/blogs/news" title="View all posts" role="link" class="text-button text-button--has-icon" >View all posts <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1989<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 1990</svg> 1991</span></a> 1992 1993 </div></div> 1994 <div class="row articles no-padding"> 1995 1996 1997 <div class="small-12 medium-4 columns"> 1998 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 1999 <figure class="featured-image"> 2000 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 2001 <a href="/blogs/news/protect-your-active-life-introducing-hooray-health-sol-lite-accident-coverage-underwritten-by-zurich" class="featured-image-link" title="Protect Your Active Life: Accident
2001Coverage"> 2002<img class="lazyload " width="3072" height="2109" data-sizes="auto" src="//paceline.fit/cdn/shop/articles/slipchair.png?crop=center&height=20&v=1750798918&width=20" data-srcset="//paceline.fit/cdn/shop/articles/slipchair.png?v=1750798918&width=320 320w,//paceline.fit/cdn/shop/articles/slipchair.png?v=1750798918&width=640 640w" fetchpriority="auto" alt="Protect Your Active Life: Accident Coverage" /> 2003</a> 2004 </div> 2005 </figure> 2006 <div class="blog-post-info"> 2007 2008 <aside class="post-meta"> 2009 April 17 2025 2010 </aside> 2011 2012 <h5><a href="/blogs/news/protect-your-active-life-introducing-hooray-health-sol-lite-accident-coverage-underwritten-by-zurich" title="Protect Your Active Life: Accident Coverage">Protect Your Active Life: Accident Coverage</a></h5> 2013 2014 <div class="post-excerpt"> 2015 <p>Weâve all been thereâa sprained ankle during a soccer game, a slip on icy pavement, or an unexpected tumble on...</p> 2016 </div> 2017 2018 2019 2020 <a href="/blogs/news/protect-your-active-life-introducing-hooray-health-sol-lite-accident-coverage-underwritten-by-zurich" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 2021<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 2022</svg> 2023</span></a> 2024 2025 2026 </div> 2027</div> 2028 </div> 2029 2030 <div class="small-12 medium-4 columns"> 2031 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 2032 <figure class="featured-image"> 2033 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 2034 <a href="/blogs/news/celebrating-women-in-fitness-and-health-international-women-s-day-2025" class="featured-image-link" title="Celebrating Women in Fitness and Health: International Womenâs Day 2025"> 2035<img class="lazyload " width="4460" height="2973" data-sizes="auto" src="//paceline.fit/cdn/shop/articles/three-women-stand-together-celebrating-women-s-day.jpg?crop=center&height=20&v=1740073865&width=20" data-srcset="//paceline.fit/cdn/shop/articles/three-women-stand-together-celebrating-women-s-day.jpg?v=1740073865&width=320 320w,//paceline.fit/cdn/shop/articles/three-women-stand-together-celebrating-women-s-day.jpg?v=1740073865&width=640 640w" fetchpriority="auto" alt="Celebrating Women in Fitness and Health: International Womenâs Day 2025" /> 2036</a> 2037 </div> 2038 </figure> 2039 <div class="blog-post-info"> 2040 2041 <aside class="post-meta"> 2042 February 20 2025 2043 </aside> 2044 2045 <h5><a href="/blogs/news/celebrating-women-in-fitness-and-health-international-women-s-day-2025" title="Celebrating Women in Fitness and Health: International Womenâs Day 2025">Celebrating Women in Fitness and Health: International Womenâs Day 2025</a></h5> 2046 2047 <div class="post-excerpt"> 2048 <p>On March 8, 2025, join us in celebrating International Womenâs Day under the theme, âFor ALL women and girls: Rights....</p> 2049 </div> 2050 2051 2052 2053 <a href="/blogs/news/celebrating-women-in-fitness-and-health-international-women-s-day-2025" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span><svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 2054<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 2055</svg> 2056</span></a> 2057 2058 2059 </div> 2060</div> 2061 </div> 2062 2063 <div class="small-12 medium-4 columns"> 2064 <div class="blog-post text-left blog-post--content-spacing-true blog-post--border-true has-shadow--true"> 2065 <figure class="featured-image"> 2066 <div class="aspect-ratio" style="--ratio-percent: 100%;"> 2067 <a href="/blogs/news/january-wins-how-paceline-members-crushed-their-goals-and-how-to-keep-going" class="featured-image-link" title="January Wins: How Paceline Members Crushed Their Goals and How to Keep Going"> 2068<img class="lazyload " width="4460" height="2973" data-sizes="auto" src="//paceline.fit/cdn/shop/articles/burning-sparkler-close-up.jpg?crop=center&height=20&v=1738349888&width=20" data-srcset="//paceline.fit/cdn/shop/articles/burning-sparkler-close-up.jpg?v=1738349888&width=320 320w,//paceline.fit/cdn/shop/articles/burning-sparkler-close-up.jpg?v=1738349888&width=640 640w" fetchpriority="auto" alt="January Wins: How Paceline Members Crushed Their Goals and How to Keep Going" /> 2069</a> 2070 </div> 2071 </figure> 2072 <div class="blog-post-info"> 2073 2074 <aside class="post-meta"> 2075 January 31 2025 2076 </aside> 2077 2078 <h5><a href="/blogs/news/january-wins-how-paceline-members-crushed-their-goals-and-how-to-keep-going" title="January Wins: How Paceline Members Crushed Their Goals and How to Keep Going">January Wins: How Paceline Members Crushed Their Goals and How to Keep Going</a></h5> 2079 2080 <div class="post-excerpt"> 2081 <p>The first month of the year is officially in the books, and Paceline members started 2025 strong! The numbers speak...</p> 2082 </div> 2083 2084 2085 2086 <a href="/blogs/news/january-wins-how-paceline-members-crushed-their-goals-and-how-to-keep-going" title="Read more" role="link" class="text-button read-more text-button--has-icon" >Read more <span>
2086<svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 2087<path d="M1 1L5 5L1 9" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 2088</svg> 2089</span></a> 2090 2091 2092 </div> 2093</div> 2094 </div> 2095 2096 2097 </div> 2098 </div> 2099 </div> 2100</div> 2101<link href="//paceline.fit/cdn/shop/t/76/assets/blog.css?v=94662841745255899761779034828" rel="stylesheet" type="text/css" media="all" /> 2102 2103</div> 2104 </div> 2105 <!-- BEGIN sections: footer-group --> 2106<section id="shopify-section-sections--26041080447249__footer_first_Y3aYCT" class="shopify-section shopify-section-group-footer-group custom-footer"> 2107 2108<style> 2109.custom-footer { 2110 background: #1f252e; 2111 padding-top: 150px; 2112 border-bottom: 1px solid #374353; 2113 padding-bottom: 50px; 2114} 2115.custom-footer-logo img { 2116 height: 95px; 2117} 2118.custom-footer-social-icons img{ 2119 height: 48px 2120} 2121.custom-footer-social-icons a img { 2122 transition: transform 0.3s ease; 2123} 2124 2125.custom-footer-social-icons a:hover img { 2126 transform: translateY(-13px); 2127} 2128 2129/********Responsiveness Start******/ 2130@media (max-width: 767px) { 2131.custom-footer footer { 2132 flex-direction: column; 2133 gap: 50px; 2134} 2135.custom-footer { 2136 padding-top: 65px; 2137 padding-bottom: 50px; 2138 width: 100% !important; 2139} 2140.custom-footer-social-icons img { 2141 height: 48px !important; 2142} 2143 2144.custom-footer-logo img { 2145 height: 65px; 2146} 2147.custom-footer-social-icons { 2148 gap: 40px !important; 2149} 2150.custom-footer-links { 2151 padding-bottom: 65px !important; 2152} 2153} 2154@media (max-width: 480px) { 2155 .footer-links { 2156 display: flex; 2157 gap: 14px !important; 2158 flex-direction: column; 2159} 2160} 2161</style> 2162 2163<footer style="display: flex; justify-content: space-between; align-items: center; padding: 20px;"> 2164 <!-- Left: Logo --> 2165 <div class="custom-footer-logo"> 2166 2167 <img src="//paceline.fit/cdn/shop/files/Paceline_Master_Logo_2026_Lock-up_1_1_0456c8c7-8c6a-4d88-85e7-55e26c45cc6c.png?v=1776433892" alt="Logo"> 2168 2169 </div> 2170 2171 <!-- Right: Social Icons --> 2172 <div class="custom-footer-social-icons" style="display: flex; gap: 15px;"> 2173 2174 <a href="/instagram" target="_blank"> 2175 <img src="//paceline.fit/cdn/shop/files/instagram_medium.png?v=1744195213" alt="Instagram" style="height: 64px;"> 2176 </a> 2177 2178 2179 2180 <a href="/linkedin" target="_blank"> 2181 <img src="//paceline.fit/cdn/shop/files/linkedin_medium.png?v=1744195213" alt="LinkedIn" style="height: 64px;"> 2182 </a> 2183 2184 2185 2186 <a href="/tiktok" target="_blank"> 2187 <img src="//paceline.fit/cdn/shop/files/tiktok_medium.png?v=1744195213" alt="TikTok" style="height: 64px;"> 2188 </a> 2189 2190 </div> 2191</footer> 2192</section><section id="shopify-section-sections--26041080447249__footer_second_REyyEm" class="shopify-section shopify-section-group-footer-group custom-footer-links"> 2193 2194<style> 2195.custom-footer-links { 2196 background: #1f252e; 2197 padding-top: 50px; 2198 padding-bottom: 150px; 2199 width: 100% !important; 2200} 2201.custom-footer-links a { 2202 text-transform: uppercase; 2203} 2204.footer-links-wrapper { 2205 display: flex; 2206 justify-content: space-between; 2207 flex-wrap: wrap; 2208 padding: 20px; 2209 gap: 20px; 2210 width: 100%; 2211} 2212 2213.footer-text { 2214 flex: 1; 2215 min-width: 410px; 2216} 2217 2218.footer-links { 2219 display: flex; 2220 gap: 40px; 2221 flex: 3; 2222 justify-content: flex-end; 2223 flex-wrap: wrap; 2224} 2225.footer-column { 2226 display: flex; 2227 flex-direction: column; 2228 gap: 8px; 2229 min-width: 100px; 2230} 2231 2232@media (max-width: 900px) { 2233 .footer-links-wrapper { 2234 flex-direction: column; 2235 align-items: flex-start; 2236 } 2237.footer-text { 2238 min-width: unset !important; 2239} 2240 .footer-text { 2241 margin-bottom: 15px; 2242 } 2243 2244 .footer-links { 2245 width: 100%; 2246 display: flex; 2247 justify-content: space-between; 2248 gap: 0; 2249 } 2250 2251 .footer-column { 2252 flex: 1; 2253 min-width: auto; 2254 gap: 10px; 2255 } 2256 2257 /* .footer-links .footer-column:nth-child(n+3) { 2258 display: none; 2259 } 2260 2261 .footer-links::after { 2262 content: ''; 2263 flex: 1; 2264 } */ 2265.footer-links-wrapper { 2266 flex-direction: column-reverse; 2267} 2268.footer-links-wrapper { 2269 gap: 50px; 2270} 2271.custom-footer-links { 2272 padding-bottom: 30px !important; 2273} 2274} 2275</style> 2276 2277<div class="footer-links-wrapper"> 2278 <div class="footer-text"> 2279 <p>Copyright © 2026 Tam(squared) Inc. All rights reserved.</p> 2280 </div> 2281 2282 <div class="footer-links"> 2283 <div class="footer-column"> 2284 2285<a href="https://paceline.fit/">Paceline</a> 2286<a href="/pages/about-us">About us</a> 2287<a href="/pages/blogs">The minutes</a> 2288<a href="/pages/faqs">Help Center & FAQs</a> 2289<a href="/pages/privacy-policy">Privacy Policy</a> 2290<a href="/pages/terms">Terms</a> 2291<a href="/pages/health-data-privacy-policy">Health Data Privacy</a> 2292<a href="/pages/careers">Careers</a> 2293 </div> 2294 <div class="footer-column"> 2295 2296<a href="/pages/cookie-and-tracking-technologies-notice">Cookies</a> 2297<a href="#cookie-preferences">Cookie Preferences</a> 2298<a href="/pages/rewards-program-terms">Rewards Program Terms</a>
2299<a href="/pages/canada-and-quebec-addendum">Canada and Quebec Addendum</a> 2300<a href="/policies/refund-policy">Marketplace Return Policy</a> 2301<a href="/pages/data-sharing-opt-out">Do Not Sell or Share My Personal Information</a> 2302 </div> 2303 </div> 2304</div> 2305</section> 2306<!-- END sections: footer-group --> 2307 <cart-drawer class="side-panel cart-drawer has-shadow--false" id="Cart-Drawer" tabindex="-1"> 2308 <div class="side-panel-inner"> 2309 <div class="side-panel-header"> 2310 <div> 2311 <span class="h6">Cart <sup>0</sup></span> 2312 <side-panel-close class="side-panel-close"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 2313<path d="M13 1L1 13M13 13L1 1" stroke="var(--color-body)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2314</svg></side-panel-close> 2315 </div> 2316 </div> 2317 <div class="side-panel-content"><div class="cart-drawer__empty-cart"> 2318 <svg width="82" height="82" viewBox="0 0 82 82" fill="none" xmlns="http://www.w3.org/2000/svg"> 2319<path d="M63.2133 82.0001C58.4983 82.0001 54.6765 78.1637 54.6765 73.4633C54.6765 68.7483 58.5129 64.9265 63.2133 64.9265C67.9137 64.9265 71.7501 68.7629 71.7501 73.4633C71.7501 78.1637 67.9137 82.0001 63.2133 82.0001ZM63.2133 68.3383C60.3872 68.3383 58.0883 70.6372 58.0883 73.4633C58.0883 76.2894 60.3872 78.5883 63.2133 78.5883C66.0394 78.5883 68.3383 76.2894 68.3383 73.4633C68.3383 70.6372 66.0394 68.3383 63.2133 68.3383Z" fill="var(--color-accent)"/> 2320<path d="M29.0368 82.0001C24.3218 82.0001 20.5 78.1637 20.5 73.4633C20.5 68.7483 24.3364 64.9265 29.0368 64.9265C33.7372 64.9265 37.5736 68.7629 37.5736 73.4633C37.5882 78.1637 33.7518 82.0001 29.0368 82.0001ZM29.0368 68.3383C26.2107 68.3383 23.9118 70.6372 23.9118 73.4633C23.9118 76.2894 26.2107 78.5883 29.0368 78.5883C31.8629 78.5883 34.1618 76.2894 34.1618 73.4633C34.1618 70.6372 31.8629 68.3383 29.0368 68.3383Z" fill="var(--color-accent)"/> 2321<path d="M70.0368 61.4999H30.6036C24.9221 61.4999 20.0021 57.4585 18.8746 51.8942L10.5575 10.2499H1.71321C0.761429 10.2499 0 9.48849 0 8.5367C0 7.59956 0.761429 6.82349 1.71321 6.82349H11.9632C12.7832 6.82349 13.4714 7.39456 13.6325 8.19991L22.2425 51.206C23.0332 55.1888 26.5621 58.0735 30.6182 58.0735H70.0514C70.9886 58.0735 71.7646 58.8349 71.7646 59.7867C71.75 60.7385 70.9886 61.4999 70.0368 61.4999Z" fill="var(--color-accent)"/> 2322<path d="M67.4304 47.8383H20.5001C19.5629 47.8383 18.7869 47.0768 18.7869 46.125C18.7869 45.1733 19.5483 44.4118 20.5001 44.4118H67.4304C70.0076 44.4118 72.204 42.479 72.5115 39.9165C72.6286 38.9793 73.5365 38.3204 74.4151 38.4376C75.3522 38.5547 76.0111 39.404 75.894 40.3411C75.3668 44.6168 71.7208 47.8383 67.4304 47.8383Z" fill="var(--color-accent)"/> 2323<path d="M39.2869 20.4999H15.3751C14.4379 20.4999 13.6619 19.7385 13.6619 18.7867C13.6619 17.8496 14.4233 17.0735 15.3751 17.0735H39.2869C40.224 17.0735 41.0001 17.8349 41.0001 18.7867C41.0001 19.7385 40.2386 20.4999 39.2869 20.4999Z" fill="var(--color-accent)"/> 2324<path d="M63.2133 37.5882C52.8608 37.5882 44.4265 29.1539 44.4265 18.8014C44.4265 8.44893 52.8462 0 63.2133 0C73.5658 0 82.0001 8.43429 82.0001 18.7868C82.0001 29.1393 73.5658 37.5882 63.2133 37.5882ZM63.2133 3.41179C54.7351 3.41179 47.8383 10.3086 47.8383 18.7868C47.8383 27.265 54.7351 34.1618 63.2133 34.1618C71.6915 34.1618 78.5883 27.265 78.5883 18.7868C78.5883 10.3086 71.6915 3.41179 63.2133 3.41179Z" fill="var(--color-accent)"/> 2325<path d="M70.0368 27.3382C69.5976 27.3382 69.1583 27.1771 68.8215 26.8404L55.1597 13.1786C54.4861 12.505 54.4861 11.4361 55.1597 10.7625C55.8333 10.0889 56.9022 10.0889 57.5758 10.7625L71.2376 24.4243C71.9111 25.0979 71.9111 26.1668 71.2376 26.8404C70.9154 27.1625 70.4761 27.3382 70.0368 27.3382Z" fill="var(--color-accent)"/> 2326<path d="M56.3751 27.3382C55.9358 27.3382 55.4965 27.1771 55.1597 26.8404C54.4861 26.1668 54.4861 25.0979 55.1597 24.4243L68.8215 10.7625C69.4951 10.0889 70.564 10.0889 71.2376 10.7625C71.9111 11.4361 71.9111 12.505 71.2376 13.1786L57.5758 26.8404C57.2536 27.1625 56.8144 27.3382 56.3751 27.3382Z" fill="var(--color-accent)"/> 2327</svg> 2328 <p>Your cart is currently empty.</p> 2329 <a class="button accent2" href="/collections/all"><span>Start Shopping</span></a> 2330 </div></div></div> 2331</cart-drawer> 2332 <link id="Product" rel="stylesheet" href="//paceline.fit/cdn/shop/t/76/assets/product.css?v=152283141068544812601782421677" media="print" onload="this.media='all'"> 2333<div class="side-panel product-drawer" id="Product-Drawer" tabindex="-1"> 2334 <div class="side-panel-inner"> 2335 <side-panel-close class="side-panel-close"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 2336<path d="M13 1L1 13M13 13L1 1" stroke="var(--color-body)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2337</svg></side-panel-close> 2338 <div class="side-panel-content" id="Product-Drawer-Content"> 2339 2340 </div> 2341 </div> 2342</div> 2343 <div class="side-panel search-drawer" tabindex="-1" id="Search-Drawer"> 2344 <search-form data-drawer="1" class="side-panel-inner searchform"> 2345 <div class="side-panel-header"> 2346 <div> 2347 <form role="search" method="get" class="searchform" action="/search"> 2348 <fieldset> 2349 <label for="side-panel-search-input">Search</label> 2350 <input id="side-panel-search-input" type="search" class="search-field" placeholder="Search for brands, products, workouts, etc." value="" name="q" autocomplete="off"> 2351 </fieldset> 2352 </form> 2353 <side-panel-close class="side-panel-close"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 2354<path d="M13 1L1 13M13 13L1 1" stroke="var(--color-body)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2355</svg></side-panel-close> 2356 </div> 2357 </div><div class="side-panel-content side-panel-content--has-tabs thb-predictive-search"> 2358 2359 </div><div class="side-panel-content side-panel-content--initial"> 2360 <div class="thb-predictive-search"><div class="thb-predictive-search--promotion product-card-spacing-small"> 2361 <span class="thb-predictive-search--label">Trending Now</span> 2362 <div class="thb-predictive-search--promotion-products"> 2363 <ul class="products row small-up-1 medium-up-2"><li class="columns"> 2364 <product-card class="product-card text-left product-card--content-spacing-true product-card--border-false has-shadow--true"> 2365 <figure class="product-featured-image thb-hover"> 2366 <span class="product-card--badges top left"> 2367 2368 2369</span> 2370 2371 2372 <a href="/products/100-mineral-antioxidant-sunscreen-spray-with-spf-30" title="100% Mineral Antioxidant Sunscreen
2372Spray with SPF 30" class="product-featured-image-link aspect-ratio aspect-ratio--portrait" style="--padding-bottom: 125.0%;"> 2373<img class="lazyload product-secondary-image" width="2048" height="2048" data-sizes="auto" src="//paceline.fit/cdn/shop/files/oars-and-alps-mineral-sunscreen-spray-spf-30-2_85badb4a-675f-44e9-8e04-e6217b77dd3f.jpg?crop=center&height=23&v=1769027638&width=20" data-srcset="//paceline.fit/cdn/shop/files/oars-and-alps-mineral-sunscreen-spray-spf-30-2_85badb4a-675f-44e9-8e04-e6217b77dd3f.jpg?v=1769027638&width=298 298w,//paceline.fit/cdn/shop/files/oars-and-alps-mineral-sunscreen-spray-spf-30-2_85badb4a-675f-44e9-8e04-e6217b77dd3f.jpg?v=1769027638&width=596 596w" fetchpriority="auto" alt="100% Mineral Antioxidant Sunscreen Spray with SPF 30" /> 2374 2375<img class="lazyload product-primary-image" width="2048" height="2048" data-sizes="auto" src="//paceline.fit/cdn/shop/files/oars-and-alps-mineral-sunscreen-spray-spf-30-1_636663c2-c292-491e-bc7e-093f65e4626b.jpg?crop=center&height=23&v=1769027638&width=20" data-srcset="//paceline.fit/cdn/shop/files/oars-and-alps-mineral-sunscreen-spray-spf-30-1_636663c2-c292-491e-bc7e-093f65e4626b.jpg?v=1769027638&width=298 298w,//paceline.fit/cdn/shop/files/oars-and-alps-mineral-sunscreen-spray-spf-30-1_636663c2-c292-491e-bc7e-093f65e4626b.jpg?v=1769027638&width=596 596w" fetchpriority="auto" alt="100% Mineral Antioxidant Sunscreen
2375Spray with SPF 30" style="object-position: 49.512% 61.914%;" /> 2376<quick-view class="product-card-quickview" data-product-handle="100-mineral-antioxidant-sunscreen-spray-with-spf-30" tabindex="-1"> 2377 <div class="loading-overlay"><svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2378 <circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle> 2379</svg></div> 2380 <span>Quick view</span> 2381 </quick-view></a> 2382 </figure> 2383 <div class="product-card-info"><div class="product-card-vendor"><a href="/collections/vendors?q=Oars%20%2B%20Alps" title="Oars + Alps">Oars + Alps</a></div><a href="/products/100-mineral-antioxidant-sunscreen-spray-with-spf-30" title="100% Mineral Antioxidant Sunscreen Spray with SPF 30" class="product-card-title">100% Mineral Antioxidant Sunscreen Spray with SPF 30</a> 2384<style>.paceline-pp-price { color: #85CC52 !important; }</style> 2385<span class="price"> 2386 <ins><span class="amount "><span class="from">From</span> $20.00</span></ins> 2387 2388 <small class="unit-price hidden"> 2389 <span></span> 2390 <span class="unit-price-separator">/</span> 2391 <span> 2392 </span> 2393 </small> 2394</span> 2395<div id="inventory-10773370339601" class="product-inventory-notice--wrapper"> 2396 2397 2398 2399</div><div class="product-card--add-to-cart-button-wrapper"> 2400 <quick-view class="product-card--add-to-cart-button button accent" data-product-id="53049580060945" data-product-handle="100-mineral-antioxidant-sunscreen-spray-with-spf-30" tabindex="-1" > 2401 <svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2402 <circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle> 2403</svg> 2404 <span class="product-card--add-to-cart-text">Choose options</span> 2405 </quick-view> 2406 </div></div> 2407</product-card> 2408 </li><li class="columns"> 2409 <product-card class="product-card text-left product-card--content-spacing-true product-card--border-false has-shadow--true"> 2410 <figure class="product-featured-image thb-hover"> 2411 <span class="product-card--badges top left"> 2412 2413 2414</span> 2415 2416 2417 <a href="/products/100-mineral-antioxidant-sunscreen-spray-with-spf-50" title="100% Mineral Antioxidant Sunscreen
2417Spray with SPF 50" class="product-featured-image-link aspect-ratio aspect-ratio--portrait" style="--padding-bottom: 125.0%;"> 2418<img class="lazyload product-secondary-image" width="2048" height="2048" data-sizes="auto" src="//paceline.fit/cdn/shop/files/5_8c382c9d-a9ae-4a50-9cb6-86f3a6a3b473.jpg?crop=center&height=23&v=1769027635&width=20" data-srcset="//paceline.fit/cdn/shop/files/5_8c382c9d-a9ae-4a50-9cb6-86f3a6a3b473.jpg?v=1769027635&width=298 298w,//paceline.fit/cdn/shop/files/5_8c382c9d-a9ae-4a50-9cb6-86f3a6a3b473.jpg?v=1769027635&width=596 596w" fetchpriority="auto" alt="100% Mineral Antioxidant Sunscreen Spray with SPF 50" /> 2419 2420<img class="lazyload product-primary-image" width="2048" height="2048" data-sizes="auto" src="//paceline.fit/cdn/shop/files/oars-and-alps-spf-50-mineral-sunscreen-spray-1-3.jpg?crop=center&height=23&v=1769027635&width=20" data-srcset="//paceline.fit/cdn/shop/files/oars-and-alps-spf-50-mineral-sunscreen-spray-1-3.jpg?v=1769027635&width=298 298w,//paceline.fit/cdn/shop/files/oars-and-alps-spf-50-mineral-sunscreen-spray-1-3.jpg?v=1769027635&width=596 596w" fetchpriority="auto" alt="100% Mineral Antioxidant Sunscreen
2420Spray with SPF 50" style="object-position: 49.512% 96.191%;" /> 2421<quick-view class="product-card-quickview" data-product-handle="100-mineral-antioxidant-sunscreen-spray-with-spf-50" tabindex="-1"> 2422 <div class="loading-overlay"><svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2423 <circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle> 2424</svg></div> 2425 <span>Quick view</span> 2426 </quick-view></a> 2427 </figure> 2428 <div class="product-card-info"><div class="product-card-vendor"><a href="/collections/vendors?q=Oars%20%2B%20Alps" title="Oars + Alps">Oars + Alps</a></div><a href="/products/100-mineral-antioxidant-sunscreen-spray-with-spf-50" title="100% Mineral Antioxidant Sunscreen Spray with SPF 50" class="product-card-title">100% Mineral Antioxidant Sunscreen Spray with SPF 50</a> 2429<style>.paceline-pp-price { color: #85CC52 !important; }</style> 2430<span class="price"> 2431 <ins><span class="amount "><span class="from">From</span> $20.00</span></ins> 2432 2433 <small class="unit-price hidden"> 2434 <span></span> 2435 <span class="unit-price-separator">/</span> 2436 <span> 2437 </span> 2438 </small> 2439</span> 2440<div id="inventory-10773370011921" class="product-inventory-notice--wrapper"> 2441 2442 2443 2444</div><div class="product-card--add-to-cart-button-wrapper"> 2445 <quick-view class="product-card--add-to-cart-button button accent" data-product-id="53049579405585" data-product-handle="100-mineral-antioxidant-sunscreen-spray-with-spf-50" tabindex="-1" > 2446 <svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2447 <circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle> 2448</svg> 2449 <span class="product-card--add-to-cart-text">Choose options</span> 2450 </quick-view> 2451 </div></div> 2452</product-card> 2453 </li><li class="columns"> 2454 <product-card class="product-card text-left product-card--content-spacing-true product-card--border-false has-shadow--true"> 2455 <figure class="product-featured-image thb-hover"> 2456 <span class="product-card--badges top left"> 2457 2458 2459</span> 2460 2461 2462 <a href="/products/100-mineral-sunscreen-lotion-with-spf-30" title="100% Mineral Sunscreen Lotion with SPF 30" class="product-featured-image-link aspect-ratio aspect-ratio--portrait" style="--padding-bottom: 125.0%;"> 2463<img class="lazyload product-secondary-image" width="2048" height="2048" data-sizes="auto" src="//paceline.fit/cdn/shop/files/oars-and-alps-spf-30-mineral-sunscreen-body-lotion-2.jpg?crop=center&height=23&v=1769027639&width=20" data-srcset="//paceline.fit/cdn/shop/files/oars-and-alps-spf-30-mineral-sunscreen-body-lotion-2.jpg?v=1769027639&width=298 298w,//paceline.fit/cdn/shop/files/oars-and-alps-spf-30-mineral-sunscreen-body-lotion-2.jpg?v=1769027639&width=596 596w" fetchpriority="auto" alt="100% Mineral Sunscreen Lotion with SPF 30" /> 2464 2465<img class="lazyload product-primary-image" width="2048" height="2048" data-sizes="auto" src="//paceline.fit/cdn/shop/files/oars-and-alps-spf-30-mineral-sunscreen-body-lotion-1.jpg?crop=center&height=23&v=1769027639&width=20" data-srcset="//paceline.fit/cdn/shop/files/oars-and-alps-spf-30-mineral-sunscreen-body-lotion-1.jpg?v=1769027639&width=298 298w,//paceline.fit/cdn/shop/files/oars-and-alps-spf-30-mineral-sunscreen-body-lotion-1.jpg?v=1769027639&width=596 596w" fetchpriority="auto" alt="100% Mineral Sunscreen Lotion with SPF 30" style="object-position: 49.902% 49.414%;" /> 2466<quick-view class="product-card-quickview" data-product-handle="100-mineral-sunscreen-lotion-with-spf-30" tabindex="-1"> 2467 <div class="loading-overlay"><svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2468 <circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle> 2469</svg></div> 2470 <span>Quick view</span> 2471 </quick-view></a> 2472 </figure> 2473 <div class="product-card-info"><div class="product-card-vendor"><a href="/collections/vendors?q=Oars%20%2B%20Alps" title="Oars + Alps">Oars + Alps</a></div><a href="/products/100-mineral-sunscreen-lotion-with-spf-30" title="100% Mineral Sunscreen Lotion with SPF 30" class="product-card-title">100% Mineral Sunscreen Lotion with SPF 30</a> 2474<style>.paceline-pp-price { color: #85CC52 !important; }</style> 2475<span class="price"> 2476 <ins><span class="amount "><span class="from">From</span> $24.00</span></ins> 2477 2478 <small class="unit-price hidden"> 2479 <span></span> 2480 <span class="unit-price-separator">/</span> 2481 <span> 2482 </span> 2483 </small> 2484</span> 2485<div id="inventory-10773370568977" class="product-inventory-notice--wrapper"> 2486 2487 2488 2489</div><div class="product-card--add-to-cart-button-wrapper"> 2490 <quick-view class="product-card--add-to-cart-button button accent" data-product-id="53049580650
2490769" data-product-handle="100-mineral-sunscreen-lotion-with-spf-30" tabindex="-1" > 2491 <svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2492 <circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle> 2493</svg> 2494 <span class="product-card--add-to-cart-text">Choose options</span> 2495 </quick-view> 2496 </div></div> 2497</product-card> 2498 </li><li class="columns"> 2499 <product-card class="product-card text-left product-card--content-spacing-true product-card--border-false has-shadow--true"> 2500 <figure class="product-featured-image thb-hover"> 2501 <span class="product-card--badges top left"> 2502 2503 2504</span> 2505 2506 2507 <a href="/products/100-plant-protein-powder-limited-edition-flavor" title="100% Plant Protein - Flavor Series" class="product-featured-image-link aspect-ratio aspect-ratio--portrait" style="--padding-bottom: 125.0%;"> 2508<img class="lazyload product-secondary-image" width="1000" height="1000" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Plant_Protein__first-in-carousel_a8d36cc9-636f-49c2-88a7-aef451723afe.png?crop=center&height=23&v=1788561980&width=20" data-srcset="//paceline.fit/cdn/shop/files/Plant_Protein__first-in-carousel_a8d36cc9-636f-49c2-88a7-aef451723afe.png?v=1788561980&width=298 298w,//paceline.fit/cdn/shop/files/Plant_Protein__first-in-carousel_a8d36cc9-636f-49c2-88a7-aef451723afe.png?v=1788561980&width=596 596w" fetchpriority="auto" alt="100% Plant Protein - Flavor Series" /> 2509 2510<img class="lazyload product-primary-image" width="4000" height="4000" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Plant_Protein_12-Serv_Cappuccino.png?crop=center&height=23&v=1774297568&width=20" data-srcset="//paceline.fit/cdn/shop/files/Plant_Protein_12-Serv_Cappuccino.png?v=1774297568&width=298 298w,//paceline.fit/cdn/shop/files/Plant_Protein_12-Serv_Cappuccino.png?v=1774297568&width=596 596w" fetchpriority="auto" alt="100% Plant Protein - Flavor Series" style="object-position: 49.512% 63.086%;" /> 2511<quick-view class="product-card-quickview" data-product-handle="100-plant-protein-powder-limited-edition-flavor" tabindex="-1"> 2512 <div class="loading-overlay"><svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2513 <circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle> 2514</svg></div> 2515 <span>Quick view</span> 2516 </quick-view></a> 2517 </figure> 2518 <div class="product-card-info"><div class="product-card-vendor"><a href="/collections/vendors?q=Momentous" title="Momentous">Momentous</a></div><a href="/products/100-plant-protein-powder-limited-edition-flavor" title="100% Plant Protein - Flavor Series" class="product-card-title">100% Plant Protein - Flavor Series</a> 2519<style>.paceline-pp-price { color: #85CC52 !important; }</style> 2520<span class="price"> 2521 <ins><span class="amount ">$39.99</span></ins> 2522 2523 <small class="unit-price hidden"> 2524 <span></span> 2525 <span class="unit-price-separator">/</span> 2526 <span> 2527 </span> 2528 </small> 2529</span> 2530<div id="inventory-10773344813329" class="product-inventory-notice--wrapper"> 2531 2532 2533 2534</div><div class="product-card--add-to-cart-button-wrapper"> 2535 <button class="product-card--add-to-cart-button product-card--add-to-cart-button-simple button accent" data-product-id="53049547981073" data-product-handle="100-plant-protein-powder-limited-edition-flavor" tabindex="-1" > 2536 <svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2537 <circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle> 2538</svg> 2539 <span class="product-card--add-to-cart-text">Add to cart</span> 2540 </button> 2541 </div></div> 2542</product-card> 2543 </li><li class="columns"> 2544 <product-card class="product-card text-left product-card--content-spacing-true product-card--border-false has-shadow--true"> 2545 <figure class="product-featured-image thb-hover"> 2546 <span class="product-card--badges top left"> 2547 2548 2549</span> 2550 2551 2552 <a href="/products/100-plant-protein-10-travel-packs" title="100% Plant Protein 10-Travel Packs" class="product-featured-image-link aspect-ratio aspect-ratio--portrait" style="--padding-bottom: 125.0%;"> 2553<img class="lazyload product-secondary-image" width="4000" height="4000" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Plant_Protein_10ct-Carton_Vanilla-Spice-DTC-ProductHero.png?crop=center&height=23&v=1788209232&width=20" data-srcset="//paceline.fit/cdn/shop/files/Plant_Protein_10ct-Carton_Vanilla-Spice-DTC-ProductHero.png?v=1788209232&width=298 298w,//paceline.fit/cdn/shop/files/Plant_Protein_10ct-Carton_Vanilla-Spice-DTC-ProductHero.png?v=1788209232&width=596 596w" fetchpriority="auto" alt="100% Plant Protein 10-Travel Packs" /> 2554 2555<img class="lazyload product-primary-image" width="4000" height="4000" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Plant_Protein_10ct-Carton_Vanilla-Spice-DTC-ProductHero_1.png?crop=center&height=23&v=1788209232&width=20" data-srcset="//paceline.fit/cdn/shop/files/Plant_Protein_10ct-Carton_Vanilla-Spice-DTC-ProductHero_1.png?v=1788209232&width=298 298w,//paceline.fit/cdn/shop/files/Plant_Protein_10ct-Carton_Vanilla-Spice-DTC-ProductHero_1.png?v=1788209232&width=596 596w" fetchpriority="auto" alt="100% Plant Protein 10-Travel Packs" style="object-position: 50.0% 50.0%;" /> 2556<quick-view class="product-card-quickview" data-product-handle="100-plant-protein-10-travel-packs" tabindex="-1"> 2557 <div class="loading-overlay"><svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2558 <circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle> 2559</svg></div> 2560 <span>Quick view</span> 2561 </quick-view></a> 2562 </figure> 2563 <div class="product-card-info"><div class="product-card-vendor"><a href="/collections/vendors?q=Momentous" title="Momentous">Momentous</a></div><a href="/products/100-plant-protein-10-travel-packs" title="100% Plant Protein 10-Travel Packs" class="product-card-title">100% Plant Protein 10-Travel Packs</a> 2564<style>.paceline-pp-price { color: #85CC52 !important; }</style> 2565<span class="price"> 2566 <ins><span class="amount ">$29.99</span></ins> 2567 2568 <small class="unit-price hidden"> 2569 <span></span> 2570 <span class="unit-price-separator">/</span> 2571 <span> 2572 </span> 2573 </small> 2574</span> 2575<div id="inventory-10773345042705" class="product-inventory-notice--wrapper"> 2576 2577 2578 2579</div><div class="product-card--add-to-cart-button-wrapper"> 2580 <quick-view class="product-card--add-to-cart-button button accent" data-product-id="53049548308753" data-product-handle="100-plant-protein-10-travel-packs" tabindex="-1" > 2581 <svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2582 <circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle> 2583</svg> 2584 <span class="product-card--add-to-cart-text">Choose options</span> 2585 </quick-view> 2586 </div></div> 2587</product-card> 2588 </li></ul> 2589 </div> 2590 </div></div> 2591 </div> 2592 </search-form> 2593</div> 2594 2595<link rel="stylesheet" href="//paceline.fit/cdn/shop/t/76/assets/predictive-search.css?v=47478030779033268151779034828" media="print" onload="this.media='all'"> 2596<noscript> 2597 <link href="//paceline.fit/cdn/shop/t/76/assets/predictive-search.css?v=47478030779033268151779034828" rel="stylesheet" type="text/css" media="all" /> 2598</noscript> 2599 2600 <div class="click-capture"></div> 2601 <div class="click-capture--product"></div> 2602 </div> 2603 2604
2604<script src="//paceline.fit/cdn/shop/t/76/assets/vendor.min.js?v=3813312436454354751779034828" type="text/javascript"></script>
2604 2605 2606
2606<script src="//paceline.fit/cdn/shop/t/76/assets/product.js?v=162422722935758581621779034828" type="text/javascript"></script>
2606 2607
2607<script src="//paceline.fit/cdn/shop/t/76/assets/slideshow.js?v=105782103936839224421779034828" type="text/javascript"></script>
2607 2608
2608<script src="//paceline.fit/cdn/shop/t/76/assets/app.js?v=91368911961534120321779034828" type="text/javascript"></script>
2608 2609
2609<script type="module" src="//paceline.fit/cdn/shop/t/76/assets/scroll-shadow.js?v=134515646384607867161779034828" defer="defer"></script>
2609 2610
2610<script src="//paceline.fit/cdn/shop/t/76/assets/predictive-search.js?v=96917490284544704661779034828" defer="defer"></script>
2610<script src="//paceline.fit/cdn/shop/t/76/assets/back-to-top.js?v=43806152616230385711779034828" defer="defer"></script>
2610 2611<back-to-top class="back-to-top"><svg width="11" height="16" viewBox="0 0 11 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 2612<path class="back-to-top--bar" d="M4.87654 2.34497C4.87654 1.99178 5.16285 1.70547 5.51604 1.70547C5.86922 1.70547 6.15554 1.99179 6.15554 2.34497V15.5613C6.15554 15.9144 5.86922 16.2008 5.51604 16.2008C5.16285 16.2008 4.87654 15.9144 4.87654 15.5613V2.34497Z" fill="var(--color-accent)"/> 2613<path class="back-to-top--handle" d="M0.197525 5.0502L5.02195 0.225769C5.14739 0.100345 5.32293 0.0251028 5.48588 0C5.66143 -7.67342e-09 5.83696 0.0752197 5.96239 0.200647L10.7994 5.03761C10.9373 5.17554 11 5.33858 11 5.51412C11 5.68967 10.9248 5.8652 10.7994 5.99063C10.5486 6.254 10.1223 6.254 9.85892 5.99063L6.16301 2.30726C5.72921 2.1318 5.72921 1.70547 4.83387 2.29472L1.13796 5.99063C0.887198 6.254 0.460891 6.254 0.197525 5.99063C-0.0658415 5.73987 -0.0658415 5.31356 0.197525 5.0502Z" fill="var(--color-accent)"/> 2614</svg></back-to-top>
2615<script type="module" src="//paceline.fit/cdn/shop/t/76/assets/instant-page.js?v=116087100843016214071779034828" defer="defer"></script>
2615 2616 2617 2618
2618<script> 2619 document.addEventListener('DOMContentLoaded', function() { 2620 // Only run on the hooray-health page 2621 if (window.location.pathname === '/pages/hooray-health') { 2622 const urlParams = new URLSearchParams(window.location.search); 2623 const userid = urlParams.get('userid'); 2624 2625 if (userid) { 2626 // Update all buttons that link to hoorayhealthsol.com 2627 const buttons = document.querySelectorAll('a[href*="hoorayhealthsol.com"]'); 2628 2629 buttons.forEach(function(button) { 2630 const currentHref = button.getAttribute('href'); 2631 if (!currentHref.includes('userid=')) { 2632 // Check if URL already has query parameters 2633 const separator = currentHref.includes('?') ? '&' : '?'; 2634 button.setAttribute('href', currentHref + separator + 'userid=' + encodeURIComponent(userid)); 2635 } 2636 }); 2637 } 2638 } 2639 }); 2640 </script>
2640 2641 2642 <div class="modal review-modal" id="eyw-review-modal" aria-hidden="true" style="display:none"> 2643 <div class="modal__dialog"> 2644 <div class="modal__body"> 2645 <h3 class="modal__title">Review your selection</h3> 2646 2647 <div class="line-item" data-review-line> 2648 <div class="line-item__title" data-review-title></div> 2649 <div class="variant-details" data-review-variant></div> 2650 <div class="store-credit-label">Store credit with bonus</div> 2651 </div> 2652 2653 <label class="terms"> 2654 <input type="checkbox" id="eyw-review-accept"> 2655 I agree to the 2656 <a href="/pages/earn-your-wearable-terms" target="_blank" rel="noopener"> 2657 Earn Your Wearable Terms and Conditions 2658 </a>. 2659 </label> 2660 </div> 2661 2662 <div class="modal__footer"> 2663 <button class="btn btn--primary btn--proceed" id="eyw-review-proceed" disabled> 2664 Proceed to Checkout 2665 </button> 2666 <button class="btn btn--cancel" type="button" id="eyw-review-cancel"> 2667 Cancel 2668 </button> 2669 </div> 2670 </div> 2671</div> 2672<style> 2673 #paceline-cookie-panel { 2674 position: fixed; bottom: 0; left: 0; right: 0; z-index: 99999; 2675 background: #1f252e; color: #fff; 2676 padding: 20px 24px; display: none; flex-direction: column; 2677 gap: 16px; border-top: 1px solid rgba(255,255,255,0.15); 2678 } 2679 #paceline-cookie-main { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; } 2680 #paceline-cookie-panel p { margin: 0; flex: 1; font-size: 14px; line-height: 1.5; } 2681 #paceline-cookie-panel a { color: #4db8ff; } 2682 #paceline-cookie-panel .pcl-btns { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; } 2683 #paceline-cookie-panel .pcl-btns button { 2684 background: transparent; color: #fff; cursor: pointer; 2685 font-size: 12px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; 2686 padding: 9px 18px; border: 1px solid rgba(255,255,255,0.4); 2687 } 2688 #pcl-close { border: none !important; font-size: 20px; padding: 6px 10px !important; opacity: .6; } 2689 #paceline-cookie-prefs { display: none; flex-direction: column; gap: 12px; padding-top: 12px; border-top: 1px solid rgba(255,255,255,0.1); } 2690 #paceline-cookie-prefs.open { display: flex; } 2691 .pcl-pref-items { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; } 2692 .pcl-pref-item { display: flex; gap: 10px; align-items: flex-start; } 2693 .pcl-pref-item input[type=checkbox] { width: 16px; height: 16px; margin-top: 2px; flex-shrink: 0; cursor: pointer; accent-color: #4db8ff; } 2694 .pcl-pref-item input[type=checkbox]:disabled { opacity: .5; cursor: not-allowed; } 2695 .pcl-pref-item.disabled { opacity: .6; } 2696 .pcl-pref-item .pcl-pref-label { font-size: 13px; font-weight: 600; margin-bottom: 2px; } 2697 .pcl-pref-item .pcl-pref-desc { font-size: 11px; opacity: .65; line-height: 1.4; } 2698 #pcl-save { align-self: flex-start; background: #4db8ff !important; color: #000 !important; border-color: #4db8ff !important; } 2699 </style> 2700 <div id="paceline-cookie-panel"> 2701 <div id="paceline-cookie-main"> 2702 <p>We use cookies, pixels, and similar tools (“cookies”), some provided by third parties, to operate, improve, and personalize our site; serve ads; enable features and functionality. We and our third-party vendors may monitor, record, and access your data, including device data, IP address and online identifiers, referring URLs and other information, for these and similar purposes. Click Accept to agree. If you browse without clicking Accept, or click Reject, only cookies necessary to enable default website functionalities will be deployed. More info: <a href="https://paceline.fit/privacy" target="_blank" rel="noopener">PRIVACY POLICY</a>. By browsing the site, or clicking “Accept,” “Reject,” or “Manage Preferences,” you agree to our <a href="https://paceline.fit/terms" target="_blank" rel="noopener">TERMS OF USE</a>.</p> 2703 <div class="pcl-btns"> 2704 <button id="pcl-manage">Manage Preferences</button> 2705 <button id="pcl-accept">Accept All</button> 2706 <button id="pcl-decline">Decline All</button> 2707 <button id="pcl-close" aria-label="Close">×</button> 2708 </div> 2709 </div> 2710 <div id="paceline-cookie-prefs"> 2711 <div class="pcl-pref-items"> 2712 <div class="pcl-pref-item disabled"> 2713 <input type="checkbox" checked disabled> 2714 <div><div class="pcl-pref-label">Required</div><div class="pcl-pref-desc">These cookies are necessary for the site to function properly, including capabilities like logging in and adding items to the cart.</div></div> 2715 </div> 2716 <div class="pcl-pref-item"> 2717 <input type="checkbox" id="pcl-preferences"> 2718 <div><div class="pcl-pref-label">Personalization</div><div class="pcl-pref-desc">These cookies store details about your actions to personalize your next visit to the website.</div></div> 2719 </div> 2720 <div class="pcl-pref-item"> 2721 <input type="checkbox" id="pcl-marketing"> 2722 <div><div class="pcl-pref-label">Marketing</div><div class="pcl-pref-desc">These cookies are used by us and our partners, including Shopify, to optimize marketing communications and show you ads on other websites.</div></div> 2723 </div> 2724 <div class="pcl-pref-item"> 2725 <input type="checkbox" id="pcl-analytics"> 2726 <div><div class="pcl-pref-label">Analytics</div><div class="pcl-pref-desc">These cookies help us understand how you interact with the site. We use this data to i
2726dentify areas to improve.</div></div> 2727 </div> 2728 </div> 2729 <div class="pcl-btns"><button id="pcl-save">Save Preferences</button></div> 2730 </div> 2731 </div> 2732
2732<script> 2733 (function () { 2734 var panel = document.getElementById('paceline-cookie-panel'); 2735 var prefs = document.getElementById('paceline-cookie-prefs'); 2736 2737 // In-memory consent state â kept in sync from all sources 2738 var consentState = null; 2739 2740 function saveConsentState(obj) { 2741 consentState = obj; 2742 try { localStorage.setItem('pcl_consent', JSON.stringify(obj)); } catch(e) {} 2743 } 2744 2745 function trackConsentEvent(action, obj) { 2746 try { 2747 fetch('https://paceline-rye-production.up.railway.app/api/consent-event', { 2748 method: 'POST', 2749 headers: { 'Content-Type': 'application/json' }, 2750 body: JSON.stringify({ 2751 action: action, 2752 analytics: obj.analytics === 'yes' || obj.analytics === true, 2753 marketing: obj.marketing === 'yes' || obj.marketing === true, 2754 preferences: obj.preferences === 'yes' || obj.preferences === true, 2755 }), 2756 keepalive: true 2757 }); 2758 } catch(e) {} 2759 } 2760 2761 function loadConsentState() { 2762 if (window.Shopify && window.Shopify.customerPrivacy) { 2763 var c = Shopify.customerPrivacy.currentVisitorConsent(); 2764 if (c && (c.analytics === 'yes' || c.analytics === 'no')) { 2765 consentState = c; 2766 return; 2767 } 2768 } 2769 try { 2770 var stored = localStorage.getItem('pcl_consent'); 2771 if (stored) consentState = JSON.parse(stored); 2772 } catch(e) {} 2773 } 2774 2775 // Sync from Shopify's native banner in real time 2776 document.addEventListener('visitorConsentCollected', function (e) { 2777 if (!e.detail) return; 2778 var state = { 2779 analytics: e.detail.analyticsAllowed ? 'yes' : 'no', 2780 marketing: e.detail.marketingAllowed ? 'yes' : 'no', 2781 preferences: e.detail.preferencesAllowed ? 'yes' : 'no' 2782 }; 2783 saveConsentState(state); 2784 trackConsentEvent('shopify_banner', state); 2785 }); 2786 2787 if (document.readyState === 'loading') { 2788 document.addEventListener('DOMContentLoaded', loadConsentState); 2789 } else { 2790 loadConsentState(); 2791 } 2792 2793 2794 2795 function applyConsent(consent, action) { 2796 panel.style.display = 'none'; 2797 var state = { 2798 analytics: consent.analytics ? 'yes' : 'no', 2799 marketing: consent.marketing ? 'yes' : 'no', 2800 preferences: consent.preferences ? 'yes' : 'no' 2801 }; 2802 saveConsentState(state); 2803 trackConsentEvent(action || 'save_prefs', state); 2804 try { 2805 if (window.Shopify && window.Shopify.customerPrivacy) { 2806 Shopify.customerPrivacy.setTrackingConsent(consent, function () {}); 2807 } 2808 } catch(e) {} 2809 } 2810 2811 function openPanel() { 2812 if (!panel) return; 2813 panel.style.display = 'flex'; 2814 prefs.classList.remove('open'); 2815 } 2816 window.pclOpenCookiePanel = openPanel; 2817 2818 document.getElementById('pcl-accept').addEventListener('click', function () { 2819 applyConsent({ marketing: true, analytics: true, preferences: true, sale_of_data: true }, 'accept_all'); 2820 }); 2821 document.getElementById('pcl-decline').addEventListener('click', function () { 2822 applyConsent({ marketing: false, analytics: false, preferences: false, sale_of_data: false }, 'decline_all'); 2823 }); 2824 document.getElementById('pcl-close').addEventListener('click', function () { 2825 panel.style.display = 'none'; 2826 }); 2827 document.getElementById('pcl-manage').addEventListener('click', function () { 2828 prefs.classList.toggle('open'); 2829 if (prefs.classList.contains('open') && consentState) { 2830 document.getElementById('pcl-analytics').checked = consentState.analytics === 'yes'; 2831 document.getElementById('pcl-marketing').checked = consentState.marketing === 'yes'; 2832 document.getElementById('pcl-preferences').checked = consentState.preferences === 'yes'; 2833 } 2834 }); 2835 document.getElementById('pcl-save').addEventListener('click', function () { 2836 applyConsent({ 2837 analytics: document.getElementById('pcl-analytics').checked, 2838 marketing: document.getElementById('pcl-marketing').checked, 2839 preferences: document.getElementById('pcl-preferences').checked, 2840 sale_of_data: false 2841 }); 2842 }); 2843 2844 function handleCookiePrefsHash() { 2845 if (window.location.hash !== '#cookie-preferences') return; 2846 history.replaceState(null, '', window.location.pathname);
2847 openPanel(); 2848 } 2849 2850 document.addEventListener('click', function(e) { 2851 var el = e.target.closest('a[href="#cookie-preferences"], a[href="/#cookie-preferences"]'); 2852 if (el) { e.preventDefault(); openPanel(); } 2853 }); 2854 2855 window.addEventListener('hashchange', handleCookiePrefsHash); 2856 if (document.readyState === 'loading') { 2857 document.addEventListener('DOMContentLoaded', handleCookiePrefsHash); 2858 } else { 2859 handleCookiePrefsHash(); 2860 } 2861 })(); 2862 </script>
2862 2863
2863<script> 2864 (function () { 2865 function patchBanner() { 2866 var para = document.querySelector('.shopify-pc__banner__body p'); 2867 if (!para || para.dataset.patched) return; 2868 para.dataset.patched = 'true'; 2869 2870 // Remove Shopify's auto-appended âLearn more in our Privacy Policyâ link 2871 var shopifyLink = document.getElementById('shopify-pc__banner__body-policy-link'); 2872 if (shopifyLink) { 2873 var prev = shopifyLink.previousSibling; 2874 if (prev && prev.nodeType === 3) { 2875 prev.nodeValue = prev.nodeValue.replace(/\s*Learn more in our\s*$/i, ''); 2876 } 2877 shopifyLink.remove(); 2878 } 2879 2880 // Turn plain-text matches into links within text nodes 2881 function linkify(match, href) { 2882 Array.from(para.childNodes).forEach(function (node) { 2883 if (node.nodeType !== 3) return; 2884 var idx = node.nodeValue.indexOf(match); 2885 if (idx === -1) return; 2886 var a = document.createElement('a'); 2887 a.href = href; 2888 a.target = '_blank'; 2889 a.rel = 'noopener noreferrer'; 2890 a.textContent = match; 2891 var after = node.splitText(idx); 2892 after.nodeValue = after.nodeValue.slice(match.length); 2893 para.insertBefore(a, after); 2894 }); 2895 } 2896 2897 linkify('PRIVACY POLICY', 'https://paceline.fit/privacy'); 2898 linkify('TERMS OF USE', 'https://paceline.fit/terms'); 2899 } 2900 2901 var observer = new MutationObserver(patchBanner); 2902 observer.observe(document.body, { childList: true, subtree: true }); 2903 patchBanner(); 2904 })(); 2905 </script>
2905 2906 2907 2908 2909 2910 2911<style> 2912#ppSection{padding:0 16px} 2913/* Grid + subgrid (like flash sales): image/brand/title/price rows are shared, so prices line up whatever the title length */ 2914#ppSection #ppGrid{padding:0;margin:0;display:grid!important;grid-auto-flow:column;grid-auto-columns:176px;grid-template-rows:repeat(4,auto);column-gap:12px;row-gap:0;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;grid-template-columns:none!important} 2915#ppSection #ppGrid::-webkit-scrollbar{display:none} 2916#ppSection .pp-card-img,#ppSection #ppGrid>* img{border-radius:10px;overflow:hidden} 2917#ppSection #ppGrid>*{grid-row:span 4;scroll-snap-align:start;max-width:176px} 2918#ppSection #ppGrid>.pp-card{display:grid!important;grid-template-rows:subgrid} 2919#ppSection #ppGrid .pp-card-body{display:grid!important;grid-row:span 3;grid-template-rows:subgrid;align-content:start} 2920#ppSection #ppGrid>* img,#ppSection #ppGrid>* .card__media img,#ppSection #ppGrid>* .media img{width:176px!important;height:176px!important;object-fit:cover} 2921#ppSection #ppGrid .caption-with-letter-spacing,#ppSection #ppGrid [class*="vendor"],#ppSection #ppGrid [class*="brand"]{color:rgba(255,255,255,0.5)!important} 2922.pp-price-row{margin-top:4px;display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 6px;font-family:'Barlow',system-ui,sans-serif;font-size:14px} 2923.pp-price-row del{font-size:13px;color:rgba(255,255,255,0.35);font-weight:400} 2924.pp-price-row .pp-flash-sale{color:#85CC52;font-weight:700;font-size:16px} 2925.pp-price-row .pp-flash-pct{background:rgba(133,204,82,0.15);color:#85CC52;font-size:11px;font-weight:700;padding:2px 7px;border-radius:4px} 2926.pp-price-row .sr-pp-price,.pp-price-row .pp-disc-price{font-size:16px;font-weight:700;color:#85CC52} 2927.pp-price-row .pp-price-val{font-size:16px;font-weight:700;color:#fff} 2928.pp-pts-row{width:100%;display:flex;align-items:center;gap:6px;margin-top:2px} 2929.pp-pts-row del{font-size:11px;color:rgba(255,255,255,0.2);font-weight:400} 2930.pp-pts-row .pp-pts-disc{font-size:13px;font-weight:700;color:#47C2EB} 2931.pp-img-pct{position:absolute;top:8px;right:8px;z-index:3;background:#85CC52;color:#051E2A;font-family:'Barlow',system-ui,sans-serif;font-size:11px;font-weight:700;line-height:1.3;padding:3px 8px;border-radius:6px;pointer-events:none} 2932@keyframes ppPulse{0%,100%{opacity:1}50%{opacity:0.4}} 2933</style> 2934 2935 2936
2937<script> 2938(function(){ 2939 var nav=document.getElementById('portalNav'); 2940 if(!nav) return; 2941 var RYE='https://paceline-rye-production.up.railway.app'; 2942 2943 var _isPlus=false; 2944 function moveTab(){ 2945 var pp=nav.querySelector('a[href*="paceline-exclusive"]'); 2946 if(pp&&!_isPlus){pp.style.display='none';} 2947 if(pp&&_isPlus&&pp!==nav.firstElementChild){nav.insertBefore(pp,nav.firstElementChild);} 2948 var stale=nav.querySelector('a[href*="app-portal#workout-gear"]'); 2949 if(stale&&nav.querySelector('a[href*="app-portal"]:not([href*="#"])')) stale.remove(); 2950 if(!nav.querySelector('a[href*="fall-portal"]')){ 2951 var mk=nav.querySelector('a[href*="app-portal"]'); 2952 if(mk){ 2953 var ft=document.createElement('a'); 2954 ft.href='/pages/fall-portal'; 2955 ft.textContent='Fall Reset'; 2956 ft.className=mk.className; 2957 nav.insertBefore(ft,mk); 2958 } 2959 } 2960 var mkLinks=nav.querySelectorAll('a'); 2961 for(var li=0;li<mkLinks.length;li++){ 2962 var h=mkLinks[li].getAttribute('href')||''; 2963 if(h.indexOf('app-portal')!==-1&&h!=='/pages/app-portal'){ 2964 mkLinks[li].setAttribute('href','/pages/app-portal'); 2965 } 2966 } 2967 } 2968 2969 moveTab(); 2970 new MutationObserver(function(){moveTab();}).observe(nav,{childList:true}); 2971})(); 2972</script>
vendor: 1 bytes, line 2972
2972
2973<script> 2974(function(){ 2975 // Pricing badges for ALL portal pages (except paceline-exclusive, handled above) 2976 if(window.location.pathname.indexOf('paceline-exclusive')!==-1) return; 2977 var nav=document.getElementById('portalNav'); 2978 if(!nav) return; 2979 var RYE='https://paceline-rye-production.up.railway.app'; 2980 var path=window.location.pathname.replace(/^\/pages\//,'').replace(/\/$/,''); 2981 var specialApis={'flash-sales-portal':'/api/shop-products/flash-sales','kits-portal':'/api/shop-products/kits','bundles-portal':'/api/shop-products/bundles'}; 2982 var col=path.endsWith('-portal')?path.replace(/-portal$/,'-picks'):path; 2983 var portalCustId=0; 2984 var _pm={}; 2985 var _dataReady=false; 2986 var _isPlus=document.cookie.indexOf('_pp_plus=1')!==-1||document.querySelector('[data-pp-plus]')!==null; 2987 // % off badge in the top-right corner of a card's image (theme badges use top-left) 2988 // The card holding this product link and its image. Custom portal cards are 2989 // often a single <a> wrapping image + text; never climb into a container 2990 // that holds other products' links. 2991 function ppCardScope(link){ 2992 var s=link.closest('product-card,.product-card,.card-wrapper'); 2993 if(s) return s; 2994 var href=link.getAttribute('href').split('?')[0]; 2995 for(var el=link,i=0;el&&i<5;el=el.parentElement,i++){ 2996 var others=el.querySelectorAll('a[href*="/products/"]'); 2997 for(var j=0;j<others.length;j++){if(others[j].getAttribute('href').split('?')[0]!==href) return null;} 2998 if(el.querySelector('img')) return el; 2999 } 3000 return null; 3001 } 3002 function ppImgPct(scope,pct){ 3003 if(!scope) return; 3004 var img=scope.querySelector('img'); 3005 if(!img) return; 3006 var wrap=scope.querySelector('.product-featured-image,.pp-card-img,.card__media')||img.parentElement; 3007 var b=wrap.querySelector('.pp-img-pct'); 3008 if(!(pct>0)){if(b) b.remove();return;} 3009 if(getComputedStyle(wrap).position==='static') wrap.style.position='relative'; 3010 if(!b){b=document.createElement('span');b.className='pp-img-pct';wrap.appendChild(b);} 3011 b.textContent=Math.round(pct)+'% off'; 3012 } 3013 function addPricing(){ 3014 var links=document.querySelectorAll('a[href*="/products/"]'); 3015 for(var i=0;i<links.length;i++){ 3016 var link=links[i]; 3017 // Flash sale cards come priced from /api/flash-picks (same as app-portal) â leave them alone 3018 if(link.classList.contains('fp-card')) continue; 3019 var card=link.closest('[class*="card"]')||link.closest('li')||link.parentElement; 3020 if(!card) continue; 3021 var hm=link.getAttribute('href').match(/\/products\/([^/?#]+)/); 3022 if(!hm) continue; 3023 var pd=_pm[hm[1]]; 3024 var existing=card.querySelector('.pp-price-row'); 3025 if(existing){ 3026 var hasLoading=existing.querySelector('.pp-pts-loading'); 3027 var needsUpdate=(portalCustId&&pd&&((pd.pct&&!existing.querySelector('.pp-flash-sale'))||(pd.cost&&!existing.querySelector('.pp-pts-disc'))))||(hasLoading&&_dataReady); 3028 if(!needsUpdate) continue; 3029 existing.remove(); 3030 var hiddenEl=card.querySelector('[class*="price"][style*="display"]'); 3031 if(hiddenEl) hiddenEl.style.display=''; 3032 } 3033 var price=0; 3034 var priceEl=card.querySelector('[class*="price"]:not(.pp-price-row)'); 3035 if(priceEl){var m=priceEl.textContent.match(/\$([0-9.,]+)/);if(m) price=parseFloat(m[1].replace(',',''));} 3036 if(!price&&pd) price=pd.price||0; 3037 if(!price||price<1) continue; 3038 // Pacepoints discount + cost are for logged-in customers only 3039 var pct=(portalCustId&&pd&&pd.pct)||0,cost=(portalCustId&&pd&&pd.cost)||0; 3040 // Detect discount from theme badge if API has no pointsPct 3041 if(!pct){ 3042 var badges=card.querySelectorAll('[class*="badge"],[class*="Badge"],[class*="sale"],[class*="Sale"],[class*="saving"],[class*="percent"],span,div'); 3043 for(var bi=0;bi<badges.length;bi++){ 3044 var bt=badges[bi].textContent.trim(); 3045 var bm=bt.match(/^-?(\d+)%$/); 3046 if(bm){pct=parseInt(bm[1]);break;} 3047 } 3048 } 3049 var row=document.createElement('div'); 3050 row.className='pp-price-row'; 3051 var html='';
3052 ppImgPct(ppCardScope(link),pct); 3053 if(pct>0){ 3054 var disc=(price*(1-pct/100)).toFixed(2); 3055 html='<del>$'+price.toFixed(2)+'</del><span class="pp-flash-sale">$'+disc+'</span>'; 3056 }else{ 3057 html='<span class="pp-price-val">$'+price.toFixed(2)+'</span>'; 3058 } 3059 if(cost>0){ 3060 var discCost=pct>0?Math.round(cost*(1-pct/100)):cost; 3061 html+='<div class="pp-pts-row"><span class="pp-pts-disc">with '+discCost.toLocaleString()+' Pacepoints</span></div>'; 3062 }else if(!_dataReady&&portalCustId){ 3063 html+='<div class="pp-pts-row"><span class="pp-pts-loading" style="display:inline-block;width:120px;height:12px;border-radius:4px;background:rgba(71,194,235,0.15);animation:ppPulse 1.5s ease-in-out infinite"></span></div>'; 3064 } 3065 row.innerHTML=html; 3066 var ep=priceEl; 3067 if(ep){ep.style.display='none';ep.parentElement.insertBefore(row,ep);} 3068 else{var t=card.querySelector('[class*="title"],[class*="name"]');if(t&&t.parentElement)t.parentElement.insertBefore(row,t.nextSibling);else card.appendChild(row);} 3069 } 3070 } 3071 var _ppDone=false; 3072 function fetchPPFromDOM(){ 3073 if(_ppDone) return; 3074 var links=document.querySelectorAll('a[href*="/products/"]'); 3075 var handles=[]; 3076 for(var i=0;i<links.length;i++){ 3077 var m=links[i].getAttribute('href').match(/\/products\/([^/?#]+)/); 3078 if(m&&handles.indexOf(m[1])===-1&&(!_pm[m[1]]||!_pm[m[1]].cost)) handles.push(m[1]); 3079 } 3080 if(!handles.length) return; 3081 _ppDone=true; 3082 Promise.all(handles.slice(0,24).map(function(h){ 3083 return fetch('/products/'+h+'.json').then(function(r){return r.ok?r.json():null}).catch(function(){return null;}); 3084 })).then(function(results){ 3085 var ids=[],idMap={}; 3086 results.forEach(function(r){ 3087 if(!r||!r.product) return; 3088 var h=r.product.handle,v=r.product.variants&&r.product.variants[0]; 3089 ids.push(r.product.id);idMap[r.product.id]=h; 3090 // Keep the price too â custom portal cards (e.g. awareness) render none in the DOM 3091 var ex=_pm[h]||{}; 3092 _pm[h]={price:ex.price||parseFloat(v&&v.price||0),pct:ex.pct||0,cost:ex.cost||0}; 3093 }); 3094 if(!ids.length) return; 3095 return fetch(RYE+'/api/product-discount-meta?ids='+ids.join(',')) 3096 .then(function(r){return r.ok?r.json():null}) 3097 .then(function(meta){ 3098 if(!meta) return; 3099 ids.forEach(function(id){ 3100 var d=meta[id],h=idMap[id]; 3101 if(d&&h){var ex=_pm[h]||{};_pm[h]={price:ex.price||0,pct:d.pct||ex.pct||0,cost:d.cost||ex.cost||0};} 3102 }); 3103 _dataReady=true;addPricing(); 3104 }).catch(function(e){_dataReady=true;addPricing();console.warn('[portal-dom-meta]',e);}); 3105 }).catch(function(e){_dataReady=true;addPricing();console.warn('[portal-dom-meta]',e);}); 3106 } 3107 if(!specialApis[path]){ 3108 fetch('/collections/'+col+'/products.json?limit=24') 3109 .then(function(r){return r.ok?r.json():null}) 3110 .then(function(data){ 3111 if(!data||!data.products||!data.products.length){fetchPPFromDOM();return;} 3112 var ids=[]; 3113 data.products.forEach(function(p){ 3114 var v=p.variants&&p.variants[0]; 3115 _pm[p.handle]={price:parseFloat(v&&v.price||0),pct:0,cost:0,id:p.id}; 3116 if(p.id) ids.push(p.id); 3117 }); 3118 addPricing(); 3119 if(!ids.length) return; 3120 fetch(RYE+'/api/product-discount-meta?ids='+ids.join(',')) 3121 .then(function(r){return r.ok?r.json():null}) 3122 .then(function(meta){ 3123 if(!meta) return; 3124 data.products.forEach(function(p){ 3125 var d=meta[p.id]; 3126 if(d){ 3127 var ex=_pm[p.handle]||{}; 3128 _pm[p.handle]={price:ex.price||0,pct:d.pct||ex.pct||0,cost:d.cost||ex.cost||0}; 3129 } 3130 }); 3131 _dataReady=true;addPricing(); 3132 }).catch(function(e){_dataReady=true;addPricing();console.warn('[portal-meta]',e);}); 3133 }).catch(function(){fetchPPFromDOM();}); 3134 }else{ 3135 fetch(RYE+specialApis[path]).then(function(r){return r.ok?r.json():null}).then(function(data){ 3136 _dataReady=true; 3137 if(!data){addPricing();return;}
3138 (data.products||[]).forEach(function(p){ 3139 _pm[p.handle]={price:p.price||0,pct:p.pointsPct||0,cost:p.pointsCost||0}; 3140 }); 3141 addPricing(); 3142 }).catch(function(e){_dataReady=true;addPricing();console.warn('[portal-prices]',e);}); 3143 } 3144 // Hide duplicative headings on flash sales page 3145 if(path==='flash-sales-portal'){ 3146 var allEls=document.querySelectorAll('h1,h2,h3,h4,h5,h6,p,span,div'); 3147 for(var hi=0;hi<allEls.length;hi++){ 3148 var eTxt=allEls[hi].textContent.trim(); 3149 if(/matched to your size/i.test(eTxt)&&eTxt.length<40){allEls[hi].style.display='none';} 3150 if(/flash picks/i.test(eTxt)&&eTxt.length<30){allEls[hi].style.display='none';} 3151 } 3152 } 3153 // Audience filtering on portal pages (hide wrong-gender cards) 3154 if(portalCustId){ 3155 fetch(RYE+'/api/portal-prefs?customerId='+portalCustId,{credentials:'include'}) 3156 .then(function(r){return r.json()}) 3157 .then(function(data){ 3158 var prefs=data.prefs; 3159 if(!prefs||!prefs.sizing||!prefs.sizing.audience) return; 3160 var aud=prefs.sizing.audience; 3161 function hideWrongGender(){ 3162 var links=document.querySelectorAll('a[href*="/products/"]'); 3163 for(var gi=0;gi<links.length;gi++){ 3164 if(links[gi].classList.contains('fp-card')) continue; // already audience-filtered by /api/flash-picks 3165 var card=links[gi].closest('[class*="card"]')||links[gi].closest('li')||links[gi].parentElement; 3166 if(!card) continue; 3167 var txt=(card.textContent||'').toLowerCase(); 3168 var isW=/women/i.test(txt); 3169 var isM=/\bmen(?:'?s)?\b/i.test(txt)&&!isW; 3170 if(aud==='mens'&&isW&&!isM) card.style.display='none'; 3171 if(aud==='womens'&&isM) card.style.display='none'; 3172 } 3173 } 3174 hideWrongGender(); 3175 new MutationObserver(function(){hideWrongGender();}).observe(document.querySelector('main')||document.body,{childList:true,subtree:true}); 3176 }).catch(function(){}); 3177 } 3178 var _d=null; 3179 new MutationObserver(function(){if(_d)return;_d=setTimeout(function(){_d=null;addPricing();if(!_ppDone)fetchPPFromDOM();},300);}).observe(document.querySelector('main')||document.body,{childList:true,subtree:true}); 3180})(); 3181</script>
3181 3182<style> /* Push search below fixed header */.search-modal {padding-top: 150px !important;} .predictive-search {margin-top: 150px !important;} header-drawer + * {margin-top: 150px;} </style> 3183<div id="shopify-block-AaDdVZE5oZGZDcWUyY__7965443971275283598" class="shopify-block shopify-app-block"> 3184
3185<script type="module" src="https://cdn.shopify.com/extensions/01a039c6-265a-77a1-ba13-3a9b8dfdc273/personapay-discount-app-178/assets/persona-app.js" defer></script>
3185</div><div id="shopify-block-AYVh2eG5seWR6K0EzZ__6141582171523228424" class="shopify-block shopify-app-block">
3185<script src="//cdn.shopify.com/extensions/01a0ca72-e20e-7e37-b11b-69467298a8ea/29-adb7c67ff991881fe58b32352c944a481bbcbb8b/assets/BrazeUtilities.js" type="text/javascript"></script>
vendor: 1 bytes, line 3185
3185
3186<script src="//cdn.shopify.com/extensions/01a0ca72-e20e-7e37-b11b-69467298a8ea/29-adb7c67ff991881fe58b32352c944a481bbcbb8b/assets/BrazeBannerScript.js" type="text/javascript"></script>
3186 3187
3188<script type="text/javascript"> 3189 const brazeWebSDKPoller = setInterval(()=>{ 3190 // if the conditional is false, then we don't need to poll anymore and should clear the interval 3191 // if the conditional is true, but readValueFromLocalStorageWithRetry doesn't exist, we should retry 3192 // if the conditional is true and readValueFromLocalStorageWithRetry exists we should load the script and clear the interval 3193 readValueFromLocalStorageWithRetry('brazeAppSettings').then((data) => { 3194 loadScriptTag("https://cdn.shopify.com/extensions/01a0ca72-e20e-7e37-b11b-69467298a8ea/29-adb7c67ff991881fe58b32352c944a481bbcbb8b/assets/BrazeWebSdkScript.js", "module"); 3195 }); 3196 clearInterval(brazeWebSDKPoller); 3197 }, 2000) 3198</script>
3198 3199 3200 3201</div>
3201<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
3201 3202</body> 3203</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.