1<!doctype html><html class="no-js" lang="en" dir="ltr"> 2 <head> 3<!-- Start of Shoplift scripts --> 4<!-- 2026-05-26T15:45:31.2489962Z --> 5<style>.shoplift-hide { opacity: 0 !important; }</style> 6<style id="sl-preview-bar-hide">#preview-bar-iframe, #PBarNextFrameWrapper { display: none !important; }</style>
7<script type="text/javascript">(function(rootPath, template, themeRole, themeId, isThemePreview){ /* Generated on 2026-05-26T16:03:34.5666694Z */(function(){"use strict";var tt=document.createElement("style");tt.textContent=`#shoplift-preview-control{position:fixed;max-width:332px;height:56px;background-color:#141414;z-index:9999;bottom:20px;display:flex;border-radius:8px;box-shadow:13px 22px 7px #0000,9px 14px 7px #00000003,5px 8px 6px #0000000d,2px 4px 4px #00000017,1px 1px 2px #0000001a,0 0 #0000001a;align-items:center;margin:0 auto;left:16px;right:16px;opacity:0;transform:translateY(20px);visibility:hidden;transition:opacity .4s ease-in-out,transform .4s ease-in-out,visibility 0s .4s}#shoplift-preview-control.visible{opacity:1;transform:translateY(0);visibility:visible;transition:opacity .4s ease-in-out,transform .4s ease-in-out,visibility 0s 0s}#shoplift-preview-control *{font-family:Inter,sans-serif;color:#fff;box-sizing:border-box;font-size:16px}#shoplift-preview-variant-title{font-weight:400;line-height:140%;font-size:16px;text-align:start;letter-spacing:-.16px;flex-grow:1;text-wrap:nowrap;overflow:hidden;text-overflow:ellipsis}#shoplift-preview-variant-selector{position:relative;display:block;padding:6px 0;height:100%;min-width:0;flex:1 1 auto}#shoplift-preview-variant-menu-trigger{border:none;cursor:pointer;width:100%;background-color:transparent;padding:0 16px;border-left:1px solid #333;border-right:1px solid #333;height:100%;display:flex;align-items:center;justify-content:start;gap:8px}#shoplift-preview-variant-selector .menu-variant-label{width:24px;height:24px;border-radius:50%;padding:6px;display:flex;justify-content:center;align-items:center;font-size:12px;font-style:normal;font-weight:600;line-height:100%;letter-spacing:-.12px;flex-shrink:0}#shoplift-preview-variant-selector .preview-variant-menu{position:absolute;bottom:110%;transform:translate3d(0,20px,0);visibility:hidden;pointer-events:none;opacity:0;cursor:pointer;background-color:#141414;border:1px solid #141414;border-radius:6px;width:100%;max-height:156px;overflow-y:auto;box-shadow:0 8px 16px #0003;z-index:1;transition:opacity .3s ease-in-out,transform .3s ease-in-out,visibility 0s .3s}#shoplift-preview-variant-selector .preview-variant-menu.preview-variant-menu__visible{visibility:visible;pointer-events:auto;opacity:100;transform:translateZ(0);transition:opacity .3s ease-in-out,transform .3s ease-in-out,visibility 0s 0s}@media screen and (max-width:400px){#shoplift-preview-variant-selector .preview-variant-menu{position:fixed;left:0;right:0;width:auto;bottom:110%}}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item{padding:12px 16px;display:flex;overflow:hidden}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item .menu-variant-label{margin-right:6px}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item span{overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap;white-space:nowrap;color:#f6f6f6;font-size:14px;font-style:normal;font-weight:500}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:hover{background-color:#545454}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:last-of-type{border-bottom-left-radius:6px;border-bottom-right-radius:6px}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:first-of-type{border-top-left-radius:6px;border-top-right-radius:6px}#shoplift-preview-control div:has(#shoplift-exit-preview-button){padding:0 16px}#shoplift-exit-preview-button{padding:6px 8px;font-weight:500;line-height:75%;border-radius:4px;background-color:transparent;border:none;text-decoration:none}#shoplift-exit-preview-button:hover{cursor:pointer;background-color:#333}#shoplift-preview-subscription-warning{position:relative;display:flex;align-items:center;gap:6px;padding:6px 10px;margin:0 4px;border-left:1px solid #333;cursor:help;outline:none}#shoplift-preview-subscription-warning__icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background-color:#f59e0b;color:#141414!important;font-weight:700;font-size:12px!important;line-height:1;flex-shrink:0}#shoplift-preview-subscription-warning__label{font-size:13px!important;font-weight:500;color:#fbbf24!important;text-wrap:nowrap;white-space:nowrap}#shoplift-preview-subscription-warning__tooltip{position:absolute;bottom:calc(100% + 8px);right:0;max-width:320px;width:max-content;padding:10px 12px;border-radius:6px;background-color:#1f1f1f;color:#fff!important;font-size:12px!important;line-height:1.4!important;box-shadow:0 8px 16px #0000004d;z-index:10000;opacity:0;visibility:hidden;transform:translateY(4px);transition:opacity .2s ease-in-out,transform .2s ease-in-out,visibility 0s .2s;pointer-events:none}#shoplift-preview-subscription-warning__tooltip.shoplift-preview-subscription-warning__tooltip--visible{opacity:1;visibility:visible;transform:translateY(0);transition:opacity .2s ease-in-out,transform .2s ease-in-out,visibility 0s 0s}#shoplift-preview-subscription-warning:focus-visible{box-shadow:inset 0 0 0 2px #f59e0b;border-radius:4px}#shoplift-preview-control:has(#shoplift-preview-subscription-warning){max-width:480px}/*$vite$:1*/`,document.head.appendChild(tt);var ht=" daum[ /]| deusu/| yadirectfetcher|(?:^|[^g])news(?!sapphire)|(?<! (?:channel/|google/))google(?!(app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!(?: ya| yandex|^job|inapp;) ?)search|(?<!(?:lib))http|(?<![hg]m)score|@[a-z][\\w-]+\\.|\\(\\)|\\.com|\\b\\d{13}\\b|^<|^[\\w \\.\\-\\(?:\\):]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[^ ]{50,}$|^\\d+\\b|^\\w+/[\\w\\(\\)]*$|^active|^ad muncher|^amaya|^avsdevicesdk/|^biglotron|^bot|^bw/|^clamav[ /]|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d \\(compatible;?\\)$|^mozilla/\\d\\.\\d \\w*$|^navermailapp|^netsurf|^offline|^owler|^postman|^python|^rank|^read|^reed|^rest|^rss|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor/|^track|^valid|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|^{{.*}}$|admin|analyzer|archive|ask jeeves/teoma|bit\\.ly/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check|chrome-lighthouse|chromeframe|classifier|clean|cloud|crawl|cypress/|dareboost|datanyze|dejaclick|detect|dmbrowser|download|evc-batch/|feed|firep
7hp|gomezagent|headless|httrack|hubspot marketing grader|hydra|ibisbrowser|images|insight|inspect|iplabel|ips-agent|java(?!;)|library|mail\\.ru/|manager|measure|neustar wpm|node|nutch|offbyone|optimize|pageburst|pagespeed|parser|perl|phantomjs|pingdom|powermarks|preview|proxy|ptst[ /]\\d|reputation|resolver|retriever|rexx;|rigor|rss\\b|scan|scrape|server|sogou|sparkler/|speedcurve|spider|splash|statuscake|synapse|synthetic|tools|torrent|trace|transcoder|url|virtuoso|wappalyzer|watch|webglance|webkit2png|whatcms/|zgrab",ft=/bot|spider|crawl|http|lighthouse/i,z;function gt(){if(z instanceof RegExp)return z;try{z=new RegExp(ht,"i")}catch{z=ft}return z}function mt(a){return!!a&>().test(a)}class Q{timestamp;constructor(){this.timestamp=new Date}}class yt extends Q{type;testId;hypothesisId;constructor(t,e,i){super(),this.type=3,this.testId=t,this.hypothesisId=e,this.timestamp=i}}class vt extends Q{type;path;constructor(t){super(),this.type=4,this.path=t}}class wt extends Q{type;cart;constructor(t){super(),this.type=5,this.cart=t}}class et extends Error{isBot;constructor(){super(),this.isBot=!0}}function bt(a,t,e){for(const i of t.selectors){const s=a.querySelectorAll(i.cssSelector);for(let r=0;r<s.length;r++)e(t.testId,t.hypothesisId)}st(a,t,(i,s,r,n,o)=>o(s,r),e)}function U(a,t,e){for(const i of t.selectors)rt(a,t.testId,t.hypothesisId,i,e??(()=>{}));st(a,t,rt,e??(()=>{}))}function it(a){return a.urlPatterns.reduce((t,e)=>{switch(e.operator){case"contains":return t+`.*${e}.*`;case"endsWith":return t+`.*${e}`;case"startsWith":return t+`${e}.*`}},"")}function st(a,t,e,i){new MutationObserver(()=>{for(const r of t.selectors)e(a,t.testId,t.hypothesisId,r,i)}).observe(a.documentElement,{childList:!0,subtree:!0})}function rt(a,t,e,i,s){const r=a.querySelectorAll(i.cssSelector);for(let n=0;n<r.length;n++){let o=r.item(n);if(o instanceof HTMLElement&&o.dataset.shoplift!==""){o.dataset.shoplift="";for(const l of i.actions.sort(kt))o=St(a,i.cssSelector,o,l)}}return r.length>0&&s?(s(t,e),!0):!1}function St(a,t,e,i){switch(i.type){case"innerHtml":e.innerHTML=i.value;break;case"attribute":Ct(e,i.scope,i.value);break;case"css":Tt(a,t,i.value);break;case"js":It(a,e,i);break;case"copy":return Pt(e);case"remove":At(e);break;case"move":Et(e,parseInt(i.value));break}return e}function Ct(a,t,e){a.setAttribute(t,e)}function Tt(a,t,e){const i=a.createElement("style");i.innerHTML=`${t} { ${e} }`,a.getElementsByTagName("head")[0]?.appendChild(i)}function It(a,t,e){Function("document","element",`"use strict"; ${e.value}`)(a,t)}function Pt(a){const t=a.cloneNode(!0);if(!a.parentNode)throw"Can't copy node outside of DOM";return a.parentNode.insertBefore(t,a.nextSibling),t}function At(a){a.remove()}function Et(a,t){if(t===0)return;const e=Array.prototype.slice.call(a.parentElement.children).indexOf(a),i=Math.min(Math.max(e+t,0),a.parentElement.children.length-1);a.parentElement.children.item(i).insertAdjacentElement(t>0?"afterend":"beforebegin",a)}function kt(a,t){return nt(a)-nt(t)}function nt(a){return a.type==="copy"||a.type==="remove"?0:1}var M=(a=>(a[a.Template=0]="Template",a[a.Theme=1]="Theme",a[a.UrlRedirect=2]="UrlRedirect",a[a.Script=3]="Script",a[a.Dom=4]="Dom",a[a.Price=5]="Price",a))(M||{});const xt="data:image/svg+xml,%3csvg%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M9.96001%207.90004C9.86501%207.90004%209.77001%207.86504%209.69501%207.79004L6.43501%204.53004C6.19501%204.29004%205.80501%204.29004%205.56501%204.53004L2.30501%207.79004C2.16001%207.93504%201.92001%207.93504%201.77501%207.79004C1.63001%207.64504%201.63001%207.40504%201.77501%207.26004L5.03501%204.00004C5.56501%203.47004%206.43001%203.47004%206.96501%204.00004L10.225%207.26004C10.37%207.40504%2010.37%207.64504%2010.225%207.79004C10.15%207.86004%2010.055%207.90004%209.96001%207.90004Z'%20fill='white'/%3e%3c/svg%3e",_t="data:image/svg+xml,%3csvg%20width='14'%20height='24'%20viewBox='0%200%2014%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M12.3976%2014.5255C12.2833%2013.8788%2012.0498%2013.3024%2011.6952%2012.7961C11.3416%2012.2898%2010.9209%2011.8353%2010.4353%2011.4317C9.94868%2011.0291%209.43546%2010.6488%208.89565%2010.292C8.48487%2010.049%208.09577%209.78565%207.72637%209.50402C7.35697%209.2224%207.08016%208.89503%206.89694%208.51987C6.71273%208.14471%206.67826%207.69533%206.79055%207.1697C6.86345%206.83216%206.97476%206.54647%207.12351%206.31162C7.27324%206.07778%207.47124%205.89986%207.7175%205.77684C7.96377%205.65483%208.21989%205.59383%208.48389%205.59383C8.88087%205.59383%209.17639%205.7016%209.3734%205.91714C9.56943%206.13268%209.68271%206.42345%209.71424%206.78946C9.74576%207.15547%209.72015%207.55401%209.63839%207.98509C9.55663%208.41617%209.43645%208.84724%209.27687%209.27934L13.5127%208.80149C13.9638%207.52656%2014.1017%206.42447%2013.9264%205.49725C13.751%204.56901%2013.2664%203.85122%2012.4724%203.34491C12.239%203.19648%2011.9779%203.07041%2011.6893%202.96569L12.0026%201.50979L9.86397%200L
77.3875%201.50979L7.11169%202.78878C6.65166%202.8874%206.21724%203.01957%205.8114%203.19038C4.85292%203.594%204.06684%204.15115%203.45117%204.86385C2.83452%205.57655%202.42571%206.40108%202.22378%207.33847C2.06616%208.06947%202.04942%208.70796%202.17551%209.25087C2.30061%209.7948%202.52028%2010.2828%202.8355%2010.7139C3.14974%2011.145%203.51816%2011.5344%203.93977%2011.881C4.36039%2012.2288%204.782%2012.5521%205.20164%2012.851C5.68334%2013.1702%206.13844%2013.5169%206.56497%2013.8921C6.99052%2014.2672%207.31954%2014.7125%207.55004%2015.228C7.78055%2015.7445%207.81502%2016.3769%207.65347%2017.1262C7.56482%2017.5389%207.43676%2017.8765%207.27028%2018.1388C7.10381%2018.4011%206.89596%2018.5983%206.64772%2018.7295C6.3985%2018.8606%206.12071%2018.9267%205.8114%2018.9267C5.21641%2018.9267%204.79776%2018.6034%204.62833%2018.1632C4.4589%2017.7229%204.47367%2017.2583%204.60075%2016.5639C4.72782%2015.8705%205.05092%2015.1395%205.37107%2014.3699H1.17665C1.17665%2014.3699%200.207341%2016.1115%200.0310135%2017.6762C-0.0655232%2018.5302%200.0635208%2019.2653%200.41519%2019.8844C0.76686%2020.5036%201.33032%2020.9814%202.10655%2021.319C2.39222%2021.443%202.7104%2021.5447%203.05813%2021.623L2.54589%2024H7.17473L7.7047%2021.5386C8.08493%2021.442%208.43857%2021.3231%208.76562%2021.1787C9.73985%2020.7476%2010.52%2020.1427%2011.1071%2019.3649C11.6932%2018.5871%2012.0873%2017.7291%2012.2892%2016.7917C12.4744%2015.9295%2012.5099%2015.1741%2012.3966%2014.5275L12.3976%2014.5255Z'%20fill='white'/%3e%3c/svg%3e";async function Rt(a){let t=a.replace(/-/g,"+").replace(/_/g,"/");for(;t.length%4;)t+="=";const e=atob(t),i=Uint8Array.from(e,n=>n.charCodeAt(0)),s=new Blob([i]).stream().pipeThrough(new DecompressionStream("gzip")),r=await new Response(s).text();return JSON.parse(r)}function F(a,t){return typeof t=="string"&&/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+(?:Z|[+-]\d+)/.test(t)?new Date(t):t}function X(a,t){return t}function q(a,t=!1,e=!1,i=","){const s=a/100;if(e){const n=Math.round(s).toLocaleString("en-US");return i!==","?n.replace(/,/g,i):n}else{const r=t?",":".",n=s.toFixed(2).split("."),o=parseInt(n[0],10),l=n[1]??"00",c=o.toLocaleString("en-US");return i!==","?`${c.replace(/,/g,i)}${r}${l}`:t?`${c.replace(/,/g,".")}${r}${l}`:`${c}${r}${l}`}}function H(a,t,e,i){const s=t.replace("{{amount}}",q(a,!1,!1)).replace("{{amount_no_decimals}}",q(a,!1,!0)).replace("{{amount_with_comma_separator}}",q(a,!0,!1)).replace("{{amount_no_decimals_with_comma_separator}}",q(a,!0,!0)).replace("{{amount_with_space_separator}}",q(a,!1,!1," ")).replace("{{amount_no_decimals_with_space_separator}}",q(a,!1,!0," ")).replace("{{amount_with_apostrophe_separator}}",q(a,!1,!1,"'")).replace("{{amount_no_decimals_with_apostrophe_separator}}",q(a,!1,!0,"'")).replace("{{amount_with_period_and_space_separator}}",q(a,!1,!1,". ")).replace("{{amount_no_decimals_with_period_and_space_separator}}",q(a,!1,!0,". "));return i?`${s} ${e}`:s}function ot(a){return a.replace(/[^\d.,\s-]/g,"").trim()}function j(a){const t=new Map;for(const[e,i,s]of a.variants)t.set(e,{priceInCents:i,compareAtPriceInCents:s});return t}function Dt(a,t,e,i){const{priceInCents:s,compareAtPriceInCents:r}=e,{moneyFormat:n,currency:o,currencyCodeEnabled:l}=i;if(a.getAttribute("data-sl-attribute-p")===t)a.innerHTML=H(s,n,o,l);else if(a.getAttribute("data-sl-attribute-cap")===t)r<=0||r<=s?a.remove():a.innerHTML=H(r,n,o,l);else if(a.getAttribute("data-sl-attribute-discount")===t&&!(r<=0||r<=s)){const d=Math.round((r-s)/r*100),p=ot(H(r-s,n,o,!1)),h=a.getAttribute("data-sl-format")||"percent";h==="percent"?a.textContent=`-${d}%`:h==="amount"?a.textContent=`-${p}`:h==="both"&&(a.textContent=`-${d}% (-${p})`)}}function Ot(a){const t=[],e={id:"url-pattern",operator:"contains",value:"/"};for(const[i,s,r]of a.variants){t.push({id:`p-${i}`,cssSelector:`[data-sl-attribute-p="${i}"]`,urlPatterns:[e],actions:[{id:`p-action-${i}`,type:"innerHtml",scope:"price",value:H(s,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]});const n=r<=0||r<=s;if(t.push({id:`cap-${i}`,cssSelector:`[data-sl-attribute-cap="${i}"]`,urlPatterns:[e],actions:[{id:`cap-action-${i}`,type:n?"remove":"innerHtml",scope:"compare-at-price",value:n?"":H(r,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]}),!n&&r>s){const o=Math.round((r-s)/r*100),l=ot(H(r-s,a.moneyFormat,a.currency,!1));t.push({id:`d-${i}`,cssSelector:`[data-sl-attribute-discount="${i}"]`,urlPatterns:[e],actions:[{id:`d-action-${i}`,type:"js",scope:null,value:`var format = element.getAttribute('data-sl-format') || 'percent'; if (format === 'percent') { element.textContent = '-${o}%'; } else if (format === 'amount') { element.textContent = '-${l}'; } else if (format === 'both') { element.textContent = '-${o}% (-${l})'; }`}]})}}return t}const Jt="modulepreload",Yt=function(a){return"/"+a},Zt={}
7,Vt=function(t,e,i){let s=Promise.resolve();function r(n){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=n,window.dispatchEvent(o),!o.defaultPrevented)throw n}return s.then(n=>{for(const o of n||[])o.status==="rejected"&&r(o.reason);return t().catch(r)})};function at(a,t,e){const i=e?a.plans.filter(c=>!c.variantId||c.variantId===e):a.plans,s=[],r=[];for(const c of i)c.direction==="decrease"?(s.push(c.existingShopifyPlanId),r.push(c.createdShopifyPlanId)):(s.push(c.createdShopifyPlanId),r.push(c.existingShopifyPlanId));const n=t?s:r,o=t?r:s;if(e)for(const c of a.plans)for(const d of[c.existingShopifyPlanId,c.createdShopifyPlanId])d&&!n.includes(d)&&!o.includes(d)&&o.push(d);const l={};for(let c=0;c<o.length;c++){const d=o[c],p=n[c];d&&p&&(l[d]=p)}return{showPlanIds:n,hidePlanIds:o,swapMap:l}}function lt(a,t,e){const i=t?a.plans.find(r=>r.variantId===t):void 0;if(i)return i.direction;if(e){const r=a.plans.find(n=>n.productId===e);if(r)return r.direction}return a.plans.find(r=>!r.variantId)?.direction??null}function K(a,t){const e=t?a.plans.filter(r=>!r.productId||r.productId===t):a.plans,i={};for(const r of e)i[r.existingShopifyPlanId]=r.existingDiscountAmount,i[r.createdShopifyPlanId]=r.existingDiscountAmount;const s=Math.max(...Object.values(i),0);return{discountMap:i,maxDiscount:s}}function W(a){const t=document.querySelector('form[action*="/cart/add"] input[name="product-id"]')?.value;if(t)return t;if(a){for(const r of Array.from(document.querySelectorAll("[data-sl-attribute-p]"))){const n=r.getAttribute("data-sl-attribute-p");if(!n)continue;const o=a.variants.find(l=>l[0]===n);if(o?.[3])return o[3]}const s=document.querySelector('form[action*="/cart/add"] input[name="id"]')?.value;if(s){const r=a.variants.find(n=>n[0]===s);if(r?.[3])return r[3]}}const e=window,i=e.ShopifyAnalytics?.meta?.product?.id??e.meta?.product?.id;return i!=null?String(i):null}function D(a,t){return a.widget.selectors[t]??[]}function N(a,t){return a.replace(/[\d.]+%/,`${t}%`)}function $(a,t){const e=document.createTreeWalker(a,NodeFilter.SHOW_TEXT);let i=e.nextNode();for(;i;){if(i.nodeValue!==null){const s=t(i.nodeValue);if(s!==i.nodeValue){i.nodeValue=s;return}}i=e.nextNode()}}function ct(a,t){return a===null?!1:a==="decrease"?!t:t}async function Lt(a){if(a.subscriptionSwapDone)return;const t=a.getActiveAssignment();if(!t)return;const e=a.getHypothesis(t.hypothesisId);if(!e?.subscriptionData)return;a.subscriptionSwapDone=!0;const i=e.subscriptionData,s=e.isControl,r=[...new Set(i.plans.map(d=>d.direction))].join(",");a.log(`[SUB-SWAP] ${s?"A":"B"} side, directions=${r}`);const n=i.plans.some(d=>d.variantId);let o=!1,l=!1;function c(){if(!l){l=!0;try{const d=n?document.querySelector("select[name='id'], input[name='id']")?.value:void 0,{showPlanIds:p,hidePlanIds:h,swapMap:u}=at(i,s,d);a.swapMap=u;const b=D(i,"widgetParent"),k=D(i,"subscriptionPlans"),S=D(i,"subscriptionInput");if(!b.length||!k.length||!S.length)return;const P=document.querySelector(b[0].selector);if(!P?.shadowRoot)return;const _=P.shadowRoot.querySelector(k[0].selector);if(!_?.shadowRoot)return;const C=S[0].selector;let m=null;if(i.widget.widgetType==="buttons"||i.widget.widgetType==="radio"){const y=Array.from(_.shadowRoot.querySelectorAll(C));if(!y.length)return;for(const v of y){const g=v.closest("label");g&&(p.includes(v.value)?g.style.display="":h.includes(v.value)&&(g.style.display="none"))}const w=y.some(v=>p.includes(v.value)&&v.checked),T=y.some(v=>h.includes(v.value)&&v.checked);if((w||T)&&(o=!1),!w&&!o){o=!0;for(const v of y)if(p.includes(v.value)){v.closest("label")?.click(),v.dispatchEvent(new Event("change",{bubbles:!0}));break}}const f=y.find(v=>v.checked);m=f&&p.includes(f.value)?f.value:p[0]??null}else if(i.widget.widgetType==="dropdown"){const y=_.shadowRoot.querySelector("select");if(!y)return;for(const w of Array.from(y.options))h.includes(w.value)&&(w.style.display="none",w.disabled=!0);if(h.includes(y.value)){const w=Array.from(y.options).find(T=>p.includes(T.value));w&&(y.value=w.value,y.dispatchEvent(new Event("change",{bubbles:!0})))}m=p.includes(y.value)?y.value:p[0]??null}if(m){const y=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const w of y)w.value!==m&&(w.value=m)}}finally{l=!1}}}
7if(a.subscriptionHideWrongPlans=c,a.swapMap=at(i,s).swapMap,c(),n){const d=document.querySelector("select[name='id'], input[name='id']");d&&d.addEventListener("change",c)}}function B(a){const t=D(a,"widgetParent");return t.length?document.querySelector(t[0].selector)?.shadowRoot??null:null}function J(a,t){const e=D(a,"subscriptionPlans");return e.length?t.querySelector(e[0].selector)?.shadowRoot??null:null}function Y(a,t){const e=new URLSearchParams(window.location.search).get("variant");if(e)return e;{const i=document.querySelector('form[action*="/cart/add"] input[name="id"]')?.value;if(i)return i}return a.size>0?[...a.keys()][0]:void 0}function G(a,t){return H(a,t.moneyFormat,t.currency,t.currencyCodeEnabled)}function $t({originalFetch:a,swapMap:t,slptValue:e,getSelectedPlanId:i,log:s}){if(window.fetch.__shoplift_intercepted)return s("[SUB-INTERCEPT] already installed â skipping"),()=>{};function r(o){if(i){const l=i();if(l)return t[l]??l}return t[o]??o}const n=function(o,l){if((typeof o=="string"?o:o instanceof URL?o.href:o.url).includes("/cart/add")&&l?.body)try{if(l.body instanceof FormData){const d=l.body.get("selling_plan");d?l.body.set("selling_plan",r(String(d))):(!d||d==="")&&e&&l.body.set("properties[_slpt]",e)}else if(typeof l.body=="string"){const d=JSON.parse(l.body);if(d.items)for(const p of d.items){const h=String(p.selling_plan??"");h?p.selling_plan=r(h):!p.selling_plan&&e&&(p.properties||(p.properties={}),p.properties._slpt=e)}else if(d.id){const p=String(d.selling_plan??"");p?d.selling_plan=r(p):!d.selling_plan&&e&&(d.properties||(d.properties={}),d.properties._slpt=e)}l.body=JSON.stringify(d)}}catch(d){s("[SUB-INTERCEPT] body parse failed; cart-add proceeds with un-swapped plan",d)}return a.call(window,o,l)};return n.__shoplift_intercepted=!0,window.fetch=n,function(){window.fetch===n&&(window.fetch=a)}}function Mt({log:a}){if(window.fetch.__shoplift_intercepted)return a("[SUB-PREVIEW-BLOCK] already installed â skipping"),()=>{};const t=window.fetch,e=function(i,s){const r=typeof i=="string"?i:i instanceof URL?i.href:i.url;return r.includes("/cart/add")?(a("[SUB-PREVIEW-BLOCK] cart-add blocked in preview mode",{url:r}),Promise.resolve(new Response(JSON.stringify({id:0,properties:{},quantity:0,variant_id:0,key:"preview",title:"Preview â cart-add blocked",price:0,original_price:0,line_price:0,original_line_price:0,total_discount:0,discounts:[],preview:!0}),{status:200,headers:{"Content-Type":"application/json"}}))):t.call(window,i,s)};return e.__shoplift_intercepted=!0,window.fetch=e,function(){window.fetch===e&&(window.fetch=t)}}function dt({data:a,runUpdates:t,debounceMs:e=150}){let i=null;function s(){i&&clearTimeout(i),t(),i=setTimeout(t,e)}let r=null;const n=[],o={childList:!0,subtree:!0,characterData:!0,attributes:!0};function l(h){for(const u of n)u.disconnect();n.length=0;for(const u of Array.from(h.querySelectorAll("*")))if(u.shadowRoot){const b=new MutationObserver(s);b.observe(u.shadowRoot,o),n.push(b)}}function c(){const h=B(a);return h?(r&&r.disconnect(),l(h),r=new MutationObserver(u=>{u.some(b=>b.type==="childList"&&b.addedNodes.length>0)&&l(h),s()}),r.observe(h,o),!0):!1}const d=document.body||document.documentElement,p=new MutationObserver(()=>{c()&&s()});return p.observe(d,{childList:!0,subtree:!0}),c()&&s(),t(),function(){i&&(clearTimeout(i),i=null),p.disconnect(),r&&(r.disconnect(),r=null);for(const u of n)u.disconnect();n.length=0}}async function qt(a){if(a.subscriptionPriceDone)return;const t=a.getActiveAssignment(),e=t?a.getHypothesis(t.hypothesisId):void 0,i=e?.subscriptionData?null:a.findActiveSubscriptionTestControl(),s=e?.subscriptionData?e:i?.hypothesis;if(!s?.subscriptionData)return;const r=e?.subscriptionData?t.testId:i.testId;a.subscriptionPriceDone=!0;const n=s.subscriptionData,o=s.isControl,l=s.priceData,c=n.widget.widgetType;let d=W(l),p=K(n,d),h=p.discountMap,u=p.maxDiscount;function b(){const g=W(l);g!==d&&(d=g,p=K(n,d),h=p.discountMap,u=p.maxDiscount,a.log(`[SUB-PRICE] scope refreshed side=${o?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${u}`))}a.log(`[SUB-PRICE] side=${o?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${u}
7`),a.updatePriceTestHiddenInputs(r,o?"control":"variant",!1);function k(){if(!l)return null;const g=j(l),I=Y(g),A=lt(n,I,d);if(!ct(A,o))return null;const E=I?g.get(I):void 0;return E?{formattedVariantPrice:G(E.priceInCents,l),formattedDiscounted:G(E.priceInCents*(1-u/100),l)}:null}$t({originalFetch:a.fetch,swapMap:a.swapMap??{},slptValue:a.slptValue??void 0,log:a.log,getSelectedPlanId:()=>{const g=B(n);if(!g)return null;const I=J(n,g);if(!I)return null;const A=D(n,"subscriptionInput"),E=A.length?A[0].selector:'input[name="rc_plan"]';return I.querySelector(`${E}:checked`)?.value??null}});function S(g){const I=D(n,"subscriptionDiscount");for(const A of I)if(A.selector.includes("badge")||A.selector.includes("__badge")){const E=g.querySelector(A.selector);E?.textContent&&!E.textContent.includes(`${u}%`)&&$(E,x=>N(x,u))}}function P(g){const I=k();if(!I)return;const A=D(n,"subscriptionCompareAt");for(const E of A){const x=g.querySelector(E.selector)||g.querySelector(`[part~="${E.selector}"]`);x?.textContent&&!x.textContent.includes(I.formattedVariantPrice)&&$(x,R=>/\d/.test(R)?I.formattedVariantPrice:R)}}function _(g,I){const A=D(n,"subscriptionCompareAt"),E=I===0?"none":"";for(const x of A){const R=g.querySelector(x.selector)||g.querySelector(`[part~="${x.selector}"]`);R&&(E==="none"?R.style.display!=="none"&&(R.style.display="none"):R.style.display==="none"&&(R.style.display=""))}}function C(g){const I=D(n,"subscriptionInput"),A=I.length?I[0].selector:'input[name="rc_plan"]',E=D(n,"subscriptionPlanDiscount"),x=E.length?E[0].selector:".rc-plans-button__discount";for(const R of Array.from(g.querySelectorAll("label"))){const V=R.querySelector(A),O=R.querySelector(x);if(V&&O){const L=h[V.value];if(L!==void 0){if(L===0)O.style.display!=="none"&&(O.style.display="none");else if(O.style.display==="none"&&(O.style.display=""),O.textContent){const Z=O.textContent.match(/[\d.]+%/)?.[0];Z&&Z!==`${L}%`&&$(O,Kt=>N(Kt,L))}}}}}function m(g){const I=g.querySelector("select");if(I)for(const A of Array.from(I.options)){const E=h[A.value];if(E!==void 0&&A.textContent){const x=A.textContent.match(/[\d.]+%/)?.[0];x&&x!==`${E}%`&&(A.textContent=N(A.textContent,E))}}}function y(g,I){const E=D(n,"subscriptionDiscount").filter(x=>x.selector.includes("benefit")||x.selector==="rc-benefits");for(const x of E){const R=g.querySelector(x.selector);if(R?.shadowRoot){for(const V of Array.from(R.shadowRoot.querySelectorAll("li")))if(V.textContent?.includes("Save")){const O=V;if(I===0)O.style.display!=="none"&&(O.style.display="none");else{O.style.display==="none"&&(O.style.display="");const L=V.textContent.match(/[\d.]+%/)?.[0];L&&L!==`${I}%`&&$(V,Z=>N(Z,I))}}}}}let w=!1;function T(){if(!w){w=!0;try{if(b(),d!==null&&Object.keys(h).length===0)return;const g=B(n);if(!g)return;S(g),l&&P(g);const I=J(n,g);let A=u;if(I){const E=D(n,"subscriptionInput"),x=E.length?E[0].selector:'input[name="rc_plan"]',R=I.querySelector(`${x}:checked`);if(R){const V=h[R.value];V!==void 0&&(A=V)}c==="buttons"||c==="radio"?C(I):m(I)}_(g,A),y(g,A)}finally{w=!1}}}function f(){const g=k();if(!g)return;const I=B(n);if(!I)return;const A=D(n,"onetimeToggle"),E=A.length?A[0].selector:'input[value="onetime"]';if(!I.querySelector(E)?.checked)return;const R=D(n,"subscriptionPrice");for(const V of R){const O=I.querySelector(V.selector)||I.querySelector(`[part~="${V.selector}"]`);O?.textContent&&!O.textContent.includes(g.formattedDiscounted)&&$(O,L=>/\d/.test(L)?g.formattedDiscounted:L)}}function v(){a.subscriptionHideWrongPlans&&a.subscriptionHideWrongPlans(),T(),a.subscriptionUpdateOneTime&&a.subscriptionUpdateOneTime(),f()}dt({data:n,runUpdates:v})}async function Ht(a){if(a.subscriptionOneTimeDone)return;const t=a.getActiveAssignment(),e=t?a.getHypothesis(t.hypothesisId):void 0,i=!!(e?.subscriptionData&&e.priceData),s=i?null:a.findActiveSubscriptionTestControl(),r=i?e:s?.hypothesis;if(!r?.subscriptionData||!r.priceData)return;const n=i?t.testId:s.testId;a.subscriptionOneTimeDone=!0;const o=r.subscriptionData,l=r.priceData,c=j(l),d=r.isControl,p=d?"control":"variant";a.slptValue=`${n}:${p}
7:f`,a.updatePriceTestHiddenInputs(n,p,!1);function h(){const u=B(o);if(!u)return;const b=Y(c);if(!b)return;const k=W(l),S=lt(o,b,k);if(!ct(S,d))return;const P=c.get(b);if(!P)return;const _=H(P.priceInCents,l.moneyFormat,l.currency,l.currencyCodeEnabled),C=D(o,"onetimePrice");if(!C.length)return;const m=D(o,"onetimeContainer"),y=m.length?m[0].selector:'[part~="rc-purchase-option__onetime"]',T=u.querySelector(y)??u;for(const f of C){let v=null;try{v=T.querySelector(f.selector)}catch{v=null}v??=T.querySelector(`[part~="${f.selector}"]`),v&&v.textContent&&!v.textContent.includes(_)&&$(v,g=>/\d/.test(g)?_:g)}}a.subscriptionUpdateOneTime=h,h()}async function Nt(a,t){const{subscriptionPreviewRender:e}=await Vt(async()=>{const{subscriptionPreviewRender:i}=await Promise.resolve().then(()=>jt);return{subscriptionPreviewRender:i}},void 0);return e(a.subscriptionData,a.priceData,a.isControl,t)}function Ut(a,t){const e=a.widget.selectors.widgetParent??[],i=a.widget.selectors.subscriptionPlans??[],s=a.widget.selectors.subscriptionInput??[];if(!e.length||!i.length||!s.length){t("[SUB-GLOBAL-HIDE] Missing required selectors â skipping");return}const r=e[0].selector,n=i[0].selector,o=s[0].selector;let l=!1,c=null,d=!1;function p(){if(!d){d=!0;try{h()}finally{d=!1}}}function h(){const P=document.querySelector(r);if(!P?.shadowRoot)return;const _=P.shadowRoot.querySelector(n);if(!_?.shadowRoot)return;_.shadowRoot!==c&&(c=_.shadowRoot,l=!1);let C=0;if(a.widget.widgetType==="buttons"||a.widget.widgetType==="radio"){const m=Array.from(_.shadowRoot.querySelectorAll(o));for(const f of m)if(a.planIds.includes(f.value)){f.disabled||(f.disabled=!0);const v=f.closest("label");v&&v.style.display!=="none"&&(v.style.display="none",C++)}const y=m.filter(f=>!a.planIds.includes(f.value));if(!y.some(f=>f.checked)&&!l&&y.length>0){l=!0;const f=y[0];f.closest("label")?.click(),f.dispatchEvent(new Event("change",{bubbles:!0})),t(`[SUB-GLOBAL-HIDE] Preselected first visible plan input=${f.value}`)}const T=y.find(f=>f.checked)??y[0];if(T){const f=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const v of f)v.value!==T.value&&(v.value=T.value,t(`[SUB-GLOBAL-HIDE] Mirrored plan id ${T.value} to form selling_plan input`))}}else if(a.widget.widgetType==="dropdown"){const m=_.shadowRoot.querySelector("select");if(!m)return;for(const T of Array.from(m.options))a.planIds.includes(T.value)&&(T.style.display!=="none"&&(T.style.display="none"),T.disabled||(T.disabled=!0),C++);const y=Array.from(m.options).filter(T=>!a.planIds.includes(T.value)),w=y.some(T=>T.value===m.value);y.length>0&&!w&&!l&&(l=!0,m.value=y[0].value,m.dispatchEvent(new Event("change",{bubbles:!0})),t(`[SUB-GLOBAL-HIDE] Preselected first visible option=${y[0].value}`))}C>0&&t(`[SUB-GLOBAL-HIDE] Hidden ${C} B-side plan buttons`)}const u={childList:!0,subtree:!0,characterData:!0};let b=null;function k(P){b?.disconnect(),b=new MutationObserver(()=>p()),b.observe(P,u)}function S(){const P=document.querySelector(r);if(!P?.shadowRoot)return!1;p(),new MutationObserver(()=>{p();const m=P.shadowRoot.querySelector(n);m?.shadowRoot&&k(m.shadowRoot)}).observe(P.shadowRoot,u);const C=P.shadowRoot.querySelector(n);return C?.shadowRoot&&k(C.shadowRoot),!0}if(!S()){t("[SUB-GLOBAL-HIDE] Widget not in DOM yet â waiting via MutationObserver");const P=new MutationObserver(()=>{S()&&P.disconnect()});P.observe(document.body??document.documentElement,{childList:!0,subtree:!0})}}const ut="Limited preview",Ft="Add-to-cart and checkout prices won't reflect this test until it launches â test selling plans are not created in your subscription app until after a test is launched.",Bt=5e3;function zt(){const a=document.createElement("div");a.id="shoplift-preview-subscription-warning";const t=document.createElement("span");t.id="shoplift-preview-subscription-warning__icon",t.setAttribute("aria-hidden","true"),t.textContent="!";const e=document.createElement("span");e.id="shoplift-preview-subscription-warning__label",e.textContent=ut;const i=document.createElement("div");i.id="shoplift-preview-subscription-warning__tooltip",i.setAttribute("role","tooltip"),i.textContent=Ft,a.appendChild(t),a.appendChild(e),a.appendChild(i),a.setAttribute("tabindex","0"),a.setAttribute("aria-describedby",i.id),a.setAttribute("aria-label",ut);let s=null;function r(){s!==null&&(clearTimeout(s),s=null)}function n(){i.classList.add("shoplift-preview-subscription-warning__tooltip--visible")}function o(){i.classList.remove("shoplift-preview-subscription-warning__tooltip--visible")}function l(){n(),r(),s=setTimeout(()=>{o(),s=null},Bt)}function c(){r(),n()}function d(){s===null&&o()}a.addEventListener("mouseenter",c),a.addEventListener("mouseleave",d),a.addEventListener("focus",c),a.addEventListener("blur",d);function p(u){try{const b=u.target;if(!(b instanceof Element))return;(b.closest('form[action*="/cart/add"] button[type="submit"], form[action*="/cart/add"] input[type="submit"]')!==null||b.closest('[name="add"], button[name="add"], [data-add-to-cart], button[data-add-to-cart]')!==null)&&l()}catch{}}
7document.addEventListener("click",p,!0);function h(){r(),document.removeEventListener("click",p,!0),a.removeEventListener("mouseenter",c),a.removeEventListener("mouseleave",d),a.removeEventListener("focus",c),a.removeEventListener("blur",d),a.remove()}return{root:a,tooltip:i,cleanup:h}}let pt=!1;class Wt{constructor(t,e,i,s,r,n,o,l,c,d,p,h,u){this.shop=t,this.host=e,this.eventHost=i,this.disableReferrerOverride=l,this.logHistory=[],this.legacySessionKey=`SHOPLIFT_SESSION_${this.shop}`,this.cssHideClass=s?"shoplift-hide":"",this.testConfigs=p.map(k=>({...k,startAt:new Date(k.startAt),statusHistory:k.statusHistory.map(S=>({...S,createdAt:new Date(S.createdAt)}))})),this.inactiveTestConfigs=h,this.hiddenSubscriptionPlans=u,this.sendPageView=!!r,this.shopliftDebug=n===!0,this.telemetryEnabled=c===!0,this.gaConfig=o!=={"sendEvents":false,"mode":"gtag"}?o:{sendEvents:!1},this.fetch=window.fetch.bind(window),this.localStorageSet=window.localStorage.setItem.bind(window.localStorage),this.localStorageGet=window.localStorage.getItem.bind(window.localStorage);const b=this.getDeviceType();this.device=b!=="tablet"?b:"mobile",this.state=this.loadState(),this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.testsFilteredByAudience=p.filter(k=>
7k.status=="active"),this.getCountryTimeout=d===1000?1e3:d,this.log("State Loaded",JSON.stringify(this.state))}DATA_SL_ATTRIBUTE_P="data-sl-attribute-p";DATA_SL_TEST_ID="data-sl-test-id";VIEWPORT_TRACK_THRESHOLD=.5;temporarySessionKey="Shoplift_Session";essentialSessionKey="Shoplift_Essential";analyticsSessionKey="Shoplift_Analytics";priceSelectorsSessionKey="Shoplift_PriceSelectors_v2";legacySessionKey;cssHideClass;testConfigs;inactiveTestConfigs;hiddenSubscriptionPlans;testsFilteredByAudience;sendPageView;shopliftDebug;gaConfig;telemetryEnabled;getCountryTimeout;state;subscriptionPreviewWarningCleanup=null;shopifyAnalyticsId;cookie=document.cookie;isSyncing=!1;isSyncingGA=!1;fetch;localStorageSet;localStorageGet;sessionStorageSet=window.sessionStorage.setItem.bind(window.sessionStorage);sessionStorageGet=window.sessionStorage.getItem.bind(window.sessionStorage);urlParams=new URLSearchParams(window.location.search);device;logHistory;activeViewportObservers=new Map;clientIdRetryCount=0;deriveCategoryFromExistingTests(){if(!this.state.temporary.testCategory&&this.state.essential.visitorTests.length>0){const t=this.state.essential.visitorTests.some(e=>{if(!e.hypothesisId)return!1;const i=this.getHypothesis(e.hypothesisId);return i&&["theme","basicScript","price"].includes(i.type)});this.state.temporary.testCategory=t?"global":"conditional",this.persistTemporaryState(),this.log("Derived test category from existing visitorTests: %s",this.state.temporary.testCategory)}}
7async init(){try{if(this.log("Shoplift script initializing"),window.Shopify&&window.Shopify.designMode){this.log("Skipping script for design mode");return}if(window.location.href.includes("slScreenshot=true")){this.log("Skipping script for screenshot");return}if(window.location.hostname.endsWith(".edgemesh.com")){this.log("Skipping script for preview");return}if(window.location.href.includes("isShopliftMerchant")){const s=this.urlParams.get("isShopliftMerchant")==="true";this.log("Setting merchant session to %s",s),this.state.temporary.isMerchant=s,this.persistTemporaryState()}if(this.state.temporary.isMerchant){this.log("Setting up preview for merchant"),typeof window.shoplift!="object"&&this.setShopliftStub(),this.state.temporary.previewConfig||this.hidePage(),await this.initPreview(),document.querySelector("#sl-preview-bar-hide")?.remove();return}if(this.state.temporary.previewConfig=void 0,mt(navigator.userAgent))return;const t=this.state.essential.visitorTests.filter(s=>s.hypothesisId&&+s.createdAt>Date.now()-6e4);if(t.length===0)this.sendDiagnosticTelemetry("page-landed",null);else for(const s of t)this.sendDiagnosticTelemetry("page-landed",s.testId,{hypothesisId:s.hypothesisId,isControl:s.assignedTo==="control",testType:s.testType??"unknown"});if(navigator.userAgent.includes("Chrome/118")){this.log("Random: %o",[Math.random(),Math.random(),Math.random()]);const s=await this.makeRequest({url:`${this.eventHost}/api/v0/events/ip`,method:"get"}).then(r=>r?.json());this.log(`IP: ${s}`),this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify(this.debugState(),X)}).catch()}if(this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.monitorConsentChange(),this.checkForThemePreview())return;if(!this.disableReferrerOverride&&this.state.temporary.originalReferrer!=null){this.log(`Overriding referrer from '${document.referrer}' to '${this.state.temporary.originalReferrer}'`);const s=this.state.temporary.originalReferrer;delete this.state.temporary.originalReferrer,this.persistTemporaryState(),Object.defineProperty(document,"referrer",{get:()=>s,enumerable:!0,configurable:!0})}if(await this.refreshVisitor(this.shopifyAnalyticsId),await this.handleVisitorTest()){this.log("Redirecting for visitor test");return}this.setShoplift(),this.showPage(),this.ensureCartAttributesForExistingPriceTests(!1);const i=this.state.essential.visitorTests.some(s=>(s.hypothesisId?this.getHypothesis(s.hypothesisId):void 0)?.subscriptionData!=null)||Object.values(this.state.temporary.testReservations??{}).some(s=>this.getHypothesis(s.hypothesisId)?.subscriptionData!=null);this.hiddenSubscriptionPlans&&!i&&(this.log(`[SUB-GLOBAL] Visitor not in subscription test â hiding ${this.hiddenSubscriptionPlans.planIds.length} B-side plans`),Ut(this.hiddenSubscriptionPlans,s=>this.log(s))),await this.subscriptionSwap(),await this.subscriptionOneTimePrice(),await this.subscriptionPriceChange(),await this.finalize(),console.log("SHOPLIFT SCRIPT INITIALIZED!")}catch(t){if(t instanceof et)return;throw t}finally{typeof window.shoplift!="object"&&this.setShopliftStub()}}getVariantColor(t){switch(t){case"a":return{text:"#141414",bg:"#E2E2E2"};case"b":return{text:"rgba(255, 255, 255, 1)",bg:"rgba(37, 99, 235, 1)"}}}getDefaultVariantTitle(t){return t.title?t.title:t.type==="price"?t.isControl?"Original prices":"Variant prices":t.isControl?"Original":"Untitled variant "+t.label.toUpperCase()}async initPreview(){const t=this.urlParams.get("previewConfig");if(t){this.state.temporary.previewConfig=void 0,this.log("Setting up the preview"),this.log("Found preview config, writing to temporary state");const e=await Rt(t);if(this.state.temporary.previewConfig=e,this.state.temporary.previewConfig.testTypeCategory===M.Price){this.hidePage(!0);const s=this.state.temporary.previewConfig;let r=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/${s.isDraft||!1}`;s.shopifyProductId&&(r+=`?productId=${s.shopifyProductId}`);const n=await this.makeJsonRequest({method:"get",url:r}).catch(o=>(this.log("Error getting domSelectors",o),null));
7if(s.variants.forEach(o=>o.domSelectors=n[o.id]?.domSelectors),s.isDraft){const o=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/subscription-preview`,l=await this.makeJsonRequest({method:"get",url:o}).catch(c=>(this.log("No subscription preview data for draft (test may not have a subscription widget)",c),null));l?.subscriptionData&&s.variants.forEach(c=>{c.subscriptionData=l.subscriptionData,c.priceData=l.priceData})}}this.persistTemporaryState();const i=new URL(window.location.toString());i.searchParams.delete("previewConfig"),this.queueRedirect(i)}else if(this.state.temporary.previewConfig){this.showPage();const e=this.state.temporary.previewConfig;if(e.testTypeCategory===M.Template&&this.handleTemplatePreview(e)&&this.initPreviewControls(e),e.testTypeCategory===M.UrlRedirect&&this.handleUrlPreview(e)&&this.initPreviewControls(e),e.testTypeCategory===M.Script&&this.handleScriptPreview(e)&&this.initPreviewControls(e),e.testTypeCategory===M.Price){const i=await this.handlePricePreview(e);e.isDraft?await this.handleSubscriptionPricePreview(e):await this.handleSubscriptionLivePreview(e),i&&this.initPreviewControls(e)}}}initPreviewControls(t){document.addEventListener("DOMContentLoaded",()=>{const e=t.variants.find(b=>b.id===t.currentVariant),i=e?.label||"a",s=t.variants,r=document.createElement("div");r.id="shoplift-preview-control";const n=document.createElement("div"),o=document.createElement("img");o.src=_t,o.height=24,o.width=14,n.style.padding="0 16px",n.style.lineHeight="100%",n.appendChild(o),r.appendChild(n);const l=document.createElement("div");l.id="shoplift-preview-variant-selector";const c=document.createElement("button");c.id="shoplift-preview-variant-menu-trigger";const d=document.createElement("div");d.className="menu-variant-label",d.style.backgroundColor=this.getVariantColor(i).bg,d.style.color=this.getVariantColor(i).text,d.innerText=i.toUpperCase(),c.appendChild(d);const p=document.createElement("span");if(p.id="shoplift-preview-variant-title",p.innerText=e?this.getDefaultVariantTitle(e):"Untitled variant "+i.toUpperCase(),c.appendChild(p),s.length>1){const b=document.createElement("img");b.src=xt,b.width=12,b.height=12,b.style.height="12px",b.style.width="12px",c.appendChild(b);const k=document.createElement("div");k.className="preview-variant-menu";for(const S of t.variants.filter(P=>P.id!==t.currentVariant)){const P=document.createElement("div");P.className="preview-variant-menu--item";const _=document.createElement("div");_.className="menu-variant-label",_.style.backgroundColor=this.getVariantColor(S.label).bg,_.style.color=this.getVariantColor(S.label).text,_.style.flexShrink="0",_.innerText=S.label.toUpperCase(),P.appendChild(_);const C=document.createElement("span");C.innerText=this.getDefaultVariantTitle(S),P.appendChild(C),P.addEventListener("click",()=>{this.pickVariant(S.id)}),k.appendChild(P)}l.appendChild(k),c.addEventListener("click",()=>{k.className!=="preview-variant-menu preview-variant-menu__visible"?k.classList.add("preview-variant-menu__visible"):k.classList.remove("preview-variant-menu__visible")}),document.addEventListener("click",S=>{S.target instanceof Element&&!c.contains(S.target)&&k.className==="preview-variant-menu preview-variant-menu__visible"&&k.classList.remove("preview-variant-menu__visible")})}else c.style.pointerEvents="none",d.style.margin="0";if(l.appendChild(c),r.appendChild(l),t.hasSubscription){this.subscriptionPreviewWarningCleanup?.();const b=zt();r.appendChild(b.root),this.subscriptionPreviewWarningCleanup=b.cleanup}const h=document.createElement("div"),u=document.createElement("button");u.id="shoplift-exit-preview-button",u.innerText="Exit",h.appendChild(u),u.addEventListener("click",()=>{this.exitPreview()}),r.appendChild(h),document.body.appendChild(r),requestAnimationFrame(()=>{r.classList.add("visible")})}),this.ensureCartAttributesForExistingPriceTests(!0)}pickVariant(t){if(this.state.temporary.previewConfig){const e=this.state.temporary.previewConfig,i=new URL(window.location.toString());if(e.testTypeCategory===M.UrlRedirect){const s=e.variants.find(r=>r.id===e.currentVariant)?.redirectUrl;if(i.pathname===s){const r=e.variants.find(n=>n.id===t)?.redirectUrl;r&&(i.pathname=r)}}if(e.testTypeCategory===M.Template){const s=e.variants.find(r=>r.id===e.currentVariant)?.pathName;if(s&&i.pathname===s){const r=e.variants.find(n=>n.id===t)?.pathName;r&&r!==s&&(i.pathname=r)}}e.currentVariant=t,this.persistTemporaryState(),this.queueRedirect(i)}}exitPreview(){const t=new URL(window.location.toString());if(this.state.temporary.previewConfig?.testTypeCategory===M.Template&&t.searchParams.delete("view"),this.state.temporary.previewConfig?.testTypeCategory===M.Script&&t.searchParams.delete("slVariant"),this.state.temporary.previewConfig?.testTypeCategory===M.UrlRedirect){const i=this.state.temporary.previewConfig.variants.filter(r=>!r.isControl&&r.redirectUrl!==null).map(r=>r.redirectUrl),s=this.state.temporary.previewConfig.variants.find(r=>r.label==="a")?.redirectUrl;i.includes(t.pathname)&&s&&(t.pathname=s)}this.state.temporary.isMerchant=!1,t.searchParams.delete("isShopliftMerchant"),this.state.temporary.previewConfig=void 0,this.persistTemporaryState(),this.subscriptionPreviewWarningCleanup?.(),this.subscriptionPreviewWarningCleanup=null,this.hidePage(),this.queueRedirect(t)}handleTemplatePreview(t){const e=t.currentVariant,i=t.variants.find(l=>l.id===e);if(!i)return!1;const s=t.variants.find(l=>l.isControl);if(!s)return!1;this.log("Setting up template preview for type",s.type);
7const r=new URL(window.location.toString()),n=r.searchParams.get("view"),o=i.type===s.type;return!o&&!i.isControl&&template.suffix===s.affix&&this.typeFromTemplate()===s.type&&i.pathName!==null?(this.log("Hit control template type, redirecting to the variant url"),this.hidePage(),r.pathname=i.pathName,this.queueRedirect(r),!0):(!i.isControl&&this.typeFromTemplate()==i.type&&template.suffix===s.affix&&o&&n!==(i.affix||"__DEFAULT__")&&(this.log("Template type and affix match control, updating the view param"),r.searchParams.delete("view"),this.log("Setting the new viewParam to",i.affix||"__DEFAULT__"),this.hidePage(),r.searchParams.set("view",i.affix||"__DEFAULT__"),this.queueRedirect(r)),n!==null&&n!==(i.affix||"__DEFAULT__")&&(r.searchParams.delete("view"),this.hidePage(),this.queueRedirect(r)),!0)}handleUrlPreview(t){const e=t.currentVariant,i=t.variants.find(n=>n.id===e),s=t.variants.find(n=>n.isControl)?.redirectUrl;if(!i)return!1;this.log("Setting up URL redirect preview");const r=new URL(window.location.toString());return r.pathname===s&&!i.isControl&&i.redirectUrl!==null&&(this.log("Url matches control, redirecting"),this.hidePage(),r.pathname=i.redirectUrl,this.queueRedirect(r)),!0}handleScriptPreview(t){const e=t.currentVariant,i=t.variants.find(n=>n.id===e);if(!i)return!1;this.log("Setting up script preview");const s=new URL(window.location.toString());return s.searchParams.get("slVariant")!==i.id&&(this.log("current id doesn't match the variant, redirecting"),s.searchParams.delete("slVariant"),this.log("Setting the new slVariantParam"),this.hidePage(),s.searchParams.set("slVariant",i.id),this.queueRedirect(s)),!0}async handlePricePreview(t){const e=t.currentVariant,i=t.variants.find(s=>s.id===e);return i?(this.log("Setting up price preview"),i.domSelectors&&i.domSelectors.length>0&&(U(document,{testId:t.testId,hypothesisId:i.id,selectors:i.domSelectors}),this.ensureCartAttributesForExistingPriceTests(!0)),!0):!1}async handleSubscriptionPricePreview(t){const e=t.variants.find(i=>i.id===t.currentVariant);e?.subscriptionData&&(this.log("Setting up subscription price preview"),await Nt({id:e.id,isControl:e.isControl,subscriptionData:e.subscriptionData,priceData:e.priceData},(i,...s)=>this.log(i,...s)))}async handleSubscriptionLivePreview(t){this.testConfigs.find(s=>s.id===t.testId)?.hypotheses.find(s=>s.id===t.currentVariant)?.subscriptionData&&(this.log("Setting up subscription live preview"),this.subscriptionSwapDone=!1,this.subscriptionOneTimeDone=!1,this.subscriptionPriceDone=!1,await this.subscriptionSwap(),await this.subscriptionOneTimePrice(),await this.subscriptionPriceChange())}async finalize(){const t=await this.getCartState();t!==null&&this.queueCartUpdate(t),this.pruneStateAndSave(),await this.syncAllEvents()}setShoplift(){this.log("Setting up public API");const e=this.urlParams.get("slVariant")==="true",i=e?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:async s=>{if(this.log("Script checking variant for hypothesis '%s'",s),e)return this.log("Forcing variant for hypothesis '%s'",s),!0;if(i!==null)return this.log("Forcing hypothesis '%s'",i),s===i;const r=this.testConfigs.find(o=>o.hypotheses.some(l=>l.id===s));if(!r)return this.log("No test found for hypothesis '%s'",s),!1;const n=this.state.essential.visitorTests.find(o=>o.testId===r.id);return n?(this.log("Active visitor test found",s),n.hypothesisId===s):(await this.manuallySplitVisitor(r),this.testConfigs.some(o=>o.hypotheses.some(l=>l.id===s&&this.state.essential.visitorTests.some(c=>c.hypothesisId===l.id))))},setAnalyticsConsent:async s=>{await this.onConsentChange(s,!0)},getVisitorData:()=>({visitor:this.state.analytics.visitor,visitorTests:this.state.essential.visitorTests.filter(s=>!s.isInvalid).map(s=>{const{shouldSendToGa:r,savedAt:n,...o}=s;return o})})}}setShopliftStub(){this.log("Setting up stubbed public API");const e=this.urlParams.get("slVariant")==="true",i=e?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:s=>Promise.resolve(e||s===i),setAnalyticsConsent:()=>Promise.resolve(),getVisitorData:()=>({visitor:null,visitorTests:[]})}}async manuallySplitVisitor(t){this.log("Starting manual split for test '%s'",t.id),await this.handleVisitorTest([t]);const e=this.getReservationForTest(t.id);e&&!e.isRealized&&e.entryCriteriaKey&&(this.log("Realizing manual API reservation for test '%s'",t.id),this.realizeReservationForCriteria(e.entryCriteriaKey)),this.saveState(),this.syncAllEvents()}async handleVisitorTest(t){await this.filterTestsByAudience(this.testConfigs,this.state.analytics.visitor??this.buildBaseVisitor(),this.state.essential.visitorTests),this.pruneStaleVisitorTests(),this.deriveC
7ategoryFromExistingTests(),this.clearStaleReservations();let e=t?t.filter(i=>this.testsFilteredByAudience.some(s=>s.id===i.id)):[...this.testsForUrl(this.testsFilteredByAudience),...this.domTestsForUrl(this.testsFilteredByAudience)];try{if(e.length===0)return this.log("No tests found"),!1;this.log("Checking for existing visitor test on page");const i=this.getCurrentVisitorHypothesis(e);if(i){this.log("Found current visitor test");const l=this.considerRedirect(i);return l&&(this.log("Redirecting for current visitor test"),this.redirect(i)),l}const s=this.getReservationForCurrentPage();if(s){this.log("Found matching reservation for current page: %s",s.testId);const l=this.getHypothesis(s.hypothesisId);if(l){l.type!=="price"&&this.realizeReservationForCriteria(s.entryCriteriaKey);const c=this.considerRedirect(l);return c&&this.redirect(l),c}}this.log("No active test relation for test page");const r=this.testsForUrl(this.inactiveTestConfigs.filter(l=>this.testIsPaused(l)&&l.hypotheses.some(c=>this.state.essential.visitorTests.some(d=>d.hypothesisId===c.id)))).map(l=>l.id);if(r.length>0)return this.log("Visitor has paused tests for test page, skipping test assignment: %o",r),!1;if(!this.state.temporary.testCategory){const l=this.testsFilteredByAudience.filter(d=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(d))),c=this.testsFilteredByAudience.filter(d=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(d)));if(this.log("Category dice roll - global tests: %o, conditional tests: %o",l.map(d=>({id:d.id,title:d.title,criteria:this.getEntryCriteriaKey(d)})),c.map(d=>({id:d.id,title:d.title,criteria:this.getEntryCriteriaKey(d)}))),l.length>0&&c.length>0){const d=l.length,p=c.length,h=d+p,u=Math.random()*h;this.state.temporary.testCategory=u<d?"global":"conditional",this.log("Category dice roll: rolled %.2f of %d (global weight: %d, conditional weight: %d), selected '%s'",u,h,d,p,this.state.temporary.testCategory)}else l.length>0?(this.state.temporary.testCategory="global",this.log("Only global tests available, setting category to global")):(this.state.temporary.testCategory="conditional",this.log("Only conditional tests available, setting category to conditional"));this.persistTemporaryState()}const n=this.state.temporary.testCategory;if(this.log("Visitor test category: %s",n),n==="global"){const l=this.testsFilteredByAudience.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)));for(const c of l)this.markTestAsBlocked(c,"category:global");e=e.filter(c=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)))}else{const l=this.testsFilteredByAudience.filter(c=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)));for(const c of l)this.markTestAsBlocked(c,"category:conditional");e=e.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)))}if(e.length===0)return this.log("No tests remaining after category filter"),!1;this.createReservations(e);const o=this.getReservationForCurrentPage();if(o&&!o.isRealized){const l=this.getHypothesis(o.hypothesisId);if(l){l.type!=="price"&&this.realizeReservationForCriteria(o.entryCriteriaKey);const c=this.considerRedirect(l);return c&&(this.log("Redirecting for new test"),this.redirect(l)),c}}return!1}finally{this.includeInDomTests(),this.saveState()}}includeInDomTests(){this.applyControlForAudienceFilteredPriceTests();const t=this.getDomTestsForCurrentUrl(),e=this.getVisitorDomHypothesis(t);for(const i of t){this.log("Evaluating dom test '%s'",i.id);const s=i.hypotheses.some(u=>u.type==="price");if(this.state.essential.visitorTests.find(u=>u.testId===i.id&&u.isInvalid&&!u.hypothesisId)){if(this.log("Visitor is blocked from test '%s', applying control prices if price test",i.id),s){const u=i.hypotheses.find(b=>b.isControl);u?.priceData&&(this.applyPriceTestWithMapLookup(i.id,u,[u],()=>{this.log("Control prices applied for blocked visitor, no metrics tracked")}),this.updatePriceTestHiddenInputs(i.id,"control",!1))}continue}const n=this.getReservationForTest(i.id);let o=null,l=!1;const c=e.find(u=>i.hypotheses.some(b=>u.id===b.id));if(n)o=this.getHypothesis(n.hypothesisId)??null,this.log("Using reserved hypothesis '%s' for test '%s'",n.hypothesisId,i.id);else if(c)o=c,this.log("Using existing hypothesis assignment for test '%s'",i.id);else if(s){const u=this.visitorActiveTestTypeWithReservations();u?(l=!0,this.log("Visitor already in test type '%s', treating as non-test for price test '%s'",u,i.id)):o=this.pickHypothesis(i)}else o=this.pickHypothesis(i);if(l&&s){const u=i.hypotheses.find(b=>b.isControl);u?.priceData&&(this.log("Applying control prices for non-test visitor on price test '%s' (Map-based)",i.id),this.applyPriceTestWithMapLookup(i.id,u,[u],()=>{this.log("Control prices applied for non-test visitor, no metrics tracked")}
7),this.updatePriceTestHiddenInputs(i.id,"control",!1));continue}if(!o){this.log("Failed to pick hypothesis for test");continue}this.sendDiagnosticTelemetry("assignment",i.id,{hypothesisId:o.id,isControl:o.isControl,testType:o.type});const d=i.bayesianRevision??4,p=o.type==="price",h=d>=5;if(p&&h){if(this.log(`Price test with Map-based lookup (v${d}): ${i.id}`),!o.priceData){this.log("No price data for hypothesis '%s', skipping",o.id);continue}const u=o.isControl?"control":"variant";this.log(`Setting up Map-based price test for ${u} (test: ${i.id})`),this.applyPriceTestWithMapLookup(i.id,o,i.hypotheses,b=>{const k=this.getReservationForTest(b);k&&!k.isRealized&&k.entryCriteriaKey?this.realizeReservationForCriteria(k.entryCriteriaKey):this.queueAddVisitorToTest(b,o),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(p&&!h){this.log(`Price test without viewport tracking (v${d}): ${i.id}`);const u=this.getDomSelectorsForHypothesis(o);if(u.length===0)continue;U(document,{testId:i.id,hypothesisId:o.id,selectors:u},b=>{this.queueAddVisitorToTest(b,o),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(!o.domSelectors||o.domSelectors.length===0){this.log("No selectors found, skipping hypothesis");continue}U(document,{testId:i.id,hypothesisId:o.id,selectors:o.domSelectors},u=>{this.queueAddVisitorToTest(u,o),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()})}}considerRedirect(t){if(this.log("Considering redirect for hypothesis '%s'",t.id),t.isControl)return this.log("Skipping redirect for control"),!1;if(t.type==="basicScript"||t.type==="manualScript")return this.log("Skipping redirect for script test"),!1;const e=this.state.essential.visitorTests.find(n=>n.hypothesisId===t.id),i=new URL(window.location.toString()),r=new URLSearchParams(window.location.search).get("view");if(t.type==="theme"){if(!(t.themeId===themeId)){if(this.log("Theme id '%s' is not hypothesis theme ID '%s'",t.themeId,themeId),this.isAppProxyPath())return this.log("On App Proxy path, skipping theme redirect to avoid infinite loop"),!1;if(e&&e.themeId!==t.themeId&&(e.themeId===themeId||!this.isThemePreview()))this.log("On old theme, redirecting and updating local visitor"),e.themeId=t.themeId;else if(this.isThemePreview())return this.log("On non-test theme, skipping redirect"),!1;return this.log("Hiding page to redirect for theme test"),this.hidePage(),!0}return!1}else if(t.type!=="dom"&&t.type!=="price"&&t.affix!==template.suffix&&t.affix!==r||t.redirectPath&&!i.pathname.endsWith(t.redirectPath))return this.log("Hiding page to redirect for template test"),this.hidePage(),!0;return this.log("Not redirecting"),!1}redirect(t){if(this.log("Redirecting to hypothesis '%s'",t.id),t.isControl)return;const e=new URL(window.location.toString());if(e.searchParams.delete("view"),t.redirectPath){const i=RegExp("^(/w{2}-w{2})/").exec(e.pathname);if(i&&i.length>1){const s=i[1];e.pathname=`${s}${t.redirectPath}`}else e.pathname=t.redirectPath}else t.type==="theme"?(e.searchParams.set("_ab","0"),e.searchParams.set("_fd","0"),e.searchParams.set("_sc","1"),e.searchParams.set("preview_theme_id",t.themeId.toString())):t.type!=="urlRedirect"&&e.searchParams.set("view",t.affix);this.queueRedirect(e)}async refreshVisitor(t){if(t===null||!this.state.essential.isFirstLoad||!this.testConfigs.some(i=>i.visitorOption!=="all"))return;this.log("Refreshing visitor"),this.hidePage();const e=await this.getVisitor(t);e&&e.id&&this.updateLocalVisitor(e)}buildBaseVisitor(){return{shopifyAnalyticsId:this.shopifyAnalyticsId,device:this.device,country:null,...this.state.essential.initialState}}getInitialState(){const t=this.getUTMValue("utm_source")??"",e=this.getUTMValue("utm_medium")??"",i=this.getUTMValue("utm_campaign")??"",s=this.getUTMValue("utm_content")??"",r=window.document.referrer,n=this.device;return{createdAt:new Date,utmSource:t,utmMedium:e,utmCampaign:i,utmContent:s,referrer:r,device:n}}checkForThemePreview(){return this.log("Checking for theme preview"),window.location.hostname.endsWith(".shopifypreview.com")?(this.log("on shopify preview domain"),this.clearThemeBar(!0,!1,this.state),document.querySelector("#sl-preview-bar-hide")?.remove(),!1):this.isThemePreview()?this.state.essential.visitorTests.some(t=>t.isThemeTest&&t.hypothesisId!=null&&this.getHypothesis(t.hypothesisId)&&t.themeId===themeId)?(this.log("On active theme test, remov
7ing theme bar"),this.clearThemeBar(!1,!0,this.state),!1):this.state.essential.visitorTests.some(t=>t.isThemeTest&&t.hypothesisId!=null&&!this.getHypothesis(t.hypothesisId)&&t.themeId===themeId)?(this.log("Visitor is on an inactive theme test, redirecting to main theme"),this.redirectToMainTheme(),!0):this.state.essential.isFirstLoad?(this.log("No visitor found on theme preview, redirecting to main theme"),this.redirectToMainTheme(),!0):this.inactiveTestConfigs.some(t=>t.hypotheses.some(e=>e.themeId===themeId))?(this.log("Current theme is an inactive theme test, redirecting to main theme"),this.redirectToMainTheme(),!0):this.testConfigs.some(t=>t.hypotheses.some(e=>e.themeId===themeId))?(this.log("Falling back to clearing theme bar"),this.clearThemeBar(!1,!0,this.state),!1):(this.log("No tests on current theme, skipping script"),this.clearThemeBar(!0,!1,this.state),document.querySelector("#sl-preview-bar-hide")?.remove(),!0):(this.log("Not on theme preview"),this.clearThemeBar(!0,!1,this.state),!1)}redirectToMainTheme(){this.hidePage();const t=new URL(window.location.toString());t.searchParams.set("preview_theme_id",""),this.queueRedirect(t)}testsForUrl(t){const e=new URL(window.location.href),i=this.typeFromTemplate();return t.filter(s=>s.hypotheses.some(r=>r.type!=="dom"&&r.type!=="price"&&(r.isControl&&r.type===i&&r.affix===template.suffix||r.type==="theme"||r.isControl&&r.type==="urlRedirect"&&r.redirectPath&&e.pathname.endsWith(r.redirectPath)||r.type==="basicScript"))&&(s.ignoreTestViewParameterEnforcement||!e.searchParams.has("view")||s.hypotheses.map(r=>r.affix).includes(e.searchParams.get("view")??"")))}domTestsForUrl(t){const e=new URL(window.location.href);return t.filter(i=>i.hypotheses.some(s=>s.type!=="dom"&&s.type!=="price"?!1:s.type==="price"&&s.priceData&&s.priceData.variants.length>0?!0:s.domSelectors&&s.domSelectors.some(r=>new RegExp(it(r)).test(e.toString()))))}async filterTestsByAudience(t,e,i){const s=[];let r=e.country;!r&&t.some(n=>n.requiresCountry&&!i.some(o=>o.testId===n.id))&&(this.log("Hiding page to check geoip"),this.hidePage(),r=await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/get-country`,signal:AbortSignal.timeout(this.getCountryTimeout)}).catch(n=>(this.log("Error getting country",n),null)));for(const n of t){if(this.log("Checking audience for test '%s'",n.id),this.state.essential.visitorTests.some(c=>c.testId===n.id&&c.hypothesisId==null)){console.log(`Skipping blocked test '${n.id}'`);continue}const o=this.visitorCreatedDuringTestActive(n.statusHistory);(i.some(c=>c.testId===n.id&&(n.device==="all"||n.device===e.device&&n.device===this.device))||this.isTargetAudience(n,e,o,r))&&(this.log("Visitor is in audience for test '%s'",n.id),s.push(n))}this.testsFilteredByAudience=s}isTargetAudience(t,e,i,s){const r=this.getChannel(e);return(t.device==="all"||t.device===e.device&&t.device===this.device)&&(t.visitorOption==="all"||t.visitorOption==="new"&&i||t.visitorOption==="returning"&&!i)&&(t.targetAudiences.length===0||t.targetAudiences.reduce((n,o)=>n||o.reduce((l,c)=>l&&c(e,i,r,s),!0),!1))}visitorCreatedDuringTestActive(t){let e="";for(const i of t){if(this.state.analytics.visitor!==null&&this.state.analytics.visitor.createdAt<i.createdAt||this.state.essential.initialState.createdAt<i.createdAt)break;e=i.status}return e==="active"}getDomTestsForCurrentUrl(){return this.domTestsForUrl(this.testsFilteredByAudience)}getCurrentVisitorHypothesis(t){return t.flatMap(e=>e.hypotheses).find(e=>e.type!=="dom"&&e.type!=="price"&&this.state.essential.visitorTests.some(i=>i.hypothesisId===e.id))}getVisitorDomHypothesis(t){return t.flatMap(e=>e.hypotheses).filter(e=>(e.type==="dom"||e.type==="price")&&this.state.essential.visitorTests.some(i=>i.hypothesisId===e.id))}getHypothesis(t){return this.testConfigs.filter(e=>e.hypotheses.some(i=>i.id===t)).map(e=>e.hypotheses.find(i=>i.id===t))[0]}getActiveAssignment(){if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const e=this.state.temporary.previewConfig;return e.currentVariant&&e.testId?{testId:e.testId,hypothesisId:e.currentVariant}:null}const t=this.state.essential.visitorTests.find(e=>e.hypothesisId);return t?.hypothesisId?{testId:t.testId,hypothesisId:t.hypothesisId}:null}findActiveSubscriptionTestControl(){for(const t of this.testConfigs){const e=t.hypotheses.find(i=>i.isControl);if(e?.subscriptionData)return{testId:t.id,hypothesis:e}}return null}getDomSelectorsForHypothesis(t){if(!t)return[];if(t.domSelectors&&t.domSelectors.length>0)return t.domSelectors;if(t.priceData){const e=`${this.priceSelectorsSessionKey}_${t.id}`;try{const s=sessionStorage.getItem(e);if(s){const r=JSON.parse(s);return t.domSelectors=r,this.log("Loaded %d price selectors from cache for hypothesis '%s'",r.length,t.id),r}}catch{}const i=Ot(t.priceData);t.domSelectors=i;try{sessionStorage.setItem(e,JSON.stringify(i)),this.log("Generated and cached %d price selectors for hypothesis '%s'",i.length,t.id)}catch{this.log("Generated %d price selectors for hypothesis '%s' (cache unavailable)",i.length,t.id)}return i}return[]}hasThemeTest(t){return t.some(e=>e.hypotheses.some(i=>i.type==="theme"))}hasTestThatIsNotThemeTest(t){return t.some(e=>e.hypotheses.some(i=>i.type!=="theme"&&i.type!=="dom"&&i.type!=="price"))}hasThemeAndOtherTestTypes(t){return this.hasThemeTest(t)&&this.hasTestThatIsNotThemeTest(t)}testIsPaused(t){return t.status==="paused"||t.status==="incompatible"||t.status==="suspended"}visitorActiveTestType(){const t=this.state.essential.visitorTests.filter(e=>this.testConfigs.some(i=>i.hypotheses.some(s=>s.id==e.hypothesisId)));return t.length===0?null:t.some(e=>e.isThemeTest)?"theme":"templateOrUrlRedirect"}getReservationType(t){return t==="price"||this.isTemplateTestType(t)?"deferred":"immediate"}isTemplateTestType(t){return["product","collection","landing","index","cart","search","blog","article","collectionList"].includes(t)}getEntryCriteriaKey(t){const e=t.hypotheses.find(i=>i.isControl);if(!e)return`unknown:${t.id}`;switch(e.type){case"theme":return"global:theme";case"basicScript":return"global:autoApi";case"price":return"global:price";case"manualScript":return`conditional:manualApi:${t.id}`;case"urlRedirect":return`conditional:url:${e.redirectPath||"unknown"}`;default:return`conditional:template:${e.type}`}}isGlobalEntryCriteria(t){return t.startsWith("global:")}groupTestsByEntryCriteria(t){const e=new Map;for(const i of t){const s=this.getEntryCriteriaKey(i),r=e.get(s)||[];r.push(i),e.set(s,r)}return e}doesCurrentPageMatchEntryCriteria(t){if(this.isGlobalEntryCriteria(t))return!0;
7if(t==="conditional:manualApi")return!1;if(t.startsWith("conditional:url:")){const e=t.replace("conditional:url:","");return window.location.pathname.endsWith(e)}if(t.startsWith("conditional:template:")){const e=t.replace("conditional:template:","");return this.typeFromTemplate()===e}return!1}hasActiveReservation(){const t=this.getActiveReservations();return Object.values(t).some(e=>!e.isRealized)}getActiveReservation(){const t=this.getActiveReservations();return Object.values(t).find(e=>!e.isRealized)??null}clearStaleReservations(){const t=this.state.temporary.testReservations;if(!t)return;let e=!1;for(const[i,s]of Object.entries(t)){const r=this.testConfigs.find(o=>o.id===s.testId);if(!r){this.log("Test '%s' no longer in config, clearing reservation for criteria '%s'",s.testId,i),delete t[i],e=!0;continue}if(r.status!=="active"){this.log("Test '%s' status is '%s', clearing reservation for criteria '%s'",s.testId,r.status,i),delete t[i],e=!0;continue}this.testsFilteredByAudience.some(o=>o.id===s.testId)||(this.log("Visitor no longer passes audience for test '%s', clearing reservation for criteria '%s'",s.testId,i),delete t[i],e=!0)}e&&this.persistTemporaryState()}createReservations(t){if(this.state.temporary.testReservations||(this.state.temporary.testReservations={}),this.state.temporary.rolledEntryCriteria||(this.state.temporary.rolledEntryCriteria=[]),this.state.temporary.testCategory==="global"){this.createSingleReservation(t,"global");return}const i=t.filter(o=>this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(o))),s=t.filter(o=>!this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(o)));this.log("Conditional tests split - matching current page: %d, not matching: %d",i.length,s.length),i.length>0&&this.log("Tests matching current page (same pool): %o",i.map(o=>({id:o.id,title:o.title,criteria:this.getEntryCriteriaKey(o)})));const r=`conditional:current-page:${this.typeFromTemplate()}`;if(i.length>0&&!this.state.temporary.rolledEntryCriteria.includes(r)){this.createSingleReservation(i,r);for(const o of i){const l=this.getEntryCriteriaKey(o);this.state.temporary.rolledEntryCriteria.includes(l)||this.state.temporary.rolledEntryCriteria.push(l)}}const n=this.groupTestsByEntryCriteria(s);for(const[o,l]of n){if(this.state.temporary.rolledEntryCriteria.includes(o)){this.log("Already rolled for criteria '%s', skipping",o);continue}if(l.some(S=>this.state.essential.visitorTests.some(P=>P.testId===S.id))){this.log("Visitor already has VT for criteria '%s', skipping",o),this.state.temporary.rolledEntryCriteria.push(o);continue}const d=[...l].sort((S,P)=>S.id.localeCompare(P.id));this.log("Test dice roll for criteria '%s' - available tests: %o",o,d.map(S=>({id:S.id,title:S.title})));const p=Math.floor(Math.random()*d.length),h=d[p];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",p+1,l.length,h.id,h.title);const u=this.pickHypothesis(h);if(!u){this.log("No hypothesis picked for test '%s'",h.id);continue}this.sendDiagnosticTelemetry("assignment",h.id,{hypothesisId:u.id,isControl:u.isControl,testType:u.type});const b=this.getReservationType(u.type),k={testId:h.id,hypothesisId:u.id,testType:u.type,reservationType:b,isThemeTest:u.type==="theme",themeId:u.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:o};this.state.temporary.testReservations[o]=k,this.state.temporary.rolledEntryCriteria.push(o),this.log("Created %s reservation for test '%s' (criteria: %s)",b,h.id,o);for(const S of l)S.id!==h.id&&this.markTestAsBlocked(S,o)}this.persistTemporaryState()}createSingleReservation(t,e){if(this.state.temporary.rolledEntryCriteria.includes(e)){this.log("Already rolled for pool '%s', skipping",e);return}if(t.some(p=>this.state.essential.visitorTests.some(h=>h.testId===p.id&&!h.isInvalid))){this.log("Visitor already has VT for pool '%s', skipping",e),this.state.temporary.rolledEntryCriteria.push(e);return}if(t.length===0){this.log("No tests in pool '%s'",e);return}const s=[...t].sort((p,h)=>p.id.localeCompare(h.id));this.log("Test dice roll for pool '%s' - available tests: %o",e,s.map(p=>({id:p.id,title:p.title,criteria:this.getEntryCriteriaKey(p)})));const r=Math.floor(Math.random()*s.length),n=s[r];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",r,t.length,n.id,n.title);const o=this.pickHypothesis(n);if(!o){this.log("No hypothesis picked for test '%s'",n.id);return}this.sendDiagnosticTelemetry("assignment",n.id,{hypothesisId:o.id,isControl:o.isControl,testType:o.type});const l=this.getReservationType(o.type),c=this.getEntryCriteriaKey(n),d={testId:n.id,hypothesisId:o.id,testType:o.type,reservationType:l,isThemeTest:o.type==="theme",themeId:o.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:c};this.state.temporary.testReservations[c]=d,this.state.temporary.rolledEntryCriteria.push(e),this.log("Created %s reservation for test '%s' from pool '%s' (criteria: %s)",l,n.id,e,c);for(const p of t)p.id!==n.id&&this.markTestAsBlocked(p,`pool:${e}`);this.persistTemporaryState()}markTestAsBlocked(t,e){this.state.essential.visitorTests.some(i=>i.testId===t.id)||(this.log("Blocking visitor from test '%s' (reason: %s)",t.id,e),this.state.essential.visitorTests.push({createdAt:new Date,testId:t.id,hypothesisId:null,isThemeTest:t.hypotheses.some(i=>
7i.type==="theme"),shouldSendToGa:!1,isSaved:!0,isInvalid:!0,themeId:void 0}))}realizeReservationForCriteria(t){const e=this.state.temporary.testReservations?.[t];if(!e)return this.log("No reservation found for criteria '%s'",t),!1;if(e.isRealized)return this.log("Reservation already realized for criteria '%s'",t),!1;if(this.state.essential.visitorTests.some(s=>s.testId===e.testId&&!s.isInvalid))return this.log("Visitor already assigned to test '%s'",e.testId),!1;const i=this.getHypothesis(e.hypothesisId);return i?(e.isRealized=!0,this.persistTemporaryState(),this.queueAddVisitorToTest(e.testId,i),this.saveState(),this.log("Realized reservation for test '%s' (criteria: %s)",e.testId,t),!0):(this.log("Hypothesis '%s' not found",e.hypothesisId),!1)}getActiveReservations(){return this.state.temporary.testReservations??{}}getReservationForCurrentPage(){const t=this.getActiveReservations();for(const[e,i]of Object.entries(t)){if(i.isRealized)continue;const s=this.testConfigs.find(r=>r.id===i.testId);if(!(!s||s.status!=="active")&&this.doesCurrentPageMatchEntryCriteria(e))return i}return null}getReservationForTest(t){const e=this.getActiveReservations();return Object.values(e).find(i=>i.testId===t)??null}getReservationTestType(){const t=this.getActiveReservations(),e=Object.values(t);if(e.length===0)return null;for(const i of e)if(i.isThemeTest)return"theme";for(const i of e)if(i.testType==="price")return"price";return e.some(i=>!i.isRealized)?"templateOrUrlRedirect":null}hasPriceTests(t){return t.some(e=>e.hypotheses.some(i=>i.type==="price"))}_priceTestProductIds=null;getPriceTestProductIds(){if(this._priceTestProductIds)return this._priceTestProductIds;const t=new Set;for(const e of this.testConfigs)for(const i of e.hypotheses)if(i.type==="price"){for(const s of i.domSelectors||[]){const r=s.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);r?.[1]&&t.add(r[1])}if(i.priceData?.variants)for(const[s]of i.priceData.variants)t.add(s)}return this._priceTestProductIds=t,this.log("Built price test product ID cache with %d products",t.size),t}isProductInAnyPriceTest(t){return this.getPriceTestProductIds().has(t)}visitorActiveTestTypeWithReservations(){const t=this.getActiveReservations();for(const r of Object.values(t)){if(r.isThemeTest)return"theme";if(r.testType==="price")return"price"}if(Object.values(t).some(r=>!r.isRealized)){if(this.state.temporary.testCategory==="global")for(const n of Object.values(t)){if(n.testType==="theme")return"theme";if(n.testType==="price")return"price";if(n.testType==="basicScript")return"theme"}return"templateOrUrlRedirect"}const i=this.state.essential.visitorTests.filter(r=>!r.isInvalid&&this.testConfigs.some(n=>n.hypotheses.some(o=>o.id===r.hypothesisId)));return i.length===0?null:i.some(r=>this.getHypothesis(r.hypothesisId)?.type==="price")?"price":i.some(r=>r.isThemeTest)?"theme":"templateOrUrlRedirect"}applyControlForAudienceFilteredPriceTests(){const t=this.testConfigs.filter(s=>s.status==="active"&&s.hypotheses.some(r=>r.type==="price"));if(t.length===0)return;const e=this.testsFilteredByAudience.filter(s=>s.hypotheses.some(r=>r.type==="price")),i=t.filter(s=>!e.some(r=>r.id===s.id));if(i.length!==0){this.log("Found %d price tests filtered by audience, applying control selectors",i.length);for(const s of i){const r=s.hypotheses.find(c=>c.isControl),n=this.getDomSelectorsForHypothesis(r);if(n.length===0){this.log("No control selectors for audience-filtered price test '%s'",s.id);continue}const o=new URL(window.location.href);n.some(c=>{try{return new RegExp(it(c)).test(o.toString())}catch{return!1}})&&(this.log("Applying control selectors for audience-filtered price test '%s'",s.id),U(document,{testId:s.id,hypothesisId:r.id,selectors:n},()=>{}),this.updatePriceTestHiddenInputs(s.id,"control",!1))}}}pickHypothesis(t){let e=Math.random();const i=t.hypotheses.reduce((r,n)=>r+n.visitorCount,0);return t.hypotheses.sort((r,n)=>r.isControl?n.isControl?0:-1:n.isControl?1:0).reduce((r,n)=>{if(r!==null)return r;const l=t.hypotheses.reduce((c,d)=>c&&d.visitorCount>20,!0)?n.visitorCount/i-n.trafficPercentage:0;return e<=n.trafficPercentage-l?n:(e-=n.trafficPercentage-l,null)},null)}typeFromTemplate(){switch(template.type){case"list-collections":return"collectionList";case"page":return"landing";case"article":case"blog":case"cart":case"collection":case"index":case"product":case"search":return template.type;default:return null}}queueRedirect(t){this.saveState(),this.disableReferrerOverride||(this.log(`Saving temporary referrer override '${document.referrer}'`),this.state.temporary.originalReferrer=document.referrer,this.persistTemporaryState()),window.setTimeout(()=>window.location.assign(t),0),window.setTimeout(()=>{this.syncAllEvents()},2e3)}scheduleRetrySync(){this.clientIdRetryCount>=5||(this.clientIdRetryCount++,window.setTimeout(()=>{this.syncAllEvents()},500))}async syncAllEvents(){const t=async()=>
7{if(this.isSyncing){window.setTimeout(()=>{(async()=>await t())()},500);return}try{if(this.isSyncing=!0,this.syncGAEvents(),this.shopifyAnalyticsId||(this.shopifyAnalyticsId=this.getShopifyAnalyticsId()),!this.shopifyAnalyticsId){this.scheduleRetrySync();return}await this.syncEvents()}finally{this.isSyncing=!1}};await t()}async syncEvents(){if(!this.state.essential.consentApproved||!this.shopifyAnalyticsId||this.state.analytics.queue.length===0)return;const t=this.state.analytics.queue.length,e=this.state.analytics.queue.splice(0,t);this.log("Syncing %s events",t);try{const i={shop:this.shop,visitorDetails:{shopifyAnalyticsId:this.shopifyAnalyticsId,device:this.state.analytics.visitor?.device??this.device,country:this.state.analytics.visitor?.country??null,...this.state.essential.initialState},events:this.state.essential.visitorTests.filter(r=>!r.isInvalid&&!r.isSaved&&r.hypothesisId!=null).map(r=>new yt(r.testId,r.hypothesisId,r.createdAt)).concat(e)};await this.sendEvents(i);for(const r of this.state.essential.visitorTests.filter(n=>!n.isInvalid&&!n.isSaved&&n.hypothesisId!=null))this.sendDiagnosticTelemetry("event-delivered",r.testId,{hypothesisId:r.hypothesisId,isControl:r.assignedTo==="control",testType:r.testType??"unknown"});const s=await this.getVisitor(this.shopifyAnalyticsId);s!==null&&this.updateLocalVisitor(s);for(const r of this.state.essential.visitorTests.filter(n=>!n.isInvalid&&!n.isSaved))r.isSaved=!0,r.savedAt=Date.now()}catch{this.state.analytics.queue.splice(0,0,...e)}finally{this.saveState()}}syncGAEvents(){if(!this.gaConfig.sendEvents){if(pt)return;pt=!0,this.log("UseGtag is false â skipping GA Events");return}if(this.isSyncingGA){this.log("Already syncing GA - skipping GA events");return}const t=this.state.essential.visitorTests.filter(e=>e.shouldSendToGa);t.length!==0&&(this.isSyncingGA=!0,this.log("Syncing %s GA Events",t.length),Promise.allSettled(t.map(e=>this.sendGAEvent(e))).then(()=>this.log("All gtag events sent")).finally(()=>this.isSyncingGA=!1))}sendGAEvent(t){return new Promise(e=>{this.log("Sending GA Event for test %s, hypothesis %s",t.testId,t.hypothesisId);const i=()=>{this.log("GA acknowledged event for hypothesis %s",t.hypothesisId),t.shouldSendToGa=!1,this.persistEssentialState(),e()},s={exp_variant_string:`SL-${t.testId}-${t.hypothesisId}`};
7this.shopliftDebug&&Object.assign(s,{debug_mode:!0});function r(n,o,l){window.dataLayer=window.dataLayer||[],window.dataLayer.push(arguments)}this.gaConfig.mode==="gtag"?r("event","experience_impression",{...s,event_callback:i}):(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"experience_impression",...s,eventCallback:i}))})}updateLocalVisitor(t){let e;({visitorTests:e,...this.state.analytics.visitor}=t),this.log("updateLocalVisitor - server returned %d tests: %o",e.length,e.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isInvalid:s.isInvalid}))),this.log("updateLocalVisitor - local has %d tests: %o",this.state.essential.visitorTests.length,this.state.essential.visitorTests.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isSaved:s.isSaved,isInvalid:s.isInvalid})));const i=300*1e3;for(const s of this.state.essential.visitorTests.filter(r=>r.isSaved&&(!r.savedAt||Date.now()-r.savedAt>i)&&!e.some(n=>n.testId===r.testId)))this.log("updateLocalVisitor - marking LOCAL test as INVALID (isSaved && not in server): testId=%s, hypothesisId=%s",s.testId,s.hypothesisId),s.isInvalid=!0;for(const s of e){const r=this.state.essential.visitorTests.findIndex(o=>o.testId===s.testId);if(!(r!==-1))this.log("updateLocalVisitor - ADDING server test (not found locally): testId=%s, hypothesisId=%s",s.testId,s.hypothesisId),this.state.essential.visitorTests.push(s);else{const o=this.state.essential.visitorTests.at(r);this.log("updateLocalVisitor - REPLACING local test with server test: testId=%s, local hypothesisId=%s -> server hypothesisId=%s, local isInvalid=%s -> false",s.testId,o?.hypothesisId,s.hypothesisId,o?.isInvalid),s.isInvalid=!1,s.shouldSendToGa=o?.shouldSendToGa??!1,s.testType=o?.testType,s.assignedTo=o?.assignedTo,s.testTitle=o?.testTitle,this.state.essential.visitorTests.splice(r,1,s)}}this.log("updateLocalVisitor - FINAL local tests: %o",this.state.essential.visitorTests.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isSaved:s.isSaved,isInvalid:s.isInvalid}))),this.state.analytics.visitor.storedAt=new Date}async getVisitor(t){try{return await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/by-key/${this.shop}/${t}`})}catch{return null}}async sendEvents(t){await this.makeRequest({method:"post",url:`${this.eventHost}/api/v0/events`,data:JSON.stringify(t)})}sendDiagnosticTelemetry(t,e,i){if(!this.telemetryEnabled||!navigator.sendBeacon)return;const s=this.state.essential.consentApproved,r=JSON.stringify({shop:this.shop,testId:e,checkpoint:t,device:this.device,...s?{visitorId:this.shopifyAnalyticsId??"unknown"}:{},clientTimestamp:Date.now(),consentApproved:s,hasConsentInteraction:this.state.essential.hasConsentInteraction,...i});navigator.sendBeacon(`${this.eventHost}/api/v0/telemetry`,new Blob([r],{type:"text/plain"}))}getUTMValue(t){const i=decodeURIComponent(window.location.search.substring(1)).split("&");for(let s=0;s<i.length;s++){const r=i[s].split("=");if(r[0]===t)return r[1]||null}return null}hidePage(t){this.log("Hiding page"),this.cssHideClass&&!window.document.documentElement.classList.contains(this.cssHideClass)&&(window.document.documentElement.classList.add(this.cssHideClass),t||setTimeout(this.removeAsyncHide(this.cssHideClass),2e3))}showPage(){this.cssHideClass&&this.removeAsyncHide(this.cssHideClass)()}getDeviceType(){function t(){let i=!1;return(function(s){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|
7sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(s.substr(0,4)))&&(i=!0)})(navigator.userAgent||navigator.vendor),i}function e(){let i=!1;return(function(s){(/android|ipad|playbook|silk/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(s.substr(0,4)))&&(i=!0)})(navigator.userAgent||navigator.vendor),i}return t()?"mobile":e()?"tablet":"desktop"}removeAsyncHide(t){return()=>{t&&window.document.documentElement.classList.remove(t)}}async getCartState(){try{let t=await this.makeJsonRequest({method:"get",url:`${window.location.origin}/cart.js`});return t===null||(t.note===null&&(t=await this.makeJsonRequest({method:"post",url:`${window.location.origin}/cart/update.js`,data:JSON.stringify({note:""})})),t==null)?null:{token:t.token,total_price:t.total_price,total_discount:t.total_discount,currency:t.currency,items_subtotal_price:t.items_subtotal_price,items:t.items.map(e=>({quantity:e.quantity,variant_id:e.variant_id,key:e.key,price:e.price,final_line_price:e.final_line_price,sku:e.sku,product_id:e.product_id}))}}catch(t){return this.log("Error sending cart info",t),null}}ensureCartAttributesForExistingPriceTests(t){try{if(this.log("Checking visitor assignments for active price tests"),t&&this.state.temporary.previewConfig){const e=this.state.temporary.previewConfig;this.log("Using preview config for merchant:",e.testId);let i="variant";if(e.variants&&e.variants.length>0){const s=e.variants.find(r=>r.id===e.currentVariant);s&&s.isControl&&(i="control")}this.log("Merchant preview - updating hidden inputs:",e.testId,i),this.updatePriceTestHiddenInputs(e.testId,i,!0);return}for(const e of this.state.essential.visitorTests){const i=this.testConfigs.find(n=>n.id===e.testId);if(!i){this.log("Test config not found:",e.testId);continue}const s=i.hypotheses.find(n=>n.id===e.hypothesisId);if(!s||s.type!=="price")continue;const r=s.isControl?"control":"variant";this.log("Updating hidden inputs for price test:",e.testId,r),this.updatePriceTestHiddenInputs(e.testId,r,t)}}catch(e){this.log("Error ensuring cart attributes for existing price tests:",e)}}subscriptionSwapDone=!1;subscriptionHideWrongPlans=null;subscriptionPriceDone=!1;subscriptionUpdateOneTime=null;subscriptionOneTimeDone=!1;swapMap=null;slptValue=null;async subscriptionSwap(){await Lt(this)}async subscriptionPriceChange(){await qt(this)}async subscriptionOneTimePrice(){await Ht(this)}
7updatePriceTestHiddenInputs(t,e,i){try{this.cleanupPriceTestObservers();const s=`${t}:${e}:${i?"t":"f"}`,r=C=>{const m=C.getAttribute("data-sl-pid");if(!m)return!0;if(i&&this.state.temporary.previewConfig){const w=this.state.temporary.previewConfig,T=e==="control"?"a":"b",f=w.variants.find(v=>v.label===T);if(!f)return!1;for(const v of f.domSelectors||[]){const g=v.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);if(g){const I=g[1];if(this.log(`Extracted ID from selector: ${I}, comparing to: ${m}`),I===m)return this.log("Product ID match found in preview config:",m,"variant:",f.label),!0}else this.log(`Could not extract ID from selector: ${v.cssSelector}`)}return this.log("No product ID match in preview config for:",m,"variant:",T),!1}const y=this.testConfigs.find(w=>w.id===t);if(!y)return this.log("Test config not found for testId:",t),!1;for(const w of y.hypotheses||[]){for(const T of w.domSelectors||[]){const f=T.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);if(f&&f[1]===m)return this.log("Product ID match found in domSelectors:",m,"for test:",t),!0}if(w.priceData?.variants){for(const T of w.priceData.variants)if(T[0]===m)return this.log("Product ID match found in priceData:",m,"for test:",t),!0}}return this.log("No product ID match for:",m,"in test:",t),!1},n=new Set;let o=!1,l=null;const c=(C,m)=>{if(document.querySelectorAll("[data-sl-attribute-p]").forEach(w=>{if(w instanceof Element&&w.nodeType===Node.ELEMENT_NODE&&w.isConnected&&document.contains(w))try{C.observe(w,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0,attributes:!1})}catch(T){this.log(`Failed to observe element (${m}):`,T)}}),document.body&&document.body.isConnected)try{C.observe(document.body,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0,attributes:!1})}catch(w){this.log(`Failed to observe document.body (${m}):`,w)}},d=(C,m,y,w)=>{const T=C.filter(f=>{const v=f.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);return v&&v[1]===w});this.log(`Applying ${y} DOM selectors, total: ${C.length}, filtered: ${T.length}`),T.length>0&&U(document,{testId:t,hypothesisId:m,selectors:T})},p=(C,m)=>{this.log(`Applying DOM selector changes for product ID: ${C}`),m.disconnect(),o=!0;try{if(i&&this.state.temporary.previewConfig){const y=e==="control"?"a":"b",w=this.state.temporary.previewConfig.variants.find(T=>T.label===y);if(!w?.domSelectors){this.log(`No DOM selectors found for preview variant: ${y}`);return}d(w.domSelectors,w.id,"preview config",C)}else{const y=this.testConfigs.find(T=>T.id===t);if(!y){this.log(`No test config found for testId: ${t}`);return}const w=y.hypotheses.find(T=>e==="control"?T.isControl:!T.isControl);if(!w?.domSelectors){this.log(`No DOM selectors found for assignment: ${e}`);return}d(w.domSelectors,w.id,"live config",C)}}finally{l!==null&&clearTimeout(l),l=window.setTimeout(()=>{o=!1,l=null,c(m,"reconnection"),this.log("Re-established innerHTML observer after DOM changes")},50)}},h=new MutationObserver(C=>{if(!o)for(const m of C){if(m.type!=="childList"&&m.type!=="characterData")continue;let y=m.target;m.type==="characterData"&&(y=m.target.parentElement||m.target.parentNode);let w=y,T=w.getAttribute("data-sl-attribute-p");for(;!T&&w.parentElement;)w=w.parentElement,T=w.getAttribute("data-sl-attribute-p");if(!T)continue;const f=w.innerHTML||w.textContent||"";let v="";m.type==="characterData"&&m.oldValue!==null&&(v=m.oldValue),this.log(`innerHTML changed on element with data-sl-attribute-p="${T}"`),v&&this.log(`Previous content: "${v}"`),this.log(`Current content: "${f}"`),p(T,h)}});c(h,"initial setup"),n.add(h);const u=new MutationObserver(C=>{C.forEach(m=>{m.addedNodes.forEach(y=>{if(y.nodeType===Node.ELEMENT_NODE){const w=y;k(w);const T=w.matches('input[name="properties[_slpt]"]')?[w]:w.querySelectorAll('input[name="properties[_slpt]"]');T.length>0&&this.log(`MutationObserver found ${T.length} new hidden input(s)`),T.forEach(f=>{const v=f.getAttribute("data-sl-pid");if(this.log(`MutationObserver checking new input with data-sl-pid="${v}"`),r(f))f.value!==s&&(f.value=s,this.log("Updated newly added hidden input:",s)),S(f);else{const g=f.getAttribute("data-sl-pid");g&&this.isProductInAnyPriceTest(g)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",g):(f.remove(),this.log("Removed newly added non-matching hidden input for product ID:",g))}})}})})});n.add(u);const b=new MutationObserver(C=>
7{C.forEach(m=>{if(m.type==="attributes"&&m.attributeName==="data-sl-pid"){const y=m.target;if(this.log("AttributeObserver detected data-sl-pid attribute change on:",y.tagName),y.matches('input[name="properties[_slpt]"]')){const w=y,T=m.oldValue,f=w.getAttribute("data-sl-pid");this.log(`data-sl-pid changed from "${T}" to "${f}" - triggering payment placement updates`),r(w)?(w.value!==s&&(w.value=s,this.log("Updated hidden input after data-sl-pid change:",s)),f&&p(f,h),this.log("Re-running payment placement updates after variant change"),k(document.body)):f&&this.isProductInAnyPriceTest(f)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",f):(w.remove(),this.log("Removed non-matching hidden input after data-sl-pid change:",f))}}})});n.add(b);const k=C=>{C.tagName==="SHOPIFY-PAYMENT-TERMS"&&(this.log("MutationObserver found new shopify-payment-terms element"),this.updateShopifyPaymentTerms(t,e));const m=C.querySelectorAll("shopify-payment-terms");m.length>0&&(this.log(`MutationObserver found ${m.length} shopify-payment-terms in added node`),this.updateShopifyPaymentTerms(t,e)),C.tagName==="AFTERPAY-PLACEMENT"&&(this.log("MutationObserver found new afterpay-placement element"),this.updateAfterpayPlacements(t,e,"afterpay"));const y=C.querySelectorAll("afterpay-placement");y.length>0&&(this.log(`MutationObserver found ${y.length} afterpay-placement in added node`),this.updateAfterpayPlacements(t,e,"afterpay")),C.tagName==="SQUARE-PLACEMENT"&&(this.log("MutationObserver found new square-placement element"),this.updateAfterpayPlacements(t,e,"square"));const w=C.querySelectorAll("square-placement");w.length>0&&(this.log(`MutationObserver found ${w.length} square-placement in added node`),this.updateAfterpayPlacements(t,e,"square")),C.tagName==="KLARNA-PLACEMENT"&&(this.log("MutationObserver found new klarna-placement element"),this.updateKlarnaPlacements(t,e));const T=C.querySelectorAll("klarna-placement");T.length>0&&(this.log(`MutationObserver found ${T.length} klarna-placement in added node`),this.updateKlarnaPlacements(t,e))},S=C=>{b.observe(C,{attributes:!0,attributeFilter:["data-sl-pid"],attributeOldValue:!0,subtree:!1});const m=C.getAttribute("data-sl-pid");this.log(`Started AttributeObserver on specific input with data-sl-pid="${m}"`)},P=()=>{const C=document.querySelectorAll('input[name="properties[_slpt]"]');this.log(`Found ${C.length} existing hidden inputs to check`),C.forEach(m=>{const y=m.getAttribute("data-sl-pid");this.log(`Checking existing input with data-sl-pid="${y}"`),r(m)?(m.value=s,this.log("Updated existing hidden input:",s),y&&(this.log("Applying initial DOM selector changes for existing product"),p(y,h)),S(m)):y&&this.isProductInAnyPriceTest(y)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",y):(m.remove(),this.log("Removed non-matching hidden input for product ID:",y))})},_=()=>{document.body?(u.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver on document.body"),P(),k(document.body)):document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{document.body&&(u.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver after DOMContentLoaded"),P(),k(document.body))}):(this.log("Set timeout on observer"),setTimeout(_,10))};_(),window.__shopliftPriceTestObservers=n,window.__shopliftPriceTestValue=s,this.log("Set up DOM observer for price test hidden inputs")}catch(s){this.log("Error updating price test hidden inputs:",s)}}updateKlarnaPlacements(t,e){this.updatePlacementElements(t,e,"klarna-placement",(i,s)=>{i.setAttribute("data-purchase-amount",s.toString())})}cleanupPriceTestObservers(){const t=window.__shopliftPriceTestObservers;t&&(t.forEach(e=>{e.disconnect()}),t.clear(),this.log("Cleaned up existing price test observers")),delete window.__shopliftPriceTestObservers,delete window.__shopliftPriceTestValue}updateAfterpayPlacements(t,e,i="afterpay"){const s=i==="square"?"square-placement":"afterpay-placement";if(document.querySelectorAll(s).length===0){this.log(`No ${s} elements found on page - early return`);return}this.updatePlacementElements(t,e,s,(n,o)=>
7{if(i==="afterpay"){const l=(o/100).toFixed(2);n.setAttribute("data-amount",l)}else n.setAttribute("data-amount",o.toString())}),this.log("updateAfterpayPlacements completed")}updatePlacementElements(t,e,i,s){const r=document.querySelectorAll(i);if(r.length===0){this.log(`No ${i} elements found - early return`);return}let n;if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const l=e==="control"?"a":"b",c=this.state.temporary.previewConfig.variants.find(d=>d.label===l);if(!c?.domSelectors){this.log(`No variant found for label ${l} in preview config for ${i}`);return}n=c.domSelectors,this.log(`Using preview config for ${i} in merchant mode, variant: ${l}`)}else{const l=this.testConfigs.find(d=>d.id===t);if(!l){this.log(`No testConfig found for id: ${t} - early return`);return}const c=l.hypotheses.find(d=>e==="control"?d.isControl:!d.isControl);if(!c?.domSelectors){this.log(`No hypothesis or domSelectors found for assignment: ${e} - early return`);return}n=c.domSelectors}const o=new RegExp(`${this.DATA_SL_ATTRIBUTE_P}=["'](\\d+)["']`);r.forEach(l=>{let c=null;const d=l.parentElement;if(d&&(c=d.querySelector('input[name="properties[_slpt]"]')),c||(c=l.querySelector('input[name="properties[_slpt]"]')),!c){this.log(`No hidden input found for ${i} element`);return}const p=c.getAttribute("data-sl-pid");if(!p){this.log("Hidden input has no data-sl-pid attribute - skipping");return}const h=n.find(S=>{const P=S.cssSelector.match(o);return P&&P[1]===p});if(!h){this.log(`No matching selector found for productId: ${p} - skipping element`);return}const u=h.actions.find(S=>S.scope==="price");if(!u?.value){this.log("No price action or value found - skipping element");return}const b=parseFloat(u.value.replace(/[^0-9.]/g,""));if(Number.isNaN(b)){this.log(`Invalid price "${u.value}" for product ${p} - skipping`);return}const k=Math.round(b*100);s(l,k)}),this.log(`updatePlacementElements completed for ${i}`)}updateShopifyPaymentTerms(t,e){const i=document.querySelectorAll("shopify-payment-terms");if(i.length===0)return;this.log("Store using shopify payments");let s;if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const n=e==="control"?"a":"b",o=this.state.temporary.previewConfig.variants.find(l=>l.label===n);if(!o||!o.domSelectors){this.log(`No variant found for label ${n} in preview config`);return}s=o.domSelectors,this.log(`Using preview config for shopify-payment-terms in merchant mode, variant: ${n}`)}else{const n=this.testConfigs.find(l=>l.id===t);if(!n)return;const o=n.hypotheses.find(l=>e==="control"?l.isControl===!0:l.isControl===!1);if(!o||!o.domSelectors)return;s=o.domSelectors}const r=new RegExp(`${this.DATA_SL_ATTRIBUTE_P}=["'](\\d+)["']`);i.forEach(n=>{const o=n.getAttribute("variant-id");if(!o)return;const l=s.find(c=>{const d=c.cssSelector.match(r);return d&&d[1]===o});if(l){const c=l.actions.find(d=>d.scope==="price");if(c&&c.value){const d=n.getAttribute("shopify-meta");if(d)try{const p=JSON.parse(d);if(p.variants&&Array.isArray(p.variants)){const h=p.variants.find(u=>u.id?.toString()===o);if(h){h.full_price=c.value;const u=parseFloat(c.value.replace(/[^0-9.]/g,""));if(h.number_of_payment_terms&&h.number_of_payment_terms>1){const b=u/h.number_of_payment_terms;h.price_per_term=`$${b.toFixed(2)}`}n.setAttribute("shopify-meta",JSON.stringify(p))}}}catch(p){this.log("Error parsing/updating shoplift-meta:",p)}}}})}async makeJsonRequest(t){const e=await this.makeRequest(t);return e===null?null:JSON.parse(await e.text(),F)}async makeRequest(t){const{url:e,method:i,headers:s,data:r,signal:n}=t,o=new Headers;if(s)for(const c in s)o.append(c,s[c]);(!s||!s.Accept)&&o.append("Accept","application/json"),(!s||!s["Content-Type"])&&o.append("Content-Type","application/json"),(this.eventHost.includes("ngrok.io")||this.eventHost.includes("ngrok-free.app"))&&o.append("ngrok-skip-browser-warning","1234");const l=await this.fetch(e,{method:i,headers:o,body:r,signal:n});if(!l.ok){if(l.status===204)return null;if(l.status===422){const c=await l.json();if(typeof c<"u"&&c.isBot)throw new et}throw new Error(`Error sending shoplift request ${l.status}`)}return l}queueAddVisitorToTest(t,e){if(this.state.essential.visitorTests.some(s=>s.testId===t))return;const i=this.testConfigs.find(s=>s.id===t);if(this.state.essential.visitorTests.push({createdAt:new Date,testId:t,hypothesisId:e.id,isThemeTest:e.type==="theme",themeId:e.themeId,isSaved:!1,isInvalid:!1,shouldSe
7ndToGa:!0,testType:e.type,assignedTo:e.isControl?"control":"variant",testTitle:i?.title}),e.type==="price"){const s=e.isControl?"control":"variant";this.log("Price test assignment detected, updating cart attributes:",t,s),this.updatePriceTestHiddenInputs(t,s,!1)}}queueCartUpdate(t){this.queueEvent(new wt(t))}queuePageView(t){this.queueEvent(new vt(t))}queueEvent(t){!this.state.essential.consentApproved&&this.state.essential.hasConsentInteraction||this.state.analytics.queue.length>10||this.state.analytics.queue.push(t)}legacyGetLocalStorageVisitor(){const t=this.localStorageGet(this.legacySessionKey);if(t)try{return JSON.parse(t,F)}catch{}return null}pruneStaleVisitorTests(){this.state.essential.visitorTests=this.state.essential.visitorTests.filter(t=>this.testConfigs.some(e=>e.id==t.testId)||this.inactiveTestConfigs.filter(e=>this.testIsPaused(e)).some(e=>e.id===t.testId))}pruneStateAndSave(){this.pruneStaleVisitorTests(),this.saveState()}saveState(){this.persistEssentialState(),this.persistAnalyticsState()}loadState(){const t=this.loadAnalyticsState(),e={analytics:t,essential:this.loadEssentialState(t),temporary:this.loadTemporaryState()},i=this.legacyGetLocalStorageVisitor(),s=this.legacyGetCookieVisitor(),r=[i,s].filter(n=>n!==null).sort((n,o)=>+o.storedAt-+n.storedAt)[0];return e.analytics.visitor===null&&r&&({visitorTests:e.essential.visitorTests,...e.analytics.visitor}=r,e.essential.isFirstLoad=!1,e.essential.initialState={createdAt:r.createdAt,referrer:r.referrer,utmCampaign:r.utmCampaign,utmContent:r.utmContent,utmMedium:r.utmMedium,utmSource:r.utmSource,device:r.device},this.deleteCookie("SHOPLIFT"),this.deleteLocalStorage(this.legacySessionKey)),!e.essential.consentApproved&&e.essential.hasConsentInteraction&&this.deleteLocalStorage(this.analyticsSessionKey),e}loadEssentialState(t){const e=this.loadLocalStorage(this.essentialSessionKey),i=this.loadCookie(this.essentialSessionKey),s=this.getInitialState();t.visitor?.device&&(s.device=t.visitor.device);const r={timestamp:new Date,consentApproved:!1,hasConsentInteraction:!1,debugMode:!1,initialState:s,visitorTests:[],isFirstLoad:!0},n=[e,i].filter(o=>o!==null).sort((o,l)=>+l.timestamp-+o.timestamp)[0]??r;return n.initialState||(t.visitor!==null?n.initialState=t.visitor:(n.initialState=s,n.initialState.createdAt=n.timestamp)),n}loadAnalyticsState(){const t=this.loadLocalStorage(this.analyticsSessionKey),e=this.loadCookie(this.analyticsSessionKey),i={timestamp:new Date,visitor:null,queue:[]},s=[t,e].filter(r=>r!==null).sort((r,n)=>+n.timestamp-+r.timestamp)[0]??i;return s.queue.length===0&&t&&t.queue.length>1&&(s.queue=t.queue),s}loadTemporaryState(){const t=this.sessionStorageGet(this.temporarySessionKey),e=t?JSON.parse(t,F):null,i=this.loadCookie(this.temporarySessionKey);return e??i??{isMerchant:!1,timestamp:new Date}}persistEssentialState(){this.log("Persisting essential state"),this.state.essential.isFirstLoad=!1,this.state.essential.timestamp=new Date,this.persistLocalStorageState(this.essentialSessionKey,this.state.essential),this.persistCookieState(this.essentialSessionKey,this.state.essential)}persistAnalyticsState(){this.log("Persisting analytics state"),this.state.essential.consentApproved&&(this.state.analytics.timestamp=new Date,this.persistLocalStorageState(this.analyticsSessionKey,this.state.analytics),this.persistCookieState(this.analyticsSessionKey,{...this.state.analytics,queue:[]}))}persistTemporaryState(){this.log("Setting temporary session state"),this.state.temporary.timestamp=new Date,this.sessionStorageSet(this.temporarySessionKey,JSON.stringify(this.state.temporary)),this.persistCookieState(this.temporarySessionKey,this.state.temporary,!0)}loadLocalStorage(t){const e=this.localStorageGet(t);if(e===null)return null;try{return JSON.parse(e,F)}catch{return null}}loadCookie(t){const e=this.getCookie(t);if(e===null)return null;try{return JSON.parse(e,F)}catch{return null}}persistLocalStorageState(t,e){this.localStorageSet(t,JSON.stringify(e))}persistCookieState(t,e,i=!1){const s=JSON.stringify(e),r=i?"":`expires=${new Date(new Date().getTime()+864e5*365).toUTCString()};`;document.cookie=`${t}=${s};domain=.${window.location.hostname};path=/;SameSite=Strict;${r}`}deleteCookie(t){const e=new Date(0).toUTCString();document.cookie=`${t}=;domain=.${window.location.hostname};path=/;expires=${e};`}deleteLocalStorage(t){window.localStorage.removeItem(t)}getChannel(t){return[{"name":"cross-network","test":(v) => new RegExp(".*cross-network.*", "i").test(v.utmCampaign)}
7,{"name":"direct","test":(v) => v.utmSource === "" && v.utmMedium === ""},{"name":"paid-shopping","test":(v) => (new RegExp("^(?:Google|IGShopping|aax-us-east\.amazon-adsystem\.com|aax\.amazon-adsystem\.com|alibaba|alibaba\.com|amazon|amazon\.co\.uk|amazon\.com|apps\.shopify\.com|checkout\.shopify\.com|checkout\.stripe\.com|cr\.shopping\.naver\.com|cr2\.shopping\.naver\.com|ebay|ebay\.co\.uk|ebay\.com|ebay\.com\.au|ebay\.de|etsy|etsy\.com|m\.alibaba\.com|m\.shopping\.naver\.com|mercadolibre|mercadolibre\.com|mercadolibre\.com\.ar|mercadolibre\.com\.mx|message\.alibaba\.com|msearch\.shopping\.naver\.com|nl\.shopping\.net|no\.shopping\.net|offer\.alibaba\.com|one\.walmart\.com|order\.shopping\.yahoo\.co\.jp|partners\.shopify\.com|s3\.amazonaws\.com|se\.shopping\.net|shop\.app|shopify|shopify\.com|shopping\.naver\.com|shopping\.yahoo\.co\.jp|shopping\.yahoo\.com|shopzilla|shopzilla\.com|simplycodes\.com|store\.shopping\.yahoo\.co\.jp|stripe|stripe\.com|uk\.shopping\.net|walmart|walmart\.com)$", "i").test(v.utmSource) || new RegExp("^(.*(([^a-df-z]|^)shop|shopping).*)$", "i").test(v.utmCampaign)) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-search","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|yandex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-social","test":(v) => new RegExp("^(?:43things|43things\.com|51\.com|5ch\.net|Hatena|ImageShack|academia\.edu|activerain|activerain\.com|activeworlds|activeworlds\.com|addthis|addthis\.com|airg\.ca|allnurses\.com|allrecipes\.com|alumniclass|alumniclass\.com|ameba\.jp|ameblo\.jp|americantowns|americantowns\.com|amp\.reddit\.com|ancestry\.com|anobii|anobii\.com|answerbag|answerbag\.com|answers\.yahoo\.com|aolanswers|aolanswers\.com|apps\.facebook\.com|ar\.pinterest\.com|artstation\.com|askubuntu|askubuntu\.com|asmallworld\.com|athlinks|athlinks\.com|away\.vk\.com|awe\.sm|b\.hatena\.ne\.jp|baby-gaga|baby-gaga\.com|babyblog\.ru|badoo|badoo\.com|bebo|bebo\.com|beforeitsnews|beforeitsnews\.com|bharatstudent|bharatstudent\.com|biip\.no|biswap\.org|bit\.ly|blackcareernetwork\.com|blackplanet|blackplanet\.com|blip\.fm|blog\.com|blog\.feedspot\.com|blog\.goo\.ne\.jp|blog\.naver\.com|blog\.yahoo\.co\.jp|blogg\.no|bloggang\.com|blogger|blogger\.com|blogher|blogher\.com|bloglines|bloglines\.com|blogs\.com|blogsome|blogsome\.com|blogspot|blogspot\.com|blogster|blogster\.com|blurtit|blurtit\.com|bookmarks\.yahoo\.co\.jp|bookmarks\.yahoo\.com|br\.pinterest\.com|brightkite|brightkite\.com|brizzly|brizzly\.com|business\.facebook\.com|buzzfeed|buzzfeed\.com|buzznet|buzznet\.com|cafe\.naver\.com|cafemom|cafemom\.com|camospace|camospace\.com|canalblog\.com|care\.com|care2|care2\.com|caringbridge\.org|catster|catster\.com|cbnt\.io|cellufun|cellufun\.com|centerblog\.net|chat\.zalo\.me|chegg\.com|chicagonow|chicagonow\.com|chiebukuro\.yahoo\.co\.jp|classmates|classmates\.com|classquest|classquest\.com|co\.pinterest\.com|cocolog-nifty|cocolog-nifty\.com|copainsdavant\.linternaute\.com|couchsurfing\.org|cozycot|cozycot\.com|cross\.tv|crunchyroll|crunchyroll\.com|cyworld|cyworld\.com|cz\.pinterest\.com|d\.hatena\.ne\.jp|dailystrength\.org|deluxe\.com|deviantart|deviantart\.com|dianping|dianping\.com|digg|digg\.com|diigo|diigo\.com|discover\.hubpages\.com|disqus|disqus\.com|dogster|dogster\.com|dol2day|dol2day\.com|doostang|doostang\.com|dopplr|dopplr\.com|douban|douban\.com|draft\.blogger\.com|draugiem\.lv|drugs-forum|drugs-forum\.com|dzone|dzone\.com|edublogs\.org|elftown|elftown\.com|epicurious\.com|everforo\.com|exblog\.jp|extole|extole\.com|facebook|facebook\.com|faceparty|faceparty\.com|fandom\.com|fanpop|fanpop\.com|fark|fark\.com|fb|fb\.me|fc2|fc2\.com|feedspot|feministing|feministing\.com|filmaffinity|filmaffinity\.com|flickr|flickr\.com|flipboard|flipboard\.com|folkdirect|folkdirect\.com|foodservice|foodservice\.com|forums\.androidcentral\.com|forums\.crackberry\.com|forums\.imore\.com|forums\.nexopia\.com|forums\.webosnation\.com|forums\.wpcentral\.com|fotki|fotki\.com|fotolog|fotolog\.com|foursquare|foursquare\.com|free\.facebook\.com|friendfeed|friendfeed\.com|fruehstueckstreff\.org|fubar|fubar\.com|gaiaonline|gaiaonline\.com|gamerdna|gamerdna\.com|gather\.com|geni\.com|getpocket\.com|glassboard|glassboard\.com|glassdoor|glassdoor\.com|godtube|godtube\.com|goldenline\.pl|goldstar|goldstar\.com|goo\.gl|gooblog|goodreads|goodreads\.com|google\+|googlegroups\.com|googleplus|govloop|govloop\.com|gowalla|gowalla\.com|gree\.jp|groups\.google\.com|gulli\.com|gutefrage\.net|habbo|habbo\.com|hi5|hi5\.com|hootsuite|hootsuite\.com|houzz|houzz\.com|hoverspot|hoverspot\.com|hr\.com|hu\.pinterest\.com|hubculture|hubculture\.com|hubpages\.com|hyves\.net|hyves\.nl|ibibo|ibibo\.com|id\.pinterest\.com|identi\.ca|ig|imageshack\.com|imageshack\.us|imvu|imvu\.com|in\.pinterest\.com|insanejournal|insanejournal\.com|instagram|instagram\.com|instapaper|instapaper\.com|internations\.org|interpals\.net|intherooms|intherooms\.com|irc-galleria\.net|is\.gd|italki|italki\.com|jammerdirect|jammerdirect\.com|jappy\.com|jappy\.de|kaboodle\.com|k
7akao|kakao\.com|kakaocorp\.com|kaneva|kaneva\.com|kin\.naver\.com|l\.facebook\.com|l\.instagram\.com|l\.messenger\.com|last\.fm|librarything|librarything\.com|lifestream\.aol\.com|line|line\.me|linkedin|linkedin\.com|listal|listal\.com|listography|listography\.com|livedoor\.com|livedoorblog|livejournal|livejournal\.com|lm\.facebook\.com|lnkd\.in|m\.blog\.naver\.com|m\.cafe\.naver\.com|m\.facebook\.com|m\.kin\.naver\.com|m\.vk\.com|m\.yelp\.com|mbga\.jp|medium\.com|meetin\.org|meetup|meetup\.com|meinvz\.net|meneame\.net|menuism\.com|messages\.google\.com|messages\.yahoo\.co\.jp|messenger|messenger\.com|mix\.com|mixi\.jp|mobile\.facebook\.com|mocospace|mocospace\.com|mouthshut|mouthshut\.com|movabletype|movabletype\.com|mubi|mubi\.com|my\.opera\.com|myanimelist\.net|myheritage|myheritage\.com|mylife|mylife\.com|mymodernmet|mymodernmet\.com|myspace|myspace\.com|netvibes|netvibes\.com|news\.ycombinator\.com|newsshowcase|nexopia|ngopost\.org|niconico|nicovideo\.jp|nightlifelink|nightlifelink\.com|ning|ning\.com|nl\.pinterest\.com|odnoklassniki\.ru|odnoklassniki\.ua|okwave\.jp|old\.reddit\.com|oneworldgroup\.org|onstartups|onstartups\.com|opendiary|opendiary\.com|oshiete\.goo\.ne\.jp|out\.reddit\.com|over-blog\.com|overblog\.com|paper\.li|partyflock\.nl|photobucket|photobucket\.com|pinboard|pinboard\.in|pingsta|pingsta\.com|pinterest|pinterest\.at|pinterest\.ca|pinterest\.ch|pinterest\.cl|pinterest\.co\.kr|pinterest\.co\.uk|pinterest\.com|pinterest\.com\.au|pinterest\.com\.mx|pinterest\.de|pinterest\.es|pinterest\.fr|pinterest\.it|pinterest\.jp|pinterest\.nz|pinterest\.ph|pinterest\.pt|pinterest\.ru|pinterest\.se|pixiv\.net|pl\.pinterest\.com|playahead\.se|plurk|plurk\.com|plus\.google\.com|plus\.url\.google\.com|pocket\.co|posterous|posterous\.com|pro\.homeadvisor\.com|pulse\.yahoo\.com|qapacity|qapacity\.com|quechup|quechup\.com|quora|quora\.com|qzone\.qq\.com|ravelry|ravelry\.com|reddit|reddit\.com|redux|redux\.com|renren|renren\.com|researchgate\.net|reunion|reunion\.com|reverbnation|reverbnation\.com|rtl\.de|ryze|ryze\.com|salespider|salespider\.com|scoop\.it|screenrant|screenrant\.com|scribd|scribd\.com|scvngr|scvngr\.com|secondlife|secondlife\.com|serverfault|serverfault\.com|shareit|sharethis|sharethis\.com|shvoong\.com|sites\.google\.com|skype|skyrock|skyrock\.com|slashdot\.org|slideshare\.net|smartnews\.com|snapchat|snapchat\.com|social|sociallife\.com\.br|socialvibe|socialvibe\.com|spaces\.live\.com|spoke|spoke\.com|spruz|spruz\.com|ssense\.com|stackapps|stackapps\.com|stackexchange|stackexchange\.com|stackoverflow|stackoverflow\.com|stardoll\.com|stickam|stickam\.com|studivz\.net|suomi24\.fi|superuser|superuser\.com|sweeva|sweeva\.com|t\.co|t\.me|tagged|tagged\.com|taggedmail|taggedmail\.com|talkbiznow|talkbiznow\.com|taringa\.net|techmeme|techmeme\.com|tencent|tencent\.com|tiktok|tiktok\.com|tinyurl|tinyurl\.com|toolbox|toolbox\.com|touch\.facebook\.com|tr\.pinterest\.com|travellerspoint|travellerspoint\.com|tripadvisor|tripadvisor\.com|trombi|trombi\.com|trustpilot|tudou|tudou\.com|tuenti|tuenti\.com|tumblr|tumblr\.com|tweetdeck|tweetdeck\.com|twitter|twitter\.com|twoo\.com|typepad|typepad\.com|unblog\.fr|urbanspoon\.com|ushareit\.com|ushi\.cn|vampirefreaks|vampirefreaks\.com|vampirerave|vampirerave\.com|vg\.no|video\.ibm\.com|vk\.com|vkontakte\.ru|wakoopa|wakoopa\.com|wattpad|wattpad\.com|web\.facebook\.com|web\.skype\.com|webshots|webshots\.com|wechat|wechat\.com|weebly|weebly\.com|weibo|weibo\.com|wer-weiss-was\.de|weread|weread\.com|whatsapp|whatsapp\.com|wiki\.answers\.com|wikihow\.com|wikitravel\.org|woot\.com|wordpress|wordpress\.com|wordpress\.org|xanga|xanga\.com|xing|xing\.com|yahoo-mbga\.jp|yammer|yammer\.com|yelp|yelp\.co\.uk|yelp\.com|youroom\.in|za\.pinterest\.com|zalo|zoo\.gr|zooppa|zooppa\.com)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-video","test":(v) => new RegExp("^(?:blog\.twitch\.tv|crackle|crackle\.com|curiositystream|curiositystream\.com|d\.tube|dailymotion|dailymotion\.com|dashboard\.twitch\.tv|disneyplus|disneyplus\.com|fast\.wistia\.net|help\.hulu\.com|help\.netflix\.com|hulu|hulu\.com|id\.twitch\.tv|iq\.com|iqiyi|iqiyi\.com|jobs\.netflix\.com|justin\.tv|m\.twitch\.tv|m\.youtube\.com|music\.youtube\.com|netflix|netflix\.com|player\.twitch\.tv|player\.vimeo\.com|ted|ted\.com|twitch|twitch\.tv|utreon|utreon\.com|veoh|veoh\.com|viadeo\.journaldunet\.com|vimeo|vimeo\.com|wistia|wistia\.com|youku|youku\.com|youtube|youtube\.com)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"display","test":(v) =>
7 new RegExp("^(?:display|banner|expandable|interstitial|cpm)$", "i").test(v.utmMedium)},{"name":"paid-other","test":(v) => new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"organic-shopping","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|yandex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) || new RegExp("^(.*(([^a-df-z]|^)shop|shopping).*)$", "i").test(v.utmCampaign)},{"name":"organic-social","test":(v) => new RegExp("^(?:43things|43things\.com|51\.com|5ch\.net|Hatena|ImageShack|academia\.edu|activerain|activerain\.com|activeworlds|activeworlds\.com|addthis|addthis\.com|airg\.ca|allnurses\.com|allrecipes\.com|alumniclass|alumniclass\.com|ameba\.jp|ameblo\.jp|americantowns|americantowns\.com|amp\.reddit\.com|ancestry\.com|anobii|anobii\.com|answerbag|answerbag\.com|answers\.yahoo\.com|aolanswers|aolanswers\.com|apps\.facebook\.com|ar\.pinterest\.com|artstation\.com|askubuntu|askubuntu\.com|asmallworld\.com|athlinks|athlinks\.com|away\.vk\.com|awe\.sm|b\.hatena\.ne\.jp|baby-gaga|baby-gaga\.com|babyblog\.ru|badoo|badoo\.com|bebo|bebo\.com|beforeitsnews|beforeitsnews\.com|bharatstudent|bharatstudent\.com|biip\.no|biswap\.org|bit\.ly|blackcareernetwork\.com|blackplanet|blackplanet\.com|blip\.fm|blog\.com|blog\.feedspot\.com|blog\.goo\.ne\.jp|blog\.naver\.com|blog\.yahoo\.co\.jp|blogg\.no|bloggang\.com|blogger|blogger\.com|blogher|blogher\.com|bloglines|bloglines\.com|blogs\.com|blogsome|blogsome\.com|blogspot|blogspot\.com|blogster|blogster\.com|blurtit|blurtit\.com|bookmarks\.yahoo\.co\.jp|bookmarks\.yahoo\.com|br\.pinterest\.com|brightkite|brightkite\.com|brizzly|brizzly\.com|business\.facebook\.com|buzzfeed|buzzfeed\.com|buzznet|buzznet\.com|cafe\.naver\.com|cafemom|cafemom\.com|camospace|camospace\.com|canalblog\.com|care\.com|care2|care2\.com|caringbridge\.org|catster|catster\.com|cbnt\.io|cellufun|cellufun\.com|centerblog\.net|chat\.zalo\.me|chegg\.com|chicagonow|chicagonow\.com|chiebukuro\.yahoo\.co\.jp|classmates|classmates\.com|classquest|classquest\.com|co\.pinterest\.com|cocolog-nifty|cocolog-nifty\.com|copainsdavant\.linternaute\.com|couchsurfing\.org|cozycot|cozycot\.com|cross\.tv|crunchyroll|crunchyroll\.com|cyworld|cyworld\.com|cz\.pinterest\.com|d\.hatena\.ne\.jp|dailystrength\.org|deluxe\.com|deviantart|deviantart\.com|dianping|dianping\.com|digg|digg\.com|diigo|diigo\.com|discover\.hubpages\.com|disqus|disqus\.com|dogster|dogster\.com|dol2day|dol2day\.com|doostang|doostang\.com|dopplr|dopplr\.com|douban|douban\.com|draft\.blogger\.com|draugiem\.lv|drugs-forum|drugs-forum\.com|dzone|dzone\.com|edublogs\.org|elftown|elftown\.com|epicurious\.com|everforo\.com|exblog\.jp|extole|extole\.com|facebook|facebook\.com|faceparty|faceparty\.com|fandom\.com|fanpop|fanpop\.com|fark|fark\.com|fb|fb\.me|fc2|fc2\.com|feedspot|feministing|feministing\.com|filmaffinity|filmaffinity\.com|flickr|flickr\.com|flipboard|flipboard\.com|folkdirect|folkdirect\.com|foodservice|foodservice\.com|forums\.androidcentral\.com|forums\.crackberry\.com|forums\.imore\.com|forums\.nexopia\.com|forums\.webosnation\.com|forums\.wpcentral\.com|fotki|fotki\.com|fotolog|fotolog\.com|foursquare|foursquare\.com|free\.facebook\.com|friendfeed|friendfeed\.com|fruehstueckstreff\.org|fubar|fubar\.com|gaiaonline|gaiaonline\.com|gamerdna|gamerdna\.com|gather\.com|geni\.com|getpocket\.com|glassboard|glassboard\.com|glassdoor|glassdoor\.com|godtube|godtube\.com|goldenline\.pl|goldstar|goldstar\.com|goo\.gl|gooblog|goodreads|goodreads\.com|google\+|googlegroups\.com|googleplus|govloop|govloop\.com|gowalla|gowalla\.com|gree\.jp|groups\.google\.com|gulli\.com|gutefrage\.net|habbo|habbo\.com|hi5|hi5\.com|hootsuite|hootsuite\.com|houzz|houzz\.com|hoverspot|hoverspot\.com|hr\.com|hu\.pinterest\.com|hubculture|hubculture\.com|hubpages\.com|hyves\.net|hyves\.nl|ibibo|ibibo\.com|id\.pinterest\.com|identi\.ca|ig|imageshack\.com|imageshack\.us|imvu|imvu\.com|in\.pinterest\.com|insanejournal|insanejournal\.com|instagram|instagram\.com|instapaper|instapaper\.com|internations\.org|interpals\.net|intherooms|intherooms\.com|irc-galleria\.net|is\.gd|italki|italki\.com|jammerdirect|jammerdirect\.com|jappy\.com|jappy\.de|kaboodle\.com|k
7akao|kakao\.com|kakaocorp\.com|kaneva|kaneva\.com|kin\.naver\.com|l\.facebook\.com|l\.instagram\.com|l\.messenger\.com|last\.fm|librarything|librarything\.com|lifestream\.aol\.com|line|line\.me|linkedin|linkedin\.com|listal|listal\.com|listography|listography\.com|livedoor\.com|livedoorblog|livejournal|livejournal\.com|lm\.facebook\.com|lnkd\.in|m\.blog\.naver\.com|m\.cafe\.naver\.com|m\.facebook\.com|m\.kin\.naver\.com|m\.vk\.com|m\.yelp\.com|mbga\.jp|medium\.com|meetin\.org|meetup|meetup\.com|meinvz\.net|meneame\.net|menuism\.com|messages\.google\.com|messages\.yahoo\.co\.jp|messenger|messenger\.com|mix\.com|mixi\.jp|mobile\.facebook\.com|mocospace|mocospace\.com|mouthshut|mouthshut\.com|movabletype|movabletype\.com|mubi|mubi\.com|my\.opera\.com|myanimelist\.net|myheritage|myheritage\.com|mylife|mylife\.com|mymodernmet|mymodernmet\.com|myspace|myspace\.com|netvibes|netvibes\.com|news\.ycombinator\.com|newsshowcase|nexopia|ngopost\.org|niconico|nicovideo\.jp|nightlifelink|nightlifelink\.com|ning|ning\.com|nl\.pinterest\.com|odnoklassniki\.ru|odnoklassniki\.ua|okwave\.jp|old\.reddit\.com|oneworldgroup\.org|onstartups|onstartups\.com|opendiary|opendiary\.com|oshiete\.goo\.ne\.jp|out\.reddit\.com|over-blog\.com|overblog\.com|paper\.li|partyflock\.nl|photobucket|photobucket\.com|pinboard|pinboard\.in|pingsta|pingsta\.com|pinterest|pinterest\.at|pinterest\.ca|pinterest\.ch|pinterest\.cl|pinterest\.co\.kr|pinterest\.co\.uk|pinterest\.com|pinterest\.com\.au|pinterest\.com\.mx|pinterest\.de|pinterest\.es|pinterest\.fr|pinterest\.it|pinterest\.jp|pinterest\.nz|pinterest\.ph|pinterest\.pt|pinterest\.ru|pinterest\.se|pixiv\.net|pl\.pinterest\.com|playahead\.se|plurk|plurk\.com|plus\.google\.com|plus\.url\.google\.com|pocket\.co|posterous|posterous\.com|pro\.homeadvisor\.com|pulse\.yahoo\.com|qapacity|qapacity\.com|quechup|quechup\.com|quora|quora\.com|qzone\.qq\.com|ravelry|ravelry\.com|reddit|reddit\.com|redux|redux\.com|renren|renren\.com|researchgate\.net|reunion|reunion\.com|reverbnation|reverbnation\.com|rtl\.de|ryze|ryze\.com|salespider|salespider\.com|scoop\.it|screenrant|screenrant\.com|scribd|scribd\.com|scvngr|scvngr\.com|secondlife|secondlife\.com|serverfault|serverfault\.com|shareit|sharethis|sharethis\.com|shvoong\.com|sites\.google\.com|skype|skyrock|skyrock\.com|slashdot\.org|slideshare\.net|smartnews\.com|snapchat|snapchat\.com|social|sociallife\.com\.br|socialvibe|socialvibe\.com|spaces\.live\.com|spoke|spoke\.com|spruz|spruz\.com|ssense\.com|stackapps|stackapps\.com|stackexchange|stackexchange\.com|stackoverflow|stackoverflow\.com|stardoll\.com|stickam|stickam\.com|studivz\.net|suomi24\.fi|superuser|superuser\.com|sweeva|sweeva\.com|t\.co|t\.me|tagged|tagged\.com|taggedmail|taggedmail\.com|talkbiznow|talkbiznow\.com|taringa\.net|techmeme|techmeme\.com|tencent|tencent\.com|tiktok|tiktok\.com|tinyurl|tinyurl\.com|toolbox|toolbox\.com|touch\.facebook\.com|tr\.pinterest\.com|travellerspoint|travellerspoint\.com|tripadvisor|tripadvisor\.com|trombi|trombi\.com|trustpilot|tudou|tudou\.com|tuenti|tuenti\.com|tumblr|tumblr\.com|tweetdeck|tweetdeck\.com|twitter|twitter\.com|twoo\.com|typepad|typepad\.com|unblog\.fr|urbanspoon\.com|ushareit\.com|ushi\.cn|vampirefreaks|vampirefreaks\.com|vampirerave|vampirerave\.com|vg\.no|video\.ibm\.com|vk\.com|vkontakte\.ru|wakoopa|wakoopa\.com|wattpad|wattpad\.com|web\.facebook\.com|web\.skype\.com|webshots|webshots\.com|wechat|wechat\.com|weebly|weebly\.com|weibo|weibo\.com|wer-weiss-was\.de|weread|weread\.com|whatsapp|whatsapp\.com|wiki\.answers\.com|wikihow\.com|wikitravel\.org|woot\.com|wordpress|wordpress\.com|wordpress\.org|xanga|xanga\.com|xing|xing\.com|yahoo-mbga\.jp|yammer|yammer\.com|yelp|yelp\.co\.uk|yelp\.com|youroom\.in|za\.pinterest\.com|zalo|zoo\.gr|zooppa|zooppa\.com)$", "i").test(v.utmSource) || new RegExp("^(?:social|social-network|social-media|sm|social network|social media)$", "i").test(v.utmMedium)},{"name":"organic-video","test":(v) => new RegExp("^(?:blog\.twitch\.tv|crackle|crackle\.com|curiositystream|curiositystream\.com|d\.tube|dailymotion|dailymotion\.com|dashboard\.twitch\.tv|disneyplus|disneyplus\.com|fast\.wistia\.net|help\.hulu\.com|help\.netflix\.com|hulu|hulu\.com|id\.twitch\.tv|iq\.com|iqiyi|iqiyi\.com|jobs\.netflix\.com|justin\.tv|m\.twitch\.tv|m\.youtube\.com|music\.youtube\.com|netflix|netflix\.com|player\.twitch\.tv|player\.vimeo\.com|ted|ted\.com|twitch|twitch\.tv|utreon|utreon\.com|veoh|veoh\.com|viadeo\.journaldunet\.com|vimeo|vimeo\.com|wistia|wistia\.com|youku|youku\.com|youtube|youtube\.com)$", "i").test(v.utmSource) || new RegExp("^(.*video.*)$", "i").test(v.utmMedium)},{"name":"organic-search","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|y
7andex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) || v.utmMedium.toLowerCase() === "organic"},{"name":"referral","test":(v) => new RegExp("^(?:referral|app|link)$", "i").test(v.utmMedium)},{"name":"email","test":(v) => new RegExp("^(?:email|e-mail|e_mail|e mail)$", "i").test(v.utmMedium) || new RegExp("^(?:email|e-mail|e_mail|e mail)$", "i").test(v.utmSource)},{"name":"affiliate","test":(v) => v.utmMedium.toLowerCase() === "affiliate"},{"name":"audio","test":(v) => v.utmMedium.toLowerCase() === "audio"},{"name":"sms","test":(v) => v.utmSource.toLowerCase() === "sms" || v.utmMedium.toLowerCase() === "sms"},{"name":"mobile-push-notification","test":(v) => v.utmSource.toLowerCase() === "firebase" || new RegExp("(?:.*mobile.*|.*notification.*|push$)", "i").test(v.utmMedium)}].find(i=>i.test(t))?.name??"other"}getShopifyAnalyticsId(){const t=this.getCookie("_shopify_y");if(t)return t;try{const e=this.localStorageGet("Shoplift_ClientId");if(e)return e}catch{}return null}legacyGetCookieVisitor(){const t=this.getCookie("SHOPLIFT");return t===null?null:JSON.parse(t,F)}getCookie(t){const e=this.cookie.split("; ").filter(i=>i.split("=").at(0)===t).at(0);return e===void 0?null:e.split("=").slice(1).join("=")}monitorConsentChange(){document.addEventListener("visitorConsentCollected",t=>{(async()=>await this.onConsentChange(t.detail.analyticsAllowed,!0))()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>this.loadShopifyConsentApiWithRetry()):this.loadShopifyConsentApiWithRetry()}loadShopifyConsentApiWithRetry(){let t=0;const e=()=>{this.loadShopifyConsentApi()||t++<10&&window.setTimeout(e,100)};e()}loadShopifyConsentApi(){if(window.Shopify){this.log("Loading Shopify features");const t=async()=>{if(!window.Shopify){this.log("Shopify object missing... suddenly?");return}if(window.Shopify.customerPrivacy===void 0){this.log("Shopify CustomerPrivacy api still missing, trying again in 1000ms"),e=window.setTimeout(()=>{(async()=>await t())()},1e3);return}const i=window.Shopify.customerPrivacy.getTrackingConsent();await this.onConsentChange(window.Shopify.customerPrivacy.analyticsProcessingAllowed(),i==="yes")};let e=window.setTimeout(()=>{(async()=>await t())()},5e3);return window.Shopify.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],i=>{(async()=>{if(window.clearTimeout(e),i){this.log("Error loading consent tracking",i);return}await t()})()}),!0}return!1}async onConsentChange(t,e){try{if(this.log("Consent change detected",t,e),this.state.essential.consentApproved=t,this.state.essential.hasConsentInteraction=e,!this.state.essential.consentApproved){this.state.essential.hasConsentInteraction&&(this.state.analytics.queue.length=0),this.saveState();return}this.cookie=document.cookie,this.shopifyAnalyticsId=this.getShopifyAnalyticsId();for(const i of this.state.analytics.queue.filter(s=>s.type===1||s.type===2)){const s=i;s.shopifyAnalyticsId=this.shopifyAnalyticsId}this.saveState(),await this.syncAllEvents()}catch(i){this.log("Error syncing on consent change",i)}}isThemePreview(){return isThemePreview||themeRole!=="main"}isAppProxyPath(){const t=["/apps/","/tools/","/a/"],e=window.location.pathname;return t.some(i=>e.startsWith(i))}clearThemeBar(t,e,i){const s=structuredClone(i);this.log("Looking for theme bar"),this.waitForElement(null,"body").then(r=>this.waitForElement(r,"#preview-bar-iframe, #PBarNextFrameWrapper").then(n=>(this.log("Found theme bar"),e&&(this.log("Removing theme bar"),n.remove()),t?this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify({...this.debugState(),stateAtEvaluation:s},X)}):Promise.resolve(null)))).catch(r=>console.error(r))}waitForElement(t,e){return new Promise(i=>{const s=document.querySelector(e);if(s){i(s);return}const r=new MutationObserver(n=>{const o=document.querySelector(e);if(o){r.disconnect(),i(o);return}});r.observe(t??document.documentElement,{childList:!0})})}setDebug(t){this.state.essential.debugMode=t,this.saveState()}log(t,...e){let i=0;const s=t.replace(/%[sdoOfF]/g,r=>{if(i>=e.length)return r;const n=e[i++];return r==="%o"||r==="%O"?JSON.stringify(n):String(n)});this.logHistory.push(`[${new Date().toISOString()}][SL] ${s}`),!(!this.state.essential.debugMode&&!this.shopliftDebug)&&console.debug(`[SL] ${t}`,...e)}debugState(){return{state:this.state,storage:{essential:this.loadLocalStorage(this.essentialSessionKey),analytics:this.loadLocalStorage(this.analyticsSessionKey)},params:{shop:this.shop,host:this.host,eventHost:this.eventHost,cssHideClass:this.cssHideClass,testConfigs:this.testConfigs,inactiveTestConfigs:this.inactiveTestConfigs,sendPageView:this.sendPageView,isShopifyMerchantCookie
7:this.getCookie("is_shopify_merchant"),themeId,url:window.location.href,isThemePreview,themeRole,gaConfig:this.gaConfig},logHistory:this.logHistory}}createViewportObserver(t,e={}){const{threshold:i=this.VIEWPORT_TRACK_THRESHOLD,triggerOnce:s=!0}=e,r=new Set;return new IntersectionObserver(n=>{n.forEach(o=>{if(o.isIntersecting&&!r.has(o.target)){const l=o.target,c=l.getAttribute(this.DATA_SL_TEST_ID);c&&(t(c,l),s&&r.add(l))}})},{threshold:i})}applyChangesWithViewport(t,e,i,s){const r=e.selectorsForViewportTracking??e.selectors,n=o=>{if(this.state.essential.visitorTests.some(h=>h.testId===o)||this.activeViewportObservers.has(o))return;const l=[];if(r.forEach(h=>{t.querySelectorAll(h.cssSelector).forEach(b=>l.push(b))}),l.length===0)return;let c=!1;const d=()=>{c||(c=!0,i(o),p.disconnect(),this.activeViewportObservers.delete(o))},p=this.createViewportObserver(()=>{d()},{triggerOnce:!0,...s});this.activeViewportObservers.set(o,p),this.log(`Created viewport observer for test ${o}, observing ${l.length} elements`),l.forEach(h=>{h.setAttribute(this.DATA_SL_TEST_ID,String(o)),p.observe(h)}),setTimeout(()=>{c||l.forEach(h=>{const u=h.getBoundingClientRect(),b=s?.threshold??this.VIEWPORT_TRACK_THRESHOLD,k=Math.min(u.bottom,window.innerHeight)-Math.max(u.top,0),S=Math.min(u.right,window.innerWidth)-Math.max(u.left,0);u.top<window.innerHeight&&u.bottom>0&&u.left<window.innerWidth&&u.right>0&&k>0&&S>0&&k>=u.height*b&&(this.log(`Price element already visible in viewport for test ${o}:`,h),d())})},100)};e.selectors.length>0&&U(t,e,()=>{}),bt(t,{testId:e.testId,hypothesisId:e.hypothesisId,selectors:r},o=>{n(o)})}applyPriceTestWithMapLookup(t,e,i,s){if(!e.priceData){this.log("No price data for hypothesis '%s'",e.id);return}this.log("Hypothesis '%s' isControl=%s, priceData has %d variants",e.id,e.isControl,e.priceData.variants.length);const r=e.priceData.variants.slice(0,3);for(const[S,P,_]of r)this.log(" Sample priceData: variant=%s, price=%d, compareAt=%d",S,P,_);const n=j(e.priceData),o=new Set;for(const S of i)if(S.priceData)for(const[P]of S.priceData.variants)o.add(P);this.log("Price test Map lookup: %d products in hypothesis, %d total products to track",n.size,o.size);const l=e.priceData,c=new WeakSet;let d=!1;const p="[data-sl-attribute-p], [data-sl-attribute-cap], [data-sl-attribute-discount]",h=S=>{if(c.has(S))return;const P=S.getAttribute("data-sl-attribute-p"),_=S.getAttribute("data-sl-attribute-cap"),C=S.getAttribute("data-sl-attribute-discount"),m=P||_||C;if(!m||!o.has(m))return;c.add(S);const y=n.get(m);y&&(this.log("Applying price for product %s: %d cents (compare at: %d cents)",m,y.priceInCents,y.compareAtPriceInCents),Dt(S,m,y,l),this.log("Applied price to element for product %s",m)),!d&&!this.state.essential.visitorTests.some(w=>w.testId===t)&&(S.setAttribute(this.DATA_SL_TEST_ID,String(t)),this.setupElementViewportTracking(S,t,()=>{d||(d=!0,s(t))}))},u=()=>{const S=document.querySelectorAll(p);this.log("Scanning for price elements, found: %d",S.length),S.forEach(h)},b=new MutationObserver(S=>{for(const P of S)P.type==="childList"&&P.addedNodes.forEach(_=>{if(_.nodeType===Node.ELEMENT_NODE){const C=_;(C.hasAttribute("data-sl-attribute-p")||C.hasAttribute("data-sl-attribute-cap")||C.hasAttribute("data-sl-attribute-discount"))&&h(C),C.querySelectorAll(p).forEach(h)}}),P.type==="attributes"&&P.target instanceof Element&&h(P.target)}),k=document.body||document.documentElement;b.observe(k,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-sl-attribute-p","data-sl-attribute-cap","data-sl-attribute-discount"]}),this.log("MutationObserver started for price elements"),u(),document.readyState==="loading"&&document.addEventListener("DOMContentLoaded",()=>{this.log("DOMContentLoaded - rescanning for price elements"),u()}),setTimeout(()=>{this.log("Delayed rescan for price elements"),u()},100),setTimeout(()=>{this.log("Final rescan for price elements"),u()},500)}setupElementViewportTracking(t,e,i){const s=this.VIEWPORT_TRACK_THRESHOLD,r=t.getBoundingClientRect(),n=Math.min(r.bottom,window.innerHeight)-Math.max(r.top,0),o=Math.min(r.right,window.innerWidth)-Math.max(r.left,0);if(r.top<window.innerHeight&&r.bottom>0&&r.left<window.innerWidth&&r.right>0&&n>0&&o>0&&n>=r.height*s){this.log("Price element already visible for test %s",e),i();return}const c=new IntersectionObserver(d=>{for(const p of d)if(p.isIntersecting&&p.intersectionRatio>=s){this.log("Price element entered viewport for test %s",e),c.disconnect(),i();break}},{threshold:s});c.observe(t)}debug(){const t=this.debugState();console.log(JSON.stringify(t,X,2))}}(async function(){window.shopliftInstance||(window.shopliftInstance=new Wt("paceline-2350.myshopify.com","https://app.shoplift.ai","https://events.shoplift.ai",false,false,false,{"sendEvents":false,"mode":"gtag"},false,false,1000,[],[{"id":"c657e8d3-78c3-4fbd-bf8f-720811d69b72","bayesianRevision":3,"status":"paused","hypotheses":[{"id":"c6dea9f1-2a95-4f26-ad8c-6dc64ed7e616","type":"landing","themeId":174791459089,"affix":"app-portal","isControl":true,"redirectPath":null},{"id":"4485cfd3-4bbe-44c1-aab1-0a84cfb68e2c","type":"landing","themeId":174791459089,"affix":"sl-FA946626","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"6546fd33-0cb4-459a-b359-ddb728b86bbd","bayesianRevision":3,"status":"paused","hypotheses":[{"id":"98c1b2e8-2bc1-4fe2-ba78-101c9ed75ae4","type":"landing","themeId":174791459089,"affix":"app-portal","isControl":true,"redirectPath":null},{"id":"bd7c4d3a-07f9-482d-a063-1400a1d0a111","type":"landing","themeId":174791459089,"affix":"sl-6FE1258
7E","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"0874e3de-a3de-452e-9166-062e525e8f60","bayesianRevision":3,"status":"cancelled","hypotheses":[{"id":"602ed0fc-af75-417c-baa9-65e3647f407c","type":"theme","themeId":169467281681,"affix":"","isControl":true,"redirectPath":null},{"id":"0644adbc-e031-48e6-b3c7-c9b5cc7d037d","type":"theme","themeId":169946284305,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"6d9b5763-0beb-479f-9007-d27db4bc1d83","bayesianRevision":3,"status":"cancelled","hypotheses":[{"id":"d60dbd5d-0965-45de-b8b2-6f73dc72eb5b","type":"theme","themeId":169467281681,"affix":"","isControl":true,"redirectPath":null},{"id":"dd9454ba-4bfe-4591-b5a8-be5961982b5d","type":"theme","themeId":169921380625,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false}],null),await window.shopliftInstance.init())})();async function Gt(a,t,e,i){const s=Mt({log:i});if(e)return i("[SUB-PREVIEW] A side â no overlay applied; widget renders naturally"),s;const r=a.widget.widgetType,n=t?j(t):null;let o=W(t),l=K(a,o),c=l.discountMap,d=l.maxDiscount;function p(){const f=W(t);f!==o&&(o=f,l=K(a,o),c=l.discountMap,d=l.maxDiscount,i(`[SUB-PREVIEW] scope refreshed currentProductId=${o??"n/a"}, maxDiscount=${d}`))}i(`[SUB-PREVIEW] side=B, currentProductId=${o??"n/a"}, maxDiscount=${d}`);function h(f){if(!t||!n)return null;const v=Y(n),g=v?n.get(v):void 0;return g?{formattedVariantPrice:G(g.priceInCents,t),formattedDiscounted:G(g.priceInCents*(1-f/100),t)}:null}function u(f){const v=J(a,f);if(!v)return d;const g=D(a,"subscriptionInput"),I=g.length?g[0].selector:'input[name="rc_plan"]',A=v.querySelector(`${I}:checked`);if(A){const E=c[A.value];if(E!==void 0)return E}return d}function b(f){const v=D(a,"subscriptionDiscount");for(const g of v)if(g.selector.includes("badge")||g.selector.includes("__badge")){const I=f.querySelector(g.selector);I?.textContent&&!I.textContent.includes(`${d}%`)&&$(I,A=>N(A,d))}}function k(f,v){const g=h(v);if(!g)return;const I=D(a,"subscriptionCompareAt");for(const A of I){const E=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);E?.textContent&&!E.textContent.includes(g.formattedVariantPrice)&&$(E,x=>/\d/.test(x)?g.formattedVariantPrice:x)}}function S(f,v){const g=h(v);if(!g)return;const I=D(a,"subscriptionPrice");for(const A of I){const E=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);E?.textContent&&!E.textContent.includes(g.formattedDiscounted)&&$(E,x=>/\d/.test(x)?g.formattedDiscounted:x)}}function P(f){const v=D(a,"subscriptionInput"),g=v.length?v[0].selector:'input[name="rc_plan"]',I=D(a,"subscriptionPlanDiscount"),A=I.length?I[0].selector:".rc-plans-button__discount";for(const E of Array.from(f.querySelectorAll("label"))){const x=E.querySelector(g),R=E.querySelector(A);if(x&&R?.textContent){const V=c[x.value];if(V!==void 0){const O=R.textContent.match(/[\d.]+%/)?.[0];O&&O!==`${V}%`&&$(R,L=>N(L,V))}}}}function _(f){const v=f.querySelector("select");if(v)for(const g of Array.from(v.options)){const I=c[g.value];if(I!==void 0&&g.textContent){const A=g.textContent.match(/[\d.]+%/)?.[0];A&&A!==`${I}%`&&(g.textContent=N(g.textContent,I))}}}function C(f){const v=D(a,"onetimePrice");if(!v.length||!t||!n)return;const g=Y(n),I=g?n.get(g):void 0;if(!I)return;const A=G(I.priceInCents,t),E=D(a,"onetimeContainer"),x=E.length?E[0].selector:'[part~="rc-purchase-option__onetime"]',R=f.querySelector(x);if(R)for(const V of v){const O=R.querySelector(`[part~="${V.selector}"]`);O?.textContent&&!O.textContent.includes(A)&&$(O,L=>/\d/.test(L)?A:L)}}function m(f,v){const I=D(a,"subscriptionDiscount").filter(A=>A.selector.includes("benefit")||A.selector==="rc-benefits");for(const A of I){const E=f.querySelector(A.selector);if(E?.shadowRoot){for(const x of Array.from(E.shadowRoot.querySelectorAll("li")))if(x.textContent?.includes("Save")){const R=x.textContent.match(/[\d.]+%/)?.[0];R&&R!==`${v}%`&&$(x,V=>N(V,v))}}}}let y=!1;function w(){if(!y){y=!0;try{p();const f=B(a);if(!f)return;const v=u(f);b(f),k(f,v),S(f,v),C(f);const g=J(a,f);g&&(r==="buttons"||r==="radio"?P(g):_(g)),m(f,v)}finally{y=!1}}}const T=dt({data:a,runUpdates:w});return function(){T(),s()}}const jt=Object.freeze(Object.defineProperty({__proto__:null,subscriptionPreviewRender:Gt},Symbol.toStringTag,{value:"Module"}))})(); })("/", { suffix: "", 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="{"session_id":"01M3XEJYE76983QE8GQM5QX02G","publisher_shop_id":71067468049,"theme_id":183449977105,"theme_published":true,"theme_store_id":2053,"placement":"collection","event_data":{"handle":"","page_type":"home"},"recommendations_tracking_enabled":true}" defer="defer" src="//paceline.fit/cdn/shopifycloud/storefront/assets/storefront/remote_product_tracking-91d95044.js" crossorigin="anonymous"></script>
363 364<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://paceline.fit/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 365<style id="shopify-accelerated-checkout-cart"> 366 #shopify-buyer-consent { 367 margin-top: 1em; 368 display: inline-block; 369 width: 100%; 370} 371 372#shopify-buyer-consent.hidden { 373 display: none; 374} 375 376#shopify-subscription-policy-button { 377 background: none; 378 border: none; 379 padding: 0; 380 text-decoration: underline; 381 font-size: inherit; 382 cursor: pointer; 383} 384 385#shopify-subscription-policy-button::before { 386 box-shadow: none; 387} 388 389 </style> 390
391<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
391 <!-- Header hook for plugins --> 392 393
394<script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
394 395 396 397<meta name="msvalidate.01" content="FD2B941C8831954C41B2CA87DAF6ABAC" /><!-- paceline-responsive-fonts-v1 --> 398<style> 399 :root { 400 --font-body-scale: 0.9375 !important; 401 --font-heading-scale: 0.875 !important; 402 --font-navigation-scale: 1.0 !important; 403 --font-body-line-height-scale: 1.0 !important; 404 --font-heading-line-height-scale: 1.0 !important; 405 } 406 @media (min-width: 768px) { 407 :root { 408 --font-body-scale: 0.96875 !important; 409 --font-heading-scale: 0.9375 !important; 410 } 411 } 412 @media (min-width: 1068px) { 413 :root { 414 --font-body-scale: 1.0 !important; 415 --font-heading-scale: 1.0 !important; 416 } 417 } 418 .breadcrumb, [class*="breadcrumb"], nav[aria-label*="Breadcrumb"] { 419 font-size: 0.8125rem !important; 420 white-space: nowrap; 421 overflow: hidden; 422 text-overflow: ellipsis; 423 } 424 @media (max-width: 767px) { 425 .product-title, .product__title, 426 main[data-template="product"] h1 { 427 font-size: 1.5rem !important; 428 line-height: 1.2 !important; 429 } 430 } 431 .product-description, .product__description, 432 .product-single__description { 433 font-size: 0.9375rem !important; 434 line-height: 1.6 !important; 435 } 436 cart-drawer, .cart-drawer, [class*="cart-drawer"], 437 .side-panel, [class*="side-panel"] { 438 font-size: 0.9375rem; 439 } 440 cart-drawer .cart-item__name, 441 .cart-drawer .cart-item__name, 442 [class*="cart-drawer"] [class*="item"] a { 443 font-size: 0.875rem !important; 444 line-height: 1.3 !important; 445 } 446 cart-drawer [class*="price"], 447 .cart-drawer [class*="price"] { 448 font-size: 0.9375rem !important; 449 } 450 @media (max-width: 767px) { 451 .collection-title, .collection__title, 452 main[data-template="collection"] h1 { 453 font-size: 1.75rem !important; 454 line-height: 1.2 !important; 455 } 456 } 457 .product__policies, [class*="policies"], 458 shopify-payment-terms { 459 font-size: 0.8125rem !important; 460 } 461 @media (max-width: 767px) { 462 .button, button[name="add"], 463 .single-add-to-cart-button, 464 .add-to-cart-button { 465 font-size: 1rem !important; 466 } 467 } 468 469 /* ââ Footer (footer-second): keep 2-column layout ââ */ 470 .footer-links-wrapper { 471 display: flex !important; 472 flex-direction: row !important; 473 justify-content: space-between !important; 474 flex-wrap: nowrap !important; 475 gap: 30px !important; 476 } 477 .footer-text { 478 flex: 0 1 auto !important; 479 min-width: 0 !important; 480 } 481 .footer-links { 482 display: flex !important; 483 flex-direction: row !important; 484 gap: 40px !important; 485 flex: 1 1 auto !important; 486 justify-content: flex-end !important; 487 flex-wrap: nowrap !important; 488 } 489 .footer-column { 490 min-width: 0 !important; 491 flex-shrink: 0 !important; 492 } 493 @media (max-width: 540px) { 494 .footer-links-wrapper { 495 flex-wrap: wrap !important; 496 flex-direction: column-reverse !important; 497 } 498 .footer-links { 499 flex-wrap: wrap !important; 500 justify-content: space-between !important; 501 gap: 20px !important; 502 width: 100% !important; 503 } 504 .footer-column { 505 flex: 1 1 40% !important; 506 } 507 } 508 509 /* ââ Search drawer: fix oversized product card grid ââ */ 510 .search-drawer .thb-predictive-search--promotion-products .products { 511 display: flex !important; 512 flex-wrap: wrap !important; 513 gap: 12px !important; 514 grid-template-columns: none !important; 515 } 516 .search-drawer .thb-predictive-search--promotion-products .products > .columns { 517 flex: 0 0 calc(50% - 6px) !important; 518 max-width: calc(50% - 6px) !important; 519 width: calc(50% - 6px) !important; 520 } 521 .search-drawer product-card { 522 display: flex !important; 523 flex-direction: column !important; 524 } 525 .search-drawer .product-featured-image { 526 aspect-ratio: 1 !important; 527 overflow: hidden !important; 528 flex-shrink: 0 !important; 529 } 530 .search-drawer .product-featured-image-link { 531 height: 0 !important; 532 padding-bottom: 100% !important; 533 } 534 .search-drawer .product-featured-image img { 535 width: 100% !important; 536 height: 100% !important; 537 object-fit: cover !important; 538 } 539 .search-drawer .product-card-info { 540 display: block !important; 541 padding: 8px 4px !important; 542 } 543 .search-drawer .product-card-title { 544 font-size: 0.8125rem !important; 545 line-height: 1.3 !important; 546 display: block !important; 547 } 548 .search-drawer .product-card-vendor { 549 font-size: 0.6875rem !important; 550 display: block !important; 551 } 552 .search-drawer .product-card--add-to-cart-button-wrapper { 553 display: block !important; 554 } 555</style> 556<!-- /paceline-responsive-fonts-v1 --> 557 <!-- pcl-analytics --> 558
558<script>window.__PCL_USER__={email:null,id:null};</script>
558 559
559<script src="//paceline.fit/cdn/shop/t/76/assets/pcl-analytics.js?v=117044519712212592641790202952" type="text/javascript"></script>
559 560 <!-- BEGIN app block: shopify://apps/judge-me-reviews/blocks/judgeme_core/61ccd3b1-a9f2-4160-9fe9-4fec8413e5d8 --><!-- Start of Judge.me Core --> 561 562 563 564 565 566 567 568<link rel="dns-prefetch" href="https://cdn.judge.me"> 569<link rel="dns-prefetch" href="https://cdn1.judge.me"> 570<link rel="dns-prefetch" href="https://api.judge.me"> 571
572<script data-cfasync='false' class='jdgm-settings-script'>window.jdgmSettings={"pagination":5,"disable_web_reviews":false,"coupon_receiving_condition":"with_picture","coupon_value_type":"fixed_amount","coupon_value_percentage":10,"coupon_value_fixed_amount":1.0,"coupon_discount_type":"single","coupon_tier_text_enabled":false,"coupon_tier_text_percentage":10,"coupon_tier_text_fixed_amount":0,"coupon_tier_photo_enabled":false,"coupon_tier_photo_percentage":10,"coupon_tier_photo_fixed_amount":0,"coupon_tier_video_enabled":false,"coupon_tier_video_percentage":10,"coupon_tier_video_fixed_amount":0,"enable_coupons":true,"badge_no_review_text":"No reviews","badge_n_reviews_text":"{{ n }}","badge_star_color":"#47C2EB","hide_badge_preview_if_no_reviews":true,"badge_hide_text":false,"enforce_center_preview_badge":false,"widget_title":"Customer Reviews","widget_open_form_text":"Write a review","widget_close_form_text":"Cancel Review","widget_refresh_page_text":"Refresh page","widget_summary_text":"Based on {{ number_of_reviews }} review/reviews","widget_no_review_text":"Be the first to write a review","widget_name_field_text":"Display name","widget_verified_name_field_text":"Verified Name (public)","widget_name_placeholder_text":"Display name","widget_required_field_error_text":"This field is required.","widget_email_field_text":"Email (kept private, only used to contact you if needed)","widget_verified_email_field_text":"Verified Email (private, can not be edited)","widget_email_placeholder_text":"Your email address","widget_email_field_error_text":"Please enter a valid email address.","widget_rating_field_text":"Rating","widget_review_title_field_text":"Review Title","widget_review_title_placeholder_text":"Give your review a title","widget_review_body_field_text":"Review content","widget_review_body_placeholder_text":"Start writing here...","widget_pictures_field_text":"Picture/Video (optional)","widget_submit_review_text":"Submit Review","widget_submit_verified_review_text":"Submit Verified Review","widget_submit_success_msg_with_auto_publish":"Thank y
572ou! Please refresh the page in a few moments to see your review. You can remove or edit your review by logging into \u003ca href='https://judge.me/login' target='_blank' rel='nofollow noopener'\u003eJudge.me\u003c/a\u003e","widget_submit_success_msg_no_auto_publish":"Thank you! Your review will be published as soon as it is approved by the shop admin. You can remove or edit your review by logging into \u003ca href='https://judge.me/login' target='_blank' rel='nofollow noopener'\u003eJudge.me\u003c/a\u003e","widget_show_default_reviews_out_of_total_text":"Showing {{ n_reviews_shown }} out of {{ n_reviews }} reviews.","widget_show_all_link_text":"Show all","widget_show_less_link_text":"Show less","widget_author_said_text":"{{ reviewer_name }} said:","widget_days_text":"{{ n }} days ago","widget_weeks_text":"{{ n }} week/weeks ago","widget_months_text":"{{ n }} month/months ago","widget_years_text":"{{ n }} year/years ago","widget_yesterday_text":"Yesterday","widget_today_text":"Today","widget_replied_text":"\u003e\u003e {{ shop_name }} replied:","widget_read_more_text":"Read more","widget_reviewer_name_as_initial":"last_initial","widget_rating_filter_color":"#47C2EB","widget_rating_filter_see_all_text":"See all reviews","widget_sorting_most_recent_text":"Most Recent","widget_sorting_highest_rating_text":"Highest Rating","widget_sorting_lowest_rating_text":"Lowest Rating","widget_sorting_with_pictures_text":"Only Pictures","widget_sorting_most_helpful_text":"Most Helpful","widget_open_question_form_text":"Ask a question","widget_reviews_subtab_text":"Reviews","widget_questions_subtab_text":"Questions","widget_question_label_text":"Question","widget_answer_label_text":"Answer","widget_question_placeholder_text":"Write your question here","widget_submit_question_text":"Submit Question","widget_question_submit_success_text":"Thank you for your question! We will notify you once it gets answered.","widget_star_color":"#47C2EB","verified_badge_text":"Verified","verified_badge_bg_color":"","verified_badge_text_color":"#000000","verified_badge_placement":"left-of-reviewer-name","widget_review_max_height":8,"widget_hide_border":false,"widget_social_share":true,"widget_thumb":true,"widget_review_location_show":true,"widget_location_format":"city_state_code_only","all_reviews_include_out_of_store_products":true,"all_reviews_out_of_store_text":"(out of store)","all_reviews_pagination":100,"all_reviews_product_name_prefix_text":"about","enable_review_pictures":true,"enable_question_anwser":true,"widget_theme":"align","review_date_format":"mm/dd/yyyy","default_sort_method":"most-recent","enable_ai_review_visibility":true,"widget_product_reviews_subtab_text":"Product Reviews","widget_shop_reviews_subtab_text":"Shop Reviews","widget_other_products_reviews_text":"Reviews for other products","widget_store_reviews_subtab_text":"Store reviews","widget_product_variant_reference_text":"Review for","widget_no_store_reviews_text":"This store hasn't received any reviews yet","widget_web_restriction_product_reviews_text":"This product hasn't received any reviews yet","widget_no_items_text":"No items found","widget_show_more_text":"Show more","widget_write_a_store_review_text":"Write a Store Review","widget_product_and_store_reviews_text":"Product and store reviews","widget_reviews_in_collection_text":"Reviews in this collection","widget_other_languages_heading":"Reviews in Other Languages","widget_translate_review_text":"Translate review to {{ language }}","widget_translating_review_text":"Translating...","widget_show_original_translation_text":"Show original ({{ language }})","widget_translate_review_failed_text":"Review couldn't be translated.","widget_translate_review_retry_text":"Retry","widget_translate_review_try_again_later_text":"Try again later","show_product_url_for_grouped_product":false,"widget_sorting_pictures_first_text":"Pictures First","show_pictures_on_all_rev_page_mobile":false,"show_pictures_on_all_rev_page_desktop":false,"floating_tab_hide_mobile_install_preference":false,"floating_tab_button_name":"â
Reviews","floating_tab_title":"Let customers speak for us","floating_tab_button_color":"","floating_tab_button_background_color":"","floating_tab_url":"","floating_tab_url_enabled":false,"floating_tab_tab_style":"text","all_reviews_text_badge_text":"Customers rate us {{ shop.metafields.judgeme.all_reviews_rating | round: 1 }}/5 based on {{ shop.metafields.judgeme.all_reviews_count }} reviews.","all_reviews_text_badge_text_branded_style":"{{ shop.metafields.judgeme.all_reviews_rating | round: 1 }} out of 5 stars based on {{ shop.metafields.judgeme.all_reviews_count }} reviews","is_all_reviews_text_badge_a_link":false,"show_stars_for_all_reviews_text_badge":false,"all_reviews_text_badge_url":"","all_reviews_text_style":"text","all_reviews_text_color_style":"judgeme_brand_color","all_reviews_text_color":"#108474","all_reviews_text_show_jm_brand":true,"featured_carousel_show_header":true,"featured_carousel_title":"Real, unedited feedback","testimonials_carousel_title":"Customers are saying","videos_carousel_title":"Real customer stories","cards_carousel_title":"Customers are saying","featured_carousel_count_text":"from 10k+ orders","featured_carousel_add_link_to_all_reviews_page":false,"featured_carousel_url":"","featured_carousel_show_images":true,"featured_carousel_autoslide_interval":5,"featured_carousel_arrows_on_the_sides":false,"featured_carousel_height":250,"featured_carousel_width":80,"featured_carousel_image_size":0,"featured_carousel_image_height":250,"featured_carousel_arrow_color":"#eeeeee","verified_count_badge_style":"branded","verified_count_badge_orientation":"horizontal","verified_count_badge_color_style":"judgeme_brand_color","verified_count_badge_color":"#108474","is_verified_count_badge_a_link":false,"verified_count_badge_url":"","verified_count_badge_show_jm_brand":true,"widget_rating_preset_default":5,"widget_first_sub_tab":"product-reviews","widget_show_histogram":true,"widget_histogram_use_custom_color":true,"widget_pagination_use_custom_color":true,"widget_star_use_custom_color":true,"widget_verified_badge_use_custom_color":true,"widget_write_review_use_custom_color":false,"picture_reminder_submit_button":"Upload Pictures","enable_review_videos":true,"mute_video_by_default":true,"widget_sorting_videos_first_text":"Videos First","widget_review_pending_text":"Pending","featured_carousel_items_for_large_screen":3,"social_share_options_order":"Facebook,Twitter","remove_microdata_snippet":false,"disable_json_ld":false,"enable_json_ld_products":false,"preview_badge_show_question_text":true,"preview_badge_no_question_text":"No questions (yet)","preview_badge_n_question_text":"{{ number_of_questions }} question/questions","qa_badge_show_icon":false,"qa_badge_position":"same-row","remove_judgeme_branding":true,"widget_add_search_bar":true,"widget_search_bar_placeholder":"Search","widget_sorting_verified_only_text":"Verified only","widget_sorting_most_relevant_text":"Most Relevant","featured_carousel_theme":"compact","featured_carousel_show_rating":true,"featured_carousel_show_title":true,"featured_carousel_show_body":true,"featured_carousel_show_date":true,"featured_carousel_show_reviewer":true,"featured_carousel_show_product":true,"featured_carousel_header_background_color":"#108474","featured_carousel_header_text_color":"#ffffff","featured_carousel_name_product_separator":"reviewed","featured_carousel_full_star_background":"#108474","featured_carousel_empty_star_background":"#dadada","featured_carousel_vertical_theme_background":"#f9fafb","featured_carousel_verified_badge_enable":true,"featured_carousel_verified_badge_color":"#108474","featured_carousel_border_style":"round","featured_carousel_review_line_length_limit":3,"featured_carousel_more_reviews_button_text":"Read more reviews","featured_carousel_view_product_button_text":"View product","all_reviews_page_load_reviews_on":"scroll","all_reviews_page_load_more_text":"Load More Reviews","disable_fb_tab_reviews":false,"enable_ajax_cdn_cache":false,"widget_advanced_speed_features":5,"widget_public_name_text":"displayed publicly like","default_reviewer_name":"John Smith","default_reviewer_name_has_non_latin":true,"widget_reviewer_anonymous":"Anonymous","medals_widget_title":"Judge.me Review Medals","medals_widget_background_color":"#f9fafb","medals_widget_position":"footer_all_pages","medals_widget_border_color":"#f9fafb","medals_widget_verified_text_position":"left","medals_widget_use_monochromatic_version":false,"medals_widget_elements_color":"#108474","show_reviewer_avatar":true,"widget_invalid_yt_video_url_error_text":"Not a YouTube video URL","widget_max_length_field_error_text":"Please enter no more than {0} characters.","widget_show_country_flag":false,"widget_show_collected_via_shop_app":true,"widget_verified_by_shop_badge_style":"dark","widget_verified_by_shop_text":"Verified by Shop","widget_show_photo_gallery":true,"widget_load_with_code_splitting":true,"widget_ugc_install_preference":false,"widget_ugc_title":"Made by us, Shared by you","widget_ugc_subt
572itle":"Tag us to see your picture featured in our page","widget_ugc_arrows_color":"#ffffff","widget_ugc_primary_button_text":"Buy Now","widget_ugc_primary_button_background_color":"#108474","widget_ugc_primary_button_text_color":"#ffffff","widget_ugc_primary_button_border_width":"0","widget_ugc_primary_button_border_style":"none","widget_ugc_primary_button_border_color":"#108474","widget_ugc_primary_button_border_radius":"25","widget_ugc_secondary_button_text":"Load More","widget_ugc_secondary_button_background_color":"#ffffff","widget_ugc_secondary_button_text_color":"#108474","widget_ugc_secondary_button_border_width":"2","widget_ugc_secondary_button_border_style":"solid","widget_ugc_secondary_button_border_color":"#108474","widget_ugc_secondary_button_border_radius":"25","widget_ugc_reviews_button_text":"View Reviews","widget_ugc_reviews_button_background_color":"#ffffff","widget_ugc_reviews_button_text_color":"#108474","widget_ugc_reviews_button_border_width":"2","widget_ugc_reviews_button_border_style":"solid","widget_ugc_reviews_button_border_color":"#108474","widget_ugc_reviews_button_border_radius":"25","widget_ugc_reviews_button_link_to":"judgeme-reviews-page","widget_ugc_show_post_date":true,"widget_ugc_max_width":"800","widget_rating_metafield_value_type":true,"widget_primary_color":"#47C2EB","widget_enable_secondary_color":false,"widget_secondary_color":"#000000","widget_summary_average_rating_text":"{{ average_rating }} out of 5","widget_media_grid_title":"Customer photos \u0026 videos","widget_media_grid_see_more_text":"See more","widget_round_style":true,"widget_show_product_medals":false,"widget_verified_by_judgeme_text":"Verified by Judge.me","widget_show_store_medals":true,"widget_verified_by_judgeme_text_in_store_medals":"Verified by Judge.me","widget_media_field_exceed_quantity_message":"Sorry, we can only accept {{ max_media }} for one review.","widget_media_field_exceed_limit_message":"{{ file_name }} is too large, please select a {{ media_type }} less than {{ size_limit }}MB.","widget_review_submitted_text":"Review Submitted!","widget_question_submitted_text":"Question Submitted!","widget_close_form_text_question":"Cancel","widget_write_your_answer_here_text":"Write your answer here","widget_enabled_branded_link":true,"widget_show_collected_by_judgeme":false,"widget_reviewer_name_color":"","widget_write_review_text_color":"","widget_write_review_bg_color":"","widget_collected_by_judgeme_text":"collected by Judge.me","widget_pagination_type":"load_more","widget_load_more_text":"Load More","widget_load_more_color":"#47C2EB","widget_full_review_text":"Full Review","widget_read_more_reviews_text":"Read More Reviews","widget_read_questions_text":"Read Questions","widget_questions_and_answers_text":"Questions \u0026 Answers","widget_verified_by_text":"Verified by","widget_verified_text":"Verified","widget_number_of_reviews_text":"{{ number_of_reviews }} reviews","widget_back_button_text":"Back","widget_next_button_text":"Next","widget_custom_forms_filter_button":"Filters","custom_forms_style":"horizontal","widget_show_review_information":false,"how_reviews_are_collected":"How reviews are collected?","widget_show_review_keywords":true,"widget_gdpr_statement":"How we use your data: We'll only contact you about the review you left, and only if necessary. By submitting your review, you agree to Judge.me's \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms\u003c/a\u003e, \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy\u003c/a\u003e and \u003ca href='https://judge.me/content-policy' target='_blank' rel='nofollow noopener'\u003econtent\u003c/a\u003e policies.","widget_multilingual_sorting_enabled":false,"widget_translate_review_content_enabled":false,"widget_translate_review_content_method":"manual","popup_widget_review_selection":"automatically_with_pictures","popup_widget_round_border_style":true,"popup_widget_show_title":true,"popup_widget_show_body":true,"popup_widget_show_reviewer":false,"popup_widget_show_product":true,"popup_widget_show_pictures":true,"popup_widget_use_review_picture":true,"popup_widget_show_on_home_page":true,"popup_widget_show_on_product_page":true,"popup_widget_show_on_collection_page":true,"popup_widget_show_on_cart_page":true,"popup_widget_position":"bottom_left","popup_widget_first_review_delay":5,"popup_widget_duration":5,"popup_widget_interval":5,"popup_widget_review_count":5,"popup_widget_hide_on_mobile":true,"review_snippet_widget_round_border_style":true,"review_snippet_widget_card_color":"#FFFFFF","review_snippet_widget_text_color":"#000000","review_snippet_widget_lighter_text_color":"#7B7B7B","review_snippet_widget_slider_arrows_background_color":"#FFFFFF","review_snippet_widget_slider_arrows_color":"#000000","review_snippet_widget_star_color":"#47C2EB","show_product_variant":false,"all_reviews_product_variant_label_text":"Variant: ","widget_show_verified_branding":false,"widget_ai_summary_title":"Customers say","widget_ai_summary_disclaimer":"AI-powered review summary based on recent customer reviews","widget_show_ai_summary":false,"widget_show_ai_summary_bg":false,"write_review_button_visibility":"everyone","store_summary_widget_heading":"Customers rate this store","store_summary_widget_button_text":"View customer reviews","store_summary_widget_button_theme_text":"See AI reviews summary","widget_show_review_title_input":true,"widget_autofill_review_title":true,"redirect_reviewers_invited_via_email":"external_form","request_store_review_after_product_review":true,"request_review_other_products_in_order":true,"review_form_color_scheme":"default","review_form_corner_style":"square","review_form_star_color":"#47C2EB","review_form_text_color":"#333333","review_form_background_color":"#ffffff","review_form_field_background_color":"#fafafa","review_form_button_color":"#47C2EB","review_form_button_text_color":"#ffffff","review_form_modal_overlay_color":"#000000","review_form_theme":"multi_step","review_form_location":"in_store_popup","review_form_external_page_background_color":"#C5F7F0","review_content_screen_title_text":"How would you rate this product?","review_content_introduction_text":"We would love it if you would share a bit about your experience.","store_review_form_title_text":"How would you rate this store?","store_review_form_introduction_text":"We would love it if you would share a bit about your experience.","show_review_guidance_text":true,"one_star_review_guidance_text":"Poor","five_star_review_guidance_text":"Great","customer_information_screen_title_text":"About you","customer_information_introduction_text":"Please tell us more about you.","custom_questions_screen_title_text":"Your experience in more detail","custom_questions_introduction_text":"Here are a few questions to help us understand more about your experience.","review_submitted_screen_title_text":"Thanks for your review!","review_submitted_screen_thank_you_text":"We are processing it and it will appear on the store soon.","review_submitted_screen_email_verification_text":"Please confirm your email by clicking the link we just sent you. This helps us keep reviews authentic.","confirm_email_screen_title_text":"Confirm your email","confirm_email_screen_message_text":"To help keep reviews authentic, we'll send you a secure link to continue writing your review. It only takes a moment.","check_email_screen_title_text":"Check your email","check_email_screen_message_text":"We sent you an email to {{ email }}. Click the button on the email to continue.","check_email_screen_resend_message_text":"Email resent!","check_email_resend_hint_text":"Didn't get the email? Check your spam folder or [resend the email].","verification_email_rate_limit_error_text":"You've reached the limit for review attempts on this product. Please check your inbox or try again later.","review_submitted_request_store_review_text":"Would you like to share your experience of shopping with us?","review_submitted_review_other_products_text":"Would you like to review these products?","store_review_screen_title_text":"Would you like to share your experience of shopping with us?","store_review_introduction_text":"We value your feedback and use it to improve. Please share any thoughts or suggestions you have.","reviewer_media_screen_title_picture_text":"Share a picture","reviewer_media_introduction_picture_text":"Upload a photo to support your review.","reviewer_media_screen_title_video_text":"Share a video","reviewer_media_introduction_video_text":"Upload a video to support your review.","reviewer_media_screen_title_picture_or_video_text":"Share a picture or video","reviewer_media_introduction_picture_or_video_text":"Upload a photo or video to support your review.","reviewer_media_
572youtube_url_text":"Paste your Youtube URL here","advanced_settings_next_step_button_text":"Next","advanced_settings_close_review_button_text":"Close","modal_write_review_flow":false,"write_review_flow_required_text":"Required","write_review_flow_privacy_message_text":"We respect your privacy.","write_review_flow_anonymous_text":"Post review as anonymous","write_review_flow_visibility_text":"This won't be visible to other customers.","write_review_flow_multiple_selection_help_text":"Select as many as you like","write_review_flow_single_selection_help_text":"Select one option","write_review_flow_required_field_error_text":"This field is required","write_review_flow_invalid_email_error_text":"Please enter a valid email address","write_review_flow_max_length_error_text":"Max. {{ max_length }} characters.","write_review_flow_media_upload_text":"\u003cb\u003eClick to upload\u003c/b\u003e or drag and drop","write_review_flow_gdpr_statement":"We'll only contact you about your review if necessary. By submitting your review, you agree to our \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms and conditions\u003c/a\u003e and \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy policy\u003c/a\u003e.","rating_only_reviews_enabled":false,"show_negative_reviews_help_screen":false,"new_review_flow_help_screen_rating_threshold":3,"negative_review_resolution_screen_title_text":"Tell us more","negative_review_resolution_text":"Your experience matters to us. If there were issues with your purchase, we're here to help. Feel free to reach out to us, we'd love the opportunity to make things right.","negative_review_resolution_button_text":"Contact us","negative_review_resolution_proceed_with_review_text":"Leave a review","negative_review_resolution_subject":"Issue with purchase from {{ shop_name }}.{{ order_name }}","coupon_promo_intro_any_review_text":"Write a review and get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_with_photo_text":"Write a review and add a photo or video to get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_with_video_text":"Write a review and add a video to get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_up_to_any_review_text":"Write a review and get a coupon for up to {{ amount }} off your next purchase","coupon_promo_intro_up_to_with_photo_text":"Write a review and add a photo or video to get a coupon for up to {{ amount }} off your next purchase","coupon_promo_intro_external_text":"Write a review and get a reward for your next purchase","coupon_promo_intro_external_with_photo_text":"Write a review and add a photo or video to get a reward for your next purchase","coupon_promo_intro_external_with_video_text":"Write a review and add a video to get a reward for your next purchase","coupon_promo_media_photo_text":"Add a photo or video and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_photo_only_text":"Add a photo and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_video_text":"Add a video and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_external_photo_text":"Add a photo or video and get a reward for your next purchase","coupon_promo_media_external_photo_only_text":"Add a photo and get a reward for your next purchase","coupon_promo_media_external_video_text":"Add a video and get a reward for your next purchase","coupon_promo_success_text":"You've got a coupon for your next purchase at {{ shop_name }}!","coupon_promo_success_subtext":"You'll receive your coupon email within the hour.","preview_badge_collection_page_install_status":false,"widget_review_custom_css":"","preview_badge_custom_css":"","preview_badge_stars_count":"5-stars","featured_carousel_custom_css":"","floating_tab_custom_css":"","all_reviews_widget_custom_css":"","medals_widget_custom_css":"","verified_badge_custom_css":"","all_reviews_text_custom_css":"","transparency_badges_collected_via_store_invite":false,"transparency_badges_from_another_provider":false,"transparency_badges_collected_from_store_visitor":false,"transparency_badges_collected_by_verified_review_provider":true,"transparency_badges_earned_reward":false,"transparency_badges_collected_via_store_invite_text":"Review collected via store invitation","transparency_badges_from_another_provider_text":"Review collected from another provider","transparency_badges_collected_from_store_visitor_text":"Review collected from a store visitor","transparency_badges_written_in_google_text":"Review written in Google","transparency_badges_written_in_etsy_text":"Review written in Etsy","transparency_badges_written_in_shop_app_text":"Review written in Shop App","transparency_badges_earned_reward_text":"Review earned a reward for future purchase","product_review_widget_per_page":10,"widget_other_languages_reviews_per_page":3,"widget_store_review_label_text":"Review about the store","widget_cart_mode_aggregate_heading_text":"Customers rate this store","checkout_comment_extension_title_on_product_page":"Customer Comments","checkout_comment_extension_num_latest_comment_show":5,"checkout_comment_extension_format":"name_and_timestamp","checkout_comment_customer_name":"last_initial","checkout_comment_comment_notification":true,"preview_badge_collection_page_install_preference":false,"preview_badge_home_page_install_preference":false,"preview_badge_product_page_install_preference":false,"review_widget_install_preference":"","review_carousel_install_preference":false,"floating_reviews_tab_install_preference":"none","verified_reviews_count_badge_install_preference":false,"all_reviews_text_install_preference":false,"review_widget_best_location":false,"judgeme_medals_install_preference":false,"review_widget_revamp_enabled":false,"review_widget_qna_enabled":false,"review_widget_header_theme":"minimal","review_widget_widget_title_enabled":true,"review_widget_header_text_size":"medium","review_widget_header_text_weight":"regular","review_widget_average_rating_style":"compact","review_widget_bar_chart_enabled":true,"review_widget_bar_chart_type":"numbers","review_widget_bar_chart_style":"standard","review_widget_expanded_media_gallery_enabled":false,"review_widget_show_review_highlights":false,"review_widget_show_review_keywords_in_gray":false,"review_widget_reviews_section_theme":"standard","review_widget_image_style":"thumbnails","review_widget_review_image_ratio":"square","review_widget_stars_size":"medium","review_widget_verified_badge":"standard_text","review_widget_review_title_text_size":"medium","review_widget_review_text_size":"medium","review_widget_review_text_length":"medium","review_widget_number_of_columns_desktop":3,"review_widget_carousel_transition_speed":5,"review_widget_custom_questions_answers_display":"always","review_widget_card_section_size":"small","review_widget_button_text_color":"#FFFFFF","review_widget_text_color":"#000000","review_widget_lighter_text_color":"#7B7B7B","review_widget_corner_styling":"soft","review_widget_review_word_singular":"review","review_widget_review_word_plural"
572:"reviews","review_widget_voting_label":"Helpful?","review_widget_shop_reply_label":"Reply from {{ shop_name }}:","review_widget_filters_title":"Filters","review_widget_filter_rating_title":"Rating","review_widget_filter_keyword_title":"Keyword","review_widget_clear_filters_text":"Clear filters","review_widget_expand_more_text":"More","review_widget_review_highlights_title":"Review highlights","qna_widget_question_word_singular":"Question","qna_widget_question_word_plural":"Questions","qna_widget_answer_reply_label":"Answer from {{ answerer_name }}:","qna_content_screen_title_text":"Ask a question about this product","qna_widget_question_required_field_error_text":"Please enter your question.","qna_widget_flow_gdpr_statement":"We'll only contact you about your question if necessary. By submitting your question, you agree to our \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms and conditions\u003c/a\u003e and \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy policy\u003c/a\u003e.","qna_widget_question_submitted_text":"Thanks for your question!","qna_widget_close_form_text_question":"Close","qna_widget_question_submit_success_text":"Weâll notify you by email when your question is answered.","all_reviews_widget_v2025_enabled":false,"all_reviews_widget_v2025_header_theme":"default","all_reviews_widget_v2025_widget_title_enabled":true,"all_reviews_widget_v2025_header_text_size":"medium","all_reviews_widget_v2025_header_text_weight":"regular","all_reviews_widget_v2025_average_rating_style":"compact","all_reviews_widget_v2025_bar_chart_enabled":true,"all_reviews_widget_v2025_bar_chart_type":"numbers","all_reviews_widget_v2025_bar_chart_style":"standard","all_reviews_widget_v2025_expanded_media_gallery_enabled":false,"all_reviews_widget_v2025_show_store_medals":true,"all_reviews_widget_v2025_show_photo_gallery":true,"all_reviews_widget_v2025_show_review_keywords":false,"all_reviews_widget_v2025_show_ai_summary":false,"all_reviews_widget_v2025_show_ai_summary_bg":false,"all_reviews_widget_v2025_show_review_highlights":false,"all_reviews_widget_v2025_show_review_keywords_in_gray":false,"all_reviews_widget_v2025_add_search_bar":false,"all_reviews_widget_v2025_default_sort_method":"most-recent","all_reviews_widget_v2025_reviews_per_page":10,"all_reviews_widget_v2025_reviews_section_theme":"default","all_reviews_widget_v2025_image_style":"thumbnails","all_reviews_widget_v2025_review_image_ratio":"square","all_reviews_widget_v2025_stars_size":"medium","all_reviews_widget_v2025_verified_badge":"standard_text","all_reviews_widget_v2025_review_title_text_size":"medium","all_reviews_widget_v2025_review_text_size":"medium","all_reviews_widget_v2025_review_text_length":"medium","all_reviews_widget_v2025_number_of_columns_desktop":3,"all_reviews_widget_v2025_carousel_transition_speed":5,"all_reviews_widget_v2025_custom_questions_answers_display":"always","all_reviews_widget_v2025_review_dates":false,"all_reviews_widget_v2025_card_section_size":"small","all_reviews_widget_v2025_show_product_variant":false,"all_reviews_widget_v2025_show_reviewer_avatar":true,"all_reviews_widget_v2025_reviewer_name_as_initial":"","all_reviews_widget_v2025_review_location_show":false,"all_reviews_widget_v2025_location_format":"","all_reviews_widget_v2025_show_country_flag":false,"all_reviews_widget_v2025_widget_thumb":false,"all_reviews_widget_v2025_verified_by_shop_badge_style":"light","all_reviews_widget_v2025_social_share":false,"all_reviews_widget_v2025_social_share_options_order":"Facebook,Twitter,LinkedIn,Pinterest","all_reviews_widget_v2025_pagination_type":"standard","all_reviews_widget_v2025_button_text_color":"#FFFFFF","all_reviews_widget_v2025_text_color":"#000000","all_reviews_widget_v2025_lighter_text_color":"#7B7B7B","all_reviews_widget_v2025_corner_styling":"soft","all_reviews_widget_v2025_title":"Customer reviews","all_reviews_widget_v2025_ai_summary_title":"Customers say about this store","all_reviews_widget_v2025_no_review_text":"Be the first to write a review","all_reviews_widget_v2025_review_highlights_title":"Review highlights","reviews_grid_widget_show_sample_reviews":false,"reviews_grid_widget_review_selection":"all","reviews_grid_widget_select_products":[],"reviews_grid_widget_show_media_only":false,"reviews_grid_widget_display_order":"media_first","reviews_grid_widget_card_grouping":"per_media","reviews_grid_widget_columns_desktop":3,"reviews_grid_widget_rows_desktop":3,"reviews_grid_widget_columns_mobile":2,"reviews_grid_widget_rows_mobile":6,"reviews_grid_widget_show_stars":true,"reviews_grid_widget_show_reviewer_name":true,"reviews_grid_widget_show_review_title_on_hover_desktop":true,"reviews_grid_widget_corner_styling":"soft","reviews_grid_widget_card_spacing":"medium","reviews_grid_widget_header_text_color":"#000000","reviews_grid_widget_star_and_reviewer_name_color":"#F9F9F9","reviews_grid_widget_overlay_and_background_color":"#000000","reviews_grid_widget_content_color":"#F9F9F9","reviews_grid_widget_header_text":"From our customers","reviews_grid_widget_show_average_rating":true,"trust_badge_enabled":false,"trust_badge_structure":"outline","trust_badge_color":"black","trust_badge_star":"black","trust_badge_rating_display_default":"show_avg_text","platform":"shopify","branding_url":"https://app.judge.me/reviews/stores/marketplace.paceline.fit","branding_text":"Powered by Judge.me","locale":"en","reply_name":"Paceline","shop_currency":"USD","widget_version":"3.0","footer":true,"autopublish":true,"review_dates":true,"enable_custom_form":false,"shop_use_review_site":true,"shop_locale":"en","enable_multi_locales_translations":true,"show_review_title_input":true,"autofill_review_title":true,"review_verification_email_status":"always","require_verification_before_submit":false,"sign_in_with_
572shop_enabled":false,"customer_account_validation_enabled":true,"most_relevant_sort_enabled":true,"coupon_promo_invited_eligible":true,"coupon_promo_web_eligible":false,"uses_coupon_integration":false,"uses_external_coupon":false,"can_be_branded":true,"rtl_stars_enabled_ar":true,"rtl_stars_enabled_he":true,"reply_name_text":"Paceline"};</script>
572 <style class='jdgm-settings-style'>.jdgm-xx{left:0}:root{--jdgm-primary-color: #47C2EB;--jdgm-secondary-color: rgba(71,194,235,0.1);--jdgm-star-color: #47C2EB;--jdgm-write-review-text-color: white;--jdgm-write-review-bg-color: #47C2EB;--jdgm-paginate-color: #47C2EB;--jdgm-border-radius: 10;--jdgm-reviewer-name-color: #47C2EB}.jdgm-histogram__bar-content{background-color:#47C2EB}.jdgm-rev[data-verified-buyer=true] .jdgm-rev__icon.jdgm-rev__icon:after,.jdgm-rev__buyer-badge.jdgm-rev__buyer-badge{color:#000000;background-color:#47C2EB}.jdgm-review-widget--small .jdgm-gallery.jdgm-gallery .jdgm-gallery__thumbnail-link:nth-child(8) .jdgm-gallery__thumbnail-wrapper.jdgm-gallery__thumbnail-wrapper:before{content:"See more"}@media only screen and (min-width: 768px){.jdgm-gallery.jdgm-gallery .jdgm-gallery__thumbnail-link:nth-child(8) .jdgm-gallery__thumbnail-wrapper.jdgm-gallery__thumbnail-wrapper:before{content:"See more"}}.jdgm-rev__thumb-btn{color:#47C2EB}.jdgm-rev__thumb-btn:hover{opacity:0.8}.jdgm-rev__thumb-btn:not([disabled]):hover,.jdgm-rev__thumb-btn:hover,.jdgm-rev__thumb-btn:active,.jdgm-rev__thumb-btn:visited{color:#47C2EB}.jdgm-preview-badge .jdgm-star.jdgm-star{color:#47C2EB}.jdgm-prev-badge[data-average-rating='0.00']{display:none !important}.jdgm-author-fullname{display:none !important}.jdgm-author-all-initials{display:none !important}.jdgm-rev-widg__title{visibility:hidden}.jdgm-rev-widg__summary-text{visibility:hidden}.jdgm-prev-badge__text{visibility:hidden}.jdgm-rev__prod-link-prefix:before{content:'about'}.jdgm-rev__variant-label:before{content:'Variant: '}.jdgm-rev__out-of-store-text:before{content:'(out of store)'}@media only screen and (min-width: 768px){.jdgm-rev__pics .jdgm-rev_all-rev-page-picture-separator,.jdgm-rev__pics .jdgm-rev__product-picture{display:none}}@media only screen and (max-width: 768px){.jdgm-rev__pics .jdgm-rev_all-rev-page-picture-separator,.jdgm-rev__pics .jdgm-rev__product-picture{display:none}}.jdgm-preview-badge[data-template="product"]{display:none !important}.jdgm-preview-badge[data-template="collection"]{display:none !important}.jdgm-preview-badge[data-template="index"]{display:none !important}.jdgm-review-widget[data-from-snippet="true"]{display:none !important}.jdgm-verified-count-badget[data-from-snippet="true"]{display:none !important}.jdgm-carousel-wrapper[data-from-snippet="true"]{display:none !important}.jdgm-all-reviews-text[data-from-snippet="true"]{display:none !important}.jdgm-medals-section[data-from-snippet="true"]{display:none !important}.jdgm-ugc-media-wrapper[data-from-snippet="true"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_via_store_invitation"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_from_another_provider"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_from_store_visitor"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_earned_for_future_purchase"]{display:none !important}.jdgm-review-snippet-widget{--jdgm-snippet-card-color: #fff;--jdgm-snippet-text-color: #000;--jdgm-snippet-lighter-text-color: #7B7B7B;--jdgm-snippet-star-color: #47C2EB;--jdgm-snippet-border-radius: 8px;--jdgm-snippet-arrows-bg-color: #fff;--jdgm-snippet-arrows-color: #000}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__cards-container .jdgm-rev-snippet-card{border-radius:8px;background:#fff}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__cards-container .jdgm-rev-snippet-card__rev-rating .jdgm-star{color:#47C2EB}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__prev-btn,.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__next-btn{border-radius:50%;background:#fff}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__prev-btn>svg,.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__next-btn>svg{fill:#000}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jm-mfp-content,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__icon,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__pic-img,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__reply{border-radius:8px}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev[data-verified-buyer="true"] .jdgm-full-rev__icon::after{border-radius:8px}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-rev__buyer-badge{border-radius:calc( 8px / 2 )}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-full-rev__replier::before{content:'Paceline'}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-full-rev__product-button{border-radius:calc( 8px * 6 )} 573</style> <style class='jdgm-settings-style'></style> 574 575 576 577 578 <style class='jdgm-miracle-styles'> 579 @-webkit-keyframes jdgm-spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes jdgm-spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}@font-face{font-family:'JudgemeStar';src:url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAScAA0AAAAABrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAEgAAAABoAAAAcbyQ+3kdERUYAAARgAAAAHgAAACAAMwAGT1MvMgAAAZgAAABGAAAAVi+vS9xjbWFwAAAB8AAAAEAAAAFKwBMjvmdhc3AAAARYAAAACAAAAAj//wADZ2x5ZgAAAkAAAAEJAAABdH33LXtoZWFkAAABMAAAAC0AAAA2BroQKWhoZWEAAAFgAAAAHAAAACQD5QHQaG10eAAAAeAAAAAPAAAAFAYAAABsb2NhAAACMAAAAA4AAAAOAO4AeG1heHAAAAF8AAAAHAAAACAASgAvbmFtZQAAA0wAAADeAAABkorWfVZwb3N0AAAELAAAACkAAABEp3ubLXgBY2BkYADhPPP4OfH8Nl8ZuJkYQODS2fRrCPr/aSYGxq1ALgcDWBoAO60LkwAAAHgBY2BkYGDc+v80gx4TAwgASaAICmABAFB+Arl4AWNgZGBgYGPQYWBiAAIwyQgWc2AAAwAHVQB6eAFjYGRiYJzAwMrAwejDmMbAwOAOpb8ySDK0MDAwMbByMsCBAAMCBKS5pjA4PGB4wMR44P8BBj3GrQymQGFGkBwAjtgK
579/gAAeAFjYoAAEA1jAwAAZAAHAHgB3crBCcAwDEPRZydkih567CDdf4ZskmLwFBV8xBfCaC4BXkOUmx4sU0h2ngNb9V0vQCxaRKIAevT7fGWuBrEAAAAAAAAAAAA0AHgAugAAeAF9z79Kw1AUx/FzTm7un6QmJtwmQ5Bg1abgEGr/BAqlU6Gju+Cgg1MkQ/sA7Vj7BOnmO/gUvo2Lo14NqIO6/IazfD8HEODtmQCfoANwNsyp2/GJt3WKQrd1NLiYYWx2PBqOsmJMEOznPOTzfSCrhAtbbLdmeFLJV9eKd63WLrZcIcuaEVdssWCKM6pLCfTVOYbz/0pNSMSZKLIZpvh78sAUH6PlMrreTCabP9r+Z/puPZ2ur/RqpQHgh+MIegCnXeM4MRAPjYN//5tj4ZtTjkFqEdmeMShlEJ7tVAly2TAkx6R68Fl4E/aVvn8JqHFQ4JS1434gXKcuL31dDhzs3YbsEOAd/IU88gAAAHgBfY4xTgMxEEVfkk0AgRCioKFxQYd2ZRtpixxgRU2RfhU5q5VWseQ4JdfgAJyBlmNwAM7ABRhZQ0ORwp7nr+eZAa54YwYg9zm3ynPOeFRe8MCrciXOh/KSS76UV5L/iDmrLiS5AeU519wrL3jmSbkS5115yR2fyivJv9kx0ZMZ2RLZw27q87iNQi8EBo5FSPIMw3HqBboi5lKTGAGDp8FKXWP+t9TU01Lj5His1Ba6uM9dTEMwvrFmbf5GC/q2drW3ruXUhhsCiQOjznFlCzYhHUZp4xp76vsvQh89CQAAeAFjYGJABowM6IANLMrEyMTIzMjCXpyRWJBqZshWXJJYBKOMAFHFBucAAAAAAAAB//8AAngBY2BkYGDgA2IJBhBgAvKZGViBJAuYxwAABJsAOgAAeAFjYGBgZACCk535hiD60tn0azAaAEqpB6wAAA==") format("woff");font-weight:normal;font-style:normal}.jdgm-star{font-family:'JudgemeStar';display:inline !important;text-decoration:none !important;padding:0 4px 0 0 !important;margin:0 !important;font-weight:bold;opacity:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.jdgm-star:hover{opacity:1}.jdgm-star:last-of-type{padding:0 !important}.jdgm-star.jdgm--on:before{content:"\e000"}.jdgm-star.jdgm--off:before{content:"\e001"}.jdgm-star.jdgm--half:before{content:"\e002"}.jdgm-widget *{margin:0;line-height:1.4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-overflow-scrolling:touch}.jdgm-hidden{display:none !important;visibility:hidden !important}.jdgm-temp-hidden{display:none}.jdgm-spinner{width:40px;height:40px;margin:auto;border-radius:50%;border-top:2px solid #eee;border-right:2px solid #eee;border-bottom:2px solid #eee;border-left:2px solid #ccc;-webkit-animation:jdgm-spin 0.8s infinite linear;animation:jdgm-spin 0.8s infinite linear}.jdgm-prev-badge{display:block !important} 580 581</style> 582 583 584 585 586 587 588 589 590 591 592 593 594 <link id="judgeme_widget_align_css" rel="stylesheet" type="text/css" media="nope!" onload="this.media='all'" href="https://cdn.shopify.com/extensions/01a0f14c-14c3-7c54-8630-ec498be121ab/judgeme-770/assets/widget_v3_theme_align.css"> 595 596 597 598
599<script data-cfasync='false' class='jdgm-script'> 600!function(e){window.jdgm=window.jdgm||{}; 601/* INF-1976 */ 602var _jdgmBlocked=function(){var raw=(window.jdgmSettings||{}).hostname_allowlist;var list=(raw==null?"":""+raw).split(/[\s,]+/).map(function(h){return h.trim().toLowerCase().replace(/\.$/,"");}).filter(function(h){return h;});if(!list.length)return false;var host=(e.location.hostname||"").toLowerCase().replace(/\.$/,"");if(/(^|\.)shopifypreview\.com$/.test(host))return false;var bare=host.replace(/^www\./,"");for(var i=0;i<list.length;i++){var en=list[i];if(en.indexOf("*.")===0){var b=en.slice(2);if(host===b||host.slice(-(b.length+1))==="."+b)return false;}else if(bare===en.replace(/^www\./,""))return false;}return true;}(); 603if(_jdgmBlocked){jdgm._loaderExecuted=true;jdgm._blocked=true;var _jdgmS=e.createElement("style");_jdgmS.textContent='[class^="jdgm-"],[class*=" jdgm-"]{display:none !important}';(e.head||e.documentElement).appendChild(_jdgmS);return;} 604jdgm.CDN_HOST="https://cdnwidget.judge.me/",jdgm.CDN_HOST_ALT="https://cdn2.judge.me/cdn/widget_frontend/",jdgm.API_HOST="https://api.judge.me/",jdgm.CDN_BASE_URL="https://cdn.shopify.com/extensions/01a0f14c-14c3-7c54-8630-ec498be121ab/judgeme-770/assets/",jdgm.CDN_API_HOST="https://cdn.judge.me/", 605jdgm.docReady=function(d){(e.attachEvent?"complete"===e.readyState:"loading"!==e.readyState)? 606setTimeout(d,0):e.addEventListener("DOMContentLoaded",d)},jdgm.loadCSS=function(d,t,o,a){ 607!o&&jdgm.loadCSS.requestedUrls.indexOf(d)>=0||(jdgm.loadCSS.requestedUrls.push(d), 608(a=e.createElement("link")).rel="stylesheet",a.class="jdgm-stylesheet",a.media="nope!", 609a.href=d,a.onload=function(){this.media="all",t&&setTimeout(t)},e.body.appendChild(a))}, 610jdgm.loadCSS.requestedUrls=[],jdgm.loadJS=function(e,d){var t=new XMLHttpRequest; 611t.onreadystatechange=function(){4===t.readyState&&t.status>=200&&t.status<300&&(Function(t.response)(),d&&d(t.response))}, 612t.open("GET",e),t.onerror=function(){if(e.indexOf(jdgm.CDN_HOST)===0&&jdgm.CDN_HOST_ALT!==jdgm.CDN_HOST){var f=e.replace(jdgm.CDN_HOST,jdgm.CDN_HOST_ALT);jdgm.loadJS(f,d)}},t.send()},jdgm.docReady((function(){(window.jdgmLoadCSS||e.querySelectorAll( 613".jdgm-widget, .jdgm-all-reviews-page").length>0)&&(jdgmSettings.widget_load_with_code_splitting? 614parseFloat(jdgmSettings.widget_version)>=3?jdgm.loadCSS(jdgm.CDN_BASE_URL+"widget_v3_base.css"): 615jdgm.loadCSS(jdgm.CDN_BASE_URL+"widget_base.css"):jdgm.loadCSS(jdgm.CDN_BASE_URL+"shopify_v2.css") 616)}))}(document); 617</script>
617 618<noscript><link rel="stylesheet" type="text/css" media="all" href="https://cdn.shopify.com/extensions/01a0f14c-14c3-7c54-8630-ec498be121ab/judgeme-770/assets/shopify_v2.css"></noscript> 619 620<!-- BEGIN app snippet: theme_fix_tags -->
620<script> 621 (function() { 622 var jdgmThemeFixes = null; 623 if (!jdgmThemeFixes) return; 624 625 // "All themes" fix: CSS and JS applied on every theme. CSS is injected 626 // before the per-theme fix so the theme-specific CSS wins the cascade. 627 // HTML is never applied globally (too risky). 628 var allThemesFix = jdgmThemeFixes['all']; 629 if (allThemesFix && allThemesFix.css) { 630 var allStyleTag = document.createElement('style'); 631 allStyleTag.classList.add('jdgm-theme-fix-style-all'); 632 allStyleTag.innerHTML = allThemesFix.css; 633 document.head.append(allStyleTag); 634 }; 635 636 if (allThemesFix && allThemesFix.js) { 637 var allScriptTag = document.createElement('script'); 638 allScriptTag.classList.add('jdgm-theme-fix-script-all'); 639 allScriptTag.innerHTML = allThemesFix.js; 640 document.head.append(allScriptTag); 641 }; 642 643 var thisThemeFix = jdgmThemeFixes[Shopify.theme.id]; 644 if (!thisThemeFix) return; 645 646 if (thisThemeFix.html) { 647 document.addEventListener("DOMContentLoaded", function() { 648 var htmlDiv = document.createElement('div'); 649 htmlDiv.classList.add('jdgm-theme-fix-html'); 650 htmlDiv.innerHTML = thisThemeFix.html; 651 document.body.append(htmlDiv); 652 }); 653 }; 654 655 if (thisThemeFix.css) { 656 var styleTag = document.createElement('style'); 657 styleTag.classList.add('jdgm-theme-fix-style'); 658 styleTag.innerHTML = thisThemeFix.css; 659 document.head.append(styleTag); 660 }; 661 662 if (thisThemeFix.js) { 663 var scriptTag = document.createElement('script'); 664 scriptTag.classList.add('jdgm-theme-fix-script'); 665 scriptTag.innerHTML = thisThemeFix.js; 666 document.head.append(scriptTag); 667 }; 668 })(); 669</script>
669 670<!-- END app snippet --> 671<!-- End of Judge.me Core --> 672 673 674 675<!-- END app block -->
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 (“cookies”), some provided by third parties, to operate, improve, and personalize our site; serve ads; enable features and functionality. We and our third-party vendors may monitor, record, and access your data, including device data, IP address and online identifiers, referring URLs and other information, for these and similar purposes. Click Accept to agree. If you browse without clicking Accept, or click Reject, only cookies necessary to enable default website functionalities will be deployed. More info: <a href="https://paceline.fit/privacy" target="_blank" rel="noopener">PRIVACY POLICY</a>. By browsing the site, or clicking “Accept,” “Reject,” or “Manage Preferences,” you agree to our <a href="https://paceline.fit/terms" target="_blank" rel="noopener">TERMS OF USE</a>.</p> 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">×</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.