PageSourceSearch

https://paceline.fit/pages/blogs

html paceline.fit collected 2026-10-02 04:40:12 UTC 384,989 bytes, 3,203 lines download raw bytes

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&&gt().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 &amp; 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 &amp; 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 &amp; 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="{&quot;session_id&quot;:&quot;01M3XEK8HQMXX4AJXAR51DC5VY&quot;,&quot;publisher_shop_id&quot;:71067468049,&quot;theme_id&quot;:183449977105,&quot;theme_published&quot;:true,&quot;theme_store_id&quot;:2053,&quot;placement&quot;:&quot;collection&quot;,&quot;event_data&quot;:{&quot;handle&quot;:&quot;blogs&quot;,&quot;page_type&quot;:&quot;page&quot;},&quot;recommendations_tracking_enabled&quot;: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 &amp; 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 &amp; 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&#39;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&#39;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&#39;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 &amp; 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 &amp; 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 &amp; 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 (&ldquo;cookies&rdquo;), 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 &ldquo;Accept,&rdquo; &ldquo;Reject,&rdquo; or &ldquo;Manage Preferences,&rdquo; 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">&#215;</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.