PageSourceSearch

https://paceline.fit/

html paceline.fit collected 2026-10-02 04:40:02 UTC 376,916 bytes, 2,691 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: "", type: "index" }, "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: "index",
17        suffix: ""
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/">
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	Paceline | Get Rewarded for Working Out – Fitness App
48	</title>
49
50	
51	<meta name="description" content="Turn every workout into real rewards. Hit 150 minutes of elevated heart rate each week and unlock discounts up to 53% off from 75+ wellness and fitness brands. Free.">
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/">
57<meta property="og:title" content="Paceline | Get Rewarded for Working Out – Fitness App">
58<meta property="og:type" content="website">
59<meta property="og:description" content="Turn every workout into real rewards. Hit 150 minutes of elevated heart rate each week and unlock discounts up to 53% off from 75+ wellness and fitness brands. Free."><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="Paceline | Get Rewarded for Working Out – Fitness App">
64<meta name="twitter:description" content="Turn every workout into real rewards. Hit 150 minutes of elevated heart rate each week and unlock discounts up to 53% off from 75+ wellness and fitness brands. Free.">
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":"index"}</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":"8ac28c9e-7e48-4f18-ba12-e044f523eb2e-1790915999","pageurl":"paceline.fit\/","u":"c7ee5607cd7f","p":"home"};</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;01M3XEJYE76983QE8GQM5QX02G&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;&quot;,&quot;page_type&quot;:&quot;home&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 -->
675<script src="https://cdn.shopify.com/extensions/01a0f14c-14c3-7c54-8630-ec498be121ab/judgeme-770/assets/loader.js" type="text/javascript" defer="defer"></script>
675
676<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">
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: "index"};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":"fa988a05-e841-4832-9078-f44f54b0b816","pageType":"home","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":"home","requestId":"8ac28c9e-7e48-4f18-ba12-e044f523eb2e-1790915999"}};
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":"fa988a05-e841-4832-9078-f44f54b0b816"},"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":"home","requestId":"8ac28c9e-7e48-4f18-ba12-e044f523eb2e-1790915999","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="index"
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="1822473600000"><meta name="shopify-s" content="00000000-0000-0000-5000-000000000000" data-expiration="1790917800000"><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-index template-index">
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"
1018  }
1019</script>
1019
1020  
1020<script type="application/ld+json">
1021    {
1022      "@context": "http://schema.org",
1023      "@type": "WebSite",
1024      "name": "Paceline",
1025      "potentialAction": {
1026        "@type": "SearchAction",
1027        "target": "https:\/\/paceline.fit\/search?q={search_term_string}",
1028        "query-input": "required name=search_term_string"
1029      },
1030      "url": "https:\/\/paceline.fit"
1031    }
1032  </script>
1032
1033<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">
1034	<div class="small-12 columns">
1035    <style>
1036  #shopify-section-template--26041087328529__rich_text_and_button_xdzAyT [data-block-id="template--26041087328529__rich_text_and_button_xdzAyT__button_3cBkCU"] .button {
1037    font-size: 18px !important;
1038    width: 240px !important;
1039  }
1040</style>
1041  </div>
1042</div>
1043
1044<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>
1045<!-- END sections: header-group -->
1046		<div role="main" id="main-content">
1047			<div id="shopify-section-template--26041087328529__image_with_text_overlay_RgCici" 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">
1048	<div class="small-12 columns">
1049		<image-with-text-overlay class="image-with-text-overlay image-with-text-overlay--full-width-true text-center mobile-height-500 desktop-height-550 section-spacing section-spacing--disable-top section-spacing--disable-bottom" style="--text-color: #ffffff; --overlay-color-rgb: 0,0,0; --overlay-opacity: 0.3">
1050			<div class="image-with-text-overlay--bg parallax--true">
1051				
1052
1053<img class="lazyload thb-parallax-image" width="4460" height="2514" data-sizes="auto" src="//paceline.fit/cdn/shop/files/person-watching-sunset-above-the-clouds.jpg?crop=center&height=11&v=1776445763&width=20" data-srcset="//paceline.fit/cdn/shop/files/person-watching-sunset-above-the-clouds.jpg?v=1776445763&width=375 375w,//paceline.fit/cdn/shop/files/person-watching-sunset-above-the-clouds.jpg?v=1776445763&width=4460 4460w" fetchpriority="high" alt="" style="object-position: 65.3236% 44.7349%;" />
1054
1055</div>
1056
1057			<div class="image-with-text-overlay--content content-middle-center">
1058				<div class="image-with-text-overlay--content-inner content-width-small">
1059					
1060<h1 class="h1-xlarge image-with-text-overlay--heading" >HEALTHY FEELS GOOD</h1>
1061				</div>
1062			</div>
1063		</image-with-text-overlay>
1064	</div>
1065</div>
1066<script src="//paceline.fit/cdn/shop/t/76/assets/image-with-text-overlay.js?v=170233136777036907291779034828" defer="defer"></script>
1066
1067
1068</div><div id="shopify-section-template--26041087328529__image_with_text_overlay_p37kPh" 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">
1069	<div class="small-12 columns">
1070		<image-with-text-overlay class="image-with-text-overlay image-with-text-overlay--full-width-true text-center mobile-height-400 desktop-height-450 section-spacing section-spacing--disable-top section-spacing--disable-bottom" style="--text-color: #ffffff; --overlay-color-rgb: 0,0,0; --overlay-opacity: 0.0">
1071			<div class="image-with-text-overlay--bg parallax--false">
1072				
1073
1074<img class="lazyload " width="1" height="1" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Background_Rectangle_Null.png?crop=center&height=20&v=1780091165&width=20" data-srcset="//paceline.fit/cdn/shop/files/Background_Rectangle_Null.png?v=1780091165&width=375 375w,//paceline.fit/cdn/shop/files/Background_Rectangle_Null.png?v=1780091165&width=1 1w" fetchpriority="auto" alt="" style="object-position: 50.0% 50.0%;" />
1075
1076</div>
1077
1078			<div class="image-with-text-overlay--content content-middle-center">
1079				<div class="image-with-text-overlay--content-inner content-width-small">
1080					
1081<div class="rte description-size--medium" ><h4><strong>HEALTH ISN'T ABOUT YOUR BEST DAY. IT'S ABOUT EVERY DAY. PACELINE BRINGS ALL YOUR ACTIVITY TOGETHER INTO A SINGLE SCORE THAT REWARDS CONSISTENCY OVER INTENSITY.</strong></h4></div>
1082
1083									<a class="button accent" href="https://pacelinefit.app.link/Lp2VOz4MMBb" role="button" title="Download the App" >Download the App</a>
1084								
1085							
1086				</div>
1087			</div>
1088		</image-with-text-overlay>
1089	</div>
1090</div>
1091<script src="//paceline.fit/cdn/shop/t/76/assets/image-with-text-overlay.js?v=170233136777036907291779034828" defer="defer"></script>
1091
1092
1093<style> #shopify-section-template--26041087328529__image_with_text_overlay_p37kPh h4 {color: #ace3f6 !important;} </style></div><div id="shopify-section-template--26041087328529__spacer_BMy8g9" 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" />
1094<div class="row">
1095	<div class="small-12 columns">
1096		<div class="spacer has-border-separator" style="--spacer-mobile: 80px; --spacer-desktop: 160px;"></div>
1097	</div>
1098</div>
1099
1100</div><div id="shopify-section-template--26041087328529__rich_text_tjBzzG" class="shopify-section section-rich-text"><link href="//paceline.fit/cdn/shop/t/76/assets/rich-text.css?v=169034322568934835281779034828" rel="stylesheet" type="text/css" media="all" /><div class="row">
1101	<div class="small-12 columns">
1102		<div class="rich-text rich-text--transparent-true text-center text-position-center text-width-medium section-spacing-padding section-spacing--disable-top section-spacing--disable-bottom" style="--color-bg: rgba(0,0,0,0); --color-heading: #1a1c1d; --color-text: #2c2d2e; --solid-button-background: #2c2d2e; --bg-body: rgba(0,0,0,0); --color-accent: #2c2d2e; --color-accent-rgb: 44,45,46;">
1103			<div class="rich-text__inner">
1104				
1105<h3 class="h3 " >HOW PACELINE WORKS
1106</h3>
1107			</div>
1108		</div>
1109	</div>
1110</div>
1111
1112
1113<style> #shopify-section-template--26041087328529__rich_text_tjBzzG h3 {font-weight: 700;} </style></div><div id="shopify-section-template--26041087328529__image_with_text_slideshow_KdVegD" class="shopify-section section-image-with-text-slideshow">
1113<link href="//paceline.fit/cdn/shop/t/76/assets/image-with-text-slideshow.css?v=134046529135050208771779144213" rel="stylesheet" type="text/css" media="all" /><div class="row">
1114	<div class="small-12 columns">
1115		<div class="image-with-text-slideshow grid--image-medium image_first text-center column-spacing--medium section-spacing section-spacing--disable-top section-spacing--disable-bottom">
1116			<slide-show class="image-with-text-slideshow--image carousel inner-carousel" data-autoplay="10000" data-fade="true" data-dots="true"><div class="image-with-text-slideshow--image-slide carousel__slide">
1117						<div class="image-with-text-slideshow--image-media mobile-height-350 desktop-height-750">
1118							
1119
1120<img class="lazyload " width="1920" height="1080" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_9.png?crop=center&height=11&v=1778134572&width=20" data-srcset="//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_9.png?v=1778134572&width=375 375w,//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_9.png?v=1778134572&width=1920 1920w" fetchpriority="auto" alt="" style="object-position: 49.121% 86.328%;" />
1121
1122						</div>
1123					</div><div class="image-with-text-slideshow--image-slide carousel__slide">
1124						<div class="image-with-text-slideshow--image-media mobile-height-350 desktop-height-750">
1125							
1126
1127<img class="lazyload " width="1920" height="1080" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_6.png?crop=center&height=11&v=1778134572&width=20" data-srcset="//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_6.png?v=1778134572&width=375 375w,//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_6.png?v=1778134572&width=1920 1920w" fetchpriority="low" alt="" style="object-position: 49.121% 50.0%;" />
1128
1129						</div>
1130					</div><div class="image-with-text-slideshow--image-slide carousel__slide">
1131						<div class="image-with-text-slideshow--image-media mobile-height-350 desktop-height-750">
1132							
1133
1134<img class="lazyload " width="1884" height="1060" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_7.png?crop=center&height=11&v=1778595362&width=20" data-srcset="//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_7.png?v=1778595362&width=375 375w,//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_7.png?v=1778595362&width=1884 1884w" fetchpriority="low" alt="" style="object-position: 49.121% 88.086%;" />
1135
1136						</div>
1137					</div><div class="image-with-text-slideshow--image-slide carousel__slide">
1138						<div class="image-with-text-slideshow--image-media mobile-height-350 desktop-height-750">
1139							
1140
1141<img class="lazyload " width="1920" height="1080" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_8.png?crop=center&height=11&v=1778134572&width=20" data-srcset="//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_8.png?v=1778134572&width=375 375w,//paceline.fit/cdn/shop/files/Shopify_Slideshow_Test_8.png?v=1778134572&width=1920 1920w" fetchpriority="low" alt="" style="object-position: 48.535% 75.684%;" />
1142
1143						</div>
1144					</div></slide-show>
1145			<slide-show class="image-with-text-slideshow--content carousel inner-carousel" data-fade="true">
1146				
1147<div class="image-with-text-slideshow--content-content carousel__slide desktop-height-750" style="--color-bg:#14191f; --color-text:#ace3f6; --color-heading:#ffffff; --solid-button-background: #2c2d2e; --solid-button-background-hover: #1b1b1c;" >
1148						<div>
1149							
1150								<p class="subheading"></p>
1151							
1152							
1153								<h3 class="h4">CONNECT YOUR APPS</h3>
1154							
1155							
1156							<p>Link the apps and devices you already use, like Apple Health, Garmin, Oura, WHOOP, and more. Paceline will bring your activity and health data together automatically.</p>
1157							
1158							
1159						</div>
1160					</div>
1161				
1162<div class="image-with-text-slideshow--content-content carousel__slide desktop-height-750" style="--color-bg:#14191f; --color-text:#ace3f6; --color-heading:#ffffff; --solid-button-background: #2c2d2e; --solid-button-background-hover: #1b1b1c;" >
1163						<div>
1164							
1165								<p class="subheading"></p>
1166							
1167							
1168								<h3 class="h3">SEE YOUR PACELINE SCORE</h3>
1169							
1170							
1171							<p>Your activity and health signals are translated into one clear view of how your habits are supporting your health.</p>
1172							
1173							
1174						</div>
1175					</div>
1176				
1177<div class="image-with-text-slideshow--content-content carousel__slide desktop-height-750" style="--color-bg:#14191f; --color-text:#ace3f6; --color-heading:#ffffff; --solid-button-background: #2c2d2e; --solid-button-background-hover: #1b1b1c;" >
1178						<div>
1179							
1180								<p class="subheading"></p>
1181							
1182							
1183								<h3 class="h3">TRACK YOUR PROGRESS</h3>
1184							
1185							
1186							<p>Health rarely changes overnight. Keep track of your movement, recovery, and consistent activity. See the patterns that build up over time.</p>
1187							
1188							
1189						</div>
1190					</div>
1191				
1192<div class="image-with-text-slideshow--content-content carousel__slide desktop-height-750" style="--color-bg:#14191f; --color-text:#ace3f6; --color-heading:#ffffff; --solid-button-background: #2c2d2e; --solid-button-background-hover: #1b1b1c;" >
1193						<div>
1194							
1195								<p class="subheading"></p>
1196							
1197							
1198								<h3 class="h3">UNLOCK RECOGNITION & REWARDS</h3>
1199							
1200							
1201							<p>
1201Consistency deserves recognition. Earn Pacepoints for your steady healthy habits, and unlock rewards for brands that support healthy living.</p>
1202							
1203							
1204						</div>
1205					</div>
1206				
1207			</slide-show>
1208		</div>
1209	</div>
1210</div>
1211
1212</div><div id="shopify-section-template--26041087328529__spacer_MNEDke" 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" />
1213<div class="row">
1214	<div class="small-12 columns">
1215		<div class="spacer has-border-separator" style="--spacer-mobile: 80px; --spacer-desktop: 160px;"></div>
1216	</div>
1217</div>
1218
1219</div><div id="shopify-section-template--26041087328529__rich_text_enUNH3" class="shopify-section section-rich-text"><link href="//paceline.fit/cdn/shop/t/76/assets/rich-text.css?v=169034322568934835281779034828" rel="stylesheet" type="text/css" media="all" /><div class="row">
1220	<div class="small-12 columns">
1221		<div class="rich-text rich-text--transparent-true text-center text-position-center text-width-medium section-spacing-padding section-spacing--disable-top section-spacing--disable-bottom" style="--color-bg: rgba(0,0,0,0); --color-heading: #1a1c1d; --color-text: #ace3f6; --solid-button-background: #ace3f6; --bg-body: rgba(0,0,0,0); --color-accent: #2c2d2e; --color-accent-rgb: 44,45,46;">
1222			<div class="rich-text__inner">
1223				
1224<h3 class="h3 " >BUILT FOR PEOPLE WHO SHOW UP
1225</h3>
1226<div class="rte text-size-regular" >
1227								<p><strong>Paceline was built for people who believe consistency matters.
People who know that small actions repeated over time create the life they want to live. The early ride before work.
The walk you take even on busy days.
The habits that quietly add up over time.</strong></p><h6><strong>Staying healthy isn't about perfection. It's about showing up, again and again. Paceline recognizes that commitment and rewards the effort behind it.</strong></h6><p></p>
1228								
1229							</div>
1230			</div>
1231		</div>
1232	</div>
1233</div>
1234
1235
1236<style> #shopify-section-template--26041087328529__rich_text_enUNH3 .h3 {font-weight: 700;} #shopify-section-template--26041087328529__rich_text_enUNH3 h6 {color: #ace3f6 !important;} </style></div><div id="shopify-section-template--26041087328529__our_multicolumn_with_slider_hJtAY4" class="shopify-section">
1237<style>
1238.our-custom-multicolumn-slider-main-container {
1239    max-width: 1468px; 
1240    width: 80vw; 
1241    margin-left: auto;
1242    margin-right: auto;
1243
1244}
1245
1246.our-custom-multicolumn-slider-main-container .our-main-heading {
1247    text-align: center;
1248    color: rgb(255, 255, 255);
1249    font-size: 60px;
1250    font-weight: 400;
1251    text-transform: none;
1252    font-style: normal;
1253    line-height: 70px;
1254    padding-bottom: 40px;
1255    text-decoration: none;
1256}
1257  .our-custom-multicolumn-slider {
1258    display: grid;
1259    grid-template-columns: repeat(3, 1fr);
1260    gap: 60px;
1261    text-align: center;
1262    max-width: 1368px;
1263    margin: auto;
1264}
1265
1266.our-custom-multicolumn-slider-main-container:nth-child(2) .our-custom-multicolumn-slider {
1267    padding-top: 60px;
1268}
1269
1270  .our-custom-multicolumn-slider .box img {
1271    width: 60px;
1272  }
1273.our-custom-multicolumn-slider .box h3{
1274    margin-bottom: 8px;
1275    font-size: 40px;
1276    font-weight: 500;
1277    margin-bottom: 5px;
1278    line-height: 50px;
1279  
1280}
1281.our-custom-multicolumn-slider .box p {
1282    font-size: 26px;
1283    line-height: 35px;
1284    color: #ace3f6;
1285}
1286.our-custom-multicolumn-slider .box {
1287    border-style: solid;
1288    border-width: 1px 1px 1px 1px;
1289    border-color: #374353;
1290    transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;
1291    margin: 0px 0px 0px 0px;
1292    --e-column-margin-right: 0px;
1293    --e-column-margin-left: 0px;
1294    /* padding: 56px 22px 40px 22px; */
1295     padding: 100px 30px 64px 30px;
1296    border-radius: 24px 24px 24px 24px;
1297    text-align: center;
1298    display: flex;
1299    flex-direction: column;
1300    gap: 40px;
1301    align-items: center;   
1302}
1303/***********Responsiveness Start  ************/
1304@media (max-width: 1160px) {
1305.our-custom-multicolumn-slider {
1306	grid-template-columns: repeat(1, 1fr);
1307} 
1308.our-custom-multicolumn-slider .box h3 {
1309	font-size: 26px;
1310	line-height: 36px;
1311}
1312.our-custom-multicolumn-slider-main-container {
1313	max-width: 630px;
1314}
1315/* .our-custom-multicolumn-slider-main-container:nth-child(2) .our-custom-multicolumn-slider {
1316    padding-top: 30px;
1317} */
1318.our-custom-multicolumn-slider .box {
1319	border-style: default;
1320	border-width: 0px; 
1321	border-color: unset; 
1322	box-shadow: 0px 0px 0.5px rgba(0, 0, 0, 0.32), 0px 4px 8px rgba(0, 0, 0, 0.05), 0px 4px 40px rgba(0, 0, 0, 0.4);
1323	border-radius: 24px;
1324}
1325.our-custom-multicolumn-slider-main-container .our-main-heading {
1326	font-size: 30px;
1327	line-height: 40px;
1328	padding-bottom: 0px;
1329    margin-bottom: 0px;
1330}
1331  }
1332
1333    
1334  @media (max-width: 767px) {
1335  .our-custom-multicolumn-slider-main-container .our-main-heading {
1336	font-size: 28px;
1337	line-height: 36px;
1338}
1339
1340.our-custom-multicolumn-slider-main-container:nth-child(2) .our-custom-multicolumn-slider {
1341	padding-top: 30px;
1342}
1343
1344.our-custom-multicolumn-slider {
1345	gap: 30px;
1346}
1347
1348.about-us-section-rich-text a {
1349	margin-top: 20px;
1350}
1351  
1352  }
1353</style>
1354<div class="our-custom-multicolumn-slider-main-container">
1355
1356<div class="our-custom-multicolumn-slider" id="custom-multicolumn">
1357  
1358    <div class="box">
1359      
1360      <h3>7.3 BILLION EXERCISE MINUTES</h3>
1361      <p>Logged by Paceline members</p>
1362    </div>
1363  
1364    <div class="box">
1365      
1366      <h3>3.6 MILLION REWARD OFFERS</h3>
1367      <p>Claimed by Paceline members</p>
1368    </div>
1369  
1370    <div class="box">
1371      
1372      <h3>35 EXTRA EXERCISE MINUTES</h3>
1373      <p>Recorded per week by Paceline members</p>
1374    </div>
1375  
1376</div>
1377<!-- <div class="slider-dots" id="slider-dots"></div> -->
1378</div>
1379<!-- 
1379<script>
1380  document.addEventListener("DOMContentLoaded", function() {
1381    let slider = document.getElementById("custom-multicolumn");
1382    let dotsContainer = document.getElementById("slider-dots");
1383    let totalSlides = slider.children.length;
1384    let currentIndex = 0;
1385    if (window.innerWidth <= 768) {
1386      for (let i = 0; i < totalSlides; i++) {
1387        let dot = document.createElement("span");
1388        dot.classList.add("dot");
1389        dot.dataset.index = i;
1390        dotsContainer.appendChild(dot);
1391      }
1392      let dots = document.querySelectorAll(".dot");
1393      dots[0].classList.add("active");
1394      function updateActiveDot(index) {
1395        dots.forEach(d => d.classList.remove("active"));
1396        dots[index].classList.add("active");
1397      }
1398      function autoSlide() {
1399        currentIndex = (currentIndex + 1) % totalSlides;
1400        slider.scrollTo({ left: currentIndex * slider.clientWidth, behavior: "smooth" });
1401        updateActiveDot(currentIndex);
1402      }
1403      let slideInterval = setInterval(autoSlide, 3000);
1404      slider.addEventListener("scroll", function() {
1405        let index = Math.round(slider.scrollLeft / slider.clientWidth);
1406        currentIndex = index;
1407        updateActiveDot(index);
1408      });
1409      dots.forEach(dot => {
1410        dot.addEventListener("click", function() {
1411          let index = this.dataset.index;
1412          currentIndex = index;
1413          slider.scrollTo({ left: index * slider.clientWidth, behavior: "smooth" });
1414          updateActiveDot(index);
1415        });
1416      });
1417    }
1418  });
1419</script>
1419 --><style> #shopify-section-template--26041087328529__our_multicolumn_with_slider_hJtAY4 div.box {background: linear-gradient( 0deg, #e5774040 0%, #ebb44750 50%, #47c2eb60 100% );} </style></div><div id="shopify-section-template--26041087328529__spacer_NQPYiU" 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" />
1420<div class="row">
1421	<div class="small-12 columns">
1422		<div class="spacer has-border-separator" style="--spacer-mobile: 80px; --spacer-desktop: 160px;"></div>
1423	</div>
1424</div>
1425
1426</div><div id="shopify-section-template--26041087328529__image_with_text_overlay_M7RWHJ" 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">
1427	<div class="small-12 columns">
1428		<image-with-text-overlay class="image-with-text-overlay image-with-text-overlay--full-width-true text-center mobile-height-400 desktop-height-450 section-spacing section-spacing--disable-top section-spacing--disable-bottom" style="--text-color: #ffffff; --overlay-color-rgb: 0,0,0; --overlay-opacity: 0.0">
1429			<div class="image-with-text-overlay--bg parallax--false">
1430				
1431
1432<img class="lazyload " width="1" height="1" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Background_Rectangle_Null.png?crop=center&height=20&v=1780091165&width=20" data-srcset="//paceline.fit/cdn/shop/files/Background_Rectangle_Null.png?v=1780091165&width=375 375w,//paceline.fit/cdn/shop/files/Background_Rectangle_Null.png?v=1780091165&width=1 1w" fetchpriority="auto" alt="" style="object-position: 50.0% 50.0%;" />
1433
1434</div>
1435
1436			<div class="image-with-text-overlay--content content-middle-center">
1437				<div class="image-with-text-overlay--content-inner content-width-small">
1438					
1439<h3 class="h2 image-with-text-overlay--heading" >NOT JUST ANOTHER FITNESS APP</h3>
1440<div class="rte description-size--medium" ><h6><strong>By organizing and interpreting your activity data, Paceline helps unlock benefits across a growing ecosystem of partners who recognize the value of healthy living.</strong></h6><h6><strong>Today that means rewards. Tomorrow it means access to products and services that better reflect the way you live. Because consistent, healthy lives deserve to be understood.</strong></h6></div>
1441
1442									<a class="button accent" href="https://pacelinefit.app.link/Lp2VOz4MMBb" role="button" title="Download the App" >Download the App</a>
1443								
1444							
1445				</div>
1446			</div>
1447		</image-with-text-overlay>
1448	</div>
1449</div>
1450<script src="//paceline.fit/cdn/shop/t/76/assets/image-with-text-overlay.js?v=170233136777036907291779034828" defer="defer"></script>
1450
1451
1452<style> #shopify-section-template--26041087328529__image_with_text_overlay_M7RWHJ h6 {color: #ace3f6 !important;} </style></div><div id="shopify-section-template--26041087328529__scrolling_images_dcp83U" class="shopify-section section-scrolling-images"><link href="//paceline.fit/cdn/shop/t/76/assets/scrolling-images.css?v=177563569989113333931779034828" rel="stylesheet" type="text/css" media="all" /><div class="scrolling-images section-spacing" id="scrolling-images-template--26041087328529__scrolling_images_dcp83U">
1453	<div class="scrolling-images--inner scrolling-images--center direction-left scrolling-images--spacing-large" style="--marquee-speed: 50s">
1454		
1455		
1456			<div>
1457					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1458<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Screenshot_2026-04-07_at_9.18.03_AM.png?crop=center&height=25&v=1780409847&width=20" data-srcset="//paceline.fit/cdn/shop/files/Screenshot_2026-04-07_at_9.18.03_AM.png?v=1780409847&width=864 864w" fetchpriority="auto" alt="" style="object-position: 67.871% 56.152%;" />
1459</div><div class="scrolling-images--content"><h6></h6>
1460</div></div>
1461					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1462<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Image_from_iOS_2.jpg?crop=center&height=25&v=1780413931&width=20" data-srcset="//paceline.fit/cdn/shop/files/Image_from_iOS_2.jpg?v=1780413931&width=864 864w" fetchpriority="auto" alt="" style="object-position: 29.346% 38.232%;" />
1463</div><div class="scrolling-images--content"><h6></h6>
1464</div></div>
1465					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1466<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_1386.jpg?crop=center&height=25&v=1780347800&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_1386.jpg?v=1780347800&width=864 864w" fetchpriority="auto" alt="" style="object-position: 49.121% 43.75%;" />
1467</div><div class="scrolling-images--content"><h6></h6>
1468</div></div>
1469					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1470<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/3F316FFD-744B-4C2A-84C4-4A5CA2482517_261a347d-0dbb-4c4a-bd59-e20adc5b6002.jpg?crop=center&height=25&v=1780346658&width=20" data-srcset="//paceline.fit/cdn/shop/files/3F316FFD-744B-4C2A-84C4-4A5CA2482517_261a347d-0dbb-4c4a-bd59-e20adc5b6002.jpg?v=1780346658&width=864 864w" fetchpriority="auto" alt="" style="object-position: 62.3959% 39.6477%;" />
1471</div><div class="scrolling-images--content"><h6></h6>
1472</div></div>
1473					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1474<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/6E87A1EA-0C47-4C49-A015-311114FC3B3F.jpg?crop=center&height=25&v=1780365927&width=20" data-srcset="//paceline.fit/cdn/shop/files/6E87A1EA-0C47-4C49-A015-311114FC3B3F.jpg?v=1780365927&width=864 864w" fetchpriority="auto" alt="" style="object-position: 18.066% 50.293%;" />
1475</div><div class="scrolling-images--content"><h6></h6>
1476</div></div>
1477					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1478<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_3214_1.jpg?crop=center&height=25&v=1780366042&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_3214_1.jpg?v=1780366042&width=864 864w" fetchpriority="auto" alt="" style="object-position: 44.5525% 43.2201%;" />
1479</div><div class="scrolling-images--content"><h6></h6>
1480</div></div>
1481					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1482<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_7746.jpg?crop=center&height=25&v=1780410165&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_7746.jpg?v=1780410165&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 50.0%;" />
1483</div><div class="scrolling-images--content"><h6></h6>
1484</div></div>
1485					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1486<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_6151_1_59c5d621-d3d6-4bce-88a0-f187bb3e07f7.jpg?crop=center&height=25&v=1780409974&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_6151_1_59c5d621-d3d6-4bce-88a0-f187bb3e07f7.jpg?v=1780409974&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 50.0%;" />
1487</div><div class="scrolling-images--content"><h6></h6>
1488</div></div>
1489					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1490<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/5C2FCF08-733E-49C1-A02C-E49F9E065C45_1.jpg?crop=center&height=25&v=1780413744&width=20" data-srcset="//paceline.fit/cdn/shop/files/5C2FCF08-733E-49C1-A02C-E49F9E065C45_1.jpg?v=1780413744&width=864 864w" fetchpriority="auto" alt="" style="object-position: 52.148% 91.699%;" />
1491</div><div class="scrolling-images--content"><h6></h6>
1492</div></div>
1493					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1494<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/3_aeb3c453-1ce3-4fa3-b480-232a1c92f8e8.png?crop=center&height=25&v=1780413079&width=20" data-srcset="//paceline.fit/cdn/shop/files/3_aeb3c453-1ce3-4fa3-b480-232a1c92f8e8.png?v=1780413079&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 48.535%;" />
1495</div><div class="scrolling-images--content"><h6></h6>
1496</div></div>
1497					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1498<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_1318.jpg?crop=center&height=25&v=1780366234&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_1318.jpg?v=1780366234&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 48.926%;" />
1499</div><div class="scrolling-images--content"><h6></h6>
1500</div></div>
1501					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1502<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_0774.jpg?crop=center&height=25&v=1780366308&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_0774.jpg?v=1780366308&width=864 864w" fetchpriority="auto" alt="" style="object-position: 48.535% 30.469%;" />
1503</div><div class="scrolling-images--content"><h6></h6>
1504</div></div>
1505					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1506<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_6491_92c037f1-c1fe-4a18-aeeb-21dba794a774.jpg?crop=center&height=25&v=1780366439&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_6491_92c037f1-c1fe-4a18-aeeb-21dba794a774.jpg?v=1780366439&width=864 864w" fetchpriority="auto" alt="" style="object-position: 53.467% 49.219%;" />
1507</div><div class="scrolling-images--content"><h6></h6>
1508</div></div>
1509					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1510<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/1_be723e18-949d-4c2d-ae89-505cdeb48810.png?crop=center&height=25&v=1780413136&width=20" data-srcset="//paceline.fit/cdn/shop/files/1_be723e18-949d-4c2d-ae89-505cdeb48810.png?v=1780413136&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 34.863%;" />
1511</div><div class="scrolling-images--content"><h6></h6>
1512</div></div>
1513					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1514<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/C2B0A402-37B0-4080-91A6-5F998C6E26BC_9cf87194-3ceb-4c5a-bc7d-0e4add36f802.jpg?crop=center&height=25&v=1780366863&width=20" data-srcset="//paceline.fit/cdn/shop/files/C2B0A402-37B0-4080-91A6-5F998C6E26BC_9cf87194-3ceb-4c5a-bc7d-0e4add36f802.jpg?v=1780366863&width=864 864w" fetchpriority="auto" alt="" style="object-position: 41.27% 34.16%;" />
1515</div><div class="scrolling-images--content"><h6></h6>
1516</div></div>
1517					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1518<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/image0_c8a149e7-a3c6-46c9-bf50-321a32ee8ab3.jpg?crop=center&height=25&v=1780366890&width=20" data-srcset="//paceline.fit/cdn/shop/files/image0_c8a149e7-a3c6-46c9-bf50-321a32ee8ab3.jpg?v=1780366890&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 30.469%;" />
1519</div><div class="scrolling-images--content"><h6></h6>
1520</div></div></div>
1521		
1522			<div>
1523					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1524<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Screenshot_2026-04-07_at_9.18.03_AM.png?crop=center&height=25&v=1780409847&width=20" data-srcset="//paceline.fit/cdn/shop/files/Screenshot_2026-04-07_at_9.18.03_AM.png?v=1780409847&width=864 864w" fetchpriority="auto" alt="" style="object-position: 67.871% 56.152%;" />
1525</div><div class="scrolling-images--content"><h6></h6>
1526</div></div>
1527					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1528<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/Image_from_iOS_2.jpg?crop=center&height=25&v=1780413931&width=20" data-srcset="//paceline.fit/cdn/shop/files/Image_from_iOS_2.jpg?v=1780413931&width=864 864w" fetchpriority="auto" alt="" style="object-position: 29.346% 38.232%;" />
1529</div><div class="scrolling-images--content"><h6></h6>
1530</div></div>
1531					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1532<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_1386.jpg?crop=center&height=25&v=1780347800&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_1386.jpg?v=1780347800&width=864 864w" fetchpriority="auto" alt="" style="object-position: 49.121% 43.75%;" />
1533</div><div class="scrolling-images--content"><h6></h6>
1534</div></div>
1535					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1536<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/3F316FFD-744B-4C2A-84C4-4A5CA2482517_261a347d-0dbb-4c4a-bd59-e20adc5b6002.jpg?crop=center&height=25&v=1780346658&width=20" data-srcset="//paceline.fit/cdn/shop/files/3F316FFD-744B-4C2A-84C4-4A5CA2482517_261a347d-0dbb-4c4a-bd59-e20adc5b6002.jpg?v=1780346658&width=864 864w" fetchpriority="auto" alt="" style="object-position: 62.3959% 39.6477%;" />
1537</div><div class="scrolling-images--content"><h6></h6>
1538</div></div>
1539					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1540<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/6E87A1EA-0C47-4C49-A015-311114FC3B3F.jpg?crop=center&height=25&v=1780365927&width=20" data-srcset="//paceline.fit/cdn/shop/files/6E87A1EA-0C47-4C49-A015-311114FC3B3F.jpg?v=1780365927&width=864 864w" fetchpriority="auto" alt="" style="object-position: 18.066% 50.293%;" />
1541</div><div class="scrolling-images--content"><h6></h6>
1542</div></div>
1543					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1544<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_3214_1.jpg?crop=center&height=25&v=1780366042&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_3214_1.jpg?v=1780366042&width=864 864w" fetchpriority="auto" alt="" style="object-position: 44.5525% 43.2201%;" />
1545</div><div class="scrolling-images--content"><h6></h6>
1546</div></div>
1547					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1548<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_7746.jpg?crop=center&height=25&v=1780410165&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_7746.jpg?v=1780410165&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 50.0%;" />
1549</div><div class="scrolling-images--content"><h6></h6>
1550</div></div>
1551					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1552<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_6151_1_59c5d621-d3d6-4bce-88a0-f187bb3e07f7.jpg?crop=center&height=25&v=1780409974&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_6151_1_59c5d621-d3d6-4bce-88a0-f187bb3e07f7.jpg?v=1780409974&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 50.0%;" />
1553</div><div class="scrolling-images--content"><h6></h6>
1554</div></div>
1555					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1556<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/5C2FCF08-733E-49C1-A02C-E49F9E065C45_1.jpg?crop=center&height=25&v=1780413744&width=20" data-srcset="//paceline.fit/cdn/shop/files/5C2FCF08-733E-49C1-A02C-E49F9E065C45_1.jpg?v=1780413744&width=864 864w" fetchpriority="auto" alt="" style="object-position: 52.148% 91.699%;" />
1557</div><div class="scrolling-images--content"><h6></h6>
1558</div></div>
1559					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1560<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/3_aeb3c453-1ce3-4fa3-b480-232a1c92f8e8.png?crop=center&height=25&v=1780413079&width=20" data-srcset="//paceline.fit/cdn/shop/files/3_aeb3c453-1ce3-4fa3-b480-232a1c92f8e8.png?v=1780413079&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 48.535
1560%;" />
1561</div><div class="scrolling-images--content"><h6></h6>
1562</div></div>
1563					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1564<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_1318.jpg?crop=center&height=25&v=1780366234&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_1318.jpg?v=1780366234&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 48.926%;" />
1565</div><div class="scrolling-images--content"><h6></h6>
1566</div></div>
1567					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1568<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_0774.jpg?crop=center&height=25&v=1780366308&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_0774.jpg?v=1780366308&width=864 864w" fetchpriority="auto" alt="" style="object-position: 48.535% 30.469%;" />
1569</div><div class="scrolling-images--content"><h6></h6>
1570</div></div>
1571					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1572<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/IMG_6491_92c037f1-c1fe-4a18-aeeb-21dba794a774.jpg?crop=center&height=25&v=1780366439&width=20" data-srcset="//paceline.fit/cdn/shop/files/IMG_6491_92c037f1-c1fe-4a18-aeeb-21dba794a774.jpg?v=1780366439&width=864 864w" fetchpriority="auto" alt="" style="object-position: 53.467% 49.219%;" />
1573</div><div class="scrolling-images--content"><h6></h6>
1574</div></div>
1575					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1576<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/1_be723e18-949d-4c2d-ae89-505cdeb48810.png?crop=center&height=25&v=1780413136&width=20" data-srcset="//paceline.fit/cdn/shop/files/1_be723e18-949d-4c2d-ae89-505cdeb48810.png?v=1780413136&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 34.863%;" />
1577</div><div class="scrolling-images--content"><h6></h6>
1578</div></div>
1579					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1580<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/C2B0A402-37B0-4080-91A6-5F998C6E26BC_9cf87194-3ceb-4c5a-bc7d-0e4add36f802.jpg?crop=center&height=25&v=1780366863&width=20" data-srcset="//paceline.fit/cdn/shop/files/C2B0A402-37B0-4080-91A6-5F998C6E26BC_9cf87194-3ceb-4c5a-bc7d-0e4add36f802.jpg?v=1780366863&width=864 864w" fetchpriority="auto" alt="" style="object-position: 41.27% 34.16%;" />
1581</div><div class="scrolling-images--content"><h6></h6>
1582</div></div>
1583					<div class="scrolling-images--item" ><div class="scrolling-images--image aspect-ratio aspect-ratio--portrait" style="--ratio-percent:100.0%; width: 432px;">
1584<img class="lazyload retina_size " width="432" height="540" data-sizes="auto" src="//paceline.fit/cdn/shop/files/image0_c8a149e7-a3c6-46c9-bf50-321a32ee8ab3.jpg?crop=center&height=25&v=1780366890&width=20" data-srcset="//paceline.fit/cdn/shop/files/image0_c8a149e7-a3c6-46c9-bf50-321a32ee8ab3.jpg?v=1780366890&width=864 864w" fetchpriority="auto" alt="" style="object-position: 50.0% 30.469%;" />
1585</div><div class="scrolling-images--content"><h6></h6>
1586</div></div></div>
1587		
1588	</div>
1589</div>
1590
1591<style> #shopify-section-template--26041087328529__scrolling_images_dcp83U img {border-radius: 24px;} </style></div>
1592		</div>
1593		<!-- BEGIN sections: footer-group -->
1594<section id="shopify-section-sections--26041080447249__footer_first_Y3aYCT" class="shopify-section shopify-section-group-footer-group custom-footer">
1595
1596<style>
1597.custom-footer {
1598	background: #1f252e;
1599	padding-top: 150px;
1600  border-bottom: 1px solid #374353;
1601	padding-bottom: 50px;
1602}
1603.custom-footer-logo img {
1604	height: 95px;
1605}
1606.custom-footer-social-icons img{
1607  height: 48px
1608}
1609.custom-footer-social-icons a img {
1610  transition: transform 0.3s ease;
1611}
1612
1613.custom-footer-social-icons a:hover img {
1614  transform: translateY(-13px);
1615}
1616
1617/********Responsiveness Start******/
1618@media (max-width: 767px) {
1619.custom-footer footer {
1620	flex-direction: column;
1621	gap: 50px;
1622}
1623.custom-footer {
1624	padding-top: 65px;
1625	padding-bottom: 50px;
1626    width: 100% !important;
1627}
1628.custom-footer-social-icons img {
1629  height: 48px !important;
1630}
1631  
1632.custom-footer-logo img {
1633	height: 65px;
1634}
1635.custom-footer-social-icons {
1636	gap: 40px !important;
1637}
1638.custom-footer-links {
1639	padding-bottom: 65px !important;
1640}
1641}
1642@media (max-width: 480px) {
1643 .footer-links {
1644	display: flex;
1645	gap: 14px !important;
1646	flex-direction: column;
1647} 
1648}
1649</style>
1650
1651<footer style="display: flex; justify-content: space-between; align-items: center; padding: 20px;">
1652  <!-- Left: Logo -->
1653  <div class="custom-footer-logo">
1654    
1655      <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">
1656    
1657  </div>
1658
1659  <!-- Right: Social Icons -->
1660  <div class="custom-footer-social-icons" style="display: flex; gap: 15px;">
1661    
1662      <a href="/instagram" target="_blank">
1663        <img src="//paceline.fit/cdn/shop/files/instagram_medium.png?v=1744195213" alt="Instagram" style="height: 64px;">
1664      </a>
1665    
1666
1667    
1668      <a href="/linkedin" target="_blank">
1669        <img src="//paceline.fit/cdn/shop/files/linkedin_medium.png?v=1744195213" alt="LinkedIn" style="height: 64px;">
1670      </a>
1671    
1672
1673    
1674      <a href="/tiktok" target="_blank">
1675        <img src="//paceline.fit/cdn/shop/files/tiktok_medium.png?v=1744195213" alt="TikTok" style="height: 64px;">
1676      </a>
1677    
1678  </div>
1679</footer>
1680</section><section id="shopify-section-sections--26041080447249__footer_second_REyyEm" class="shopify-section shopify-section-group-footer-group custom-footer-links">
1681
1682<style>
1683.custom-footer-links {
1684	background: #1f252e;
1685	padding-top: 50px;
1686	padding-bottom: 150px;
1687    width: 100% !important;
1688}
1689.custom-footer-links a {
1690	text-transform: uppercase;
1691}
1692.footer-links-wrapper {
1693  display: flex;
1694  justify-content: space-between;
1695  flex-wrap: wrap;
1696  padding: 20px;
1697  gap: 20px;
1698  width: 100%;
1699}
1700
1701.footer-text {
1702  flex: 1;
1703  min-width: 410px;
1704}
1705
1706.footer-links {
1707  display: flex;
1708  gap: 40px;
1709  flex: 3;
1710  justify-content: flex-end;
1711  flex-wrap: wrap;
1712}
1713.footer-column {
1714  display: flex;
1715  flex-direction: column;
1716  gap: 8px;
1717  min-width: 100px;
1718}
1719
1720@media (max-width: 900px) {
1721  .footer-links-wrapper {
1722    flex-direction: column;
1723    align-items: flex-start;
1724  }
1725.footer-text {
1726  min-width: unset !important;
1727}
1728  .footer-text {
1729    margin-bottom: 15px;
1730  }
1731
1732  .footer-links {
1733    width: 100%;
1734    display: flex;
1735    justify-content: space-between;
1736    gap: 0;
1737  }
1738
1739  .footer-column {
1740    flex: 1;
1741    min-width: auto;
1742    gap: 10px;
1743  }
1744
1745  /* .footer-links .footer-column:nth-child(n+3) {
1746    display: none;
1747  }
1748
1749  .footer-links::after {
1750    content: '';
1751    flex: 1;
1752  } */
1753.footer-links-wrapper {
1754	flex-direction: column-reverse;
1755}
1756.footer-links-wrapper {
1757	gap: 50px;
1758}
1759.custom-footer-links {
1760	padding-bottom: 30px !important;
1761}
1762}
1763</style>
1764
1765<div class="footer-links-wrapper">
1766  <div class="footer-text">
1767    <p>Copyright © 2026 Tam(squared) Inc. All rights reserved.</p>
1768  </div>
1769
1770  <div class="footer-links">
1771    <div class="footer-column">
1772      
1773<a href="https://paceline.fit/">Paceline</a>
1774<a href="/pages/about-us">About us</a>
1775<a href="/pages/blogs">The minutes</a>
1776<a href="/pages/faqs">Help Center & FAQs</a>
1777<a href="/pages/privacy-policy">Privacy Policy</a>
1778<a href="/pages/terms">Terms</a>
1779<a href="/pages/health-data-privacy-policy">Health Data Privacy</a>
1780<a href="/pages/careers">Careers</a>
1781    </div>
1782    <div class="footer-column">
1783      
1784<a href="/pages/cookie-and-tracking-technologies-notice">Cookies</a>
1785<a href="#cookie-preferences">Cookie Preferences</a>
1786<a href="/pages/rewards-program-terms">Rewards Program Terms</a>
1787<a href="/pages/canada-and-quebec-addendum">Canada and Quebec Addendum</a>
1788<a href="/policies/refund-policy">Marketplace Return Policy</a>
1789<a href="/pages/data-sharing-opt-out">Do Not Sell or Share My Personal Information</a>
1790    </div>
1791  </div>
1792</div>
1793</section>
1794<!-- END sections: footer-group -->
1795		<cart-drawer class="side-panel cart-drawer has-shadow--false" id="Cart-Drawer" tabindex="-1">
1796	<div class="side-panel-inner">
1797		<div class="side-panel-header">
1798			<div>
1799				<span class="h6">Cart <sup>0</sup></span>
1800				<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">
1801<path d="M13 1L1 13M13 13L1 1" stroke="var(--color-body)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1802</svg></side-panel-close>
1803			</div>
1804		</div>
1805		<div class="side-panel-content"><div class="cart-drawer__empty-cart">
1806					<svg width="82" height="82" viewBox="0 0 82 82" fill="none" xmlns="http://www.w3.org/2000/svg">
1807<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)"/>
1808<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)"/>
1809<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)"/>
1810<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)"/>
1811<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)"/>
1812<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)"/>
1813<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)"/>
1814<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)"/>
1815</svg>
1816					<p>Your cart is currently empty.</p>
1817					<a class="button accent2" href="/collections/all"><span>Start Shopping</span></a>
1818				</div></div></div>
1819</cart-drawer>
1820		<link id="Product" rel="stylesheet" href="//paceline.fit/cdn/shop/t/76/assets/product.css?v=152283141068544812601782421677" media="print" onload="this.media='all'">
1821<div class="side-panel product-drawer" id="Product-Drawer" tabindex="-1">
1822	<div class="side-panel-inner">
1823		<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">
1824<path d="M13 1L1 13M13 13L1 1" stroke="var(--color-body)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1825</svg></side-panel-close>
1826		<div class="side-panel-content" id="Product-Drawer-Content">
1827
1828		</div>
1829	</div>
1830</div>
1831		<div class="side-panel search-drawer" tabindex="-1" id="Search-Drawer">
1832	<search-form data-drawer="1" class="side-panel-inner searchform">
1833		<div class="side-panel-header">
1834			<div>
1835				<form role="search" method="get" class="searchform" action="/search">
1836					<fieldset>
1837						<label for="side-panel-search-input">Search</label>
1838						<input id="side-panel-search-input" type="search" class="search-field" placeholder="Search for brands, products, workouts, etc." value="" name="q" autocomplete="off">
1839					</fieldset>
1840				</form>
1841				<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">
1842<path d="M13 1L1 13M13 13L1 1" stroke="var(--color-body)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1843</svg></side-panel-close>
1844			</div>
1845		</div><div class="side-panel-content side-panel-content--has-tabs thb-predictive-search">
1846
1847		</div><div class="side-panel-content side-panel-content--initial">
1848			<div class="thb-predictive-search"><div class="thb-predictive-search--promotion product-card-spacing-small">
1849						<span class="thb-predictive-search--label">Trending Now</span>
1850						<div class="thb-predictive-search--promotion-products">
1851							<ul class="products row small-up-1 medium-up-2"><li class="columns">
1852										<product-card class="product-card text-left product-card--content-spacing-true product-card--border-false has-shadow--true">
1853  <figure class="product-featured-image thb-hover">
1854    <span class="product-card--badges top left">
1855	
1856	
1857</span>
1858
1859		
1860    <a href="/products/100-mineral-antioxidant-sunscreen-spray-with-spf-30" title="100% Mineral Antioxidant Sunscreen 
1860Spray with SPF 30" class="product-featured-image-link aspect-ratio aspect-ratio--portrait" style="--padding-bottom: 125.0%;">
1861<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"  />
1862
1863<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 
1863Spray with SPF 30" style="object-position: 49.512% 61.914%;" />
1864<quick-view class="product-card-quickview" data-product-handle="100-mineral-antioxidant-sunscreen-spray-with-spf-30" tabindex="-1">
1865				<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">
1866	<circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle>
1867</svg></div>
1868				<span>Quick view</span>
1869			</quick-view></a>
1870  </figure>
1871	<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>
1872<style>.paceline-pp-price { color: #85CC52 !important; }</style>
1873<span class="price">
1874	<ins><span class="amount "><span class="from">From</span> $20.00</span></ins>
1875         
1876	<small class="unit-price  hidden">
1877		<span></span>
1878    <span class="unit-price-separator">/</span>
1879		<span>
1880    </span>
1881	</small>
1882</span>
1883<div id="inventory-10773370339601" class="product-inventory-notice--wrapper">
1884	
1885		
1886	
1887</div><div class="product-card--add-to-cart-button-wrapper">
1888				<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" >
1889					<svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg">
1890	<circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle>
1891</svg>
1892					<span class="product-card--add-to-cart-text">Choose options</span>
1893				</quick-view>
1894			</div></div>
1895</product-card>
1896									</li><li class="columns">
1897										<product-card class="product-card text-left product-card--content-spacing-true product-card--border-false has-shadow--true">
1898  <figure class="product-featured-image thb-hover">
1899    <span class="product-card--badges top left">
1900	
1901	
1902</span>
1903
1904		
1905    <a href="/products/100-mineral-antioxidant-sunscreen-spray-with-spf-50" title="100% Mineral Antioxidant Sunscreen 
1905Spray with SPF 50" class="product-featured-image-link aspect-ratio aspect-ratio--portrait" style="--padding-bottom: 125.0%;">
1906<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"  />
1907
1908<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 
1908Spray with SPF 50" style="object-position: 49.512% 96.191%;" />
1909<quick-view class="product-card-quickview" data-product-handle="100-mineral-antioxidant-sunscreen-spray-with-spf-50" tabindex="-1">
1910				<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">
1911	<circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle>
1912</svg></div>
1913				<span>Quick view</span>
1914			</quick-view></a>
1915  </figure>
1916	<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>
1917<style>.paceline-pp-price { color: #85CC52 !important; }</style>
1918<span class="price">
1919	<ins><span class="amount "><span class="from">From</span> $20.00</span></ins>
1920         
1921	<small class="unit-price  hidden">
1922		<span></span>
1923    <span class="unit-price-separator">/</span>
1924		<span>
1925    </span>
1926	</small>
1927</span>
1928<div id="inventory-10773370011921" class="product-inventory-notice--wrapper">
1929	
1930		
1931	
1932</div><div class="product-card--add-to-cart-button-wrapper">
1933				<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" >
1934					<svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg">
1935	<circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle>
1936</svg>
1937					<span class="product-card--add-to-cart-text">Choose options</span>
1938				</quick-view>
1939			</div></div>
1940</product-card>
1941									</li><li class="columns">
1942										<product-card class="product-card text-left product-card--content-spacing-true product-card--border-false has-shadow--true">
1943  <figure class="product-featured-image thb-hover">
1944    <span class="product-card--badges top left">
1945	
1946	
1947</span>
1948
1949		
1950    <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%;">
1951<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"  />
1952
1953<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%;" />
1954<quick-view class="product-card-quickview" data-product-handle="100-mineral-sunscreen-lotion-with-spf-30" tabindex="-1">
1955				<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">
1956	<circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle>
1957</svg></div>
1958				<span>Quick view</span>
1959			</quick-view></a>
1960  </figure>
1961	<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>
1962<style>.paceline-pp-price { color: #85CC52 !important; }</style>
1963<span class="price">
1964	<ins><span class="amount "><span class="from">From</span> $24.00</span></ins>
1965         
1966	<small class="unit-price  hidden">
1967		<span></span>
1968    <span class="unit-price-separator">/</span>
1969		<span>
1970    </span>
1971	</small>
1972</span>
1973<div id="inventory-10773370568977" class="product-inventory-notice--wrapper">
1974	
1975		
1976	
1977</div><div class="product-card--add-to-cart-button-wrapper">
1978				<quick-view class="product-card--add-to-cart-button button accent" data-product-id="53049580650
1978769" data-product-handle="100-mineral-sunscreen-lotion-with-spf-30" tabindex="-1" >
1979					<svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg">
1980	<circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle>
1981</svg>
1982					<span class="product-card--add-to-cart-text">Choose options</span>
1983				</quick-view>
1984			</div></div>
1985</product-card>
1986									</li><li class="columns">
1987										<product-card class="product-card text-left product-card--content-spacing-true product-card--border-false has-shadow--true">
1988  <figure class="product-featured-image thb-hover">
1989    <span class="product-card--badges top left">
1990	
1991	
1992</span>
1993
1994		
1995    <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%;">
1996<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"  />
1997
1998<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%;" />
1999<quick-view class="product-card-quickview" data-product-handle="100-plant-protein-powder-limited-edition-flavor" tabindex="-1">
2000				<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">
2001	<circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle>
2002</svg></div>
2003				<span>Quick view</span>
2004			</quick-view></a>
2005  </figure>
2006	<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>
2007<style>.paceline-pp-price { color: #85CC52 !important; }</style>
2008<span class="price">
2009	<ins><span class="amount ">$39.99</span></ins>
2010         
2011	<small class="unit-price  hidden">
2012		<span></span>
2013    <span class="unit-price-separator">/</span>
2014		<span>
2015    </span>
2016	</small>
2017</span>
2018<div id="inventory-10773344813329" class="product-inventory-notice--wrapper">
2019	
2020		
2021	
2022</div><div class="product-card--add-to-cart-button-wrapper">
2023				<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" >
2024					<svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg">
2025	<circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle>
2026</svg>
2027					<span class="product-card--add-to-cart-text">Add to cart</span>
2028				</button>
2029			</div></div>
2030</product-card>
2031									</li><li class="columns">
2032										<product-card class="product-card text-left product-card--content-spacing-true product-card--border-false has-shadow--true">
2033  <figure class="product-featured-image thb-hover">
2034    <span class="product-card--badges top left">
2035	
2036	
2037</span>
2038
2039		
2040    <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%;">
2041<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"  />
2042
2043<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%;" />
2044<quick-view class="product-card-quickview" data-product-handle="100-plant-protein-10-travel-packs" tabindex="-1">
2045				<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">
2046	<circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle>
2047</svg></div>
2048				<span>Quick view</span>
2049			</quick-view></a>
2050  </figure>
2051	<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>
2052<style>.paceline-pp-price { color: #85CC52 !important; }</style>
2053<span class="price">
2054	<ins><span class="amount ">$29.99</span></ins>
2055         
2056	<small class="unit-price  hidden">
2057		<span></span>
2058    <span class="unit-price-separator">/</span>
2059		<span>
2060    </span>
2061	</small>
2062</span>
2063<div id="inventory-10773345042705" class="product-inventory-notice--wrapper">
2064	
2065		
2066	
2067</div><div class="product-card--add-to-cart-button-wrapper">
2068				<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" >
2069					<svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg">
2070	<circle class="spinner-path" fill="none" stroke-width="6" cx="33" cy="33" r="30" stroke="var(--color-body)"></circle>
2071</svg>
2072					<span class="product-card--add-to-cart-text">Choose options</span>
2073				</quick-view>
2074			</div></div>
2075</product-card>
2076									</li></ul>
2077						</div>
2078					</div></div>
2079		</div>
2080	</search-form>
2081</div>
2082
2083<link rel="stylesheet" href="//paceline.fit/cdn/shop/t/76/assets/predictive-search.css?v=47478030779033268151779034828" media="print" onload="this.media='all'">
2084<noscript>
2085	<link href="//paceline.fit/cdn/shop/t/76/assets/predictive-search.css?v=47478030779033268151779034828" rel="stylesheet" type="text/css" media="all" />
2086</noscript>
2087
2088		<div class="click-capture"></div>
2089		<div class="click-capture--product"></div>
2090	</div>
2091
2092	
2092<script src="//paceline.fit/cdn/shop/t/76/assets/vendor.min.js?v=3813312436454354751779034828" type="text/javascript"></script>
2092
2093	
2094	
2094<script src="//paceline.fit/cdn/shop/t/76/assets/product.js?v=162422722935758581621779034828" type="text/javascript"></script>
2094
2095	
2095<script src="//paceline.fit/cdn/shop/t/76/assets/slideshow.js?v=105782103936839224421779034828" type="text/javascript"></script>
2095
2096	
2096<script src="//paceline.fit/cdn/shop/t/76/assets/app.js?v=91368911961534120321779034828" type="text/javascript"></script>
2096
2097	
2097<script type="module" src="//paceline.fit/cdn/shop/t/76/assets/scroll-shadow.js?v=134515646384607867161779034828" defer="defer"></script>
2097
2098	
2098<script src="//paceline.fit/cdn/shop/t/76/assets/predictive-search.js?v=96917490284544704661779034828" defer="defer"></script>
2098<script src="//paceline.fit/cdn/shop/t/76/assets/back-to-top.js?v=43806152616230385711779034828" defer="defer"></script>
2098
2099<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">
2100<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)"/>
2101<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)"/>
2102</svg></back-to-top>
2103<script type="module" src="//paceline.fit/cdn/shop/t/76/assets/instant-page.js?v=116087100843016214071779034828" defer="defer"></script>
2103
2104    
2105	
2106  
2106<script>
2107    document.addEventListener('DOMContentLoaded', function() {
2108      // Only run on the hooray-health page
2109      if (window.location.pathname === '/pages/hooray-health') {
2110        const urlParams = new URLSearchParams(window.location.search);
2111        const userid = urlParams.get('userid');
2112        
2113        if (userid) {
2114          // Update all buttons that link to hoorayhealthsol.com
2115          const buttons = document.querySelectorAll('a[href*="hoorayhealthsol.com"]');
2116          
2117          buttons.forEach(function(button) {
2118            const currentHref = button.getAttribute('href');
2119            if (!currentHref.includes('userid=')) {
2120              // Check if URL already has query parameters
2121              const separator = currentHref.includes('?') ? '&' : '?';
2122              button.setAttribute('href', currentHref + separator + 'userid=' + encodeURIComponent(userid));
2123            }
2124          });
2125        }
2126      }
2127    });
2128  </script>
2128
2129	
2130	<div class="modal review-modal" id="eyw-review-modal" aria-hidden="true" style="display:none">
2131  <div class="modal__dialog">
2132    <div class="modal__body">
2133      <h3 class="modal__title">Review your selection</h3>
2134
2135      <div class="line-item" data-review-line>
2136        <div class="line-item__title" data-review-title></div>
2137        <div class="variant-details" data-review-variant></div>
2138        <div class="store-credit-label">Store credit with bonus</div>
2139      </div>
2140
2141      <label class="terms">
2142        <input type="checkbox" id="eyw-review-accept">
2143        I agree to the
2144        <a href="/pages/earn-your-wearable-terms" target="_blank" rel="noopener">
2145          Earn Your Wearable Terms and Conditions
2146        </a>.
2147      </label>
2148    </div>
2149
2150    <div class="modal__footer">
2151      <button class="btn btn--primary btn--proceed" id="eyw-review-proceed" disabled>
2152        Proceed to Checkout
2153      </button>
2154      <button class="btn btn--cancel" type="button" id="eyw-review-cancel">
2155        Cancel
2156      </button>
2157    </div>
2158  </div>
2159</div>
2160<style>
2161    #paceline-cookie-panel {
2162      position: fixed; bottom: 0; left: 0; right: 0; z-index: 99999;
2163      background: #1f252e; color: #fff;
2164      padding: 20px 24px; display: none; flex-direction: column;
2165      gap: 16px; border-top: 1px solid rgba(255,255,255,0.15);
2166    }
2167    #paceline-cookie-main { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
2168    #paceline-cookie-panel p { margin: 0; flex: 1; font-size: 14px; line-height: 1.5; }
2169    #paceline-cookie-panel a { color: #4db8ff; }
2170    #paceline-cookie-panel .pcl-btns { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
2171    #paceline-cookie-panel .pcl-btns button {
2172      background: transparent; color: #fff; cursor: pointer;
2173      font-size: 12px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase;
2174      padding: 9px 18px; border: 1px solid rgba(255,255,255,0.4);
2175    }
2176    #pcl-close { border: none !important; font-size: 20px; padding: 6px 10px !important; opacity: .6; }
2177    #paceline-cookie-prefs { display: none; flex-direction: column; gap: 12px; padding-top: 12px; border-top: 1px solid rgba(255,255,255,0.1); }
2178    #paceline-cookie-prefs.open { display: flex; }
2179    .pcl-pref-items { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; }
2180    .pcl-pref-item { display: flex; gap: 10px; align-items: flex-start; }
2181    .pcl-pref-item input[type=checkbox] { width: 16px; height: 16px; margin-top: 2px; flex-shrink: 0; cursor: pointer; accent-color: #4db8ff; }
2182    .pcl-pref-item input[type=checkbox]:disabled { opacity: .5; cursor: not-allowed; }
2183    .pcl-pref-item.disabled { opacity: .6; }
2184    .pcl-pref-item .pcl-pref-label { font-size: 13px; font-weight: 600; margin-bottom: 2px; }
2185    .pcl-pref-item .pcl-pref-desc { font-size: 11px; opacity: .65; line-height: 1.4; }
2186    #pcl-save { align-self: flex-start; background: #4db8ff !important; color: #000 !important; border-color: #4db8ff !important; }
2187  </style>
2188  <div id="paceline-cookie-panel">
2189    <div id="paceline-cookie-main">
2190      <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>
2191      <div class="pcl-btns">
2192        <button id="pcl-manage">Manage Preferences</button>
2193        <button id="pcl-accept">Accept All</button>
2194        <button id="pcl-decline">Decline All</button>
2195        <button id="pcl-close" aria-label="Close">&#215;</button>
2196      </div>
2197    </div>
2198    <div id="paceline-cookie-prefs">
2199      <div class="pcl-pref-items">
2200        <div class="pcl-pref-item disabled">
2201          <input type="checkbox" checked disabled>
2202          <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>
2203        </div>
2204        <div class="pcl-pref-item">
2205          <input type="checkbox" id="pcl-preferences">
2206          <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>
2207        </div>
2208        <div class="pcl-pref-item">
2209          <input type="checkbox" id="pcl-marketing">
2210          <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>
2211        </div>
2212        <div class="pcl-pref-item">
2213          <input type="checkbox" id="pcl-analytics">
2214          <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
2214dentify areas to improve.</div></div>
2215        </div>
2216      </div>
2217      <div class="pcl-btns"><button id="pcl-save">Save Preferences</button></div>
2218    </div>
2219  </div>
2220  
2220<script>
2221    (function () {
2222      var panel   = document.getElementById('paceline-cookie-panel');
2223      var prefs   = document.getElementById('paceline-cookie-prefs');
2224
2225      // In-memory consent state — kept in sync from all sources
2226      var consentState = null;
2227
2228      function saveConsentState(obj) {
2229        consentState = obj;
2230        try { localStorage.setItem('pcl_consent', JSON.stringify(obj)); } catch(e) {}
2231      }
2232
2233      function trackConsentEvent(action, obj) {
2234        try {
2235          fetch('https://paceline-rye-production.up.railway.app/api/consent-event', {
2236            method: 'POST',
2237            headers: { 'Content-Type': 'application/json' },
2238            body: JSON.stringify({
2239              action:      action,
2240              analytics:   obj.analytics   === 'yes' || obj.analytics   === true,
2241              marketing:   obj.marketing   === 'yes' || obj.marketing   === true,
2242              preferences: obj.preferences === 'yes' || obj.preferences === true,
2243            }),
2244            keepalive: true
2245          });
2246        } catch(e) {}
2247      }
2248
2249      function loadConsentState() {
2250        if (window.Shopify && window.Shopify.customerPrivacy) {
2251          var c = Shopify.customerPrivacy.currentVisitorConsent();
2252          if (c && (c.analytics === 'yes' || c.analytics === 'no')) {
2253            consentState = c;
2254            return;
2255          }
2256        }
2257        try {
2258          var stored = localStorage.getItem('pcl_consent');
2259          if (stored) consentState = JSON.parse(stored);
2260        } catch(e) {}
2261      }
2262
2263      // Sync from Shopify's native banner in real time
2264      document.addEventListener('visitorConsentCollected', function (e) {
2265        if (!e.detail) return;
2266        var state = {
2267          analytics:   e.detail.analyticsAllowed   ? 'yes' : 'no',
2268          marketing:   e.detail.marketingAllowed   ? 'yes' : 'no',
2269          preferences: e.detail.preferencesAllowed ? 'yes' : 'no'
2270        };
2271        saveConsentState(state);
2272        trackConsentEvent('shopify_banner', state);
2273      });
2274
2275      if (document.readyState === 'loading') {
2276        document.addEventListener('DOMContentLoaded', loadConsentState);
2277      } else {
2278        loadConsentState();
2279      }
2280
2281      
2282
2283      function applyConsent(consent, action) {
2284        panel.style.display = 'none';
2285        var state = {
2286          analytics:   consent.analytics   ? 'yes' : 'no',
2287          marketing:   consent.marketing   ? 'yes' : 'no',
2288          preferences: consent.preferences ? 'yes' : 'no'
2289        };
2290        saveConsentState(state);
2291        trackConsentEvent(action || 'save_prefs', state);
2292        try {
2293          if (window.Shopify && window.Shopify.customerPrivacy) {
2294            Shopify.customerPrivacy.setTrackingConsent(consent, function () {});
2295          }
2296        } catch(e) {}
2297      }
2298
2299      function openPanel() {
2300        if (!panel) return;
2301        panel.style.display = 'flex';
2302        prefs.classList.remove('open');
2303      }
2304      window.pclOpenCookiePanel = openPanel;
2305
2306      document.getElementById('pcl-accept').addEventListener('click', function () {
2307        applyConsent({ marketing: true, analytics: true, preferences: true, sale_of_data: true }, 'accept_all');
2308      });
2309      document.getElementById('pcl-decline').addEventListener('click', function () {
2310        applyConsent({ marketing: false, analytics: false, preferences: false, sale_of_data: false }, 'decline_all');
2311      });
2312      document.getElementById('pcl-close').addEventListener('click', function () {
2313        panel.style.display = 'none';
2314      });
2315      document.getElementById('pcl-manage').addEventListener('click', function () {
2316        prefs.classList.toggle('open');
2317        if (prefs.classList.contains('open') && consentState) {
2318          document.getElementById('pcl-analytics').checked   = consentState.analytics   === 'yes';
2319          document.getElementById('pcl-marketing').checked   = consentState.marketing   === 'yes';
2320          document.getElementById('pcl-preferences').checked = consentState.preferences === 'yes';
2321        }
2322      });
2323      document.getElementById('pcl-save').addEventListener('click', function () {
2324        applyConsent({
2325          analytics:    document.getElementById('pcl-analytics').checked,
2326          marketing:    document.getElementById('pcl-marketing').checked,
2327          preferences:  document.getElementById('pcl-preferences').checked,
2328          sale_of_data: false
2329        });
2330      });
2331
2332      function handleCookiePrefsHash() {
2333        if (window.location.hash !== '#cookie-preferences') return;
2334        history.replaceState(null, '', window.location.pathname);
2335        openPanel();
2336      }
2337
2338      document.addEventListener('click', function(e) {
2339        var el = e.target.closest('a[href="#cookie-preferences"], a[href="/#cookie-preferences"]');
2340        if (el) { e.preventDefault(); openPanel(); }
2341      });
2342
2343      window.addEventListener('hashchange', handleCookiePrefsHash);
2344      if (document.readyState === 'loading') {
2345        document.addEventListener('DOMContentLoaded', handleCookiePrefsHash);
2346      } else {
2347        handleCookiePrefsHash();
2348      }
2349    })();
2350  </script>
2350
2351  
2351<script>
2352    (function () {
2353      function patchBanner() {
2354        var para = document.querySelector('.shopify-pc__banner__body p');
2355        if (!para || para.dataset.patched) return;
2356        para.dataset.patched = 'true';
2357
2358        // Remove Shopify's auto-appended “Learn more in our Privacy Policy” link
2359        var shopifyLink = document.getElementById('shopify-pc__banner__body-policy-link');
2360        if (shopifyLink) {
2361          var prev = shopifyLink.previousSibling;
2362          if (prev && prev.nodeType === 3) {
2363            prev.nodeValue = prev.nodeValue.replace(/\s*Learn more in our\s*$/i, '');
2364          }
2365          shopifyLink.remove();
2366        }
2367
2368        // Turn plain-text matches into links within text nodes
2369        function linkify(match, href) {
2370          Array.from(para.childNodes).forEach(function (node) {
2371            if (node.nodeType !== 3) return;
2372            var idx = node.nodeValue.indexOf(match);
2373            if (idx === -1) return;
2374            var a = document.createElement('a');
2375            a.href = href;
2376            a.target = '_blank';
2377            a.rel = 'noopener noreferrer';
2378            a.textContent = match;
2379            var after = node.splitText(idx);
2380            after.nodeValue = after.nodeValue.slice(match.length);
2381            para.insertBefore(a, after);
2382          });
2383        }
2384
2385        linkify('PRIVACY POLICY', 'https://paceline.fit/privacy');
2386        linkify('TERMS OF USE', 'https://paceline.fit/terms');
2387      }
2388
2389      var observer = new MutationObserver(patchBanner);
2390      observer.observe(document.body, { childList: true, subtree: true });
2391      patchBanner();
2392    })();
2393  </script>
2393
2394
2395
2396
2397
2398
2399<style>
2400#ppSection{padding:0 16px}
2401/* Grid + subgrid (like flash sales): image/brand/title/price rows are shared, so prices line up whatever the title length */
2402#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}
2403#ppSection #ppGrid::-webkit-scrollbar{display:none}
2404#ppSection .pp-card-img,#ppSection #ppGrid>* img{border-radius:10px;overflow:hidden}
2405#ppSection #ppGrid>*{grid-row:span 4;scroll-snap-align:start;max-width:176px}
2406#ppSection #ppGrid>.pp-card{display:grid!important;grid-template-rows:subgrid}
2407#ppSection #ppGrid .pp-card-body{display:grid!important;grid-row:span 3;grid-template-rows:subgrid;align-content:start}
2408#ppSection #ppGrid>* img,#ppSection #ppGrid>* .card__media img,#ppSection #ppGrid>* .media img{width:176px!important;height:176px!important;object-fit:cover}
2409#ppSection #ppGrid .caption-with-letter-spacing,#ppSection #ppGrid [class*="vendor"],#ppSection #ppGrid [class*="brand"]{color:rgba(255,255,255,0.5)!important}
2410.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}
2411.pp-price-row del{font-size:13px;color:rgba(255,255,255,0.35);font-weight:400}
2412.pp-price-row .pp-flash-sale{color:#85CC52;font-weight:700;font-size:16px}
2413.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}
2414.pp-price-row .sr-pp-price,.pp-price-row .pp-disc-price{font-size:16px;font-weight:700;color:#85CC52}
2415.pp-price-row .pp-price-val{font-size:16px;font-weight:700;color:#fff}
2416.pp-pts-row{width:100%;display:flex;align-items:center;gap:6px;margin-top:2px}
2417.pp-pts-row del{font-size:11px;color:rgba(255,255,255,0.2);font-weight:400}
2418.pp-pts-row .pp-pts-disc{font-size:13px;font-weight:700;color:#47C2EB}
2419.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}
2420@keyframes ppPulse{0%,100%{opacity:1}50%{opacity:0.4}}
2421</style>
2422
2423
2424
2425<script>
2426(function(){
2427  var nav=document.getElementById('portalNav');
2428  if(!nav) return;
2429  var RYE='https://paceline-rye-production.up.railway.app';
2430
2431  var _isPlus=false;
2432  function moveTab(){
2433    var pp=nav.querySelector('a[href*="paceline-exclusive"]');
2434    if(pp&&!_isPlus){pp.style.display='none';}
2435    if(pp&&_isPlus&&pp!==nav.firstElementChild){nav.insertBefore(pp,nav.firstElementChild);}
2436    var stale=nav.querySelector('a[href*="app-portal#workout-gear"]');
2437    if(stale&&nav.querySelector('a[href*="app-portal"]:not([href*="#"])')) stale.remove();
2438    if(!nav.querySelector('a[href*="fall-portal"]')){
2439      var mk=nav.querySelector('a[href*="app-portal"]');
2440      if(mk){
2441        var ft=document.createElement('a');
2442        ft.href='/pages/fall-portal';
2443        ft.textContent='Fall Reset';
2444        ft.className=mk.className;
2445        nav.insertBefore(ft,mk);
2446      }
2447    }
2448    var mkLinks=nav.querySelectorAll('a');
2449    for(var li=0;li<mkLinks.length;li++){
2450      var h=mkLinks[li].getAttribute('href')||'';
2451      if(h.indexOf('app-portal')!==-1&&h!=='/pages/app-portal'){
2452        mkLinks[li].setAttribute('href','/pages/app-portal');
2453      }
2454    }
2455  }
2456
2457  moveTab();
2458  new MutationObserver(function(){moveTab();}).observe(nav,{childList:true});
2459})();
2460</script>
vendor: 1 bytes, line 2460
2460
2461<script>
2462(function(){
2463  // Pricing badges for ALL portal pages (except paceline-exclusive, handled above)
2464  if(window.location.pathname.indexOf('paceline-exclusive')!==-1) return;
2465  var nav=document.getElementById('portalNav');
2466  if(!nav) return;
2467  var RYE='https://paceline-rye-production.up.railway.app';
2468  var path=window.location.pathname.replace(/^\/pages\//,'').replace(/\/$/,'');
2469  var specialApis={'flash-sales-portal':'/api/shop-products/flash-sales','kits-portal':'/api/shop-products/kits','bundles-portal':'/api/shop-products/bundles'};
2470  var col=path.endsWith('-portal')?path.replace(/-portal$/,'-picks'):path;
2471  var portalCustId=0;
2472  var _pm={};
2473  var _dataReady=false;
2474  var _isPlus=document.cookie.indexOf('_pp_plus=1')!==-1||document.querySelector('[data-pp-plus]')!==null;
2475  // % off badge in the top-right corner of a card's image (theme badges use top-left)
2476  // The card holding this product link and its image. Custom portal cards are
2477  // often a single <a> wrapping image + text; never climb into a container
2478  // that holds other products' links.
2479  function ppCardScope(link){
2480    var s=link.closest('product-card,.product-card,.card-wrapper');
2481    if(s) return s;
2482    var href=link.getAttribute('href').split('?')[0];
2483    for(var el=link,i=0;el&&i<5;el=el.parentElement,i++){
2484      var others=el.querySelectorAll('a[href*="/products/"]');
2485      for(var j=0;j<others.length;j++){if(others[j].getAttribute('href').split('?')[0]!==href) return null;}
2486      if(el.querySelector('img')) return el;
2487    }
2488    return null;
2489  }
2490  function ppImgPct(scope,pct){
2491    if(!scope) return;
2492    var img=scope.querySelector('img');
2493    if(!img) return;
2494    var wrap=scope.querySelector('.product-featured-image,.pp-card-img,.card__media')||img.parentElement;
2495    var b=wrap.querySelector('.pp-img-pct');
2496    if(!(pct>0)){if(b) b.remove();return;}
2497    if(getComputedStyle(wrap).position==='static') wrap.style.position='relative';
2498    if(!b){b=document.createElement('span');b.className='pp-img-pct';wrap.appendChild(b);}
2499    b.textContent=Math.round(pct)+'% off';
2500  }
2501  function addPricing(){
2502    var links=document.querySelectorAll('a[href*="/products/"]');
2503    for(var i=0;i<links.length;i++){
2504      var link=links[i];
2505      // Flash sale cards come priced from /api/flash-picks (same as app-portal) — leave them alone
2506      if(link.classList.contains('fp-card')) continue;
2507      var card=link.closest('[class*="card"]')||link.closest('li')||link.parentElement;
2508      if(!card) continue;
2509      var hm=link.getAttribute('href').match(/\/products\/([^/?#]+)/);
2510      if(!hm) continue;
2511      var pd=_pm[hm[1]];
2512      var existing=card.querySelector('.pp-price-row');
2513      if(existing){
2514        var hasLoading=existing.querySelector('.pp-pts-loading');
2515        var needsUpdate=(portalCustId&&pd&&((pd.pct&&!existing.querySelector('.pp-flash-sale'))||(pd.cost&&!existing.querySelector('.pp-pts-disc'))))||(hasLoading&&_dataReady);
2516        if(!needsUpdate) continue;
2517        existing.remove();
2518        var hiddenEl=card.querySelector('[class*="price"][style*="display"]');
2519        if(hiddenEl) hiddenEl.style.display='';
2520      }
2521      var price=0;
2522      var priceEl=card.querySelector('[class*="price"]:not(.pp-price-row)');
2523      if(priceEl){var m=priceEl.textContent.match(/\$([0-9.,]+)/);if(m) price=parseFloat(m[1].replace(',',''));}
2524      if(!price&&pd) price=pd.price||0;
2525      if(!price||price<1) continue;
2526      // Pacepoints discount + cost are for logged-in customers only
2527      var pct=(portalCustId&&pd&&pd.pct)||0,cost=(portalCustId&&pd&&pd.cost)||0;
2528      // Detect discount from theme badge if API has no pointsPct
2529      if(!pct){
2530        var badges=card.querySelectorAll('[class*="badge"],[class*="Badge"],[class*="sale"],[class*="Sale"],[class*="saving"],[class*="percent"],span,div');
2531        for(var bi=0;bi<badges.length;bi++){
2532          var bt=badges[bi].textContent.trim();
2533          var bm=bt.match(/^-?(\d+)%$/);
2534          if(bm){pct=parseInt(bm[1]);break;}
2535        }
2536      }
2537      var row=document.createElement('div');
2538      row.className='pp-price-row';
2539      var html='';
2540      ppImgPct(ppCardScope(link),pct);
2541      if(pct>0){
2542        var disc=(price*(1-pct/100)).toFixed(2);
2543        html='<del>$'+price.toFixed(2)+'</del><span class="pp-flash-sale">$'+disc+'</span>';
2544      }else{
2545        html='<span class="pp-price-val">$'+price.toFixed(2)+'</span>';
2546      }
2547      if(cost>0){
2548        var discCost=pct>0?Math.round(cost*(1-pct/100)):cost;
2549        html+='<div class="pp-pts-row"><span class="pp-pts-disc">with '+discCost.toLocaleString()+' Pacepoints</span></div>';
2550      }else if(!_dataReady&&portalCustId){
2551        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>';
2552      }
2553      row.innerHTML=html;
2554      var ep=priceEl;
2555      if(ep){ep.style.display='none';ep.parentElement.insertBefore(row,ep);}
2556      else{var t=card.querySelector('[class*="title"],[class*="name"]');if(t&&t.parentElement)t.parentElement.insertBefore(row,t.nextSibling);else card.appendChild(row);}
2557    }
2558  }
2559  var _ppDone=false;
2560  function fetchPPFromDOM(){
2561    if(_ppDone) return;
2562    var links=document.querySelectorAll('a[href*="/products/"]');
2563    var handles=[];
2564    for(var i=0;i<links.length;i++){
2565      var m=links[i].getAttribute('href').match(/\/products\/([^/?#]+)/);
2566      if(m&&handles.indexOf(m[1])===-1&&(!_pm[m[1]]||!_pm[m[1]].cost)) handles.push(m[1]);
2567    }
2568    if(!handles.length) return;
2569    _ppDone=true;
2570    Promise.all(handles.slice(0,24).map(function(h){
2571      return fetch('/products/'+h+'.json').then(function(r){return r.ok?r.json():null}).catch(function(){return null;});
2572    })).then(function(results){
2573      var ids=[],idMap={};
2574      results.forEach(function(r){
2575        if(!r||!r.product) return;
2576        var h=r.product.handle,v=r.product.variants&&r.product.variants[0];
2577        ids.push(r.product.id);idMap[r.product.id]=h;
2578        // Keep the price too — custom portal cards (e.g. awareness) render none in the DOM
2579        var ex=_pm[h]||{};
2580        _pm[h]={price:ex.price||parseFloat(v&&v.price||0),pct:ex.pct||0,cost:ex.cost||0};
2581      });
2582      if(!ids.length) return;
2583      return fetch(RYE+'/api/product-discount-meta?ids='+ids.join(','))
2584        .then(function(r){return r.ok?r.json():null})
2585        .then(function(meta){
2586          if(!meta) return;
2587          ids.forEach(function(id){
2588            var d=meta[id],h=idMap[id];
2589            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};}
2590          });
2591          _dataReady=true;addPricing();
2592        }).catch(function(e){_dataReady=true;addPricing();console.warn('[portal-dom-meta]',e);});
2593    }).catch(function(e){_dataReady=true;addPricing();console.warn('[portal-dom-meta]',e);});
2594  }
2595  if(!specialApis[path]){
2596    fetch('/collections/'+col+'/products.json?limit=24')
2597      .then(function(r){return r.ok?r.json():null})
2598      .then(function(data){
2599        if(!data||!data.products||!data.products.length){fetchPPFromDOM();return;}
2600        var ids=[];
2601        data.products.forEach(function(p){
2602          var v=p.variants&&p.variants[0];
2603          _pm[p.handle]={price:parseFloat(v&&v.price||0),pct:0,cost:0,id:p.id};
2604          if(p.id) ids.push(p.id);
2605        });
2606        addPricing();
2607        if(!ids.length) return;
2608        fetch(RYE+'/api/product-discount-meta?ids='+ids.join(','))
2609          .then(function(r){return r.ok?r.json():null})
2610          .then(function(meta){
2611            if(!meta) return;
2612            data.products.forEach(function(p){
2613              var d=meta[p.id];
2614              if(d){
2615                var ex=_pm[p.handle]||{};
2616                _pm[p.handle]={price:ex.price||0,pct:d.pct||ex.pct||0,cost:d.cost||ex.cost||0};
2617              }
2618            });
2619            _dataReady=true;addPricing();
2620          }).catch(function(e){_dataReady=true;addPricing();console.warn('[portal-meta]',e);});
2621      }).catch(function(){fetchPPFromDOM();});
2622  }else{
2623    fetch(RYE+specialApis[path]).then(function(r){return r.ok?r.json():null}).then(function(data){
2624      _dataReady=true;
2625      if(!data){addPricing();return;}
2626      (data.products||[]).forEach(function(p){
2627        _pm[p.handle]={price:p.price||0,pct:p.pointsPct||0,cost:p.pointsCost||0};
2628      });
2629      addPricing();
2630    }).catch(function(e){_dataReady=true;addPricing();console.warn('[portal-prices]',e);});
2631  }
2632  // Hide duplicative headings on flash sales page
2633  if(path==='flash-sales-portal'){
2634    var allEls=document.querySelectorAll('h1,h2,h3,h4,h5,h6,p,span,div');
2635    for(var hi=0;hi<allEls.length;hi++){
2636      var eTxt=allEls[hi].textContent.trim();
2637      if(/matched to your size/i.test(eTxt)&&eTxt.length<40){allEls[hi].style.display='none';}
2638      if(/flash picks/i.test(eTxt)&&eTxt.length<30){allEls[hi].style.display='none';}
2639    }
2640  }
2641  // Audience filtering on portal pages (hide wrong-gender cards)
2642  if(portalCustId){
2643    fetch(RYE+'/api/portal-prefs?customerId='+portalCustId,{credentials:'include'})
2644      .then(function(r){return r.json()})
2645      .then(function(data){
2646        var prefs=data.prefs;
2647        if(!prefs||!prefs.sizing||!prefs.sizing.audience) return;
2648        var aud=prefs.sizing.audience;
2649        function hideWrongGender(){
2650          var links=document.querySelectorAll('a[href*="/products/"]');
2651          for(var gi=0;gi<links.length;gi++){
2652            if(links[gi].classList.contains('fp-card')) continue; // already audience-filtered by /api/flash-picks
2653            var card=links[gi].closest('[class*="card"]')||links[gi].closest('li')||links[gi].parentElement;
2654            if(!card) continue;
2655            var txt=(card.textContent||'').toLowerCase();
2656            var isW=/women/i.test(txt);
2657            var isM=/\bmen(?:'?s)?\b/i.test(txt)&&!isW;
2658            if(aud==='mens'&&isW&&!isM) card.style.display='none';
2659            if(aud==='womens'&&isM) card.style.display='none';
2660          }
2661        }
2662        hideWrongGender();
2663        new MutationObserver(function(){hideWrongGender();}).observe(document.querySelector('main')||document.body,{childList:true,subtree:true});
2664      }).catch(function(){});
2665  }
2666  var _d=null;
2667  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});
2668})();
2669</script>
2669
2670<style> /* Push search below fixed header */.search-modal {padding-top: 150px !important;} .predictive-search {margin-top: 150px !important;} header-drawer + * {margin-top: 150px;} </style>
2671<div id="shopify-block-AYVh2eG5seWR6K0EzZ__6141582171523228424" class="shopify-block shopify-app-block">
2671<script src="//cdn.shopify.com/extensions/01a0ca72-e20e-7e37-b11b-69467298a8ea/29-adb7c67ff991881fe58b32352c944a481bbcbb8b/assets/BrazeUtilities.js" type="text/javascript"></script>
vendor: 1 bytes, line 2671
2671
2672<script src="//cdn.shopify.com/extensions/01a0ca72-e20e-7e37-b11b-69467298a8ea/29-adb7c67ff991881fe58b32352c944a481bbcbb8b/assets/BrazeBannerScript.js" type="text/javascript"></script>
2672
2673
2674<script type="text/javascript">
2675  const brazeWebSDKPoller = setInterval(()=>{
2676    // if the conditional is false, then we don't need to poll anymore and should clear the interval
2677    // if the conditional is true, but readValueFromLocalStorageWithRetry doesn't exist, we should retry
2678    // if the conditional is true and readValueFromLocalStorageWithRetry exists we should load the script and clear the interval
2679    readValueFromLocalStorageWithRetry('brazeAppSettings').then((data) => {
2680      loadScriptTag("https://cdn.shopify.com/extensions/01a0ca72-e20e-7e37-b11b-69467298a8ea/29-adb7c67ff991881fe58b32352c944a481bbcbb8b/assets/BrazeWebSdkScript.js", "module");
2681    });
2682    clearInterval(brazeWebSDKPoller);
2683  }, 2000)
2684</script>
2684
2685
2686
2687</div><div id="shopify-block-AaDdVZE5oZGZDcWUyY__7965443971275283598" class="shopify-block shopify-app-block">
2688
2689<script type="module" src="https://cdn.shopify.com/extensions/01a039c6-265a-77a1-ba13-3a9b8dfdc273/personapay-discount-app-178/assets/persona-app.js" defer></script>
2689</div>
2689<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
2689
2690</body>
2691</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.