1<!doctype html> 2<html class="util-NoJs" lang="en"> 3 <head> 4<!-- Start of Shoplift scripts --> 5<!-- 2026-09-14T15:17:10.5091625Z --> 6<style>.shoplift-hide { opacity: 0 !important; }</style> 7<style id="sl-preview-bar-hide">#preview-bar-iframe, #PBarNextFrameWrapper { display: none !important; }</style>
8<script type="text/javascript">(function(rootPath, template, themeRole, themeId, isThemePreview){ /* Generated on 2026-09-24T18:15:03.5514838Z */(function(){"use strict";var te=document.createElement("style");te.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(te);var fe=" daum[ /]| deusu/|(?:^|[^g])news(?!sapphire)|(?<! channel/|google/)google(?!(?:wv|app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!cam)scan|(?<!lib)http|24x
87|;\\s\\w+;$|@[a-z][\\w-]+\\.|\\(\\)|\\.com\\b|\\b\\w+/1\\.0;|\\bbw/|\\bdlc\\b|\\bort/|\\bperl\\b|\\btime/|\\||^[<\\(;]|^[\\w \\.\\-\\(?:\\):%]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[\\w\\-]+/[\\w]+$|^[^ ]{50,}$|^\\d+\\b|^\\w*search\\b|^\\w+/[\\w\\(\\)]*$|^\\w+/\\d\\.\\d\\s\\([\\w@]+\\)$|^active|^ad muncher|^amaya|^apache/|^avsdevicesdk/|^azure|^biglotron|^blackbox exporter|^bot|^clamav[ /]|^claude-code/|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^email|^exodusmovement|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^igetter/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d\\s[\\w\\.-]+$|^mozilla/\\d\\.\\d\\s\\((?:compatible;)?(?:\\s?[\\w\\d-.]+\\/\\d+\\.\\d+)?\\)$|^navermailapp|^netsurf|^offline|^openai/|^owler|^php|^postman|^ps_daily/|^python|^rank|^read|^reed|^remove\\.bg/|^rest|^rss|^snapchat|^sora |^space bison|^stape/|^svn|^swcd |^taringa|^thumbor/|^track|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|abuse|advisor|agent\\b|analyzer|archive|ask jeeves/teoma|attracta|audit|bluecoat drtr|browsex|burpcollaborator|capture|catch|check\\b|checker|chrome-lighthouse|chromeframe|classifier|cloudflare|collapsify\\b|convertify|cookiehubverify/|crawl|cursor/|cypress/|dareboost|datanyze|dejaclick|detect|discovery|dmbrowser|download|exaleadcloudview|feed|firephp|foregenix|functionize|grab|hardenize\\b|headless|hotjar|httrack|hubspot marketing grader|ibisbrowser|infrawatch|insight|inspect|iplabel|java(?!;)|library|linkcheck|linktiger|mail\\.ru/|manager|manus-user/|marketgoo/|measure|monitor\\b|neustar wpm|node\\b|nutch|offbyone|openvas|optimize|pageburst|pagespeed|parser|phantomjs|pingdom|playwright|powermarks|preview|productfinder|prospectingstudio|proxy|ptst[ /]\\d|radar|readable/|retriever|rexx;|rigor|rss\\b|scrape|securityheaders|selenium|server|silktide|sindup/|sogou|sparkler/|speedcurve|spider|splash|statuscake|supercleaner|synapse|synthetic|testlocally|tools|torrent|transcoder|url|validator|virtuoso|wappalyzer|watchtowr|webglance|webkit2png|whatcms/|xtate/",ge=/bot|crawl|http|lighthouse|scan|search|spider/i,z;function me(){if(z instanceof RegExp)return z;try{z=new RegExp(fe,"i")}catch{z=ge}return z}var ye=a=>typeof a=="string"&&a!=="";function ve(a){return ye(a)&&me().test(a)}var we=ve;class X{timestamp;constructor(){this.timestamp=new Date}}class be extends X{type;testId;hypothesisId;constructor(e,t,i){super(),this.type=3,this.testId=e,this.hypothesisId=t,this.timestamp=i}}class Se extends X{type;path;constructor(e){super(),this.type=4,this.path=e}}class Ce extends X{type;cart;constructor(e){super(),this.type=5,this.cart=e}}class ie extends Error{isBot;constructor(){super(),this.isBot=!0}}function Te(a,e,t){for(const i of e.selectors){const s=a.querySelectorAll(i.cssSelector);for(let r=0;r<s.length;r++)t(e.testId,e.hypothesisId)}re(a,e,(i,s,r,o,n)=>n(s,r),t)}function U(a,e,t){for(const i of e.selectors)ne(a,e.testId,e.hypothesisId,i,t??(()=>{}));re(a,e,ne,t??(()=>{}))}function se(a){return a.urlPatterns.reduce((e,t)=>{switch(t.operator){case"contains":return e+`.*${t}.*`;case"endsWith":return e+`.*${t}`;case"startsWith":return e+`${t}.*`}},"")}function re(a,e,t,i){new MutationObserver(()=>{for(const r of e.selectors)t(a,e.testId,e.hypothesisId,r,i)}).observe(a.documentElement,{childList:!0,subtree:!0})}function ne(a,e,t,i,s){const r=a.querySelectorAll(i.cssSelector);for(let o=0;o<r.length;o++){let n=r.item(o);if(n instanceof HTMLElement&&n.dataset.shoplift!==""){n.dataset.shoplift="";for(const l of i.actions.sort(Re))n=Ie(a,i.cssSelector,n,l)}}return r.length>0&&s?(s(e,t),!0):!1}function Ie(a,e,t,i){switch(i.type){case"innerHtml":t.innerHTML=i.value;break;case"attribute":Pe(t,i.scope,i.value);break;case"css":Ae(a,e,i.value);break;case"js":ke(a,t,i);break;case"copy":return Ee(t);case"remove":xe(t);break;case"move":_e(t,parseInt(i.value));break}return t}function Pe(a,e,t){a.setAttribute(e,t)}function Ae(a,e,t){const i=a.createElement("style");i.innerHTML=`${e} { ${t} }`,a.getElementsByTagName("head")[0]?.appendChild(i)}function ke(a,e,t){Function("document","element",`"use strict"; ${t.value}`)(a,e)}function Ee(a){const e=a.cloneNode(!0);if(!a.parentNode)throw"Can't copy node outside of DOM";return a.parentNode.insertBefore(e,a.nextSibling),e}function xe(a){a.remove()}function _e(a,e){if(e===0)return;const t=Array.prototype.slice.call(a.parentElement.children).indexOf(a),i=Math.min(Math.max(t+e,0),a.parentElement.children.length-1);a.parentElement.children.item(i).insertAdjacentElement(e>0?"afterend":"beforebegin",a)}function Re(a,e){return oe(a)-oe(e)}function oe(a){return a.type==="copy"||a.type==="remove"?0:1}
8const M={Template:0,UrlRedirect:2,Script:3,Price:5},De="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",Ve="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%200L7.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 Oe(a){let e=a.replace(/-/g,"+").replace(/_/g,"/");for(;e.length%4;)e+="=";const t=atob(e),i=Uint8Array.from(t,o=>
8o.charCodeAt(0)),s=new Blob([i]).stream().pipeThrough(new DecompressionStream("gzip")),r=await new Response(s).text();return JSON.parse(r)}function F(a,e){return typeof e=="string"&&/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+(?:Z|[+-]\d+)/.test(e)?new Date(e):e}function ee(a,e){return e}function q(a,e=!1,t=!1,i=","){const s=a/100;if(t){const o=Math.round(s).toLocaleString("en-US");return i!==","?o.replace(/,/g,i):o}else{const r=e?",":".",o=s.toFixed(2).split("."),n=parseInt(o[0],10),l=o[1]??"00",c=n.toLocaleString("en-US");return i!==","?`${c.replace(/,/g,i)}${r}${l}`:e?`${c.replace(/,/g,".")}${r}${l}`:`${c}${r}${l}`}}function H(a,e,t,i){const s=e.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} ${t}`:s}function ae(a){return a.replace(/[^\d.,\s-]/g,"").trim()}function j(a){const e=new Map;for(const[t,i,s]of a.variants)e.set(t,{priceInCents:i,compareAtPriceInCents:s});return e}function Le(a,e,t,i){const{priceInCents:s,compareAtPriceInCents:r}=t,{moneyFormat:o,currency:n,currencyCodeEnabled:l}=i;if(a.getAttribute("data-sl-attribute-p")===e)a.innerHTML=H(s,o,n,l);else if(a.getAttribute("data-sl-attribute-cap")===e)r<=0||r<=s?a.remove():a.innerHTML=H(r,o,n,l);else if(a.getAttribute("data-sl-attribute-discount")===e&&!(r<=0||r<=s)){const d=Math.round((r-s)/r*100),u=ae(H(r-s,o,n,!1)),h=a.getAttribute("data-sl-format")||"percent";h==="percent"?a.textContent=`-${d}%`:h==="amount"?a.textContent=`-${u}`:h==="both"&&(a.textContent=`-${d}% (-${u})`)}}function $e(a){const e=[],t={id:"url-pattern",operator:"contains",value:"/"};for(const[i,s,r]of a.variants){e.push({id:`p-${i}`,cssSelector:`[data-sl-attribute-p="${i}"]`,urlPatterns:[t],actions:[{id:`p-action-${i}`,type:"innerHtml",scope:"price",value:H(s,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]});const o=r<=0||r<=s;if(e.push({id:`cap-${i}`,cssSelector:`[data-sl-attribute-cap="${i}"]`,urlPatterns:[t],actions:[{id:`cap-action-${i}`,type:o?"remove":"innerHtml",scope:"compare-at-price",value:o?"":H(r,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]}),!o&&r>s){const n=Math.round((r-s)/r*100),l=ae(H(r-s,a.moneyFormat,a.currency,!1));e.push({id:`d-${i}`,cssSelector:`[data-sl-attribute-discount="${i}"]`,urlPatterns:[t],actions:[{id:`d-action-${i}`,type:"js",scope:null,value:`var format = element.getAttribute('data-sl-format') || 'percent'; if (format === 'percent') { element.textContent = '-${n}%'; } else if (format === 'amount') { element.textContent = '-${l}'; } else if (format === 'both') { element.textContent = '-${n}% (-${l})'; }`}]})}}return e}const Me=a=>{let e=5381;for(let t=0;t<a.length;t++)e=(e*33^a.charCodeAt(t))>>>0;return e.toString(36)},qe=()=>Math.random().toString(36).slice(2,10)+Date.now().toString(36).slice(-4),He=a=>btoa(JSON.stringify(a)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""),K=a=>a.replace(/#slr-[a-z0-9]+$/,""),tt="modulepreload",it=function(a){return"/"+a},st={},Ne=function(e,t,i){let s=Promise.resolve();function r(o){const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=o,window.dispatchEvent(n),!n.defaultPrevented)throw o}return s.then(o=>{for(const n of o||[])n.status==="rejected"&&r(n.reason);return e().catch(r)})};function le(a,e,t){const i=t?a.plans.filter(c=>!c.variantId||c.variantId===t):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 o=e?s:r,n=e?r:s;if(t)for(const c of a.plans)for(const d of[c.existingShopifyPlanId,c.createdShopifyPlanId])d&&!o.includes(d)&&!n.includes(d)&&n.push(d);const l={};for(let c=0;c<n.length;c++){const d=n[c],u=o[c];d&&u&&(l[d]=u)}return{showPlanIds:o,hidePlanIds:n,swapMap:l}}function ce(a,e,t){const i=e?a.plans.find(r=>r.variantId===e):void 0;if(i)return i.direction;if(t){const r=a.plans.find(o=>o.productId===t);if(r)return r.direction}return a.plans.find(r=>!r.variantId)?.direction??null}function J(a,e){const t=e?a.plans.filter(r=>!r.productId||r.productId===e):a.plans,i={};for(const r of t)i[r.existingShopifyPlanId]=r.existingDiscountAmount,i[r.createdShopifyPlanId]=r.existingDiscountAmount;
8const s=Math.max(...Object.values(i),0);return{discountMap:i,maxDiscount:s}}function W(a){const e=document.querySelector('form[action*="/cart/add"] input[name="product-id"]')?.value;if(e)return e;if(a){for(const r of Array.from(document.querySelectorAll("[data-sl-attribute-p]"))){const o=r.getAttribute("data-sl-attribute-p");if(!o)continue;const n=a.variants.find(l=>l[0]===o);if(n?.[3])return n[3]}const s=document.querySelector('form[action*="/cart/add"] input[name="id"]')?.value;if(s){const r=a.variants.find(o=>o[0]===s);if(r?.[3])return r[3]}}const t=window,i=t.ShopifyAnalytics?.meta?.product?.id??t.meta?.product?.id;return i!=null?String(i):null}function D(a,e){return a.widget.selectors[e]??[]}function N(a,e){return a.replace(/[\d.]+%/,`${e}%`)}function $(a,e){const t=document.createTreeWalker(a,NodeFilter.SHOW_TEXT);let i=t.nextNode();for(;i;){if(i.nodeValue!==null){const s=e(i.nodeValue);if(s!==i.nodeValue){i.nodeValue=s;return}}i=t.nextNode()}}function de(a,e){return a===null?!1:a==="decrease"?!e:e}async function Ue(a){if(a.subscriptionSwapDone)return;const e=a.getActiveAssignment();if(!e)return;const t=a.getHypothesis(e.hypothesisId);if(!t?.subscriptionData)return;a.subscriptionSwapDone=!0;const i=t.subscriptionData,s=t.isControl,r=[...new Set(i.plans.map(d=>d.direction))].join(",");a.log(`[SUB-SWAP] ${s?"A":"B"} side, directions=${r}`);const o=i.plans.some(d=>d.variantId);let n=!1,l=!1;function c(){if(!l){l=!0;try{const d=o?document.querySelector("select[name='id'], input[name='id']")?.value:void 0,{showPlanIds:u,hidePlanIds:h,swapMap:p}=le(i,s,d);a.swapMap=p;const b=D(i,"widgetParent"),E=D(i,"subscriptionPlans"),S=D(i,"subscriptionInput");if(!b.length||!E.length||!S.length)return;const C=document.querySelector(b[0].selector);if(!C?.shadowRoot)return;const _=C.shadowRoot.querySelector(E[0].selector);if(!_?.shadowRoot)return;const T=S[0].selector;let m=null;if(i.widget.widgetType==="buttons"||i.widget.widgetType==="radio"){const y=Array.from(_.shadowRoot.querySelectorAll(T));if(!y.length)return;for(const v of y){const g=v.closest("label");g&&(u.includes(v.value)?g.style.display="":h.includes(v.value)&&(g.style.display="none"))}const w=y.some(v=>u.includes(v.value)&&v.checked),I=y.some(v=>h.includes(v.value)&&v.checked);if((w||I)&&(n=!1),!w&&!n){n=!0;for(const v of y)if(u.includes(v.value)){v.closest("label")?.click(),v.dispatchEvent(new Event("change",{bubbles:!0}));break}}const f=y.find(v=>v.checked);m=f&&u.includes(f.value)?f.value:u[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(I=>u.includes(I.value));w&&(y.value=w.value,y.dispatchEvent(new Event("change",{bubbles:!0})))}m=u.includes(y.value)?y.value:u[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}}}if(a.subscriptionHideWrongPlans=c,a.swapMap=le(i,s).swapMap,c(),o){const d=document.querySelector("select[name='id'], input[name='id']");d&&d.addEventListener("change",c)}}function B(a){const e=D(a,"widgetParent");return e.length?document.querySelector(e[0].selector)?.shadowRoot??null:null}function Y(a,e){const t=D(a,"subscriptionPlans");return t.length?e.querySelector(t[0].selector)?.shadowRoot??null:null}function Z(a,e){const t=new URLSearchParams(window.location.search).get("variant");if(t)return t;{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,e){return H(a,e.moneyFormat,e.currency,e.currencyCodeEnabled)}function Fe({originalFetch:a,swapMap:e,slptValue:t,getSelectedPlanId:i,log:s}){if(window.fetch.__shoplift_intercepted)return s("[SUB-INTERCEPT] already installed â skipping"),()=>{};function r(n){if(i){const l=i();if(l)return e[l]??l}return e[n]??n}const o=function(n,l){if((typeof n=="string"?n:n instanceof URL?n.href:n.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==="")&&t&&l.body.set("properties[_slpt]",t)}
8else if(typeof l.body=="string"){const d=JSON.parse(l.body);if(d.items)for(const u of d.items){const h=String(u.selling_plan??"");h?u.selling_plan=r(h):!u.selling_plan&&t&&(u.properties||(u.properties={}),u.properties._slpt=t)}else if(d.id){const u=String(d.selling_plan??"");u?d.selling_plan=r(u):!d.selling_plan&&t&&(d.properties||(d.properties={}),d.properties._slpt=t)}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,n,l)};return o.__shoplift_intercepted=!0,window.fetch=o,function(){window.fetch===o&&(window.fetch=a)}}function Be({log:a}){if(window.fetch.__shoplift_intercepted)return a("[SUB-PREVIEW-BLOCK] already installed â skipping"),()=>{};const e=window.fetch,t=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"}}))):e.call(window,i,s)};return t.__shoplift_intercepted=!0,window.fetch=t,function(){window.fetch===t&&(window.fetch=e)}}function pe({data:a,runUpdates:e,debounceMs:t=150}){let i=null;function s(){i&&clearTimeout(i),e(),i=setTimeout(e,t)}let r=null;const o=[],n={childList:!0,subtree:!0,characterData:!0,attributes:!0};function l(h){for(const p of o)p.disconnect();o.length=0;for(const p of Array.from(h.querySelectorAll("*")))if(p.shadowRoot){const b=new MutationObserver(s);b.observe(p.shadowRoot,n),o.push(b)}}function c(){const h=B(a);return h?(r&&r.disconnect(),l(h),r=new MutationObserver(p=>{p.some(b=>b.type==="childList"&&b.addedNodes.length>0)&&l(h),s()}),r.observe(h,n),!0):!1}const d=document.body||document.documentElement,u=new MutationObserver(()=>{c()&&s()});return u.observe(d,{childList:!0,subtree:!0}),c()&&s(),e(),function(){i&&(clearTimeout(i),i=null),u.disconnect(),r&&(r.disconnect(),r=null);for(const p of o)p.disconnect();o.length=0}}async function ze(a){if(a.subscriptionPriceDone)return;const e=a.getActiveAssignment(),t=e?a.getHypothesis(e.hypothesisId):void 0,i=t?.subscriptionData?null:a.findActiveSubscriptionTestControl(),s=t?.subscriptionData?t:i?.hypothesis;if(!s?.subscriptionData)return;const r=t?.subscriptionData?e.testId:i.testId;a.subscriptionPriceDone=!0;const o=s.subscriptionData,n=s.isControl,l=s.priceData,c=o.widget.widgetType;let d=W(l),u=J(o,d),h=u.discountMap,p=u.maxDiscount;function b(){const g=W(l);g!==d&&(d=g,u=J(o,d),h=u.discountMap,p=u.maxDiscount,a.log(`[SUB-PRICE] scope refreshed side=${n?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${p}`))}a.log(`[SUB-PRICE] side=${n?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${p}`),a.updatePriceTestHiddenInputs(r,n?"control":"variant",!1);function E(){if(!l)return null;const g=j(l),P=Z(g),A=ce(o,P,d);if(!de(A,n))return null;const k=P?g.get(P):void 0;return k?{formattedVariantPrice:G(k.priceInCents,l),formattedDiscounted:G(k.priceInCents*(1-p/100),l)}:null}Fe({originalFetch:a.fetch,swapMap:a.swapMap??{},slptValue:a.slptValue??void 0,log:a.log,getSelectedPlanId:()=>{const g=B(o);if(!g)return null;const P=Y(o,g);if(!P)return null;const A=D(o,"subscriptionInput"),k=A.length?A[0].selector:'input[name="rc_plan"]';return P.querySelector(`${k}:checked`)?.value??null}});function S(g){const P=D(o,"subscriptionDiscount");for(const A of P)if(A.selector.includes("badge")||A.selector.includes("__badge")){const k=g.querySelector(A.selector);k?.textContent&&!k.textContent.includes(`${p}%`)&&$(k,x=>N(x,p))}}function C(g){const P=E();if(!P)return;const A=D(o,"subscriptionCompareAt");for(const k of A){const x=g.querySelector(k.selector)||g.querySelector(`[part~="${k.selector}"]`);x?.textContent&&!x.textContent.includes(P.formattedVariantPrice)&&$(x,R=>/\d/.test(R)?P.formattedVariantPrice:R)}}function _(g,P){const A=D(o,"subscriptionCompareAt"),k=P===0?"none":"";for(const x of A){const R=g.querySelector(x.selector)||g.querySelector(`[part~="${x.selector}"]`);R&&(k==="none"?R.style.display!=="none"&&(R.style.display="none"):R.style.display==="none"&&(R.style.display=""))}}function T(g){const P=D(o,"subscriptionInput"),A=P.length?P[0].selector:'input[name="rc_plan"]',k=D(o,"subscriptionPlanDiscount"),x=k.length?k[0].selector:".rc-plans-button__discount";for(const R of Array.from(g.querySelectorAll("label"))){const O=R.querySelector(A),V=R.querySelector(x);
8if(O&&V){const L=h[O.value];if(L!==void 0){if(L===0)V.style.display!=="none"&&(V.style.display="none");else if(V.style.display==="none"&&(V.style.display=""),V.textContent){const Q=V.textContent.match(/[\d.]+%/)?.[0];Q&&Q!==`${L}%`&&$(V,et=>N(et,L))}}}}}function m(g){const P=g.querySelector("select");if(P)for(const A of Array.from(P.options)){const k=h[A.value];if(k!==void 0&&A.textContent){const x=A.textContent.match(/[\d.]+%/)?.[0];x&&x!==`${k}%`&&(A.textContent=N(A.textContent,k))}}}function y(g,P){const k=D(o,"subscriptionDiscount").filter(x=>x.selector.includes("benefit")||x.selector==="rc-benefits");for(const x of k){const R=g.querySelector(x.selector);if(R?.shadowRoot){for(const O of Array.from(R.shadowRoot.querySelectorAll("li")))if(O.textContent?.includes("Save")){const V=O;if(P===0)V.style.display!=="none"&&(V.style.display="none");else{V.style.display==="none"&&(V.style.display="");const L=O.textContent.match(/[\d.]+%/)?.[0];L&&L!==`${P}%`&&$(O,Q=>N(Q,P))}}}}}let w=!1;function I(){if(!w){w=!0;try{if(b(),d!==null&&Object.keys(h).length===0)return;const g=B(o);if(!g)return;S(g),l&&C(g);const P=Y(o,g);let A=p;if(P){const k=D(o,"subscriptionInput"),x=k.length?k[0].selector:'input[name="rc_plan"]',R=P.querySelector(`${x}:checked`);if(R){const O=h[R.value];O!==void 0&&(A=O)}c==="buttons"||c==="radio"?T(P):m(P)}_(g,A),y(g,A)}finally{w=!1}}}function f(){const g=E();if(!g)return;const P=B(o);if(!P)return;const A=D(o,"onetimeToggle"),k=A.length?A[0].selector:'input[value="onetime"]';if(!P.querySelector(k)?.checked)return;const R=D(o,"subscriptionPrice");for(const O of R){const V=P.querySelector(O.selector)||P.querySelector(`[part~="${O.selector}"]`);V?.textContent&&!V.textContent.includes(g.formattedDiscounted)&&$(V,L=>/\d/.test(L)?g.formattedDiscounted:L)}}function v(){a.subscriptionHideWrongPlans&&a.subscriptionHideWrongPlans(),I(),a.subscriptionUpdateOneTime&&a.subscriptionUpdateOneTime(),f()}pe({data:o,runUpdates:v})}async function We(a){if(a.subscriptionOneTimeDone)return;const e=a.getActiveAssignment(),t=e?a.getHypothesis(e.hypothesisId):void 0,i=!!(t?.subscriptionData&&t.priceData),s=i?null:a.findActiveSubscriptionTestControl(),r=i?t:s?.hypothesis;if(!r?.subscriptionData||!r.priceData)return;const o=i?e.testId:s.testId;a.subscriptionOneTimeDone=!0;const n=r.subscriptionData,l=r.priceData,c=j(l),d=r.isControl,u=d?"control":"variant";a.slptValue=`${o}:${u}:f`,a.updatePriceTestHiddenInputs(o,u,!1);function h(){const p=B(n);if(!p)return;const b=Z(c);if(!b)return;const E=W(l),S=ce(n,b,E);if(!de(S,d))return;const C=c.get(b);if(!C)return;const _=H(C.priceInCents,l.moneyFormat,l.currency,l.currencyCodeEnabled),T=D(n,"onetimePrice");if(!T.length)return;const m=D(n,"onetimeContainer"),y=m.length?m[0].selector:'[part~="rc-purchase-option__onetime"]',I=p.querySelector(y)??p;for(const f of T){let v=null;try{v=I.querySelector(f.selector)}catch{v=null}v??=I.querySelector(`[part~="${f.selector}"]`),v&&v.textContent&&!v.textContent.includes(_)&&$(v,g=>/\d/.test(g)?_:g)}}a.subscriptionUpdateOneTime=h,h()}async function Ge(a,e){const{subscriptionPreviewRender:t}=await Ne(async()=>{const{subscriptionPreviewRender:i}=await Promise.resolve().then(()=>Xe);return{subscriptionPreviewRender:i}},void 0);return t(a.subscriptionData,a.priceData,a.isControl,e)}function je(a,e){const t=a.widget.selectors.widgetParent??[],i=a.widget.selectors.subscriptionPlans??[],s=a.widget.selectors.subscriptionInput??[];if(!t.length||!i.length||!s.length){e("[SUB-GLOBAL-HIDE] Missing required selectors â skipping");return}const r=t[0].selector,o=i[0].selector,n=s[0].selector;let l=!1,c=null,d=!1;function u(){if(!d){d=!0;try{h()}finally{d=!1}}}function h(){const C=document.querySelector(r);if(!C?.shadowRoot)return;const _=C.shadowRoot.querySelector(o);if(!_?.shadowRoot)return;_.shadowRoot!==c&&(c=_.shadowRoot,l=!1);let T=0;if(a.widget.widgetType==="buttons"||a.widget.widgetType==="radio"){const m=Array.from(_.shadowRoot.querySelectorAll(n));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",T++)}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})),e(`[SUB-GLOBAL-HIDE] Preselected first visible plan input=${f.value}`)}const I=y.find(f=>f.checked)??y[0];
8if(I){const f=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const v of f)v.value!==I.value&&(v.value=I.value,e(`[SUB-GLOBAL-HIDE] Mirrored plan id ${I.value} to form selling_plan input`))}}else if(a.widget.widgetType==="dropdown"){const m=_.shadowRoot.querySelector("select");if(!m)return;for(const I of Array.from(m.options))a.planIds.includes(I.value)&&(I.style.display!=="none"&&(I.style.display="none"),I.disabled||(I.disabled=!0),T++);const y=Array.from(m.options).filter(I=>!a.planIds.includes(I.value)),w=y.some(I=>I.value===m.value);y.length>0&&!w&&!l&&(l=!0,m.value=y[0].value,m.dispatchEvent(new Event("change",{bubbles:!0})),e(`[SUB-GLOBAL-HIDE] Preselected first visible option=${y[0].value}`))}T>0&&e(`[SUB-GLOBAL-HIDE] Hidden ${T} B-side plan buttons`)}const p={childList:!0,subtree:!0,characterData:!0};let b=null;function E(C){b?.disconnect(),b=new MutationObserver(()=>u()),b.observe(C,p)}function S(){const C=document.querySelector(r);if(!C?.shadowRoot)return!1;u(),new MutationObserver(()=>{u();const m=C.shadowRoot.querySelector(o);m?.shadowRoot&&E(m.shadowRoot)}).observe(C.shadowRoot,p);const T=C.shadowRoot.querySelector(o);return T?.shadowRoot&&E(T.shadowRoot),!0}if(!S()){e("[SUB-GLOBAL-HIDE] Widget not in DOM yet â waiting via MutationObserver");const C=new MutationObserver(()=>{S()&&C.disconnect()});C.observe(document.body??document.documentElement,{childList:!0,subtree:!0})}}const ue="Limited preview",Ke="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.",Je=5e3;function Ye(){const a=document.createElement("div");a.id="shoplift-preview-subscription-warning";const e=document.createElement("span");e.id="shoplift-preview-subscription-warning__icon",e.setAttribute("aria-hidden","true"),e.textContent="!";const t=document.createElement("span");t.id="shoplift-preview-subscription-warning__label",t.textContent=ue;const i=document.createElement("div");i.id="shoplift-preview-subscription-warning__tooltip",i.setAttribute("role","tooltip"),i.textContent=Ke,a.appendChild(e),a.appendChild(t),a.appendChild(i),a.setAttribute("tabindex","0"),a.setAttribute("aria-describedby",i.id),a.setAttribute("aria-label",ue);let s=null;function r(){s!==null&&(clearTimeout(s),s=null)}function o(){i.classList.add("shoplift-preview-subscription-warning__tooltip--visible")}function n(){i.classList.remove("shoplift-preview-subscription-warning__tooltip--visible")}function l(){o(),r(),s=setTimeout(()=>{n(),s=null},Je)}function c(){r(),o()}function d(){s===null&&n()}a.addEventListener("mouseenter",c),a.addEventListener("mouseleave",d),a.addEventListener("focus",c),a.addEventListener("blur",d);function u(p){try{const b=p.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{}}document.addEventListener("click",u,!0);function h(){r(),document.removeEventListener("click",u,!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 he=!1;class Ze{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";shop;host;eventHost;disableReferrerOverride;legacySessionKey;cssHideClass;testConfigs;inactiveTestConfigs;hiddenSubscriptionPlans;testsFilteredByAudience;sendPageView;shopliftDebug;gaConfig;telemetryEnabled;getCountryTimeout;geoViaShopify;resolvedRegion=null;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);
8urlParams=new URLSearchParams(window.location.search);device;logHistory;activeViewportObservers=new Map;clientIdRetryCount=0;constructor(e,t,i,s,r,o,n,l,c,d,u,h,p,b=!1){this.shop=e,this.host=t,this.eventHost=i,this.disableReferrerOverride=l,this.logHistory=[],this.legacySessionKey=`SHOPLIFT_SESSION_${this.shop}`,this.cssHideClass=s?"shoplift-hide":"",this.testConfigs=u.map(S=>({...S,startAt:new Date(S.startAt),statusHistory:S.statusHistory.map(C=>({...C,createdAt:new Date(C.createdAt)}))})),this.inactiveTestConfigs=h,this.hiddenSubscriptionPlans=p,this.sendPageView=!!r,this.shopliftDebug=o===!0,this.telemetryEnabled=c===!0,this.geoViaShopify=b===!0,this.gaConfig=n!=={"sendEvents":false,"mode":"gtag"}?n:{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 E=this.getDeviceType();this.device=E!=="tablet"?E:"mobile",this.state=this.loadState(),this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.testsFilteredByAudience=u.filter(S=>
8S.status=="active"),this.getCountryTimeout=d===1000?1e3:d,window.__slReadCookie=S=>{const C=this.getCookie(S);if(C===null)return null;try{return decodeURIComponent(C)}catch{return C}},this.log("State Loaded",JSON.stringify(this.state))}deriveCategoryFromExistingTests(){if(!this.state.temporary.testCategory&&this.state.essential.visitorTests.length>0){const e=this.state.essential.visitorTests.some(t=>{if(!t.hypothesisId)return!1;const i=this.getHypothesis(t.hypothesisId);return i&&["theme","basicScript","price"].includes(i.type)});this.state.temporary.testCategory=e?"global":"conditional",this.persistTemporaryState(),this.log("Derived test category from existing visitorTests: %s",this.state.temporary.testCategory)}}async 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 o=this.urlParams.get("isShopliftMerchant")==="true";this.log("Setting merchant session to %s",o),this.state.temporary.isMerchant=o,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,we(navigator.userAgent))return;const e=Date.now(),t=!this.state.temporary.lastSeen||e-this.state.temporary.lastSeen>1800*1e3;(!this.state.temporary.entryPage||t)&&(this.state.temporary.entryPage=K(window.location.href)),this.state.temporary.lastSeen=e,this.persistTemporaryState(),window.__slEntryPage=this.state.temporary.entryPage??"";const i=this.state.essential.visitorTests.filter(o=>o.hypothesisId&&+o.createdAt>Date.now()-6e4);if(i.length===0)this.sendDiagnosticTelemetry("page-landed",null);else for(const o of i)this.sendDiagnosticTelemetry("page-landed",o.testId,{hypothesisId:o.hypothesisId,isControl:o.assignedTo==="control",testType:o.testType??"unknown"});if(navigator.userAgent.includes("Chrome/118")){this.log("Random: %o",[Math.random(),Math.random(),Math.random()]);const o=await this.makeRequest({url:`${this.eventHost}/api/v0/events/ip`,method:"get"}).then(n=>n?.json());this.log(`IP: ${o}`),this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify(this.debugState(),ee)}).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 o=this.state.temporary.originalReferrer;delete this.state.temporary.originalReferrer,this.persistTemporaryState(),Object.defineProperty(document,"referrer",{get:()=>o,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 r=this.state.essential.visitorTests.some(o=>(o.hypothesisId?this.getHypothesis(o.hypothesisId):void 0)?.subscriptionData!=null)||Object.values(this.state.temporary.testReservations??{}).some(o=>this.getHypothesis(o.hypothesisId)?.subscriptionData!=null);this.hiddenSubscriptionPlans&&!r&&(this.log(`[SUB-GLOBAL] Visitor not in subscription test â hiding ${this.hiddenSubscriptionPlans.planIds.length} B-side plans`),je(this.hiddenSubscriptionPlans,o=>this.log(o))),await this.subscriptionSwap(),await this.subscriptionOneTimePrice(),await this.subscriptionPriceChange(),await this.finalize(),console.log("SHOPLIFT SCRIPT INITIALIZED!")}catch(e){if(e instanceof ie)return;throw e}finally{typeof window.shoplift!="object"&&this.setShopliftStub()}}getVariantColor(e){switch(e){case"a":return{text:"#141414",bg:"#E2E2E2"};case"b":return{text:"rgba(255, 255, 255, 1)",bg:"rgba(37, 99, 235, 1)"}}}getDefaultVariantTitle(e){return e.title?e.title:e.type==="price"?e.isControl?"Original prices":"Variant prices":e.isControl?"Original":"Untitled variant "+e.label.toUpperCase()}
8async initPreview(){const e=this.urlParams.get("previewConfig");if(e){this.state.temporary.previewConfig=void 0,this.log("Setting up the preview"),this.log("Found preview config, writing to temporary state");const t=await Oe(e);if(this.state.temporary.previewConfig=t,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 o=await this.makeJsonRequest({method:"get",url:r}).catch(n=>(this.log("Error getting domSelectors",n),null));if(s.variants.forEach(n=>n.domSelectors=o[n.id]?.domSelectors),s.isDraft){const n=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/subscription-preview`,l=await this.makeJsonRequest({method:"get",url:n}).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 t=this.state.temporary.previewConfig;if(t.testTypeCategory===M.Template&&this.handleTemplatePreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.UrlRedirect&&this.handleUrlPreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.Script&&this.handleScriptPreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.Price){const i=await this.handlePricePreview(t);t.isDraft?await this.handleSubscriptionPricePreview(t):await this.handleSubscriptionLivePreview(t),i&&this.initPreviewControls(t)}}}initPreviewControls(e){document.addEventListener("DOMContentLoaded",()=>{const t=e.variants.find(b=>b.id===e.currentVariant),i=t?.label||"a",s=e.variants,r=document.createElement("div");r.id="shoplift-preview-control";const o=document.createElement("div"),n=document.createElement("img");n.src=Ve,n.height=24,n.width=14,o.style.padding="0 16px",o.style.lineHeight="100%",o.appendChild(n),r.appendChild(o);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 u=document.createElement("span");if(u.id="shoplift-preview-variant-title",u.innerText=t?this.getDefaultVariantTitle(t):"Untitled variant "+i.toUpperCase(),c.appendChild(u),s.length>1){const b=document.createElement("img");b.src=De,b.width=12,b.height=12,b.style.height="12px",b.style.width="12px",c.appendChild(b);const E=document.createElement("div");E.className="preview-variant-menu";for(const S of e.variants.filter(C=>C.id!==e.currentVariant)){const C=document.createElement("div");C.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(),C.appendChild(_);const T=document.createElement("span");T.innerText=this.getDefaultVariantTitle(S),C.appendChild(T),C.addEventListener("click",()=>{this.pickVariant(S.id)}),E.appendChild(C)}l.appendChild(E),c.addEventListener("click",()=>{E.className!=="preview-variant-menu preview-variant-menu__visible"?E.classList.add("preview-variant-menu__visible"):E.classList.remove("preview-variant-menu__visible")}),document.addEventListener("click",S=>{S.target instanceof Element&&!c.contains(S.target)&&E.className==="preview-variant-menu preview-variant-menu__visible"&&E.classList.remove("preview-variant-menu__visible")})}else c.style.pointerEvents="none",d.style.margin="0";if(l.appendChild(c),r.appendChild(l),e.hasSubscription){this.subscriptionPreviewWarningCleanup?.();const b=Ye();r.appendChild(b.root),this.subscriptionPreviewWarningCleanup=b.cleanup}const h=document.createElement("div"),p=document.createElement("button");p.id="shoplift-exit-preview-button",p.innerText="Exit",h.appendChild(p),p.addEventListener("click",()=>{this.exitPreview()}),r.appendChild(h),document.body.appendChild(r),requestAnimationFrame(()=>{r.classList.add("visible")})}),this.ensureCartAttributesForExistingPriceTests(!0)}pickVariant(e){if(this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig,i=new URL(window.location.toString());if(t.testTypeCategory===M.UrlRedirect){const s=t.variants.find(r=>r.id===t.currentVariant)?.redirectUrl;if(i.pathname===s){const r=t.variants.find(o=>o.id===e)?.redirectUrl;r&&(i.pathname=r)}}if(t.testTypeCategory===M.Template){const s=t.variants.find(r=>r.id===t.currentVariant)?.pathName;if(s&&i.pathname===s){const r=t.variants.find(o=>o.id===e)?.pathName;r&&r!==s&&(i.pathname=r)}}t.currentVariant=e,this.persistTemporaryState(),this.queueRedirect(i)}}exitPreview(){const e=new URL(window.location.toString());if(this.state.temporary.previewConfig?.testTypeCategory===M.Template&&e.searchParams.delete("view"),this.state.temporary.previewConfig?.testTypeCategory===M.Script&&e.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(e.pathname)&&s&&(e.pathname=s)}this.state.temporary.isMerchant=!1,e.searchParams.delete("isShopliftMerchant"),this.state.temporary.previewConfig=void 0,this.persistTemporaryState(),this.subscriptionPreviewWarningCleanup?.(),this.subscriptionPreviewWarningCleanup=null,this.hidePage(),this.queueRedirect(e)}handleTemplatePreview(e){const t=e.currentVariant,i=e.variants.find(l=>l.id===t);if(!i)return!1;const s=e.variants.find(l=>l.isControl);if(!s)return!1;this.log("Setting up template preview for type",s.type);
8const r=new URL(window.location.toString()),o=r.searchParams.get("view"),n=i.type===s.type;return!n&&!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&&n&&o!==(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)),o!==null&&o!==(i.affix||"__DEFAULT__")&&(r.searchParams.delete("view"),this.hidePage(),this.queueRedirect(r)),!0)}handleUrlPreview(e){const t=e.currentVariant,i=e.variants.find(o=>o.id===t),s=e.variants.find(o=>o.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(e){const t=e.currentVariant,i=e.variants.find(o=>o.id===t);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(e){const t=e.currentVariant,i=e.variants.find(s=>s.id===t);return i?(this.log("Setting up price preview"),i.domSelectors&&i.domSelectors.length>0&&(U(document,{testId:e.testId,hypothesisId:i.id,selectors:i.domSelectors}),this.ensureCartAttributesForExistingPriceTests(!0)),!0):!1}async handleSubscriptionPricePreview(e){const t=e.variants.find(i=>i.id===e.currentVariant);t?.subscriptionData&&(this.log("Setting up subscription price preview"),await Ge({id:t.id,isControl:t.isControl,subscriptionData:t.subscriptionData,priceData:t.priceData},(i,...s)=>this.log(i,...s)))}async handleSubscriptionLivePreview(e){this.testConfigs.find(s=>s.id===e.testId)?.hypotheses.find(s=>s.id===e.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 e=await this.getCartState();e!==null&&this.queueCartUpdate(e),this.pruneStateAndSave(),await this.syncAllEvents()}setShoplift(){this.log("Setting up public API");const t=this.urlParams.get("slVariant")==="true",i=t?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:async s=>{if(this.log("Script checking variant for hypothesis '%s'",s),t)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(n=>n.hypotheses.some(l=>l.id===s));if(!r)return this.log("No test found for hypothesis '%s'",s),!1;const o=this.state.essential.visitorTests.find(n=>n.testId===r.id);return o?(this.log("Active visitor test found",s),o.hypothesisId===s):(await this.manuallySplitVisitor(r),this.testConfigs.some(n=>n.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:o,...n}=s;return n})})}}setShopliftStub(){this.log("Setting up stubbed public API");const t=this.urlParams.get("slVariant")==="true",i=t?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:s=>Promise.resolve(t||s===i),setAnalyticsConsent:()=>Promise.resolve(),getVisitorData:()=>({visitor:null,visitorTests:[]})}}async manuallySplitVisitor(e){this.log("Starting manual split for test '%s'",e.id),await this.handleVisitorTest([e]);const t=this.getReservationForTest(e.id);t&&!t.isRealized&&t.entryCriteriaKey&&(this.log("Realizing manual API reservation for test '%s'",e.id),this.realizeReservationForCriteria(t.entryCriteriaKey)),this.saveState(),this.syncAllEvents()}async handleVisitorTest(e){await this.filterTestsByAudience(this.testConfigs,this.state.analytics.visitor??this.buildBaseVisitor(),this.state.essential.visitorTests),this.pruneStaleVisitorTests(),this.deriveC
8ategoryFromExistingTests(),this.clearStaleReservations();let t=e?e.filter(i=>this.testsFilteredByAudience.some(s=>s.id===i.id)):[...this.testsForUrl(this.testsFilteredByAudience),...this.domTestsForUrl(this.testsFilteredByAudience)];try{if(t.length===0)return this.log("No tests found"),!1;this.log("Checking for existing visitor test on page");const i=this.getCurrentVisitorHypothesis(t);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,u=c.length,h=d+u,p=Math.random()*h;this.state.temporary.testCategory=p<d?"global":"conditional",this.log("Category dice roll: rolled %.2f of %d (global weight: %d, conditional weight: %d), selected '%s'",p,h,d,u,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 o=this.state.temporary.testCategory;if(this.log("Visitor test category: %s",o),o==="global"){const l=this.testsFilteredByAudience.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)));for(const c of l)this.markTestAsBlocked(c,"category:global");t=t.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");t=t.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)))}if(t.length===0)return this.log("No tests remaining after category filter"),!1;this.createReservations(t);const n=this.getReservationForCurrentPage();if(n&&!n.isRealized){const l=this.getHypothesis(n.hypothesisId);if(l){l.type!=="price"&&this.realizeReservationForCriteria(n.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 e=this.getDomTestsForCurrentUrl(),t=this.getVisitorDomHypothesis(e);for(const i of e){this.log("Evaluating dom test '%s'",i.id);const s=i.hypotheses.some(p=>p.type==="price");if(this.state.essential.visitorTests.find(p=>p.testId===i.id&&p.isInvalid&&!p.hypothesisId)){if(this.log("Visitor is blocked from test '%s', applying control prices if price test",i.id),s){const p=i.hypotheses.find(b=>b.isControl);p?.priceData&&(this.applyPriceTestWithMapLookup(i.id,p,[p],()=>{this.log("Control prices applied for blocked visitor, no metrics tracked")}),this.updatePriceTestHiddenInputs(i.id,"control",!1))}continue}const o=this.getReservationForTest(i.id);let n=null,l=!1;const c=t.find(p=>i.hypotheses.some(b=>p.id===b.id));if(o)n=this.getHypothesis(o.hypothesisId)??null,this.log("Using reserved hypothesis '%s' for test '%s'",o.hypothesisId,i.id);else if(c)n=c,this.log("Using existing hypothesis assignment for test '%s'",i.id);else if(s){const p=this.visitorActiveTestTypeWithReservations();p?(l=!0,this.log("Visitor already in test type '%s', treating as non-test for price test '%s'",p,i.id)):n=this.pickHypothesis(i)}else n=this.pickHypothesis(i);if(l&&s){const p=i.hypotheses.find(b=>b.isControl);p?.priceData&&(this.log("Applying control prices for non-test visitor on price test '%s' (Map-based)",i.id),this.applyPriceTestWithMapLookup(i.id,p,[p],()=>{this.log("Control prices applied for non-test visitor, no metrics tracked")}
8),this.updatePriceTestHiddenInputs(i.id,"control",!1));continue}if(!n){this.log("Failed to pick hypothesis for test");continue}this.sendDiagnosticTelemetry("assignment",i.id,{hypothesisId:n.id,isControl:n.isControl,testType:n.type});const d=i.bayesianRevision??4,u=n.type==="price",h=d>=5;if(u&&h){if(this.log(`Price test with Map-based lookup (v${d}): ${i.id}`),!n.priceData){this.log("No price data for hypothesis '%s', skipping",n.id);continue}const p=n.isControl?"control":"variant";this.log(`Setting up Map-based price test for ${p} (test: ${i.id})`),this.applyPriceTestWithMapLookup(i.id,n,i.hypotheses,b=>{const E=this.getReservationForTest(b);E&&!E.isRealized&&E.entryCriteriaKey?this.realizeReservationForCriteria(E.entryCriteriaKey):this.queueAddVisitorToTest(b,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(u&&!h){this.log(`Price test without viewport tracking (v${d}): ${i.id}`);const p=this.getDomSelectorsForHypothesis(n);if(p.length===0)continue;U(document,{testId:i.id,hypothesisId:n.id,selectors:p},b=>{this.queueAddVisitorToTest(b,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(!n.domSelectors||n.domSelectors.length===0){this.log("No selectors found, skipping hypothesis");continue}U(document,{testId:i.id,hypothesisId:n.id,selectors:n.domSelectors},p=>{this.queueAddVisitorToTest(p,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()})}}considerRedirect(e){if(this.log("Considering redirect for hypothesis '%s'",e.id),e.isControl)return this.log("Skipping redirect for control"),!1;if(e.type==="basicScript"||e.type==="manualScript")return this.log("Skipping redirect for script test"),!1;const t=this.state.essential.visitorTests.find(o=>o.hypothesisId===e.id),i=new URL(window.location.toString()),r=new URLSearchParams(window.location.search).get("view");if(e.type==="theme"){if(!(e.themeId===themeId)){if(this.log("Theme id '%s' is not hypothesis theme ID '%s'",e.themeId,themeId),this.isAppProxyPath())return this.log("On App Proxy path, skipping theme redirect to avoid infinite loop"),!1;if(t&&t.themeId!==e.themeId&&(t.themeId===themeId||!this.isThemePreview()))this.log("On old theme, redirecting and updating local visitor"),t.themeId=e.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(e.type!=="dom"&&e.type!=="price"&&e.affix!==template.suffix&&e.affix!==r||e.redirectPath&&!i.pathname.endsWith(e.redirectPath))return this.log("Hiding page to redirect for template test"),this.hidePage(),!0;return this.log("Not redirecting"),!1}redirect(e){if(this.log("Redirecting to hypothesis '%s'",e.id),e.isControl)return;const t=new URL(window.location.toString());if(t.searchParams.delete("view"),e.redirectPath){const n=RegExp("^(/w{2}-w{2})/").exec(t.pathname);if(n&&n.length>1){const l=n[1];t.pathname=`${l}${e.redirectPath}`}else t.pathname=e.redirectPath}else e.type==="theme"?(t.searchParams.set("_ab","0"),t.searchParams.set("_fd","0"),t.searchParams.set("_sc","1"),t.searchParams.set("preview_theme_id",e.themeId.toString())):e.type!=="urlRedirect"&&t.searchParams.set("view",e.affix);const i=this.state.essential.visitorTests.find(n=>n.hypothesisId===e.id)?.testId,s=t.pathname+t.search,r=window.location.pathname+window.location.search,o=K(t.hash);if(i&&s!==r&&!o){const n=qe(),l=He({v:2,t:i,n,fh:Me(window.location.pathname+window.location.search)});t.hash=`slr-${n}`;const c=new Date(Date.now()+3e4).toUTCString();document.cookie=`shoplift_redirect=${l};domain=.${window.location.hostname};path=/;SameSite=Strict;expires=${c}`}s===r&&this.showPage(),this.queueRedirect(t)}async refreshVisitor(e){if(e===null||!this.state.essential.isFirstLoad||!this.testConfigs.some(i=>i.visitorOption!=="all"))return;this.log("Refreshing visitor"),this.hidePage();const t=await this.getVisitor(e);t&&t.id&&this.updateLocalVisitor(t)}buildBaseVisitor(){return{shopifyAnalyticsId:this.shopifyAnalyticsId,device:this.device,country:null,...this.state.essential.initialState}}getInitialState(){const e=this.getUTMValue("utm_source")??"",t=this.getUTMValue("utm_medium")??"",i=this.getUTMValue("utm_campaign")??"",s=this.getUTMValue("utm_content")??"",r=window.document.referrer,o=this.device;return{createdAt:new Date,utmSource:e,utmMedium:t,utmCampaign:i,utmContent:s,referrer:r,device:o}}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(e=>e.isThemeTest&&e.hypothesisId!=null&&this.getHypothesis(e.hypothesisId)&&e.themeId===themeId)?(this.log("On active theme test, remov
8ing theme bar"),this.clearThemeBar(!1,!0,this.state),!1):this.state.essential.visitorTests.some(e=>e.isThemeTest&&e.hypothesisId!=null&&!this.getHypothesis(e.hypothesisId)&&e.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(e=>e.hypotheses.some(t=>t.themeId===themeId))?(this.log("Current theme is an inactive theme test, redirecting to main theme"),this.redirectToMainTheme(),!0):this.testConfigs.some(e=>e.hypotheses.some(t=>t.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 e=new URL(window.location.toString());e.searchParams.set("preview_theme_id",""),this.queueRedirect(e)}testsForUrl(e){const t=new URL(window.location.href),i=this.typeFromTemplate();return e.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&&t.pathname.endsWith(r.redirectPath)||r.type==="basicScript"))&&(s.ignoreTestViewParameterEnforcement||!t.searchParams.has("view")||s.hypotheses.map(r=>r.affix).includes(t.searchParams.get("view")??"")))}domTestsForUrl(e){const t=new URL(window.location.href);return e.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(se(r)).test(K(t.toString())))))}async filterTestsByAudience(e,t,i){const s=[],r=e.some(n=>(n.requiresRegion||this.geoViaShopify&&n.requiresCountry)&&!i.some(l=>l.testId===n.id));this.resolvedRegion===null&&r&&(this.log("Hiding page to wait for Shopify region resolution"),this.hidePage(),await this.waitForResolvedRegion()),window.__slRegion=this.resolvedRegion??"";let o=t.country;this.geoViaShopify?o=this.resolvedRegion?this.resolvedRegion.slice(0,2):o:!o&&e.some(n=>n.requiresCountry&&!i.some(l=>l.testId===n.id))&&(this.log("Hiding page to check geoip"),this.hidePage(),o=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 e){if(this.log("Checking audience for test '%s'",n.id),this.state.essential.visitorTests.some(d=>d.testId===n.id&&d.hypothesisId==null)){console.log(`Skipping blocked test '${n.id}'`);continue}const l=this.visitorCreatedDuringTestActive(n.statusHistory);(i.some(d=>d.testId===n.id&&(n.device==="all"||n.device===t.device&&n.device===this.device))||this.isTargetAudience(n,t,l,o))&&(this.log("Visitor is in audience for test '%s'",n.id),s.push(n))}this.testsFilteredByAudience=s}async waitForResolvedRegion(e=1500,t=50){const i=Date.now();for(;this.resolvedRegion===null&&Date.now()-i<e;)await new Promise(s=>window.setTimeout(s,t))}isTargetAudience(e,t,i,s){const r=this.getChannel(t);return(e.device==="all"||e.device===t.device&&e.device===this.device)&&(e.visitorOption==="all"||e.visitorOption==="new"&&i||e.visitorOption==="returning"&&!i)&&(e.targetAudiences.length===0||e.targetAudiences.reduce((o,n)=>o||n.reduce((l,c)=>l&&c(t,i,r,s),!0),!1))}visitorCreatedDuringTestActive(e){let t="";for(const i of e){if(this.state.analytics.visitor!==null&&this.state.analytics.visitor.createdAt<i.createdAt||this.state.essential.initialState.createdAt<i.createdAt)break;t=i.status}return t==="active"}getDomTestsForCurrentUrl(){return this.domTestsForUrl(this.testsFilteredByAudience)}getCurrentVisitorHypothesis(e){return e.flatMap(t=>t.hypotheses).find(t=>t.type!=="dom"&&t.type!=="price"&&this.state.essential.visitorTests.some(i=>i.hypothesisId===t.id))}getVisitorDomHypothesis(e){return e.flatMap(t=>t.hypotheses).filter(t=>(t.type==="dom"||t.type==="price")&&this.state.essential.visitorTests.some(i=>i.hypothesisId===t.id))}getHypothesis(e){return this.testConfigs.filter(t=>t.hypotheses.some(i=>i.id===e)).map(t=>t.hypotheses.find(i=>i.id===e))[0]}getActiveAssignment(){if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig;return t.currentVariant&&t.testId?{testId:t.testId,hypothesisId:t.currentVariant}:null}const e=this.state.essential.visitorTests.find(t=>t.hypothesisId);return e?.hypothesisId?{testId:e.testId,hypothesisId:e.hypothesisId}:null}findActiveSubscriptionTestControl(){for(const e of this.testConfigs){const t=e.hypotheses.find(i=>i.isControl);if(t?.subscriptionData)return{testId:e.id,hypothesis:t}}return null}getDomSelectorsForHypothesis(e){if(!e)return[];if(e.domSelectors&&e.domSelectors.length>0)return e.domSelectors;if(e.priceData){const t=`${this.priceSelectorsSessionKey}_${e.id}`;try{const s=sessionStorage.getItem(t);if(s){const r=JSON.parse(s);return e.domSelectors=r,this.log("Loaded %d price selectors from cache for hypothesis '%s'",r.length,e.id),r}}catch{}const i=$e(e.priceData);e.domSelectors=i;try{sessionStorage.setItem(t,JSON.stringify(i)),this.log("Generated and cached %d price selectors for hypothesis '%s'",i.length,e.id)}catch{this.log("Generated %d price selectors for hypothesis '%s' (cache unavailable)",i.length,e.id)}return i}return[]}hasThemeTest(e){return e.some(t=>t.hypotheses.some(i=>i.type==="theme"))}hasTestThatIsNotThemeTest(e){return e.some(t=>t.hypotheses.some(i=>i.type!=="theme"&&i.type!=="dom"&&i.type!=="price"))}hasThemeAndOtherTestTypes(e){return this.hasThemeTest(e)&&this.hasTestThatIsNotThemeTest(e)}testIsPaused(e){return e.status==="paused"||e.status==="incompatible"||e.status==="suspended"}visitorActiveTestType(){const e=this.state.essential.visitorTests.filter(t=>this.testConfigs.some(i=>i.hypotheses.some(s=>s.id==t.hypothesisId)));return e.length===0?null:e.some(t=>t.isThemeTest)?"theme":"templateOrUrlRedirect"}getReservationType(e){return e==="price"||this.isTemplateTestType(e)?"deferred":"immediate"}isTemplateTestType(e){return["product","collection","landing","index","cart","search","blog","article","collectionList"].includes(e)}getEntryCriteriaKey(e){const t=e.hypotheses.find(i=>i.isControl);if(!t)return`unknown:${e.id}`;switch(t.type){case"theme":return"global:theme";case"basicScript":return"global:autoApi";case"price":return"global:price";case"manualScript":return`conditional:manualApi:${e.id}`;case"urlRedirect":return`conditional:url:${t.redirectPath||"unknown"}`;default:return`conditional:template:${t.type}`}}isGlobalEntryCriteria(e){return e.startsWith("global:")}groupTestsByEntryCriteria(e){const t=new Map;for(const i of e){const s=this.getEntryCriteriaKey(i),r=t.get(s)||[];r.push(i),t.set(s,r)}return t}doesCurrentPageMatchEntryCriteria(e){if(this.isGlobalEntryCriteria(e))return!0;
8if(e==="conditional:manualApi")return!1;if(e.startsWith("conditional:url:")){const t=e.replace("conditional:url:","");return window.location.pathname.endsWith(t)}if(e.startsWith("conditional:template:")){const t=e.replace("conditional:template:","");return this.typeFromTemplate()===t}return!1}hasActiveReservation(){const e=this.getActiveReservations();return Object.values(e).some(t=>!t.isRealized)}getActiveReservation(){const e=this.getActiveReservations();return Object.values(e).find(t=>!t.isRealized)??null}clearStaleReservations(){const e=this.state.temporary.testReservations;if(!e)return;let t=!1;for(const[i,s]of Object.entries(e)){const r=this.testConfigs.find(n=>n.id===s.testId);if(!r){this.log("Test '%s' no longer in config, clearing reservation for criteria '%s'",s.testId,i),delete e[i],t=!0;continue}if(r.status!=="active"){this.log("Test '%s' status is '%s', clearing reservation for criteria '%s'",s.testId,r.status,i),delete e[i],t=!0;continue}this.testsFilteredByAudience.some(n=>n.id===s.testId)||(this.log("Visitor no longer passes audience for test '%s', clearing reservation for criteria '%s'",s.testId,i),delete e[i],t=!0)}t&&this.persistTemporaryState()}createReservations(e){if(this.state.temporary.testReservations||(this.state.temporary.testReservations={}),this.state.temporary.rolledEntryCriteria||(this.state.temporary.rolledEntryCriteria=[]),this.state.temporary.testCategory==="global"){this.createSingleReservation(e,"global");return}const i=e.filter(n=>this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(n))),s=e.filter(n=>!this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(n)));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(n=>({id:n.id,title:n.title,criteria:this.getEntryCriteriaKey(n)})));const r=`conditional:current-page:${this.typeFromTemplate()}`;if(i.length>0&&!this.state.temporary.rolledEntryCriteria.includes(r)){this.createSingleReservation(i,r);for(const n of i){const l=this.getEntryCriteriaKey(n);this.state.temporary.rolledEntryCriteria.includes(l)||this.state.temporary.rolledEntryCriteria.push(l)}}const o=this.groupTestsByEntryCriteria(s);for(const[n,l]of o){if(this.state.temporary.rolledEntryCriteria.includes(n)){this.log("Already rolled for criteria '%s', skipping",n);continue}if(l.some(S=>this.state.essential.visitorTests.some(C=>C.testId===S.id))){this.log("Visitor already has VT for criteria '%s', skipping",n),this.state.temporary.rolledEntryCriteria.push(n);continue}const d=[...l].sort((S,C)=>S.id.localeCompare(C.id));this.log("Test dice roll for criteria '%s' - available tests: %o",n,d.map(S=>({id:S.id,title:S.title})));const u=Math.floor(Math.random()*d.length),h=d[u];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",u+1,l.length,h.id,h.title);const p=this.pickHypothesis(h);if(!p){this.log("No hypothesis picked for test '%s'",h.id);continue}this.sendDiagnosticTelemetry("assignment",h.id,{hypothesisId:p.id,isControl:p.isControl,testType:p.type});const b=this.getReservationType(p.type),E={testId:h.id,hypothesisId:p.id,testType:p.type,reservationType:b,isThemeTest:p.type==="theme",themeId:p.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:n};this.state.temporary.testReservations[n]=E,this.state.temporary.rolledEntryCriteria.push(n),this.log("Created %s reservation for test '%s' (criteria: %s)",b,h.id,n);for(const S of l)S.id!==h.id&&this.markTestAsBlocked(S,n)}this.persistTemporaryState()}createSingleReservation(e,t){if(this.state.temporary.rolledEntryCriteria.includes(t)){this.log("Already rolled for pool '%s', skipping",t);return}if(e.some(u=>this.state.essential.visitorTests.some(h=>h.testId===u.id&&!h.isInvalid))){this.log("Visitor already has VT for pool '%s', skipping",t),this.state.temporary.rolledEntryCriteria.push(t);return}if(e.length===0){this.log("No tests in pool '%s'",t);return}const s=[...e].sort((u,h)=>u.id.localeCompare(h.id));this.log("Test dice roll for pool '%s' - available tests: %o",t,s.map(u=>({id:u.id,title:u.title,criteria:this.getEntryCriteriaKey(u)})));const r=Math.floor(Math.random()*s.length),o=s[r];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",r,e.length,o.id,o.title);const n=this.pickHypothesis(o);if(!n){this.log("No hypothesis picked for test '%s'",o.id);return}this.sendDiagnosticTelemetry("assignment",o.id,{hypothesisId:n.id,isControl:n.isControl,testType:n.type});const l=this.getReservationType(n.type),c=this.getEntryCriteriaKey(o),d={testId:o.id,hypothesisId:n.id,testType:n.type,reservationType:l,isThemeTest:n.type==="theme",themeId:n.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:c};this.state.temporary.testReservations[c]=d,this.state.temporary.rolledEntryCriteria.push(t),this.log("Created %s reservation for test '%s' from pool '%s' (criteria: %s)",l,o.id,t,c);for(const u of e)u.id!==o.id&&this.markTestAsBlocked(u,`pool:${t}`);this.persistTemporaryState()}markTestAsBlocked(e,t){this.state.essential.visitorTests.some(i=>i.testId===e.id)||(this.log("Blocking visitor from test '%s' (reason: %s)",e.id,t),this.state.essential.visitorTests.push({createdAt:new Date,testId:e.id,hypothesisId:null,isThemeTest:e.hypotheses.some(i=>
8i.type==="theme"),shouldSendToGa:!1,isSaved:!0,isInvalid:!0,themeId:void 0}))}realizeReservationForCriteria(e){const t=this.state.temporary.testReservations?.[e];if(!t)return this.log("No reservation found for criteria '%s'",e),!1;if(t.isRealized)return this.log("Reservation already realized for criteria '%s'",e),!1;if(this.state.essential.visitorTests.some(s=>s.testId===t.testId&&!s.isInvalid))return this.log("Visitor already assigned to test '%s'",t.testId),!1;const i=this.getHypothesis(t.hypothesisId);return i?(t.isRealized=!0,this.persistTemporaryState(),this.queueAddVisitorToTest(t.testId,i),this.saveState(),this.log("Realized reservation for test '%s' (criteria: %s)",t.testId,e),!0):(this.log("Hypothesis '%s' not found",t.hypothesisId),!1)}getActiveReservations(){return this.state.temporary.testReservations??{}}getReservationForCurrentPage(){const e=this.getActiveReservations();for(const[t,i]of Object.entries(e)){if(i.isRealized)continue;const s=this.testConfigs.find(r=>r.id===i.testId);if(!(!s||s.status!=="active")&&this.doesCurrentPageMatchEntryCriteria(t))return i}return null}getReservationForTest(e){const t=this.getActiveReservations();return Object.values(t).find(i=>i.testId===e)??null}getReservationTestType(){const e=this.getActiveReservations(),t=Object.values(e);if(t.length===0)return null;for(const i of t)if(i.isThemeTest)return"theme";for(const i of t)if(i.testType==="price")return"price";return t.some(i=>!i.isRealized)?"templateOrUrlRedirect":null}hasPriceTests(e){return e.some(t=>t.hypotheses.some(i=>i.type==="price"))}_priceTestProductIds=null;getPriceTestProductIds(){if(this._priceTestProductIds)return this._priceTestProductIds;const e=new Set;for(const t of this.testConfigs)for(const i of t.hypotheses)if(i.type==="price"){for(const s of i.domSelectors||[]){const r=s.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);r?.[1]&&e.add(r[1])}if(i.priceData?.variants)for(const[s]of i.priceData.variants)e.add(s)}return this._priceTestProductIds=e,this.log("Built price test product ID cache with %d products",e.size),e}isProductInAnyPriceTest(e){return this.getPriceTestProductIds().has(e)}visitorActiveTestTypeWithReservations(){const e=this.getActiveReservations();for(const r of Object.values(e)){if(r.isThemeTest)return"theme";if(r.testType==="price")return"price"}if(Object.values(e).some(r=>!r.isRealized)){if(this.state.temporary.testCategory==="global")for(const o of Object.values(e)){if(o.testType==="theme")return"theme";if(o.testType==="price")return"price";if(o.testType==="basicScript")return"theme"}return"templateOrUrlRedirect"}const i=this.state.essential.visitorTests.filter(r=>!r.isInvalid&&this.testConfigs.some(o=>o.hypotheses.some(n=>n.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 e=this.testConfigs.filter(s=>s.status==="active"&&s.hypotheses.some(r=>r.type==="price"));if(e.length===0)return;const t=this.testsFilteredByAudience.filter(s=>s.hypotheses.some(r=>r.type==="price")),i=e.filter(s=>!t.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),o=this.getDomSelectorsForHypothesis(r);if(o.length===0){this.log("No control selectors for audience-filtered price test '%s'",s.id);continue}const n=new URL(window.location.href);o.some(c=>{try{return new RegExp(se(c)).test(K(n.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:o},()=>{}),this.updatePriceTestHiddenInputs(s.id,"control",!1))}}}pickHypothesis(e){let t=Math.random();const i=e.hypotheses.reduce((r,o)=>r+o.visitorCount,0);return e.hypotheses.sort((r,o)=>r.isControl?o.isControl?0:-1:o.isControl?1:0).reduce((r,o)=>{if(r!==null)return r;const l=e.hypotheses.reduce((c,d)=>c&&d.visitorCount>20,!0)?o.visitorCount/i-o.trafficPercentage:0;return t<=o.trafficPercentage-l?o:(t-=o.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(e){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(e),0),window.setTimeout(()=>{this.syncAllEvents()},2e3)}scheduleRetrySync(){this.clientIdRetryCount>=5||(this.clientIdRetryCount++,window.setTimeout(()=>{this.syncAllEvents()},500))}async syncAllEvents(){const e=async()=>
8{if(this.isSyncing){window.setTimeout(()=>{(async()=>await e())()},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 e()}async syncEvents(){if(!this.state.essential.consentApproved||!this.shopifyAnalyticsId||this.state.analytics.queue.length===0)return;const e=this.state.analytics.queue.length,t=this.state.analytics.queue.splice(0,e);this.log("Syncing %s events",e);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 be(r.testId,r.hypothesisId,r.createdAt)).concat(t)};await this.sendEvents(i);for(const r of this.state.essential.visitorTests.filter(o=>!o.isInvalid&&!o.isSaved&&o.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(o=>!o.isInvalid&&!o.isSaved))r.isSaved=!0,r.savedAt=Date.now()}catch{this.state.analytics.queue.splice(0,0,...t)}finally{this.saveState()}}syncGAEvents(){if(!this.gaConfig.sendEvents){if(he)return;he=!0,this.log("UseGtag is false â skipping GA Events");return}if(this.isSyncingGA){this.log("Already syncing GA - skipping GA events");return}const e=this.state.essential.visitorTests.filter(t=>t.shouldSendToGa);e.length!==0&&(this.isSyncingGA=!0,this.log("Syncing %s GA Events",e.length),Promise.allSettled(e.map(t=>this.sendGAEvent(t))).then(()=>this.log("All gtag events sent")).finally(()=>this.isSyncingGA=!1))}sendGAEvent(e){return new Promise(t=>{this.log("Sending GA Event for test %s, hypothesis %s",e.testId,e.hypothesisId);const i=()=>{this.log("GA acknowledged event for hypothesis %s",e.hypothesisId),e.shouldSendToGa=!1,this.persistEssentialState(),t()},s={exp_variant_string:`SL-${e.testId}-${e.hypothesisId}`};
8this.shopliftDebug&&Object.assign(s,{debug_mode:!0});function r(o,n,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(e){let t;({visitorTests:t,...this.state.analytics.visitor}=e),this.log("updateLocalVisitor - server returned %d tests: %o",t.length,t.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)&&!t.some(o=>o.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 t){const r=this.state.essential.visitorTests.findIndex(n=>n.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 n=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,n?.hypothesisId,s.hypothesisId,n?.isInvalid),s.isInvalid=!1,s.shouldSendToGa=n?.shouldSe
8ndToGa??!1,s.testType=n?.testType,s.assignedTo=n?.assignedTo,s.testTitle=n?.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(e){try{return await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/by-key/${this.shop}/${e}`})}catch{return null}}async sendEvents(e){await this.makeRequest({method:"post",url:`${this.eventHost}/api/v0/events`,data:JSON.stringify(e)})}sendDiagnosticTelemetry(e,t,i){if(!this.telemetryEnabled||!navigator.sendBeacon)return;const s=this.state.essential.consentApproved,r=JSON.stringify({shop:this.shop,testId:t,checkpoint:e,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(e){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]===e)return r[1]||null}return null}hidePage(e){this.log("Hiding page"),this.cssHideClass&&!window.document.documentElement.classList.contains(this.cssHideClass)&&(window.document.documentElement.classList.add(this.cssHideClass),e||setTimeout(this.removeAsyncHide(this.cssHideClass),2e3))}showPage(){this.cssHideClass&&this.removeAsyncHide(this.cssHideClass)()}getDeviceType(){function e(){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 )|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}function t(){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 )|
8sy(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 e()?"mobile":t()?"tablet":"desktop"}removeAsyncHide(e){return()=>{e&&window.document.documentElement.classList.remove(e)}}async getCartState(){try{let e=await this.makeJsonRequest({method:"get",url:`${window.location.origin}/cart.js`});return e===null||(e.note===null&&(e=await this.makeJsonRequest({method:"post",url:`${window.location.origin}/cart/update.js`,data:JSON.stringify({note:""})})),e==null)?null:{token:e.token,total_price:e.total_price,total_discount:e.total_discount,currency:e.currency,items_subtotal_price:e.items_subtotal_price,items:e.items.map(t=>({quantity:t.quantity,variant_id:t.variant_id,key:t.key,price:t.price,final_line_price:t.final_line_price,sku:t.sku,product_id:t.product_id}))}}catch(e){return this.log("Error sending cart info",e),null}}ensureCartAttributesForExistingPriceTests(e){try{if(this.log("Checking visitor assignments for active price tests"),e&&this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig;this.log("Using preview config for merchant:",t.testId);let i="variant";if(t.variants&&t.variants.length>0){const s=t.variants.find(r=>r.id===t.currentVariant);s&&s.isControl&&(i="control")}this.log("Merchant preview - updating hidden inputs:",t.testId,i),this.updatePriceTestHiddenInputs(t.testId,i,!0);return}for(const t of this.state.essential.visitorTests){const i=this.testConfigs.find(o=>o.id===t.testId);if(!i){this.log("Test config not found:",t.testId);continue}const s=i.hypotheses.find(o=>o.id===t.hypothesisId);if(!s||s.type!=="price")continue;const r=s.isControl?"control":"variant";this.log("Updating hidden inputs for price test:",t.testId,r),this.updatePriceTestHiddenInputs(t.testId,r,e)}}catch(t){this.log("Error ensuring cart attributes for existing price tests:",t)}}subscriptionSwapDone=!1;subscriptionHideWrongPlans=null;subscriptionPriceDone=!1;subscriptionUpdateOneTime=null;subscriptionOneTimeDone=!1;swapMap=null;slptValue=null;async subscriptionSwap(){await Ue(this)}async subscriptionPriceChange(){await ze(this)}async subscriptionOneTimePrice(){await We(this)}updatePriceTestHiddenInputs(e,t,i){try{this.cleanupPriceTestObservers();const s=`${e}:${t}:${i?"t":"f"}`,r=T=>{const m=T.getAttribute("data-sl-pid");if(!m)return!0;if(i&&this.state.temporary.previewConfig){const w=this.state.temporary.previewConfig,I=t==="control"?"a":"b",f=w.variants.find(v=>v.label===I);if(!f)return!1;for(const v of f.domSelectors||[]){const g=v.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);if(g){const P=g[1];if(this.log(`Extracted ID from selector: ${P}, comparing to: ${m}`),P===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:",I),!1}const y=this.testConfigs.find(w=>w.id===e);if(!y)return this.log("Test config not found for testId:",e),!1;for(const w of y.hypotheses||[]){for(const I of w.domSelectors||[]){const f=I.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:",e),!0}if(w.priceData?.variants){for(const I of w.priceData.variants)if(I[0]===m)return this.log("Product ID match found in priceData:",m,"for test:",e),!0}}return this.log("No product ID match for:",m,"in test:",e),!1},o=new Set;let n=!1,l=null;const c=(T,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{T.observe(w,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0,attributes:!1})}catch(I){this.log(`Failed to observe element (${m}):`,I)}}),document.body&&document.body.isConnected)try{T.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=(T,m,y,w)=>{const I=T.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: ${T.length}, filtered: ${I.length}`),I.length>0&&U(document,{testId:e,hypothesisId:m,selectors:I})},u=(T,m)=>{this.log(`Applying DOM selector changes for product ID: ${T}`),m.disconnect(),n=!0;try{if(i&&this.state.temporary.previewConfig){const y=t==="control"?"a":"b",w=this.state.temporary.previewConfig.variants.find(I=>I.label===y);if(!w?.domSelectors){this.log(`No DOM selectors found for preview variant: ${y}`);return}d(w.domSelectors,w.id,"preview config",T)}else{const y=this.testConfigs.find(I=>I.id===e);if(!y){this.log(`No test config found for testId: ${e}`);return}const w=y.hypotheses.find(I=>t==="control"?I.isControl:!I.isControl);if(!w?.domSelectors){this.log(`No DOM selectors found for assignment: ${t}`);return}d(w.domSelectors,w.id,"live config",T)}}finally{l!==null&&clearTimeout(l),l=window.setTimeout(()=>{n=!1,l=null,c(m,"reconnection"),this.log("Re-established innerHTML observer after DOM changes")}
8,50)}},h=new MutationObserver(T=>{if(!n)for(const m of T){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,I=w.getAttribute("data-sl-attribute-p");for(;!I&&w.parentElement;)w=w.parentElement,I=w.getAttribute("data-sl-attribute-p");if(!I)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="${I}"`),v&&this.log(`Previous content: "${v}"`),this.log(`Current content: "${f}"`),u(I,h)}});c(h,"initial setup"),o.add(h);const p=new MutationObserver(T=>{T.forEach(m=>{m.addedNodes.forEach(y=>{if(y.nodeType===Node.ELEMENT_NODE){const w=y;E(w);const I=w.matches('input[name="properties[_slpt]"]')?[w]:w.querySelectorAll('input[name="properties[_slpt]"]');I.length>0&&this.log(`MutationObserver found ${I.length} new hidden input(s)`),I.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))}})}})})});o.add(p);const b=new MutationObserver(T=>{T.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,I=m.oldValue,f=w.getAttribute("data-sl-pid");this.log(`data-sl-pid changed from "${I}" 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&&u(f,h),this.log("Re-running payment placement updates after variant change"),E(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))}}})});o.add(b);const E=T=>{T.tagName==="SHOPIFY-PAYMENT-TERMS"&&(this.log("MutationObserver found new shopify-payment-terms element"),this.updateShopifyPaymentTerms(e,t));const m=T.querySelectorAll("shopify-payment-terms");m.length>0&&(this.log(`MutationObserver found ${m.length} shopify-payment-terms in added node`),this.updateShopifyPaymentTerms(e,t)),T.tagName==="AFTERPAY-PLACEMENT"&&(this.log("MutationObserver found new afterpay-placement element"),this.updateAfterpayPlacements(e,t,"afterpay"));const y=T.querySelectorAll("afterpay-placement");y.length>0&&(this.log(`MutationObserver found ${y.length} afterpay-placement in added node`),this.updateAfterpayPlacements(e,t,"afterpay")),T.tagName==="SQUARE-PLACEMENT"&&(this.log("MutationObserver found new square-placement element"),this.updateAfterpayPlacements(e,t,"square"));const w=T.querySelectorAll("square-placement");w.length>0&&(this.log(`MutationObserver found ${w.length} square-placement in added node`),this.updateAfterpayPlacements(e,t,"square")),T.tagName==="KLARNA-PLACEMENT"&&(this.log("MutationObserver found new klarna-placement element"),this.updateKlarnaPlacements(e,t));const I=T.querySelectorAll("klarna-placement");I.length>0&&(this.log(`MutationObserver found ${I.length} klarna-placement in added node`),this.updateKlarnaPlacements(e,t))},S=T=>{b.observe(T,{attributes:!0,attributeFilter:["data-sl-pid"],attributeOldValue:!0,subtree:!1});const m=T.getAttribute("data-sl-pid");this.log(`Started AttributeObserver on specific input with data-sl-pid="${m}"`)},C=()=>{const T=document.querySelectorAll('input[name="properties[_slpt]"]');this.log(`Found ${T.length} existing hidden inputs to check`),T.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"),u(y,h)),S(m)):y&&this.isProductInAnyPriceTest(y)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",
8y):(m.remove(),this.log("Removed non-matching hidden input for product ID:",y))})},_=()=>{document.body?(p.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver on document.body"),C(),E(document.body)):document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{document.body&&(p.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver after DOMContentLoaded"),C(),E(document.body))}):(this.log("Set timeout on observer"),setTimeout(_,10))};_(),window.__shopliftPriceTestObservers=o,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(e,t){this.updatePlacementElements(e,t,"klarna-placement",(i,s)=>{i.setAttribute("data-purchase-amount",s.toString())})}cleanupPriceTestObservers(){const e=window.__shopliftPriceTestObservers;e&&(e.forEach(t=>{t.disconnect()}),e.clear(),this.log("Cleaned up existing price test observers")),delete window.__shopliftPriceTestObservers,delete window.__shopliftPriceTestValue}updateAfterpayPlacements(e,t,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(e,t,s,(o,n)=>{if(i==="afterpay"){const l=(n/100).toFixed(2);o.setAttribute("data-amount",l)}else o.setAttribute("data-amount",n.toString())}),this.log("updateAfterpayPlacements completed")}updatePlacementElements(e,t,i,s){const r=document.querySelectorAll(i);if(r.length===0){this.log(`No ${i} elements found - early return`);return}let o;if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const l=t==="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}o=c.domSelectors,this.log(`Using preview config for ${i} in merchant mode, variant: ${l}`)}else{const l=this.testConfigs.find(d=>d.id===e);if(!l){this.log(`No testConfig found for id: ${e} - early return`);return}
8const c=l.hypotheses.find(d=>t==="control"?d.isControl:!d.isControl);if(!c?.domSelectors){this.log(`No hypothesis or domSelectors found for assignment: ${t} - early return`);return}o=c.domSelectors}const n=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 u=c.getAttribute("data-sl-pid");if(!u){this.log("Hidden input has no data-sl-pid attribute - skipping");return}const h=o.find(S=>{const C=S.cssSelector.match(n);return C&&C[1]===u});if(!h){this.log(`No matching selector found for productId: ${u} - skipping element`);return}const p=h.actions.find(S=>S.scope==="price");if(!p?.value){this.log("No price action or value found - skipping element");return}const b=parseFloat(p.value.replace(/[^0-9.]/g,""));if(Number.isNaN(b)){this.log(`Invalid price "${p.value}" for product ${u} - skipping`);return}const E=Math.round(b*100);s(l,E)}),this.log(`updatePlacementElements completed for ${i}`)}updateShopifyPaymentTerms(e,t){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 o=t==="control"?"a":"b",n=this.state.temporary.previewConfig.variants.find(l=>l.label===o);if(!n||!n.domSelectors){this.log(`No variant found for label ${o} in preview config`);return}s=n.domSelectors,this.log(`Using preview config for shopify-payment-terms in merchant mode, variant: ${o}`)}else{const o=this.testConfigs.find(l=>l.id===e);if(!o)return;const n=o.hypotheses.find(l=>t==="control"?l.isControl===!0:l.isControl===!1);if(!n||!n.domSelectors)return;s=n.domSelectors}const r=new RegExp(`${this.DATA_SL_ATTRIBUTE_P}=["'](\\d+)["']`);i.forEach(o=>{const n=o.getAttribute("variant-id");if(!n)return;const l=s.find(c=>{const d=c.cssSelector.match(r);return d&&d[1]===n});if(l){const c=l.actions.find(d=>d.scope==="price");if(c&&c.value){const d=o.getAttribute("shopify-meta");if(d)try{const u=JSON.parse(d);if(u.variants&&Array.isArray(u.variants)){const h=u.variants.find(p=>p.id?.toString()===n);if(h){h.full_price=c.value;const p=parseFloat(c.value.replace(/[^0-9.]/g,""));if(h.number_of_payment_terms&&h.number_of_payment_terms>1){const b=p/h.number_of_payment_terms;h.price_per_term=`$${b.toFixed(2)}`}o.setAttribute("shopify-meta",JSON.stringify(u))}}}catch(u){this.log("Error parsing/updating shoplift-meta:",u)}}}})}async makeJsonRequest(e){const t=await this.makeRequest(e);return t===null?null:JSON.parse(await t.text(),F)}async makeRequest(e){const{url:t,method:i,headers:s,data:r,signal:o}=e,n=new Headers;if(s)for(const c in s)n.append(c,s[c]);(!s||!s.Accept)&&n.append("Accept","application/json"),(!s||!s["Content-Type"])&&n.append("Content-Type","application/json"),(this.eventHost.includes("ngrok.io")||this.eventHost.includes("ngrok-free.app"))&&n.append("ngrok-skip-browser-warning","1234");const l=await this.fetch(t,{method:i,headers:n,body:r,signal:o});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 ie}throw new Error(`Error sending shoplift request ${l.status}`)}return l}queueAddVisitorToTest(e,t){if(this.state.essential.visitorTests.some(s=>s.testId===e))return;const i=this.testConfigs.find(s=>s.id===e);if(this.state.essential.visitorTests.push({createdAt:new Date,testId:e,hypothesisId:t.id,isThemeTest:t.type==="theme",themeId:t.themeId,isSaved:!1,isInvalid:!1,shouldSendToGa:!0,testType:t.type,assignedTo:t.isControl?"control":"variant",testTitle:i?.title}),t.type==="price"){const s=t.isControl?"control":"variant";this.log("Price test assignment detected, updating cart attributes:",e,s),this.updatePriceTestHiddenInputs(e,s,!1)}}queueCartUpdate(e){this.queueEvent(new Ce(e))}queuePageView(e){this.queueEvent(new Se(e))}queueEvent(e){!this.state.essential.consentApproved&&this.state.essential.hasConsentInteraction||this.state.analytics.queue.length>10||this.state.analytics.queue.push(e)}legacyGetLocalStorageVisitor(){const e=this.localStorageGet(this.legacySessionKey);if(e)try{return JSON.parse(e,F)}catch{}return null}pruneStaleVisitorTests(){this.state.essential.visitorTests=this.state.essential.visitorTests.filter(e=>this.testConfigs.some(t=>t.id==e.testId)||this.inactiveTestConfigs.filter(t=>this.testIsPaused(t)).some(t=>t.id===e.testId))}pruneStateAndSave(){this.pruneStaleVisitorTests(),this.saveState()}saveState(){this.persistEssentialState(),this.persistAnalyticsState()}loadState(){const e=this.loadAnalyticsState(),t={analytics:e,essential:this.loadEssentialState(e),temporary:this.loadTemporaryState()},i=this.legacyGetLocalStorageVisitor(),s=this.legacyGetCookieVisitor(),r=[i,s].filter(o=>o!==null).sort((o,n)=>+n.storedAt-+o.storedAt)[0];return t.analytics.visitor===null&&r&&({visitorTests:t.essential.visitorTests,...t.analytics.visitor}=r,t.essential.isFirstLoad=!1,t.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)),!t.essential.consentApproved&&t.essential.hasConsentInteraction&&this.deleteLocalStorage(this.analyticsSessionKey),t}loadEssentialState(e){const t=this.loadLocalStorage(this.essentialSessionKey),i=this.loadCookie(this.essentialSessionKey),s=this.getInitialState();e.visitor?.device&&(s.device=e.visitor.device);const r={timestamp:new Date,consentApproved:!1,hasConsentInteraction:!1,debugMode:!1,initialState:s,visitorTests:[],isFirstLoad:!0},o=[t,i].filter(n=>n!==null).sort((n,l)=>+l.timestamp-+n.timestamp)[0]??r;return o.initialState||(e.visitor!==null?o.initialState=e.visitor:(o.initialState=s,o.initialState.createdAt=o.timestamp)),o}loadAnalyticsState(){const e=this.loadLocalStorage(this.analyticsSessionKey),t=this.loadCookie(this.analyticsSessionKey),i={timestamp:new Date,visitor:null,queue:[]},s=[e,t].filter(r=>r!==null).sort((r,o)=>+o.timestamp-+r.timestamp)[0]??i;return s.queue.length===0&&e&&e.queue.length>1&&(s.queue=e.queue),s}loadTemporaryState(){const e=this.sessionStorageGet(this.temporarySessionKey),t=e?JSON.parse(e,F):null,i=this.loadCookie(this.temporarySessionKey);return t??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.persist
8CookieState(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(e){const t=this.localStorageGet(e);if(t===null)return null;try{return JSON.parse(t,F)}catch{return null}}loadCookie(e){const t=this.getCookie(e);if(t===null)return null;try{return JSON.parse(t,F)}catch{return null}}persistLocalStorageState(e,t){this.localStorageSet(e,JSON.stringify(t))}persistCookieState(e,t,i=!1){const s=JSON.stringify(t),r=i?"":`expires=${new Date(new Date().getTime()+864e5*365).toUTCString()};`;document.cookie=`${e}=${s};domain=.${window.location.hostname};path=/;SameSite=Strict;${r}`}deleteCookie(e){const t=new Date(0).toUTCString();document.cookie=`${e}=;domain=.${window.location.hostname};path=/;expires=${t};`}deleteLocalStorage(e){window.localStorage.removeItem(e)}getChannel(e){return[{"name":"cross-network","test":(v) => new RegExp(".*cross-network.*", "i").test(v.utmCampaign)},{"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|y
8andex\.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|kakao|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\.o
8pera\.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) => 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)}
8,{"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
8akao|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
8andex\.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(e))?.name??"other"}getShopifyAnalyticsId(){const e=this.getCookie("_shopify_y");if(e)return e;try{const t=this.localStorageGet("Shoplift_ClientId");if(t)return t}catch{}return null}legacyGetCookieVisitor(){const e=this.getCookie("SHOPLIFT");return e===null?null:JSON.parse(e,F)}getCookie(e){const t=this.cookie.split("; ").filter(i=>i.split("=").at(0)===e).at(0);return t===void 0?null:t.split("=").slice(1).join("=")}monitorConsentChange(){document.addEventListener("visitorConsentCollected",e=>{(async()=>await this.onConsentChange(e.detail.analyticsAllowed,!0))()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>this.loadShopifyConsentApiWithRetry()):this.loadShopifyConsentApiWithRetry()}loadShopifyConsentApiWithRetry(){let e=0;const t=()=>{this.loadShopifyConsentApi()||e++<10&&window.setTimeout(t,100)};t()}loadShopifyConsentApi(){if(window.Shopify){this.log("Loading Shopify features");const e=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"),t=window.setTimeout(()=>{(async()=>await e())()},1e3);return}if(this.geoViaShopify){const s=window.Shopify.customerPrivacy.getRegion?.();this.resolvedRegion=typeof s=="string"?s.replace(/-/g,""):""}const i=window.Shopify.customerPrivacy.getTrackingConsent();await this.onConsentChange(window.Shopify.customerPrivacy.analyticsProcessingAllowed(),i==="yes")};let t=window.setTimeout(()=>{(async()=>await e())()},5e3);return window.Shopify.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],i=>{(async()=>{if(window.clearTimeout(t),i){this.log("Error loading consent tracking",i);return}await e()})()}),!0}return!1}async onConsentChange(e,t){try{if(this.log("Consent change detected",e,t),this.state.essential.consentApproved=e,this.state.essential.hasConsentInteraction=t,!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(),this.saveState(),await this.syncAllEvents()}catch(i){this.log("Error syncing on consent change",i)}}isThemePreview(){return isThemePreview||themeRole!=="main"}isAppProxyPath(){const e=["/apps/","/tools/","/a/"],t=window.location.pathname;return e.some(i=>t.startsWith(i))}clearThemeBar(e,t,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(o=>(this.log("Found theme bar"),t&&(this.log("Removing theme bar"),o.remove()),e?this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify({...this.debugState(),stateAtEvaluation:s},ee)}):Promise.resolve(null)))).catch(r=>console.error(r))}waitForElement(e,t){return new Promise(i=>{const s=document.querySelector(t);if(s){i(s);return}const r=new MutationObserver(o=>{const n=document.querySelector(t);if(n){r.disconnect(),i(n);return}});r.observe(e??document.documentElement,{childList:!0})})}setDebug(e){this.state.essential.debugMode=e,this.saveState()}log(e,...t){let i=0;const s=e.replace(/%[sdoOfF]/g,r=>{if(i>=t.length)return r;const o=t[i++];return r==="%o"||r==="%O"?JSON.stringify(o):String(o)});this.logHistory.push(`[${new Date().toISOString()}][SL] ${s}`),!(!this.state.essential.debugMode&&!this.shopliftDebug)&&console.debug(`[SL] ${e}`,...t)}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
8:this.getCookie("is_shopify_merchant"),themeId,url:window.location.href,isThemePreview,themeRole,gaConfig:this.gaConfig},logHistory:this.logHistory}}createViewportObserver(e,t={}){const{threshold:i=this.VIEWPORT_TRACK_THRESHOLD,triggerOnce:s=!0}=t,r=new Set;return new IntersectionObserver(o=>{o.forEach(n=>{if(n.isIntersecting&&!r.has(n.target)){const l=n.target,c=l.getAttribute(this.DATA_SL_TEST_ID);c&&(e(c,l),s&&r.add(l))}})},{threshold:i})}applyChangesWithViewport(e,t,i,s){const r=t.selectorsForViewportTracking??t.selectors,o=n=>{if(this.state.essential.visitorTests.some(h=>h.testId===n)||this.activeViewportObservers.has(n))return;const l=[];if(r.forEach(h=>{e.querySelectorAll(h.cssSelector).forEach(b=>l.push(b))}),l.length===0)return;let c=!1;const d=()=>{c||(c=!0,i(n),u.disconnect(),this.activeViewportObservers.delete(n))},u=this.createViewportObserver(()=>{d()},{triggerOnce:!0,...s});this.activeViewportObservers.set(n,u),this.log(`Created viewport observer for test ${n}, observing ${l.length} elements`),l.forEach(h=>{h.setAttribute(this.DATA_SL_TEST_ID,String(n)),u.observe(h)}),setTimeout(()=>{c||l.forEach(h=>{const p=h.getBoundingClientRect(),b=s?.threshold??this.VIEWPORT_TRACK_THRESHOLD,E=Math.min(p.bottom,window.innerHeight)-Math.max(p.top,0),S=Math.min(p.right,window.innerWidth)-Math.max(p.left,0);p.top<window.innerHeight&&p.bottom>0&&p.left<window.innerWidth&&p.right>0&&E>0&&S>0&&E>=p.height*b&&(this.log(`Price element already visible in viewport for test ${n}:`,h),d())})},100)};t.selectors.length>0&&U(e,t,()=>{}),Te(e,{testId:t.testId,hypothesisId:t.hypothesisId,selectors:r},n=>{o(n)})}applyPriceTestWithMapLookup(e,t,i,s){if(!t.priceData){this.log("No price data for hypothesis '%s'",t.id);return}this.log("Hypothesis '%s' isControl=%s, priceData has %d variants",t.id,t.isControl,t.priceData.variants.length);const r=t.priceData.variants.slice(0,3);for(const[S,C,_]of r)this.log(" Sample priceData: variant=%s, price=%d, compareAt=%d",S,C,_);const o=j(t.priceData),n=new Set;for(const S of i)if(S.priceData)for(const[C]of S.priceData.variants)n.add(C);this.log("Price test Map lookup: %d products in hypothesis, %d total products to track",o.size,n.size);const l=t.priceData,c=new WeakSet;let d=!1;const u="[data-sl-attribute-p], [data-sl-attribute-cap], [data-sl-attribute-discount]",h=S=>{if(c.has(S))return;const C=S.getAttribute("data-sl-attribute-p"),_=S.getAttribute("data-sl-attribute-cap"),T=S.getAttribute("data-sl-attribute-discount"),m=C||_||T;if(!m||!n.has(m))return;c.add(S);const y=o.get(m);y&&(this.log("Applying price for product %s: %d cents (compare at: %d cents)",m,y.priceInCents,y.compareAtPriceInCents),Le(S,m,y,l),this.log("Applied price to element for product %s",m)),!d&&!this.state.essential.visitorTests.some(w=>w.testId===e)&&(S.setAttribute(this.DATA_SL_TEST_ID,String(e)),this.setupElementViewportTracking(S,e,()=>{d||(d=!0,s(e))}))},p=()=>{const S=document.querySelectorAll(u);this.log("Scanning for price elements, found: %d",S.length),S.forEach(h)},b=new MutationObserver(S=>{for(const C of S)C.type==="childList"&&C.addedNodes.forEach(_=>{if(_.nodeType===Node.ELEMENT_NODE){const T=_;(T.hasAttribute("data-sl-attribute-p")||T.hasAttribute("data-sl-attribute-cap")||T.hasAttribute("data-sl-attribute-discount"))&&h(T),T.querySelectorAll(u).forEach(h)}}),C.type==="attributes"&&C.target instanceof Element&&h(C.target)}),E=document.body||document.documentElement;b.observe(E,{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"),p(),document.readyState==="loading"&&document.addEventListener("DOMContentLoaded",()=>{this.log("DOMContentLoaded - rescanning for price elements"),p()}),setTimeout(()=>{this.log("Delayed rescan for price elements"),p()},100),setTimeout(()=>{this.log("Final rescan for price elements"),p()},500)}setupElementViewportTracking(e,t,i){const s=this.VIEWPORT_TRACK_THRESHOLD,r=e.getBoundingClientRect(),o=Math.min(r.bottom,window.innerHeight)-Math.max(r.top,0),n=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&&o>0&&n>0&&o>=r.height*s){this.log("Price element already visible for test %s",t),i();return}const c=new IntersectionObserver(d=>{for(const u of d)if(u.isIntersecting&&u.intersectionRatio>=s){this.log("Price element entered viewport for test %s",t),c.disconnect(),i();break}},{threshold:s});c.observe(e)}debug(){const e=this.debugState();console.log(JSON.stringify(e,ee,2))}}(async function(){window.shopliftInstance||(window.shopliftInstance=new Ze("bo-tee-store.myshopify.com","https://app.shoplift.ai","https://events.shoplift.ai",false,false,false,{"sendEvents":false,"mode":"gtag"}
8,false,false,1000,[],[],null,false),await window.shopliftInstance.init())})();async function Qe(a,e,t,i){const s=Be({log:i});if(t)return i("[SUB-PREVIEW] A side â no overlay applied; widget renders naturally"),s;const r=a.widget.widgetType,o=e?j(e):null;let n=W(e),l=J(a,n),c=l.discountMap,d=l.maxDiscount;function u(){const f=W(e);f!==n&&(n=f,l=J(a,n),c=l.discountMap,d=l.maxDiscount,i(`[SUB-PREVIEW] scope refreshed currentProductId=${n??"n/a"}, maxDiscount=${d}`))}i(`[SUB-PREVIEW] side=B, currentProductId=${n??"n/a"}, maxDiscount=${d}`);function h(f){if(!e||!o)return null;const v=Z(o),g=v?o.get(v):void 0;return g?{formattedVariantPrice:G(g.priceInCents,e),formattedDiscounted:G(g.priceInCents*(1-f/100),e)}:null}function p(f){const v=Y(a,f);if(!v)return d;const g=D(a,"subscriptionInput"),P=g.length?g[0].selector:'input[name="rc_plan"]',A=v.querySelector(`${P}:checked`);if(A){const k=c[A.value];if(k!==void 0)return k}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 P=f.querySelector(g.selector);P?.textContent&&!P.textContent.includes(`${d}%`)&&$(P,A=>N(A,d))}}function E(f,v){const g=h(v);if(!g)return;const P=D(a,"subscriptionCompareAt");for(const A of P){const k=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);k?.textContent&&!k.textContent.includes(g.formattedVariantPrice)&&$(k,x=>/\d/.test(x)?g.formattedVariantPrice:x)}}function S(f,v){const g=h(v);if(!g)return;const P=D(a,"subscriptionPrice");for(const A of P){const k=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);k?.textContent&&!k.textContent.includes(g.formattedDiscounted)&&$(k,x=>/\d/.test(x)?g.formattedDiscounted:x)}}function C(f){const v=D(a,"subscriptionInput"),g=v.length?v[0].selector:'input[name="rc_plan"]',P=D(a,"subscriptionPlanDiscount"),A=P.length?P[0].selector:".rc-plans-button__discount";for(const k of Array.from(f.querySelectorAll("label"))){const x=k.querySelector(g),R=k.querySelector(A);if(x&&R?.textContent){const O=c[x.value];if(O!==void 0){const V=R.textContent.match(/[\d.]+%/)?.[0];V&&V!==`${O}%`&&$(R,L=>N(L,O))}}}}function _(f){const v=f.querySelector("select");if(v)for(const g of Array.from(v.options)){const P=c[g.value];if(P!==void 0&&g.textContent){const A=g.textContent.match(/[\d.]+%/)?.[0];A&&A!==`${P}%`&&(g.textContent=N(g.textContent,P))}}}function T(f){const v=D(a,"onetimePrice");if(!v.length||!e||!o)return;const g=Z(o),P=g?o.get(g):void 0;if(!P)return;const A=G(P.priceInCents,e),k=D(a,"onetimeContainer"),x=k.length?k[0].selector:'[part~="rc-purchase-option__onetime"]',R=f.querySelector(x);if(R)for(const O of v){const V=R.querySelector(`[part~="${O.selector}"]`);V?.textContent&&!V.textContent.includes(A)&&$(V,L=>/\d/.test(L)?A:L)}}function m(f,v){const P=D(a,"subscriptionDiscount").filter(A=>A.selector.includes("benefit")||A.selector==="rc-benefits");for(const A of P){const k=f.querySelector(A.selector);if(k?.shadowRoot){for(const x of Array.from(k.shadowRoot.querySelectorAll("li")))if(x.textContent?.includes("Save")){const R=x.textContent.match(/[\d.]+%/)?.[0];R&&R!==`${v}%`&&$(x,O=>N(O,v))}}}}let y=!1;function w(){if(!y){y=!0;try{u();const f=B(a);if(!f)return;const v=p(f);b(f),E(f,v),S(f,v),T(f);const g=Y(a,f);g&&(r==="buttons"||r==="radio"?C(g):_(g)),m(f,v)}finally{y=!1}}}const I=pe({data:a,runUpdates:w});return function(){I(),s()}}const Xe=Object.freeze(Object.defineProperty({__proto__:null,subscriptionPreviewRender:Qe},Symbol.toStringTag,{value:"Module"}))})(); })("/", { suffix: "", type: "cart" }, "main", 194769650047, false)</script>
8 9<!-- End of Shoplift scripts --> 10 11 <meta charset="utf-8" /> 12 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 13 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /> 14 <meta name="author" content="By Association Only" /> 15 <meta name="theme-color" content="" /> 16 17 18 <!-- 2026-09-14T15:17:10.5091625Z --> 19<style>.shoplift-hide { opacity: 0 !important; }</style> 20<style id="sl-preview-bar-hide">#preview-bar-iframe, #PBarNextFrameWrapper { display: none !important; }</style>
21<script type="text/javascript">(function(rootPath, template, themeRole, themeId, isThemePreview){ /* Generated on 2026-09-24T18:15:03.5514838Z */(function(){"use strict";var te=document.createElement("style");te.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(te);var fe=" daum[ /]| deusu/|(?:^|[^g])news(?!sapphire)|(?<! channel/|google/)google(?!(?:wv|app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!cam)scan|(?<!lib)http|24x
217|;\\s\\w+;$|@[a-z][\\w-]+\\.|\\(\\)|\\.com\\b|\\b\\w+/1\\.0;|\\bbw/|\\bdlc\\b|\\bort/|\\bperl\\b|\\btime/|\\||^[<\\(;]|^[\\w \\.\\-\\(?:\\):%]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[\\w\\-]+/[\\w]+$|^[^ ]{50,}$|^\\d+\\b|^\\w*search\\b|^\\w+/[\\w\\(\\)]*$|^\\w+/\\d\\.\\d\\s\\([\\w@]+\\)$|^active|^ad muncher|^amaya|^apache/|^avsdevicesdk/|^azure|^biglotron|^blackbox exporter|^bot|^clamav[ /]|^claude-code/|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^email|^exodusmovement|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^igetter/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d\\s[\\w\\.-]+$|^mozilla/\\d\\.\\d\\s\\((?:compatible;)?(?:\\s?[\\w\\d-.]+\\/\\d+\\.\\d+)?\\)$|^navermailapp|^netsurf|^offline|^openai/|^owler|^php|^postman|^ps_daily/|^python|^rank|^read|^reed|^remove\\.bg/|^rest|^rss|^snapchat|^sora |^space bison|^stape/|^svn|^swcd |^taringa|^thumbor/|^track|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|abuse|advisor|agent\\b|analyzer|archive|ask jeeves/teoma|attracta|audit|bluecoat drtr|browsex|burpcollaborator|capture|catch|check\\b|checker|chrome-lighthouse|chromeframe|classifier|cloudflare|collapsify\\b|convertify|cookiehubverify/|crawl|cursor/|cypress/|dareboost|datanyze|dejaclick|detect|discovery|dmbrowser|download|exaleadcloudview|feed|firephp|foregenix|functionize|grab|hardenize\\b|headless|hotjar|httrack|hubspot marketing grader|ibisbrowser|infrawatch|insight|inspect|iplabel|java(?!;)|library|linkcheck|linktiger|mail\\.ru/|manager|manus-user/|marketgoo/|measure|monitor\\b|neustar wpm|node\\b|nutch|offbyone|openvas|optimize|pageburst|pagespeed|parser|phantomjs|pingdom|playwright|powermarks|preview|productfinder|prospectingstudio|proxy|ptst[ /]\\d|radar|readable/|retriever|rexx;|rigor|rss\\b|scrape|securityheaders|selenium|server|silktide|sindup/|sogou|sparkler/|speedcurve|spider|splash|statuscake|supercleaner|synapse|synthetic|testlocally|tools|torrent|transcoder|url|validator|virtuoso|wappalyzer|watchtowr|webglance|webkit2png|whatcms/|xtate/",ge=/bot|crawl|http|lighthouse|scan|search|spider/i,z;function me(){if(z instanceof RegExp)return z;try{z=new RegExp(fe,"i")}catch{z=ge}return z}var ye=a=>typeof a=="string"&&a!=="";function ve(a){return ye(a)&&me().test(a)}var we=ve;class X{timestamp;constructor(){this.timestamp=new Date}}class be extends X{type;testId;hypothesisId;constructor(e,t,i){super(),this.type=3,this.testId=e,this.hypothesisId=t,this.timestamp=i}}class Se extends X{type;path;constructor(e){super(),this.type=4,this.path=e}}class Ce extends X{type;cart;constructor(e){super(),this.type=5,this.cart=e}}class ie extends Error{isBot;constructor(){super(),this.isBot=!0}}function Te(a,e,t){for(const i of e.selectors){const s=a.querySelectorAll(i.cssSelector);for(let r=0;r<s.length;r++)t(e.testId,e.hypothesisId)}re(a,e,(i,s,r,o,n)=>n(s,r),t)}function U(a,e,t){for(const i of e.selectors)ne(a,e.testId,e.hypothesisId,i,t??(()=>{}));re(a,e,ne,t??(()=>{}))}function se(a){return a.urlPatterns.reduce((e,t)=>{switch(t.operator){case"contains":return e+`.*${t}.*`;case"endsWith":return e+`.*${t}`;case"startsWith":return e+`${t}.*`}},"")}function re(a,e,t,i){new MutationObserver(()=>{for(const r of e.selectors)t(a,e.testId,e.hypothesisId,r,i)}).observe(a.documentElement,{childList:!0,subtree:!0})}function ne(a,e,t,i,s){const r=a.querySelectorAll(i.cssSelector);for(let o=0;o<r.length;o++){let n=r.item(o);if(n instanceof HTMLElement&&n.dataset.shoplift!==""){n.dataset.shoplift="";for(const l of i.actions.sort(Re))n=Ie(a,i.cssSelector,n,l)}}return r.length>0&&s?(s(e,t),!0):!1}function Ie(a,e,t,i){switch(i.type){case"innerHtml":t.innerHTML=i.value;break;case"attribute":Pe(t,i.scope,i.value);break;case"css":Ae(a,e,i.value);break;case"js":ke(a,t,i);break;case"copy":return Ee(t);case"remove":xe(t);break;case"move":_e(t,parseInt(i.value));break}return t}function Pe(a,e,t){a.setAttribute(e,t)}function Ae(a,e,t){const i=a.createElement("style");i.innerHTML=`${e} { ${t} }`,a.getElementsByTagName("head")[0]?.appendChild(i)}function ke(a,e,t){Function("document","element",`"use strict"; ${t.value}`)(a,e)}function Ee(a){const e=a.cloneNode(!0);if(!a.parentNode)throw"Can't copy node outside of DOM";return a.parentNode.insertBefore(e,a.nextSibling),e}function xe(a){a.remove()}function _e(a,e){if(e===0)return;const t=Array.prototype.slice.call(a.parentElement.children).indexOf(a),i=Math.min(Math.max(t+e,0),a.parentElement.children.length-1);a.parentElement.children.item(i).insertAdjacentElement(e>0?"afterend":"beforebegin",a)}function Re(a,e){return oe(a)-oe(e)}function oe(a){return a.type==="copy"||a.type==="remove"?0:1}
21const M={Template:0,UrlRedirect:2,Script:3,Price:5},De="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",Ve="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%200L7.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 Oe(a){let e=a.replace(/-/g,"+").replace(/_/g,"/");for(;e.length%4;)e+="=";const t=atob(e),i=Uint8Array.from(t,o=>
21o.charCodeAt(0)),s=new Blob([i]).stream().pipeThrough(new DecompressionStream("gzip")),r=await new Response(s).text();return JSON.parse(r)}function F(a,e){return typeof e=="string"&&/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+(?:Z|[+-]\d+)/.test(e)?new Date(e):e}function ee(a,e){return e}function q(a,e=!1,t=!1,i=","){const s=a/100;if(t){const o=Math.round(s).toLocaleString("en-US");return i!==","?o.replace(/,/g,i):o}else{const r=e?",":".",o=s.toFixed(2).split("."),n=parseInt(o[0],10),l=o[1]??"00",c=n.toLocaleString("en-US");return i!==","?`${c.replace(/,/g,i)}${r}${l}`:e?`${c.replace(/,/g,".")}${r}${l}`:`${c}${r}${l}`}}function H(a,e,t,i){const s=e.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} ${t}`:s}function ae(a){return a.replace(/[^\d.,\s-]/g,"").trim()}function j(a){const e=new Map;for(const[t,i,s]of a.variants)e.set(t,{priceInCents:i,compareAtPriceInCents:s});return e}function Le(a,e,t,i){const{priceInCents:s,compareAtPriceInCents:r}=t,{moneyFormat:o,currency:n,currencyCodeEnabled:l}=i;if(a.getAttribute("data-sl-attribute-p")===e)a.innerHTML=H(s,o,n,l);else if(a.getAttribute("data-sl-attribute-cap")===e)r<=0||r<=s?a.remove():a.innerHTML=H(r,o,n,l);else if(a.getAttribute("data-sl-attribute-discount")===e&&!(r<=0||r<=s)){const d=Math.round((r-s)/r*100),u=ae(H(r-s,o,n,!1)),h=a.getAttribute("data-sl-format")||"percent";h==="percent"?a.textContent=`-${d}%`:h==="amount"?a.textContent=`-${u}`:h==="both"&&(a.textContent=`-${d}% (-${u})`)}}function $e(a){const e=[],t={id:"url-pattern",operator:"contains",value:"/"};for(const[i,s,r]of a.variants){e.push({id:`p-${i}`,cssSelector:`[data-sl-attribute-p="${i}"]`,urlPatterns:[t],actions:[{id:`p-action-${i}`,type:"innerHtml",scope:"price",value:H(s,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]});const o=r<=0||r<=s;if(e.push({id:`cap-${i}`,cssSelector:`[data-sl-attribute-cap="${i}"]`,urlPatterns:[t],actions:[{id:`cap-action-${i}`,type:o?"remove":"innerHtml",scope:"compare-at-price",value:o?"":H(r,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]}),!o&&r>s){const n=Math.round((r-s)/r*100),l=ae(H(r-s,a.moneyFormat,a.currency,!1));e.push({id:`d-${i}`,cssSelector:`[data-sl-attribute-discount="${i}"]`,urlPatterns:[t],actions:[{id:`d-action-${i}`,type:"js",scope:null,value:`var format = element.getAttribute('data-sl-format') || 'percent'; if (format === 'percent') { element.textContent = '-${n}%'; } else if (format === 'amount') { element.textContent = '-${l}'; } else if (format === 'both') { element.textContent = '-${n}% (-${l})'; }`}]})}}return e}const Me=a=>{let e=5381;for(let t=0;t<a.length;t++)e=(e*33^a.charCodeAt(t))>>>0;return e.toString(36)},qe=()=>Math.random().toString(36).slice(2,10)+Date.now().toString(36).slice(-4),He=a=>btoa(JSON.stringify(a)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""),K=a=>a.replace(/#slr-[a-z0-9]+$/,""),tt="modulepreload",it=function(a){return"/"+a},st={},Ne=function(e,t,i){let s=Promise.resolve();function r(o){const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=o,window.dispatchEvent(n),!n.defaultPrevented)throw o}return s.then(o=>{for(const n of o||[])n.status==="rejected"&&r(n.reason);return e().catch(r)})};function le(a,e,t){const i=t?a.plans.filter(c=>!c.variantId||c.variantId===t):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 o=e?s:r,n=e?r:s;if(t)for(const c of a.plans)for(const d of[c.existingShopifyPlanId,c.createdShopifyPlanId])d&&!o.includes(d)&&!n.includes(d)&&n.push(d);const l={};for(let c=0;c<n.length;c++){const d=n[c],u=o[c];d&&u&&(l[d]=u)}return{showPlanIds:o,hidePlanIds:n,swapMap:l}}function ce(a,e,t){const i=e?a.plans.find(r=>r.variantId===e):void 0;if(i)return i.direction;if(t){const r=a.plans.find(o=>o.productId===t);if(r)return r.direction}return a.plans.find(r=>!r.variantId)?.direction??null}function J(a,e){const t=e?a.plans.filter(r=>!r.productId||r.productId===e):a.plans,i={};for(const r of t)i[r.existingShopifyPlanId]=r.existingDiscountAmount,i[r.createdShopifyPlanId]=r.existingDiscountAmount;
21const s=Math.max(...Object.values(i),0);return{discountMap:i,maxDiscount:s}}function W(a){const e=document.querySelector('form[action*="/cart/add"] input[name="product-id"]')?.value;if(e)return e;if(a){for(const r of Array.from(document.querySelectorAll("[data-sl-attribute-p]"))){const o=r.getAttribute("data-sl-attribute-p");if(!o)continue;const n=a.variants.find(l=>l[0]===o);if(n?.[3])return n[3]}const s=document.querySelector('form[action*="/cart/add"] input[name="id"]')?.value;if(s){const r=a.variants.find(o=>o[0]===s);if(r?.[3])return r[3]}}const t=window,i=t.ShopifyAnalytics?.meta?.product?.id??t.meta?.product?.id;return i!=null?String(i):null}function D(a,e){return a.widget.selectors[e]??[]}function N(a,e){return a.replace(/[\d.]+%/,`${e}%`)}function $(a,e){const t=document.createTreeWalker(a,NodeFilter.SHOW_TEXT);let i=t.nextNode();for(;i;){if(i.nodeValue!==null){const s=e(i.nodeValue);if(s!==i.nodeValue){i.nodeValue=s;return}}i=t.nextNode()}}function de(a,e){return a===null?!1:a==="decrease"?!e:e}async function Ue(a){if(a.subscriptionSwapDone)return;const e=a.getActiveAssignment();if(!e)return;const t=a.getHypothesis(e.hypothesisId);if(!t?.subscriptionData)return;a.subscriptionSwapDone=!0;const i=t.subscriptionData,s=t.isControl,r=[...new Set(i.plans.map(d=>d.direction))].join(",");a.log(`[SUB-SWAP] ${s?"A":"B"} side, directions=${r}`);const o=i.plans.some(d=>d.variantId);let n=!1,l=!1;function c(){if(!l){l=!0;try{const d=o?document.querySelector("select[name='id'], input[name='id']")?.value:void 0,{showPlanIds:u,hidePlanIds:h,swapMap:p}=le(i,s,d);a.swapMap=p;const b=D(i,"widgetParent"),E=D(i,"subscriptionPlans"),S=D(i,"subscriptionInput");if(!b.length||!E.length||!S.length)return;const C=document.querySelector(b[0].selector);if(!C?.shadowRoot)return;const _=C.shadowRoot.querySelector(E[0].selector);if(!_?.shadowRoot)return;const T=S[0].selector;let m=null;if(i.widget.widgetType==="buttons"||i.widget.widgetType==="radio"){const y=Array.from(_.shadowRoot.querySelectorAll(T));if(!y.length)return;for(const v of y){const g=v.closest("label");g&&(u.includes(v.value)?g.style.display="":h.includes(v.value)&&(g.style.display="none"))}const w=y.some(v=>u.includes(v.value)&&v.checked),I=y.some(v=>h.includes(v.value)&&v.checked);if((w||I)&&(n=!1),!w&&!n){n=!0;for(const v of y)if(u.includes(v.value)){v.closest("label")?.click(),v.dispatchEvent(new Event("change",{bubbles:!0}));break}}const f=y.find(v=>v.checked);m=f&&u.includes(f.value)?f.value:u[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(I=>u.includes(I.value));w&&(y.value=w.value,y.dispatchEvent(new Event("change",{bubbles:!0})))}m=u.includes(y.value)?y.value:u[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}}}if(a.subscriptionHideWrongPlans=c,a.swapMap=le(i,s).swapMap,c(),o){const d=document.querySelector("select[name='id'], input[name='id']");d&&d.addEventListener("change",c)}}function B(a){const e=D(a,"widgetParent");return e.length?document.querySelector(e[0].selector)?.shadowRoot??null:null}function Y(a,e){const t=D(a,"subscriptionPlans");return t.length?e.querySelector(t[0].selector)?.shadowRoot??null:null}function Z(a,e){const t=new URLSearchParams(window.location.search).get("variant");if(t)return t;{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,e){return H(a,e.moneyFormat,e.currency,e.currencyCodeEnabled)}function Fe({originalFetch:a,swapMap:e,slptValue:t,getSelectedPlanId:i,log:s}){if(window.fetch.__shoplift_intercepted)return s("[SUB-INTERCEPT] already installed â skipping"),()=>{};function r(n){if(i){const l=i();if(l)return e[l]??l}return e[n]??n}const o=function(n,l){if((typeof n=="string"?n:n instanceof URL?n.href:n.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==="")&&t&&l.body.set("properties[_slpt]",t)}
21else if(typeof l.body=="string"){const d=JSON.parse(l.body);if(d.items)for(const u of d.items){const h=String(u.selling_plan??"");h?u.selling_plan=r(h):!u.selling_plan&&t&&(u.properties||(u.properties={}),u.properties._slpt=t)}else if(d.id){const u=String(d.selling_plan??"");u?d.selling_plan=r(u):!d.selling_plan&&t&&(d.properties||(d.properties={}),d.properties._slpt=t)}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,n,l)};return o.__shoplift_intercepted=!0,window.fetch=o,function(){window.fetch===o&&(window.fetch=a)}}function Be({log:a}){if(window.fetch.__shoplift_intercepted)return a("[SUB-PREVIEW-BLOCK] already installed â skipping"),()=>{};const e=window.fetch,t=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"}}))):e.call(window,i,s)};return t.__shoplift_intercepted=!0,window.fetch=t,function(){window.fetch===t&&(window.fetch=e)}}function pe({data:a,runUpdates:e,debounceMs:t=150}){let i=null;function s(){i&&clearTimeout(i),e(),i=setTimeout(e,t)}let r=null;const o=[],n={childList:!0,subtree:!0,characterData:!0,attributes:!0};function l(h){for(const p of o)p.disconnect();o.length=0;for(const p of Array.from(h.querySelectorAll("*")))if(p.shadowRoot){const b=new MutationObserver(s);b.observe(p.shadowRoot,n),o.push(b)}}function c(){const h=B(a);return h?(r&&r.disconnect(),l(h),r=new MutationObserver(p=>{p.some(b=>b.type==="childList"&&b.addedNodes.length>0)&&l(h),s()}),r.observe(h,n),!0):!1}const d=document.body||document.documentElement,u=new MutationObserver(()=>{c()&&s()});return u.observe(d,{childList:!0,subtree:!0}),c()&&s(),e(),function(){i&&(clearTimeout(i),i=null),u.disconnect(),r&&(r.disconnect(),r=null);for(const p of o)p.disconnect();o.length=0}}async function ze(a){if(a.subscriptionPriceDone)return;const e=a.getActiveAssignment(),t=e?a.getHypothesis(e.hypothesisId):void 0,i=t?.subscriptionData?null:a.findActiveSubscriptionTestControl(),s=t?.subscriptionData?t:i?.hypothesis;if(!s?.subscriptionData)return;const r=t?.subscriptionData?e.testId:i.testId;a.subscriptionPriceDone=!0;const o=s.subscriptionData,n=s.isControl,l=s.priceData,c=o.widget.widgetType;let d=W(l),u=J(o,d),h=u.discountMap,p=u.maxDiscount;function b(){const g=W(l);g!==d&&(d=g,u=J(o,d),h=u.discountMap,p=u.maxDiscount,a.log(`[SUB-PRICE] scope refreshed side=${n?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${p}`))}a.log(`[SUB-PRICE] side=${n?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${p}`),a.updatePriceTestHiddenInputs(r,n?"control":"variant",!1);function E(){if(!l)return null;const g=j(l),P=Z(g),A=ce(o,P,d);if(!de(A,n))return null;const k=P?g.get(P):void 0;return k?{formattedVariantPrice:G(k.priceInCents,l),formattedDiscounted:G(k.priceInCents*(1-p/100),l)}:null}Fe({originalFetch:a.fetch,swapMap:a.swapMap??{},slptValue:a.slptValue??void 0,log:a.log,getSelectedPlanId:()=>{const g=B(o);if(!g)return null;const P=Y(o,g);if(!P)return null;const A=D(o,"subscriptionInput"),k=A.length?A[0].selector:'input[name="rc_plan"]';return P.querySelector(`${k}:checked`)?.value??null}});function S(g){const P=D(o,"subscriptionDiscount");for(const A of P)if(A.selector.includes("badge")||A.selector.includes("__badge")){const k=g.querySelector(A.selector);k?.textContent&&!k.textContent.includes(`${p}%`)&&$(k,x=>N(x,p))}}function C(g){const P=E();if(!P)return;const A=D(o,"subscriptionCompareAt");for(const k of A){const x=g.querySelector(k.selector)||g.querySelector(`[part~="${k.selector}"]`);x?.textContent&&!x.textContent.includes(P.formattedVariantPrice)&&$(x,R=>/\d/.test(R)?P.formattedVariantPrice:R)}}function _(g,P){const A=D(o,"subscriptionCompareAt"),k=P===0?"none":"";for(const x of A){const R=g.querySelector(x.selector)||g.querySelector(`[part~="${x.selector}"]`);R&&(k==="none"?R.style.display!=="none"&&(R.style.display="none"):R.style.display==="none"&&(R.style.display=""))}}function T(g){const P=D(o,"subscriptionInput"),A=P.length?P[0].selector:'input[name="rc_plan"]',k=D(o,"subscriptionPlanDiscount"),x=k.length?k[0].selector:".rc-plans-button__discount";for(const R of Array.from(g.querySelectorAll("label"))){const O=R.querySelector(A),V=R.querySelector(x);
21if(O&&V){const L=h[O.value];if(L!==void 0){if(L===0)V.style.display!=="none"&&(V.style.display="none");else if(V.style.display==="none"&&(V.style.display=""),V.textContent){const Q=V.textContent.match(/[\d.]+%/)?.[0];Q&&Q!==`${L}%`&&$(V,et=>N(et,L))}}}}}function m(g){const P=g.querySelector("select");if(P)for(const A of Array.from(P.options)){const k=h[A.value];if(k!==void 0&&A.textContent){const x=A.textContent.match(/[\d.]+%/)?.[0];x&&x!==`${k}%`&&(A.textContent=N(A.textContent,k))}}}function y(g,P){const k=D(o,"subscriptionDiscount").filter(x=>x.selector.includes("benefit")||x.selector==="rc-benefits");for(const x of k){const R=g.querySelector(x.selector);if(R?.shadowRoot){for(const O of Array.from(R.shadowRoot.querySelectorAll("li")))if(O.textContent?.includes("Save")){const V=O;if(P===0)V.style.display!=="none"&&(V.style.display="none");else{V.style.display==="none"&&(V.style.display="");const L=O.textContent.match(/[\d.]+%/)?.[0];L&&L!==`${P}%`&&$(O,Q=>N(Q,P))}}}}}let w=!1;function I(){if(!w){w=!0;try{if(b(),d!==null&&Object.keys(h).length===0)return;const g=B(o);if(!g)return;S(g),l&&C(g);const P=Y(o,g);let A=p;if(P){const k=D(o,"subscriptionInput"),x=k.length?k[0].selector:'input[name="rc_plan"]',R=P.querySelector(`${x}:checked`);if(R){const O=h[R.value];O!==void 0&&(A=O)}c==="buttons"||c==="radio"?T(P):m(P)}_(g,A),y(g,A)}finally{w=!1}}}function f(){const g=E();if(!g)return;const P=B(o);if(!P)return;const A=D(o,"onetimeToggle"),k=A.length?A[0].selector:'input[value="onetime"]';if(!P.querySelector(k)?.checked)return;const R=D(o,"subscriptionPrice");for(const O of R){const V=P.querySelector(O.selector)||P.querySelector(`[part~="${O.selector}"]`);V?.textContent&&!V.textContent.includes(g.formattedDiscounted)&&$(V,L=>/\d/.test(L)?g.formattedDiscounted:L)}}function v(){a.subscriptionHideWrongPlans&&a.subscriptionHideWrongPlans(),I(),a.subscriptionUpdateOneTime&&a.subscriptionUpdateOneTime(),f()}pe({data:o,runUpdates:v})}async function We(a){if(a.subscriptionOneTimeDone)return;const e=a.getActiveAssignment(),t=e?a.getHypothesis(e.hypothesisId):void 0,i=!!(t?.subscriptionData&&t.priceData),s=i?null:a.findActiveSubscriptionTestControl(),r=i?t:s?.hypothesis;if(!r?.subscriptionData||!r.priceData)return;const o=i?e.testId:s.testId;a.subscriptionOneTimeDone=!0;const n=r.subscriptionData,l=r.priceData,c=j(l),d=r.isControl,u=d?"control":"variant";a.slptValue=`${o}:${u}:f`,a.updatePriceTestHiddenInputs(o,u,!1);function h(){const p=B(n);if(!p)return;const b=Z(c);if(!b)return;const E=W(l),S=ce(n,b,E);if(!de(S,d))return;const C=c.get(b);if(!C)return;const _=H(C.priceInCents,l.moneyFormat,l.currency,l.currencyCodeEnabled),T=D(n,"onetimePrice");if(!T.length)return;const m=D(n,"onetimeContainer"),y=m.length?m[0].selector:'[part~="rc-purchase-option__onetime"]',I=p.querySelector(y)??p;for(const f of T){let v=null;try{v=I.querySelector(f.selector)}catch{v=null}v??=I.querySelector(`[part~="${f.selector}"]`),v&&v.textContent&&!v.textContent.includes(_)&&$(v,g=>/\d/.test(g)?_:g)}}a.subscriptionUpdateOneTime=h,h()}async function Ge(a,e){const{subscriptionPreviewRender:t}=await Ne(async()=>{const{subscriptionPreviewRender:i}=await Promise.resolve().then(()=>Xe);return{subscriptionPreviewRender:i}},void 0);return t(a.subscriptionData,a.priceData,a.isControl,e)}function je(a,e){const t=a.widget.selectors.widgetParent??[],i=a.widget.selectors.subscriptionPlans??[],s=a.widget.selectors.subscriptionInput??[];if(!t.length||!i.length||!s.length){e("[SUB-GLOBAL-HIDE] Missing required selectors â skipping");return}const r=t[0].selector,o=i[0].selector,n=s[0].selector;let l=!1,c=null,d=!1;function u(){if(!d){d=!0;try{h()}finally{d=!1}}}function h(){const C=document.querySelector(r);if(!C?.shadowRoot)return;const _=C.shadowRoot.querySelector(o);if(!_?.shadowRoot)return;_.shadowRoot!==c&&(c=_.shadowRoot,l=!1);let T=0;if(a.widget.widgetType==="buttons"||a.widget.widgetType==="radio"){const m=Array.from(_.shadowRoot.querySelectorAll(n));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",T++)}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})),e(`[SUB-GLOBAL-HIDE] Preselected first visible plan input=${f.value}`)}const I=y.find(f=>f.checked)??y[0];
21if(I){const f=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const v of f)v.value!==I.value&&(v.value=I.value,e(`[SUB-GLOBAL-HIDE] Mirrored plan id ${I.value} to form selling_plan input`))}}else if(a.widget.widgetType==="dropdown"){const m=_.shadowRoot.querySelector("select");if(!m)return;for(const I of Array.from(m.options))a.planIds.includes(I.value)&&(I.style.display!=="none"&&(I.style.display="none"),I.disabled||(I.disabled=!0),T++);const y=Array.from(m.options).filter(I=>!a.planIds.includes(I.value)),w=y.some(I=>I.value===m.value);y.length>0&&!w&&!l&&(l=!0,m.value=y[0].value,m.dispatchEvent(new Event("change",{bubbles:!0})),e(`[SUB-GLOBAL-HIDE] Preselected first visible option=${y[0].value}`))}T>0&&e(`[SUB-GLOBAL-HIDE] Hidden ${T} B-side plan buttons`)}const p={childList:!0,subtree:!0,characterData:!0};let b=null;function E(C){b?.disconnect(),b=new MutationObserver(()=>u()),b.observe(C,p)}function S(){const C=document.querySelector(r);if(!C?.shadowRoot)return!1;u(),new MutationObserver(()=>{u();const m=C.shadowRoot.querySelector(o);m?.shadowRoot&&E(m.shadowRoot)}).observe(C.shadowRoot,p);const T=C.shadowRoot.querySelector(o);return T?.shadowRoot&&E(T.shadowRoot),!0}if(!S()){e("[SUB-GLOBAL-HIDE] Widget not in DOM yet â waiting via MutationObserver");const C=new MutationObserver(()=>{S()&&C.disconnect()});C.observe(document.body??document.documentElement,{childList:!0,subtree:!0})}}const ue="Limited preview",Ke="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.",Je=5e3;function Ye(){const a=document.createElement("div");a.id="shoplift-preview-subscription-warning";const e=document.createElement("span");e.id="shoplift-preview-subscription-warning__icon",e.setAttribute("aria-hidden","true"),e.textContent="!";const t=document.createElement("span");t.id="shoplift-preview-subscription-warning__label",t.textContent=ue;const i=document.createElement("div");i.id="shoplift-preview-subscription-warning__tooltip",i.setAttribute("role","tooltip"),i.textContent=Ke,a.appendChild(e),a.appendChild(t),a.appendChild(i),a.setAttribute("tabindex","0"),a.setAttribute("aria-describedby",i.id),a.setAttribute("aria-label",ue);let s=null;function r(){s!==null&&(clearTimeout(s),s=null)}function o(){i.classList.add("shoplift-preview-subscription-warning__tooltip--visible")}function n(){i.classList.remove("shoplift-preview-subscription-warning__tooltip--visible")}function l(){o(),r(),s=setTimeout(()=>{n(),s=null},Je)}function c(){r(),o()}function d(){s===null&&n()}a.addEventListener("mouseenter",c),a.addEventListener("mouseleave",d),a.addEventListener("focus",c),a.addEventListener("blur",d);function u(p){try{const b=p.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{}}document.addEventListener("click",u,!0);function h(){r(),document.removeEventListener("click",u,!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 he=!1;class Ze{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";shop;host;eventHost;disableReferrerOverride;legacySessionKey;cssHideClass;testConfigs;inactiveTestConfigs;hiddenSubscriptionPlans;testsFilteredByAudience;sendPageView;shopliftDebug;gaConfig;telemetryEnabled;getCountryTimeout;geoViaShopify;resolvedRegion=null;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);
21urlParams=new URLSearchParams(window.location.search);device;logHistory;activeViewportObservers=new Map;clientIdRetryCount=0;constructor(e,t,i,s,r,o,n,l,c,d,u,h,p,b=!1){this.shop=e,this.host=t,this.eventHost=i,this.disableReferrerOverride=l,this.logHistory=[],this.legacySessionKey=`SHOPLIFT_SESSION_${this.shop}`,this.cssHideClass=s?"shoplift-hide":"",this.testConfigs=u.map(S=>({...S,startAt:new Date(S.startAt),statusHistory:S.statusHistory.map(C=>({...C,createdAt:new Date(C.createdAt)}))})),this.inactiveTestConfigs=h,this.hiddenSubscriptionPlans=p,this.sendPageView=!!r,this.shopliftDebug=o===!0,this.telemetryEnabled=c===!0,this.geoViaShopify=b===!0,this.gaConfig=n!=={"sendEvents":false,"mode":"gtag"}?n:{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 E=this.getDeviceType();this.device=E!=="tablet"?E:"mobile",this.state=this.loadState(),this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.testsFilteredByAudience=u.filter(S=>
21S.status=="active"),this.getCountryTimeout=d===1000?1e3:d,window.__slReadCookie=S=>{const C=this.getCookie(S);if(C===null)return null;try{return decodeURIComponent(C)}catch{return C}},this.log("State Loaded",JSON.stringify(this.state))}deriveCategoryFromExistingTests(){if(!this.state.temporary.testCategory&&this.state.essential.visitorTests.length>0){const e=this.state.essential.visitorTests.some(t=>{if(!t.hypothesisId)return!1;const i=this.getHypothesis(t.hypothesisId);return i&&["theme","basicScript","price"].includes(i.type)});this.state.temporary.testCategory=e?"global":"conditional",this.persistTemporaryState(),this.log("Derived test category from existing visitorTests: %s",this.state.temporary.testCategory)}}async 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 o=this.urlParams.get("isShopliftMerchant")==="true";this.log("Setting merchant session to %s",o),this.state.temporary.isMerchant=o,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,we(navigator.userAgent))return;const e=Date.now(),t=!this.state.temporary.lastSeen||e-this.state.temporary.lastSeen>1800*1e3;(!this.state.temporary.entryPage||t)&&(this.state.temporary.entryPage=K(window.location.href)),this.state.temporary.lastSeen=e,this.persistTemporaryState(),window.__slEntryPage=this.state.temporary.entryPage??"";const i=this.state.essential.visitorTests.filter(o=>o.hypothesisId&&+o.createdAt>Date.now()-6e4);if(i.length===0)this.sendDiagnosticTelemetry("page-landed",null);else for(const o of i)this.sendDiagnosticTelemetry("page-landed",o.testId,{hypothesisId:o.hypothesisId,isControl:o.assignedTo==="control",testType:o.testType??"unknown"});if(navigator.userAgent.includes("Chrome/118")){this.log("Random: %o",[Math.random(),Math.random(),Math.random()]);const o=await this.makeRequest({url:`${this.eventHost}/api/v0/events/ip`,method:"get"}).then(n=>n?.json());this.log(`IP: ${o}`),this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify(this.debugState(),ee)}).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 o=this.state.temporary.originalReferrer;delete this.state.temporary.originalReferrer,this.persistTemporaryState(),Object.defineProperty(document,"referrer",{get:()=>o,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 r=this.state.essential.visitorTests.some(o=>(o.hypothesisId?this.getHypothesis(o.hypothesisId):void 0)?.subscriptionData!=null)||Object.values(this.state.temporary.testReservations??{}).some(o=>this.getHypothesis(o.hypothesisId)?.subscriptionData!=null);this.hiddenSubscriptionPlans&&!r&&(this.log(`[SUB-GLOBAL] Visitor not in subscription test â hiding ${this.hiddenSubscriptionPlans.planIds.length} B-side plans`),je(this.hiddenSubscriptionPlans,o=>this.log(o))),await this.subscriptionSwap(),await this.subscriptionOneTimePrice(),await this.subscriptionPriceChange(),await this.finalize(),console.log("SHOPLIFT SCRIPT INITIALIZED!")}catch(e){if(e instanceof ie)return;throw e}finally{typeof window.shoplift!="object"&&this.setShopliftStub()}}getVariantColor(e){switch(e){case"a":return{text:"#141414",bg:"#E2E2E2"};case"b":return{text:"rgba(255, 255, 255, 1)",bg:"rgba(37, 99, 235, 1)"}}}getDefaultVariantTitle(e){return e.title?e.title:e.type==="price"?e.isControl?"Original prices":"Variant prices":e.isControl?"Original":"Untitled variant "+e.label.toUpperCase()}
21async initPreview(){const e=this.urlParams.get("previewConfig");if(e){this.state.temporary.previewConfig=void 0,this.log("Setting up the preview"),this.log("Found preview config, writing to temporary state");const t=await Oe(e);if(this.state.temporary.previewConfig=t,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 o=await this.makeJsonRequest({method:"get",url:r}).catch(n=>(this.log("Error getting domSelectors",n),null));if(s.variants.forEach(n=>n.domSelectors=o[n.id]?.domSelectors),s.isDraft){const n=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/subscription-preview`,l=await this.makeJsonRequest({method:"get",url:n}).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 t=this.state.temporary.previewConfig;if(t.testTypeCategory===M.Template&&this.handleTemplatePreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.UrlRedirect&&this.handleUrlPreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.Script&&this.handleScriptPreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.Price){const i=await this.handlePricePreview(t);t.isDraft?await this.handleSubscriptionPricePreview(t):await this.handleSubscriptionLivePreview(t),i&&this.initPreviewControls(t)}}}initPreviewControls(e){document.addEventListener("DOMContentLoaded",()=>{const t=e.variants.find(b=>b.id===e.currentVariant),i=t?.label||"a",s=e.variants,r=document.createElement("div");r.id="shoplift-preview-control";const o=document.createElement("div"),n=document.createElement("img");n.src=Ve,n.height=24,n.width=14,o.style.padding="0 16px",o.style.lineHeight="100%",o.appendChild(n),r.appendChild(o);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 u=document.createElement("span");if(u.id="shoplift-preview-variant-title",u.innerText=t?this.getDefaultVariantTitle(t):"Untitled variant "+i.toUpperCase(),c.appendChild(u),s.length>1){const b=document.createElement("img");b.src=De,b.width=12,b.height=12,b.style.height="12px",b.style.width="12px",c.appendChild(b);const E=document.createElement("div");E.className="preview-variant-menu";for(const S of e.variants.filter(C=>C.id!==e.currentVariant)){const C=document.createElement("div");C.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(),C.appendChild(_);const T=document.createElement("span");T.innerText=this.getDefaultVariantTitle(S),C.appendChild(T),C.addEventListener("click",()=>{this.pickVariant(S.id)}),E.appendChild(C)}l.appendChild(E),c.addEventListener("click",()=>{E.className!=="preview-variant-menu preview-variant-menu__visible"?E.classList.add("preview-variant-menu__visible"):E.classList.remove("preview-variant-menu__visible")}),document.addEventListener("click",S=>{S.target instanceof Element&&!c.contains(S.target)&&E.className==="preview-variant-menu preview-variant-menu__visible"&&E.classList.remove("preview-variant-menu__visible")})}else c.style.pointerEvents="none",d.style.margin="0";if(l.appendChild(c),r.appendChild(l),e.hasSubscription){this.subscriptionPreviewWarningCleanup?.();const b=Ye();r.appendChild(b.root),this.subscriptionPreviewWarningCleanup=b.cleanup}const h=document.createElement("div"),p=document.createElement("button");p.id="shoplift-exit-preview-button",p.innerText="Exit",h.appendChild(p),p.addEventListener("click",()=>{this.exitPreview()}),r.appendChild(h),document.body.appendChild(r),requestAnimationFrame(()=>{r.classList.add("visible")})}),this.ensureCartAttributesForExistingPriceTests(!0)}pickVariant(e){if(this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig,i=new URL(window.location.toString());if(t.testTypeCategory===M.UrlRedirect){const s=t.variants.find(r=>r.id===t.currentVariant)?.redirectUrl;if(i.pathname===s){const r=t.variants.find(o=>o.id===e)?.redirectUrl;r&&(i.pathname=r)}}if(t.testTypeCategory===M.Template){const s=t.variants.find(r=>r.id===t.currentVariant)?.pathName;if(s&&i.pathname===s){const r=t.variants.find(o=>o.id===e)?.pathName;r&&r!==s&&(i.pathname=r)}}t.currentVariant=e,this.persistTemporaryState(),this.queueRedirect(i)}}exitPreview(){const e=new URL(window.location.toString());if(this.state.temporary.previewConfig?.testTypeCategory===M.Template&&e.searchParams.delete("view"),this.state.temporary.previewConfig?.testTypeCategory===M.Script&&e.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(e.pathname)&&s&&(e.pathname=s)}this.state.temporary.isMerchant=!1,e.searchParams.delete("isShopliftMerchant"),this.state.temporary.previewConfig=void 0,this.persistTemporaryState(),this.subscriptionPreviewWarningCleanup?.(),this.subscriptionPreviewWarningCleanup=null,this.hidePage(),this.queueRedirect(e)}handleTemplatePreview(e){const t=e.currentVariant,i=e.variants.find(l=>l.id===t);if(!i)return!1;const s=e.variants.find(l=>l.isControl);if(!s)return!1;this.log("Setting up template preview for type",s.type);
21const r=new URL(window.location.toString()),o=r.searchParams.get("view"),n=i.type===s.type;return!n&&!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&&n&&o!==(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)),o!==null&&o!==(i.affix||"__DEFAULT__")&&(r.searchParams.delete("view"),this.hidePage(),this.queueRedirect(r)),!0)}handleUrlPreview(e){const t=e.currentVariant,i=e.variants.find(o=>o.id===t),s=e.variants.find(o=>o.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(e){const t=e.currentVariant,i=e.variants.find(o=>o.id===t);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(e){const t=e.currentVariant,i=e.variants.find(s=>s.id===t);return i?(this.log("Setting up price preview"),i.domSelectors&&i.domSelectors.length>0&&(U(document,{testId:e.testId,hypothesisId:i.id,selectors:i.domSelectors}),this.ensureCartAttributesForExistingPriceTests(!0)),!0):!1}async handleSubscriptionPricePreview(e){const t=e.variants.find(i=>i.id===e.currentVariant);t?.subscriptionData&&(this.log("Setting up subscription price preview"),await Ge({id:t.id,isControl:t.isControl,subscriptionData:t.subscriptionData,priceData:t.priceData},(i,...s)=>this.log(i,...s)))}async handleSubscriptionLivePreview(e){this.testConfigs.find(s=>s.id===e.testId)?.hypotheses.find(s=>s.id===e.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 e=await this.getCartState();e!==null&&this.queueCartUpdate(e),this.pruneStateAndSave(),await this.syncAllEvents()}setShoplift(){this.log("Setting up public API");const t=this.urlParams.get("slVariant")==="true",i=t?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:async s=>{if(this.log("Script checking variant for hypothesis '%s'",s),t)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(n=>n.hypotheses.some(l=>l.id===s));if(!r)return this.log("No test found for hypothesis '%s'",s),!1;const o=this.state.essential.visitorTests.find(n=>n.testId===r.id);return o?(this.log("Active visitor test found",s),o.hypothesisId===s):(await this.manuallySplitVisitor(r),this.testConfigs.some(n=>n.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:o,...n}=s;return n})})}}setShopliftStub(){this.log("Setting up stubbed public API");const t=this.urlParams.get("slVariant")==="true",i=t?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:s=>Promise.resolve(t||s===i),setAnalyticsConsent:()=>Promise.resolve(),getVisitorData:()=>({visitor:null,visitorTests:[]})}}async manuallySplitVisitor(e){this.log("Starting manual split for test '%s'",e.id),await this.handleVisitorTest([e]);const t=this.getReservationForTest(e.id);t&&!t.isRealized&&t.entryCriteriaKey&&(this.log("Realizing manual API reservation for test '%s'",e.id),this.realizeReservationForCriteria(t.entryCriteriaKey)),this.saveState(),this.syncAllEvents()}async handleVisitorTest(e){await this.filterTestsByAudience(this.testConfigs,this.state.analytics.visitor??this.buildBaseVisitor(),this.state.essential.visitorTests),this.pruneStaleVisitorTests(),this.deriveC
21ategoryFromExistingTests(),this.clearStaleReservations();let t=e?e.filter(i=>this.testsFilteredByAudience.some(s=>s.id===i.id)):[...this.testsForUrl(this.testsFilteredByAudience),...this.domTestsForUrl(this.testsFilteredByAudience)];try{if(t.length===0)return this.log("No tests found"),!1;this.log("Checking for existing visitor test on page");const i=this.getCurrentVisitorHypothesis(t);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,u=c.length,h=d+u,p=Math.random()*h;this.state.temporary.testCategory=p<d?"global":"conditional",this.log("Category dice roll: rolled %.2f of %d (global weight: %d, conditional weight: %d), selected '%s'",p,h,d,u,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 o=this.state.temporary.testCategory;if(this.log("Visitor test category: %s",o),o==="global"){const l=this.testsFilteredByAudience.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)));for(const c of l)this.markTestAsBlocked(c,"category:global");t=t.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");t=t.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)))}if(t.length===0)return this.log("No tests remaining after category filter"),!1;this.createReservations(t);const n=this.getReservationForCurrentPage();if(n&&!n.isRealized){const l=this.getHypothesis(n.hypothesisId);if(l){l.type!=="price"&&this.realizeReservationForCriteria(n.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 e=this.getDomTestsForCurrentUrl(),t=this.getVisitorDomHypothesis(e);for(const i of e){this.log("Evaluating dom test '%s'",i.id);const s=i.hypotheses.some(p=>p.type==="price");if(this.state.essential.visitorTests.find(p=>p.testId===i.id&&p.isInvalid&&!p.hypothesisId)){if(this.log("Visitor is blocked from test '%s', applying control prices if price test",i.id),s){const p=i.hypotheses.find(b=>b.isControl);p?.priceData&&(this.applyPriceTestWithMapLookup(i.id,p,[p],()=>{this.log("Control prices applied for blocked visitor, no metrics tracked")}),this.updatePriceTestHiddenInputs(i.id,"control",!1))}continue}const o=this.getReservationForTest(i.id);let n=null,l=!1;const c=t.find(p=>i.hypotheses.some(b=>p.id===b.id));if(o)n=this.getHypothesis(o.hypothesisId)??null,this.log("Using reserved hypothesis '%s' for test '%s'",o.hypothesisId,i.id);else if(c)n=c,this.log("Using existing hypothesis assignment for test '%s'",i.id);else if(s){const p=this.visitorActiveTestTypeWithReservations();p?(l=!0,this.log("Visitor already in test type '%s', treating as non-test for price test '%s'",p,i.id)):n=this.pickHypothesis(i)}else n=this.pickHypothesis(i);if(l&&s){const p=i.hypotheses.find(b=>b.isControl);p?.priceData&&(this.log("Applying control prices for non-test visitor on price test '%s' (Map-based)",i.id),this.applyPriceTestWithMapLookup(i.id,p,[p],()=>{this.log("Control prices applied for non-test visitor, no metrics tracked")}
21),this.updatePriceTestHiddenInputs(i.id,"control",!1));continue}if(!n){this.log("Failed to pick hypothesis for test");continue}this.sendDiagnosticTelemetry("assignment",i.id,{hypothesisId:n.id,isControl:n.isControl,testType:n.type});const d=i.bayesianRevision??4,u=n.type==="price",h=d>=5;if(u&&h){if(this.log(`Price test with Map-based lookup (v${d}): ${i.id}`),!n.priceData){this.log("No price data for hypothesis '%s', skipping",n.id);continue}const p=n.isControl?"control":"variant";this.log(`Setting up Map-based price test for ${p} (test: ${i.id})`),this.applyPriceTestWithMapLookup(i.id,n,i.hypotheses,b=>{const E=this.getReservationForTest(b);E&&!E.isRealized&&E.entryCriteriaKey?this.realizeReservationForCriteria(E.entryCriteriaKey):this.queueAddVisitorToTest(b,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(u&&!h){this.log(`Price test without viewport tracking (v${d}): ${i.id}`);const p=this.getDomSelectorsForHypothesis(n);if(p.length===0)continue;U(document,{testId:i.id,hypothesisId:n.id,selectors:p},b=>{this.queueAddVisitorToTest(b,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(!n.domSelectors||n.domSelectors.length===0){this.log("No selectors found, skipping hypothesis");continue}U(document,{testId:i.id,hypothesisId:n.id,selectors:n.domSelectors},p=>{this.queueAddVisitorToTest(p,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()})}}considerRedirect(e){if(this.log("Considering redirect for hypothesis '%s'",e.id),e.isControl)return this.log("Skipping redirect for control"),!1;if(e.type==="basicScript"||e.type==="manualScript")return this.log("Skipping redirect for script test"),!1;const t=this.state.essential.visitorTests.find(o=>o.hypothesisId===e.id),i=new URL(window.location.toString()),r=new URLSearchParams(window.location.search).get("view");if(e.type==="theme"){if(!(e.themeId===themeId)){if(this.log("Theme id '%s' is not hypothesis theme ID '%s'",e.themeId,themeId),this.isAppProxyPath())return this.log("On App Proxy path, skipping theme redirect to avoid infinite loop"),!1;if(t&&t.themeId!==e.themeId&&(t.themeId===themeId||!this.isThemePreview()))this.log("On old theme, redirecting and updating local visitor"),t.themeId=e.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(e.type!=="dom"&&e.type!=="price"&&e.affix!==template.suffix&&e.affix!==r||e.redirectPath&&!i.pathname.endsWith(e.redirectPath))return this.log("Hiding page to redirect for template test"),this.hidePage(),!0;return this.log("Not redirecting"),!1}redirect(e){if(this.log("Redirecting to hypothesis '%s'",e.id),e.isControl)return;const t=new URL(window.location.toString());if(t.searchParams.delete("view"),e.redirectPath){const n=RegExp("^(/w{2}-w{2})/").exec(t.pathname);if(n&&n.length>1){const l=n[1];t.pathname=`${l}${e.redirectPath}`}else t.pathname=e.redirectPath}else e.type==="theme"?(t.searchParams.set("_ab","0"),t.searchParams.set("_fd","0"),t.searchParams.set("_sc","1"),t.searchParams.set("preview_theme_id",e.themeId.toString())):e.type!=="urlRedirect"&&t.searchParams.set("view",e.affix);const i=this.state.essential.visitorTests.find(n=>n.hypothesisId===e.id)?.testId,s=t.pathname+t.search,r=window.location.pathname+window.location.search,o=K(t.hash);if(i&&s!==r&&!o){const n=qe(),l=He({v:2,t:i,n,fh:Me(window.location.pathname+window.location.search)});t.hash=`slr-${n}`;const c=new Date(Date.now()+3e4).toUTCString();document.cookie=`shoplift_redirect=${l};domain=.${window.location.hostname};path=/;SameSite=Strict;expires=${c}`}s===r&&this.showPage(),this.queueRedirect(t)}async refreshVisitor(e){if(e===null||!this.state.essential.isFirstLoad||!this.testConfigs.some(i=>i.visitorOption!=="all"))return;this.log("Refreshing visitor"),this.hidePage();const t=await this.getVisitor(e);t&&t.id&&this.updateLocalVisitor(t)}buildBaseVisitor(){return{shopifyAnalyticsId:this.shopifyAnalyticsId,device:this.device,country:null,...this.state.essential.initialState}}getInitialState(){const e=this.getUTMValue("utm_source")??"",t=this.getUTMValue("utm_medium")??"",i=this.getUTMValue("utm_campaign")??"",s=this.getUTMValue("utm_content")??"",r=window.document.referrer,o=this.device;return{createdAt:new Date,utmSource:e,utmMedium:t,utmCampaign:i,utmContent:s,referrer:r,device:o}}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(e=>e.isThemeTest&&e.hypothesisId!=null&&this.getHypothesis(e.hypothesisId)&&e.themeId===themeId)?(this.log("On active theme test, remov
21ing theme bar"),this.clearThemeBar(!1,!0,this.state),!1):this.state.essential.visitorTests.some(e=>e.isThemeTest&&e.hypothesisId!=null&&!this.getHypothesis(e.hypothesisId)&&e.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(e=>e.hypotheses.some(t=>t.themeId===themeId))?(this.log("Current theme is an inactive theme test, redirecting to main theme"),this.redirectToMainTheme(),!0):this.testConfigs.some(e=>e.hypotheses.some(t=>t.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 e=new URL(window.location.toString());e.searchParams.set("preview_theme_id",""),this.queueRedirect(e)}testsForUrl(e){const t=new URL(window.location.href),i=this.typeFromTemplate();return e.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&&t.pathname.endsWith(r.redirectPath)||r.type==="basicScript"))&&(s.ignoreTestViewParameterEnforcement||!t.searchParams.has("view")||s.hypotheses.map(r=>r.affix).includes(t.searchParams.get("view")??"")))}domTestsForUrl(e){const t=new URL(window.location.href);return e.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(se(r)).test(K(t.toString())))))}async filterTestsByAudience(e,t,i){const s=[],r=e.some(n=>(n.requiresRegion||this.geoViaShopify&&n.requiresCountry)&&!i.some(l=>l.testId===n.id));this.resolvedRegion===null&&r&&(this.log("Hiding page to wait for Shopify region resolution"),this.hidePage(),await this.waitForResolvedRegion()),window.__slRegion=this.resolvedRegion??"";let o=t.country;this.geoViaShopify?o=this.resolvedRegion?this.resolvedRegion.slice(0,2):o:!o&&e.some(n=>n.requiresCountry&&!i.some(l=>l.testId===n.id))&&(this.log("Hiding page to check geoip"),this.hidePage(),o=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 e){if(this.log("Checking audience for test '%s'",n.id),this.state.essential.visitorTests.some(d=>d.testId===n.id&&d.hypothesisId==null)){console.log(`Skipping blocked test '${n.id}'`);continue}const l=this.visitorCreatedDuringTestActive(n.statusHistory);(i.some(d=>d.testId===n.id&&(n.device==="all"||n.device===t.device&&n.device===this.device))||this.isTargetAudience(n,t,l,o))&&(this.log("Visitor is in audience for test '%s'",n.id),s.push(n))}this.testsFilteredByAudience=s}async waitForResolvedRegion(e=1500,t=50){const i=Date.now();for(;this.resolvedRegion===null&&Date.now()-i<e;)await new Promise(s=>window.setTimeout(s,t))}isTargetAudience(e,t,i,s){const r=this.getChannel(t);return(e.device==="all"||e.device===t.device&&e.device===this.device)&&(e.visitorOption==="all"||e.visitorOption==="new"&&i||e.visitorOption==="returning"&&!i)&&(e.targetAudiences.length===0||e.targetAudiences.reduce((o,n)=>o||n.reduce((l,c)=>l&&c(t,i,r,s),!0),!1))}visitorCreatedDuringTestActive(e){let t="";for(const i of e){if(this.state.analytics.visitor!==null&&this.state.analytics.visitor.createdAt<i.createdAt||this.state.essential.initialState.createdAt<i.createdAt)break;t=i.status}return t==="active"}getDomTestsForCurrentUrl(){return this.domTestsForUrl(this.testsFilteredByAudience)}getCurrentVisitorHypothesis(e){return e.flatMap(t=>t.hypotheses).find(t=>t.type!=="dom"&&t.type!=="price"&&this.state.essential.visitorTests.some(i=>i.hypothesisId===t.id))}getVisitorDomHypothesis(e){return e.flatMap(t=>t.hypotheses).filter(t=>(t.type==="dom"||t.type==="price")&&this.state.essential.visitorTests.some(i=>i.hypothesisId===t.id))}getHypothesis(e){return this.testConfigs.filter(t=>t.hypotheses.some(i=>i.id===e)).map(t=>t.hypotheses.find(i=>i.id===e))[0]}getActiveAssignment(){if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig;return t.currentVariant&&t.testId?{testId:t.testId,hypothesisId:t.currentVariant}:null}const e=this.state.essential.visitorTests.find(t=>t.hypothesisId);return e?.hypothesisId?{testId:e.testId,hypothesisId:e.hypothesisId}:null}findActiveSubscriptionTestControl(){for(const e of this.testConfigs){const t=e.hypotheses.find(i=>i.isControl);if(t?.subscriptionData)return{testId:e.id,hypothesis:t}}return null}getDomSelectorsForHypothesis(e){if(!e)return[];if(e.domSelectors&&e.domSelectors.length>0)return e.domSelectors;if(e.priceData){const t=`${this.priceSelectorsSessionKey}_${e.id}`;try{const s=sessionStorage.getItem(t);if(s){const r=JSON.parse(s);return e.domSelectors=r,this.log("Loaded %d price selectors from cache for hypothesis '%s'",r.length,e.id),r}}catch{}const i=$e(e.priceData);e.domSelectors=i;try{sessionStorage.setItem(t,JSON.stringify(i)),this.log("Generated and cached %d price selectors for hypothesis '%s'",i.length,e.id)}catch{this.log("Generated %d price selectors for hypothesis '%s' (cache unavailable)",i.length,e.id)}return i}return[]}hasThemeTest(e){return e.some(t=>t.hypotheses.some(i=>i.type==="theme"))}hasTestThatIsNotThemeTest(e){return e.some(t=>t.hypotheses.some(i=>i.type!=="theme"&&i.type!=="dom"&&i.type!=="price"))}hasThemeAndOtherTestTypes(e){return this.hasThemeTest(e)&&this.hasTestThatIsNotThemeTest(e)}testIsPaused(e){return e.status==="paused"||e.status==="incompatible"||e.status==="suspended"}visitorActiveTestType(){const e=this.state.essential.visitorTests.filter(t=>this.testConfigs.some(i=>i.hypotheses.some(s=>s.id==t.hypothesisId)));return e.length===0?null:e.some(t=>t.isThemeTest)?"theme":"templateOrUrlRedirect"}getReservationType(e){return e==="price"||this.isTemplateTestType(e)?"deferred":"immediate"}isTemplateTestType(e){return["product","collection","landing","index","cart","search","blog","article","collectionList"].includes(e)}getEntryCriteriaKey(e){const t=e.hypotheses.find(i=>i.isControl);if(!t)return`unknown:${e.id}`;switch(t.type){case"theme":return"global:theme";case"basicScript":return"global:autoApi";case"price":return"global:price";case"manualScript":return`conditional:manualApi:${e.id}`;case"urlRedirect":return`conditional:url:${t.redirectPath||"unknown"}`;default:return`conditional:template:${t.type}`}}isGlobalEntryCriteria(e){return e.startsWith("global:")}groupTestsByEntryCriteria(e){const t=new Map;for(const i of e){const s=this.getEntryCriteriaKey(i),r=t.get(s)||[];r.push(i),t.set(s,r)}return t}doesCurrentPageMatchEntryCriteria(e){if(this.isGlobalEntryCriteria(e))return!0;
21if(e==="conditional:manualApi")return!1;if(e.startsWith("conditional:url:")){const t=e.replace("conditional:url:","");return window.location.pathname.endsWith(t)}if(e.startsWith("conditional:template:")){const t=e.replace("conditional:template:","");return this.typeFromTemplate()===t}return!1}hasActiveReservation(){const e=this.getActiveReservations();return Object.values(e).some(t=>!t.isRealized)}getActiveReservation(){const e=this.getActiveReservations();return Object.values(e).find(t=>!t.isRealized)??null}clearStaleReservations(){const e=this.state.temporary.testReservations;if(!e)return;let t=!1;for(const[i,s]of Object.entries(e)){const r=this.testConfigs.find(n=>n.id===s.testId);if(!r){this.log("Test '%s' no longer in config, clearing reservation for criteria '%s'",s.testId,i),delete e[i],t=!0;continue}if(r.status!=="active"){this.log("Test '%s' status is '%s', clearing reservation for criteria '%s'",s.testId,r.status,i),delete e[i],t=!0;continue}this.testsFilteredByAudience.some(n=>n.id===s.testId)||(this.log("Visitor no longer passes audience for test '%s', clearing reservation for criteria '%s'",s.testId,i),delete e[i],t=!0)}t&&this.persistTemporaryState()}createReservations(e){if(this.state.temporary.testReservations||(this.state.temporary.testReservations={}),this.state.temporary.rolledEntryCriteria||(this.state.temporary.rolledEntryCriteria=[]),this.state.temporary.testCategory==="global"){this.createSingleReservation(e,"global");return}const i=e.filter(n=>this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(n))),s=e.filter(n=>!this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(n)));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(n=>({id:n.id,title:n.title,criteria:this.getEntryCriteriaKey(n)})));const r=`conditional:current-page:${this.typeFromTemplate()}`;if(i.length>0&&!this.state.temporary.rolledEntryCriteria.includes(r)){this.createSingleReservation(i,r);for(const n of i){const l=this.getEntryCriteriaKey(n);this.state.temporary.rolledEntryCriteria.includes(l)||this.state.temporary.rolledEntryCriteria.push(l)}}const o=this.groupTestsByEntryCriteria(s);for(const[n,l]of o){if(this.state.temporary.rolledEntryCriteria.includes(n)){this.log("Already rolled for criteria '%s', skipping",n);continue}if(l.some(S=>this.state.essential.visitorTests.some(C=>C.testId===S.id))){this.log("Visitor already has VT for criteria '%s', skipping",n),this.state.temporary.rolledEntryCriteria.push(n);continue}const d=[...l].sort((S,C)=>S.id.localeCompare(C.id));this.log("Test dice roll for criteria '%s' - available tests: %o",n,d.map(S=>({id:S.id,title:S.title})));const u=Math.floor(Math.random()*d.length),h=d[u];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",u+1,l.length,h.id,h.title);const p=this.pickHypothesis(h);if(!p){this.log("No hypothesis picked for test '%s'",h.id);continue}this.sendDiagnosticTelemetry("assignment",h.id,{hypothesisId:p.id,isControl:p.isControl,testType:p.type});const b=this.getReservationType(p.type),E={testId:h.id,hypothesisId:p.id,testType:p.type,reservationType:b,isThemeTest:p.type==="theme",themeId:p.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:n};this.state.temporary.testReservations[n]=E,this.state.temporary.rolledEntryCriteria.push(n),this.log("Created %s reservation for test '%s' (criteria: %s)",b,h.id,n);for(const S of l)S.id!==h.id&&this.markTestAsBlocked(S,n)}this.persistTemporaryState()}createSingleReservation(e,t){if(this.state.temporary.rolledEntryCriteria.includes(t)){this.log("Already rolled for pool '%s', skipping",t);return}if(e.some(u=>this.state.essential.visitorTests.some(h=>h.testId===u.id&&!h.isInvalid))){this.log("Visitor already has VT for pool '%s', skipping",t),this.state.temporary.rolledEntryCriteria.push(t);return}if(e.length===0){this.log("No tests in pool '%s'",t);return}const s=[...e].sort((u,h)=>u.id.localeCompare(h.id));this.log("Test dice roll for pool '%s' - available tests: %o",t,s.map(u=>({id:u.id,title:u.title,criteria:this.getEntryCriteriaKey(u)})));const r=Math.floor(Math.random()*s.length),o=s[r];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",r,e.length,o.id,o.title);const n=this.pickHypothesis(o);if(!n){this.log("No hypothesis picked for test '%s'",o.id);return}this.sendDiagnosticTelemetry("assignment",o.id,{hypothesisId:n.id,isControl:n.isControl,testType:n.type});const l=this.getReservationType(n.type),c=this.getEntryCriteriaKey(o),d={testId:o.id,hypothesisId:n.id,testType:n.type,reservationType:l,isThemeTest:n.type==="theme",themeId:n.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:c};this.state.temporary.testReservations[c]=d,this.state.temporary.rolledEntryCriteria.push(t),this.log("Created %s reservation for test '%s' from pool '%s' (criteria: %s)",l,o.id,t,c);for(const u of e)u.id!==o.id&&this.markTestAsBlocked(u,`pool:${t}`);this.persistTemporaryState()}markTestAsBlocked(e,t){this.state.essential.visitorTests.some(i=>i.testId===e.id)||(this.log("Blocking visitor from test '%s' (reason: %s)",e.id,t),this.state.essential.visitorTests.push({createdAt:new Date,testId:e.id,hypothesisId:null,isThemeTest:e.hypotheses.some(i=>
21i.type==="theme"),shouldSendToGa:!1,isSaved:!0,isInvalid:!0,themeId:void 0}))}realizeReservationForCriteria(e){const t=this.state.temporary.testReservations?.[e];if(!t)return this.log("No reservation found for criteria '%s'",e),!1;if(t.isRealized)return this.log("Reservation already realized for criteria '%s'",e),!1;if(this.state.essential.visitorTests.some(s=>s.testId===t.testId&&!s.isInvalid))return this.log("Visitor already assigned to test '%s'",t.testId),!1;const i=this.getHypothesis(t.hypothesisId);return i?(t.isRealized=!0,this.persistTemporaryState(),this.queueAddVisitorToTest(t.testId,i),this.saveState(),this.log("Realized reservation for test '%s' (criteria: %s)",t.testId,e),!0):(this.log("Hypothesis '%s' not found",t.hypothesisId),!1)}getActiveReservations(){return this.state.temporary.testReservations??{}}getReservationForCurrentPage(){const e=this.getActiveReservations();for(const[t,i]of Object.entries(e)){if(i.isRealized)continue;const s=this.testConfigs.find(r=>r.id===i.testId);if(!(!s||s.status!=="active")&&this.doesCurrentPageMatchEntryCriteria(t))return i}return null}getReservationForTest(e){const t=this.getActiveReservations();return Object.values(t).find(i=>i.testId===e)??null}getReservationTestType(){const e=this.getActiveReservations(),t=Object.values(e);if(t.length===0)return null;for(const i of t)if(i.isThemeTest)return"theme";for(const i of t)if(i.testType==="price")return"price";return t.some(i=>!i.isRealized)?"templateOrUrlRedirect":null}hasPriceTests(e){return e.some(t=>t.hypotheses.some(i=>i.type==="price"))}_priceTestProductIds=null;getPriceTestProductIds(){if(this._priceTestProductIds)return this._priceTestProductIds;const e=new Set;for(const t of this.testConfigs)for(const i of t.hypotheses)if(i.type==="price"){for(const s of i.domSelectors||[]){const r=s.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);r?.[1]&&e.add(r[1])}if(i.priceData?.variants)for(const[s]of i.priceData.variants)e.add(s)}return this._priceTestProductIds=e,this.log("Built price test product ID cache with %d products",e.size),e}isProductInAnyPriceTest(e){return this.getPriceTestProductIds().has(e)}visitorActiveTestTypeWithReservations(){const e=this.getActiveReservations();for(const r of Object.values(e)){if(r.isThemeTest)return"theme";if(r.testType==="price")return"price"}if(Object.values(e).some(r=>!r.isRealized)){if(this.state.temporary.testCategory==="global")for(const o of Object.values(e)){if(o.testType==="theme")return"theme";if(o.testType==="price")return"price";if(o.testType==="basicScript")return"theme"}return"templateOrUrlRedirect"}const i=this.state.essential.visitorTests.filter(r=>!r.isInvalid&&this.testConfigs.some(o=>o.hypotheses.some(n=>n.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 e=this.testConfigs.filter(s=>s.status==="active"&&s.hypotheses.some(r=>r.type==="price"));if(e.length===0)return;const t=this.testsFilteredByAudience.filter(s=>s.hypotheses.some(r=>r.type==="price")),i=e.filter(s=>!t.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),o=this.getDomSelectorsForHypothesis(r);if(o.length===0){this.log("No control selectors for audience-filtered price test '%s'",s.id);continue}const n=new URL(window.location.href);o.some(c=>{try{return new RegExp(se(c)).test(K(n.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:o},()=>{}),this.updatePriceTestHiddenInputs(s.id,"control",!1))}}}pickHypothesis(e){let t=Math.random();const i=e.hypotheses.reduce((r,o)=>r+o.visitorCount,0);return e.hypotheses.sort((r,o)=>r.isControl?o.isControl?0:-1:o.isControl?1:0).reduce((r,o)=>{if(r!==null)return r;const l=e.hypotheses.reduce((c,d)=>c&&d.visitorCount>20,!0)?o.visitorCount/i-o.trafficPercentage:0;return t<=o.trafficPercentage-l?o:(t-=o.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(e){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(e),0),window.setTimeout(()=>{this.syncAllEvents()},2e3)}scheduleRetrySync(){this.clientIdRetryCount>=5||(this.clientIdRetryCount++,window.setTimeout(()=>{this.syncAllEvents()},500))}async syncAllEvents(){const e=async()=>
21{if(this.isSyncing){window.setTimeout(()=>{(async()=>await e())()},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 e()}async syncEvents(){if(!this.state.essential.consentApproved||!this.shopifyAnalyticsId||this.state.analytics.queue.length===0)return;const e=this.state.analytics.queue.length,t=this.state.analytics.queue.splice(0,e);this.log("Syncing %s events",e);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 be(r.testId,r.hypothesisId,r.createdAt)).concat(t)};await this.sendEvents(i);for(const r of this.state.essential.visitorTests.filter(o=>!o.isInvalid&&!o.isSaved&&o.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(o=>!o.isInvalid&&!o.isSaved))r.isSaved=!0,r.savedAt=Date.now()}catch{this.state.analytics.queue.splice(0,0,...t)}finally{this.saveState()}}syncGAEvents(){if(!this.gaConfig.sendEvents){if(he)return;he=!0,this.log("UseGtag is false â skipping GA Events");return}if(this.isSyncingGA){this.log("Already syncing GA - skipping GA events");return}const e=this.state.essential.visitorTests.filter(t=>t.shouldSendToGa);e.length!==0&&(this.isSyncingGA=!0,this.log("Syncing %s GA Events",e.length),Promise.allSettled(e.map(t=>this.sendGAEvent(t))).then(()=>this.log("All gtag events sent")).finally(()=>this.isSyncingGA=!1))}sendGAEvent(e){return new Promise(t=>{this.log("Sending GA Event for test %s, hypothesis %s",e.testId,e.hypothesisId);const i=()=>{this.log("GA acknowledged event for hypothesis %s",e.hypothesisId),e.shouldSendToGa=!1,this.persistEssentialState(),t()},s={exp_variant_string:`SL-${e.testId}-${e.hypothesisId}`};
21this.shopliftDebug&&Object.assign(s,{debug_mode:!0});function r(o,n,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(e){let t;({visitorTests:t,...this.state.analytics.visitor}=e),this.log("updateLocalVisitor - server returned %d tests: %o",t.length,t.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)&&!t.some(o=>o.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 t){const r=this.state.essential.visitorTests.findIndex(n=>n.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 n=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,n?.hypothesisId,s.hypothesisId,n?.isInvalid),s.isInvalid=!1,s.shouldSendToGa=n?.shouldSe
21ndToGa??!1,s.testType=n?.testType,s.assignedTo=n?.assignedTo,s.testTitle=n?.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(e){try{return await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/by-key/${this.shop}/${e}`})}catch{return null}}async sendEvents(e){await this.makeRequest({method:"post",url:`${this.eventHost}/api/v0/events`,data:JSON.stringify(e)})}sendDiagnosticTelemetry(e,t,i){if(!this.telemetryEnabled||!navigator.sendBeacon)return;const s=this.state.essential.consentApproved,r=JSON.stringify({shop:this.shop,testId:t,checkpoint:e,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(e){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]===e)return r[1]||null}return null}hidePage(e){this.log("Hiding page"),this.cssHideClass&&!window.document.documentElement.classList.contains(this.cssHideClass)&&(window.document.documentElement.classList.add(this.cssHideClass),e||setTimeout(this.removeAsyncHide(this.cssHideClass),2e3))}showPage(){this.cssHideClass&&this.removeAsyncHide(this.cssHideClass)()}getDeviceType(){function e(){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 )|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}function t(){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 )|
21sy(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 e()?"mobile":t()?"tablet":"desktop"}removeAsyncHide(e){return()=>{e&&window.document.documentElement.classList.remove(e)}}async getCartState(){try{let e=await this.makeJsonRequest({method:"get",url:`${window.location.origin}/cart.js`});return e===null||(e.note===null&&(e=await this.makeJsonRequest({method:"post",url:`${window.location.origin}/cart/update.js`,data:JSON.stringify({note:""})})),e==null)?null:{token:e.token,total_price:e.total_price,total_discount:e.total_discount,currency:e.currency,items_subtotal_price:e.items_subtotal_price,items:e.items.map(t=>({quantity:t.quantity,variant_id:t.variant_id,key:t.key,price:t.price,final_line_price:t.final_line_price,sku:t.sku,product_id:t.product_id}))}}catch(e){return this.log("Error sending cart info",e),null}}ensureCartAttributesForExistingPriceTests(e){try{if(this.log("Checking visitor assignments for active price tests"),e&&this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig;this.log("Using preview config for merchant:",t.testId);let i="variant";if(t.variants&&t.variants.length>0){const s=t.variants.find(r=>r.id===t.currentVariant);s&&s.isControl&&(i="control")}this.log("Merchant preview - updating hidden inputs:",t.testId,i),this.updatePriceTestHiddenInputs(t.testId,i,!0);return}for(const t of this.state.essential.visitorTests){const i=this.testConfigs.find(o=>o.id===t.testId);if(!i){this.log("Test config not found:",t.testId);continue}const s=i.hypotheses.find(o=>o.id===t.hypothesisId);if(!s||s.type!=="price")continue;const r=s.isControl?"control":"variant";this.log("Updating hidden inputs for price test:",t.testId,r),this.updatePriceTestHiddenInputs(t.testId,r,e)}}catch(t){this.log("Error ensuring cart attributes for existing price tests:",t)}}subscriptionSwapDone=!1;subscriptionHideWrongPlans=null;subscriptionPriceDone=!1;subscriptionUpdateOneTime=null;subscriptionOneTimeDone=!1;swapMap=null;slptValue=null;async subscriptionSwap(){await Ue(this)}async subscriptionPriceChange(){await ze(this)}async subscriptionOneTimePrice(){await We(this)}updatePriceTestHiddenInputs(e,t,i){try{this.cleanupPriceTestObservers();const s=`${e}:${t}:${i?"t":"f"}`,r=T=>{const m=T.getAttribute("data-sl-pid");if(!m)return!0;if(i&&this.state.temporary.previewConfig){const w=this.state.temporary.previewConfig,I=t==="control"?"a":"b",f=w.variants.find(v=>v.label===I);if(!f)return!1;for(const v of f.domSelectors||[]){const g=v.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);if(g){const P=g[1];if(this.log(`Extracted ID from selector: ${P}, comparing to: ${m}`),P===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:",I),!1}const y=this.testConfigs.find(w=>w.id===e);if(!y)return this.log("Test config not found for testId:",e),!1;for(const w of y.hypotheses||[]){for(const I of w.domSelectors||[]){const f=I.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:",e),!0}if(w.priceData?.variants){for(const I of w.priceData.variants)if(I[0]===m)return this.log("Product ID match found in priceData:",m,"for test:",e),!0}}return this.log("No product ID match for:",m,"in test:",e),!1},o=new Set;let n=!1,l=null;const c=(T,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{T.observe(w,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0,attributes:!1})}catch(I){this.log(`Failed to observe element (${m}):`,I)}}),document.body&&document.body.isConnected)try{T.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=(T,m,y,w)=>{const I=T.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: ${T.length}, filtered: ${I.length}`),I.length>0&&U(document,{testId:e,hypothesisId:m,selectors:I})},u=(T,m)=>{this.log(`Applying DOM selector changes for product ID: ${T}`),m.disconnect(),n=!0;try{if(i&&this.state.temporary.previewConfig){const y=t==="control"?"a":"b",w=this.state.temporary.previewConfig.variants.find(I=>I.label===y);if(!w?.domSelectors){this.log(`No DOM selectors found for preview variant: ${y}`);return}d(w.domSelectors,w.id,"preview config",T)}else{const y=this.testConfigs.find(I=>I.id===e);if(!y){this.log(`No test config found for testId: ${e}`);return}const w=y.hypotheses.find(I=>t==="control"?I.isControl:!I.isControl);if(!w?.domSelectors){this.log(`No DOM selectors found for assignment: ${t}`);return}d(w.domSelectors,w.id,"live config",T)}}finally{l!==null&&clearTimeout(l),l=window.setTimeout(()=>{n=!1,l=null,c(m,"reconnection"),this.log("Re-established innerHTML observer after DOM changes")}
21,50)}},h=new MutationObserver(T=>{if(!n)for(const m of T){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,I=w.getAttribute("data-sl-attribute-p");for(;!I&&w.parentElement;)w=w.parentElement,I=w.getAttribute("data-sl-attribute-p");if(!I)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="${I}"`),v&&this.log(`Previous content: "${v}"`),this.log(`Current content: "${f}"`),u(I,h)}});c(h,"initial setup"),o.add(h);const p=new MutationObserver(T=>{T.forEach(m=>{m.addedNodes.forEach(y=>{if(y.nodeType===Node.ELEMENT_NODE){const w=y;E(w);const I=w.matches('input[name="properties[_slpt]"]')?[w]:w.querySelectorAll('input[name="properties[_slpt]"]');I.length>0&&this.log(`MutationObserver found ${I.length} new hidden input(s)`),I.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))}})}})})});o.add(p);const b=new MutationObserver(T=>{T.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,I=m.oldValue,f=w.getAttribute("data-sl-pid");this.log(`data-sl-pid changed from "${I}" 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&&u(f,h),this.log("Re-running payment placement updates after variant change"),E(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))}}})});o.add(b);const E=T=>{T.tagName==="SHOPIFY-PAYMENT-TERMS"&&(this.log("MutationObserver found new shopify-payment-terms element"),this.updateShopifyPaymentTerms(e,t));const m=T.querySelectorAll("shopify-payment-terms");m.length>0&&(this.log(`MutationObserver found ${m.length} shopify-payment-terms in added node`),this.updateShopifyPaymentTerms(e,t)),T.tagName==="AFTERPAY-PLACEMENT"&&(this.log("MutationObserver found new afterpay-placement element"),this.updateAfterpayPlacements(e,t,"afterpay"));const y=T.querySelectorAll("afterpay-placement");y.length>0&&(this.log(`MutationObserver found ${y.length} afterpay-placement in added node`),this.updateAfterpayPlacements(e,t,"afterpay")),T.tagName==="SQUARE-PLACEMENT"&&(this.log("MutationObserver found new square-placement element"),this.updateAfterpayPlacements(e,t,"square"));const w=T.querySelectorAll("square-placement");w.length>0&&(this.log(`MutationObserver found ${w.length} square-placement in added node`),this.updateAfterpayPlacements(e,t,"square")),T.tagName==="KLARNA-PLACEMENT"&&(this.log("MutationObserver found new klarna-placement element"),this.updateKlarnaPlacements(e,t));const I=T.querySelectorAll("klarna-placement");I.length>0&&(this.log(`MutationObserver found ${I.length} klarna-placement in added node`),this.updateKlarnaPlacements(e,t))},S=T=>{b.observe(T,{attributes:!0,attributeFilter:["data-sl-pid"],attributeOldValue:!0,subtree:!1});const m=T.getAttribute("data-sl-pid");this.log(`Started AttributeObserver on specific input with data-sl-pid="${m}"`)},C=()=>{const T=document.querySelectorAll('input[name="properties[_slpt]"]');this.log(`Found ${T.length} existing hidden inputs to check`),T.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"),u(y,h)),S(m)):y&&this.isProductInAnyPriceTest(y)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",
21y):(m.remove(),this.log("Removed non-matching hidden input for product ID:",y))})},_=()=>{document.body?(p.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver on document.body"),C(),E(document.body)):document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{document.body&&(p.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver after DOMContentLoaded"),C(),E(document.body))}):(this.log("Set timeout on observer"),setTimeout(_,10))};_(),window.__shopliftPriceTestObservers=o,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(e,t){this.updatePlacementElements(e,t,"klarna-placement",(i,s)=>{i.setAttribute("data-purchase-amount",s.toString())})}cleanupPriceTestObservers(){const e=window.__shopliftPriceTestObservers;e&&(e.forEach(t=>{t.disconnect()}),e.clear(),this.log("Cleaned up existing price test observers")),delete window.__shopliftPriceTestObservers,delete window.__shopliftPriceTestValue}updateAfterpayPlacements(e,t,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(e,t,s,(o,n)=>{if(i==="afterpay"){const l=(n/100).toFixed(2);o.setAttribute("data-amount",l)}else o.setAttribute("data-amount",n.toString())}),this.log("updateAfterpayPlacements completed")}updatePlacementElements(e,t,i,s){const r=document.querySelectorAll(i);if(r.length===0){this.log(`No ${i} elements found - early return`);return}let o;if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const l=t==="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}o=c.domSelectors,this.log(`Using preview config for ${i} in merchant mode, variant: ${l}`)}else{const l=this.testConfigs.find(d=>d.id===e);if(!l){this.log(`No testConfig found for id: ${e} - early return`);return}
21const c=l.hypotheses.find(d=>t==="control"?d.isControl:!d.isControl);if(!c?.domSelectors){this.log(`No hypothesis or domSelectors found for assignment: ${t} - early return`);return}o=c.domSelectors}const n=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 u=c.getAttribute("data-sl-pid");if(!u){this.log("Hidden input has no data-sl-pid attribute - skipping");return}const h=o.find(S=>{const C=S.cssSelector.match(n);return C&&C[1]===u});if(!h){this.log(`No matching selector found for productId: ${u} - skipping element`);return}const p=h.actions.find(S=>S.scope==="price");if(!p?.value){this.log("No price action or value found - skipping element");return}const b=parseFloat(p.value.replace(/[^0-9.]/g,""));if(Number.isNaN(b)){this.log(`Invalid price "${p.value}" for product ${u} - skipping`);return}const E=Math.round(b*100);s(l,E)}),this.log(`updatePlacementElements completed for ${i}`)}updateShopifyPaymentTerms(e,t){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 o=t==="control"?"a":"b",n=this.state.temporary.previewConfig.variants.find(l=>l.label===o);if(!n||!n.domSelectors){this.log(`No variant found for label ${o} in preview config`);return}s=n.domSelectors,this.log(`Using preview config for shopify-payment-terms in merchant mode, variant: ${o}`)}else{const o=this.testConfigs.find(l=>l.id===e);if(!o)return;const n=o.hypotheses.find(l=>t==="control"?l.isControl===!0:l.isControl===!1);if(!n||!n.domSelectors)return;s=n.domSelectors}const r=new RegExp(`${this.DATA_SL_ATTRIBUTE_P}=["'](\\d+)["']`);i.forEach(o=>{const n=o.getAttribute("variant-id");if(!n)return;const l=s.find(c=>{const d=c.cssSelector.match(r);return d&&d[1]===n});if(l){const c=l.actions.find(d=>d.scope==="price");if(c&&c.value){const d=o.getAttribute("shopify-meta");if(d)try{const u=JSON.parse(d);if(u.variants&&Array.isArray(u.variants)){const h=u.variants.find(p=>p.id?.toString()===n);if(h){h.full_price=c.value;const p=parseFloat(c.value.replace(/[^0-9.]/g,""));if(h.number_of_payment_terms&&h.number_of_payment_terms>1){const b=p/h.number_of_payment_terms;h.price_per_term=`$${b.toFixed(2)}`}o.setAttribute("shopify-meta",JSON.stringify(u))}}}catch(u){this.log("Error parsing/updating shoplift-meta:",u)}}}})}async makeJsonRequest(e){const t=await this.makeRequest(e);return t===null?null:JSON.parse(await t.text(),F)}async makeRequest(e){const{url:t,method:i,headers:s,data:r,signal:o}=e,n=new Headers;if(s)for(const c in s)n.append(c,s[c]);(!s||!s.Accept)&&n.append("Accept","application/json"),(!s||!s["Content-Type"])&&n.append("Content-Type","application/json"),(this.eventHost.includes("ngrok.io")||this.eventHost.includes("ngrok-free.app"))&&n.append("ngrok-skip-browser-warning","1234");const l=await this.fetch(t,{method:i,headers:n,body:r,signal:o});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 ie}throw new Error(`Error sending shoplift request ${l.status}`)}return l}queueAddVisitorToTest(e,t){if(this.state.essential.visitorTests.some(s=>s.testId===e))return;const i=this.testConfigs.find(s=>s.id===e);if(this.state.essential.visitorTests.push({createdAt:new Date,testId:e,hypothesisId:t.id,isThemeTest:t.type==="theme",themeId:t.themeId,isSaved:!1,isInvalid:!1,shouldSendToGa:!0,testType:t.type,assignedTo:t.isControl?"control":"variant",testTitle:i?.title}),t.type==="price"){const s=t.isControl?"control":"variant";this.log("Price test assignment detected, updating cart attributes:",e,s),this.updatePriceTestHiddenInputs(e,s,!1)}}queueCartUpdate(e){this.queueEvent(new Ce(e))}queuePageView(e){this.queueEvent(new Se(e))}queueEvent(e){!this.state.essential.consentApproved&&this.state.essential.hasConsentInteraction||this.state.analytics.queue.length>10||this.state.analytics.queue.push(e)}legacyGetLocalStorageVisitor(){const e=this.localStorageGet(this.legacySessionKey);if(e)try{return JSON.parse(e,F)}catch{}return null}pruneStaleVisitorTests(){this.state.essential.visitorTests=this.state.essential.visitorTests.filter(e=>this.testConfigs.some(t=>t.id==e.testId)||this.inactiveTestConfigs.filter(t=>this.testIsPaused(t)).some(t=>t.id===e.testId))}pruneStateAndSave(){this.pruneStaleVisitorTests(),this.saveState()}saveState(){this.persistEssentialState(),this.persistAnalyticsState()}loadState(){const e=this.loadAnalyticsState(),t={analytics:e,essential:this.loadEssentialState(e),temporary:this.loadTemporaryState()},i=this.legacyGetLocalStorageVisitor(),s=this.legacyGetCookieVisitor(),r=[i,s].filter(o=>o!==null).sort((o,n)=>+n.storedAt-+o.storedAt)[0];return t.analytics.visitor===null&&r&&({visitorTests:t.essential.visitorTests,...t.analytics.visitor}=r,t.essential.isFirstLoad=!1,t.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)),!t.essential.consentApproved&&t.essential.hasConsentInteraction&&this.deleteLocalStorage(this.analyticsSessionKey),t}loadEssentialState(e){const t=this.loadLocalStorage(this.essentialSessionKey),i=this.loadCookie(this.essentialSessionKey),s=this.getInitialState();e.visitor?.device&&(s.device=e.visitor.device);const r={timestamp:new Date,consentApproved:!1,hasConsentInteraction:!1,debugMode:!1,initialState:s,visitorTests:[],isFirstLoad:!0},o=[t,i].filter(n=>n!==null).sort((n,l)=>+l.timestamp-+n.timestamp)[0]??r;return o.initialState||(e.visitor!==null?o.initialState=e.visitor:(o.initialState=s,o.initialState.createdAt=o.timestamp)),o}loadAnalyticsState(){const e=this.loadLocalStorage(this.analyticsSessionKey),t=this.loadCookie(this.analyticsSessionKey),i={timestamp:new Date,visitor:null,queue:[]},s=[e,t].filter(r=>r!==null).sort((r,o)=>+o.timestamp-+r.timestamp)[0]??i;return s.queue.length===0&&e&&e.queue.length>1&&(s.queue=e.queue),s}loadTemporaryState(){const e=this.sessionStorageGet(this.temporarySessionKey),t=e?JSON.parse(e,F):null,i=this.loadCookie(this.temporarySessionKey);return t??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.persist
21CookieState(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(e){const t=this.localStorageGet(e);if(t===null)return null;try{return JSON.parse(t,F)}catch{return null}}loadCookie(e){const t=this.getCookie(e);if(t===null)return null;try{return JSON.parse(t,F)}catch{return null}}persistLocalStorageState(e,t){this.localStorageSet(e,JSON.stringify(t))}persistCookieState(e,t,i=!1){const s=JSON.stringify(t),r=i?"":`expires=${new Date(new Date().getTime()+864e5*365).toUTCString()};`;document.cookie=`${e}=${s};domain=.${window.location.hostname};path=/;SameSite=Strict;${r}`}deleteCookie(e){const t=new Date(0).toUTCString();document.cookie=`${e}=;domain=.${window.location.hostname};path=/;expires=${t};`}deleteLocalStorage(e){window.localStorage.removeItem(e)}getChannel(e){return[{"name":"cross-network","test":(v) => new RegExp(".*cross-network.*", "i").test(v.utmCampaign)},{"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|y
21andex\.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|kakao|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\.o
21pera\.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) => 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)}
21,{"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
21akao|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
21andex\.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(e))?.name??"other"}getShopifyAnalyticsId(){const e=this.getCookie("_shopify_y");if(e)return e;try{const t=this.localStorageGet("Shoplift_ClientId");if(t)return t}catch{}return null}legacyGetCookieVisitor(){const e=this.getCookie("SHOPLIFT");return e===null?null:JSON.parse(e,F)}getCookie(e){const t=this.cookie.split("; ").filter(i=>i.split("=").at(0)===e).at(0);return t===void 0?null:t.split("=").slice(1).join("=")}monitorConsentChange(){document.addEventListener("visitorConsentCollected",e=>{(async()=>await this.onConsentChange(e.detail.analyticsAllowed,!0))()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>this.loadShopifyConsentApiWithRetry()):this.loadShopifyConsentApiWithRetry()}loadShopifyConsentApiWithRetry(){let e=0;const t=()=>{this.loadShopifyConsentApi()||e++<10&&window.setTimeout(t,100)};t()}loadShopifyConsentApi(){if(window.Shopify){this.log("Loading Shopify features");const e=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"),t=window.setTimeout(()=>{(async()=>await e())()},1e3);return}if(this.geoViaShopify){const s=window.Shopify.customerPrivacy.getRegion?.();this.resolvedRegion=typeof s=="string"?s.replace(/-/g,""):""}const i=window.Shopify.customerPrivacy.getTrackingConsent();await this.onConsentChange(window.Shopify.customerPrivacy.analyticsProcessingAllowed(),i==="yes")};let t=window.setTimeout(()=>{(async()=>await e())()},5e3);return window.Shopify.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],i=>{(async()=>{if(window.clearTimeout(t),i){this.log("Error loading consent tracking",i);return}await e()})()}),!0}return!1}async onConsentChange(e,t){try{if(this.log("Consent change detected",e,t),this.state.essential.consentApproved=e,this.state.essential.hasConsentInteraction=t,!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(),this.saveState(),await this.syncAllEvents()}catch(i){this.log("Error syncing on consent change",i)}}isThemePreview(){return isThemePreview||themeRole!=="main"}isAppProxyPath(){const e=["/apps/","/tools/","/a/"],t=window.location.pathname;return e.some(i=>t.startsWith(i))}clearThemeBar(e,t,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(o=>(this.log("Found theme bar"),t&&(this.log("Removing theme bar"),o.remove()),e?this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify({...this.debugState(),stateAtEvaluation:s},ee)}):Promise.resolve(null)))).catch(r=>console.error(r))}waitForElement(e,t){return new Promise(i=>{const s=document.querySelector(t);if(s){i(s);return}const r=new MutationObserver(o=>{const n=document.querySelector(t);if(n){r.disconnect(),i(n);return}});r.observe(e??document.documentElement,{childList:!0})})}setDebug(e){this.state.essential.debugMode=e,this.saveState()}log(e,...t){let i=0;const s=e.replace(/%[sdoOfF]/g,r=>{if(i>=t.length)return r;const o=t[i++];return r==="%o"||r==="%O"?JSON.stringify(o):String(o)});this.logHistory.push(`[${new Date().toISOString()}][SL] ${s}`),!(!this.state.essential.debugMode&&!this.shopliftDebug)&&console.debug(`[SL] ${e}`,...t)}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
21:this.getCookie("is_shopify_merchant"),themeId,url:window.location.href,isThemePreview,themeRole,gaConfig:this.gaConfig},logHistory:this.logHistory}}createViewportObserver(e,t={}){const{threshold:i=this.VIEWPORT_TRACK_THRESHOLD,triggerOnce:s=!0}=t,r=new Set;return new IntersectionObserver(o=>{o.forEach(n=>{if(n.isIntersecting&&!r.has(n.target)){const l=n.target,c=l.getAttribute(this.DATA_SL_TEST_ID);c&&(e(c,l),s&&r.add(l))}})},{threshold:i})}applyChangesWithViewport(e,t,i,s){const r=t.selectorsForViewportTracking??t.selectors,o=n=>{if(this.state.essential.visitorTests.some(h=>h.testId===n)||this.activeViewportObservers.has(n))return;const l=[];if(r.forEach(h=>{e.querySelectorAll(h.cssSelector).forEach(b=>l.push(b))}),l.length===0)return;let c=!1;const d=()=>{c||(c=!0,i(n),u.disconnect(),this.activeViewportObservers.delete(n))},u=this.createViewportObserver(()=>{d()},{triggerOnce:!0,...s});this.activeViewportObservers.set(n,u),this.log(`Created viewport observer for test ${n}, observing ${l.length} elements`),l.forEach(h=>{h.setAttribute(this.DATA_SL_TEST_ID,String(n)),u.observe(h)}),setTimeout(()=>{c||l.forEach(h=>{const p=h.getBoundingClientRect(),b=s?.threshold??this.VIEWPORT_TRACK_THRESHOLD,E=Math.min(p.bottom,window.innerHeight)-Math.max(p.top,0),S=Math.min(p.right,window.innerWidth)-Math.max(p.left,0);p.top<window.innerHeight&&p.bottom>0&&p.left<window.innerWidth&&p.right>0&&E>0&&S>0&&E>=p.height*b&&(this.log(`Price element already visible in viewport for test ${n}:`,h),d())})},100)};t.selectors.length>0&&U(e,t,()=>{}),Te(e,{testId:t.testId,hypothesisId:t.hypothesisId,selectors:r},n=>{o(n)})}applyPriceTestWithMapLookup(e,t,i,s){if(!t.priceData){this.log("No price data for hypothesis '%s'",t.id);return}this.log("Hypothesis '%s' isControl=%s, priceData has %d variants",t.id,t.isControl,t.priceData.variants.length);const r=t.priceData.variants.slice(0,3);for(const[S,C,_]of r)this.log(" Sample priceData: variant=%s, price=%d, compareAt=%d",S,C,_);const o=j(t.priceData),n=new Set;for(const S of i)if(S.priceData)for(const[C]of S.priceData.variants)n.add(C);this.log("Price test Map lookup: %d products in hypothesis, %d total products to track",o.size,n.size);const l=t.priceData,c=new WeakSet;let d=!1;const u="[data-sl-attribute-p], [data-sl-attribute-cap], [data-sl-attribute-discount]",h=S=>{if(c.has(S))return;const C=S.getAttribute("data-sl-attribute-p"),_=S.getAttribute("data-sl-attribute-cap"),T=S.getAttribute("data-sl-attribute-discount"),m=C||_||T;if(!m||!n.has(m))return;c.add(S);const y=o.get(m);y&&(this.log("Applying price for product %s: %d cents (compare at: %d cents)",m,y.priceInCents,y.compareAtPriceInCents),Le(S,m,y,l),this.log("Applied price to element for product %s",m)),!d&&!this.state.essential.visitorTests.some(w=>w.testId===e)&&(S.setAttribute(this.DATA_SL_TEST_ID,String(e)),this.setupElementViewportTracking(S,e,()=>{d||(d=!0,s(e))}))},p=()=>{const S=document.querySelectorAll(u);this.log("Scanning for price elements, found: %d",S.length),S.forEach(h)},b=new MutationObserver(S=>{for(const C of S)C.type==="childList"&&C.addedNodes.forEach(_=>{if(_.nodeType===Node.ELEMENT_NODE){const T=_;(T.hasAttribute("data-sl-attribute-p")||T.hasAttribute("data-sl-attribute-cap")||T.hasAttribute("data-sl-attribute-discount"))&&h(T),T.querySelectorAll(u).forEach(h)}}),C.type==="attributes"&&C.target instanceof Element&&h(C.target)}),E=document.body||document.documentElement;b.observe(E,{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"),p(),document.readyState==="loading"&&document.addEventListener("DOMContentLoaded",()=>{this.log("DOMContentLoaded - rescanning for price elements"),p()}),setTimeout(()=>{this.log("Delayed rescan for price elements"),p()},100),setTimeout(()=>{this.log("Final rescan for price elements"),p()},500)}setupElementViewportTracking(e,t,i){const s=this.VIEWPORT_TRACK_THRESHOLD,r=e.getBoundingClientRect(),o=Math.min(r.bottom,window.innerHeight)-Math.max(r.top,0),n=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&&o>0&&n>0&&o>=r.height*s){this.log("Price element already visible for test %s",t),i();return}const c=new IntersectionObserver(d=>{for(const u of d)if(u.isIntersecting&&u.intersectionRatio>=s){this.log("Price element entered viewport for test %s",t),c.disconnect(),i();break}},{threshold:s});c.observe(e)}debug(){const e=this.debugState();console.log(JSON.stringify(e,ee,2))}}(async function(){window.shopliftInstance||(window.shopliftInstance=new Ze("bo-tee-store.myshopify.com","https://app.shoplift.ai","https://events.shoplift.ai",false,false,false,{"sendEvents":false,"mode":"gtag"}
21,false,false,1000,[],[],null,false),await window.shopliftInstance.init())})();async function Qe(a,e,t,i){const s=Be({log:i});if(t)return i("[SUB-PREVIEW] A side â no overlay applied; widget renders naturally"),s;const r=a.widget.widgetType,o=e?j(e):null;let n=W(e),l=J(a,n),c=l.discountMap,d=l.maxDiscount;function u(){const f=W(e);f!==n&&(n=f,l=J(a,n),c=l.discountMap,d=l.maxDiscount,i(`[SUB-PREVIEW] scope refreshed currentProductId=${n??"n/a"}, maxDiscount=${d}`))}i(`[SUB-PREVIEW] side=B, currentProductId=${n??"n/a"}, maxDiscount=${d}`);function h(f){if(!e||!o)return null;const v=Z(o),g=v?o.get(v):void 0;return g?{formattedVariantPrice:G(g.priceInCents,e),formattedDiscounted:G(g.priceInCents*(1-f/100),e)}:null}function p(f){const v=Y(a,f);if(!v)return d;const g=D(a,"subscriptionInput"),P=g.length?g[0].selector:'input[name="rc_plan"]',A=v.querySelector(`${P}:checked`);if(A){const k=c[A.value];if(k!==void 0)return k}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 P=f.querySelector(g.selector);P?.textContent&&!P.textContent.includes(`${d}%`)&&$(P,A=>N(A,d))}}function E(f,v){const g=h(v);if(!g)return;const P=D(a,"subscriptionCompareAt");for(const A of P){const k=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);k?.textContent&&!k.textContent.includes(g.formattedVariantPrice)&&$(k,x=>/\d/.test(x)?g.formattedVariantPrice:x)}}function S(f,v){const g=h(v);if(!g)return;const P=D(a,"subscriptionPrice");for(const A of P){const k=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);k?.textContent&&!k.textContent.includes(g.formattedDiscounted)&&$(k,x=>/\d/.test(x)?g.formattedDiscounted:x)}}function C(f){const v=D(a,"subscriptionInput"),g=v.length?v[0].selector:'input[name="rc_plan"]',P=D(a,"subscriptionPlanDiscount"),A=P.length?P[0].selector:".rc-plans-button__discount";for(const k of Array.from(f.querySelectorAll("label"))){const x=k.querySelector(g),R=k.querySelector(A);if(x&&R?.textContent){const O=c[x.value];if(O!==void 0){const V=R.textContent.match(/[\d.]+%/)?.[0];V&&V!==`${O}%`&&$(R,L=>N(L,O))}}}}function _(f){const v=f.querySelector("select");if(v)for(const g of Array.from(v.options)){const P=c[g.value];if(P!==void 0&&g.textContent){const A=g.textContent.match(/[\d.]+%/)?.[0];A&&A!==`${P}%`&&(g.textContent=N(g.textContent,P))}}}function T(f){const v=D(a,"onetimePrice");if(!v.length||!e||!o)return;const g=Z(o),P=g?o.get(g):void 0;if(!P)return;const A=G(P.priceInCents,e),k=D(a,"onetimeContainer"),x=k.length?k[0].selector:'[part~="rc-purchase-option__onetime"]',R=f.querySelector(x);if(R)for(const O of v){const V=R.querySelector(`[part~="${O.selector}"]`);V?.textContent&&!V.textContent.includes(A)&&$(V,L=>/\d/.test(L)?A:L)}}function m(f,v){const P=D(a,"subscriptionDiscount").filter(A=>A.selector.includes("benefit")||A.selector==="rc-benefits");for(const A of P){const k=f.querySelector(A.selector);if(k?.shadowRoot){for(const x of Array.from(k.shadowRoot.querySelectorAll("li")))if(x.textContent?.includes("Save")){const R=x.textContent.match(/[\d.]+%/)?.[0];R&&R!==`${v}%`&&$(x,O=>N(O,v))}}}}let y=!1;function w(){if(!y){y=!0;try{u();const f=B(a);if(!f)return;const v=p(f);b(f),E(f,v),S(f,v),T(f);const g=Y(a,f);g&&(r==="buttons"||r==="radio"?C(g):_(g)),m(f,v)}finally{y=!1}}}const I=pe({data:a,runUpdates:w});return function(){I(),s()}}const Xe=Object.freeze(Object.defineProperty({__proto__:null,subscriptionPreviewRender:Qe},Symbol.toStringTag,{value:"Module"}))})(); })("/", { suffix: "", type: "cart" }, "main", 194769650047, false)</script>
21 22
22<script> 23 window.BAO = window.BAO || {}; 24 window.BAO.shoplift = { 25 activeTests:{ 26 plpSwatchesTest: false 27 } 28 } 29</script>
29 30 31 32<!-- Google Tag Manager --> 33
33<script>
vendor: 351 bytes, lines 33-37
33(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 34 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 35 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 36 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 37 })(window,document,'script','dataLayer','
37GTM-W8WZJTX
vendor: 3 bytes, line 37
37');
37</script>
37 38 <!-- End Google Tag Manager --><link rel="preconnect" href="https://connect.nosto.com" crossorigin> 39 <link rel="preconnect" href="https://search.nosto.com" crossorigin> 40 <link rel="preload" as="script" href="https://connect.nosto.com/include/shopify-24797970513" crossorigin> 41 42
42<script type="text/javascript"> 43 (() => {window.nostojs=window.nostojs||(function(cb){(window.nostojs.q=window.nostojs.q||[]).push(cb);});})(); 44 </script>
44 45 46
46<script type="text/javascript"> 47 nostojs(api => api.setAutoLoad(false)); 48 49 // Load placements as soon as the DOM exists â don't wait for the cart Vue app. 50 // Waiting until PushCart mounts is what made the PDP bundle button pop in late. 51 function loadNostoPage () { 52 nostojs(api => api.load()); 53 } 54 55 if (document.readyState === 'loading') { 56 document.addEventListener('DOMContentLoaded', loadNostoPage); 57 } else { 58 loadNostoPage(); 59 } 60 </script>
60 61 62
62<script src="https://connect.nosto.com/include/shopify-24797970513" async></script>
62<link rel="canonical" href="https://boandtee.com/cart" /><link rel="shortcut icon" href="//boandtee.com/cdn/shop/files/BO_TEE_Favicon_32x32.png?v=1705072094" type="image/png" /><title>Your Shopping Cart 63– Bo+Tee</title> 64 65 66<meta property="og:site_name" content="Bo+Tee"> 67<meta property="og:url" content="https://boandtee.com/cart"> 68<meta property="og:title" content="Your Shopping Cart"> 69<meta property="og:type" content="website"> 70<meta property="og:description" content="Get ready to own your next workout in Bo+Tee. Shop our unmissable selection of gymwear including sports bras, crop tops, leggings and shorts. Shop all women's activewear and loungewear now."><meta property="og:image" content="http://boandtee.com/cdn/shop/files/BO_TEE_LOGO.jpg?v=1740560893"> 71 <meta property="og:image:secure_url" content="https://boandtee.com/cdn/shop/files/BO_TEE_LOGO.jpg?v=1740560893"> 72 <meta property="og:image:width" content="4167"> 73 <meta property="og:image:height" content="2083"> 74 <meta property="og:image:alt" content=""> 75<meta name="twitter:site" content="@teamboandtee"><meta name="twitter:card" content="summary_large_image"> 76<meta name="twitter:title" content="Your Shopping Cart"> 77<meta name="twitter:description" content="Get ready to own your next workout in Bo+Tee. Shop our unmissable selection of gymwear including sports bras, crop tops, leggings and shorts. Shop all women's activewear and loungewear now."> 78 79<link rel="prefetch" href="//boandtee.com/cdn/shop/t/1041/assets/layout.checkout.css?v=39139909560851867331787820877" as="style"><link type="text/css" href="//boandtee.com/cdn/shop/t/1041/assets/layout.theme.css?v=118963399314715718731789650659" rel="stylesheet">
79<script> 80 if (!window.BAOv2) { 81 window.BAOv2 = {} 82 } 83 </script>
83 84 85
85<script src="//boandtee.com/cdn/shop/t/1041/assets/bao-utils.js?v=92536147322738943321778661985"></script>
85 86
86<script src="//boandtee.com/cdn/shop/t/1041/assets/bao-events.js?v=13838592554791861231778661985" defer="defer"></script>
86 87
87<script src="//boandtee.com/cdn/shop/t/1041/assets/bao-listeners.js?v=145485902657043987571789398966" defer="defer"></script>
87 88
88<script src="//boandtee.com/cdn/shop/t/1041/assets/bao-custom-element.js?v=11203178802014578541778661985" defer="defer"></script>
88 89
89<script src="//boandtee.com/cdn/shop/t/1041/assets/bao-section-rendering.js?v=114657610007923350911778661985" defer="defer"></script>
89 90
90<script src="//boandtee.com/cdn/shop/t/1041/assets/section-async.js?v=176824107879426408011778661985" defer="defer"></script>
90 91
91<script src="//boandtee.com/cdn/shop/t/1041/assets/search-dropdown.js?v=112559285250587068641778662479" defer="defer"></script>
91 92 93
93<script src="//boandtee.com/cdn/shop/t/1041/assets/product-card-carousel.js?v=178892735292376997101778661985" defer="defer"></script>
93 94
94<script src="//boandtee.com/cdn/shop/t/1041/assets/wishlist-button.js?v=142998393734778500911778661985" defer="defer"></script>
94 95 96
96<script> 97 document.documentElement.className = document.documentElement.className.replace('util-NoJs', ''); 98 99 window.theme = { 100 strings: { 101 addToCart: "Add to Bag", 102 preOrder: "This Item is on pre order ", 103 soldOut: "Sold Out", 104 unavailable: "Unavailable", 105 backInStock: "Notify me when back in stock", 106 productGalleryButton: { 107 original: null, 108 alternative: null 109 }, 110 add_to_wishlist: "Translation missing: en.products.product.add_to_wishlist", 111 regular_price: "Regular price", 112 from: "From {{ price }}", 113 sold_out: "Sold Out", 114 pre_order: "This Item is on pre order ", 115 pre_order_tooltip: "", 116 out_stock_tooltip: "Re-Stocking soon", 117 discontinued_tooltip: "Discontinued", 118 product_form_legend: "Translation missing: en.general.accessibility.product_form_legend", 119 more: "More", 120 }, 121 customer: { 122 loggedIn: `false` 123 }, 124 wishlistDisabledTags: "out-of-season, no-restock", 125 moneyFormat: "${{amount}}", 126 currency: "GBP", 127 currencySymbol: "$" 128 };</script>
128<link rel="preconnect" href="https://fonts.googleapis.com"> 129<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 130<link href="https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&display=swap" rel="stylesheet">
131<script src="//boandtee.com/cdn/s/shopify/shopify_common.js" type="text/javascript"></script>
131 132
132<script src="//boandtee.com/cdn/s/javascripts/currencies.js" type="text/javascript"></script>
132 133 134<link rel="prefetch" href="//boandtee.com/cdn/shop/t/1041/assets/layout.checkout.js?v=104453329086152915651786700538" as="script">
134<script type="text/javascript" src="//boandtee.com/cdn/shop/t/1041/assets/[email protected]?v=29738629400461370591789650662" defer="defer"></script>
134<script type="text/javascript" src="//boandtee.com/cdn/shop/t/1041/assets/layout.theme.js?v=107273232322943099251789650659" defer="defer"></script>
134<link rel="prefetch" href="//boandtee.com/cdn/shop/t/1041/assets/[email protected]_card.chunk.ab104.js?v=89117628560096459401789650656" as="script"><link rel="prefetch" href="//boandtee.com/cdn/shop/t/1041/assets/template.gift_card.js?v=71070820595261111761789650655" as="script"><link rel="prefetch" href="//boandtee.com/cdn/shop/t/1041/assets/template.page.faqs.js?v=87385251199271502001789650657" as="script"><link rel="prefetch" href="//boandtee.com/cdn/shop/t/1041/assets/template.product.js?v=161010645254868690331789650660" as="script"><link rel="prefetch" href="//boandtee.com/cdn/shop/t/1041/assets/template.addresses.js?v=128712340343083906581789650661" as="script"><link rel="prefetch" href="//boandtee.com/cdn/shop/t/1041/assets/template.login.js?v=141922211485559023271789650655" as="script"><meta name="facebook-domain-verification" content="9qjg6ebhhkq47v4540hc4afn3z7u4x" /> 135 <meta name="facebook-domain-verification" content="n3erzurjgd4rt3ip5mlkcfoldvl5kr" /> 136 <meta name="tapcart-banner:appIcon" content="https://storage.googleapis.com/tapcart-150607.appspot.com/3080f7e61d5e67a5933b3c6476fc425a_i.jpeg"><div data-gb-custom-block data-tag="include" data-0='nosto-tagging'></div>
136<script> 137 (function () { 138 var name = 'nostojs' 139 window[name] = window[name] || function (cb) {(window[name].q = window[name].q || []).push(cb)} 140 })() 141</script>
vendor: 1 bytes, line 141
141
142<script type="text/javascript" src="//connect.nosto.com/include/shopify-24797970513" async></script>
142 143
144<script> 145 class NostoColourSwatches extends HTMLElement { 146 constructor() { 147 super(); 148 149 const prod_swatches = this.getAttribute('data-swatches').replace('[', '').replaceAll('"', '').replace(']', '').split(','); 150 const store_colours = JSON.parse(document.getElementById('ShopColoursMetadata').textContent); 151 let colours = ''; 152 let formatted_colour = ''; 153 154 if (prod_swatches) { 155 prod_swatches.forEach(colour => { 156 if (colour.indexOf(':') !== -1) { 157 formatted_colour = colour.substring(colour.indexOf(':') + 2); 158 } else { 159 formatted_colour = colour; 160 } 161 colours += colours == '' ? '' : ','; 162 colours += formatted_colour; 163 }); 164 165 if (colours !== '') { 166 const swatches_arr = colours.split(','); 167 let shop_colour_details; 168 const product_url = this.getAttribute('data-url') 169 let colours_div = document.createElement(product_url ? "a" : "div"); 170 colours_div.classList.add('prd-Card_Colors'); 171 172 if (product_url) { 173 colours_div.setAttribute('href', product_url); 174 } 175 176 for (let i = 0; i < swatches_arr.length; i++) { 177 let colour_div = document.createElement("span"); 178 colour_div.classList.add('prd-Card_Color'); 179 shop_colour_details = store_colours.find( record => record.colour_title === swatches_arr[i].toLowerCase()) 180 181 if (shop_colour_details.colour_hex != '') { 182 colour_div.style.backgroundColor = shop_colour_details.colour_hex; 183 colours_div.appendChild(colour_div); 184 } else if (shop_colour_details.colour_img != '') { 185 colour_div.style.backgroundImage = `url('${shop_colour_details.colour_img}')`; 186 colours_div.appendChild(colour_div); 187 } 188 189 if (i > 1) { 190 break; 191 } 192 } 193 194 if (swatches_arr.length > 3) { 195 let more_div = document.createElement("span"); 196 more_div.classList.add('prd-Colours_Remaining'); 197 more_div.textContent = `+${swatches_arr.length - 3} more`; 198 colours_div.appendChild(more_div); 199 } 200 201 this.appendChild(colours_div); 202 } 203 } 204 } 205 } 206 customElements.define('nosto-colour-swatches', NostoColourSwatches); 207</script>
207 208 209<link rel="dns-prefetch" href="https://swymstore-v3premium-01.swymrelay.com" crossorigin> 210<link rel="dns-prefetch" href="//swymv3premium-01.azureedge.net/code/swym-shopify.js"> 211<link rel="preconnect" href="//swymv3premium-01.azureedge.net/code/swym-shopify.js">
212<script id="swym-snippet"> 213 window.swymLandingURL = document.URL; 214 window.swymCart = {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"USD","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}; 215 window.swymPageLoad = function(){ 216 window.SwymProductVariants = window.SwymProductVariants || {}; 217 window.SwymHasCartItems = 0 > 0; 218 window.SwymPageData = {}, window.SwymProductInfo = {}; 219 var unknown = {et: 0}; 220 window.SwymPageData = unknown; 221 222 window.SwymPageData.uri = window.swymLandingURL; 223 }; 224 225 if(window.selectCallback){ 226 (function(){ 227 // Variant select override 228 var originalSelectCallback = window.selectCallback; 229 window.selectCallback = function(variant){ 230 originalSelectCallback.apply(this, arguments); 231 try{ 232 if(window.triggerSwymVariantEvent){ 233 window.triggerSwymVariantEvent(variant.id); 234 } 235 }catch(err){ 236 console.warn("Swym selectCallback", err); 237 } 238 }; 239 })(); 240 } 241 window.swymCustomerId = null; 242 window.swymCustomerExtraCheck = null; 243 244 var swappName = ("Wishlist" || "Wishlist"); 245 var swymJSObject = { 246 pid: "oNyF\/VqOSaXBF+0H+\/dDAy2ddiZofO953yIHaXXWD8Y=" || "oNyF/VqOSaXBF+0H+/dDAy2ddiZofO953yIHaXXWD8Y=", 247 interface: "/apps/swym" + swappName + "/interfaces/interfaceStore.php?appname=" + swappName 248 }; 249 window.swymJSShopifyLoad = function(){ 250 if(window.swymPageLoad) swymPageLoad(); 251 if(!window._swat) { 252 (function (s, w, r, e, l, a, y) { 253 r['SwymRetailerConfig'] = s; 254 r[s] = r[s] || function (k, v) { 255 r[s][k] = v; 256 }; 257 })('_swrc', '', window); 258 _swrc('RetailerId', swymJSObject.pid); 259 _swrc('Callback', function(){initSwymShopify();}); 260 }else if(window._swat.postLoader){ 261 _swrc = window._swat.postLoader; 262 _swrc('RetailerId', swymJSObject.pid); 263 _swrc('Callback', function(){initSwymShopify();}); 264 }else{ 265 initSwymShopify(); 266 } 267 } 268 if(!window._SwymPreventAutoLoad) { 269 swymJSShopifyLoad(); 270 } 271 window.swymGetCartCookies = function(){ 272 var RequiredCookies = ["cart", "swym-session-id", "swym-swymRegid", "swym-email"]; 273 var reqdCookies = {}; 274 RequiredCookies.forEach(function(k){ 275 reqdCookies[k] = _swat.storage.getRaw(k); 276 }); 277 var cart_token = window.swymCart.token; 278 var data = { 279 action:'cart', 280 token:cart_token, 281 cookies:reqdCookies 282 }; 283 return data; 284 } 285 286 window.swymGetCustomerData = function(){ 287 288 return {status:1}; 289 290 } 291</script>
291 292 293<style id="safari-flasher-pre"></style>
294<script> 295 if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { 296 document.getElementById("safari-flasher-pre").innerHTML = '' 297 + '#swym-plugin,#swym-hosted-plugin{display: none;}' 298 + '.swym-button.swym-add-to-wishlist{display: none;}' 299 + '.swym-button.swym-add-to-watchlist{display: none;}' 300 + '#swym-plugin #swym-notepad, #swym-hosted-plugin #swym-notepad{opacity: 0; visibility: hidden;}' 301 + '#swym-plugin #swym-notepad, #swym-plugin #swym-overlay, #swym-plugin #swym-notification,' 302 + '#swym-hosted-plugin #swym-notepad, #swym-hosted-plugin #swym-overlay, #swym-hosted-plugin #swym-notification' 303 + '{-webkit-transition: none; transition: none;}' 304 + ''; 305 window.SwymCallbacks = window.SwymCallbacks || []; 306 window.SwymCallbacks.push(function(tracker){ 307 tracker.evtLayer.addEventListener(tracker.JSEvents.configLoaded, function(){ 308 // flash-preventer 309 var x = function(){ 310 SwymUtils.onDOMReady(function() { 311 var d = document.createElement("div"); 312 d.innerHTML = "<style id='safari-flasher-post'>" 313 + "#swym-plugin:not(.swym-ready),#swym-hosted-plugin:not(.swym-ready){display: none;}" 314 + ".swym-button.swym-add-to-wishlist:not(.swym-loaded){display: none;}" 315 + ".swym-button.swym-add-to-watchlist:not(.swym-loaded){display: none;}" 316 + "#swym-plugin.swym-ready #swym-notepad, #swym-plugin.swym-ready #swym-overlay, #swym-plugin.swym-ready #swym-notification," 317 + "#swym-hosted-plugin.swym-ready #swym-notepad, #swym-hosted-plugin.swym-ready #swym-overlay, #swym-hosted-plugin.swym-ready #swym-notification" 318 + "{-webkit-transition: opacity 0.3s, visibility 0.3ms, -webkit-transform 0.3ms !important;-moz-transition: opacity 0.3s, visibility 0.3ms, -moz-transform 0.3ms !important;-ms-transition: opacity 0.3s, visibility 0.3ms, -ms-transform 0.3ms !important;-o-transition: opacity 0.3s, visibility 0.3ms, -o-transform 0.3ms !important;transition: opacity 0.3s, visibility 0.3ms, transform 0.3ms !important;}" 319 + "</style>"; 320 document.head.appendChild(d); 321 }); 322 }; 323 setTimeout(x, 10); 324 }); 325 }); 326 } 327</script>
327 328<style id="swym-product-view-defaults"> 329 /* Hide when not loaded */ 330 .swym-button.swym-add-to-wishlist-view-product:not(.swym-loaded){ 331 display: none; 332 } 333</style> 334 335<link href="//boandtee.com/cdn/shop/t/1041/assets/track-order-form.css?v=53161214997485443151780480848" rel="stylesheet" type="text/css" media="all" /> 336<link href="//boandtee.com/cdn/shop/t/1041/assets/modal-media.css?v=99327363589309720471778661985" rel="stylesheet" type="text/css" media="all" /> 337
338<script 339 src="//boandtee.com/cdn/shop/t/1041/assets/track-order-form.js?v=9612110471333105461778661985" 340 type="module" 341></script>
341 342
343<script 344 src="//boandtee.com/cdn/shop/t/1041/assets/modal-element.js?v=14154043877505254191778661985" 345 type="module" 346></script>
346<link href="//boandtee.com/cdn/shop/t/1041/assets/modal.css?v=26581237795654960551778661985" rel="stylesheet" type="text/css" media="all" /> 347 348<modal-element class="mod-Modal mod-Modal-trackorder" data-modal="track-order" aria-hidden="true"> 349 <div class="mod-Modal_Outer"> 350 <div class="mod-Modal_Inner lyt-Container"> 351 <div class="mod-Modal_Wrapper"> 352 <header class="mod-Modal_Header"> 353 <button type="button" class="mod-Modal_Close" data-el="modal-element.close"> 354 <span class="mod-Modal_Icon mod-Modal_Icon-close"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 355 <path d="M15.89 14.696l-4.734-4.734 4.717-4.717c.4-.4.37-1.085-.03-1.485s-1.085-.43-1.485-.03L9.641 8.447 4.97 3.776c-.4-.4-1.085-.37-1.485.03s-.43 1.085-.03 1.485l4.671 4.671-4.688 4.688c-.4.4-.37 1.085.03 1.485s1.085.43 1.485.03l4.688-4.687 4.734 4.734c.4.4 1.085.37 1.485-.03s.43-1.085.03-1.485z"/> 356</svg> 357</span> 358 359 <span class="util-ScreenReaderOnly"> 360 Translation missing: en.accessibility.close 361 </span> 362 </button> 363 </header> 364 365 <div class="mod-Modal_Body"> 366 <track-order-form><div class="trk-OrderTracker_Image trk-OrderTracker_Image-desktop"><div class="rsp-Image " style="--Image_AspectRatio: 50.13888888888888%; aspect-ratio: 4470 / 2241.208333333333;"> 367 368 <img src="//boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=4470" srcset="//boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=180 180w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=360 360w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=540 540w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=720 720w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=900 900w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=1080 1080w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=1296 1296w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=1512 1512w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=1728 1728w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=1944 1944w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=2160 2160w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=2376 2376w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=2592 2592w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=2880 2880w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=3024 3024w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=3440 3440w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&width=3840 3840w" width="4470" height="2241" loading="lazy" sizes="(max-width: 767px) 100vw, (min-width: 768px) 100vw" class="rsp-Image_Image "> 369 370</div> 371</div><div class="trk-OrderTracker_Image trk-OrderTracker_Image-mobile"><div class="rsp-Image " style="--Image_AspectRatio: 156.0%; aspect-ratio: 750 / 1170.0;"> 372 373 <img src="//boandtee.com/cdn/shop/files/Alumna-ML_MOBILE.jpg?v=1756824898&width=750" srcset="//boandtee.com/cdn/shop/files/Alumna-ML_MOBILE.jpg?v=1756824898&width=180 180w, //boandtee.com/cdn/shop/files/Alumna-ML_MOBILE.jpg?v=1756824898&width=360 360w, //boandtee.com/cdn/shop/files/Alumna-ML_MOBILE.jpg?v=1756824898&width=540 540w, //boandtee.com/cdn/shop/files/Alumna-ML_MOBILE.jpg?v=1756824898&width=720 720w" width="750" height="1170" loading="lazy" sizes="(max-width: 767px) 100vw, (min-width: 768px) calc(100vw / 3)" class="rsp-Image_Image "> 374 375</div> 376</div><form 377 class="frm-Form trk-Form" 378 method="get" 379 action="https://boandtee.narvar.com/tracking/boandtee" 380 accept-charset="utf-8" 381 target="https://boandtee.narvar.com/tracking/boandtee" 382 data-track-order-form-el="form" 383 > 384 <input type="hidden" name="locale" value="en_GB"><h3>Track My Order</h3><div class="frm-Form_Row"><label class="frm-Form_Label" for="order-number-input">Order Number</label><input 385 name="order_number" 386 id="order-number-input" 387 class="trk-Form_Input frm-Form_Input" 388 placeholder="BT123456" 389 title="Order number" 390 required 391 data-track-order-form-el="order" 392 > 393 </div> 394 395 <button 396 class="trk-Form_Button btn-Button btn-Quaternary" 397 type="submit" 398 data-track-order-form-el="submit" 399 > 400 Track Order 401 </button> 402 </form> 403 </track-order-form> 404 </div> 405 </div> 406 </div> 407 </div> 408</modal-element><link rel="alternate" href="https://boandtee.com" hreflang="en-gb" /> 409 <link rel="alternate" href="https://boandtee.com" hreflang="x-default" /> 410 <link rel="alternate" href="https://us.boandtee.com" hreflang="en-us" /> 411 <link rel="alternate" href="https://aus.boandtee.com" hreflang="en-au" /><style>:root { 412 --promotion-bar-height: 28px; 413 }</style> 414 415 <style> 416 html {--Swatch_Pecanmarl:#4d3a33;--Swatch_Matchaplaid:;--Swatch_Chestnutstripe:;--Swatch_Berrystripe:;--Swatch_Pebble:#d0d0d0;--Swatch_Confettistripe:;--Swatch_Darkcocoa:#6c614e;--Swatch_Mintchip:;--Swatch_Matchameadow:;--Swatch_Espressogingham:;--Swatch_Chestnut:#7b5d52;--Swatch_Plumplaid:;--Swatch_Berryplaid:;--Swatch_Chocchip:;--Swatch_Mintstripe:;--Swatch_Peachstripe:;--Swatch_Cottoncandy:;--Swatch_Cookiebutter:;--Swatch_Sorbet:#ffeffd;--Swatch_Buttercream:#fff7e1;--Swatch_Buttercream:#fff7e1;--Swatch_Bloom:#f4cccc;--Swatch_Greymarlstripe:#e9e8ec;--Swatch_Multistripe:;--Swatch_Aquastripe:;--Swatch_Marshmallow:#f2f2f2;--Swatch_Multistripe:;--Swatch_Pralinestripe:;--Swatch_Praline:#ad8b75;--Swatch_Mauvestripe:;--Swatch_Peppermintpolkadot:;--Swatch_Monochromepolkadot:;--Swatch_Coconut:#f2f2f2;--Swatch_Vanilla:#f2f2f2;--Swatch_Jade:#aac994;--Swatch_Burgundy:#54142c;--Swatch_Plum:#54142c;--Swatch_Ice:#ece9e4;--Swatch_Blackleopard:#000000;--Swatch_Marine:#6291bc;--Swatch_Chilli:#d6372b;--Swatch_Crimsonred:#b7042d;--Swatch_Greystripe:;--Swatch_Magentapink:#c05273;--Swatch_Pinkstripe:;--Swatch_Strawberryred:#e65c5c;--Swatch_Strawberry:#ff3838;--Swatch_Oat:#fffaed;--Swatch_Yellowstripe:;--Swatch_Bluestripe:;--Swatch_Yellow:#fccf3e;--Swatch_Mint:#87dcb8;--Swatch_Multimocha:#b19886;--Swatch_Multipink:#f5b5c9;--Swatch_Sky:#bfd9f2;--Swatch_Bluegrey:#b6c7db;--Swatch_Pecan:#2f2420;--Swatch_Grape:#680737;--Swatch_Charcoalgrey:#766f6e;--Swatch_Foggrey:#ddd8d8;--Swatch_Ecru:#fffaed;--Swatch_Cherryred:#ed2213;--Swatch_Cherry:#951e1e;--Swatch_Royalblue:#1a359c;--Swatch_Pastelpink:#f5dce0;--Swatch_Balletpink:#f4e3e9;--Swatch_Icewhite:#f3f6f4;--Swatch_Creammarl:#ede8d0;--Swatch_Icemarl:#e5e4e3;--Swatch_Charcoalmarl:#4a4a4a;--Swatch_:;--Swatch_:;--Swatch_Bubblegumpink:#ff7096;--Swatch_Washedcharcoal:#615c61;--Swatch_Washedicepink:#ecced5;--Swatch_Washedblue:#939eb3;--Swatch_Washedcream:#dcd1c9;--Swatch_Ash:#665e5e;--Swatch_Cobaltblue:#0038c5;--Swatch_Varsitygreen:#017151;--Swatch_Pacificgrey:#e8e8e8;
416--Swatch_Goldenyellow:#ffe65a;--Swatch_Poppyred:#fb4437;--Swatch_Turquoiseblue:#02cae7;--Swatch_Marble:#fff9e6;--Swatch_Deepolive:#b5a780;--Swatch_Mochabrown:#967969;--Swatch_Sagegrey:#bfc6b2;--Swatch_Sagemarl:#bbd8c4;--Swatch_Pistachio:#bbd8c4;--Swatch_Bone:#fff7ec;--Swatch_Lavenderblue:#a1acff;--Swatch_Mineral:#bdb6a2;--Swatch_Espresso:#644d2a;--Swatch_Vanilla:#fffbe8;--Swatch_Washednavy:#4479ab;--Swatch_Lightgreymelange:#eeeeee;--Swatch_Lightgreen:#989982;--Swatch_Greymelange:#808080;--Swatch_Cloudygrey:#d7dcdd;--Swatch_Espresso:#bf9f88;--Swatch_Cobalt:#446ce5;--Swatch_Iolite:#9598e9;--Swatch_Tangored:#df2929;--Swatch_Icegrey:#eeeeee;--Swatch_Chocolate:#93411b;--Swatch_Core:chocolate:#5e2e26;--Swatch_Electricblue:#25b2eb;--Swatch_Bubblegumpink:#f296ad;--Swatch_Powderblue:#9fc5e8;--Swatch_Powderpink:#f6e2ee;--Swatch_Cocoabrown:#633507;--Swatch_Cocoa:#a46729;--Swatch_Dusk:#766c91;--Swatch_Cocoa:#ab917f;--Swatch_Iceberggreen:#a8c1b4;--Swatch_Jadegreen:#214d57;--Swatch_Raspberry:#d80134;--Swatch_Warmgrey:#b3b2b0;--Swatch_Flamingopink:#fc8eac;--Swatch_Fuchsia:#fc7adc;--Swatch_Fuchsiapink:#ff0084;--Swatch_Butteryellow:#f5e3a0;--Swatch_Butter:#fff6ab;--Swatch_Keylime:#e4f9a2;--Swatch_Coralorange:#ff7f50;--Swatch_Vintagegrey:#bcbcbc;--Swatch_Mintgreen:#c7ffd8;--Swatch_Softlilac:#bfb2ce;--Swatch_Eggshell:#faf9e3;--Swatch_Violetpink:#f8dce0;--Swatch_Sugarpink:#f882c5;--Swatch_Periwinkle:#ccccff;--Swatch_Softyellow:#ffe9aa;--Swatch_Classicnavy:#12375a;--Swatch_Midnight:#12375a;--Swatch_Softwhite:#fbfaf5;--Swatch_Softpink:#f5dadf;--Swatch_Ballet:#f5dadf;--Swatch_Taupebrown:#7e5e60;--Swatch_Softolive:#a5ab73;--Swatch_Mahogany:#751f0b;--Swatch_Softlavender:#f7eaff;--Swatch_:;--Swatch_Softpeach:#ffe9e0;--Swatch_Softblue:#b8cfe0;--Swatch_Bone:#f9f0e1;--Swatch_Softgrey:#eeeeee;--Swatch_Plum:#741b47;--Swatch_Dustymauve:#ead1dc;--Swatch_Dustypink:#d5a6bd;--Swatch_Dustylilac:#d9d2e9;--Swatch_Dustylavender:#d7d2e3;--Swatch_Dustyteal:#94cfd0;--Swatch_Denimblue:#cfe2f3;--Swatch_Darkred:#920707;--Swatch_Mauve:#e5b6ce;--Swatch_Berry:#f1cad5;--Swatch_Taupe:#c7a194;--Swatch_Darkrose:#a85d82;--Swatch_Darknavy:#184b7c;--Swatch_:;--Swatch_Jetblack:#000000;--Swatch_Sage:#95a98d;--Swatch_Indigo:#7d6fa9;--Swatch_:;--Swatch_Blueprint:#9fc5e8;--Swatch_Violet:#b4a7d6;--Swatch_Darkpurple:#5c2a8b;--Swatch_Berry:#bb0049;--Swatch_Darkpink:#c54e8c;--Swatch_Turquoise:#2adeda;--Swatch_Warmbrown:#7f4408;--Swatch_Beigeprint:#fce5cd;--Swatch_Black:#000000;--Swatch_Leadblue:#4e686e;--Swatch_Rust:#9c5642;--Swatch_Orange:#ff850f;--Swatch_Pink:#e7a5c8;--Swatch_Blushpink:#ffccd0;--Swatch_Blushmarl:#f4cccc;--Swatch_Red:#ff0000;--Swatch_Lightgrey:#c9c9c9;--Swatch_Silver:#b2b2b2;--Swatch_Cream:#f5edd6;--Swatch_Lilac:#b69dd4;--Swatch_Lilacivory:#b69dd4;--Swatch_Blue:#779fe1;--Swatch_Green:#6db596;--Swatch_Jade:#93c47d;--Swatch_Greenivory:#6db596;--Swatch_Peach:#fbac82;--Swatch_Blackmarl:#464748;--Swatch_Marlblack:;--Swatch_Coral:#ff8362;--Swatch_Sand:#c1a68d;--Swatch_Copperbrown:#a05b14;--Swatch_Steelblue:#3b5790;--Swatch_Mineralgreen:#9fbec3;--Swatch_Marledgrey:#dedede;--Swatch_Marledoat:#faf3e5;--Swatch_Onyxblack:#252525;--Swatch_Navy:#313d64;--Swatch_Blueviolet:#818bca;--Swatch_Lemonmarl:#ffefbd;--Swatch_Mochamarl:#ab917f;--Swatch_Pinkmarl:#f7dde7;--Swatch_Palepinkmarl:#ebd1d9;--Swatch_Palepink:#e3c7cb;--Swatch_Ivorymarl:#ded6c9;--Swatch_Lemon:#f6e8c6;--Swatch_Tan:#b6a08c;--Swatch_Blush:#f4dddf;--Swatch_Iceblue:#d2e7f8;--Swatch_Ice:#ece9e4;--Swatch_Bamboogreen:#c6d6bf;--Swatch_Babyblue:#abc5e0;--Swatch_Babypink:#f3afcc;--Swatch_Babypinkprint:#ff9bd2;--Swatch_Slateblue:#7f99c9;--Swatch_Slategrey:#708090;--Swatch_Slate:#305773;--Swatch_Tealgreen:#019190;--Swatch_Brightblue:#0074fd;--Swatch_Lightblue:#def3ff;--Swatch_Darkblue:#0561be;--Swatch_Purple:#b69dd4;--Swatch_Lavender:#d9d2e9;--Swatch_Tiedye:;--Swatch_White:#ffffff;--Swatch_Limegreen:#cce99e;--Swatch_Caramel:#c68f65;--Swatch_Lightbrown:#864c24;--Swatch_Darkbrown:#56352d;--Swatch_Brown:#614533;--Swatch_Brownmarl:#be9c86;--Swatch_Darkgreen:#124b08;--Swatch_Melangeblue:#7a898f;--Swatch_Melangegreen:#b7c2b2;--Swatch_Melangegrey:#a09998;--Swatch_Melangebrown:#ae856c;--Swatch_Melangered:#a2242f;--Swatch_Melangepurple:#634f62;--Swatch_Darkgrey:#878686;--Swatch_Aqua:#29bad1;--Swatch_Peppermint:#afe0e8;--Swatch_Teal:#008799;--Swatch_Ivory:#fffff0;--Swatch_Candypink:#ff89bf;--Swatch_Hotpink:#e30d4c;--Swatch_Truffle:#3c2a28;--Swatch_Hotred:#cc012c;--Swatch_Charcoal:#4c515b;--Swatch_Sky:#afd5f0;--Swatch_Sweetpink:#f2b1c5;--Swatch_Milk:#ffffff;--Swatch_Coconutpolkadot:;--Swatch_Mauvepink:#d5adb8;--Swatch_Palegrey:#c8ccca;--Swatch_Grey:#c4c4c4;--Swatch_Terracotta:#ce8477;--Swatch_Beige:#cfba9e;--Swatch_Oatmeal:#cfba9e;--Swatch_Coolblue:#b7c0d7;--Swatch_Stone:#d1c0a8;--Swatch_Multi:#eeeeee;--Swatch_Whitepink:#fff4f7;--Swatch_Whitemulti:#ffffff;--Swatch_Blushpolkadot:;--Swatch_Pinkmulti:#fb9dc8;--Swatch_Lightpink:#ffc0d5;--Swatch_Deeporange:#ff6600;--Swatch_Lightorange:#fda722;--Swatch_Olive:#808000;--Swatch_Khaki:#7f8042;--Swatch_Washedkhaki:#c4ca9c;--Swatch_Darkkhaki:#5b613f;--Swatch_Rose:#e7a5c8;--Swatch_Matchagreen:#b7b179;--Swatch_Matcha:#d9ead3;--Swatch_Acai:#ae7a95;--Swatch_Heathergrey:#d5d5d8;--Swatch_Chestnutbrown:#af876d;--Swatch_Ceruleanblue:#4b81bf;--Swatch_Deepred:#6b0000;--Swatch_Washedblack:#1f262a;--Swatch_Limestone:#e9ebd5;--Swatch_Heatheroat:#e2b68f;--Swatch_Confidenceblue:#cfddff;
416--Swatch_Consistencygrey:#f1f1f1;--Swatch_Mocha:#915f59;--Swatch_Warmtaupe:#e5ae77;--Swatch_Greymarl:#e0e0e0;--Swatch_Lightgreymarl:#ededed;--Swatch_Pink/navy/burgundy:#642619;--Swatch_Cashmere:#ffdba8;--Swatch_Fog:#eeeeee;--Swatch_Onyx:#000000;} 417 </style><link rel="preconnect" href="https://fonts.googleapis.com"> 418<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 419<link href="https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&display=swap" rel="stylesheet">
420<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
420<meta name="google-site-verification" content="9y6urAiQSJNpa7z657iNnjL5b8zgN6XwiBryYklQ0NY"> 421<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/24797970513/digital_wallets/dialog"> 422<meta id="in-context-paypal-metadata" data-shop-id="24797970513" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD">
423<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=10127999359"></script>
423 424<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
425<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=10127999359&shop_id=24797970513" crossorigin="anonymous"></script>
vendor: 1 bytes, line 425
425
426<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":24797970513,"countryCode":"GB","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/24797970513","merchantName":"Bo+Tee","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","maestro","masterCard","amex","discover","elo"],"total":{"type":"pending","label":"Bo+Tee","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 426
426
427<script id="shopify-features" type="application/json">{"accessToken":"c27179a2cf785b1b266e669fd4a6ae5d","betas":["rich-media-storefront-analytics"],"domain":"boandtee.com","predictiveSearch":true,"shopId":24797970513,"locale":"en"}</script>
vendor: 1 bytes, line 427
427
428<script>var Shopify = Shopify || {}; 429Shopify.shop = "bo-tee-store.myshopify.com"; 430Shopify.locale = "en"; 431Shopify.currency = {"active":"USD","rate":"1.347675"}; 432Shopify.country = "US"; 433Shopify.theme = {"name":"Bo+Tee by BAO Live Theme","id":194769650047,"schema_name":"Bo \u0026 Tee by BAO","schema_version":"1.0.0","theme_store_id":null,"role":"main"}; 434Shopify.theme.handle = "null"; 435Shopify.theme.style = {"id":null,"handle":null}; 436Shopify.cdnHost = "boandtee.com/cdn"; 437Shopify.routes = Shopify.routes || {}; 438Shopify.routes.root = "/"; 439Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 440Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 441Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 442Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 442
442
443<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 443
443
444<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 444
444
445<script> 446 window.ShopifyPay = window.ShopifyPay || {}; 447 window.ShopifyPay.apiHost = "shop.app\/pay"; 448 window.ShopifyPay.redirectState = null; 449</script>
vendor: 1 bytes, line 449
449
450<script> 451 window.Shopify = window.Shopify || {}; 452 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 453 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 454 window.Shopify.SignInWithShop.eligible = true; 455</script>
vendor: 1 bytes, line 455
455
456<script id="shop-js-analytics" type="application/json">{"pageType":"cart"}</script>
vendor: 1 bytes, line 456
456
457<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 457
457
458<script type="module"> 459 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 460 461 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 462 463</script>
vendor: 1 bytes, line 463
463
464<script> 465 window.Shopify = window.Shopify || {}; 466 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 467 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"]}; 468</script>
vendor: 1 bytes, line 468
468
469<script>(function() { 470 var isLoaded = false; 471 function asyncLoad() { 472 if (isLoaded) return; 473 isLoaded = true; 474 var urls = ["https:\/\/static.klaviyo.com\/onsite\/js\/klaviyo.js?company_id=HF7tTu\u0026shop=bo-tee-store.myshopify.com","https:\/\/intg.snapchat.com\/shopify\/shopify-scevent-init.js?id=63b38068-bdf0-447e-8369-81250d550fc3\u0026shop=bo-tee-store.myshopify.com","https:\/\/d23dclunsivw3h.cloudfront.net\/redirect-app.js?shop=bo-tee-store.myshopify.com","https:\/\/gdprcdn.b-cdn.net\/js\/gdpr_cookie_consent.min.js?shop=bo-tee-store.myshopify.com","\/\/swymv3premium-01.azureedge.net\/code\/swym_fb_pixel.js?shop=bo-tee-store.myshopify.com","https:\/\/cdn-scripts.signifyd.com\/shopify\/script-tag.js?shop=bo-tee-store.myshopify.com","https:\/\/wisepops.net\/loader.js?v=2\u0026h=8rtsSsqJh4\u0026shop=bo-tee-store.myshopify.com","https:\/\/cdn.shopify.com\/s\/files\/1\/0247\/9797\/0513\/t\/1041\/assets\/loy_24797970513.js?v=1778661985\u0026shop=bo-tee-store.myshopify.com","https:\/\/connect.nosto.com\/script\/shopify\/market\/init.js?merchant=shopify-24797970513\u0026shop=bo-tee-store.myshopify.com","https:\/\/services.nofraud.com\/js\/device.js?shop=bo-tee-store.myshopify.com","https:\/\/s3.eu-west-1.amazonaws.com\/production-klarna-il-shopify-osm\/9b281ea3896e823dc21a80a7781a2a2c53b8ecc2\/bo-tee-store.myshopify.com-1789399018847.js?shop=bo-tee-store.myshopify.com"]; 475 for (var i = 0; i < urls.length; i++) { 476 var s = document.createElement('script'); 477 s.type = 'text/javascript'; 478 s.async = true; 479 s.src = urls[i]; 480 var x = document.getElementsByTagName('script')[0]; 481 x.parentNode.insertBefore(s, x); 482 } 483 }; 484 if(window.attachEvent) { 485 window.attachEvent('onload', asyncLoad); 486 } else { 487 window.addEventListener('load', asyncLoad, false); 488 } 489})();</script>
vendor: 1 bytes, line 489
489
490<script id="__st">var __st={"a":24797970513,"offset":3600,"reqid":"794801e5-ea53-4933-a076-3ce6356b7fe9-1790275030","pageurl":"boandtee.com\/cart","u":"f2168e622998","p":"cart"};</script>
vendor: 1 bytes, line 490
490
491<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 491
491
492<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 492
492
493<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//boandtee.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 493
493
494<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 = "//boandtee.com/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
494<script crossorigin="anonymous" defer="defer" src="//boandtee.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 494
494
495<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 495
495
496<script> 497 window.Shopify = window.Shopify || {}; 498 window.Shopify.MCP = window.Shopify.MCP || {}; 499 window.Shopify.MCP.enabled = true; 500 window.Shopify.MCP.shop = "bo-tee-store.myshopify.com"; 501 window.Shopify.MCP.mcpEndpoint = "https:\/\/boandtee.com\/api\/mcp"; 502 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"]}}]; 503</script>
vendor: 1 bytes, line 503
503
504<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("\/\/boandtee.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 505</script>
vendor: 1 bytes, line 505
505
506<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://boandtee.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 507</script>
vendor: 1 bytes, line 507
507
508<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 509 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); 510</script>
vendor: 1 bytes, line 510
510
511<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})}})); 512</script>
512 513<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://boandtee.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 514<style id="shopify-accelerated-checkout-cart"> 515 #shopify-buyer-consent { 516 margin-top: 1em; 517 display: inline-block; 518 width: 100%; 519} 520 521#shopify-buyer-consent.hidden { 522 display: none; 523} 524 525#shopify-subscription-policy-button { 526 background: none; 527 border: none; 528 padding: 0; 529 text-decoration: underline; 530 font-size: inherit; 531 cursor: pointer; 532} 533 534#shopify-subscription-policy-button::before { 535 box-shadow: none; 536} 537 538 </style> 539
540<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
vendor: 1 bytes, line 540
540
541<script type="text/javascript"> 542 window.theme.adaSettings = { 543 metaFields: { 544 first_name: '', 545 last_name: '', 546 email: '', 547 phone_number: '', 548 sid: '', 549 logged_in: 'false', 550 }, 551 }; 552</script>
552 553
554<script 555 id="__ada" 556 data-handle="boandtee-gen" 557 src="https://static.ada.support/embed2.js" 558 defer 559 async 560></script>
560 561
562<script> 563 window.adaSettings = { 564 metaFields: window.theme.adaSettings.metaFields, 565 adaReadyCallback: ({ isRolledOut }) => { 566 addEventListeners(); 567 handleAdaLoginReferral(); 568 handleCustomerLogin(); 569 triggerSearchParamAnswer(); 570 571 if (!window.adaEmbed) return; 572 573 window.adaEmbed.setMetaFields(window.adaSettings.metaFields); 574 }, 575 chatterTokenCallback: (chatterToken) => { 576 if (!window.adaEmbed) return; 577 578 window.adaEmbed.setMetaFields(window.adaSettings.metaFields); 579 } 580 } 581 582 function addEventListeners() { 583 document.addEventListener('page:load', handleCheckoutDiscountError); 584 document.addEventListener('page:change', handleCheckoutDiscountError); 585 } 586 587 function handleAdaReset(answerId) { 588 if (!window.adaEmbed) return; 589 590 window.adaEmbed.reset({ 591 greeting: answerId, 592 metaFields: { 593 logged_in: window.adaSettings.metaFields.logged_in 594 } 595 }); 596 window.adaEmbed.toggle(); 597 } 598 599 /* If the customer has entered an invalid discount code, we want to start an Ada chat */ 600 function handleCheckoutDiscountError() { 601 const discountErrorAnswerId = ''; 602 603 if (!discountErrorAnswerId.length) return; 604 605 const discountCodeErrorEl = document.querySelector('#error-for-reduction_code'); 606 607 if (discountCodeErrorEl === null) return; 608 609 /* The customer has entered an invalid discount code. Trigger Ada chat. */ 610 handleAdaReset(discountErrorAnswerId); 611 } 612 613 /* The customer has been redirected to /login via the Ada chatbot */ 614 function handleAdaLoginReferral() { 615 const isAdaReferral = window.location.search === '?adarequest=chatLogin'; 616 617 if (!isAdaReferral) return; 618 619 sessionStorage.setItem('ADA-loginReferral', 'true'); 620 } 621 622 /* The customer has been redirected to /login via the Ada chatbot and has logged in, we want to start an Ada chat */ 623 function handleCustomerLogin() { 624 const isAccountPage = window.location.pathname === '/account'; 625 const isAdaReferral = sessionStorage.getItem('ADA-loginReferral') === 'true'; 626 627 if (!isAccountPage || !isAdaReferral) return; 628 629 const loginAnswerId = ''; 630 631 handleAdaReset(loginAnswerId); 632 633 sessionStorage.removeItem('ADA-loginReferral'); 634 } 635 636 /* If the customer has clicked a link with the chat_id search param, we want to start an Ada chat */ 637 function triggerSearchParamAnswer() { 638 const searchParams = new URLSearchParams(window.location.search); 639 640 searchParams.forEach((value, key) => { 641 if (key === 'chat_id') { 642 handleAdaReset(value) 643 return; 644 } 645 }); 646 } 647</script>
vendor: 1 bytes, line 647
647
648<script type="text/javascript"> 649 window.dataLayer = window.dataLayer || []; 650 651 window.appStart = function(){ 652 window.productPageHandle = function(){ 653 654 var productName = ""; 655 var productId = ""; 656 var productPrice = ""; 657 var productBrand = ""; 658 var productCollection = ""; 659 var productType = ""; 660 var productSku = ""; 661 var productVariantId = ""; 662 var productVariantTitle = ""; 663 664 window.dataLayer.push({ 665 event: "analyzify_productDetail", 666 productId: productId, 667 productName: productName, 668 productPrice: productPrice, 669 productBrand: productBrand, 670 productCategory: productCollection, 671 productType: productType, 672 productSku: productSku, 673 productVariantId: productVariantId, 674 productVariantTitle: productVariantTitle, 675 currency: "GBP", 676 }); 677 }; 678 679 window.allPageHandle = function(){ 680 window.dataLayer.push({ 681 event: "ga4kit_info", 682 contentGroup: "cart", 683 684 userType: "visitor", 685 686 }); 687 }; 688 allPageHandle(); 689 690 691 692 } 693 appStart(); 694 </script>
694<script src="https://cdn.tapcart.com/webbridge-sdk/webbridge.umd.js" defer></script>
vendor: 1 bytes, line 694
694
695<script type="text/javascript"> 696 (function (c, l, a, r, i, t, y) { 697 c[a] = c[a] || function () { 698 (c[a].q = c[a].q || []).push(arguments) 699 } 700 t = l.createElement(r) 701 t.async = 1 702 t.src = 'https://www.clarity.ms/tag/' + i 703 y = l.getElementsByTagName(r)[0] 704 y.parentNode.insertBefore(t, y) 705 })(window, document, 'clarity', 'script', 'i4d4ctd7pb') 706 </script>
706<script src="//boandtee.com/cdn/shop/t/1041/assets/custom-elements.js?v=65514425158625257831778661985" defer></script>
706 707 708
708<script src="//boandtee.com/cdn/shop/t/1041/assets/currency-select.js?v=72363165866622388231778661985" type="module" defer></script>
708 709
709<script src="//boandtee.com/cdn/shop/t/1041/assets/autodirect-us-customers.js?v=95418940647361636421778661985" async></script>
709 710 711 <!-- TrustBox script --> 712
712<script src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js" async></script>
712 713 <!-- End TrustBox script -->
713<script> 714 window.dataLayer = window.dataLayer || []; 715 716 function subscribeCookieListener(dataLayer) { 717 // Step to process information already existing in the datalayer 718 dataLayer.forEach(processDatalayerEvent) 719 720 // Set-up a "listener" 721 const originalPush = dataLayer.push; 722 dataLayer.push = function() { 723 originalPush.apply(dataLayer, arguments); 724 Array.from(arguments).forEach(processDatalayerEvent); 725 }; 726 727 } 728 subscribeCookieListener(window.dataLayer); 729 730 function processDatalayerEvent(event){ 731 if(event.event === "bre.cookie"){ 732 Shopify.analytics.publish("bre.cookie",event); 733 } 734 } 735 736</script>
736 737
738<script> 739 !function(e,n,t,i,r,o){function s(e){if("number"!=typeof e)return e;var n=new Date;return new Date(n.getTime()+1e3*e)}var a=4e3,c="xnpe_async_hide";function p(e){return e.reduce((function(e,n){return e[n]=function(){e._.push([n.toString(),arguments])},e}),{_:[]})}function m(e,n,t){var i=t.createElement(n);i.src=e;var r=t.getElementsByTagName(n)[0];return r.parentNode.insertBefore(i,r),i}function u(e){return"[object Date]"===Object.prototype.toString.call(e)}o.target=o.target||"https://api.exponea.com",o.file_path=o.file_path||o.target+"/js/exponea.min.js",r[n]=p(["anonymize","initialize","identify","getSegments","update","track","trackLink","trackEnhancedEcommerce","getHtml","showHtml","showBanner","showWebLayer","ping","getAbTest","loadDependency","getRecommendation","reloadWebLayers","_preInitialize","_initializeConfig"]),r[n].notifications=p(["isAvailable","isSubscribed","subscribe","unsubscribe"]),r[n].segments=p(["subscribe"]),r[n]["snippetVersion"]="v2.7.0",function(e,n,t){e[n]["_"+t]={},e[n]["_"+t].nowFn=Date.now,e[n]["_"+t].snippetStartTime=e[n]["_"+t].nowFn()}(r,n,"performance"),function(e,n,t,i,r,o){e[r]={sdk:e[i],sdkObjectName:i,skipExperiments:!!t.new_experiments,sign:t.token+"/"+(o.exec(n.cookie)||["","new"])[1],path:t.target}}(r,e,o,n,i,RegExp("__exponea_etc__"+"=([\\w-]+)")),function(e,n,t){m(e.file_path,n,t)}(o,t,e),function(e,n,t,i,r,o,p){if(e.new_experiments){!0===e.new_experiments&&(e.new_experiments={});var l,f=e.new_experiments.hide_class||c,_=e.new_experiments.timeout||a,g=encodeURIComponent(o.location.href.split("#")[0]);e.cookies&&e.cookies.expires&&("number"==typeof e.cookies.expires||u(e.cookies.expires)?l=s(e.cookies.expires):e.cookies.expires.tracking&&("number"==typeof e.cookies.expires.tracking||u(e.cookies.expires.tracking))&&(l=s(e.cookies.expires.tracking))),l&&l<new Date&&(l=void 0);var d=e.target+"/webxp/"+n+"/"+o[t].sign+"/modifications.min.js?http-referer="+g+"&timeout="+_+"ms"+(l?"&cookie-expires="+Math.floor(l.getTime()/1e3):"");"sync"===e.new_experiments.mode&&o.localStorage.getItem("__exponea__sync_modifications__")?function(e,n,t,i,r){t[r][n]="<"+n+' src="'+e+'"></'+n+">",i.writeln(t[r][n]),i.writeln("<"+n+">!"+r+".init && document.writeln("+r+"."+n+'.replace("/'+n+'/", "/'+n+'-async/").replace("><", " async><"))</'+n+">")}(d,n,o,p,t):function(e,n,t,i,r,o,s,a){o.documentElement.classList.add(e);var c=m(t,i,o);function p(){r[a].init||m(t.replace("/"+i+"/","/"+i+"-async/"),i,o)}function u(){o.documentElement.classList.remove(e)}c.onload=p,c.onerror=p,r.setTimeout(u,n),r[s]._revealPage=u}(f,_,d,n,o,p,r,t)}}(o,t,i,0,n,r,e),function(e,n,t){var i;e[n]._initializeConfig(t),(null===(i=t.experimental)||void 0===i?void 0:i.non_personalized_weblayers)&&e[n]._preInitialize(t),e[n].start=function(i){i&&Object.keys(i).forEac
739h((function(e){return t[e]=i[e]})),e[n].initialize(t)}}(r,n,o)}(document,"exponea","script","webxpClient",window,{ 740 target: "https://uk1-api.eng.bloomreach.com", 741 token: 'e9162272-bed4-11ef-9d61-e292477dce51', 742 data_layer: true, 743 experimental: { 744 non_personalized_weblayers: true 745 }, 746 new_experiments: { 747 mode: "sync" 748 }, 749 track: { 750 visits: true, 751 google_analytics: false, 752 }, 753 }); 754 755 function getCookie(cname) { 756 var name = cname + "="; 757 var ca = document.cookie.split(';'); 758 var cookie = undefined; 759 for (var i = 0; i < ca.length; i++) { 760 var c = ca[i]; 761 while (c.charAt(0) == ' ') { 762 c = c.substring(1); 763 } 764 if (c.indexOf(name) == 0) { 765 cookie = c.substring(name.length, c.length); 766 break; 767 } 768 } 769 cookie = decodeURIComponent(cookie); 770 cookie = cookie.split('?')[0]; 771 return cookie; 772 } 773 774 function runExponea() { 775 var customer = {}; 776 var cart_id = getCookie('cart'); 777 if (cart_id) customer.cart_id = cart_id; 778 779 exponea.start({ 780 "customer": customer 781 }); 782 } 783 784 document.addEventListener('consentmoSignal', function(eventData) { 785 const currentConsent = eventData.detail.preferences; 786 787 if (currentConsent.marketing && currentConsent.analytics && currentConsent.functionality ) { 788 runExponea() 789 } 790 }); 791</script>
vendor: 1 bytes, line 791
791
792<script src="//boandtee.com/cdn/shop/t/1041/assets/event-bus.js?v=110701083576732256941778662477"></script>
792 793
793<script src="//boandtee.com/cdn/shop/t/1041/assets/template-results-card.js?v=60492866459443752591789997786" async></script>
793 794 795 796 797
797<script src="//boandtee.com/cdn/shop/t/1041/assets/autocomplete-events.js?v=121283089427285798781778662479"></script>
797 798
798<script src="//boandtee.com/cdn/shop/t/1041/assets/autocomplete-api-layer.js?v=168003504851313171761789997788"></script>
798 799
799<script src="//boandtee.com/cdn/shop/t/1041/assets/autocomplete-state-layer.js?v=54237345104683238461778662475"></script>
799 800 801 <!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/gdpr_cookie_consent/4fbe573f-a377-4fea-9801-3ee0858cae41 --> 802<link rel="preconnect" href="https://app.consentmo.com" crossorigin data-csm-preconnect="app"> 803<link rel="dns-prefetch" href="https://workers.consentmo.com" data-csm-preconnect="workers"> 804<link rel="dns-prefetch" href="https://storage.consentmo.com" data-csm-preconnect="storage"> 805<link rel="preconnect" href="https://cdn.consentmo.com" crossorigin data-csm-preconnect="cdn"><link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/layout-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="banner"> 806 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/layout-cookie-dialog.consentmo.js" crossorigin data-csm-layout-prefetch="dialog"> 807 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/layout-cookie-box.consentmo.js" crossorigin data-csm-layout-prefetch="box"> 808 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/layout-cookie-smart-banner.consentmo.js" crossorigin data-csm-layout-prefetch="smart"> 809 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/layout-mobile-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="mobile">
809<script> 810(function () { 811 try { 812 document.documentElement.classList.add('csm-cookie-embed'); 813 } catch (e) {} 814})(); 815</script>
815<script data-consentmo-data-src-bootstrap> 816(function () { 817 'use strict'; 818 if (window.__consentmoDataSrcBootstrapInit) return; 819 window.__consentmoDataSrcBootstrapInit = true; 820 821 var DATA_SRC_SELECTOR = [ 822 'script[data-src*="consentmo_cookie_consent"]', 823 'script[data-src*="gdpr_cookie_consent.min"]', 824 'script[data-src*="gdrp_cookie_consent_unlimited"]' 825 ].join(','); 826 827 function activateConsentmoDataSrcScripts() { 828 if (!window.Shopify || !window.Shopify.shop) return; 829 document.querySelectorAll(DATA_SRC_SELECTOR).forEach(function (scriptEl) { 830 // getAttribute: src="" must not count as "already has src" (.src === page URL). 831 if (scriptEl.getAttribute('src')) return; 832 var url = scriptEl.getAttribute('data-src'); 833 if (!url) return; 834 if (scriptEl.getAttribute('type') === 'text/plain') { 835 scriptEl.removeAttribute('type'); 836 } 837 scriptEl.src = url; 838 }); 839 } 840 function scheduleActivation() { 841 activateConsentmoDataSrcScripts(); 842 // Retry on next task so other DCL handlers (lazy-loaders) can finish setting Shopify.shop / data-src first. 843 setTimeout(activateConsentmoDataSrcScripts, 0); 844 } 845 if (document.readyState === 'loading') { 846 document.addEventListener('DOMContentLoaded', scheduleActivation, { once: true }); 847 } else { 848 scheduleActivation(); 849 } 850})(); 851</script>
851 852 853 854<!-- END app block --><!-- BEGIN app block: shopify://apps/purple-dot-bo-tee/blocks/purple-dot/019b6fe5-2e1d-7e05-8546-a4d9c6dd80b4 --> 855
856<script> 857 (function () { 858 const params = new URLSearchParams(window.location.search); 859 const requested = (params.get('pdChangeCountry') || '').trim().toUpperCase(); 860 if (!requested) { 861 return; 862 } 863 864 const current = "US"; 865 const available = ["AF","AX","AL","DZ","AD","AO","AI","AG","AR","AM","AW","AC","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BR","IO","VG","BN","BG","BF","BI","KH","CM","CA","CV","BQ","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GT","GG","GN","GW","GY","HT","HN","HK","HU","IS","IN","ID","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","XK","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MQ","MR","MU","YT","MX","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","NO","OM","PK","PS","PA","PG","PY","PE","PH","PN","PL","PT","QA","RE","RO","RU","RW","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","KR","SS","ES","LK","BL","SH","KN","LC","MF","PM","VC","SD","SR","SJ","SE","CH","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TA","TN","TR","TM","TC","TV","UM","UG","UA","AE","GB","US","UY","UZ","VU","VA","VE","VN","WF","EH","YE","ZM","ZW"]; 866 if (requested === current || available.indexOf(requested) === -1) { 867 return; 868 } 869 870 const container = document.createElement('div'); 871 container.style.display = 'none'; 872 container.innerHTML = "\n \u003cform method=\"post\" action=\"\/localization\" id=\"localization_form\" accept-charset=\"UTF-8\" class=\"shopify-localization-form\" enctype=\"multipart\/form-data\"\u003e\u003cinput type=\"hidden\" name=\"form_type\" value=\"localization\" \/\u003e\u003cinput type=\"hidden\" name=\"utf8\" value=\"â\" \/\u003e\u003cinput type=\"hidden\" name=\"_method\" value=\"put\" \/\u003e\u003cinput type=\"hidden\" name=\"return_to\" value=\"\/cart\" \/\u003e\n \u003cinput type=\"hidden\" name=\"country_code\" class=\"pd-change-country-code\"\u003e\n \u003c\/form\u003e\n"; 873 (document.body || document.documentElement).appendChild(container); 874 875 const form = container.querySelector('form'); 876 const input = container.querySelector('.pd-change-country-code'); 877 if (!form || !input) { 878 return; 879 } 880 881 input.value = requested; 882 form.submit(); 883 })(); 884</script>
884 885
886<script> 887 window.PurpleDotConfig = { 888 shopifyCart: {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"USD","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}, 889 shopifyCartString: "{\"note\":null,\"attributes\":{},\"original_total_price\":0,\"total_price\":0,\"total_discount\":0,\"total_weight\":0.0,\"item_count\":0,\"items\":[],\"requires_shipping\":false,\"currency\":\"USD\",\"items_subtotal_price\":0,\"cart_level_discount_applications\":[],\"checkout_charge_amount\":0}", 890 shopifyCartSignature: "5175f361b5216e48c85112eab116c8a04fbdc6218dab2b98534e6638eb82479a", 891 prefillEmail: null, 892 prefillShippingAddress: null, 893 shopCurrency: "GBP", 894 shopifyHost: "boandtee.com", 895 ...(window.PurpleDotConfig || {}) 896 }; 897</script>
897 898 899 900 901
901<script src="https://app.getpurpledot.com/api/v1/init.js?apiKey=5d9cb8bc-1945-4f24-bf15-15e3f8584da4"></script>
901 902 903 904 905 906<!-- END app block --><!-- BEGIN app block: shopify://apps/okendo/blocks/theme-settings/bb689e69-ea70-4661-8fb7-ad24a2e23c29 --><!-- BEGIN app snippet: header-metafields --> 907 908 909 910 911 912 913 914 915 916 917 918 919 920 <style data-oke-reviews-version="0.103.2" type="text/css" data-href="https://cdn-static.okendo.io/reviews-widget-plus/css/okendo-reviews-styles.6dbb2446.css"></style><style data-oke-reviews-version="0.103.2" type="text/css" data-href="https://cdn-static.okendo.io/reviews-widget-plus/css/modules/okendo-star-rating.4cb378a8.css"></style><style data-oke-reviews-version="0.103.2" type="text/css" data-href="https://cdn-static.okendo.io/reviews-widget-plus/css/modules/okendo-reviews-keywords.0942444f.css"></style><style data-oke-reviews-version="0.103.2" type="text/css" data-href="https://cdn-static.okendo.io/reviews-widget-plus/css/modules/okendo-reviews-summary.a0c9d7d6.css"></style><style type="text/css">.okeReviews[data-oke-container],div.okeReviews{font-size:14px;font-size:var(--oke-text-regular);font-weight:400;font-family:var(--oke-text-fontFamily);line-height:1.6}.okeReviews[data-oke-container] *,.okeReviews[data-oke-container] :after,.okeReviews[data-oke-container] :before,div.okeReviews *,div.okeReviews :after,div.okeReviews :before{box-sizing:border-box}.okeReviews[data-oke-container] h1,.okeReviews[data-oke-container] h2,.okeReviews[data-oke-container] h3,.okeReviews[data-oke-container] h4,.okeReviews[data-oke-container] h5,.okeReviews[data-oke-container] h6,div.okeReviews h1,div.okeReviews h2,div.okeReviews h3,div.okeReviews h4,div.okeReviews h5,div.okeReviews h6{font-size:1em;font-weight:400;line-height:1.4;margin:0}.okeReviews[data-oke-container] ul,div.okeReviews ul{padding:0;margin:0}.okeReviews[data-oke-container] li,div.okeReviews li{list-style-type:none;padding:0}.okeReviews[data-oke-container] p,div.okeReviews p{line-height:1.8;margin:0 0 4px}.okeReviews[data-oke-container] p:last-child,div.okeReviews p:last-child{margin-bottom:0}.okeReviews[data-oke-container] a,div.okeReviews a{text-decoration:none;color:inherit}.okeReviews[data-oke-container] button,div.okeReviews button{border-radius:0;border:0;box-shadow:none;margin:0;width:auto;min-width:auto;padding:0;background-color:transparent;min-height:auto}.okeReviews[data-oke-container] button,.okeReviews[data-oke-container] input,.okeReviews[data-oke-container] select,.okeReviews[data-oke-container] textarea,div.okeReviews button,div.okeReviews input,div.okeReviews select,div.okeReviews textarea{font-family:inherit;font-size:1em}.okeReviews[data-oke-container] label,.okeReviews[data-oke-container] select,div.okeReviews label,div.okeReviews select{display:inline}.okeReviews[data-oke-container] select,div.okeReviews select{width:auto}.okeReviews[data-oke-container] article,.okeReviews[data-oke-container] aside,div.okeReviews article,div.okeReviews aside{margin:0}.okeReviews[data-oke-container] table,div.okeReviews table{background:transparent;border:0;border-collapse:collapse;border-spacing:0;font-family:inherit;font-size:1em;table-layout:auto}.okeReviews[data-oke-container] table td,.okeReviews[data-oke-container] table th,.okeReviews[data-oke-container] table tr,div.okeReviews table td,div.okeReviews table th,div.okeReviews table tr{border:0;font-family:inherit;font-size:1em}.okeReviews[data-oke-container] table td,.okeReviews[data-oke-container] table th,div.okeReviews table td,div.okeReviews table th{background:transparent;font-weight:400;letter-spacing:normal;padding:0;text-align:left;text-transform:none;vertical-align:middle}.okeReviews[data-oke-container] table tr:hover td,.okeReviews[data-oke-container] table tr:hover th,div.okeReviews table tr:hover td,div.okeReviews table tr:hover th{background:transparent}.okeReviews[data-oke-container] fieldset,div.okeReviews fieldset{border:0;padding:0;margin:0;min-width:0}.okeReviews[data-oke-container] img,.okeReviews[data-oke-container] svg,div.okeReviews img,div.okeReviews svg{max-width:none}.okeReviews[data-oke-container] div:empty,div.okeReviews div:empty{display:block}.okeReviews[data-oke-container] .oke-icon:before,div.okeReviews .oke-icon:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:inherit}.okeReviews[data-oke-container] .oke-icon--select-arrow:before,div.okeReviews .oke-icon--select-arrow:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--loading:before,div.okeReviews .oke-icon--loading:before{content:"î¤"}
920.okeReviews[data-oke-container] .oke-icon--pencil:before,div.okeReviews .oke-icon--pencil:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--filter:before,div.okeReviews .oke-icon--filter:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--play:before,div.okeReviews .oke-icon--play:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--tick-circle:before,div.okeReviews .oke-icon--tick-circle:before{content:"î¤
"}.okeReviews[data-oke-container] .oke-icon--chevron-left:before,div.okeReviews .oke-icon--chevron-left:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-right:before,div.okeReviews .oke-icon--chevron-right:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--thumbs-down:before,div.okeReviews .oke-icon--thumbs-down:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--thumbs-up:before,div.okeReviews .oke-icon--thumbs-up:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--close:before,div.okeReviews .oke-icon--close:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-up:before,div.okeReviews .oke-icon--chevron-up:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-down:before,div.okeReviews .oke-icon--chevron-down:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--star:before,div.okeReviews .oke-icon--star:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--magnifying-glass:before,div.okeReviews .oke-icon--magnifying-glass:before{content:"î¤"}@font-face{font-family:oke-widget-icons;src:url(https://cdn-static.okendo.io/reviews-widget-plus/fonts/oke-widget-icons.ttf) format("truetype"),url(https://cdn-static.okendo.io/reviews-widget-plus/fonts/oke-widget-icons.woff) format("woff"),url(https://cdn-static.okendo.io/reviews-widget-plus/img/oke-widget-icons.bc0d6b0a.svg) format("svg");font-weight:400;font-style:normal;font-display:swap}.okeReviews[data-oke-container] .oke-button,div.okeReviews .oke-button{display:inline-block;border-style:solid;border-color:var(--oke-button-borderColor);border-width:var(--oke-button-borderWidth);background-color:var(--oke-button-backgroundColor);line-height:1;padding:12px 24px;margin:0;border-radius:var(--oke-button-borderRadius);color:var(--oke-button-textColor);text-align:center;position:relative;font-weight:var(--oke-button-fontWeight);font-size:var(--oke-button-fontSize);font-family:var(--oke-button-fontFamily);outline:0}.okeReviews[data-oke-container] .oke-button-text,.okeReviews[data-oke-container] .oke-button .oke-icon,div.okeReviews .oke-button-text,div.okeReviews .oke-button .oke-icon{line-height:1}.okeReviews[data-oke-container] .oke-button.oke-is-loading,div.okeReviews .oke-button.oke-is-loading{position:relative}.okeReviews[data-oke-container] .oke-button.oke-is-loading:before,div.okeReviews .oke-button.oke-is-loading:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:undefined;font-size:12px;display:inline-block;animation:oke-spin 1s linear infinite;position:absolute;width:12px;height:12px;top:0;left:0;bottom:0;right:0;margin:auto}.okeReviews[data-oke-container] .oke-button.oke-is-loading>*,div.okeReviews .oke-button.oke-is-loading>*{opacity:0}.okeReviews[data-oke-container] .oke-button.oke-is-active,div.okeReviews .oke-button.oke-is-active{background-color:var(--oke-button-backgroundColorActive);color:var(--oke-button-textColorActive);border-color:var(--oke-button-borderColorActive)}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading),div.okeReviews .oke-button:not(.oke-is-loading){cursor:pointer}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):hover,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover{background-color:var(--oke-button-backgroundColorHover);color:var(--oke-button-textColorHover);border-color:var(--oke-button-borderColorHover);box-shadow:0 0 0 2px var(--oke-button-backgroundColorHover)}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):active,.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):hover:active,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):active,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover:active{background-color:var(--oke-button-backgroundColorActive);color:var(--oke-button-textColorActive);border-color:var(--oke-button-borderColorActive)}.okeReviews[data-oke-container] .oke-title,div.okeReviews .oke-title{font-weight:var(--oke-title-fontWeight);font-size:var(--oke-title-fontSize);font-family:var(--oke-title-fontFamily)}.okeReviews[data-oke-container] .oke-bodyText,div.okeReviews .oke-bodyText{font-weight:var(--oke-bodyText-fontWeight);font-size:var(--oke-bodyText-fontSize);font-family:var(--oke-bodyText-fontFamily)}.okeReviews[data-oke-container] .oke-linkButton,div.okeReviews .oke-linkButton{curs
920or:pointer;font-weight:700;pointer-events:auto;text-decoration:underline}.okeReviews[data-oke-container] .oke-linkButton:hover,div.okeReviews .oke-linkButton:hover{text-decoration:none}.okeReviews[data-oke-container] .oke-readMore,div.okeReviews .oke-readMore{cursor:pointer;color:inherit;text-decoration:underline}.okeReviews[data-oke-container] .oke-select,div.okeReviews .oke-select{cursor:pointer;background-repeat:no-repeat;background-position-x:100%;background-position-y:50%;border:none;padding:0 24px 0 12px;-moz-appearance:none;appearance:none;color:inherit;-webkit-appearance:none;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg fill='currentColor' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");outline-offset:4px}.okeReviews[data-oke-container] .oke-select:disabled,div.okeReviews .oke-select:disabled{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg fill='%239a9db1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.okeReviews[data-oke-container] .oke-loader,div.okeReviews .oke-loader{position:relative}.okeReviews[data-oke-container] .oke-loader:before,div.okeReviews .oke-loader:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:var(--oke-text-secondaryColor);font-size:12px;display:inline-block;animation:oke-spin 1s linear infinite;position:absolute;width:12px;height:12px;top:0;left:0;bottom:0;right:0;margin:auto}.okeReviews[data-oke-container] .oke-a11yText,div.okeReviews .oke-a11yText{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.okeReviews[data-oke-container] .oke-hidden,div.okeReviews .oke-hidden{display:none}.okeReviews[data-oke-container] .oke-modal,div.okeReviews .oke-modal{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2147483647;max-height:100%;background-color:rgba(0,0,0,.5);padding:40px 0 12px}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal,div.okeReviews .oke-modal{display:flex;align-items:center;padding:48px 0}}.okeReviews[data-oke-container] .oke-modal ::-moz-selection,div.okeReviews .oke-modal ::-moz-selection{background-color:rgba(39,45,69,.2)}.okeReviews[data-oke-container] .oke-modal ::selection,div.okeReviews .oke-modal ::selection{background-color:rgba(39,45,69,.2)}.okeReviews[data-oke-container] .oke-modal,.okeReviews[data-oke-container] .oke-modal p,div.okeReviews .oke-modal,div.okeReviews .oke-modal p{color:#272d45}.okeReviews[data-oke-container] .oke-modal-content,div.okeReviews .oke-modal-content{background-color:#fff;margin:auto;position:relative;will-change:transform,opacity;width:calc(100% - 24px)}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal-content,div.okeReviews .oke-modal-content{max-width:1000px}}.okeReviews[data-oke-container] .oke-modal-close,div.okeReviews .oke-modal-close{cursor:pointer;position:absolute;width:32px;height:32px;top:-32px;padding:4px;right:-4px;line-height:1}.okeReviews[data-oke-container] .oke-modal-close:before,div.okeReviews .oke-modal-close:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:#fff;font-size:24px;display:inline-block;width:24px;height:24px}.okeReviews[data-oke-container] .oke-modal-overlay,div.okeReviews .oke-modal-overlay{background-color:rgba(43,46,56,.9)}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal--large .oke-modal-content,div.okeReviews .oke-modal--large .oke-modal-content{max-width:1200px}}.okeReviews[data-oke-container] .oke-modal .oke-helpful,.okeReviews[data-oke-container] .oke-modal .oke-helpful-vote-button,.okeReviews[data-oke-container] .oke-modal .oke-reviewContent-date,div.okeReviews .oke-modal .oke-helpful,div.okeReviews .oke-modal .oke-helpful-vote-button,div.okeReviews .oke-modal .oke-reviewContent-date{color:#676986}.oke-modal .okeReviews[data-oke-container].oke-w,.oke-modal div.okeReviews.oke-w{color:#272d45}.okeReviews[data-oke-container] .oke-tag,div.okeReviews .oke-tag{align-items:center;color:#272d45;display:flex;font-size:var(--oke-text-small);font-weight:600;text-align:left;position:relative;z-index:2;background-color:#f4f4f6;padding:4px 6px;border:none;border-radius:4px;gap:6px;line-height:1}.okeReviews[data-oke-container] .oke-tag svg,div.okeReviews .oke-tag svg{fill:currentColor;height:1rem}.okeReviews[data-oke-container] .hooper,div.okeReviews .hooper{height:auto}.okeReviews--left{text-align:left}.okeReviews--right{text-align:right}.okeReviews--center{text-align:center}.okeReviews :not([tabindex="-1"]):focus-visible{outline:5px auto highlight;outline:5px auto -webkit-focus-ring-color}.is-oke-modalOpen{overflow:hidden!important}img.oke-is-error{background-color:var(--oke-shadingColor);background-size:cover;background-position:50% 50%;box-shadow:inset 0 0 0 1px var(--oke-border-color)}@keyframes oke-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes oke-fade-in{0%{opacity:0}
920to{opacity:1}}.layout-panel-flex>div:has([data-oke-container]){width:100%} 921.oke-stars{line-height:1;position:relative;display:inline-block}.oke-stars-background svg{overflow:visible}.oke-stars-foreground{overflow:hidden;position:absolute;top:0;left:0}.oke-sr{display:inline-block;padding-top:var(--oke-starRating-spaceAbove);padding-bottom:var(--oke-starRating-spaceBelow)}.oke-sr .oke-is-clickable{cursor:pointer}.oke-sr--hidden{display:none}.oke-sr-count,.oke-sr-rating,.oke-sr-stars{display:inline-block;vertical-align:middle}.oke-sr-stars{line-height:1;margin-right:8px}.oke-sr-rating{display:none}.oke-sr-count--brackets:before{content:"("}.oke-sr-count--brackets:after{content:")"} 922.oke-rk{display:block}.okeReviews[data-oke-container] .oke-reviewsKeywords-heading,div.okeReviews .oke-reviewsKeywords-heading{font-weight:700;margin-bottom:8px}.okeReviews[data-oke-container] .oke-reviewsKeywords-heading-skeleton,div.okeReviews .oke-reviewsKeywords-heading-skeleton{height:calc(var(--oke-button-fontSize) + 4px);width:150px}.okeReviews[data-oke-container] .oke-reviewsKeywords-list,div.okeReviews .oke-reviewsKeywords-list{display:inline-flex;align-items:center;flex-wrap:wrap;gap:4px}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category,div.okeReviews .oke-reviewsKeywords-list-category{background-color:var(--oke-filter-backgroundColor);color:var(--oke-filter-textColor);border:1px solid var(--oke-filter-borderColor);border-radius:var(--oke-filter-borderRadius);padding:6px 16px;transition:background-color .1s ease-out,border-color .1s ease-out;white-space:nowrap}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category.oke-is-clickable,div.okeReviews .oke-reviewsKeywords-list-category.oke-is-clickable{cursor:pointer}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category.oke-is-active,div.okeReviews .oke-reviewsKeywords-list-category.oke-is-active{background-color:var(--oke-filter-backgroundColorActive);color:var(--oke-filter-textColorActive);border-color:var(--oke-filter-borderColorActive)}.okeReviews[data-oke-container] .oke-reviewsKeywords .oke-translateButton,div.okeReviews .oke-reviewsKeywords .oke-translateButton{margin-top:12px} 923.oke-rs{display:block}.oke-rs .oke-reviewsSummary.oke-is-preRender .oke-reviewsSummary-summary{-webkit-mask:linear-gradient(180deg,#000 0,#000 40%,transparent 95%,transparent 0) 100% 50%/100% 100% repeat-x;mask:linear-gradient(180deg,#000 0,#000 40%,transparent 95%,transparent 0) 100% 50%/100% 100% repeat-x;max-height:150px}.okeReviews[data-oke-container] .oke-reviewsSummary .oke-tooltip,div.okeReviews .oke-reviewsSummary .oke-tooltip{display:inline-block;font-weight:400}.okeReviews[data-oke-container] .oke-reviewsSummary .oke-tooltip-trigger,div.okeReviews .oke-reviewsSummary .oke-tooltip-trigger{height:15px;width:15px;overflow:hidden;transform:translateY(-10%)}.okeReviews[data-oke-container] .oke-reviewsSummary-heading,div.okeReviews .oke-reviewsSummary-heading{align-items:center;-moz-column-gap:4px;column-gap:4px;display:inline-flex;font-weight:700;margin-bottom:8px}.okeReviews[data-oke-container] .oke-reviewsSummary-heading-skeleton,div.okeReviews .oke-reviewsSummary-heading-skeleton{height:calc(var(--oke-button-fontSize) + 4px);width:150px}.okeReviews[data-oke-container] .oke-reviewsSummary-icon,div.okeReviews .oke-reviewsSummary-icon{fill:currentColor;font-size:14px}.okeReviews[data-oke-container] .oke-reviewsSummary-icon svg,div.okeReviews .oke-reviewsSummary-icon svg{vertical-align:baseline}.okeReviews[data-oke-container] .oke-reviewsSummary-summary.oke-is-truncated,div.okeReviews .oke-reviewsSummary-summary.oke-is-truncated{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}</style> 924 925
925<script type="application/json" id="oke-reviews-settings">{"subscriberId":"3c90a241-3140-45c0-b026-d81f66a1f0df","analyticsSettings":{"isWidgetOnScreenTrackingEnabled":true,"provider":"gtag"},"locale":"en","localeAndVariant":{"code":"en"},"widgetSettings":{"global":{"dateSettings":{"format":{"type":"relative"}},"hideOkendoBranding":true,"showIncentiveIndicator":false,"recorderPlusEnabled":true,"searchEnginePaginationEnabled":true,"stars":{"backgroundColor":"#808080","foregroundColor":"#000000","interspace":5,"shape":{"type":"thin"},"showBorder":false},"font":{"fontType":"inherit-from-page"}},"homepageCarousel":{"slidesPerPage":{"large":3,"medium":2},"totalSlides":12,"scrollBehaviour":"slide","style":{"layout":{"name":"default","reviewDetailsPosition":"below","showProductName":false,"showAttributeBars":false,"showProductDetails":"only-when-grouped"},"showDates":true,"border":{"color":"#E5E5EB","width":{"value":1,"unit":"px"}},"highlightColor":"#0E7A82","spaceAbove":{"value":20,"unit":"px"},"arrows":{"color":"#676986","size":{"value":24,"unit":"px"},"enabled":true},"avatar":{"backgroundColor":"#E5E5EB","placeholderTextColor":"#2C3E50","size":{"value":48,"unit":"px"},"enabled":true},"media":{"size":{"value":80,"unit":"px"},"imageGap":{"value":4,"unit":"px"},"enabled":true},"stars":{"height":{"value":18,"unit":"px"}},"text":{"primaryColor":"#2C3E50","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeSmall":{"value":12,"unit":"px"},"secondaryColor":"#676986"},"productImageSize":{"value":48,"unit":"px"},"spaceBelow":{"value":20,"unit":"px"}},"defaultSort":"rating desc","autoPlay":false,"truncation":{"bodyMaxLines":4,"enabled":true,"truncateAll":false}},"mediaCarousel":{"minimumImages":1,"linkText":"Read More","autoPlay":false,"slideSize":"medium","arrowPosition":"outside"},"mediaGrid":{"gridStyleDesktop":{"layout":"default-desktop"},"gridStyleMobile":{"layout":"default-mobile"},"showMoreArrow":{"arrowColor":"#676986","enabled":true,"backgroundColor":"#f4f4f6"},"linkText":"Read More","infiniteScroll":false,"gapSize":{"value":10,"unit":"px"}},"questions":{"initialPageSize":6,"loadMorePageSize":6},"reviewsBadge":{"layout":"large","colorScheme":"dark"},"reviewsTab":{"enabled":false},"reviewsWidget":{"tabs":{"reviews":true,"questions":false},"header":{"columnDistribution":"space-between","verticalAlignment":"top","blocks":[{"columnWidth":"full","modules":[{"name":"rating-average","layout":"three-line"}],"textAlignment":"center"},{"columnWidth":"full","modules":[{"name":"attributes","layout":"stacked","stretchMode":"stretch"}],"textAlignment":"center"},{"columnWidth":"full","modules":[{"name":"reviews-summary","heading":"Reviews Summary","maxTextLines":5}],"textAlignment":"center"}]},"style":{"showDates":true,"border":{"color":"#E5E5EB","width":{"value":0,"unit":"px"}},"bodyFont":{"hasCustomFontSettings":false},"headingFont":{"hasCustomFontSettings":false},"filters":{"backgroundColorActive":"#000000","backgroundColor":"#FFFFFF","borderColor":"#000000","borderRadius":{"value":0,"unit":"px"},"borderColorActive":"#000000","textColorActive":"#FFFFFF","textColor":"#000000","searchHighlightColor":"#999999"},"avatar":{"backgroundColor":"#E5E5EB","placeholderTextColor":"#000000","size":{"value":48,"unit":"px"},"enabled":true},"stars":{"height":{"value":15,"unit":"px"}},"shadingColor":"#F7F7F8","productImageSize":{"value":50,"unit":"px"},"button":{"backgroundColorActive":"#FFFFFF","borderColorHover":"#000000","backgroundColor":"#000000","borderColor":"#000000","backgroundColorHover":"#FFFFFF","textColorHover":"#000000","borderRadius":{"value":0,"unit":"px"},"borderWidth":{"value":1,"unit":"px"},"borderColorActive":"#000000","textColorActive":"#000000","textColor":"#FFFFFF","font":{"hasCustomFontSettings":false}},"highlightColor":"#000000","spaceAbove":{"value":10,"unit":"px"},"text":{"primaryColor":"#000000","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeLarge":{"value":20,"unit":"px"},"fontSizeSmall":{"value":12,"unit":"px"},"secondaryColor":"#000000"},"spaceBelow":{"value":10,"unit":"px"},"attributeBar":{"style":"classic","borderColor":"#FFFFFF","backgroundColor":"#808080","shadingColor":"#000000","markerColor":"#000000"}},"showWhenEmpty":true,"reviews":{"list":{"layout":{"name":"masonry","cardLayout":{"reviewDetailsPosition":"below","showProductName":false,"showFullHeightImages":false,"name":"default","showAttributeBars":true,"showProductVariantName":false,"showProductDetails":"only-when-grouped"},"showProductVariantName":false,"columnAmount":3},"loyalty":{"maxInitialAchievements":3},"initialPageSize":3,"replyTruncation":{"bodyMaxLines":4,"enabled":true},"media":{"layout":"thumbnail","size":{"value":50,"unit":"px"},"imageGap":{"value":5,"unit":"px"}},"truncation":{"bodyMaxLines":4,"truncateAll":false,"enabled":true},"loadMorePageSize":3},"controls":{"filterMode":"closed","freeTextSearchEnabled":true,"keywordsFilterEnabled":false,"writeReviewButtonEnabled":true,"defaultSort":"has_media desc","sortOptionOrder":["has_media desc","date desc","helpful desc","rating desc","date asc","rating asc","unhelpful desc"]}}},"starRatings":{"showWhenEmpty":false,"style":{"globalOverrideSettings":{"backgroundColor":"#E5E5E5","foregroundColor":"#000000","interspace":1,"showBorder":false},"spaceAbove":{"value":0,"unit":"px"},"text":{"content":"review-count","style":"number-only","brackets":true},"singleStar":false,"height":{"value":14,"unit":"px"},"spaceBelow":{"value":0,"unit":"px"}},"clickBehavior":"scroll-to-widget"}},"features":{"attributeFiltersEnabled":true,"recorderPlusEnabled":true,"recorderQandaPlusEnabled":true,"reviewsKeywordsEnabled":true,"reviewsSummariesEnabled":true}}</script>
925 926 <style id="oke-css-vars">:root{--oke-widget-spaceAbove:10px;--oke-widget-spaceBelow:10px;--oke-starRating-spaceAbove:0;--oke-starRating-spaceBelow:0;--oke-button-backgroundColor:#000;--oke-button-backgroundColorHover:#fff;--oke-button-backgroundColorActive:#fff;--oke-button-textColor:#fff;--oke-button-textColorHover:#000;--oke-button-textColorActive:#000;--oke-button-borderColor:#000;--oke-button-borderColorHover:#000;--oke-button-borderColorActive:#000;--oke-button-borderRadius:0;--oke-button-borderWidth:1px;--oke-button-fontWeight:700;--oke-button-fontSize:var(--oke-text-regular,14px);--oke-button-fontFamily:inherit;--oke-border-color:#e5e5eb;--oke-border-width:0;--oke-text-primaryColor:#000;--oke-text-secondaryColor:#000;--oke-text-small:12px;--oke-text-regular:14px;--oke-text-large:20px;--oke-text-fontFamily:inherit;--oke-avatar-size:48px;--oke-avatar-backgroundColor:#e5e5eb;--oke-avatar-placeholderTextColor:#000;--oke-highlightColor:#000;--oke-shadingColor:#f7f7f8;--oke-productImageSize:50px;--oke-attributeBar-shadingColor:#000;--oke-attributeBar-borderColor:#fff;--oke-attributeBar-backgroundColor:gray;--oke-attributeBar-markerColor:#000;--oke-filter-backgroundColor:#fff;--oke-filter-backgroundColorActive:#000;--oke-filter-borderColor:#000;--oke-filter-borderColorActive:#000;--oke-filter-textColor:#000;--oke-filter-textColorActive:#fff;--oke-filter-borderRadius:0;--oke-filter-searchHighlightColor:#999;--oke-mediaGrid-chevronColor:#676986;--oke-stars-foregroundColor:#000;--oke-stars-backgroundColor:gray;--oke-stars-borderWidth:0}.oke-sr{--oke-stars-foregroundColor:#000;--oke-stars-backgroundColor:#e5e5e5;--oke-stars-borderWidth:0}.oke-w,.oke-modal{--oke-title-fontWeight:600;--oke-title-fontSize:var(--oke-text-regular,14px);--oke-title-fontFamily:inherit;--oke-bodyText-fontWeight:400;--oke-bodyText-fontSize:var(--oke-text-regular,14px);--oke-bodyText-fontFamily:inherit}</style> 927 <style id="oke-reviews-custom-css">[data-oke-widget],[data-oke-star-rating]{display:none}[data-oke-widget][data-oke-rendered],[data-oke-star-rating][data-oke-rendered]{display:block}.c-resultProductRating .oke-stars .oke-stars-foreground svg{width:unset}</style> 928 <template id="oke-reviews-body-template"><svg id="oke-star-symbols" style="display:none!important" data-oke-id="oke-star-symbols"><symbol id="oke-star-empty" style="overflow:visible;"><path id="star-thin--empty" fill="var(--oke-stars-backgroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M9.944 6.4L8 0L6.056 6.4H0L4.944 9.928L3.064 16L8 12.248L12.944 16L11.064 9.928L16 6.4H9.944Z"/></symbol><symbol id="oke-star-filled" style="overflow:visible;"><path id="star-thin--filled" fill="var(--oke-stars-foregroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M9.944 6.4L8 0L6.056 6.4H0L4.944 9.928L3.064 16L8 12.248L12.944 16L11.064 9.928L16 6.4H9.944Z"/></symbol></svg></template>
928<script>document.addEventListener('readystatechange',() =>{Array.from(document.getElementById('oke-reviews-body-template')?.content.children)?.forEach(function(child){if(!Array.from(document.body.querySelectorAll('[data-oke-id='.concat(child.getAttribute('data-oke-id'),']'))).length){document.body.prepend(child)}})},{once:true});</script>
928 929 930 931 932 933 934 935 936 937 938 939 940 941 942<!-- END app snippet --> 943 944 <!-- BEGIN app snippet: okendo-reviews-json-ld --> 945<!-- END app snippet --> 946 947<!-- BEGIN app snippet: widget-plus-initialisation-script --> 948 949 950 951 952
952<script async id="okendo-reviews-script" src="https://cdn-static.okendo.io/reviews-widget-plus/js/okendo-reviews.js"></script>
952 953 954<!-- END app snippet --> 955 956 957<!-- END app block -->
957<script src="https://cdn.shopify.com/extensions/01a0cef1-eefe-7578-b2f5-de95c01f6ae9/loop-returns-502/assets/onstore-block.js" type="text/javascript" defer="defer"></script>
957 958<link href="https://cdn.shopify.com/extensions/01a0cef1-eefe-7578-b2f5-de95c01f6ae9/loop-returns-502/assets/onstore-block.css" rel="stylesheet" type="text/css" media="all">
959<script src="https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/rivo-app-embed.js" type="text/javascript" defer="defer"></script>
959 960<link href="https://cdn.shopify.com/extensions/01a014b1-6566-7c61-aedf-79a2912282a5/watchlist-145/assets/app-embed-block.css" rel="stylesheet" type="text/css" media="all">
961<script src="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/consentmo_cookie_consent.js" type="text/javascript" defer="defer"></script>
961 962<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
963<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: 24797970513,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "cart"};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 963
963
964<script> 965 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 966</script>
vendor: 1 bytes, line 966
966
967<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}
967).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: 24797970513,storefrontBaseUrl: "https://boandtee.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://boandtee.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["16072cab","8450a54b"],webPixelsConfigList: [{"id":"4005036415","configuration":"{\"shopUrl\":\"bo-tee-store.myshopify.com\",\"apiUrl\":\"https:\\\/\\\/services.nofraud.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0cf396a0daab06a8120b15747f89a0e3","type":"APP","apiClientId":1380557,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
967,"dataSharingState":"unrestricted"},{"id":"3798368639","configuration":"{\"shop\":\"bo-tee-store.myshopify.com\", \"shopliftUrl\":\"https:\/\/events.shoplift.ai\/api\/events\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"dabcda9558be25394b12ce3ce899568b","type":"APP","apiClientId":7521861633,"privacyPurposes":["ANALYTICS"],"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":"2721710463","configuration":"{\"hashed_organization_id\":\"534a68c0fdda81ca3eefe07220966456_v1\",\"app_key\":\"bo-tee-store\",\"allow_collect_personal_data\":\"true\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"01efe7afb13dafa90bc1421b50b2a3ed","type":"APP","apiClientId":111542,"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"},{"id":"2491089279","configuration":"{\"tagID\":\"2613410172028\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7ae565e198624b39e0856d352b9a6b4c","type":"APP","apiClientId":3009811,"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"},{"id":"1908212095","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-5JNJ014XTT\\\",\\\"AW-438456082\\\"],\\\"gtag_events\\\":[{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-5JNJ014XTT\\\",\\\"AW-438456082\\\/ucETCLjF3_kBEJKeidEB\\\"]},{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-5JNJ014XTT\\\",\\\"AW-438456082\\\/BEDLCLXF3_kBEJKeidEB\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-5JNJ014XTT\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-5JNJ014XTT\\\",\\\"AW-438456082\\\/dvXZCK_F3_kBEJKeidEB\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-5JNJ014XTT\\\",\\\"AW-438456082\\\/K20LCKzF3_kBEJKeidEB\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-5JNJ014XTT\\\"},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-5JNJ014XTT\\\",\\\"AW-438456082\\\/VNkECKnF3_kBEJKeidEB\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-5JNJ014XTT\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-5JNJ014XTT\\\",\\\"AW-438456082\\\/tvo0CLvF3_kBEJKeidEB\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-5JNJ014XTT\\\",\\\"AW-438456082\\\/bmIqCLLF3_kBEJKeidEB\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-5JNJ014XTT\\\"}],\\\"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":"1464500607","configuration":"{\"target\":\"https:\/\/uk1-api.eng.bloomreach.com\",\"token\":\"e9162272-bed4-11ef-9d61-e292477dce51\",\"search_tracking\":\"true\", \"checkout_tracking\":\"true\", \"view_category_tracking\":\"true\", \"view_item_tracking\":\"true\",\"page_viewed_tracking\":\"false\",\"integration_id\":\"2800d767-523e-45c8-9bf2-a47d609c35dd\",\"gateway_url\":\"https:\/\/uk1-api.eng.bloomreach.com\",\"domain\":\"bo-tee-store.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"281f5176d59c18052a7f231c2196b454","type":"APP","apiClientId":35679600641,"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"},{"id":"391413841","configuration":"{\"campaignId\":\"1101l6245\",\"baseURL\":\"https:\\\/\\\/prf.hn\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"b4794efed556f308ac34691629bfad11","type":"APP","apiClientId":11838521345,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"331481169","configuration":"{\"pixelCode\":\"C15QOUC10GT3CK
9675VK5AG\"}","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":["share_all_events"]},"dataSharingState":"optimized"},{"id":"316309585","configuration":"{\"Enabled\":\"true\",\"UpdatedAt\":\"2026-06-04T03:28:14.139Z\",\"DeveloperPreview\":\"false\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7913f49eba866a6cbbe1bb85b5400251","type":"APP","apiClientId":34646425601,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"235143249","configuration":"{\"accountID\":\"shopify-24797970513\", \"endpoint\":\"https:\/\/connect.nosto.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"85848493c2a1c7a4bbf22728b6f9f31f","type":"APP","apiClientId":272825,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"142311505","configuration":"{\"pixel_id\":\"190572969028117\",\"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":"74252369","configuration":"{\"hash\":\"8rtsSsqJh4\",\"ingestion_url\":\"https:\/\/activity.wisepops.com\",\"goal_hash\":\"MlIPlD8O1L51NYexjBQuq18NGOaKUK4O\",\"loader_url\":\"https:\/\/wisepops.net\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"d8c8395b58ad86ce6624e188a7fbb605","type":"APP","apiClientId":461977,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"3342417","configuration":"{\"pixelId\":\"63b38068-bdf0-447e-8369-81250d550fc3\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c119f01612c13b62ab52809eb08154bb","type":"APP","apiClientId":2556259,"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"},{"id":"28442705","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Ometria - Abandoned Basket"},{"id":"28475473","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"2","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Ometria - Transactions"},{"id":"35291217","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Insider Custom Pixel"},{"id":"140149119","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"],"name":"Signifyd Device Pixel"},{"id":"161350015","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"9","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Algolia Shopify Web Pixel"}
967,{"id":"164004223","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["MARKETING"],"name":"Meta pixel (migrated)"},{"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":"Bo+Tee","paymentSettings":{"currencyCode":"GBP"},"myshopifyDomain":"bo-tee-store.myshopify.com","countryCode":"GB","storefrontUrl":"https:\/\/boandtee.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://boandtee.com/cdn","c8540278we853e1abpb62b2c4amde256306",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"194769650047","themePublished":"true","eventMetadataId":"f4688ef2-24ea-4745-bc1f-5d830c988b04","pageType":"cart","shopId":"24797970513","storefrontBaseUrl":"https:\/\/boandtee.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"16072cab\", \"8450a54b\"]","isMerchantRequest":"false","hashVersion":"c8540278we853e1abpb62b2c4amde256306","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
967<script> 968 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 969 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 970 window.ShopifyAnalytics.meta.currency = 'USD'; 971 var meta = {"page":{"pageType":"cart","requestId":"794801e5-ea53-4933-a076-3ce6356b7fe9-1790275030"}}; 972 for (var attr in meta) { 973 window.ShopifyAnalytics.meta[attr] = meta[attr]; 974 } 975</script>
vendor: 1 bytes, line 975
975
976<script class="analytics"> 977 (function () { 978 var customDocumentWrite = function(content) { 979 var jquery = null; 980 981 if (window.jQuery) { 982 jquery = window.jQuery; 983 } else if (window.Checkout && window.Checkout.$) { 984 jquery = window.Checkout.$; 985 } 986 987 if (jquery) { 988 jquery('body').append(content); 989 } 990 }; 991 992 var hasLoggedConversion = function(token) { 993 if (token) { 994 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 995 } 996 return false; 997 } 998 999 var setCookieIfConversion = function(token) { 1000 if (token) { 1001 var twoMonthsFromNow = new Date(Date.now()); 1002 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 1003 1004 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 1005 } 1006 } 1007 1008 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 1009 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 1010 if (trekkie.integrations) { 1011 return; 1012 } 1013 trekkie.methods = [ 1014 'identify', 1015 'page', 1016 'ready', 1017 'track', 1018 'trackForm', 1019 'trackLink' 1020 ]; 1021 trekkie.factory = function(method) { 1022 return function() { 1023 var args = Array.prototype.slice.call(arguments); 1024 args.unshift(method); 1025 trekkie.push(args); 1026 if (method == 'track' || method == 'page') { 1027 try { 1028 if (window.__TREKKIE_SHIM_QUEUE == null) { 1029 window.__TREKKIE_SHIM_QUEUE = []; 1030 } 1031 window.__TREKKIE_SHIM_QUEUE.push({ 1032 from: 'trekkie-stub', 1033 method: method, 1034 args: args.slice(1) 1035 }); 1036 } catch (e) { 1037 // no-op 1038 } 1039 } 1040 return trekkie; 1041 }; 1042 }; 1043 for (var i = 0; i < trekkie.methods.length; i++) { 1044 var key = trekkie.methods[i]; 1045 trekkie[key] = trekkie.factory(key); 1046 } 1047 trekkie.load = function(config) { 1048 trekkie.config = config || {}; 1049 trekkie.config.initialDocumentCookie = document.cookie; 1050 var first = document.getElementsByTagName('script')[0]; 1051var script = document.createElement('script'); 1052script.type = 'text/javascript'; 1053script.onerror = function(e) { 1054 var scriptFallback = document.createElement('script'); 1055 scriptFallback.type = 'text/javascript'; 1056 scriptFallback.onerror = function(error) { 1057 var Monorail = { 1058 produce: function produce(monorailDomain, schemaId, payload) { 1059 var currentMs = new Date().getTime(); 1060 var event = { 1061 schema_id: schemaId, 1062 payload: payload, 1063 metadata: { 1064 event_created_at_ms: currentMs, 1065 event_sent_at_ms: currentMs 1066 } 1067 }; 1068 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 1069 }, 1070 sendRequest: function sendRequest(endpointUrl, payload) { 1071 // Try the sendBeacon API 1072 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 1073 var blobData = new window.Blob([payload], { 1074 type: 'text/plain' 1075 }); 1076 1077 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 1078 return true; 1079 } // sendBeacon was not successful 1080 1081 } // XHR beacon 1082 1083 var xhr = new XMLHttpRequest(); 1084 1085 try { 1086 xhr.open('POST', endpointUrl); 1087 xhr.setRequestHeader('Content-Type', 'text/plain'); 1088 xhr.send(payload); 1089 } catch (e) { 1090 console.log(e); 1091 } 1092 1093 return false; 1094 }, 1095 isIos12: function isIos12() { 1096 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 1097 } 1098 }; 1099 Monorail.produce('monorail-edge.shopifysvc.com', 1100 'trekkie_storefront_load_errors/1.1', 1101 {shop_id: 24797970513, 1102 theme_id: 194769650047, 1103 app_name: "storefront", 1104 context_url: window.location.href, 1105 source_url: "//boandtee.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js"}); 1106 1107 }; 1108 scriptFallback.async = true; 1109 scriptFallback.src = '//boandtee.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 1110 first.parentNode.insertBefore(scriptFallback, first); 1111}; 1112script.async = true; 1113script.src = '//boandtee.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 1114first.parentNode.insertBefore(script, first); 1115 1116 }; 1117 trekkie.load( 1118 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":24797970513,"isMerchantRequest":null,"themeId":194769650047,"themeCityHash":"14402793025499881725","contentLanguage":"en","currency":"USD","eventMetadataId":"f4688ef2-24ea-4745-bc1f-5d830c988b04"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 1119 ); 1120 1121 var loaded = false;
1122 trekkie.ready(function() { 1123 if (loaded) return; 1124 loaded = true; 1125 1126 window.ShopifyAnalytics.lib = window.trekkie; 1127 1128 var originalDocumentWrite = document.write; 1129 document.write = customDocumentWrite; 1130 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 1131 document.write = originalDocumentWrite; 1132 1133 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 1134 var token = match? match[1]: undefined; 1135 if (!hasLoggedConversion(token)) { 1136 setCookieIfConversion(token); 1137 1138 } 1139 }); 1140 1141 window.ShopifyAnalytics.lib.page(null,{"pageType":"cart","requestId":"794801e5-ea53-4933-a076-3ce6356b7fe9-1790275030","shopifyEmitted":true}); 1142 1143 var eventsListenerScript = document.createElement('script'); 1144 eventsListenerScript.async = true; 1145 eventsListenerScript.src = "//boandtee.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 1146 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 1147})();</script>
1147 1148
1148<script> 1149 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 1150 window.ga = function ga() { 1151 (window.ga.q = window.ga.q || []).push(arguments); 1152 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 1153 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 1154 } 1155 console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information."); 1156 }; 1157 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 1158 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 1159 } 1160 } 1161</script>
vendor: 1 bytes, line 1161
1161
1162<script 1163 defer 1164 src="https://boandtee.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 1165 data-application="storefront-renderer" 1166 data-shop-id="24797970513" 1167 data-render-region="gcp-us-west1" 1168 data-page-type="cart" 1169 data-theme-instance-id="194769650047" 1170 data-theme-name="Bo & Tee by BAO" 1171 data-theme-version="1.0.0" 1172 data-monorail-region="shop_domain" 1173 data-resource-timing-sampling-rate="10" 1174 data-shs="true" 1175 data-shs-beacon="true" 1176 data-shs-export-with-fetch="true" 1177 data-shs-logs-sample-rate="1" 1178 data-shs-beacon-endpoint="https://boandtee.com/api/collect" 1179></script>
1179 1180<meta name="shopify-y" content="8858791f-d25a-4dbe-84d7-a4332afadedf" data-expiration="1821832630000"><meta name="shopify-s" content="8ca7b5c6-07e6-4344-b6bd-a6249d9a7952" data-expiration="1790276830000"><meta name="new-cookie-storage-activated" content="t"> 1181</head> 1182 1183 <body 1184 id="your-shopping-cart" 1185 class="lyt-Site template-cart js-StudentBeans" 1186 ontouchstart 1187 data-module="student-beans" 1188 data-module-class="js-StudentBeans" 1189 data-cookie-name="BAO-student-beans" 1190 1191 ><!-- Google Tag Manager (noscript) -->
vendor: 74 bytes, lines 1191-1192
1191 1192 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1192GTM-W8WZJTX
vendor: 93 bytes, lines 1192-1194
1192" 1193 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 1194
1194<!-- End Google Tag Manager (noscript) -->
vendor: 67 bytes, line 1194
1194<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1194GTM-W8WZJTX
vendor: 92 bytes, lines 1194-1197
1194" 1195 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 1196 1197
1197<div id="app"> 1198 <a class="util-ScreenReaderOnly" href="#MainContent">Skip to content</a><div id="shopify-section-header" class="shopify-section"><header 1199 class="hd-Header" 1200 data-section-id="header" 1201 data-section-type="header" 1202 data-restore-scroll-external-el="header" 1203> 1204
1204<script src="//boandtee.com/cdn/shop/t/1041/assets/header-search.js?v=157140068217118218251781691843" defer="defer"></script>
1204<script 1205 src="//boandtee.com/cdn/shop/t/1041/assets/announcement-bar.js?v=88371271167266476821778661985" 1206 type="module" 1207 ></script>
1207 1208 1209 <style> 1210 .hd-AnnouncementBar_Item[aria-hidden=true] { 1211 opacity: 0; 1212 pointer-events: none; 1213 } 1214 </style> 1215 1216 <section 1217 class="hd-AnnouncementBar" 1218 style=" 1219 --announce_bg_colour:#ffffff; 1220 --announce_text_colour:#000000; 1221 " 1222 > 1223 <div class="hd-AnnouncementBar_Body"> 1224 <announcement-bar class="hd-AnnouncementBar_Inner"> 1225 <div class="hd-AnnouncementBar_Items"><div 1226 class="hd-AnnouncementBar_Item" 1227 data-announcement-bar-el="announcement" 1228 1229 > 1230 <p class="hd-AnnouncementBar_Text">free delivery $150+ | express within 3 working days from $24.99</p> 1231 </div><div 1232 class="hd-AnnouncementBar_Item" 1233 data-announcement-bar-el="announcement" 1234 1235 aria-hidden="true" 1236 1237 > 1238 <p class="hd-AnnouncementBar_Text">new season core early access | <a href="/pages/waitlist" title="Waitlist">sign up to shop 24 hours before launch<strong> </strong> </a></p> 1239 </div><div 1240 class="hd-AnnouncementBar_Item" 1241 data-announcement-bar-el="announcement" 1242 1243 aria-hidden="true" 1244 1245 > 1246 <p class="hd-AnnouncementBar_Text">easy returns and exchanges </p> 1247 </div></div> 1248 </announcement-bar> 1249 </div> 1250 </section>
1250<script src="//boandtee.com/cdn/shop/t/1041/assets/mobile-header.js?v=6532261692075439571778661985" defer></script>
1250 1251 1252<div 1253 class=" 1254 hd-MobileHeader" 1255 is="mobile-header" 1256> 1257 <div class="hd-MobileHeader_Inner"> 1258 <div class="hd-MobileHeader_Left"> 1259 <button 1260 class="hd-MobileHeader_MenuTrigger" 1261 type="button" 1262 data-module-drawers-trigger="menu"> 1263 <svg 1264 xmlns="http://www.w3.org/2000/svg" 1265 width="15" 1266 height="13" 1267 fill="none"><path fill="#000" d="M0 12h15v1H0zM0 0h15v1H0zM0 6h15v1H0z" /></svg> 1268 </button> 1269 1270 <a href="/pages/wishlist" class="swym-wishlist"> 1271 <i 1272 aria-hidden="true" 1273 focusable="false" 1274 role="presentation" 1275 class="icon icon-swym-wishlist"><svg width="20" height="18" viewBox="0 0 20 18" fill="none" xmlns="http://www.w3.org/2000/svg"> 1276 <path fill-rule="evenodd" clip-rule="evenodd" d="M10.05 17C10.05 17 4.29198 11.6667 2.70697 9.4541C1.97461 8.43175 1.25 7.32 1.25 5.95238C1.25 3.21714 3.47678 1 6.22391 1C7.76276 1 9.13786 1.69638 10.05 2.78971C10.9621 1.69638 12.3372 1 13.8761 1C16.6232 1 18.85 3.21714 18.85 5.95238C18.85 7.32 18.0505 8.39051 17.393 9.4541C16.0253 11.6667 10.05 17 10.05 17Z" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/> 1277</svg> 1278<span 1279 class="hd-MobileHeader_WishlistCount" 1280 data-module="wishlist-count" 1281 aria-hidden="true"></span> 1282 </i> 1283 </a> 1284 </div> 1285 1286 <div class="hd-MobileHeader_Center"> 1287 <a href="/" class="hd-MobileHeader_Logo"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 595.51 93.21"><defs><style>.cls-1{fill-rule:evenodd}</style></defs><path d="M145.9 93.21c-25.66 0-46.54-20.88-46.54-46.54S120.23 0 145.9 0s46.66 20.93 46.66 46.66S171.63 93.2 145.9 93.2Zm0-72.58c-14.04 0-25.91 11.92-25.91 26.03s11.87 25.91 25.91 25.91 25.66-11.62 25.66-25.91-11.51-26.03-25.66-26.03ZM358.23 91.6V19.77h-28.02V1.6h77.16v18.29H379.6V91.6h-21.37zM0 91.66V1.54h42.47c19.61 0 29.14 7.47 29.14 22.84 0 8.24-3.33 14.07-10.43 18.17 9.46 3.56 14.63 11.48 14.63 22.55 0 8.59-3.46 15.61-10 20.3-5.62 4.03-13.47 6.25-22.1 6.25H0Zm41.11-17.05c8.96 0 13.32-3.47 13.32-10.6 0-7.8-4.24-11.59-12.95-11.59H21.37v22.19h19.74ZM40 37.21c4.95 0 10.85-1.65 10.85-9.49 0-6.22-3.92-9.12-12.33-9.12H21.37v18.62H40ZM525.02 91.79V1.42h66.29v18.29h-45.54v17.87h40.24v19.16h-40.24V73.5h49.74v18.29h-70.49zM430.9 91.79V1.42h66.3v18.29h-45.54v17.87h40.23v19.16h-40.23V73.5h49.74v18.29h-70.5z" class="cls-1"/><path d="M300.34 55.4h-25.58v24.99H255.8V55.4h-25.43V37.47h25.43v-25h18.96v24.99h25.58v17.93Z"/></svg> 1288</a> 1289 </div> 1290 1291 <div class="hd-MobileHeader_Right"> 1292 <a class="hd-Banner_Link" href="/account"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"> 1293 <path d="M11.0661 0.378968C13.0285 1.14952 14.3792 2.97922 14.5433 5.08897C14.6975 7.07122 13.7785 8.97285 12.1576 10.0807C15.2668 11.3696 17.3233 14.41 17.3487 17.8127L17.3501 18H15.8231L15.8233 17.8139C15.8249 15.7828 14.9173 13.8585 13.3486 12.571C12.146 11.5439 10.6086 10.9933 9.02738 11.
12930236C5.33266 11.0632 2.35718 14.0808 2.35343 17.792L2.35328 17.9776H0.850654L0.850129 17.7922C0.845409 16.0852 1.37518 14.4194 2.36513 13.0287C3.27478 11.7318 4.53714 10.7229 6.00263 10.1215C4.45336 9.08572 3.52726 7.32067 3.56791 5.43877C3.56138 3.92227 4.20443 2.47604 5.33033 1.47127C6.87563 0.032768 9.10381 -0.391582 11.0661 0.378968ZM6.23813 2.66054C5.09513 3.80234 4.75006 5.52337 5.36363 7.02052C5.97713 8.51775 7.42861 9.49605 9.04021 9.4989C11.1801 9.4989 12.9271 7.80412 13.0203 5.67622L13.0242 5.51174L13.0248 5.32649C12.9626 3.78187 12.0141 2.40584 10.5837 1.80547C9.09631 1.18124 7.38098 1.51882 6.23813 2.66054Z" fill="currentColor"/> 1294</svg> 1295<span class="util-ScreenReaderOnly">Translation missing: en.customer.general.account</span> 1296 </a> 1297 1298 <a 1299 href="/cart" 1300 data-module-drawers-trigger="cart" 1301 class="hd-Banner_Link"> 1302 <span class="hd-Banner_Bag"> 1303 <span class="hd-Banner_BagIcon"><svg width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg"> 1304 <rect x="1.3501" y="5" width="17.0526" height="15" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/> 1305 <path d="M5.65942 5.26068C5.96408 2.84983 7.736 1 9.8763 1C12.0166 1 13.7885 2.84983 14.0932 5.26068" stroke="currentColor" stroke-width="1.5"/> 1306</svg> 1307<div class="hd-Banner_BagCountWrapper"> 1308 <span class="hd-Banner_BagCount js-Banner_BagCount" data-cart-count>0</span> 1309 </div> 1310 </span> 1311 </span> 1312 </a> 1313 </div> 1314 </div><div class="hd-MobileSearch"><header-search 1315 class="hd-Search" 1316 data-search-context="header" 1317 data-header-search-el="page-search" 1318 data-scroll-restore-external-el="search" 1319> 1320 <button 1321 class="hd-Search_Trigger" 1322 type="button" 1323 data-header-search-el="trigger" 1324 aria-hidden="false" 1325 > 1326 <span class="hd-Search_TriggerText">Search our store</span> 1327 1328 <span class="hd-Search_Icon"><svg viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 1329 <circle cx="8.08593" cy="8.08593" r="7.08593" stroke="currentColor"/> 1330 <path d="M13.3552 13.3555L16.4998 16.5001" stroke="currentColor" stroke-linecap="square"/> 1331</svg> 1332</span> 1333 </button> 1334 1335 <form 1336 action="/search" 1337 method="get" 1338 role="search" 1339 class="hd-Search_Form" 1340 autocomplete="off" 1341 aria-hidden="true" 1342 data-header-search-el="form" 1343 data-search-dropdown-external-el="form" 1344 > 1345 <input 1346 type="search" 1347 id="searchtext" 1348 name="q" 1349 class="hd-Search_Input" 1350 value="" 1351 placeholder="Search our store" 1352 required 1353 data-header-search-el="input" 1354 data-search-dropdown-external-el="input" 1355 data-animated-search-text-external-el="text" 1356 > 1357 1358 <label for="search" class="util-ScreenReaderOnly">Search our store</label> 1359 1360 <button type="submit" class="hd-Search_Button"> 1361 <span class="hd-Banner_Icon hd-Search_Icon hd-Search_Icon-search"><svg viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 1362 <circle cx="8.08593" cy="8.08593" r="7.08593" stroke="currentColor"/> 1363 <path d="M13.3552 13.3555L16.4998 16.5001" stroke="currentColor" stroke-linecap="square"/> 1364</svg> 1365</span> 1366 </button> 1367 </form> 1368</header-search> 1369</div></div>
1370<script src="//boandtee.com/cdn/shop/t/1041/assets/desktop-header.js?v=119447647305268246061778661985" defer></script>
1370 1371 1372<div 1373 class=" 1374 hd-DesktopHeader" 1375 is="desktop-header" 1376> 1377 <div class="hd-DesktopHeader_Inner"> 1378 <div class="hd-DesktopHeader_Left"><nav class="hd-Navigation_Nav"> 1379 <ul class="hd-Navigation_Items"> 1380 1381 <li class="hd-Navigation_Item"> 1382 <a href="/collections/new-in" class="hd-Navigation_Link" > 1383 1384 new 1385 </a> 1386 </li> 1387 <li class="hd-Navigation_Item"> 1388 <a href="/collections/trending-now" class="hd-Navigation_Link" > 1389 1390trending </a> 1391 <div class="hd-Meganav"> 1392 <div class="hd-Meganav_Panel"> 1393 <ul class="hd-Meganav_List"> 1394<li class="hd-Meganav_Column"> 1395 <a href="/collections/bestsellers" class="hd-Sub_Link hd-Meganav_Title" >featured</a> 1396 <ul><li class="hd-Sub_Item"> 1397 <a href="/collections/back-in-stock" class="hd-Meganav_Link"><span>back in stock</span> 1398 </a> 1399 </li><li class="hd-Sub_Item"> 1400 <a href="/collections/pre-order" class="hd-Meganav_Link"><span>pre-order</span> 1401 </a> 1402 </li><li class="hd-Sub_Item"> 1403 <a href="/collections/bestsellers" class="hd-Meganav_Link"><span>bestsellers</span> 1404 </a> 1405 </li><li class="hd-Sub_Item"> 1406 <a href="/collections/core-collection" class="hd-Meganav_Link"><span>core collection</span> 1407 </a> 1408 </li></ul> 1409 </li> 1410 1411<li class="hd-Meganav_Column"> 1412 <a href="/collections/trending-now" class="hd-Sub_Link hd-Meganav_Title" >trending</a> 1413 <ul><li class="hd-Sub_Item"> 1414 <a href="/collections/trending-now" class="hd-Meganav_Link"><span>trending now</span> 1415 </a> 1416 </li><li class="hd-Sub_Item"> 1417 <a href="/collections/layering-season" class="hd-Meganav_Link"><span>layering season</span> 1418 </a> 1419 </li><li class="hd-Sub_Item"> 1420 <a href="/collections/on-campus-essentials" class="hd-Meganav_Link"><span>on-campus essentials</span> 1421 </a> 1422 </li><li class="hd-Sub_Item"> 1423 <a href="/collections/yoga-pilates" class="hd-Meganav_Link"><span>yoga + pilates </span> 1424 </a> 1425 </li><li class="hd-Sub_Item"> 1426 <a href="/collections/capri-looks" class="hd-Meganav_Link"><span>capri sets</span> 1427 </a> 1428 </li></ul> 1429 </li> 1430<div class="hd-Meganav_PromoDuo-container"> 1431 <div class="hd-Meganav_PromoDuo hd-Meganav_PromoDuo-left"> 1432 <div class="hd-Meganav_PromoImage hd-Meganav_PromoImage-duo"><div class="rsp-Image " style="--Image_AspectRatio: 131.25%; aspect-ratio: 640 / 840.0;"> 1433 1434 <img src="//boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_trending.jpg?v=1789740991&width=640" srcset="//boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_trending.jpg?v=1789740991&width=180 180w, //boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_trending.jpg?v=1789740991&width=360 360w, //boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_trending.jpg?v=1789740991&width=540 540w" width="640" height="845" loading="lazy" sizes="640px" class="rsp-Image_Image rsp-Image_Image"> 1435 1436</div> 1437</div><div class="hd-Meganav_PromoOverlay hd-Meganav_PromoOverlay-contentLeft hd-Meganav_PromoOverlay-contentBottom"> 1438 <p class="hd-Meganav_PromoTitle"></p> 1439 </div></div> 1440 1441 <div class="hd-Meganav_PromoDuo hd-Meganav_PromoDuo-right"> 1442 <div class="hd-Meganav_PromoImage hd-Meganav_PromoImage-duo"><div class="rsp-Image " style="--Image_AspectRatio: 131.25%; aspect-ratio: 640 / 840.0;"> 1443 1444 <img src="//boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_BackInStock.jpg?v=1789740988&width=640" srcset="//boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_BackInStock.jpg?v=1789740988&width=180 180w, //boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_BackInStock.jpg?v=1789740988&width=360 360w, //boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_BackInStock.jpg?v=1789740988&width=540 540w" width="640" height="845" loading="lazy" sizes="640px" class="rsp-Image_Image rsp-Image_Image"> 1445 1446</div> 1447</div><div class="hd-Meganav_PromoOverlay hd-Meganav_PromoOverlay-contentLeft hd-Meganav_PromoOverlay-contentBottom"> 1448 <p class="hd-Meganav_PromoTitle"></p> 1449 </div><a class="hd-Meganav_FauxLink util-FauxLink" href="https://boandtee.com/collections/back-in-stock" aria-label=""></a></div> 1450 </div> 1451</ul> 1452 </div> 1453 </div> 1454 </li> 1455 <li class="hd-Navigation_Item"> 1456 <a href="/collections/shop-all" class="hd-Navigation_Link" > 1457 1458shop by</a> 1459 <div class="hd-Meganav"> 1460 <div class="hd-Meganav_Panel"> 1461 <ul class="hd-Meganav_List"> 1462<li class="hd-Meganav_Column"> 1463 <a href="/collections/shop-all" class="hd-Sub_Link hd-Meganav_Title" >active</a> 1464 <ul><li class="hd-Sub_Item"> 1465 <a href="/collections/sports-bras" class="hd-Meganav_Link"><span>sports bras</span> 1466 </a> 1467 </li><li class="hd-Sub_Item"> 1468 <a href="/collections/active-shorts" class="hd-Meganav_Link"><span>shorts</span> 1469 </a> 1470 </li><li class="hd-Sub_Item"> 1471 <a href="/collections/leggings" class="hd-Meganav_Link"><span>leggings</span> 1472 </a> 1473 </li><li class="hd-Sub_Item"> 1474 <a href="/collections/active-tops" class="hd-Meganav_Link"><span>tops</span> 1475 </a> 1476 </li><li class="hd-Sub_Item"> 1477 <a href="/collections/matching-sets" class="hd-Meganav_Link"><span>active sets</span> 1478 </a> 1479 </li><li class="hd-Sub_Item"> 1480 <a href="/collections/dresses-skorts" class="hd-Meganav_Link"><span>active dresses + skorts</span> 1481 </a> 1482 </li><li class="hd-Sub_Item"> 1483 <a href="/collections/one-pieces" class="hd-Meganav_Link"><span>jumpsuits + unitards</span> 1484 </a> 1485 </li><li class="hd-Sub_Item"> 1486 <a href="/collections/shop-all" class="hd-Meganav_Link"><span>shop all</span> 1487 </a> 1488 </li></ul> 1489 </li> 1490 1491<li class="hd-Meganav_Column"> 1492 <a href="/collections/shop-all" class="hd-Sub_Link hd-Meganav_Title" >lifestyle</a> 1493 <ul><li class="hd-Sub_Item">
1494 <a href="/collections/knitwear" class="hd-Meganav_Link"><span>knitwear</span> 1495 </a> 1496 </li><li class="hd-Sub_Item"> 1497 <a href="/collections/hoodies-and-sweatshirts" class="hd-Meganav_Link"><span>hoodies + jumpers</span> 1498 </a> 1499 </li><li class="hd-Sub_Item"> 1500 <a href="/collections/trousers-joggers" class="hd-Meganav_Link"><span>trousers + joggers</span> 1501 </a> 1502 </li><li class="hd-Sub_Item"> 1503 <a href="/collections/leisure-tops" class="hd-Meganav_Link"><span>leisure tops</span> 1504 </a> 1505 </li><li class="hd-Sub_Item"> 1506 <a href="/collections/leisure-shorts" class="hd-Meganav_Link"><span>leisure shorts</span> 1507 </a> 1508 </li><li class="hd-Sub_Item"> 1509 <a href="/collections/jackets" class="hd-Meganav_Link"><span>jackets + coats</span> 1510 </a> 1511 </li><li class="hd-Sub_Item"> 1512 <a href="/collections/leisure-sets" class="hd-Meganav_Link"><span>leisure sets</span> 1513 </a> 1514 </li><li class="hd-Sub_Item"> 1515 <a href="/collections/leisure-dresses-skorts" class="hd-Meganav_Link"><span>dresses + skorts</span> 1516 </a> 1517 </li><li class="hd-Sub_Item"> 1518 <a href="/collections/accessories" class="hd-Meganav_Link"><span>accessories </span> 1519 </a> 1520 </li></ul> 1521 </li> 1522 1523<li class="hd-Meganav_Column"> 1524 <a href="/collections/trending-now-pink" class="hd-Sub_Link hd-Meganav_Title" >colour </a> 1525 <ul><li class="hd-Sub_Item"> 1526 <a href="/collections/brown-spotlight" class="hd-Meganav_Link"><span>brown</span> 1527 </a> 1528 </li><li class="hd-Sub_Item"> 1529 <a href="/collections/trending-now-pink" class="hd-Meganav_Link"><span>pink </span> 1530 </a> 1531 </li><li class="hd-Sub_Item"> 1532 <a href="/collections/back-to-black" class="hd-Meganav_Link"><span>black</span> 1533 </a> 1534 </li><li class="hd-Sub_Item"> 1535 <a href="/collections/spotlight-on-red" class="hd-Meganav_Link"><span>red</span> 1536 </a> 1537 </li><li class="hd-Sub_Item"> 1538 <a href="/collections/a-grey-moment" class="hd-Meganav_Link"><span>grey </span> 1539 </a> 1540 </li><li class="hd-Sub_Item"> 1541 <a href="/collections/all-yellow" class="hd-Meganav_Link"><span>yellow</span> 1542 </a> 1543 </li><li class="hd-Sub_Item"> 1544 <a href="/collections/blue-in-motion" class="hd-Meganav_Link"><span>blue</span> 1545 </a> 1546 </li></ul> 1547 </li> 1548 1549<li class="hd-Meganav_Column"> 1550 <a href="/collections/gym" class="hd-Sub_Link hd-Meganav_Title" >movement</a> 1551 <ul><li class="hd-Sub_Item"> 1552 <a href="/collections/gym" class="hd-Meganav_Link"><span>gym</span> 1553 </a> 1554 </li><li class="hd-Sub_Item"> 1555 <a href="/collections/yoga-pilates" class="hd-Meganav_Link"><span>yoga + pilates</span> 1556 </a> 1557 </li><li class="hd-Sub_Item"> 1558 <a href="/collections/padel-club" class="hd-Meganav_Link"><span>racket sports </span> 1559 </a> 1560 </li><li class="hd-Sub_Item"> 1561 <a href="/collections/lounge" class="hd-Meganav_Link"><span>lounge</span> 1562 </a> 1563 </li><li class="hd-Sub_Item"> 1564 <a href="/collections/bo-tee-ski" class="hd-Meganav_Link"><span>ski</span> 1565 </a> 1566 </li></ul> 1567 </li> 1568 1569<li class="hd-Meganav_Column"> 1570 <a href="/collections/sweet-escape" class="hd-Sub_Link hd-Meganav_Title" >collections</a> 1571 <ul><li class="hd-Sub_Item"> 1572 <a href="/collections/softer-days" class="hd-Meganav_Link"><span>Softer Days</span> 1573 </a> 1574 </li><li class="hd-Sub_Item"> 1575 <a href="/collections/cottage-core" class="hd-Meganav_Link"><span>Cottage Core</span> 1576 </a> 1577 </li><li class="hd-Sub_Item"> 1578 <a href="/collections/buttercloud" class="hd-Meganav_Link"><span>ButterCloudâ¢</span> 1579 </a> 1580 </li><li class="hd-Sub_Item"> 1581 <a href="/collections/camp-bo-tee" class="hd-Meganav_Link"><span>Camp Bo+Tee</span> 1582 </a> 1583 </li><li class="hd-Sub_Item"> 1584 <a href="/collections/soft-sundae" class="hd-Meganav_Link"><span>Soft Sundae Featuring Holly Jai</span> 1585 </a> 1586 </li><li class="hd-Sub_Item"> 1587 <a href="/collections/soft-active" class="hd-Meganav_Link"><span>Soft Active</span> 1588 </a> 1589 </li></ul> 1590 </li> 1591 1592</ul> 1593 </div> 1594 </div> 1595 </li> 1596 <li class="hd-Navigation_Item"> 1597 <a href="/collections/buttercloud" class="hd-Navigation_Link" > 1598 1599 soft wear 1600 </a> 1601 </li> 1602 <li class="hd-Navigation_Item"> 1603 <a href="/collections/bo-tee-ski" class="hd-Navigation_Link" > 1604 1605ski</a> 1606 <div class="hd-Meganav"> 1607 <div class="hd-Meganav_Panel"> 1608 <ul class="hd-Meganav_List"> 1609<li class="hd-Meganav_Column"> 1610 <a href="/collections/bo-tee-ski" class="hd-Sub_Link hd-Meganav_Title" >shop by</a> 1611 <ul><li class="hd-Sub_Item"> 1612 <a href="/collections/bo-tee-ski" class="hd-Meganav_Link"><span>all ski</span> 1613 </a> 1614 </li><li class="hd-Sub_Item"> 1615 <a href="/pages/fabric-guide-ski" class="hd-Meganav_Link"><span>fabric guide</span> 1616 </a> 1617 </li><li class="hd-Sub_Item"> 1618 <a href="/pages/styled-on-the-slopes" class="hd-Meganav_Link"><span>styled on the slopes</span> 1619 </a> 1620 </li><li class="hd-Sub_Item"> 1621 <a href="/collections/ski-sale" class="hd-Meganav_Link"><span>ski sale </span> 1622 </a> 1623 </li></ul> 1624 </li> 1625 1626<li class="hd-Meganav_Column"> 1627 <a href="/collections/bo-tee-ski" class="hd-Sub_Link hd-Meganav_Title" >shop by product</a> 1628 <ul><li class="hd-Sub_Item"> 1629 <a href="/collections/ski-jackets" class="hd-Meganav_Link"><span>jackets</span> 1630 </a> 1631 </li><li class="hd-Sub_Item"> 1632 <a href="/collections/womens-salopettes-ski-trousers" class="hd-Meganav_Link"><span>suits + salopettes</span> 1633 </a> 1634 </li></ul> 1635 </li> 1636<div class="hd-Meganav_PromoDuo-container"> 1637 <div class="hd-Meganav_PromoDuo hd-Meganav_PromoDuo-left"> 1638 <div class="hd-Meganav_PromoImage hd-Meganav_PromoImage-duo"><div class="rsp-Image " style="--Image_AspectRatio: 131.25%; aspect-ratio: 640 / 840.0;"> 1639 1640 <img src="//boandtee.com/cdn/shop/files/Ski-WEB.jpg?v=1787139696&width=640" srcset="//boandtee.com/cdn/shop/files/Ski-WEB.jpg?v=1787139696&width=180 180w, //boandtee.com/cdn/shop/files/Ski-WEB.jpg?v=1787139696&width=360 360w, //boandtee.com/cdn/shop/files/Ski-WEB.jpg?v=1787139696&width=540 540w" width="640" height="845" loading="lazy" sizes="640px" class="rsp-Image_Image rsp-Image_Image"> 1641 1642</div> 1643</div><div class="hd-Meganav_PromoOverlay hd-Meganav_PromoOverlay-contentLeft hd-Meganav_PromoOverlay-contentBottom"> 1644 <p class="hd-Meganav_PromoTitle">ski</p> 1645 </div><a class="hd-Meganav_FauxLink util-FauxLink" href="https://boandtee.com/pages/ski-waitlist" aria-label="ski"></a></div> 1646 1647 <div class="hd-Meganav_PromoDuo hd-Meganav_PromoDuo-right"> 1648 <div class="hd-Meganav_PromoImage hd-Meganav_PromoImage-duo"><div class="rsp-Image " style="--Image_AspectRatio: 131.25%; aspect-ratio: 640 / 840.0;"> 1649 1650 <img src="//boandtee.com/cdn/shop/files/BT_Menu_image_2jpg_929d8b7d-a858-443d-85ef-86a1cd373f34.jpg?v=1784631349&width=640" srcset="//boandtee.com/cdn/shop/files/BT_Menu_image_2jpg_929d8b7d-a858-443d-85ef-86a1cd373f34.jpg?v=1784631349&width=180 180w, //boandtee.com/cdn/shop/files/BT_Menu_image_2jpg_929d8b7d-a858-443d-85ef-86a1cd373f34.jpg?v=1784631349&width=360 360w, //boandtee.com/cdn/shop/files/BT_Menu_image_2jpg_929d8b7d-a858-443d-85ef-86a1cd373f34.jpg?v=1784631349&width=540 540w" width="640" height="845" loading="lazy" sizes="640px" class="rsp-Image_Image rsp-Image_Image"> 1651 1652</div> 1653</div><div class="hd-Meganav_PromoOverlay hd-Meganav_PromoOverlay-contentLeft hd-Meganav_PromoOverlay-contentBottom"> 1654 <p class="hd-Meganav_PromoTitle"></p> 1655 </div><a class="hd-Meganav_FauxLink util-FauxLink" href="https://boandtee.com/collections/bo-tee-ski" aria-label=""></a></div> 1656 </div> 1657</ul> 1658 </div> 1659 </div> 1660 </li> 1661 <li class="hd-Navigation_Item"> 1662 <a href="/collections/sale" class="hd-Navigation_Link" > 1663 1664sale</a> 1665 <div class="hd-Meganav"> 1666 <div class="hd-Meganav_Panel"> 1667 <ul class="hd-Meganav_List"> 1668<li class="hd-Meganav_Column"> 1669 <a href="/collections/sale" class="hd-Sub_Link hd-Meganav_Title" >shop by product</a> 1670 <ul><li class="hd-Sub_Item"> 1671 <a href="/collections/sale-sports-bras" class="hd-Meganav_Link"><span>sale sports bras</span> 1672 </a> 1673 </li><li class="hd-Sub_Item"> 1674 <a href="/collections/sale-tops" class="hd-Meganav_Link"><span>sale tops</span> 1675 </a> 1676 </li><li class="hd-Sub_Item"> 1677 <a href="/collections/sale-leggings" class="hd-Meganav_Link"><span>sale leggings</span> 1678 </a> 1679 </li><li class="hd-Sub_Item"> 1680 <a href="/collections/sale-activewear" class="hd-Meganav_Link"><span>sale activewear</span> 1681 </a> 1682 </li><li class="hd-Sub_Item"> 1683 <a href="/collections/sale" class="hd-Meganav_Link"><span>shop all</span> 1684 </a> 1685 </li></ul> 1686 </li> 1687<div class="hd-Meganav_PromoDuo-container"> 1688 <div class="hd-Meganav_PromoDuo hd-Meganav_PromoDuo-left"> 1689 <div class="hd-Meganav_PromoImage hd-Meganav_PromoImage-duo"><div class="rsp-Image " style="--Image_AspectRatio: 131.25%; aspect-ratio: 640 / 840.0;"> 1690 1691 <img src="//boandtee.com/cdn/shop/files/Sale_731cae76-cce8-488c-a7a3-006f5d8f09a0.jpg?v=1788969481&width=640" srcset="//boandtee.com/cdn/shop/files/Sale_731cae76-cce8-488c-a7a3-006f5d8f09a0.jpg?v=1788969481&width=180 180w, //boandtee.com/cdn/shop/files/Sale_731cae76-cce8-488c-a7a3-006f5d8f09a0.jpg?v=1788969481&width=360 360w, //boandtee.com/cdn/shop/files/Sale_731cae76-cce8-488c-a7a3-006f5d8f09a0.jpg?v=1788969481&width=540 540w" width="640" height="845" loading="lazy" sizes="640px" class="rsp-Image_Image rsp-Image_Image"> 1692 1693</div> 1694</div><div class="hd-Meganav_PromoOverlay hd-Meganav_PromoOverlay-contentLeft hd-Meganav_PromoOverlay-contentBottom"> 1695 <p class="hd-Meganav_PromoTitle"></p> 1696 </div><a class="hd-Meganav_FauxLink util-FauxLink" href="https://boandtee.com/collections/sale" aria-label=""></a></div> 1697 1698 <div class="hd-Meganav_PromoDuo hd-Meganav_PromoDuo-right"> 1699 <div class="hd-Meganav_PromoImage hd-Meganav_PromoImage-duo"><div class="rsp-Image " style="--Image_AspectRatio: 131.25%; aspect-ratio: 640 / 840.0;"> 1700 1701 <img src="//boandtee.com/cdn/shop/files/SaleSportsBra.jpg?v=1788969486&width=640" srcset="//boandtee.com/cdn/shop/files/SaleSportsBra.jpg?v=1788969486&width=180 180w, //boandtee.com/cdn/shop/files/SaleSportsBra.jpg?v=1788969486&width=360 360w, //boandtee.com/cdn/shop/files/SaleSportsBra.jpg?v=1788969486&width=540 540w" width="640" height="845" loading="lazy" sizes="640px" class="rsp-Image_Image rsp-Image_Image"> 1702 1703</div> 1704</div><div class="hd-Meganav_PromoOverlay hd-Meganav_PromoOverlay-contentLeft hd-Meganav_PromoOverlay-contentBottom"> 1705 <p class="hd-Meganav_PromoTitle"></p> 1706 </div><a class="hd-Meganav_FauxLink util-FauxLink" href="https://boandtee.com/collections/sale-sports-bras" aria-label=""></a></div> 1707 </div> 1708</ul> 1709 </div> 1710 </div> 1711 </li></ul> 1712</nav> 1713</div> 1714 1715 <div class="hd-DesktopHeader_Center"> 1716 <a href="/" class="hd-DesktopHeader_Logo"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 595.51 93.21"><defs><style>.cls-1{fill-rule:evenodd}</style></defs><path d="M145.9 93.21c-25.66 0-46.54-20.88-46.54-46.54S120.23 0 145.9 0s46.66 20.93 46.66 46.66S171.63 93.2 145.9 93.2Zm0-72.58c-14.04 0-25.91 11.92-25.91 26.03s11.87 25.91 25.91 25.91 25.66-11.62 25.66-25.91-11.51-26.03-25.66-26.03ZM358.23 91.6V19.77h-28.02V1.6h77.16v18.29H379.6V91.6h-21.37zM0 91.66V1.54h42.47c19.61 0 29.14 7.47 29.14 22.84 0 8.24-3.33 14.07-10.43 18.17 9.46 3.56 14.63 11.48 14.63 22.55 0 8.59-3.46 15.61-10 20.3-5.62 4.03-13.47 6.25-22.1 6.25H0Zm41.11-17.05c8.96 0 13.32-3.47 13.32-10.6 0-7.8-4.24-11.59-12.95-11.59H21.37v22.19h19.74ZM40 37.21c4.95 0 10.85-1.65 10.85-9.49 0-6.22-3.92-9.12-12.33-9.12H21.37v18.62H40ZM525.02 91.79V1.42h66.29v18.29h-45.54v17.87h40.24v19.16h-40.24V73.5h49.74v18.29h-70.49zM430.9 91.79V1.42h66.3v18.29h-45.54v17.87h40.23v19.16h-40.23V73.5h49.74v18.29h-70.5z" class="cls-1"/><path d="M300.34 55.4h-25.58v24.99H255.8V55.4h-25.43V37.47h25.43v-25h18.96v24.99h25.58v17.93Z"/></svg> 1717</a> 1718 </div> 1719 1720 <div class="hd-DesktopHeader_Right"><nav class="hd-Navigation_Nav"> 1721 <ul class="hd-Navigation_Items"> 1722</ul> 1723</nav>
1724<div class="hd-Banner_SearchWrapper"><header-search 1725 class="hd-Search" 1726 data-search-context="header" 1727 data-header-search-el="page-search" 1728 data-scroll-restore-external-el="search" 1729> 1730 <button 1731 class="hd-Search_Trigger" 1732 type="button" 1733 data-header-search-el="trigger" 1734 aria-hidden="false" 1735 > 1736 <span class="hd-Search_TriggerText">Search our store</span> 1737 1738 <span class="hd-Search_Icon"><svg viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 1739 <circle cx="8.08593" cy="8.08593" r="7.08593" stroke="currentColor"/> 1740 <path d="M13.3552 13.3555L16.4998 16.5001" stroke="currentColor" stroke-linecap="square"/> 1741</svg> 1742</span> 1743 </button> 1744 1745 <form 1746 action="/search" 1747 method="get" 1748 role="search" 1749 class="hd-Search_Form" 1750 autocomplete="off" 1751 aria-hidden="true" 1752 data-header-search-el="form" 1753 data-search-dropdown-external-el="form" 1754 > 1755 <input 1756 type="search" 1757 id="searchtext" 1758 name="q" 1759 class="hd-Search_Input" 1760 value="" 1761 placeholder="Search our store" 1762 required 1763 data-header-search-el="input" 1764 data-search-dropdown-external-el="input" 1765 data-animated-search-text-external-el="text" 1766 > 1767 1768 <label for="search" class="util-ScreenReaderOnly">Search our store</label> 1769 1770 <button type="submit" class="hd-Search_Button"> 1771 <span class="hd-Banner_Icon hd-Search_Icon hd-Search_Icon-search"><svg viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 1772 <circle cx="8.08593" cy="8.08593" r="7.08593" stroke="currentColor"/> 1773 <path d="M13.3552 13.3555L16.4998 16.5001" stroke="currentColor" stroke-linecap="square"/> 1774</svg> 1775</span> 1776 </button> 1777 </form> 1778</header-search> 1779</div> 1780 1781 <div><div class="crc-Picker"> 1782 <select class="crc-Picker_Select" is="currency-select" aria-label="Currency Selector" data-currency-select-el="select"><option value="?currency=AED">AED</option><option value="?currency=AUD">AUD</option><option value="?currency=CAD">CAD</option><option value="?currency=EUR">EUR</option><option value="?currency=GBP">GBP</option><option value="?currency=ILS">ILS</option><option value="?currency=JPY">JPY</option><option value="?currency=USD" selected>USD</option></select> 1783 1784 <div class="crc-Picker_Icon"><svg width="14" height="8" viewBox="0 0 14 8" fill="none" xmlns="http://www.w3.org/2000/svg"> 1785 <path d="M0.999878 1L6.99988 7L12.9999 1" stroke="currentColor" stroke-width="1.4"/> 1786</svg> 1787</div> 1788</div> 1789</div> 1790 1791 <a href="/pages/wishlist" class="swym-wishlist"><svg width="20" height="18" viewBox="0 0 20 18" fill="none" xmlns="http://www.w3.org/2000/svg"> 1792 <path fill-rule="evenodd" clip-rule="evenodd" d="M10.05 17C10.05 17 4.29198 11.6667 2.70697 9.4541C1.97461 8.43175 1.25 7.32 1.25 5.95238C1.25 3.21714 3.47678 1 6.22391 1C7.76276 1 9.13786 1.69638 10.05 2.78971C10.9621 1.69638 12.3372 1 13.8761 1C16.6232 1 18.85 3.21714 18.85 5.95238C18.85 7.32 18.0505 8.39051 17.393 9.4541C16.0253 11.6667 10.05 17 10.05 17Z" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/> 1793</svg> 1794</a> 1795 1796 <a class="hd-Banner_Link" href="/account"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"> 1797 <path d="M11.0661 0.378968C13.0285 1.14952 14.3792 2.97922 14.5433 5.08897C14.6975 7.07122 13.7785 8.97285 12.1576 10.0807C15.2668 11.3696 17.3233 14.41 17.3487 17.8127L17.3501 18H15.8231L15.8233 17.8139C15.8249 15.7828 14.9173 13.8585 13.3486 12.571C12.146 11.5439 10.6086 10.9933 9.02738 11.
17970236C5.33266 11.0632 2.35718 14.0808 2.35343 17.792L2.35328 17.9776H0.850654L0.850129 17.7922C0.845409 16.0852 1.37518 14.4194 2.36513 13.0287C3.27478 11.7318 4.53714 10.7229 6.00263 10.1215C4.45336 9.08572 3.52726 7.32067 3.56791 5.43877C3.56138 3.92227 4.20443 2.47604 5.33033 1.47127C6.87563 0.032768 9.10381 -0.391582 11.0661 0.378968ZM6.23813 2.66054C5.09513 3.80234 4.75006 5.52337 5.36363 7.02052C5.97713 8.51775 7.42861 9.49605 9.04021 9.4989C11.1801 9.4989 12.9271 7.80412 13.0203 5.67622L13.0242 5.51174L13.0248 5.32649C12.9626 3.78187 12.0141 2.40584 10.5837 1.80547C9.09631 1.18124 7.38098 1.51882 6.23813 2.66054Z" fill="currentColor"/> 1798</svg> 1799<span class="util-ScreenReaderOnly">Translation missing: en.customer.general.account</span> 1800 </a> 1801 1802 <a href="/cart" data-module-drawers-trigger="cart" class="hd-Banner_Link"> 1803 <span class="hd-Banner_Bag"> 1804 <span class="hd-Banner_BagIcon"><svg width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg"> 1805 <rect x="1.3501" y="5" width="17.0526" height="15" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/> 1806 <path d="M5.65942 5.26068C5.96408 2.84983 7.736 1 9.8763 1C12.0166 1 13.7885 2.84983 14.0932 5.26068" stroke="currentColor" stroke-width="1.5"/> 1807</svg> 1808<div class="hd-Banner_BagCountWrapper"> 1809 <span class="hd-Banner_BagCount js-Banner_BagCount" data-cart-count>0</span> 1810 </div> 1811 </span> 1812 <span class="hd-Banner_Subtotal" data-cart-subtotal></span> 1813 </span> 1814 </a> 1815 </div> 1816 </div> 1817</div> 1818</header><div class="drw-Drawer drw-Drawer-fromLeft" data-module-drawers-drawer="menu"> 1819 <div class="drw-Drawer_Inner"> 1820 <div class="drw-Header"> 1821 <div class="drw-Header_Inner"> 1822 <div class="drw-Header_Body"> 1823 <div class="drw-Header"> 1824 <div class="drw-Header_Logo drw-Header_Logo-mobile"> 1825 <div class="hd-Banner_Logo"> 1826 1827 1828<a class="hd-Banner_LogoLink" href="/" itemprop="url"> 1829 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 595.51 93.21"><defs><style>.cls-1{fill-rule:evenodd}</style></defs><path d="M145.9 93.21c-25.66 0-46.54-20.88-46.54-46.54S120.23 0 145.9 0s46.66 20.93 46.66 46.66S171.63 93.2 145.9 93.2Zm0-72.58c-14.04 0-25.91 11.92-25.91 26.03s11.87 25.91 25.91 25.91 25.66-11.62 25.66-25.91-11.51-26.03-25.66-26.03ZM358.23 91.6V19.77h-28.02V1.6h77.16v18.29H379.6V91.6h-21.37zM0 91.66V1.54h42.47c19.61 0 29.14 7.47 29.14 22.84 0 8.24-3.33 14.07-10.43 18.17 9.46 3.56 14.63 11.48 14.63 22.55 0 8.59-3.46 15.61-10 20.3-5.62 4.03-13.47 6.25-22.1 6.25H0Zm41.11-17.05c8.96 0 13.32-3.47 13.32-10.6 0-7.8-4.24-11.59-12.95-11.59H21.37v22.19h19.74ZM40 37.21c4.95 0 10.85-1.65 10.85-9.49 0-6.22-3.92-9.12-12.33-9.12H21.37v18.62H40ZM525.02 91.79V1.42h66.29v18.29h-45.54v17.87h40.24v19.16h-40.24V73.5h49.74v18.29h-70.49zM430.9 91.79V1.42h66.3v18.29h-45.54v17.87h40.23v19.16h-40.23V73.5h49.74v18.29h-70.5z" class="cls-1"/><path d="M300.34 55.4h-25.58v24.99H255.8V55.4h-25.43V37.47h25.43v-25h18.96v24.99h25.58v17.93Z"/></svg> 1830 1831</a> 1832 1833 1834 </div> 1835 1836</div> 1837 1838 <button class="drw-Header_Link drw-Header_Link-close" data-module-drawers-close="menu"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 1839 <path d="M15.89 14.696l-4.734-4.734 4.717-4.717c.4-.4.37-1.085-.03-1.485s-1.085-.43-1.485-.03L9.641 8.447 4.97 3.776c-.4-.4-1.085-.37-1.485.03s-.43 1.085-.03 1.485l4.671 4.671-4.688 4.688c-.4.4-.37 1.085.03 1.485s1.085.43 1.485.03l4.688-4.687 4.734 4.734c.4.4 1.085.37 1.485-.03s.43-1.085.03-1.485z"/> 1840</svg> 1841</button> 1842 </div><div class="drw-Header_SearchWrapper"> 1843 <form action="/search" method="get" role="search" class="drw_Header_Search"> 1844 1845 <label for="Search" class="util-ScreenReaderOnly"> 1846 Search our store 1847 </label> 1848 1849 <input 1850 type="search" 1851 name="q" 1852 id="Search" 1853 value="" 1854 placeholder="Search our store" 1855 autocomplete="off" 1856 class="drw-Search_Input" 1857 > 1858 1859 <button type="submit" class="drw-Search_Button drw-Banner_Icon"><svg viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 1860 <circle cx="8.08593" cy="8.08593" r="7.08593" stroke="currentColor"/> 1861 <path d="M13.3552 13.3555L16.4998 16.5001" stroke="currentColor" stroke-linecap="square"/> 1862</svg> 1863<span class="util-ScreenReaderOnly">Search</span> 1864 </button> 1865 </form> 1866 </div></div> 1867 </div> 1868 </div> 1869 1870 <div class="drw-Drawer_Nav js-MobileNav" data-module="mobile-nav" data-module-class="js-MobileNav"> 1871 <nav class="drw-Nav"> 1872
1873 <ul class="drw-Nav_Items drw-Nav_Items-main js-MobileNav_Items" aria-current="true"><li class="drw-Nav_Item"> 1874 <a href="/collections/new-in" 1875 class="drw-Nav_Link drw-Nav_Link-main" 1876 > 1877 new 1878 </a> 1879 </li><li class="drw-Nav_Item js-MobileNav_Item"> 1880 <button 1881 class="drw-Nav_Link drw-Nav_Link-main js-MobileNav_Trigger" 1882 > 1883 trending 1884<svg width="6" height="11" viewBox="0 0 6 11" fill="none" xmlns="http://www.w3.org/2000/svg"> 1885 <path d="M1 1L5.5 5.5L1 10" stroke="black" stroke-width="0.5"/> 1886</svg> 1887 1888</button> 1889 1890 <div class="drw-Nav_Sub js-MobileNav_Drawer"><div class="drw-Nav_Header"><button class="drw-Nav_Back js-MobileNav_Back"><svg width="6" height="11" viewBox="0 0 6 11" fill="none" xmlns="http://www.w3.org/2000/svg"> 1891 <path d="M5.5 10L1 5.5L5.5 1" stroke="black" stroke-width="0.5"/> 1892</svg>Back</button> 1893 <span class="drw-Nav_SubTitle">trending </span> 1894 </div> 1895 1896 <ul class="drw-Nav_Items drw-Nav_Items-container"><li class="drw-Nav_Item drw-Nav_Item-group js-MobileNav_Item"> 1897 1898 <a href="/collections/bestsellers" class="drw-Nav_Item-parent" >featured</a> 1899 1900 <ul class="drw-Nav_Items"><li class="drw-Nav_Item"> 1901 <a href="/collections/back-in-stock" class="drw-Nav_Link drw-Nav_Link-child" ><span>back in stock</span> 1902 </a> 1903 </li><li class="drw-Nav_Item"> 1904 <a href="/collections/pre-order" class="drw-Nav_Link drw-Nav_Link-child" ><span>pre-order</span> 1905 </a> 1906 </li><li class="drw-Nav_Item"> 1907 <a href="/collections/bestsellers" class="drw-Nav_Link drw-Nav_Link-child" ><span>bestsellers</span> 1908 </a> 1909 </li><li class="drw-Nav_Item"> 1910 <a href="/collections/core-collection" class="drw-Nav_Link drw-Nav_Link-child" ><span>core collection</span> 1911 </a> 1912 </li></ul> 1913 </li><li class="drw-Nav_Item drw-Nav_Item-group js-MobileNav_Item"> 1914 1915 <a href="/collections/trending-now" class="drw-Nav_Item-parent" >trending</a> 1916 1917 <ul class="drw-Nav_Items"><li class="drw-Nav_Item"> 1918 <a href="/collections/trending-now" class="drw-Nav_Link drw-Nav_Link-child" ><span>trending now</span> 1919 </a> 1920 </li><li class="drw-Nav_Item"> 1921 <a href="/collections/layering-season" class="drw-Nav_Link drw-Nav_Link-child" ><span>layering season</span> 1922 </a> 1923 </li><li class="drw-Nav_Item"> 1924 <a href="/collections/on-campus-essentials" class="drw-Nav_Link drw-Nav_Link-child" ><span>on-campus essentials</span> 1925 </a> 1926 </li><li class="drw-Nav_Item"> 1927 <a href="/collections/yoga-pilates" class="drw-Nav_Link drw-Nav_Link-child" ><span>yoga + pilates </span> 1928 </a> 1929 </li><li class="drw-Nav_Item"> 1930 <a href="/collections/capri-looks" class="drw-Nav_Link drw-Nav_Link-child" ><span>capri sets</span> 1931 </a> 1932 </li></ul> 1933 </li></ul> 1934 </div> 1935 </li><li class="drw-Nav_Item js-MobileNav_Item"> 1936 <button 1937 class="drw-Nav_Link drw-Nav_Link-main js-MobileNav_Trigger" 1938 > 1939 shop by
1940<svg width="6" height="11" viewBox="0 0 6 11" fill="none" xmlns="http://www.w3.org/2000/svg"> 1941 <path d="M1 1L5.5 5.5L1 10" stroke="black" stroke-width="0.5"/> 1942</svg> 1943 1944</button> 1945 1946 <div class="drw-Nav_Sub js-MobileNav_Drawer"><div class="drw-Nav_Header"><button class="drw-Nav_Back js-MobileNav_Back"><svg width="6" height="11" viewBox="0 0 6 11" fill="none" xmlns="http://www.w3.org/2000/svg"> 1947 <path d="M5.5 10L1 5.5L5.5 1" stroke="black" stroke-width="0.5"/> 1948</svg>Back</button> 1949 <span class="drw-Nav_SubTitle">shop by</span> 1950 </div> 1951 1952 <ul class="drw-Nav_Items drw-Nav_Items-container"><li class="drw-Nav_Item drw-Nav_Item-group js-MobileNav_Item"> 1953 1954 <a href="/collections/shop-all" class="drw-Nav_Item-parent" >active</a> 1955 1956 <ul class="drw-Nav_Items"><li class="drw-Nav_Item"> 1957 <a href="/collections/sports-bras" class="drw-Nav_Link drw-Nav_Link-child" ><span>sports bras</span> 1958 </a> 1959 </li><li class="drw-Nav_Item"> 1960 <a href="/collections/active-shorts" class="drw-Nav_Link drw-Nav_Link-child" ><span>shorts</span> 1961 </a> 1962 </li><li class="drw-Nav_Item"> 1963 <a href="/collections/leggings" class="drw-Nav_Link drw-Nav_Link-child" ><span>leggings</span> 1964 </a> 1965 </li><li class="drw-Nav_Item"> 1966 <a href="/collections/active-tops" class="drw-Nav_Link drw-Nav_Link-child" ><span>tops</span> 1967 </a> 1968 </li><li class="drw-Nav_Item"> 1969 <a href="/collections/matching-sets" class="drw-Nav_Link drw-Nav_Link-child" ><span>active sets</span> 1970 </a> 1971 </li><li class="drw-Nav_Item"> 1972 <a href="/collections/dresses-skorts" class="drw-Nav_Link drw-Nav_Link-child" ><span>active dresses + skorts</span> 1973 </a> 1974 </li><li class="drw-Nav_Item"> 1975 <a href="/collections/one-pieces" class="drw-Nav_Link drw-Nav_Link-child" ><span>jumpsuits + unitards</span> 1976 </a> 1977 </li><li class="drw-Nav_Item"> 1978 <a href="/collections/shop-all" class="drw-Nav_Link drw-Nav_Link-child" ><span>shop all</span> 1979 </a> 1980 </li></ul> 1981 </li><li class="drw-Nav_Item drw-Nav_Item-group js-MobileNav_Item"> 1982 1983 <a href="/collections/shop-all" class="drw-Nav_Item-parent" >lifestyle</a> 1984 1985 <ul class="drw-Nav_Items"><li class="drw-Nav_Item"> 1986 <a href="/collections/knitwear" class="drw-Nav_Link drw-Nav_Link-child" ><span>knitwear</span> 1987 </a> 1988 </li><li class="drw-Nav_Item"> 1989 <a href="/collections/hoodies-and-sweatshirts" class="drw-Nav_Link drw-Nav_Link-child" ><span>hoodies + jumpers</span> 1990 </a> 1991 </li><li class="drw-Nav_Item"> 1992 <a href="/collections/trousers-joggers" class="drw-Nav_Link drw-Nav_Link-child" ><span>trousers + joggers</span> 1993 </a> 1994 </li><li class="drw-Nav_Item"> 1995 <a href="/collections/leisure-tops" class="drw-Nav_Link drw-Nav_Link-child" ><span>leisure tops</span> 1996 </a> 1997 </li><li class="drw-Nav_Item"> 1998 <a href="/collections/leisure-shorts" class="drw-Nav_Link drw-Nav_Link-child" ><span>leisure shorts</span> 1999 </a> 2000 </li><li class="drw-Nav_Item"> 2001 <a href="/collections/jackets" class="drw-Nav_Link drw-Nav_Link-child" ><span>jackets + coats</span> 2002 </a> 2003 </li><li class="drw-Nav_Item"> 2004 <a href="/collections/leisure-sets" class="drw-Nav_Link drw-Nav_Link-child" ><span>leisure sets</span> 2005 </a> 2006 </li><li class="drw-Nav_Item"> 2007 <a href="/collections/leisure-dresses-skorts" class="drw-Nav_Link drw-Nav_Link-child" ><span>dresses + skorts</span> 2008 </a> 2009 </li><li class="drw-Nav_Item"> 2010 <a href="/collections/accessories" class="drw-Nav_Link drw-Nav_Link-child" ><span>accessories </span> 2011 </a> 2012 </li></ul> 2013 </li><li class="drw-Nav_Item drw-Nav_Item-group js-MobileNav_Item"> 2014 2015 <a href="/collections/trending-now-pink" class="drw-Nav_Item-parent" >colour </a> 2016 2017 <ul class="drw-Nav_Items"><li class="drw-Nav_Item"> 2018 <a href="/collections/brown-spotlight" class="drw-Nav_Link drw-Nav_Link-child" ><span>brown</span> 2019 </a> 2020 </li><li class="drw-Nav_Item"> 2021 <a href="/collections/trending-now-pink" class="drw-Nav_Link drw-Nav_Link-child" ><span>pink </span> 2022 </a> 2023 </li><li class="drw-Nav_Item"> 2024 <a href="/collections/back-to-black" class="drw-Nav_Link drw-Nav_Link-child" ><span>black</span> 2025 </a> 2026 </li><li class="drw-Nav_Item"> 2027 <a href="/collections/spotlight-on-red" class="drw-Nav_Link drw-Nav_Link-child" ><span>red</span> 2028 </a> 2029 </li><li class="drw-Nav_Item"> 2030 <a href="/collections/a-grey-moment" class="drw-Nav_Link drw-Nav_Link-child" ><span>grey </span> 2031 </a> 2032 </li><li class="drw-Nav_Item"> 2033 <a href="/collections/all-yellow" class="drw-Nav_Link drw-Nav_Link-child" ><span>yellow</span> 2034 </a> 2035 </li><li class="drw-Nav_Item"> 2036 <a href="/collections/blue-in-motion" class="drw-Nav_Link drw-Nav_Link-child" ><span>blue</span> 2037 </a> 2038 </li></ul> 2039 </li><li class="drw-Nav_Item drw-Nav_Item-group js-MobileNav_Item"> 2040 2041 <a href="/collections/gym" class="drw-Nav_Item-parent" >movement</a> 2042 2043 <ul class="drw-Nav_Items"><li class="drw-Nav_Item"> 2044 <a href="/collections/gym" class="drw-Nav_Link drw-Nav_Link-child" ><span>gym</span> 2045 </a> 2046 </li><li class="drw-Nav_Item"> 2047 <a href="/collections/yoga-pilates" class="drw-Nav_Link drw-Nav_Link-child" ><span>yoga + pilates</span> 2048 </a> 2049 </li><li class="drw-Nav_Item"> 2050 <a href="/collections/padel-club" class="drw-Nav_Link drw-Nav_Link-child" ><span>racket sports </span> 2051 </a> 2052 </li><li class="drw-Nav_Item"> 2053 <a href="/collections/lounge" class="drw-Nav_Link drw-Nav_Link-child" ><span>lounge</span> 2054 </a> 2055 </li><li class="drw-Nav_Item"> 2056 <a href="/collections/bo-tee-ski" class="drw-Nav_Link drw-Nav_Link-child" ><span>ski</span> 2057 </a> 2058 </li></ul> 2059 </li><li class="drw-Nav_Item drw-Nav_Item-group js-MobileNav_Item"> 2060 2061 <a href="/collections/sweet-escape" class="drw-Nav_Item-parent" >collections</a> 2062 2063 <ul class="drw-Nav_Items"><li class="drw-Nav_Item"> 2064 <a href="/collections/softer-days" class="drw-Nav_Link drw-Nav_Link-child" ><span>Softer Days</span> 2065 </a> 2066 </li><li class="drw-Nav_Item"> 2067 <a href="/collections/cottage-core" class="drw-Nav_Link drw-Nav_Link-child" ><span>Cottage Core</span> 2068 </a> 2069 </li><li class="drw-Nav_Item"> 2070 <a href="/collections/buttercloud" class="drw-Nav_Link drw-Nav_Link-child" ><span>ButterCloudâ¢</span> 2071 </a> 2072 </li><li class="drw-Nav_Item"> 2073 <a href="/collections/camp-bo-tee" class="drw-Nav_Link drw-Nav_Link-child" ><span>Camp Bo+Tee</span> 2074 </a> 2075 </li><li class="drw-Nav_Item"> 2076 <a href="/collections/soft-sundae" class="drw-Nav_Link drw-Nav_Link-child" ><span>Soft Sundae Featuring Holly Jai</span> 2077 </a> 2078 </li><li class="drw-Nav_Item"> 2079 <a href="/collections/soft-active" class="drw-Nav_Link drw-Nav_Link-child" ><span>Soft Active</span> 2080 </a> 2081 </li></ul> 2082 </li></ul> 2083 </div> 2084 </li><li class="drw-Nav_Item"> 2085 <a href="/collections/buttercloud" 2086 class="drw-Nav_Link drw-Nav_Link-main" 2087 > 2088 soft wear 2089 </a> 2090 </li><li class="drw-Nav_Item js-MobileNav_Item"> 2091 <button 2092 class="drw-Nav_Link drw-Nav_Link-main js-MobileNav_Trigger" 2093 > 2094 ski
2095<svg width="6" height="11" viewBox="0 0 6 11" fill="none" xmlns="http://www.w3.org/2000/svg"> 2096 <path d="M1 1L5.5 5.5L1 10" stroke="black" stroke-width="0.5"/> 2097</svg> 2098 2099</button> 2100 2101 <div class="drw-Nav_Sub js-MobileNav_Drawer"><div class="drw-Nav_Header"><button class="drw-Nav_Back js-MobileNav_Back"><svg width="6" height="11" viewBox="0 0 6 11" fill="none" xmlns="http://www.w3.org/2000/svg"> 2102 <path d="M5.5 10L1 5.5L5.5 1" stroke="black" stroke-width="0.5"/> 2103</svg>Back</button> 2104 <span class="drw-Nav_SubTitle">ski</span> 2105 </div> 2106 2107 <ul class="drw-Nav_Items drw-Nav_Items-container"><li class="drw-Nav_Item drw-Nav_Item-group js-MobileNav_Item"> 2108 2109 <a href="/collections/bo-tee-ski" class="drw-Nav_Item-parent" >shop by</a> 2110 2111 <ul class="drw-Nav_Items"><li class="drw-Nav_Item"> 2112 <a href="/collections/bo-tee-ski" class="drw-Nav_Link drw-Nav_Link-child" ><span>all ski</span> 2113 </a> 2114 </li><li class="drw-Nav_Item"> 2115 <a href="/pages/fabric-guide-ski" class="drw-Nav_Link drw-Nav_Link-child" ><span>fabric guide</span> 2116 </a> 2117 </li><li class="drw-Nav_Item"> 2118 <a href="/pages/styled-on-the-slopes" class="drw-Nav_Link drw-Nav_Link-child" ><span>styled on the slopes</span> 2119 </a> 2120 </li><li class="drw-Nav_Item"> 2121 <a href="/collections/ski-sale" class="drw-Nav_Link drw-Nav_Link-child" ><span>ski sale </span> 2122 </a> 2123 </li></ul> 2124 </li><li class="drw-Nav_Item drw-Nav_Item-group js-MobileNav_Item"> 2125 2126 <a href="/collections/bo-tee-ski" class="drw-Nav_Item-parent" >shop by product</a> 2127 2128 <ul class="drw-Nav_Items"><li class="drw-Nav_Item"> 2129 <a href="/collections/ski-jackets" class="drw-Nav_Link drw-Nav_Link-child" ><span>jackets</span> 2130 </a> 2131 </li><li class="drw-Nav_Item"> 2132 <a href="/collections/womens-salopettes-ski-trousers" class="drw-Nav_Link drw-Nav_Link-child" ><span>suits + salopettes</span> 2133 </a> 2134 </li></ul> 2135 </li></ul> 2136 </div> 2137 </li><li class="drw-Nav_Item js-MobileNav_Item"> 2138 <button 2139 class="drw-Nav_Link drw-Nav_Link-main js-MobileNav_Trigger" 2140 > 2141 sale
2142<svg width="6" height="11" viewBox="0 0 6 11" fill="none" xmlns="http://www.w3.org/2000/svg"> 2143 <path d="M1 1L5.5 5.5L1 10" stroke="black" stroke-width="0.5"/> 2144</svg> 2145 2146</button> 2147 2148 <div class="drw-Nav_Sub js-MobileNav_Drawer"><div class="drw-Nav_Header"><button class="drw-Nav_Back js-MobileNav_Back"><svg width="6" height="11" viewBox="0 0 6 11" fill="none" xmlns="http://www.w3.org/2000/svg"> 2149 <path d="M5.5 10L1 5.5L5.5 1" stroke="black" stroke-width="0.5"/> 2150</svg>Back</button> 2151 <span class="drw-Nav_SubTitle">sale</span> 2152 </div> 2153 2154 <ul class="drw-Nav_Items drw-Nav_Items-container"><li class="drw-Nav_Item drw-Nav_Item-group js-MobileNav_Item"> 2155 2156 <a href="/collections/sale" class="drw-Nav_Item-parent" >shop by product</a> 2157 2158 <ul class="drw-Nav_Items"><li class="drw-Nav_Item"> 2159 <a href="/collections/sale-sports-bras" class="drw-Nav_Link drw-Nav_Link-child" ><span>sale sports bras</span> 2160 </a> 2161 </li><li class="drw-Nav_Item"> 2162 <a href="/collections/sale-tops" class="drw-Nav_Link drw-Nav_Link-child" ><span>sale tops</span> 2163 </a> 2164 </li><li class="drw-Nav_Item"> 2165 <a href="/collections/sale-leggings" class="drw-Nav_Link drw-Nav_Link-child" ><span>sale leggings</span> 2166 </a> 2167 </li><li class="drw-Nav_Item"> 2168 <a href="/collections/sale-activewear" class="drw-Nav_Link drw-Nav_Link-child" ><span>sale activewear</span> 2169 </a> 2170 </li><li class="drw-Nav_Item"> 2171 <a href="/collections/sale" class="drw-Nav_Link drw-Nav_Link-child" ><span>shop all</span> 2172 </a> 2173 </li></ul> 2174 </li></ul> 2175 </div> 2176 </li></ul><ul class="drw-DrawerNav_Items"><li class="drw-FooterNav_Item"> 2177 <a href="/account" class="drw-DrawerNav_Action"> 2178 Account 2179 </a> 2180 </li></ul><div class="drw-DrawerNav_Action drw-DrawerNav_Currency"> 2181 <span class="drw-DrawerNav_CurrencyLabel">Currency :</span><div class="crc-Picker"> 2182 <select class="crc-Picker_Select" is="currency-select" aria-label="Currency Selector" data-currency-select-el="select"><option value="?currency=AED">AED</option><option value="?currency=AUD">AUD</option><option value="?currency=CAD">CAD</option><option value="?currency=EUR">EUR</option><option value="?currency=GBP">GBP</option><option value="?currency=ILS">ILS</option><option value="?currency=JPY">JPY</option><option value="?currency=USD" selected>USD</option></select> 2183 2184 <div class="crc-Picker_Icon"><svg width="14" height="8" viewBox="0 0 14 8" fill="none" xmlns="http://www.w3.org/2000/svg"> 2185 <path d="M0.999878 1L6.99988 7L12.9999 1" stroke="currentColor" stroke-width="1.4"/> 2186</svg> 2187</div> 2188</div> 2189</div> 2190<ul class="drw-FooterSocialIcons_Items"><li class="drw-FooterSocialIcons_Item"> 2191 <a 2192 class="drw-FooterSocialIcons_Link" 2193 href="https://www.instagram.com/boandtee" 2194 target="_blank" 2195 ><img 2196 class="drw-FooterSocialIcons_Icon" 2197 src="//boandtee.com/cdn/shop/files/instagram.svg?v=1787739675&width=40" 2198 alt="" 2199 width="20" 2200 height="20" 2201 loading="lazy" 2202 aria-hidden="true" 2203 ><span class="util-ScreenReaderOnly">Bo and Tee on Instagram</span></a> 2204 </li><li class="drw-FooterSocialIcons_Item"> 2205 <a 2206 class="drw-FooterSocialIcons_Link" 2207 href="https://www.facebook.com/boandtee/" 2208 target="_blank" 2209 ><img 2210 class="drw-FooterSocialIcons_Icon" 2211 src="//boandtee.com/cdn/shop/files/facebook.svg?v=1787739732&width=40" 2212 alt="" 2213 width="20" 2214 height="20" 2215 loading="lazy" 2216 aria-hidden="true" 2217 ><span class="util-ScreenReaderOnly">Bo and Tee on Facebook</span></a> 2218 </li><li class="drw-FooterSocialIcons_Item"> 2219 <a 2220 class="drw-FooterSocialIcons_Link" 2221 href="https://www.tiktok.com/@boandtee " 2222 target="_blank" 2223 ><img 2224 class="drw-FooterSocialIcons_Icon" 2225 src="//boandtee.com/cdn/shop/files/tiktok.svg?v=1787739909&width=40" 2226 alt="" 2227 width="20" 2228 height="20" 2229 loading="lazy" 2230 aria-hidden="true" 2231 ><span class="util-ScreenReaderOnly">Bo and Tee on TikTok</span></a> 2232 </li><li class="drw-FooterSocialIcons_Item"> 2233 <a 2234 class="drw-FooterSocialIcons_Link" 2235 href="https://www.youtube.com/channel/UCht2wb2ZhKfR2z0TOO9fznQ/videos" 2236 target="_blank" 2237 ><img 2238 class="drw-FooterSocialIcons_Icon" 2239 src="//boandtee.com/cdn/shop/files/youtube.svg?v=1787740014&width=40" 2240 alt="" 2241 width="20" 2242 height="20" 2243 loading="lazy" 2244 aria-hidden="true" 2245 ><span class="util-ScreenReaderOnly">Bo and Tee on YouTube</span></a> 2246 </li></ul></nav> 2247 </div> 2248 </div> 2249</div>
2250<script type="application/ld+json"> 2251 { 2252 "@context": "http://schema.org", 2253 "@type": "Organization", 2254 "name": "Bo+Tee", 2255 "logo": "//boandtee.com/cdn/shopifycloud/storefront/assets/no-image-2048-a2addb12_200x.gif", 2256 "sameAs": ["https:\/\/www.instagram.com\/boandtee","https:\/\/www.facebook.com\/boandtee\/","https:\/\/www.tiktok.com\/@boandtee ","https:\/\/www.youtube.com\/channel\/UCht2wb2ZhKfR2z0TOO9fznQ\/videos"], 2257 "url": "https://boandtee.com " 2258 } 2259</script>
2259 2260</div><main role="main" id="MainContent"> 2261 <div id="shopify-section-template--29347213017471__main" class="shopify-section"><section class="crt-Cart"> 2262 <div class="crt-Cart_Inner lyt-Container"><header class="crt-Cart_Header"> 2263 <h1 class="crt-Cart_Title">Cart</h1> 2264 </header><div class="crt-Cart_Body"><p class="crt-Cart_Text">Your cart is currently empty.</p> 2265 <a class="crt-Cart_Link btn-Primary" href="/"> 2266 Continue shopping 2267 </a></div> 2268 </div> 2269</section> 2270 2271</div> 2272 </main><div id="shopify-section-footer" class="shopify-section ft-Footer_Container"><footer 2273 class="ft-Footer" 2274 aria-label="Footer" 2275 data-section-id="footer"> 2276 <div class="ft-Footer_Inner"> 2277 <div class="ft-Footer_Columns"><div class="ft-Footer_Column ft-Footer_Column-navigation"> 2278 <div class="ft-Footer_ColumnInner"><div class="ft-Footer_Section ft-Footer_Section-navigation"> 2279 <div class="ft-Navigation"> 2280 <div class="ft-Navigation_Columns"><div class="ft-Navigation_Column"> 2281 <details class="ft-Navigation_Details"> 2282 <summary class="ft-Navigation_Summary"> 2283 <h3 class="ft-Navigation_Title fz-14_20-headings"> 2284 Account 2285 </h3> 2286 </summary> 2287 </details> 2288 2289 <nav class="ft-Navigation_Links"> 2290 <ul class="ft-Navigation_LinksList"><li class="ft-Navigation_LinksListItem"> 2291 <a href="/apps/aftership" class="ft-Navigation_Link ft-Navigation_Link-orderTracking"> 2292 <span class="ft-Navigation_LinkIcon"><svg 2293 xmlns="http://www.w3.org/2000/svg" 2294 width="10" 2295 height="14" 2296 viewBox="0 0 10 14" 2297 fill="none" 2298> 2299 <path 2300 fill-rule="evenodd" 2301 clip-rule="evenodd" 2302 d="M9 5.0625C9 7.2715 5 12.5625 5 12.5625C5 12.5625 1 7.2715 1 5.0625C1 2.8535 2.791 1.0625 5 1.0625C7.209 1.0625 9 2.8535 9 5.0625Z" 2303 fill="#333333" 2304 stroke="#333333" 2305 stroke-linecap="round" 2306 stroke-linejoin="round" 2307 /> 2308 <path 2309 fill-rule="evenodd" 2310 clip-rule="evenodd" 2311 d="M7 5.0625C7 6.167 6.1045 7.0625 5 7.0625C3.8955 7.0625 3 6.167 3 5.0625C3 3.958 3.8955 3.0625 5 3.0625C6.1045 3.0625 7 3.958 7 5.0625Z" 2312 fill="#fff" 2313 /> 2314</svg> 2315</span> 2316 2317 <span class="ft-Navigation_LinkText">Track My Order</span> 2318 </a> 2319 </li><li class="ft-Navigation_LinksListItem"> 2320 <a class="ft-Navigation_Link fz-13_13" href="https://boandtee.com/account/login?return_url=%2Faccount"> 2321 <span class="ft-Navigation_LinkText">My Account 2322 </span> 2323 </a> 2324 </li><li class="ft-Navigation_LinksListItem"> 2325 <a class="ft-Navigation_Link fz-13_13" href="https://boandtee.com/pages/wishlist"> 2326 <span class="ft-Navigation_LinkText">Wishlist 2327 </span> 2328 </a> 2329 </li><li class="ft-Navigation_LinksListItem"> 2330 <a class="ft-Navigation_Link fz-13_13" href="/pages/sizing-guide"> 2331 <span class="ft-Navigation_LinkText">Size Guide 2332 </span> 2333 </a> 2334 </li><li class="ft-Navigation_LinksListItem"> 2335 <a class="ft-Navigation_Link fz-13_13" href="/products/gift-card"> 2336 <span class="ft-Navigation_LinkText">Gift Cards 2337 </span> 2338 </a> 2339 </li></ul> 2340 </nav> 2341 </div><div class="ft-Navigation_Column"> 2342 <details class="ft-Navigation_Details"> 2343 <summary class="ft-Navigation_Summary"> 2344 <h3 class="ft-Navigation_Title fz-14_20-headings"> 2345 About Bo+Tee 2346 </h3> 2347 </summary> 2348 </details> 2349 2350 <nav class="ft-Navigation_Links"> 2351 <ul class="ft-Navigation_LinksList"><li class="ft-Navigation_LinksListItem"> 2352 <a class="ft-Navigation_Link fz-13_13" href="/pages/sustainability">
2353 <span class="ft-Navigation_LinkText">Sustainability 2354 </span> 2355 </a> 2356 </li><li class="ft-Navigation_LinksListItem"> 2357 <a class="ft-Navigation_Link fz-13_13" href="/pages/online-clothing-bank"> 2358 <span class="ft-Navigation_LinkText">Online clothing bank 2359 </span> 2360 </a> 2361 </li><li class="ft-Navigation_LinksListItem"> 2362 <a class="ft-Navigation_Link fz-13_13" href="/pages/bo-tee-community"> 2363 <span class="ft-Navigation_LinkText">Community 2364 </span> 2365 </a> 2366 </li></ul> 2367 </nav> 2368 </div><div class="ft-Navigation_Column"> 2369 <details class="ft-Navigation_Details"> 2370 <summary class="ft-Navigation_Summary"> 2371 <h3 class="ft-Navigation_Title fz-14_20-headings"> 2372 Information 2373 </h3> 2374 </summary> 2375 </details> 2376 2377 <nav class="ft-Navigation_Links"> 2378 <ul class="ft-Navigation_LinksList"><li class="ft-Navigation_LinksListItem"> 2379 <a class="ft-Navigation_Link fz-13_13" href="/pages/help-and-contact"> 2380 <span class="ft-Navigation_LinkText">Contact Us 2381 </span> 2382 </a> 2383 </li><li class="ft-Navigation_LinksListItem"> 2384 <a class="ft-Navigation_Link fz-13_13" href="https://boandtee.zendesk.com/hc/en-gb"> 2385 <span class="ft-Navigation_LinkText">FAQ 2386 </span> 2387 </a> 2388 </li><li class="ft-Navigation_LinksListItem"> 2389 <a class="ft-Navigation_Link fz-13_13" href="/pages/delivery"> 2390 <span class="ft-Navigation_LinkText">Delivery 2391 </span> 2392 </a> 2393 </li><li class="ft-Navigation_LinksListItem"> 2394 <a class="ft-Navigation_Link fz-13_13" href="/pages/returns-information"> 2395 <span class="ft-Navigation_LinkText">Returns 2396 </span> 2397 </a> 2398 </li><li class="ft-Navigation_LinksListItem"> 2399 <a class="ft-Navigation_Link fz-13_13" href="/pages/our-policies"> 2400 <span class="ft-Navigation_LinkText">Our Policies 2401 </span> 2402 </a> 2403 </li><li class="ft-Navigation_LinksListItem"> 2404 <a class="ft-Navigation_Link fz-13_13" href="/pages/klarna"> 2405 <span class="ft-Navigation_LinkText">Klarna FAQ 2406 </span> 2407 </a> 2408 </li></ul> 2409 </nav> 2410 </div></div> 2411 </div> 2412 </div></div> 2413 </div><div class="ft-Footer_Column ft-Footer_Column-socials"> 2414 <div class="ft-Footer_ColumnInner"> 2415<ul class="ft-Socials"><li class="ft-Socials_Item"> 2416 <a 2417 class="ft-Socials_Link" 2418 href="https://www.instagram.com/boandtee" 2419 target="_blank" 2420 ><img 2421 class="ft-Socials_Icon" 2422 src="//boandtee.com/cdn/shop/files/instagram.svg?v=1787739675&width=40" 2423 alt="" 2424 width="20" 2425 height="20" 2426 loading="lazy" 2427 aria-hidden="true" 2428 ><span class="util-ScreenReaderOnly">Bo and Tee on Instagram</span></a> 2429 </li><li class="ft-Socials_Item"> 2430 <a 2431 class="ft-Socials_Link" 2432 href="https://www.facebook.com/boandtee/" 2433 target="_blank" 2434 ><img 2435 class="ft-Socials_Icon" 2436 src="//boandtee.com/cdn/shop/files/facebook.svg?v=1787739732&width=40" 2437 alt="" 2438 width="20" 2439 height="20" 2440 loading="lazy" 2441 aria-hidden="true" 2442 ><span class="util-ScreenReaderOnly">Bo and Tee on Facebook</span></a> 2443 </li><li class="ft-Socials_Item"> 2444 <a 2445 class="ft-Socials_Link" 2446 href="https://www.tiktok.com/@boandtee " 2447 target="_blank" 2448 ><img 2449 class="ft-Socials_Icon" 2450 src="//boandtee.com/cdn/shop/files/tiktok.svg?v=1787739909&width=40" 2451 alt="" 2452 width="20" 2453 height="20" 2454 loading="lazy" 2455 aria-hidden="true" 2456 ><span class="util-ScreenReaderOnly">Bo and Tee on TikTok</span></a> 2457 </li><li class="ft-Socials_Item"> 2458 <a 2459 class="ft-Socials_Link" 2460 href="https://www.youtube.com/channel/UCht2wb2ZhKfR2z0TOO9fznQ/videos" 2461 target="_blank" 2462 ><img 2463 class="ft-Socials_Icon" 2464 src="//boandtee.com/cdn/shop/files/youtube.svg?v=1787740014&width=40" 2465 alt="" 2466 width="20" 2467 height="20" 2468 loading="lazy" 2469 aria-hidden="true" 2470 ><span class="util-ScreenReaderOnly">Bo and Tee on YouTube</span></a> 2471 </li></ul></div> 2472 </div><div class="ft-Footer_Column ft-Footer_Column-newsletter"> 2473 <div class="ft-Footer_ColumnInner"><div class="ft-Footer_Section ft-Footer_Section-newsletter"> 2474 <div class="ft-Newsletter"><h2 class="ft-Newsletter_Header"> 2475 join the club 2476 </h2><div class="ft-Newsletter_Form">
2476<script src="//boandtee.com/cdn/shop/t/1041/assets/custom-newsletter-form.js?v=171736396608765985131778661985" type="module"></script>
2476 2477 2478<div class="nws-Newsletter"> 2479 <div class="nws-Newsletter_Inner"> 2480 <form is="custom-newsletter-form" data-source="footer" data-store="boandtee.com" data-success-message="You're signed up"> 2481 <div class="nws-Newsletter_Fields"> 2482 2483 <label class="frm-Form_Label util-ScreenReaderOnly" for="email"> 2484 Email address 2485 </label> 2486 <input type="email" 2487 name="email" 2488 class="nws-Newsletter_Input frm-Form_Input" 2489 placeholder="Email address" 2490 data-custom-newsletter-form-el="email" 2491 autocorrect="off" 2492 autocapitalize="off" 2493 data-disallowed-domains="google.co,gmail.con,gmail.co,gmai.com,icloud.con,gmsil.com,gmial.com,hotnail.co.uk,iclould.com,gmail.vom,hotmai.com,hotnail.com,icooud.com,gmaol.com" 2494 value="" 2495 required 2496 /> 2497 2498 <button type="submit" 2499 class="btn-Button btn-Button-primary nws-Newsletter_Button" 2500 name="submit"> 2501 Subscribe 2502 </button> 2503 </div> 2504 </form> 2505 </div> 2506</div> 2507</div> 2508 </div> 2509 </div><div class="ft-Footer_Section ft-Footer_Section-appsTrustpilot"><div class="ft-Footer_Section ft-Footer_Section-apps"> 2510 <div class="ft-Apps"> 2511 <a 2512 class="btn-Primary ft-Apps_Button" 2513 target="_blank" 2514 href="https://h5py9bk7.tapc.art/">Download the Bo+Tee App</a> 2515 2516 <p class="ft-Apps_Text">for exclusive access to every collection</p> 2517 </div> 2518 </div><div class="ft-Footer_Section ft-Footer_Section-trustpilot"> 2519 <!-- TrustBox widget - Micro Combo --> 2520 <div 2521 class="trustpilot-widget" 2522 data-locale="en-GB" 2523 data-template-id="5419b732fbfb950b10de65e5" 2524 data-businessunit-id="5e5ab77009f40400014b1083" 2525 data-style-height="24px" 2526 data-style-width="100%"> 2527 <a 2528 href="https://uk.trustpilot.com/review/boandtee.com" 2529 target="_blank" 2530 rel="noopener">Trustpilot</a> 2531 </div> 2532 <!-- End TrustBox widget --> 2533 2534 <!-- TrustBox widget - Micro Button --> 2535 <div 2536 class="trustpilot-widget" 2537 data-locale="en-GB" 2538 data-template-id="5419b757fa0340045cd0c938" 2539 data-businessunit-id="5e5ab77009f40400014b1083" 2540 data-style-height="25px" 2541 data-style-width="100%"> 2542 <a 2543 href="https://uk.trustpilot.com/review/boandtee.com" 2544 target="_blank" 2545 rel="noopener">Trustpilot</a> 2546 </div> 2547 <!-- End TrustBox widget --> 2548 </div></div> 2549 </div> 2550 </div></div> 2551 2552 <div class="ft-Footer_Logo"> 2553 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 595.51 93.21"><defs><style>.cls-1{fill-rule:evenodd}</style></defs><path d="M145.9 93.21c-25.66 0-46.54-20.88-46.54-46.54S120.23 0 145.9 0s46.66 20.93 46.66 46.66S171.63 93.2 145.9 93.2Zm0-72.58c-14.04 0-25.91 11.92-25.91 26.03s11.87 25.91 25.91 25.91 25.66-11.62 25.66-25.91-11.51-26.03-25.66-26.03ZM358.23 91.6V19.77h-28.02V1.6h77.16v18.29H379.6V91.6h-21.37zM0 91.66V1.54h42.47c19.61 0 29.14 7.47 29.14 22.84 0 8.24-3.33 14.07-10.43 18.17 9.46 3.56 14.63 11.48 14.63 22.55 0 8.59-3.46 15.61-10 20.3-5.62 4.03-13.47 6.25-22.1 6.25H0Zm41.11-17.05c8.96 0 13.32-3.47 13.32-10.6 0-7.8-4.24-11.59-12.95-11.59H21.37v22.19h19.74ZM40 37.21c4.95 0 10.85-1.65 10.85-9.49 0-6.22-3.92-9.12-12.33-9.12H21.37v18.62H40ZM525.02 91.79V1.42h66.29v18.29h-45.54v17.87h40.24v19.16h-40.24V73.5h49.74v18.29h-70.49zM430.9 91.79V1.42h66.3v18.29h-45.54v17.87h40.23v19.16h-40.23V73.5h49.74v18.29h-70.5z" class="cls-1"/><path d="M300.34 55.4h-25.58v24.99H255.8V55.4h-25.43V37.47h25.43v-25h18.96v24.99h25.58v17.93Z"/></svg> 2554 2555 </div> 2556 2557 <div class="ft-Footer_Footer"> 2558 <p class="ft-Footer_Copyright"> 2559 ©2026 Bo+Tee. All Rights Reserved. 2560 </p></div> 2561 </div> 2562 </footer> 2563</div> 2564 2565<div class="drw-Drawers" data-module="drawers">
2566 <div class="drw-Drawers_Backdrop js-Drawers_Backdrop"></div> 2567 2568 <div class="drw-Drawer drw-Drawer-fromLeft" data-module-drawers-drawer="menu"> 2569 <div class="drw-Drawer_Inner"> 2570 <div class="drw-Drawer_Container"> 2571 <div class="drw-Drawer_Nav"> 2572 <nav class="drw-Nav"> 2573 <ul class="drw-Nav_Items"><li class="drw-Nav_Item"> 2574 <div class='drw-Accordion' data-module='navigation-accordion' data-module-class='js-Accordion'> 2575 <ul class="drw-Accordion_Items js-Accordion" aria-expanded="false"> 2576 <li class="drw-Accordion_Item"> 2577 <div class='drw-Accordion_Header js-Accordion_Header'> 2578 <span class='drw-Accordion_Title'>Best Sellers</span> 2579 <div class='drw-Accordion_IconHolder'> 2580 <span class="drw-Accordion_Icon drw-Accordion_Icon-plus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2581 <path d="M14.2883 6.396l-4.335.031L11.7663 2h-3.571l-1.844 4.4-4.061-.031s-1.312 3.123-1.29 3.144h4.05l-1.7 4.062h3.571l1.7-4.062 4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2582</svg></span> 2583 <span class="drw-Accordion_Icon drw-Accordion_Icon-minus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2584 <path d="M14.2883 6.027l-4.335.031-3.602-.027L2.2903 6s-1.312 3.123-1.29 3.144h7.621l4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2585</svg></span> 2586 </div> 2587 </div><div class="drw-Accordion_Details"> 2588 <a 2589 href="/collections/bestsellers" 2590 class="drw-SubNav_Link" 2591 2592 > 2593 View All 2594 </a> 2595 </div></li> 2596 </ul> 2597 </div> 2598 </li><li class="drw-Nav_Item"> 2599 <div class='drw-Accordion' data-module='navigation-accordion' data-module-class='js-Accordion'> 2600 <ul class="drw-Accordion_Items js-Accordion" aria-expanded="false"> 2601 <li class="drw-Accordion_Item"> 2602 <div class='drw-Accordion_Header js-Accordion_Header'> 2603 <span class='drw-Accordion_Title'>Tops</span> 2604 <div class='drw-Accordion_IconHolder'> 2605 <span class="drw-Accordion_Icon drw-Accordion_Icon-plus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2606 <path d="M14.2883 6.396l-4.335.031L11.7663 2h-3.571l-1.844 4.4-4.061-.031s-1.312 3.123-1.29 3.144h4.05l-1.7 4.062h3.571l1.7-4.062 4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2607</svg></span> 2608 <span class="drw-Accordion_Icon drw-Accordion_Icon-minus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2609 <path d="M14.2883 6.027l-4.335.031-3.602-.027L2.2903 6s-1.312 3.123-1.29 3.144h7.621l4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2610</svg></span> 2611 </div> 2612 </div><div class="drw-Accordion_Details"> 2613 <a 2614 href="/collections/active-tops" 2615 class="drw-SubNav_Link" 2616 2617 > 2618 View all 2619 </a> 2620 </div><div class="drw-Accordion_Details"> 2621 <a 2622 href="/collections/sports-bras" 2623 class="drw-SubNav_Link" 2624 2625 > 2626 Sports Bras 2627 </a> 2628 </div><div class="drw-Accordion_Details"> 2629 <a 2630 href="/collections/long-sleeve-tops" 2631 class="drw-SubNav_Link" 2632 2633 > 2634 Long Sleeve Tops 2635 </a> 2636 </div><div class="drw-Accordion_Details"> 2637 <a 2638 href="/collections/oversized-tops" 2639 class="drw-SubNav_Link" 2640 2641 > 2642 Oversized Tops 2643 </a> 2644 </div></li> 2645 </ul> 2646 </div> 2647 </li><li class="drw-Nav_Item"> 2648 <div class='drw-Accordion' data-module='navigation-accordion' data-module-class='js-Accordion'> 2649 <ul class="drw-Accordion_Items js-Accordion" aria-expanded="false"> 2650 <li class="drw-Accordion_Item"> 2651 <div class='drw-Accordion_Header js-Accordion_Header'>
2652 <span class='drw-Accordion_Title'>Bottoms</span> 2653 <div class='drw-Accordion_IconHolder'> 2654 <span class="drw-Accordion_Icon drw-Accordion_Icon-plus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2655 <path d="M14.2883 6.396l-4.335.031L11.7663 2h-3.571l-1.844 4.4-4.061-.031s-1.312 3.123-1.29 3.144h4.05l-1.7 4.062h3.571l1.7-4.062 4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2656</svg></span> 2657 <span class="drw-Accordion_Icon drw-Accordion_Icon-minus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2658 <path d="M14.2883 6.027l-4.335.031-3.602-.027L2.2903 6s-1.312 3.123-1.29 3.144h7.621l4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2659</svg></span> 2660 </div> 2661 </div><div class="drw-Accordion_Details"> 2662 <a 2663 href="/collections/bottoms" 2664 class="drw-SubNav_Link" 2665 2666 > 2667 View All 2668 </a> 2669 </div><div class="drw-Accordion_Details"> 2670 <a 2671 href="/collections/gym-leggings" 2672 class="drw-SubNav_Link" 2673 2674 > 2675 Leggings 2676 </a> 2677 </div><div class="drw-Accordion_Details"> 2678 <a 2679 href="/collections/one-pieces" 2680 class="drw-SubNav_Link" 2681 2682 > 2683 Unitards 2684 </a> 2685 </div></li> 2686 </ul> 2687 </div> 2688 </li><li class="drw-Nav_Item"> 2689 <div class='drw-Accordion' data-module='navigation-accordion' data-module-class='js-Accordion'> 2690 <ul class="drw-Accordion_Items js-Accordion" aria-expanded="false"> 2691 <li class="drw-Accordion_Item"> 2692 <div class='drw-Accordion_Header js-Accordion_Header'> 2693 <span class='drw-Accordion_Title'>Matching Sets</span> 2694 <div class='drw-Accordion_IconHolder'> 2695 <span class="drw-Accordion_Icon drw-Accordion_Icon-plus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2696 <path d="M14.2883 6.396l-4.335.031L11.7663 2h-3.571l-1.844 4.4-4.061-.031s-1.312 3.123-1.29 3.144h4.05l-1.7 4.062h3.571l1.7-4.062 4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2697</svg></span> 2698 <span class="drw-Accordion_Icon drw-Accordion_Icon-minus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2699 <path d="M14.2883 6.027l-4.335.031-3.602-.027L2.2903 6s-1.312 3.123-1.29 3.144h7.621l4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2700</svg></span> 2701 </div> 2702 </div><div class="drw-Accordion_Details"> 2703 <a 2704 href="/collections/matching-sets" 2705 class="drw-SubNav_Link" 2706 2707 > 2708 View All 2709 </a> 2710 </div></li> 2711 </ul> 2712 </div> 2713 </li><li class="drw-Nav_Item"> 2714 <div class='drw-Accordion' data-module='navigation-accordion' data-module-class='js-Accordion'> 2715 <ul class="drw-Accordion_Items js-Accordion" aria-expanded="false"> 2716 <li class="drw-Accordion_Item"> 2717 <div class='drw-Accordion_Header js-Accordion_Header'> 2718 <span class='drw-Accordion_Title'>Athleisure</span> 2719 <div class='drw-Accordion_IconHolder'>
2720 <span class="drw-Accordion_Icon drw-Accordion_Icon-plus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2721 <path d="M14.2883 6.396l-4.335.031L11.7663 2h-3.571l-1.844 4.4-4.061-.031s-1.312 3.123-1.29 3.144h4.05l-1.7 4.062h3.571l1.7-4.062 4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2722</svg></span> 2723 <span class="drw-Accordion_Icon drw-Accordion_Icon-minus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2724 <path d="M14.2883 6.027l-4.335.031-3.602-.027L2.2903 6s-1.312 3.123-1.29 3.144h7.621l4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2725</svg></span> 2726 </div> 2727 </div><div class="drw-Accordion_Details"> 2728 <a 2729 href="/collections/loungewear" 2730 class="drw-SubNav_Link" 2731 2732 > 2733 View All 2734 </a> 2735 </div><div class="drw-Accordion_Details"> 2736 <a 2737 href="/collections/hoodies-and-sweatshirts" 2738 class="drw-SubNav_Link" 2739 2740 > 2741 Hoodies & Sweatshirts 2742 </a> 2743 </div><div class="drw-Accordion_Details"> 2744 <a 2745 href="/collections/joggers" 2746 class="drw-SubNav_Link" 2747 2748 > 2749 Joggers 2750 </a> 2751 </div><div class="drw-Accordion_Details"> 2752 <a 2753 href="/collections/tracksuits" 2754 class="drw-SubNav_Link" 2755 2756 > 2757 Tracksuits 2758 </a> 2759 </div><div class="drw-Accordion_Details"> 2760 <a 2761 href="/collections/t-shirts" 2762 class="drw-SubNav_Link" 2763 2764 > 2765 T-Shirts 2766 </a> 2767 </div><div class="drw-Accordion_Details"> 2768 <a 2769 href="/collections/knitwear" 2770 class="drw-SubNav_Link" 2771 2772 > 2773 Knitwear 2774 </a> 2775 </div></li> 2776 </ul> 2777 </div> 2778 </li><li class="drw-Nav_Item"> 2779 <div class='drw-Accordion' data-module='navigation-accordion' data-module-class='js-Accordion'> 2780 <ul class="drw-Accordion_Items js-Accordion" aria-expanded="false"> 2781 <li class="drw-Accordion_Item"> 2782 <div class='drw-Accordion_Header js-Accordion_Header'> 2783 <span class='drw-Accordion_Title'>Shop By Collection</span> 2784 <div class='drw-Accordion_IconHolder'> 2785 <span class="drw-Accordion_Icon drw-Accordion_Icon-plus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2786 <path d="M14.2883 6.396l-4.335.031L11.7663 2h-3.571l-1.844 4.4-4.061-.031s-1.312 3.123-1.29 3.144h4.05l-1.7 4.062h3.571l1.7-4.062 4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2787</svg></span> 2788 <span class="drw-Accordion_Icon drw-Accordion_Icon-minus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2789 <path d="M14.2883 6.027l-4.335.031-3.602-.027L2.2903 6s-1.312 3.123-1.29 3.144h7.621l4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2790</svg></span> 2791 </div> 2792 </div><div class="drw-Accordion_Details"> 2793 <a 2794 href="/collections/super-sculpt-brights-edition" 2795 class="drw-SubNav_Link" 2796 2797 > 2798 Super Sculpt: Brights Edition 2799 </a> 2800 </div><div class="drw-Accordion_Details"> 2801 <a 2802 href="/collections/super-sculpt" 2803 class="drw-SubNav_Link" 2804 2805 > 2806 Super Sculpt 2807 </a> 2808 </div></li> 2809 </ul> 2810 </div> 2811 </li><li class="drw-Nav_Item"> 2812 <div class='drw-Accordion' data-module='navigation-accordion' data-module-class='js-Accordion'> 2813 <ul class="drw-Accordion_Items js-Accordion" aria-expanded="false"> 2814 <li class="drw-Accordion_Item"> 2815 <div class='drw-Accordion_Header js-Accordion_Header'>
2816 <span class='drw-Accordion_Title'>Sale</span> 2817 <div class='drw-Accordion_IconHolder'> 2818 <span class="drw-Accordion_Icon drw-Accordion_Icon-plus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2819 <path d="M14.2883 6.396l-4.335.031L11.7663 2h-3.571l-1.844 4.4-4.061-.031s-1.312 3.123-1.29 3.144h4.05l-1.7 4.062h3.571l1.7-4.062 4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2820</svg></span> 2821 <span class="drw-Accordion_Icon drw-Accordion_Icon-minus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2822 <path d="M14.2883 6.027l-4.335.031-3.602-.027L2.2903 6s-1.312 3.123-1.29 3.144h7.621l4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2823</svg></span> 2824 </div> 2825 </div><div class="drw-Accordion_Details"> 2826 <a 2827 href="/collections/the-birthday-archive-sale-up-to-70-off" 2828 class="drw-SubNav_Link" 2829 2830 > 2831 The Birthday Archive Sale - Up To 70% Off 2832 </a> 2833 </div><div class="drw-Accordion_Details"> 2834 <a 2835 href="/collections/the-archive-birthday-sale-sports-bras" 2836 class="drw-SubNav_Link" 2837 2838 > 2839 Sports Bras 2840 </a> 2841 </div><div class="drw-Accordion_Details"> 2842 <a 2843 href="/collections/the-birthday-archive-sale-hoodies" 2844 class="drw-SubNav_Link" 2845 2846 > 2847 Hoodies 2848 </a> 2849 </div><div class="drw-Accordion_Details"> 2850 <a 2851 href="/collections/the-birthday-archive-sale-leggings" 2852 class="drw-SubNav_Link" 2853 2854 > 2855 Leggings 2856 </a> 2857 </div><div class="drw-Accordion_Details"> 2858 <a 2859 href="/collections/the-birthday-archive-sale-shorts" 2860 class="drw-SubNav_Link" 2861 2862 > 2863 Shorts 2864 </a> 2865 </div><div class="drw-Accordion_Details"> 2866 <a 2867 href="/collections/the-birthday-archive-sale-matching-sets" 2868 class="drw-SubNav_Link" 2869 2870 > 2871 Matching Sets 2872 </a> 2873 </div></li> 2874 </ul> 2875 </div> 2876 </li></ul> 2877 2878 <ul class="drw-Nav_Items drw-Nav_Items-secondary"> 2879 <li class="drw-Nav_Item"><div class="drw-Accordion"> 2880 <ul class="drw-Accordion_Items" aria-expanded="false"> 2881 <li class="drw-Accordion_Item"><form method="post" action="/cart/update" id="currency_form" accept-charset="UTF-8" class="shopify-currency-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="currency" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="return_to" value="/cart" /><select class="drw-Accordion_Currency" onchange="this.form.submit()" name="currency"><option value="AED">AED د.Ø¥</option><option value="AUD">AUD $</option><option value="CAD">CAD $</option><option value="EUR">EUR â¬</option><option value="GBP">GBP £</option><option value="ILS">ILS âª</option><option value="JPY">JPY Â¥</option><option value="USD" selected="selected">USD $</option></select> 2882</form></li> 2883 </ul> 2884 </div> 2885 </li><li class="drw-Nav_Item"> 2886 <div class="drw-Accordion" data-module="navigation-accordion" data-module-class="js-Accordion"> 2887 <ul class="drw-Accordion_Items js-Accordion" aria-expanded="false"> 2888 <li class="drw-Accordion_Item"> 2889 <div class="drw-Accordion_Header js-Accordion_Header">
2890 <span class="drw-Accordion_Title">Help</span> 2891 <div class="drw-Accordion_IconHolder"> 2892 <span class="drw-Accordion_Icon drw-Accordion_Icon-plus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2893 <path d="M14.2883 6.396l-4.335.031L11.7663 2h-3.571l-1.844 4.4-4.061-.031s-1.312 3.123-1.29 3.144h4.05l-1.7 4.062h3.571l1.7-4.062 4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2894</svg></span> 2895 <span class="drw-Accordion_Icon drw-Accordion_Icon-minus"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 2896 <path d="M14.2883 6.027l-4.335.031-3.602-.027L2.2903 6s-1.312 3.123-1.29 3.144h7.621l4.382.031 1.285-3.148z" fill-rule="nonzero"/> 2897</svg></span> 2898 </div> 2899 </div><div class="drw-Accordion_Details"> 2900 <a 2901 href="/pages/useful-information" 2902 class="drw-SubNav_Link" 2903 2904 > 2905 FAQ 2906 </a> 2907 </div><div class="drw-Accordion_Details"> 2908 <a 2909 href="/pages/delivery-information" 2910 class="drw-SubNav_Link" 2911 2912 > 2913 Delivery Information 2914 </a> 2915 </div><div class="drw-Accordion_Details"> 2916 <a 2917 href="/pages/returns" 2918 class="drw-SubNav_Link" 2919 2920 > 2921 Returns & Exchanges 2922 </a> 2923 </div><div class="drw-Accordion_Details"> 2924 <a 2925 href="/pages/size-guide" 2926 class="drw-SubNav_Link" 2927 2928 > 2929 Sizing Guide 2930 </a> 2931 </div><div class="drw-Accordion_Details"> 2932 <a 2933 href="/pages/contact" 2934 class="drw-SubNav_Link" 2935 2936 > 2937 Contact Us 2938 </a> 2939 </div><div class="drw-Accordion_Details"> 2940 <a 2941 href="/pages/unidays" 2942 class="drw-SubNav_Link" 2943 2944 > 2945 UNIDAYS 2946 </a> 2947 </div><div class="drw-Accordion_Details"> 2948 <a 2949 href="/pages/studentbeans" 2950 class="drw-SubNav_Link" 2951 2952 > 2953 StudentBeans 2954 </a> 2955 </div></li> 2956 </ul> 2957 </div> 2958 </li><li class="drw-Nav_Item"> 2959 <a 2960 href="/" 2961 class="drw-Nav_Link" 2962 2963 > 2964 Track my order 2965 </a> 2966 </li><li class="drw-Nav_Item"> 2967 <a 2968 href="/account" 2969 class="drw-Nav_Link" 2970 2971 > 2972 Account 2973 </a> 2974 </li></ul> 2975 </nav> 2976 </div> 2977 </div> 2978 </div> 2979 </div><div class="drw-Drawer drw-Drawer-fromRight" data-module-drawers-drawer="cart"> 2980 <div class="drw-Drawer_Inner"> 2981 <div 2982 data-module="push-cart" 2983 data-action="/checkout" 2984 data-submit-to="checkout" 2985 data-max-quantity="15" 2986 data-enable-delivery-message="false" 2987 data-delivery-first-tier-minimum="" 2988 data-delivery-first-tier-maximum="" 2989 data-delivery-first-tier-message="" 2990 data-delivery-second-tier-minimum="" 2991 data-delivery-second-tier-maximum="" 2992 data-delivery-second-tier-message="" 2993 data-translation-title="Your Cart" 2994 data-translation-subtotal="Subtotal" 2995 data-translation-discount="Discount" 2996 data-translation-delivery="Delivery" 2997 data-translation-calculatedatcheckout="Calculated at checkout" 2998 data-translation-checkout="Proceed to Checkout" 2999 data-translation-continueshopping="Continue Shopping" 3000 data-translation-remove="Remove" 3001 data-translation-removeall="Remove all" 3002 data-translation-footer-title="" 3003 data-translation-footer-text="" 3004 data-translation-close-text="Close Cart" 3005 data-translation-usd-maximum="Translation missing: en.cart.drawer.usd_maximum" 3006 data-translation-usd-message="Translation missing: en.cart.drawer.usd_message" 3007 data-translation-dynamic-checkout="Faster checkout options" 3008 data-translation-pairs-with-title="Complete the Set" 3009 data-translation-add-to-bag="Add To Bag" 3010 data-gift-wrap-enabled="false" 3011 data-gift-wrap-id="" 3012 data-gift-wrap-add-text="Gift wrap your order for <strong>£3</strong>" 3013 data-gift-wrap-remove-text="Remove gift wrap" 3014 data-gift-wrap-max-amount="4" 3015 data-translation-emptycart="You have no items in your cart", 3016 > 3017 </div> 3018 </div> 3019 </div> 3020</div> 3021 3022
3023<script id="back-in-stock-helper"> 3024 var _BISConfig = _BISConfig || {}; 3025 3026 3027</script>
3027</div> 3028<div class="nosto_page_type" style="display:none">cart</div> 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040<div class="nosto_cart" style="display:none"> 3041 3042 3043 3044</div> 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068<div class="nosto_variation" style="display: none;">USD</div> 3069 3070 3071 3072<!-- Begin Shopify-Clearpay JavaScript Snippet (v1.0.10) --> 3073 3074<div class="prd-Card_QuickAdd prd-Card_QuickAdd-mobile" data-product-card-external-el="quickAddContainer" aria-hidden="true"> 3075 <div class="prd-Card_QuickAddInner" data-product-card-external-el="quickAddInner"> 3076 <div class="prd-Card_MobileStickyForm prd-Card_MobileStickyForm-skeleton"> 3077 <span class="prd-Card_MobileStickyForm_OffersTitle prd-Card_MobileStickyForm_OffersTitle-skeleton"><svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"> 3078 <path d="M14.2883 6.396l-4.335.031L11.7663 2h-3.571l-1.844 4.4-4.061-.031s-1.312 3.123-1.29 3.144h4.05l-1.7 4.062h3.571l1.7-4.062 4.382.031 1.285-3.148z" fill-rule="nonzero"/> 3079</svg>Quick Add</span> 3080 3081 <div class="prd-Card_MobileStickyForm_Options prd-Card_MobileStickyForm_Options-skeleton"> 3082 3083 <div class="prd-Card_MobileStickyForm_Option prd-Card_MobileStickyForm_Option-skeleton"></div> 3084 3085 <div class="prd-Card_MobileStickyForm_Option prd-Card_MobileStickyForm_Option-skeleton"></div> 3086 3087 <div class="prd-Card_MobileStickyForm_Option prd-Card_MobileStickyForm_Option-skeleton"></div> 3088 3089 <div class="prd-Card_MobileStickyForm_Option prd-Card_MobileStickyForm_Option-skeleton"></div> 3090 3091 <div class="prd-Card_MobileStickyForm_Option prd-Card_MobileStickyForm_Option-skeleton"></div> 3092 3093 <div class="prd-Card_MobileStickyForm_Option prd-Card_MobileStickyForm_Option-skeleton"></div> 3094 3095 </div> 3096</div> 3097 3098 3099 </div> 3100 3101 <div class="prd-Card_QuickAddOverlay prd-Card_QuickAddOverlay-mobile" data-product-card-external-el="quickAddOverlay"></div> 3102 </div> 3103 3104 3105<link href="//boandtee.com/cdn/shop/t/1041/assets/redirect-modal.css?v=144009716741810833311784107664" rel="stylesheet" type="text/css" media="all" />
3106<script src="//boandtee.com/cdn/shop/t/1041/assets/redirect-modal.js?v=130298892837652409131784107664" defer="defer"></script>
3106 3107 3108<redirect-modal class="mod-Redirect"> 3109
3109<script data-redirect-modal-el="markets"> 3110 { 3111 "JP": "jp.boandtee.com", 3112 "KR": "kr.boandtee.com", 3113 "HK": "hk.boandtee.com", 3114 "SG": "sg.boandtee.com", 3115 "TW": "tw.boandtee.com", 3116 "TH": "th.boandtee.com" 3117 } 3118 </script>
3118 3119 3120 <dialog class="mod-Redirect_Dialog"> 3121 <div class="mod-Redirect_Modal"> 3122 <h2 class="mod-Redirect_Heading">We've Got A Site For Your Region</h2> 3123 3124 <div class="mod-Redirect_Description"><p>Switch to your local Bo+Tee site for pricing in your local currency, local shipping options and a seamless checkout.</p></div> 3125 3126 <a 3127 href="#" 3128 type="button" 3129 class="btn-Primary mod-Redirect_Confirm" 3130 data-redirect-modal-el="button" 3131 >SHOP NOW</a> 3132 </div> 3133 </dialog> 3134</redirect-modal> 3135 3136 <div id="shopify-section-search-dropdown" class="shopify-section"><search-dropdown data-header-search-external-el="dropdown"> 3137 <dialog class="hd-SearchDropdown" data-search-dropdown-el="dialog"> 3138 <div class="hd-SearchDropdown_Inner"> 3139 <button 3140 class="hd-SearchDropdown_Close" 3141 type="button" 3142 data-search-dropdown-el="close"> 3143 <svg 3144 xmlns="http://www.w3.org/2000/svg" 3145 fill="none" 3146 viewBox="6.36 6.36 14.14 14.14" 3147 aria-hidden="true"> 3148 <rect 3149 x="7.07031" 3150 y="6.36396" 3151 width="19" 3152 height="1" 3153 transform="rotate(45 7.07031 6.36396)" 3154 fill="currentColor"></rect> 3155 <rect 3156 x="20.5059" 3157 y="7.07107" 3158 width="19" 3159 height="1" 3160 transform="rotate(135 20.5059 7.07107)" 3161 fill="currentColor"></rect> 3162 </svg> 3163 <span class="util-ScreenReaderOnly">Close</span> 3164 </button> 3165 3166 3167 <div class="hd-SearchDropdown_InitialView" data-search-dropdown-el="initialView"> 3168 <div class="hd-SearchDropdown_InitialViewInner"> 3169 <div class="hd-SearchDropdown_Suggestions hd-SearchDropdown_Suggestions-message"> 3170 <div class="hd-SearchDropdown_SuggestionsHeader"> 3171 <div class="hd-SearchDropdown_SuggestionsHeading"> 3172 What are you looking for? 3173 </div> 3174 </div> 3175 3176 <p class="hd-SearchDropdown_SuggestionsMessage"> 3177 Search for styles that you won't find anywhere else, thanks to our superior design and blend of fashion and functionality. 3178 </p> 3179 </div> 3180 3181 <div class="hd-SearchDropdown_Suggestions hd-SearchDropdown_Suggestions-suggestions" data-search-dropdown-el="initialSuggestions"></div> 3182 3183 3184 3185 3186 <div class="hd-SearchDropdown_Suggestions hd-SearchDropdown_Suggestions-links"> 3187 <div class="hd-SearchDropdown_SuggestionsHeader"> 3188 <div class="hd-SearchDropdown_SuggestionsHeading"> 3189 Useful links 3190 </div> 3191 </div> 3192 3193 <ul class="hd-SearchDropdown_SuggestionsList"> 3194 3195 3196 <li class="hd-SearchDropdown_Suggestion"> 3197 <a href="https://boandtee.com/pages/delivery" class="hd-SearchDropdown_SuggestionsLink"> 3198 Delivery 3199 </a> 3200 </li> 3201 3202 3203 3204 <li class="hd-SearchDropdown_Suggestion"> 3205 <a href="https://boandtee.com/pages/returns-information" class="hd-SearchDropdown_SuggestionsLink"> 3206 Returns 3207 </a> 3208 </li> 3209 3210 3211 3212 <li class="hd-SearchDropdown_Suggestion"> 3213 <a href="https://boandtee.zendesk.com/hc/en-gb" class="hd-SearchDropdown_SuggestionsLink"> 3214 FAQs 3215 </a> 3216 </li> 3217 3218 3219 </ul> 3220 </div> 3221 3222 3223 3224 <div class="hd-SearchDropdown_Suggestions hd-SearchDropdown_Suggestions-popular"> 3225 <div class="hd-SearchDropdown_SuggestionsHeader"> 3226 <div class="hd-SearchDropdown_SuggestionsHeading"> 3227 Popular collections 3228 </div> 3229 </div> 3230 3231 <ul class="hd-SearchDropdown_SuggestionsCards" style="--columns: 3"> 3232 3233 3234 3235 <li class="hd-SearchDropdown_Suggestion"> 3236 <div class="hd-SearchDropdown_SuggestionsCard"> 3237 <a href="/collections/new-in"> 3238 <div class="hd-SearchDropdown_SuggestionsCardImage"> 3239 <div class="rsp-Image " style="--Image_AspectRatio: 133.33333333333334%; aspect-ratio: 900 / 1200.0;"> 3240 3241 <img src="//boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=900" alt="new in" srcset="//boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=180 180w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=360 360w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=540 540w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=720 720w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=900 900w" width="900" height="1188" loading="lazy" sizes="(max-width: 767px) 100v
3241w, (min-width: 768px) calc(100vw / 3)" class="rsp-Image_Image "> 3242 3243</div> 3244 3245 </div> 3246 <div class="hd-SearchDropdown_SuggestionsCardContent"> 3247 <p class="hd-SearchDropdown_SuggestionsCardTitle">new in</p> 3248 </div> 3249 </a> 3250 </div> 3251 </li> 3252 3253 3254 3255 3256 3257 <li class="hd-SearchDropdown_Suggestion"> 3258 <div class="hd-SearchDropdown_SuggestionsCard"> 3259 <a href="/collections/best-sellers"> 3260 <div class="hd-SearchDropdown_SuggestionsCardImage"> 3261 <div class="rsp-Image " style="--Image_AspectRatio: 133.33333333333334%; aspect-ratio: 900 / 1200.0;"> 3262 3263 <img src="//boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=900" alt="bestsellers" srcset="//boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=180 180w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=360 360w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=540 540w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=720 720w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=900 900w" width="900" height="1188" loading="lazy" sizes="(max-width: 767px) 100vw, (min-width: 768px) calc(100vw / 3)" class="rsp-Image_Image "> 3264 3265</div> 3266 3267 </div> 3268 <div class="hd-SearchDropdown_SuggestionsCardContent"> 3269 <p class="hd-SearchDropdown_SuggestionsCardTitle">bestsellers</p> 3270 </div> 3271 </a> 3272 </div> 3273 </li> 3274 3275 3276 3277 3278 3279 <li class="hd-SearchDropdown_Suggestion"> 3280 <div class="hd-SearchDropdown_SuggestionsCard"> 3281 <a href="/collections/back-in-stock"> 3282 <div class="hd-SearchDropdown_SuggestionsCardImage"> 3283 <div class="rsp-Image " style="--Image_AspectRatio: 133.33333333333334%; aspect-ratio: 900 / 1200.0;"> 3284 3285 <img src="//boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=900" alt="back in stock" srcset="//boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=180 180w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=360 360w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=540 540w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=720 720w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=900 900w" width="900" height="1188" loading="lazy" sizes="(max-width: 767px) 100vw, (min-width: 768px) calc(100vw / 3)" class="rsp-Image_Image "> 3286 3287</div> 3288 3289 </div> 3290 <div class="hd-SearchDropdown_SuggestionsCardContent"> 3291 <p class="hd-SearchDropdown_SuggestionsCardTitle">back in stock</p> 3292 </div> 3293 </a> 3294 </div> 3295 </li> 3296 3297 3298 3299 </ul> 3300 </div> 3301 </div> 3302 </div> 3303 3304 <div 3305 class="hd-SearchDropdown_NoResults" 3306 data-search-dropdown-el="noResultsView" 3307 hidden> 3308 <div class="hd-SearchDropdown_NoResultsInner"> 3309 <div class="hd-SearchDropdown_NoResultsHeading" data-search-dropdown-el="noResultsHeading"> 3310 Sorry! No results 3311 </div> 3312 3313 3314 3315 3316 <div class="hd-SearchDropdown_Suggestions"> 3317 <div class="hd-SearchDropdown_SuggestionsHeader"> 3318 <div class="hd-SearchDropdown_SuggestionsHeading"> 3319 Useful links 3320 </div> 3321 </div> 3322 3323 <ul class="hd-SearchDropdown_SuggestionsList"> 3324 3325 3326 <li class="hd-SearchDropdown_Suggestion"> 3327 <a href="https://boandtee.com/pages/delivery" class="hd-SearchDropdown_SuggestionsLink"> 3328 Delivery 3329 </a> 3330 </li> 3331 3332 3333 3334 <li class="hd-SearchDropdown_Suggestion"> 3335 <a href="https://boandtee.com/pages/returns-information" class="hd-SearchDropdown_SuggestionsLink"> 3336 Returns 3337 </a> 3338 </li> 3339 3340 3341 3342 <li class="hd-SearchDropdown_Suggestion"> 3343 <a href="https://boandtee.zendesk.com/hc/en-gb" class="hd-SearchDropdown_SuggestionsLink"> 3344 FAQs 3345 </a> 3346 </li> 3347 3348 3349 </ul> 3350 </div> 3351 3352 3353 3354 <div class="hd-SearchDropdown_Suggestions hd-SearchDropdown_Suggestions-popular"> 3355 <div class="hd-SearchDropdown_SuggestionsHeader"> 3356 <div class="hd-SearchDropdown_SuggestionsHeading"> 3357 Popular collections 3358 </div> 3359 </div> 3360 3361 <ul class="hd-SearchDropdown_SuggestionsCards" style="--columns: 3"> 3362 3363 3364 <li class="hd-SearchDropdown_Suggestion"> 3365 <div class="hd-SearchDropdown_SuggestionsCard"> 3366 <a href="/collections/new-in"> 3367 <div class="hd-SearchDropdown_SuggestionsCardImage"> 3368 <div class="rsp-Image " style="--Image_AspectRatio: 133.33333333333334%; aspect-ratio: 900 / 1200.0;"> 3369 3370 <img src="//boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=900" alt="new in" srcset="//boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=180 180w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=360 360w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=540 540w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=720 720w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&width=900 900w" width="900" height="1188" loading="lazy" sizes="(max-width: 767px) 100v
3370w, (min-width: 768px) calc(100vw / 3)" class="rsp-Image_Image "> 3371 3372</div> 3373 3374 </div> 3375 <div class="hd-SearchDropdown_SuggestionsCardContent"> 3376 <p class="hd-SearchDropdown_SuggestionsCardTitle">new in</p> 3377 </div> 3378 </a> 3379 </div> 3380 </li> 3381 3382 3383 3384 <li class="hd-SearchDropdown_Suggestion"> 3385 <div class="hd-SearchDropdown_SuggestionsCard"> 3386 <a href="/collections/best-sellers"> 3387 <div class="hd-SearchDropdown_SuggestionsCardImage"> 3388 <div class="rsp-Image " style="--Image_AspectRatio: 133.33333333333334%; aspect-ratio: 900 / 1200.0;"> 3389 3390 <img src="//boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=900" alt="bestsellers" srcset="//boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=180 180w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=360 360w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=540 540w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=720 720w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&width=900 900w" width="900" height="1188" loading="lazy" sizes="(max-width: 767px) 100vw, (min-width: 768px) calc(100vw / 3)" class="rsp-Image_Image "> 3391 3392</div> 3393 3394 </div> 3395 <div class="hd-SearchDropdown_SuggestionsCardContent"> 3396 <p class="hd-SearchDropdown_SuggestionsCardTitle">bestsellers</p> 3397 </div> 3398 </a> 3399 </div> 3400 </li> 3401 3402 3403 3404 <li class="hd-SearchDropdown_Suggestion"> 3405 <div class="hd-SearchDropdown_SuggestionsCard"> 3406 <a href="/collections/back-in-stock"> 3407 <div class="hd-SearchDropdown_SuggestionsCardImage"> 3408 <div class="rsp-Image " style="--Image_AspectRatio: 133.33333333333334%; aspect-ratio: 900 / 1200.0;"> 3409 3410 <img src="//boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=900" alt="back in stock" srcset="//boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=180 180w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=360 360w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=540 540w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=720 720w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&width=900 900w" width="900" height="1188" loading="lazy" sizes="(max-width: 767px) 100vw, (min-width: 768px) calc(100vw / 3)" class="rsp-Image_Image "> 3411 3412</div> 3413 3414 </div> 3415 <div class="hd-SearchDropdown_SuggestionsCardContent"> 3416 <p class="hd-SearchDropdown_SuggestionsCardTitle">back in stock</p> 3417 </div> 3418 </a> 3419 </div> 3420 </li> 3421 3422 3423 </ul> 3424 </div> 3425 </div> 3426 3427 3428 </div> 3429 3430 <div
3431 class="hd-SearchDropdown_Results" 3432 data-search-dropdown-el="resultsView" 3433 hidden> 3434 <div class="hd-SearchDropdown_ResultsInner"> 3435 <div class="hd-SearchDropdown_Suggestions" data-search-dropdown-el="resultsSuggestions"> 3436 <div class="hd-SearchDropdown_SuggestionsHeading"> 3437 Search suggestions 3438 </div> 3439 </div> 3440 3441 <div class="hd-SearchDropdown_ResultsProducts" data-search-dropdown-el="resultsProducts"> 3442 <div class="hd-SearchDropdown_ResultsProductsHeader"> 3443 <div class="hd-SearchDropdown_ResultsProductsHeading" data-search-dropdown-el="resultsProductsHeading"></div> 3444 <a 3445 href="#" 3446 class="hd-SearchDropdown_ResultsProductsViewAll" 3447 data-search-dropdown-el="resultsProductsViewAll"> 3448 View all results 3449 </a> 3450 </div> 3451 3452 <ul class="hd-SearchDropdown_ResultsProductsList"></ul> 3453 </div> 3454 <div class="hd-SearchDropdown_Re
3454sultsAside"> 3455 <div class="hd-SearchDropdown_Suggestions" data-search-dropdown-el="resultsCategories"></div> 3456 3457 3458 3459 3460 <div class="hd-SearchDropdown_Suggestions"> 3461 <div class="hd-SearchDropdown_SuggestionsHeader"> 3462 <div class="hd-SearchDropdown_SuggestionsHeading"> 3463 Useful Links (3) 3464 </div> 3465 </div> 3466 3467 <ul class="hd-SearchDropdown_SuggestionsList"> 3468 3469 3470 <li class="hd-SearchDropdown_Suggestion"> 3471 <a href="https://boandtee.com/pages/delivery" class="hd-SearchDropdown_SuggestionsLink"> 3472 Delivery 3473 </a> 3474 </li> 3475 3476 3477 3478 <li class="hd-SearchDropdown_Suggestion"> 3479 <a href="https://boandtee.com/pages/returns-information" class="hd-SearchDropdown_SuggestionsLink"> 3480 Returns 3481 </a> 3482 </li> 3483 3484 3485 3486 <li class="hd-SearchDropdown_Suggestion"> 3487 <a href="https://boandtee.zendesk.com/hc/en-gb" class="hd-SearchDropdown_SuggestionsLink"> 3488 FAQs 3489 </a> 3490 </li> 3491 3492 3493 </ul> 3494 </div> 3495 3496 </div> 3497 </div> 3498 3499 3500 </div> 3501 3502 3503 </div> 3504 </dialog> 3505</search-dropdown> 3506 3507<!-- search-dropdown.js is now loaded in theme.liquid --> 3508 3509 3510</div> 3511 <style> </style> 3512<div id="shopify-block-AS0lNMVZlSktiRm1BQ__5888675206956468567" class="shopify-block shopify-app-block"> 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529<div 3530 id='loop-onstore-data' 3531 data-show-onstore-bar='false' 3532 data-apikey='0cf0955c7220121f754ec12eb6fd7a508aa42ebc' 3533 data-checkoutselector='#checkoutButton' 3534 data-replacecheckoutbutton='true' 3535 data-cartdetails='true' 3536 data-preservecart='false' 3537 data-label='in available credit' 3538 data-mobile-label='credit' 3539 data-valuesize='15' 3540 data-labelsize='10' 3541 data-buttonsize='10' 3542 data-alignment='full' 3543 data-bgcolor='#000000' 3544 data-textcolor='#ffffff' 3545 data-bumpsidecart='false' 3546 data-sidecartselector='.sidecart'></div> 3547 3548 3549</div><div id="shopify-block-AcVdWR1d0ZzhmRUg1e__11560147490181472608" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: rivo-init -->
3549<script type="text/javascript" id="rivo-app-embed-init"> 3550 window.Rivo = window.Rivo || {}; 3551 window.Rivo.embedded_version_enabled = true; 3552 window.Rivo.common = window.Rivo.common || {}; 3553 window.Rivo.common.shop = { 3554 permanent_domain: 'bo-tee-store.myshopify.com', 3555 currency: "GBP", 3556 money_format: "${{amount}}", 3557 id: 24797970513 3558 }; 3559 3560 window.Rivo.common.template = 'cart'; 3561 window.Rivo.common.full_template = 'cart'; 3562 window.Rivo.common.cart = {}; 3563 window.Rivo.common.translations = {"account_widget":{"en":{"or_text":"OR","city_text":"City","edit_text":"Edit","name_text":"Name","email_text":"Email","order_text":"Order","phone_text":"Phone","taxes_text":"Taxes","total_text":"Total","delete_text":"Delete","select_text":"Select","address_text":"Address","company_text":"Company","country_text":"Country","discount_text":"Discount","province_text":"Province","shipping_text":"Shipping","subtotal_text":"Subtotal","zip_code_text":"ZIP Code","last_name_text":"Last Name","community_title":"Community","favorites_title":"Favorites","first_name_text":"First Name","home_cta_1_text":"View Rewards","home_cta_2_text":"Manage Subscriptions","home_cta_3_text":"","add_to_cart_text":"Add to Cart","amount_paid_text":"Amount paid","footer_home_text":"For You","items_count_text":"items","net_payment_text":"Net payment","postal_code_text":"Postal Code","saved_cart_title":"Saved from Cart","are_you_sure_text":"Are you sure you want to?","collections_title":"Collections","contact_info_text":"Contact info","email_placeholder":"Email","google_login_text":"Sign in with Google","login_button_text":"SIGN IN","login_footer_text":"","login_issues_text":"Click here to sign in with your password if you are having issues","my_addresses_text":"My Addresses","order_placed_text":"Placed on","verify_title_text":"Enter the code we just sent to [[email]]","all_favorites_text":"All Favorites","community_subtitle":"Post your challenges and get rewarded. We'll automatically drop points into your account for every challenge you complete.","footer_orders_text":"Orders","latest_order_title":"Latest Order","notifications_text":"Notifications","profile_list_links":[{"url":"https:\/\/boandtee.com\/pages\/help-and-contact","text":"Help \u0026 FAQ","open_new_tab":true},{"url":"https:\/\/boandtee.com\/pages\/delivery","text":"Delivery Information","open_new_tab":true},{"url":"https:\/\/boandtee.com\/pages\/returns-information","text":"Returns Information","open_new_tab":true},{"url":"https:\/\/boandtee.com\/pages\/sizing-guide","text":"Size Guide","open_new_tab":true}],"verify_button_text":"Verify Code","ways_to_earn_title":"Ways to earn","address_line_1_text":"Address Line 1","address_line_2_text":"Apartment, suite, etc.","buy_gift_card_title":"Buy Gift Card","delete_address_text":"Yes, Delete Address","external_login_text":"Sign in or Sign up","footer_profile_text":"Profile","home_referral_title":"Refer a Friend \u0026 Earn","my_preferences_text":"My Preferences","payment_method_text":"Payment Method","popular_today_title":"Popular Today","select_country_text":"Select Country","select_options_text":"Select Options","shop_pay_login_text":"Sign in with","taxes_included_text":"Taxes (included)","update_profile_text":"Update Profile","view_favorites_text":"View Favorites","amount_refunded_text":"Amount refunded","billing_address_text":"Billing Address","home_logged_in_title":"","order_cancelled_text":"Cancelled on","profile_log_out_text":"SIGN OUT","profile_pos_qr_title":"In-Store Sign-In","redeem_rewards_title":"Redeem Rewards","save_collection_text":"Save Collection","select_province_text":"Select Province","shipping_method_text":"Shipping Method","address_default_badge":"Default","alternate_login_title":"Having issues signing in?","community_button_text":"View Challenges","company_optional_text":"Company (Optional)","featured_content_link":null,"footer_community_text":"Community","home_logged_out_title":"Easily save your shopping history and track and return orders in one place","recently_viewed_title":"Recently Viewed","share_collection_text":"Share","shipping_address_text":"Shipping Address","transfer_credit_title":"Send Store Credit","add_to_collection_text":"Add to Collection","featured_content_title":"","home_referral_subtitle":"\u003cspan rivo-ax-text='$store.rivo_profile_customer?.referral_stats?.completed_count'\u003e\u003c\/span\u003e referrals completed so far","home_wallet_pass_title":"Add Wallet Pass","orders_logged_in_title":"Your Orders","added_to_cart_link_text":"Go to Cart","additional_details_text":"Additional Details","home_logged_in_subtitle":"","home_referral_copy_text":"Referral link copied to clipboard","membership_manage_title":"Manage Membership","orders_empty_state_text":"You haven't placed any orders yet","orders_logged_out_title":"Log in to view, track, and manage your orders","profile_pos_qr_subtitle":"Show this code to a store associate at checkout to sign in to your account from a retail store.","redeem_rewards_url_text":"My Rewards","survey_next_button_text":"Next","survey_ski
3563p_button_text":"Skip","vip_tier_progress_title":"\u003cspan rivo-ax-html='$store.rivo_profile_customer?.current_vip_tier_info?.tier?.name'\u003e\u003c\/span\u003e","alternate_login_subtitle":"Use one of the following methods below to sign in.","home_logged_out_subtitle":"Get access to your rewards, referrals, and more","mobile_phone_number_text":"Mobile Phone Number","order_cancel_button_text":"Cancel Order","order_item_refunded_text":"(Refunded)","shipping_addresses_title":"Shipping Addresses","transfer_credit_subtitle":"\u003cp\u003eYour balance: \u003cspan rivo-ax-text='$store.rivo_profile_customer?.pretty_credits_tally'\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003eTransfer credit to a friend or family member. They'll receive an email or SMS with a link to redeem the credit. The credit will be instantly deducted from your account and refunded to you if not claimed within 30 days.\u003c\/p\u003e","verify_login_issues_text":"Having issues? Click here to try again.","featured_content_subtitle":"","home_wallet_pass_subtitle":"Unlock exclusive rewards and offers.","order_returns_button_text":"Start a Return","accepts_sms_marketing_text":"Text me with news and offers","add_shipping_address_title":"Add Shipping Address","alternate_login_email_text":"Sign in with an email and password","create_new_collection_text":"Create New Collection","enter_collection_name_text":"Enter Collection Name","favorites_empty_state_text":"No favorited products","order_tracking_button_text":"Track Shipment","redeem_rewards_unlock_text":"from unlocking this reward","save_shipping_address_text":"Save Shipping Address","vip_tier_progress_subtitle":"Earn \u003cspan rivo-ax-html='$store.rivo_profile_customer?.current_vip_tier_info?.next_tier?.formatted_to_spend_or_earn || $store.rivo_profile_customer?.current_vip_tier_info?.next_tier?.to_spend_or_earn'\u003e\u003c\/span\u003e Points to unlock \u003cspan rivo-ax-html='$store.rivo_profile_customer?.current_vip_tier_info?.next_tier?.name'\u003e\u003c\/span\u003e","alternate_login_google_text":"Sign in with Google","buy_again_notification_text":"Order added to the cart","edit_shipping_address_title":"Edit Shipping Address","favorite_button_active_text":"Added to favorites","home_button_membership_text":"Credit","home_referral_page_subtitle":"Refer a friend who makes a purchase and both of you will claim rewards.","id_copied_notification_text":"ID copied to clipboard","login_verify_identity_title":"Verify your identity","order_buy_again_button_text":"Buy Again","saved_cart_empty_state_text":"No saved from cart items","set_as_default_address_text":"Set as default address","transfer_credit_date_header":"Date","transfer_credit_link_copied":"Link copied!","vip_tier_progress_link_text":"View perks","address_line_2_optional_text":"Address Line 2 (Optional)","collections_empty_state_text":"No collections","email_cannot_be_changed_text":"Email used for login cannot be updated","home_expiration_message_text":"{{balance_label}} expire {{expiration_date}}","home_logged_out_orders_title":"Sign in to access your orders","home_wallet_pass_button_text":"Add Wallet Pass","login_accepts_marketing_text":"Email me with news and offers","loyalty_opt_in_checkbox_text":"Send me loyalty program updates and exclusive offers","transfer_credit_amount_label":"Amount","transfer_credit_no_transfers":"No transfers yet","transfer_credit_send_another":"Send another credit","add_to_cart_notification_text":"Added to cart","alternate_login_shop_pay_text":"Sign in to an existing account with Shop Pay","favorite_button_inactive_text":"Add to favorites","home_additional_button_1_text":"","home_additional_button_2_text":"","home_logged_out_profile_title":"Sign in to access your profile","orders_additional_button_text":"Download Invoice","redeem_rewards_available_text":"available to redeem","same_as_shipping_address_text":"Same as shipping address","transfer_credit_amount_header":"Amount","transfer_credit_history_title":"Transfer History","transfer_credit_message_label":"Message (optional)","home_button_gift_card_cta_text":"My Credit","lookup_gift_card_used_subtitle":"We hope you enjoy your purchase!","lookup_gift_card_used_tos_text":"We hope you enjoy your purchase!","order_limited_time_button_text":"E
3563DIT OR CANCEL ORDER","address_saved_notification_text":"Address saved","apply_discount_add_to_cart_text":"Apply discount \u0026 add to cart","featured_content_image_position":"center center","generic_error_notification_text":"Looks like we hit an issue. Please try again","home_button_balance_points_text":"Points","home_button_gift_card_code_text":"ID: ","home_button_gift_card_copy_text":"Copy ID","home_button_membership_cta_text":"My Membership","home_logged_out_favorites_title":"Sign in to access your favorites","home_logged_out_orders_subtitle":"Get access to your rewards, referrals, and more","profile_list_personal_info_text":"Personal Information","redeem_rewards_points_away_text":"away","transfer_credit_generate_button":"Generate Gift URL","transfer_credit_share_link_text":"Share this link with your friend:","view_product_action_button_text":"View product","home_logged_out_profile_subtitle":"Get access to your rewards, referrals, and more","lookup_gift_card_unused_subtitle":"Copy the code below to redeem your gift card","lookup_gift_card_unused_tos_text":"Apply this code at checkout to redeem your gift card","recently_viewed_empty_state_text":"No recently viewed items","address_deleted_notification_text":"Address deleted successfully","international_returns_button_text":"Start an International Return","profile_updated_notification_text":"Profile updated","shipping_address_empty_state_text":"You haven't added any shipping addresses yet","add_to_favorites_notification_text":"Save Item","alternate_login_another_email_text":"Try sending another code","home_logged_out_favorites_subtitle":"Get access to your rewards, referrals, and more","transfer_credit_description_header":"Description","transfer_credit_no_credit_subtitle":"\u003cp\u003eYour balance: \u003cspan rivo-ax-text='$store.rivo_profile_customer?.pretty_credits_tally'\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003eSorry, you don't have enough credit right now to send.\u003c\/p\u003e","ways_to_earn_transactions_url_text":"View activity","cancel_membership_notification_text":"Membership canceled","home_button_balance_points_cta_text":"My Rewards","added_to_favorites_notification_text":"Item saved","collection_created_notification_text":"Collection Created","profile_list_shipping_addresses_text":"Shipping Addresses","membership_manage_status_profile_text":"Update and manage your membership details.","error_adding_to_cart_notification_text":"Error adding items to cart","membership_manage_become_a_member_text":"Become a Member","buy_gift_card_recipient_email_self_text":"The gift card will be sent to you.","gift_card_code_copied_notification_text":"Gift Card Code Copied","home_button_membership_paywall_cta_text":"Join our Membership","orders_secondary_additional_button_text":"Withdraw From Contract","remove_from_favorites_notification_text":"Remove item","vip_tier_progress_amount_spent_subtitle":"Spend \u003cspan rivo-ax-html='$store.rivo_profile_customer?.current_vip_tier_info?.next_tier?.formatted_to_spend_or_earn || $store.rivo_profile_customer?.current_vip_tier_info?.next_tier?.to_spend_or_earn'\u003e\u003c\/span\u003e to unlock \u003cspan rivo-ax-html='$store.rivo_profile_customer?.current_vip_tier_info?.next_tier?.name'\u003e\u003c\/span\u003e","vip_tier_progress_orders_count_subtitle":"Place \u003cspan rivo-ax-html='$store.rivo_profile_customer?.current_vip_tier_info?.next_tier?.formatted_to_spend_or_earn || $store.rivo_profile_customer?.current_vip_tier_info?.next_tier?.to_spend_or_earn'\u003e\u003c\/span\u003e Orders to unlock \u003cspan rivo-ax-html='$store.rivo_profile_customer?.current_vip_tier_info?.next_tier?.name'\u003e\u003c\/span\u003e","membership_manage_credits_activity_title":"Credits Activity","membership_reactivated_notification_text":"Your membership has been reactivated!","removed_from_favorites_notification_text":"Item removed","membership_update_payment_method_subtitle":"We've just sent you an email to update your payment method. The email subject line is \"Update your payment method\". Please check your email to continue.","buy_gift_card_recipient_email_directly_text":"The gift card will be emailed directly to the recipient.","membership_manage_credits_activity_subtitle":"You have \u003cstrong\u003e\u003cspan rivo-ax-data rivo-ax-text=\"$store.rivo_profile_customer.pretty_credits_tally\"\u003e\u003c\/span\u003e\u003c\/strong\u003e in store credit","membership_manage_status_cancelled_subtitle":"Your membership has been cancelled","send_payment_method_email_notification_text":"We've sent an email to update your payment method","membership_manage_status_is_subscriber_title":"You're an active member","membership_manage_status_is_subscriber_subtitle":"Your membership is currently active","membership_manage_status_not_subscriber_subtitle":"You are not an active member","membership_manage_status_update_payment_link_text":"Update Payment Method","membership_manage_status_cancel_membership_link_text":"Cancel Membership","membership_manage_status_paid_next_billing_date_text":"You will be charged next on \u003cspan rivo-ax-text='$store.rivo_profile_customer.membership_subscription_contract.pretty_next_billing_date_at'\u003e\u003c\/span\u003e","membership_manage_status_rejoin_membership_link_text":"Rejoin Membership","membership_manage_status_manual_next_billing_date_text":"You've been manually placed on this tier.","membership_manage_status_pending_cancellation_subtitle":"Your membership will be cancelled on \u003cspan rivo-ax-text='$store.rivo_profile_customer.membership_subscription_contract.pretty_next_billing_date_at'\u003e\u003c\/span\u003e","sold_out_text":"Sold out","membership_gift_title":"Select Your Free Gift","membership_gift_subtitle":"Your membership includes a free gift. Choose an option below to add it to your cart.","membership_gift_add_to_cart_button_text":"Add to Cart","claim_transfer_title":"Claim Store Credit","claim_transfer_claimed_amount_text":"You received {{amount}}!","claim_transfer_claimed_sender_text":"{{sender}} sent you store credit","claim_transfer_pending_sender_text":"{{sender}} sent you {{amount}}","claim_transfer_pending_anonymous_text":"Someone sent you {{amount}}","claim_transfer_email_label":"Email","claim_transfer_email_placeholder":"[email protected]","claim_transfer_login_button":"Sign in to claim your gift","claim_transfer_claim_button":"Claim Store Credit"}},"loyalty_landing_page":{"en":{"loyalty_page_rewards_title":"Rewards","loyalty_page_rewards_subtitle":"You have the following rewards ready to use","loyalty_page_banner_earn_button":"Earn points","loyalty_page_rewards_no_rewards":"No rewards yet","loyalty_page_ways_to_earn_title":"Ways to Earn","loyalty_page_banner_login_button":"Sign In","loyalty_page_upload_receipt_help":"Upload a re
3563ceipt within the last 30 days to earn points. Please lay the receipt on a flat surface and take a photo from a close distance.","loyalty_page_banner_redeem_button":"Redeem Rewards","loyalty_page_subscribe_email_help":"Subscribe to our email list and earn points","loyalty_page_ways_to_redeem_title":"Ways to Redeem","loyalty_page_customer_birthday_day":"Day","loyalty_page_upload_receipt_attach":"Attach File","loyalty_page_upload_receipt_button":"Submit Receipt","loyalty_page_ways_to_earn_subtitle":"Earn points by completing these actions","loyalty_page_banner_logged_in_title":"Welcome to the program","loyalty_page_banner_register_button":"Join Now","loyalty_page_explainer_step_1_title":"Signup","loyalty_page_explainer_step_2_title":"Earn","loyalty_page_explainer_step_3_title":"Redeem","loyalty_page_subscribe_email_button":"Subscribe","loyalty_page_upload_receipt_no_file":"Please select a file to upload","loyalty_page_upload_receipt_success":"Thanks! Your receipt will be reviewed shortly","loyalty_page_banner_logged_out_title":"Join our Loyalty Program","loyalty_page_banner_login_button_url":null,"loyalty_page_customer_birthday_month":"Month","loyalty_page_customer_birthday_title":"Celebrate your birthday","loyalty_page_ways_to_redeem_subtitle":"Redeem points for these rewards","loyalty_page_explainer_logged_in_title":"Hi \u003cspan rivo-x-data=\"{ username: $store.customer.first_name || 'there' }\" rivo-x-text=\"username\"\u003e\u003c\/span\u003e, you have \u003cstrong\u003e\u003cspan rivo-x-data rivo-x-text=\"$store.customer.pretty_points_tally\"\u003e\u003c\/span\u003e\u003c\/strong\u003e Points","loyalty_page_explainer_step_1_subtitle":"Create an account on our store","loyalty_page_explainer_step_2_subtitle":"Earn points for shopping","loyalty_page_explainer_step_3_subtitle":"Redeem points for discounts","loyalty_page_vip_tier_1_threshold_text":null,"loyalty_page_vip_tier_2_threshold_text":null,"loyalty_page_vip_tier_3_threshold_text":null,"loyalty_page_vip_tier_4_threshold_text":null,"loyalty_page_vip_tier_5_threshold_text":null,"loyalty_page_vip_tier_6_threshold_text":null,"loyalty_page_vip_tiers_logged_in_title":"VIP Tiers","loyalty_page_activity_table_header_date":"Date","loyalty_page_activity_table_no_activity":"No activity yet","loyalty_page_banner_register_button_url":null,"loyalty_page_explainer_logged_out_title":"How it Works","loyalty_page_vip_tiers_logged_out_title":"VIP Tiers","loyalty_page_activity_expiration_warning":"Expiration Date: \u003cspan rivo-x-data rivo-x-text=\"$store.customer.points_expiry\"\u003e\u003c\/span\u003e","loyalty_page_customer_birthday_save_date":"Save Date","loyalty_page_activity_table_header_action":"Activity","loyalty_page_banner_logged_in_description":"As a member, you will earn points for shopping","loyalty_page_explainer_logged_in_subtitle":"Here's an overview of your current points balance and recent activity","loyalty_page_vip_tiers_logged_in_subtitle":"You are on the \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.tier?.name\"\u003e\u003c\/span\u003e tier","loyalty_page_banner_logged_out_description":"Join for free and begin earning points \u0026 rewards every time you shop.","loyalty_page_vip_tiers_logged_out_subtitle":"Join our VIP loyalty program to unlock exclusive rewards available only to members.","loyalty_page_activity_table_header_earnings":"Points","loyalty_page_vip_tiers_progress_column_title":"Tier Status","loyalty_page_vip_tiers_progress_column_subtitle":"Earn \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.next_tier?.formatted_to_spend_or_earn\"\u003e\u003c\/span\u003e points to reach the \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.next_tier?.name\"\u003e\u003c\/span\u003e tier.","loyalty_page_activity_table_header_expiration":"Expires At","loyalty_page_general_redeem":"Redeem","loyalty_page_general_enter_valid_date":"Please enter a valid date","loyalty_page_general_points":"Points","loyalty_page_general_activate_store_credit":"Activate Store Credit","loyalty_page_general_redeemed_store_credit":"Redeemed Store Credit","loyalty_page_general_spent":"Spent","loyalty_page_upload_challenge_photo_button":"Submit Challenge Photo","loyalty_page_upload_challenge_photo_attach":"Attach File","loyalty_page_upload_challenge_photo_no_file":"Please select a file to upload","loyalty_page_upload_challenge_photo_success":"Thanks! Your challenge photo will be reviewed shortly","loyalty_page_upload_challenge_photo_help":"Upload a challenge photo to earn.","acct_creation_title":"Join and Earn Rewards","acct_creation_desc":"Get rewarded for being an awesome customer","acct_creation_sign_in":"Already a member?","acct_creation_btn":"Start Earning","visitor_point_desc":"Earn points and turn these into rewards!","vip_tiers_table_perk_translations":[]}},"general":{"en":{"vip_perks":"Perks","vip_tiers":"VIP Tiers","general_by":"by","vip_reward":"VIP reward","vip_status":"VIP Status","general_day":"Day","social_like":"Like","social_share":"Share","vip_benefits":"Benefits","general_error":"Hmm, something went wrong, please try again shortly","general_month":"Month","general_point":"Point","general_spend":"you spend","general_spent":"Spent","social_follow":"Follow","tos_expiry_at":"Reward expires on {{expiry_date}}.","vip_tier_desc":"Gain access to exclusive rewards.","general_credit":"Credit","general_points":"Points","general_redeem":"Redeem","general_reward":"reward","vip_tier_spend":"Spend {{amount}}","general_credits":"Credits","general_go_back":"Go back","general_pending":"Pending","general_rewards":"Rewards","general_sign_in":"Sign in","general_sign_up":"Sign up","referrals_title":"Referral Program","review_complete":"Post a product review","survey_complete":"Complete a Survey","general_approved":"Approved","general_share_on":"Share on","general_you_have":"You have","tos_free_product":"Reward only applies to {{product_name}}","general_cancelled":"Cancelled","general_edit_date":"Edit Date","general_save_date":"Save date","general_show_more":"Show more","general_signed_up":"signed up","referral_complete":"Complete a Referral","tos_expiry_months":"Expires {{expiry_months}} month(s) after being redeemed.","vip_tier_achieved":"Unlocked {{tier_name}}","vip_tier_added_to":"Added to {{tier_name}}","general_apply_code":"Apply code","general_share_link":"Share your Personal Link","referrals_email_to":"To","vip_achieved_until":"Achieved until","vip_tier_to_unlock":"to unlock","general_reward_show":"Show","referrals_completed":"referrals completed so far","vip_tier_dropped_to":"Fell to {{tier_name}}","vip_tier_on_highest":"You did it! You're on the highest tier ð","general_balance_text":"store credit","general_past_rewards":"Past rewards","general_product_page":"product page","general_ways_to_earn":"Ways to earn","general_your_rewards":"Your rewards","referrals_email_send":"Send email","referrals_get_reward":"Get your","referrals_share_link":"Share this link with a friend for them to claim the reward","social_facebook_like"
3563:"Like page on Facebook","social_tiktok_follow":"Follow on TikTok","social_twitter_share":"Share link on X","tos_min_order_amount":"Applies to all orders over {{min_order_amount}}.","vip_tier_earn_points":"Earn {{points}} Points","vip_tier_retained_to":"Kept {{tier_name}}","vip_tier_vip_history":"VIP History","general_cancel_points":"Points canceled","general_no_points_yet":"No Points yet","general_refund_points":"Points refunded","general_sms_subscribe":"Subscribe to SMS","social_facebook_share":"Share link on Facebook","social_twitter_follow":"Follow on X","vip_reward_earned_via":"Earned via {{vip_tier_name}} tier","vip_you_have_achieved":"You've achieved","wallet_pass_subscribe":"Add Wallet Pass","general_cancel_credits":"Credits canceled","general_no_rewards_yet":"No rewards yet","general_place_an_order":"Place an order","general_points_expired":"Points expired","general_refund_credits":"Credits refunded","general_sms_subscribed":"Subscribed to SMS","general_upload_receipt":"Submit a Receipt","general_ways_to_redeem":"Ways to redeem","referrals_claim_reward":"Claim your gift","referrals_code_invalid":"This referral code is invalid","referrals_email_invite":"Refer friends by email","referrals_visitor_desc":"Refer a friend who makes a purchase and both of you will claim rewards.","review_complete_points":"{{points_amount}} Points for every review posted","tos_min_order_quantity":"Minimum {{min_order_quantity}} items required in cart.","general_birthday_reward":"Celebrate with a reward","general_challenge_photo":"Submit a Challenge Photo","general_credits_expired":"Credits expired","general_discount_amount":"points for ${{discount_amount}} off","general_email_subscribe":"Subscribe to Emails","general_expiration_date":"Expiration Date","general_no_activity_yet":"No activity yet","general_placed_an_order":"Placed an order","general_points_activity":"Points History","general_share_via_email":"Share via Email","general_upcoming_reward":"Upcoming reward","general_you_have_points":"You have {{points}} points","membership_order_placed":"Credits earned from placing an order","referrals_email_message":"Message","referrals_invalid_email":"Please enter a valid email address","referrals_referral_code":"Your referral link to share","social_instagram_follow":"Follow on Instagram","tos_apply_to_collection":"Only for products in specific collections.","tos_max_shipping_amount":"Maximum shipping amount of {{max_shipping_amount}}.","vip_tier_no_vip_history":"No VIP membership history yet","general_email_subscribed":"Subscribed to Emails","general_enter_valid_date":"Please enter a valid date","general_points_for_every":"Points for every","general_uploaded_receipt":"Submitted a Receipt","general_vip_tier_upgrade":"VIP Tier Upgrade Points","referral_complete_points":"{{points_amount}} Points for every referral completed","referrals_call_to_action":"Refer friends and earn","referrals_claimed_reward":"Here's your","referrals_create_account":"Create an Account","referrals_status_blocked":"blocked","referrals_status_pending":"pending","referrals_your_referrals":"Your referrals","general_click_to_see_more":"View My Rewards Account","general_product_purchased":"Product Purchased","general_redeemed_a_reward":"Redeemed a Reward","general_use_discount_code":"Use this discount code on your next order!","gift_card_sync_past_tense":"Gift card sync","referrals_already_visited":"Already visited this page","referrals_general_invalid":"Sorry, looks like this referral is invalid","referrals_referred_reward":"They will get","referrals_referrer_reward":"You will get","general_celebrate_birthday":"Celebrate a birthday","general_how_to_earn_points":"How do I earn Points?","referrals_no_referrals_yet":"No referrals yet","referrals_program_disabled":"This referral program is disabled","referrals_status_completed":"completed","review_complete_past_tense":"Posted a product review","survey_complete_past_tense":"Completed a Survey","general_add_product_to_cart":"Add product to cart","general_balance_text_plural":"Credits","general_fallback_first_name":"there","general_not_enough_earnings":"Not enough earnings to redeem","general_were_awarded_points":"were awarded points","activity_table_header_status":"Status","general_manual_points_adjust":"manual points adjustment","referral_complete_past_tense":"Completed a Referral","referrals_similar_ip_invalid":"We are unable to process referrals within the same IP address","store_credit_sync_past_tense":"Store credit sync","vip_tier_orders_placed_count":"Place {{amount}} Orders","general_activate_store_credit":"Activate Store Credit","general_celebrate_anniversary":"Celebrate Loyalty Anniversary","general_punch_card_checkpoint":"Punch Card Checkpoint","general_redeemed_store_credit":"Redeemed Store Credit","checkout_ui_redeem_points_desc":"You have {{points}} points! Redeem for discounts on this order.","general_discount_amount_coupon":"${{discount_amount}} off coupon","general_have_not_earned_points":"You haven't earned any Points yet.","membership_page_benefits_title":"Membership Benefits","referrals_email_to_placeholder":"Add a comma-separated list of emails","referrals_name_must_be_present":"Please enter your first name","checkout_ui_redeem_points_login":"Log in","checkout_ui_redeem_points_title":"Redeem your points","general_add_points_default_note":"Points granted by points import","general_celebrate_your_birthday":"Let's celebrate your birthday! ð Please give us 30 days notice - otherwise, you'll have to wait another year.","general_please_choose_an_option":"Please choose an option from the","general_redeem_error_max_points":"Exceeded maximum points to spend","general_redeem_error_min_points":"Did not meet minimum points to redeem","referrals_email_already_claimed":"This email has already been claimed","referrals_general_invalid_title":"We're Sorry","social_facebook_like_past_tense":"Liked a page on Facebook","social_tiktok_follow_past_tense":"Followed on TikTok","
3563social_twitter_share_past_tense":"Shared a link on X","social_facebook_share_past_tense":"Shared a link on Facebook","social_twitter_follow_past_tense":"Followed on X","wallet_pass_subscribe_past_tense":"Added Wallet Pass","general_points_for_judgeme_review":"JudgeMe review","membership_page_benefits_subtitle":"Here's an overview of your membership benefits","referrals_account_already_claimed":"You already have an account. You can invite your friends to win rewards!","vip_tier_products_purchased_count":"Purchase {{amount}} Specific Products","checkout_ui_activate_account_title":"Activate Your Account","checkout_ui_redeemed_rewards_title":"Your rewards","general_reset_removal_default_note":"Existing points removed for points reset from import","referrals_your_referrals_show_here":"Your referrals will show here.","social_instagram_follow_past_tense":"Followed on Instagram","checkout_ui_points_estimation_title":"Complete this purchase to earn up to {{points}} points","checkout_ui_refer_friends_login_url":"account\/login?return_url=\/account\u0026email={{customer_email}}","general_loyalty_program_and_rewards":"Loyalty Program \u0026 Rewards","general_vip_tier_upgrade_past_tense":"{{tier_name}} Entry Points","general_your_rewards_will_show_here":"Your rewards will show here.","membership_page_banner_login_button":"Sign In","membership_page_banner_login_prefix":"Already a member?","membership_tier_unlocked_past_tense":"Membership Signup","referrals_email_message_placeholder":"Customize your referral message. The referral link will be automatically added.","checkout_ui_redeem_points_login_desc":"to view your points balance and discover rewards available for redemption.","checkout_ui_redeem_store_credit_desc":"You have ${{store_credit}} in store credit.","vip_tier_product_ids_purchased_count":"Purchase {{amount}} Specific Products","checkout_ui_cashback_estimation_title":"Complete this purchase to earn up to {{cashback}} in CashBack","checkout_ui_install_wallet_pass_title":"Install our Wallet Pass for Exclusive Offers","checkout_ui_points_estimation_subtext":"Loyalty points can be redeemed for rewards on future purchases. Actual points awarded may differ if other discounts are applied.","checkout_ui_redeem_store_credit_title":"Apply your store credit","checkout_ui_refer_friends_login_title":"Claim your points from this purchase !","general_celebrate_birthday_past_tense":"Celebrated a birthday","general_reset_new_balance_default_note":"Points reset to new balance by points import","general_use_discount_code_free_product":"Use this discount code on your next order to get a free product!","membership_page_explainer_step_1_title":"Signup","membership_page_explainer_step_2_title":"Earn","membership_page_explainer_step_3_title":"Redeem","membership_recurring_signup_past_tense":"Recurring Credit","referrals_advocate_stats_email_claimed":"Claimed","checkout_ui_activate_account_button_url":"\/account\/login?return_url=\/account","checkout_ui_cashback_estimation_subtext":"CashBack can be redeemed for rewards on future purchases. Actual CashBack awarded may differ if other discounts are applied.","membership_page_banner_login_button_url":"\/account\/login?return_url=\/account","checkout_ui_activate_account_button_text":"Activate Account","checkout_ui_activate_account_description":"Activate your loyalty account to start earning points, tracking rewards, and accessing exclusive member benefits.","checkout_ui_redeem_points_alternate_name":"points","checkout_ui_redeemed_rewards_description":"Your rewards available to use","checkout_ui_redeemed_rewards_login_title":"Log in","checkout_ui_refer_friends_referral_title":"Refer a Friend","general_celebrate_anniversary_past_tense":"Celebrated Loyalty Anniversary","referrals_advocate_stats_email_completed":"Completed","referrals_create_account_to_claim_coupon":"Create an Account to claim your coupon","checkout_ui_redeemed_rewards_select_label":"Select a Reward","membership_page_banner_add_to_cart_button":"Join Now","membership_page_explainer_step_1_subtitle":"Create an account on our store","membership_page_explainer_step_2_subtitle":"Earn points for shopping","membership_page_explainer_step_3_subtitle":"Redeem points for discounts","checkout_ui_install_wallet_pass_button_url":"\/#rivo","general_converted_to_credits_external_note":"Converted your points balance to store credit","general_converted_to_credits_internal_note":"Converted from points to store credit","membership_page_activity_table_header_date":"Date","membership_page_activity_table_no_activity":"No activity yet","membership_page_banner_is_subscriber_title":"Welcome to our Membership Program","membership_page_status_is_subscriber_title":"You have an Active Membership","referrals_advocate_stats_email_link_clicks":"Link Clicks","checkout_ui_install_wallet_pass_button_text":"Install Wallet Pass","checkout_ui_install_wallet_pass_description":"Unlock exclusive offers and rewards with our Wallet Pass.","checkout_ui_login_notification_banner_title":"Have loyalty discounts or rewards that you'd like to apply?","checkout_ui_refer_friends_login_description":"Log in or register to activate your loyalty account, redeem your points and access your special offers.","membership_page_activity_expiration_warning":"Expiration Date: \u003cspan rivo-x-data rivo-x-text=\"$store.customer.points_expiry\"\u003e\u003c\/span\u003e","membership_page_banner_non_subscriber_title":"Join our Membership Program","membership_recurring_anniversary_past_tense":"Membership Anniversary Credits","checkout_ui_redeem_incremental_earnings_desc":"How much of your {{balance}} in balance (equivalent to ${{balance_to_currency}}) would you like to redeem?","checkout_ui_refer_friends_login_button_title":"Activate my account","general_order_placed_store_credit_multiplier":"Earn cash back for every $1 spent","membership_page_activity_table_header_action":"Activity","referrals_advocate_stats_email_unique_visits":"Unique visits from your link","referrals_email_your_friend_has_referred_you":"Your friend has referred you to {{shop_name}}","checkout_ui_login_notification_banner_subtext":"to login to your account","checkout_ui_redeem_incremental_earnings_login":"Log in","checkout_ui_redeem_incremental_earnings_title":"Redeem store balance","checkout_ui_redeem_points_select_custom_label":"{{reward_name}} orders ${{min_order_amount}}+ for {{points_amount}} points","checkout_ui_refer_friends_referral_button_url":"","membership_page_banner_add_to_cart_button_url":"\/membership-add-to-cart","membership_page_cancel_membership_modal_title":"Are you sure you want to cancel your membership?","membership_page_explainer_is_subscriber_title":"Hi \u003cspan rivo-x-data=\"{ username: $store.customer.first_name || 'there' }\" rivo-x-text=\"username\"\u003e\u003c\/span\u003e, you have \u003cstrong\u003e\u003cspan rivo-x-data rivo-x-text=\"$store.customer.pretty_credits_tally\"\u003e\u003c\/span\u003e\u003c\/strong\u003e in Store Credit","membership_page_status_is_subscriber_subtitle":"You will be charged next on \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.membership?.pretty_next_charge_date\"\u003e\u003c\/span\u003e","referrals_email_checkout_out_and_claim_reward":"Check out the referral link and claim a free reward.","checkout_ui_redeem_points_select_discount_desc":"Please select a discount","checkout_ui_redeemed_rewards_login_description":"to view your rewards available to use.","checkout_ui_refer_friends_referral_description":"Share your referral link with friends and earn rewards each time a new friend makes a purchase.","membership_page_activity_table_header_earnings":"Points","membership_page_cancel_membership_modal_button":"Yes, Cancel my Membership","membership_page_explainer_non_subscriber_title":"How it Works","checkout_ui_login_notification_banner_link_text":"Click here","checkout_ui_redeem_points_select_discount_label":"Select Discount","checkout_ui_redeemed_rewards_select_description":"Please select a reward","checkout_ui_refer_friends_referral_button_title":"Refer a Friend","membership_page_status_update_payment_link_text":"Update Payment Method","referrals_advocate_stats_email_no_referrals_yet":"No referrals yet.","membership_page_banner_is_subscriber_description":"You'v unlocked exclusive savings, rewards \u0026 VIP access.","membership_page_explainer_is_subscriber_subtitle":"Here's an overview of your current credits balance and recent activity","checkout_ui_redeem_store_credit_apply_button_text":"Apply Store Credit","membership_page_banner_non_subscriber_description":"Unlock exclusive savings, rewards \u0026 VIP access.","membership_page_update_payment_method_modal_title":"Update Payment Method","checkout_ui_redeem_incremental_earnings_login_desc":"to view your balance.","membership_page_status_cancel_membership_link_text":"Cancel","membership_page_status_rejoin_membership_link_text":"Rejoin Membership","checkout_ui_refer_friends_referral_text_field_label":"Your referral link","membership_page_cancel_membership_modal_description":"We'd hate to see you leave. Your membership includes exclusive benef
3563its that you'll lose access to immediately.","checkout_ui_redeem_incremental_earnings_desc_applied":"You're using {{applied_balance}} of your available {{balance}} in store credit","membership_page_status_pending_cancellation_subtitle":"Your membership will be cancelled on \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.membership?.pretty_queued_for_cancellation_at\"\u003e\u003c\/span\u003e","checkout_ui_cashback_estimation_title_usd_to_currency":"Complete this purchase to earn up to {{cashback_usd_to_currency}} in CashBack","referrals_advocate_stats_email_friends_order_verified":"Friends order was verified","referrals_advocate_stats_email_referral_link_to_share":"Here's your referral link to share with friends.","referrals_advocate_stats_email_friend_claimed_discount":"Friend claimed discount","checkout_ui_cashback_estimation_subtext_usd_to_currency":"CashBack can be redeemed for rewards on future purchases. Actual CashBack awarded may differ if other discounts are applied.","checkout_ui_post_purchase_account_activation_button_url":"\/account\/login?return_url=\/account","membership_page_update_payment_method_modal_description":"We've sent you an email to update your payment method. Please check your inbox and follow the instructions.","checkout_ui_redeem_incremental_earnings_form_input_label":"Earnings amount","checkout_ui_redeem_incremental_discount_code_change_error":"{{code}} couldn't be used with your existing discounts.","checkout_ui_redeem_incremental_earnings_form_submit_button":"Redeem","checkout_ui_redeem_points_not_enough_points_banner_message":"You're {{points_amount}} points away from a reward","checkout_ui_redeem_incremental_earnings_desc_usd_to_currency":"You have {{formatted_credits_tally_usd_to_currency}}) in store credit to redeem (subject to FX rates at time of redemption)","checkout_ui_redeem_incremental_earnings_desc_usd_to_currency_applied":"You're using {{applied_balance_to_currency}} of your available {{formatted_credits_tally_usd_to_currency}} in store credit","general_applied_to_subscription_order":"Applied to subscription order","general_cashback_not_earned_subject":"You didn't earn CashBack on this order","general_cashback_not_earned_title":"You didn't earn CashBack on this order","general_cashback_not_earned_subtitle":"This order wasn't eligible for CashBack.","general_drop_points":"Limited time bonus points","general_drop_credits":"Limited time bonus credits","general_store_credit_transfer_sent_via_gift_url":"Sent {{amount}} credit via gift URL {{transfer_url}}","general_store_credit_transfer_sent":"Sent {{amount}} credit to {{recipient_email}}","general_store_credit_transfer_received":"Received {{amount}} credit from {{sender_email}}","general_drop_points_expired":"Limited time bonus points expired","general_drop_credits_expired":"Limited time bonus credits expired","general_store_credit_redeemed":"{{store_credit_amount}} in store credit has been added to your account. Apply at checkout.","general_discount_code_applied_to_cart":"Discount applied to your cart","general_apply_code_now":"Apply code now","general_apply_to_subscription":"Apply to subscription","general_or":"OR","general_choose_redemption_destination":"Choose to use it now or on your next subscription order","general_subscription_redemption_applied":"This reward will apply to your next subscription order","activity_expiration_label":"Expires","activity_table_header_expiration":"Expires At","social_provide_instagram_handle":"Share your Instagram handle","social_provide_tiktok_handle":"Share your TikTok handle","social_provide_instagram_handle_past_tense":"Shared your Instagram handle","social_provide_tiktok_handle_past_tense":"Shared your TikTok handle","social_provide_handle_button":"Share handle","social_handle_placeholder":"@username","social_handle_missing":"Please enter your handle","checkout_ui_redeem_points_store_credit_success":"{{store_credit_amount}} in store credit redeemed. Apply to this order from the payment section.","checkout_ui_gift_with_purchase_applied_message":"Free gift applied","checkout_ui_redeem_incremental_earnings_store_credit_success":"{{store_credit_amount}} in store credit redeemed. Apply to this order from the payment section.","membership_page_activity_table_header_expiration":"Expires At"}}}; 3564 window.Rivo.global_config = {"asset_urls":{"loy":{"api_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_rivo_api.js?v=1764090844","lp_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_rivo_lp.js?v=1764090843","lp_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_rivo_lp.css?v=1787090345","profile_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_rivo_profile.js?v=1764090842","profile_loyalty_js":null,"profile_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_rivo_profile.css?v=1786981399","init_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_init.js?v=1764090841","referrals_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_referrals.js?v=1764090845","referrals_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_referrals.css?v=1700287043","widget_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0037\/2110\/1430\/t\/963\/assets\/ba_loy_widget.js?v=1728252181","widget_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_widget.css?v=1692840875","page_init_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_page_init.js?v=1711433130","page_widget_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_page_widget.js?v=1711432435","page_widget_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_page.css?v=1693059047","page_preview_js":null,"app_proxy_applications_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/app_proxy_application.js?v=1708835151"},"forms":{"init_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_forms_init.js?v=1711433134","widget_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_forms_widget.js?v=1711433135","forms_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_forms.css?v=1691714518"},"global":{"helper_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_tracking.js?v=1764090840"}},"proxy_paths":{"loy":"\/apps\/ba-loy","app_metrics":"\/apps\/ba-loy\/app_metrics"},"aat":["loy"],"pv":false,"sts":false,"bam":true,"batc":false,"base_money_format":"£{{amount}}","online_store_version":1,"loy_js_api_enabled":false,"hide_console_ad":false,"shopify_markets_enabled":false,"google_client_id":"105612801293-sameovm86585pon5peultgqlp451r1l5.apps.googleusercontent.com","multipass_v_token":false,"clear_latest_order_cache":false,"shop":{"id":24797970513,"name":"Bo+Tee","domain":"boandtee.com"},"theme_extension_local_assets":false}; 3565 3566 if (!window.Rivo.global_config.theme_extension_local_assets) { 3567 window.Rivo.global_config.asset_urls = { 3568 ...window.Rivo.global_config.asset_urls, 3569 loy: { 3570 api_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b
35701-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_rivo_api.js', 3571 init_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_loy_init.js', 3572 referrals_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_loy_referrals.js', 3573 referrals_css: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_loy_referrals.css', 3574 widget_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_loy_widget.js', 3575 widget_css: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_loy_widget.css', 3576 page_init_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_loy_page_init.js', 3577 page_widget_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_loy_page_widget.js', 3578 page_widget_css: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_loy_page.css', 3579 page_preview_js: "/assets/msg/loy_page_preview.js", 3580 app_proxy_application_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/app_proxy_application.js', 3581 lp_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_rivo_lp.js', 3582 profile_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_rivo_profile.js', 3583 profile_loyalty_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_rivo_profile_loyalty.js' 3584 }, 3585 forms: { 3586 init_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_forms_init.js', 3587 widget_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_forms_widget.js', 3588 forms_css: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_forms.css' 3589 }, 3590 global: { 3591 helper_js: 'https://cdn.shopify.com/extensions/01a0ac46-d5b1-7e90-90aa-1f7e831976f9/rivo-loyalty-rewards-referrals-819/assets/ba_tracking.js' 3592 } 3593 }; 3594 } 3595 3596 3597 3598 window.Rivo.loy_config = {"brand_theme_settings":{"enabled":false,"button_bg":"#20124d","header_bg":"#20124d","desc_color":"#737376","icon_color":"#3a3a3a","link_color":"#20124d","visibility":"both","cards_shape":"rounded","hide_widget":false,"launcher_bg":"#20124d","mobile_icon":"star","mobile_text":"Rewards","title_color":"#212b36","banner_image":"","desktop_icon":"star","desktop_text":"Rewards","inputs_shape":"rounded","primary_font":"Inter","buttons_shape":"rounded","mobile_layout":"icon_with_text","primary_color":"#20124d","desktop_layout":"icon_with_text","launcher_shape":"circle","secondary_font":"Inter","container_shape":"rounded","mobile_placement":"left","button_text_color":"#FFFFFF","desktop_placement":"left","header_text_color":"#FFFFFF","powered_by_hidden":false,"launcher_text_color":"#ffffff","mobile_side_spacing":20,"desktop_side_spacing":20,"panel_order_settings":{"vip":3,"points":1,"referrals":2},"mobile_bottom_spacing":20,"desktop_bottom_spacing":20,"hide_widget_permanently":false,"hide_widget_launcher_on_mobile":false},"launcher_style_settings":{"enabled":false,"button_bg":"#20124d","header_bg":"#20124d","desc_color":"#737376","icon_color":"#3a3a3a","link_color":"#20124d","visibility":"both","cards_shape":"rounded","hide_widget":false,"launcher_bg":"#20124d","mobile_icon":"star","mobile_text":"Rewards","title_color":"#212b36","banner_image":"","desktop_icon":"star","desktop_text":"Rewards","inputs_shape":"rounded","primary_font":"Inter","buttons_shape":"rounded","mobile_layout":"icon_with_text","primary_color":"#20124d","desktop_layout":"icon_with_text","launcher_shape":"circle","secondary_font":"Inter","container_shape":"rounded","mobile_placement":"left","button_text_color":"#FFFFFF","desktop_placement":"left","header_text_color":"#FFFFFF","powered_by_hidden":false,"launcher_text_color":"#ffffff","mobile_side_spacing":20,"desktop_side_spacing":20,"panel_order_settings":{"vip":3,"points":1,"referrals":2},"mobile_bottom_spacing":20,"desktop_bottom_spacing":20,"hide_widget_permanently":false,"hide_widget_launcher_on_mobile":false},"points_program_enabled":false,"referral_program_enabled":false,"membership_program_enabled":false,"vip_program_enabled":false,"vip_progress_block_show_highest_tier":false,"vip_program_tier_type":"points_earned","vip_program_peri
3598od":"lifetime","floating_widget_settings":{"enabled":false,"button_bg":"#20124d","header_bg":"#20124d","desc_color":"#737376","icon_color":"#3a3a3a","link_color":"#20124d","visibility":"both","cards_shape":"rounded","hide_widget":false,"launcher_bg":"#20124d","mobile_icon":"star","mobile_text":"Rewards","title_color":"#212b36","banner_image":"","desktop_icon":"star","desktop_text":"Rewards","inputs_shape":"rounded","primary_font":"Inter","buttons_shape":"rounded","mobile_layout":"icon_with_text","primary_color":"#20124d","desktop_layout":"icon_with_text","launcher_shape":"circle","secondary_font":"Inter","container_shape":"rounded","mobile_placement":"left","button_text_color":"#FFFFFF","desktop_placement":"left","header_text_color":"#FFFFFF","powered_by_hidden":false,"launcher_text_color":"#ffffff","mobile_side_spacing":20,"desktop_side_spacing":20,"panel_order_settings":{"points":1,"referrals":2,"vip":3},"mobile_bottom_spacing":20,"desktop_bottom_spacing":20,"hide_widget_permanently":false,"hide_widget_launcher_on_mobile":false,"desktop_launcher_icon":null,"mobile_launcher_icon":null},"widget_custom_icons":{"brand_icon":null,"rewards":null,"ways_to_earn":null,"ways_to_redeem":null},"widget_css":"#baLoySectionWrapper .ba-loy-bg-color {\n background: linear-gradient(125deg, hsla(254,62%,19%,1), hsla(254,71%,3%,1));\n}\n\n#baLoySectionWrapper .section-panel-wrapper {\n box-shadow:rgba(0, 0, 0, 0.1) 0px 4px 15px 0px, rgba(0, 0, 0, 0.1) 0px 1px 2px 0px, #20124d 0px 2px 0px 0px inset;\n}\n\n\n\n\n.header-main, .header-secondary, .points-expiry-desc {\n color: #FFFFFF !important;\n}\n.main-default a.sign-in{\n color: #20124d !important;\n}\n\n.section-table-piece-detail-items .li-img path {\n fill: #3a3a3a;\n}\n\n.buttons-icons-detail-image .li-img {\n fill: #3a3a3a;\n}\n\n#baLoySectionWrapper .loy-button-main{\n background: #20124d;\n color: #FFFFFF;\n}\n\n #baLoySectionWrapper .loy-button-main{\n color: #FFFFFF;\n }\n\n #baLoySectionWrapper .main-default, #baLoySectionWrapper div.panel-section .head-title,#baLoySectionWrapper body {\n color: #212b36;\n }\n\n #baLoySectionWrapper .section-panel-wrapper .panel-desc, #baLoySectionWrapper .main-default.sign-in-text{\n color: #737376;\n }\n\n #launcher-wrapper{\n background: #20124d;\n }\n\n#baLoySectionWrapper div.section-bottom{\n display:none;\n}\n\n.ba-loy-namespace .ba-loy-messenger-frame, #launcher-wrapper{\n left: 20px;\n right: auto;\n}\n.ba-loy-namespace .ba-loy-messenger-frame {\n bottom: 90px;\n}\n#launcher-wrapper{\n bottom: 20px;\n}\n\n.launcher-text{\n color: #ffffff !important;\n}\n\n#launcher-wrapper .launcher-desktop { display: block; }\n#launcher-wrapper .launcher-mobile { display: none; }\n\n@media (max-device-width: 851px) and (orientation: landscape), (max-width: 500px) {\n .ba-loy-namespace .ba-loy-messenger-frame{\n height: 100%;\n min-height: 100%;\n bottom: 0;\n right: 0;\n left: 0;\n top: 0;\n width: 100%;\n border-radius: 0 !important;\n }\n #launcher-wrapper.up{\n display: none;\n }\n #launcher-wrapper{\n left: 20px;\n right: auto;\n bottom: 20px;\n }\n #launcher-wrapper .launcher-desktop { display: none; }\n #launcher-wrapper .launcher-mobile { display: block; }\n}\n\n\n\n.ba-loy-circle{border-radius: 30px !important;}\n.ba-loy-rounded{border-radius: 10px !important;}\n.ba-loy-square{border-radius: 0px !important;}\n","domain_name":"loyalty.rivo.io","font_settings":{"primary_font":"Inter","secondary_font":"Inter"},"translations":{"vip_perks":"Perks","vip_tiers":"VIP Tiers","general_by":"by","general_or":"OR","vip_reward":"VIP reward","vip_status":"VIP Status","general_day":"Day","social_like":"Like","social_share":"Share","vip_benefits":"Benefits","general_error":"Hmm, something went wrong, please try again shortly","general_month":"Month","general_point":"Point","general_spend":"you spend","general_spent":"Spent","social_follow":"Follow","tos_expiry_at":"Reward expires on {{expiry_date}}.","vip_tier_desc":"Gain access to exclusive rewards.","general_credit":"Credit","general_points":"Points","general_redeem":"Redeem","general_reward":"reward","vip_tier_spend":"Spend {{amount}}","general_credits":"Credits","general_go_back":"Go back","general_pending":"Pending","general_rewards":"Rewards","general_sign_in":"Sign in","general_sign_up":"Sign up","referrals_title":"Referral Program","review_complete":"Post a product review","survey_complete":"Complete a Survey","general_approved":"Approved","general_share_on":"Share on","general_you_have":"You have","tos_free_product":"Reward only applies to {{product_name}}","acct_creation_btn":"Start Earning","general_cancelled":"Cancelled","general_edit_date":"Edit Date","general_save_date":"Save date","general_show_more":"Show more","general_signed_up":"signed up","member_point_desc":"Earn points and turn these into rewards!","referral_complete":"Complete a Referral","tos_expiry_months":"Expires {{expiry_months}} month(s) after being redeemed.","vip_tier_achieved":"Unlocked {{tier_name}}","vip_tier_added_to":"Added to {{tier_name}}","acct_creation_desc":"Get rewarded for being an awesome customer","general_apply_code":"Apply code","general_share_link":"Share your Personal Link","referrals_email_to":"To","vip_achieved_until":"Achieved until","vip_tier_to_unlock":"to unlock","visitor_point_desc":"Earn points and turn these into rewards!","acct_creation_title":"Join and Earn Rewards","general_drop_points":"Limited time bonus points","general_reward_show":"Show","member_header_title":"{points}","member_point_header":"Points","referrals_completed":"referrals completed so far","vip_tier_dropped_to":"Fell to {{tier_name}}","vip_tier_on_highest":"You did it! You're on the highest tier ð","general_balance_text":"store credit","general_drop_credits":"Limited time bonus credits","general_past_rewards":"Past rewards","general_product_page":"product page","general_ways_to_earn":"Ways to earn","general_your_rewards":"Your rewards","referrals_email_send":"Send email","referrals_get_reward":"Get your","referrals_share_link":"Share this link with a friend for them to claim the reward","social_facebook_like"
3598:"Like page on Facebook","social_tiktok_follow":"Follow on TikTok","social_twitter_share":"Share link on X","tos_min_order_amount":"Applies to all orders over {{min_order_amount}}.","vip_tier_earn_points":"Earn {{points}} Points","vip_tier_retained_to":"Kept {{tier_name}}","vip_tier_vip_history":"VIP History","visitor_header_title":"Rewards Program","visitor_point_header":"Earn Points","acct_creation_sign_in":"Already a member?","general_cancel_points":"Points canceled","general_no_points_yet":"No Points yet","general_refund_points":"Points refunded","general_sms_subscribe":"Subscribe to SMS","member_header_caption":"Your points","social_facebook_share":"Share link on Facebook","social_handle_missing":"Please enter your handle","social_twitter_follow":"Follow on X","vip_reward_earned_via":"Earned via {{vip_tier_name}} tier","vip_you_have_achieved":"You've achieved","wallet_pass_subscribe":"Add Wallet Pass","general_apply_code_now":"Apply code now","general_cancel_credits":"Credits canceled","general_no_rewards_yet":"No rewards yet","general_place_an_order":"Place an order","general_points_expired":"Points expired","general_refund_credits":"Credits refunded","general_sms_subscribed":"Subscribed to SMS","general_upload_receipt":"Submit a Receipt","general_ways_to_redeem":"Ways to redeem","referrals_claim_reward":"Claim your gift","referrals_code_invalid":"This referral code is invalid","referrals_email_invite":"Refer friends by email","referrals_visitor_desc":"Refer a friend who makes a purchase and both of you will claim rewards.","review_complete_points":"{{points_amount}} Points for every review posted","tos_min_order_quantity":"Minimum {{min_order_quantity}} items required in cart.","visitor_header_caption":"Earn points, save, and unlock exclusive perks","general_birthday_reward":"Celebrate with a reward","general_challenge_photo":"Submit a Challenge Photo","general_credits_expired":"Credits expired","general_discount_amount":"points for ${{discount_amount}} off","general_email_subscribe":"Subscribe to Emails","general_expiration_date":"Expiration Date","general_no_activity_yet":"No activity yet","general_placed_an_order":"Placed an order","general_points_activity":"Points History","general_share_via_email":"Share via Email","general_upcoming_reward":"Upcoming reward","general_you_have_points":"You have {{points}} points","membership_order_placed":"Credits earned from placing an order","referrals_email_message":"Message","referrals_invalid_email":"Please enter a valid email address","referrals_referral_code":"Your referral link to share","social_instagram_follow":"Follow on Instagram","tos_apply_to_collection":"Only for products in specific collections.","tos_max_shipping_amount":"Maximum shipping amount of {{max_shipping_amount}}.","vip_tier_no_vip_history":"No VIP membership history yet","general_email_subscribed":"Subscribed to Emails","general_enter_valid_date":"Please enter a valid date","general_points_for_every":"Points for every","general_uploaded_receipt":"Submitted a Receipt","general_vip_tier_upgrade":"VIP Tier Upgrade Points","referral_complete_points":"{{points_amount}} Points for every referral completed","referrals_call_to_action":"Refer friends and earn","referrals_claimed_reward":"Here's your","referrals_create_account":"Create an Account","referrals_status_blocked":"blocked","referrals_status_pending":"pending","referrals_your_referrals":"Your referrals","activity_expiration_label":"Expires","general_click_to_see_more":"View My Rewards Account","general_product_purchased":"Product Purchased","general_redeemed_a_reward":"Redeemed a Reward","general_use_discount_code":"Use this discount code on your next order!","gift_card_sync_past_tense":"Gift card sync","referrals_already_visited":"Already visited this page","referrals_general_invalid":"Sorry, looks like this referral is invalid","referrals_referred_reward":"They will get","referrals_referrer_reward":"You will get","social_handle_placeholder":"@username","general_celebrate_birthday":"Celebrate a birthday","general_how_to_earn_points":"How do I earn Points?","loyalty_page_general_spent":"Spent","loyalty_page_rewards_title":"Rewards","referrals_no_referrals_yet":"No referrals yet","referrals_program_disabled":"This referral program is disabled","referrals_status_completed":"completed","review_complete_past_tense":"Posted a product review","survey_complete_past_tense":"Completed a Survey","general_add_product_to_cart":"Add product to cart","general_balance_text_plural":"Credits","general_drop_points_expired":"Limited time bonus points expired","general_fallback_first_name":"there","general_not_enough_earnings":"Not enough earnings to redeem","general_were_awarded_points":"were awarded points","loyalty_page_general_points":"Points","loyalty_page_general_redeem":"Redeem","activity_table_header_status":"Status","general_drop_credits_expired":"Limited time bonus credits expired","general_manual_points_adjust":"manual points adjustment","referral_complete_past_tense":"Completed a Referral","referrals_similar_ip_invalid":"We are unable to process referrals within the same IP address","social_provide_handle_button":"Share handle","social_provide_tiktok_handle":"Share your TikTok handle","store_credit_sync_past_tense":"Store credit sync","vip_tier_orders_placed_count":"Place {{amount}} Orders","general_activate_store_credit":"Activate Store Credit","general_apply_to_subscription":"Apply to
3598subscription","general_celebrate_anniversary":"Celebrate Loyalty Anniversary","general_punch_card_checkpoint":"Punch Card Checkpoint","general_redeem_error_vip_tier":"This reward requires a higher VIP tier","general_redeemed_store_credit":"Redeemed Store Credit","general_store_credit_redeemed":"{{store_credit_amount}} in store credit has been added to your account. Apply at checkout.","loyalty_page_rewards_subtitle":"You have the following rewards ready to use","checkout_ui_redeem_points_desc":"You have {{points}} points! Redeem for discounts on this order.","general_discount_amount_coupon":"${{discount_amount}} off coupon","general_have_not_earned_points":"You haven't earned any Points yet.","membership_page_benefits_title":"Membership Benefits","referrals_email_to_placeholder":"Add a comma-separated list of emails","referrals_name_must_be_present":"Please enter your first name","account_ui_loyalty_status_title":"Welcome, {{first_name}}! You have {{balance}} points","checkout_ui_redeem_points_login":"Log in","checkout_ui_redeem_points_title":"Redeem your points","general_add_points_default_note":"Points granted by points import","general_celebrate_your_birthday":"Let's celebrate your birthday! ð Please give us 30 days notice - otherwise, you'll have to wait another year.","general_please_choose_an_option":"Please choose an option from the","general_redeem_error_max_points":"Exceeded maximum points to spend","general_redeem_error_min_points":"Did not meet minimum points to redeem","loyalty_page_banner_earn_button":"Earn points","loyalty_page_rewards_no_rewards":"No rewards yet","loyalty_page_ways_to_earn_title":"Ways to Earn","referrals_email_already_claimed":"This email has already been claimed","referrals_general_invalid_title":"We're Sorry","social_facebook_like_past_tense":"Liked a page on Facebook","social_provide_instagram_handle":"Share your Instagram handle","social_tiktok_follow_past_tense":"Followed on TikTok","social_twitter_share_past_tense":"Shared a link on X","activity_table_header_expiration":"Expires At","loyalty_page_banner_login_button":"Sign In","loyalty_page_upload_receipt_help":"Upload a receipt within the last 30 days to earn points. Please lay the receipt on a flat surface and take a photo from a close distance.","social_facebook_share_past_tense":"Shared a link on Facebook","social_twitter_follow_past_tense":"Followed on X","wallet_pass_subscribe_past_tense":"Added Wallet Pass","account_slideout_home_login_title":"Sign in to manage your account","general_cashback_not_earned_title":"You didn't earn CashBack on this order","general_cross_collection_purchase":"Cross Collection Purchase","general_points_for_judgeme_review":"JudgeMe review","loyalty_page_banner_redeem_button":"Redeem Rewards","loyalty_page_subscribe_email_help":"Subscribe to our email list and earn points","loyalty_page_ways_to_redeem_title":"Ways to Redeem","membership_page_benefits_subtitle":"Here's an overview of your membership benefits","referrals_account_already_claimed":"You already have an account. You can invite your friends to win rewards!","vip_tier_products_purchased_count":"Purchase {{amount}} Specific Products","account_ui_loyalty_status_subtitle":"You're on the {{vip_tier_name}} tier","checkout_ui_activate_account_title":"Activate Your Account","checkout_ui_redeemed_rewards_title":"Your rewards","general_reset_removal_default_note":"Existing points removed for points reset from import","general_store_credit_transfer_sent":"Sent {{amount}} credit to {{recipient_email}}","loyalty_page_customer_birthday_day":"Day","loyalty_page_upload_receipt_attach":"Attach File","loyalty_page_upload_receipt_button":"Submit Receipt","loyalty_page_ways_to_earn_subtitle":"Earn points by completing these actions","referrals_your_referrals_show_here":"Your referrals will show here.","social_instagram_follow_past_tense":"Followed on Instagram","account_slideout_orders_login_title":"Sign in to view your orders","checkout_ui_points_estimation_title":"Complete this purchase to earn up to {{points}} points","checkout_ui_refer_friends_login_url":"account\/login?return_url=\/account\u0026email={{customer_email}}","general_cashback_not_earned_subject":"You didn't earn CashBack on this order","general_loyalty_program_and_rewards":"Loyalty Program \u0026 Rewards","general_vip_tier_upgrade_past_tense":"{{tier_name}} Entry Points","general_your_rewards_will_show_here":"Your rewards will show here.","loyalty_page_banner_logged_in_title":"Welcome to the program","loyalty_page_banner_register_button":"Join Now","loyalty_page_explainer_step_1_title":"Signup","loyalty_page_explainer_step_2_title":"Earn","loyalty_page_explainer_step_3_title":"Redeem","loyalty_page_subscribe_email_button":"Subscribe","loyalty_page_upload_receipt_no_file":"Please select a file to upload","loyalty_page_upload_receipt_success":"Thanks! Your receipt will be reviewed shortly","membership_page_banner_login_button":"Sign In","membership_page_banner_login_prefix":"Already a member?","membership_tier_unlocked_past_tense":"Membership Signup","referrals_email_message_placeholder":"Customize your referral message. The referral link will be automatically added.","account_slideout_profile_login_title":"Sign in to manage your profile","checkout_ui_redeem_points_login_desc":"to view your points balance and discover rewards available for redemption.","checkout_ui_redeem_store_credit_desc":"You have ${{store_credit}} in store credit.","general_cashback_not_earned_subtitle":"This order wasn't eligible for CashBack.","loyalty_page_banner_logged_out_title":"Join our Loyalty Program","loyalty_page_customer_birthday_month":"Month","loyalty_page_customer_birthday_title":"Celebrate your birthday","loyalty_page_ways_to_redeem_subtitle":"Redeem points for these rewards","vip_tier_product_ids_purchased_count":"Purchase {{amount}} Specific Products","checkout_ui_cashback_estimation_title":"Complete this purchase to earn up to {{cashback}} in CashBack","checkout_ui_install_wallet_pass_title":"Install our Wallet Pass for E
3598xclusive Offers","checkout_ui_points_estimation_subtext":"Loyalty points can be redeemed for rewards on future purchases. Actual points awarded may differ if other discounts are applied.","checkout_ui_redeem_store_credit_title":"Apply your store credit","checkout_ui_refer_friends_login_title":"Claim your points from this purchase !","general_applied_to_subscription_order":"Applied to subscription order","general_celebrate_birthday_past_tense":"Celebrated a birthday","general_choose_redemption_destination":"Choose to use it now or on your next subscription order","general_discount_code_applied_to_cart":"Discount applied to your cart","loyalty_page_general_enter_valid_date":"Please enter a valid date","account_dashboard_activity_block_title":"Your Activity","account_dashboard_member_card_cta_text":"View Rewards","account_dashboard_referral_block_title":"Refer a friend","general_reset_new_balance_default_note":"Points reset to new balance by points import","general_store_credit_transfer_received":"Received {{amount}} credit from {{sender_email}}","general_use_discount_code_free_product":"Use this discount code on your next order to get a free product!","loyalty_page_explainer_logged_in_title":"Hi \u003cspan rivo-x-data=\"{ username: $store.customer.first_name || 'there' }\" rivo-x-text=\"username\"\u003e\u003c\/span\u003e, you have \u003cstrong\u003e\u003cspan rivo-x-data rivo-x-text=\"$store.customer.pretty_points_tally\"\u003e\u003c\/span\u003e\u003c\/strong\u003e Points","loyalty_page_explainer_step_1_subtitle":"Create an account on our store","loyalty_page_explainer_step_2_subtitle":"Earn points for shopping","loyalty_page_explainer_step_3_subtitle":"Redeem points for discounts","loyalty_page_vip_tiers_logged_in_title":"VIP Tiers","membership_page_explainer_step_1_title":"Signup","membership_page_explainer_step_2_title":"Earn","membership_page_explainer_step_3_title":"Redeem","membership_recurring_signup_past_tense":"Recurring Credit","referrals_advocate_stats_email_claimed":"Claimed","checkout_ui_activate_account_button_url":"\/account\/login?return_url=\/account","checkout_ui_cashback_estimation_subtext":"CashBack can be redeemed for rewards on future purchases. Actual CashBack awarded may differ if other discounts are applied.","general_subscription_redemption_applied":"This reward will apply to your next subscription order","loyalty_page_activity_table_header_date":"Date","loyalty_page_activity_table_no_activity":"No activity yet","loyalty_page_explainer_logged_out_title":"How it Works","loyalty_page_vip_tiers_logged_out_title":"VIP Tiers","membership_page_banner_login_button_url":"\/account\/login?return_url=\/account","social_provide_tiktok_handle_past_tense":"Shared your TikTok handle","account_dashboard_member_card_body_title":"You have \u003cstrong\u003e\u003cspan rivo-x-data rivo-x-text=\"$store.customer.pretty_points_tally\"\u003e\u003c\/span\u003e\u003c\/strong\u003e Points","account_ui_loyalty_status_cta_button_url":"\/pages\/loyalty-program","checkout_ui_activate_account_button_text":"Activate Account","checkout_ui_activate_account_description":"Activate your loyalty account to start earning points, tracking rewards, and accessing exclusive member benefits.","checkout_ui_redeem_points_alternate_name":"points","checkout_ui_redeemed_rewards_description":"Your rewards available to use","checkout_ui_redeemed_rewards_login_title":"Log in","checkout_ui_refer_friends_referral_title":"Refer a Friend","general_celebrate_anniversary_past_tense":"Celebrated Loyalty Anniversary","loyalty_page_activity_expiration_warning":"Expiration Date: \u003cspan rivo-x-data rivo-x-text=\"$store.customer.points_expiry\"\u003e\u003c\/span\u003e","loyalty_page_customer_birthday_save_date":"Save Date","loyalty_page_upload_challenge_photo_help":"Upload a challenge photo to earn.","referrals_advocate_stats_email_completed":"Completed","referrals_create_account_to_claim_coupon":"Create an Account to claim your coupon","account_dashboard_referral_block_subtitle":"Give your friends a reward and claim your own when they make a purchase","account_ui_loyalty_status_cta_button_text":"View Rewards","checkout_ui_redeemed_rewards_select_label":"Select a Reward","loyalty_page_activity_table_header_action":"Activity","loyalty_page_banner_logged_in_description":"As a member, you will earn points for shopping","loyalty_page_explainer_logged_in_subtitle":"Here's an overview of your current points balance and recent activity","loyalty_page_vip_tiers_logged_in_subtitle":"You are on the \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.tier?.name\"\u003e\u003c\/span\u003e tier","membership_page_banner_add_to_cart_button":"Join Now","membership_page_explainer_step_1_subtitle":"Create an account on our store","membership_page_explainer_step_2_subtitle":"Earn points for shopping","membership_page_explainer_step_3_subtitle":"Redeem points for discounts","account_dashboard_member_card_header_title":"Welcome \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.first_name\"\u003e\u003c\/span\u003e","account_dashboard_vip_tiers_progress_t
3598itle":"VIP Tier Status","checkout_ui_install_wallet_pass_button_url":"\/#rivo","general_converted_to_credits_external_note":"Converted your points balance to store credit","general_converted_to_credits_internal_note":"Converted from points to store credit","loyalty_page_banner_logged_out_description":"Join for free and begin earning points \u0026 rewards every time you shop.","loyalty_page_general_activate_store_credit":"Activate Store Credit","loyalty_page_general_redeemed_store_credit":"Redeemed Store Credit","loyalty_page_upload_challenge_photo_attach":"Attach File","loyalty_page_upload_challenge_photo_button":"Submit Challenge Photo","loyalty_page_vip_tiers_logged_out_subtitle":"Join our VIP loyalty program to unlock exclusive rewards available only to members.","membership_page_activity_table_header_date":"Date","membership_page_activity_table_no_activity":"No activity yet","membership_page_banner_is_subscriber_title":"Welcome to our Membership Program","membership_page_status_is_subscriber_title":"You have an Active Membership","referrals_advocate_stats_email_link_clicks":"Link Clicks","social_provide_instagram_handle_past_tense":"Shared your Instagram handle","account_dashboard_member_card_body_subtitle":"You're on the \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.tier?.name\"\u003e\u003c\/span\u003e tier","account_dashboard_referral_block_share_html":"\u003ca href=\"\/pages\/refer-a-friend\"\u003eEmail your link to friends\u003c\/a\u003e or \u003ca href=\"\/pages\/refer-a-friend?popup_panel=email_stats\"\u003eget your stats\u003c\/a\u003e","checkout_ui_install_wallet_pass_button_text":"Install Wallet Pass","checkout_ui_install_wallet_pass_description":"Unlock exclusive offers and rewards with our Wallet Pass.","checkout_ui_login_notification_banner_title":"Have loyalty discounts or rewards that you'd like to apply?","checkout_ui_refer_friends_login_description":"Log in or register to activate your loyalty account, redeem your points and access your special offers.","loyalty_page_activity_table_header_earnings":"Points","loyalty_page_upload_challenge_photo_no_file":"Please select a file to upload","loyalty_page_upload_challenge_photo_success":"Thanks! Your challenge photo will be reviewed shortly","membership_page_activity_expiration_warning":"Expiration Date: \u003cspan rivo-x-data rivo-x-text=\"$store.customer.points_expiry\"\u003e\u003c\/span\u003e","membership_page_banner_non_subscriber_title":"Join our Membership Program","membership_recurring_anniversary_past_tense":"Membership Anniversary Credits","account_dashboard_unused_rewards_block_title":"Use your rewards","checkout_ui_redeem_incremental_earnings_desc":"How much of your {{balance}} in balance (equivalent to ${{balance_to_currency}}) would you like to redeem?","checkout_ui_refer_friends_login_button_title":"Activate my account","general_order_placed_store_credit_multiplier":"Earn cash back for every $1 spent","loyalty_page_vip_tiers_progress_column_title":"Tier Status","membership_page_activity_table_header_action":"Activity","referrals_advocate_stats_email_unique_visits":"Unique visits from your link","referrals_email_your_friend_has_referred_you":"Your friend has referred you to {{shop_name}}","account_dashboard_vip_tiers_progress_subtitle":"Earn \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.next_tier?.formatted_to_spend_or_earn\"\u003e\u003c\/span\u003e points to reach the \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.next_tier?.name\"\u003e\u003c\/span\u003e tier.","checkout_ui_login_notification_banner_subtext":"to login to your account","checkout_ui_redeem_incremental_earnings_login":"Log in","checkout_ui_redeem_incremental_earnings_title":"Redeem store balance","checkout_ui_redeem_points_select_custom_label":"{{reward_name}} orders ${{min_order_amount}}+ for {{points_amount}} points","checkout_ui_refer_friends_referral_button_url":"","loyalty_page_activity_table_header_expiration":"Expires At","membership_page_banner_add_to_cart_button_url":"\/membership-add-to-cart","membership_page_cancel_membership_modal_title":"Are you sure you want to cancel your membership?","membership_page_explainer_is_subscriber_title":"Hi \u003cspan rivo-x-data=\"{ username: $store.customer.first_name || 'there' }\" rivo-x-text=\"username\"\u003e\u003c\/span\u003e, you have \u003cstrong\u003e\u003cspan rivo-x-data rivo-x-text=\"$store.customer.pretty_credits_tally\"\u003e\u003c\/span\u003e\u003c\/strong\u003e in Store Credit","membership_page_status_is_subscriber_subtitle":"You will be charged next on \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.membership?.pretty_next_charge_date\"\u003e\u003c\/span\u003e","referrals_email_checkout_out_and_claim_reward":"Check out the referral link and claim a free reward.","account_dashboard_rewards_progress_block_t
3598itle":"Earn more rewards","checkout_ui_gift_with_purchase_applied_message":"Free gift applied","checkout_ui_redeem_points_select_discount_desc":"Please select a discount","checkout_ui_redeem_points_store_credit_success":"{{store_credit_amount}} in store credit redeemed. Apply to this order from the payment section.","checkout_ui_redeemed_rewards_login_description":"to view your rewards available to use.","checkout_ui_refer_friends_referral_description":"Share your referral link with friends and earn rewards each time a new friend makes a purchase.","membership_page_activity_table_header_earnings":"Points","membership_page_cancel_membership_modal_button":"Yes, Cancel my Membership","membership_page_explainer_non_subscriber_title":"How it Works","account_dashboard_unused_rewards_block_subtitle":"Use your previously redeemed rewards:","checkout_ui_login_notification_banner_link_text":"Click here","checkout_ui_redeem_points_select_discount_label":"Select Discount","checkout_ui_redeemed_rewards_select_description":"Please select a reward","checkout_ui_refer_friends_referral_button_title":"Refer a Friend","general_store_credit_transfer_sent_via_gift_url":"Sent {{amount}} credit via gift URL {{transfer_url}}","loyalty_page_vip_tiers_progress_column_subtitle":"Earn \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.next_tier?.formatted_to_spend_or_earn\"\u003e\u003c\/span\u003e points to reach the \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.next_tier?.name\"\u003e\u003c\/span\u003e tier.","membership_page_status_update_payment_link_text":"Update Payment Method","referrals_advocate_stats_email_no_referrals_yet":"No referrals yet.","account_dashboard_unused_rewards_block_date_text":"Redeemed on: {{date}}","membership_page_activity_table_header_expiration":"Expires At","membership_page_banner_is_subscriber_description":"You'v unlocked exclusive savings, rewards \u0026 VIP access.","membership_page_explainer_is_subscriber_subtitle":"Here's an overview of your current credits balance and recent activity","account_dashboard_referral_block_copy_button_text":"Copy","account_dashboard_rewards_progress_block_subtitle":"Earn another \u003cspan rivo-x-data rivo-x-text=\"$store.customer.pretty_points_amount_to_next_reward\"\u003e\u003c\/span\u003e points to unlock a \u003cspan rivo-x-data rivo-x-text=\"$store.customer.next_reward?.name\"\u003e\u003c\/span\u003e reward\u003c\/p\u003e","account_dashboard_unused_rewards_block_no_rewards":"No rewards yet","checkout_ui_redeem_store_credit_apply_button_text":"Apply Store Credit","membership_page_banner_non_subscriber_description":"Unlock exclusive savings, rewards \u0026 VIP access.","membership_page_update_payment_method_modal_title":"Update Payment Method","checkout_ui_redeem_incremental_earnings_login_desc":"to view your balance.","membership_page_status_cancel_membership_link_text":"Cancel","membership_page_status_rejoin_membership_link_text":"Rejoin Membership","checkout_ui_refer_friends_referral_text_field_label":"Your referral link","membership_page_cancel_membership_modal_description":"We'd hate to see you leave. Your membership includes exclusive benefits that you'll lose access to immediately.","checkout_ui_redeem_incremental_earnings_desc_applied":"You're using {{applied_balance}} of your available {{balance}} in store credit","membership_page_status_pending_cancellation_subtitle":"Your membership will be cancelled on \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.membership?.pretty_queued_for_cancellation_at\"\u003e\u003c\/span\u003e","checkout_ui_cashback_estimation_title_usd_to_currency":"Complete this purchase to earn up to {{cashback_usd_to_currency}} in CashBack","referrals_advocate_stats_email_friends_order_verified":"Friends order was verified","referrals_advocate_stats_email_referral_link_to_share":"Here's your referral link to share with friends.","referrals_advocate_stats_email_friend_claimed_discount":"Friend claimed discount","account_dashboard_vip_tiers_progress_completed_subtitle":"Congrats! You've reached the highest tier.","checkout_ui_cashback_estimation_subtext_usd_to_currency":"CashBack can be redeemed for rewards on future purchases. Actual CashBack awarded may differ if other discounts are applied.","checkout_ui_post_purchase_account_activation_button_url":"\/account\/login?return_url=\/account","membership_page_update_payment_method_modal_description":"We've sent you an email to update your payment method. Please check your inbox and follow the instructions.","checkout_ui_redeem_incremental_earnings_form_input_label":"Earnings amount","checkout_ui_redeem_incremental_discount_code_change_error":"{{code}} couldn't be used with your existing discounts.","checkout_ui_redeem_incremental_earnings_form_submit_button":"Redeem","checkout_ui_redeem_points_not_enough_points_banner_message":"You're {{points_amount}} points away from a reward","account_dashboard_rewards_progress_block_completed_subtitle":"Keep earning points to unlock more rewards","checkout_ui_redeem_incremental_earnings_desc_usd_to_currency":"You have {{formatted_credits_tally_usd_to_currency}}) in store credit to redeem (subject to FX rates at time of redemption)","checkout_ui_redeem_incremental_earnings_store_credit_success":"{{store_credit_amount}} in store credit redeemed. Apply to this order from the payment section.","checkout_ui_redeem_incremental_earnings_desc_usd_to_currency_applied":"You're using {{applied_balance_to_currency}} of your available {{formatted_credits_tally_usd_to_currency}} in store credit"},"custom_css":null,"ways_to_earn":[{"id":320375,"title":"Sign up","status":"active","name":null,"trigger":"customer_member_enabled","points_amount":100,"credits_amount":0.0,"balance_amount":100,"description":null,"url":null,"button_text":null,"pretty_earnings_text":"100 Points","card_click_method":null,"hidden_from_ui":false,"creation_source":null,"translations":[],"multi_balance_settings_by_tiers":{},"multipliers":[],"currency_base_amount":1,"points_type":"fixed"},{"id":320376,"title":"Place an order","status":"active","name":null,"trigger":"order_placed","points_amount":1,"credits_amount":0.0,"balance_amount":1,"description":"Earn cash back for every $1 spent","url":null,"button_text":null,"pretty_earnings_text":"1 Points","card_click_method":null,"hidden_from_ui":false,"creation_source":null,"translations":[],"multi_balance_settings_by_tiers":{},"multipliers":[],"currency_base_amount":1,"points_type":"multiplier"}],"points_rewards":[{"id":379708,"name":"£5 off coupon","enabled":true,"points_amount":500,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"£5 off coupon (500 points required)","icon_url":null,"pretty_points_amount":"500","purchase_type":"one_time","recurring_cycle_limit":null,"min_order_quantity":null,"translations":[],"reward_value":5.0,"min_order_value_in_cents":null,"terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":"","translated_terms_of_service":{}},{"id":379709,"name":"£10 off coupon","enabled":true,"points_amount":1000,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"£10 off coupon (1,000 points required)","icon_url":null,"pretty_points_amount":"1,000","purchase_type":"one_time","recurring_cycle_limit":null,"min_order_quantity":null,"translations":[],"reward_value":10.0,"min_order_value_in_cents":null,"terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":"","translated_terms_of_service":{}},{"id":379710,"name":"£20 off coupon","enabled":true,"points_amount":2000,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"£20 off coupon (2,000 points required)","icon_url":null,"pretty_points_amount":"2,000","purchase_type":"one_time","recurring_cycle_limit":null,"min_order_quantity":null,"translations":[],"reward_value":20.0,"min_order_value_in_cents":null,"terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":"","translated_terms_of_service":{}}],"rewards":[{"id":379708,"name":"£5 off coupon","enabled":true,"points_amount":500,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"£5 off coupon (500 points required)","icon_url":null,"pretty_points_amount":"500","purchase_type":"one_time","recurring_cycle_limit":null,"min_order_quantity":null,"translations":[],"reward_value":5.0,"min_order_value_in_cents":null,"terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":"","translated_terms_of_service":{}},{"id":379709,"name":"£10 off coupon","enabled":true,"points_amount":1000,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"£10 off coupon (1,000 points required)","icon_url":null,"pretty_points_amount":"1,000","purchase_type":"one_time","recurring_cycle_limit":null,"min_order_quantity":null,"translations":[],"reward_value":10.0,"min_order_value_in_cents":null,"terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":"","translated_terms_of_service":{}},{"id":379710,"name":"£20 off coupon","enabled":true,"points_amount":2000,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"£20 off coupon (2,000 points required)","icon_url":null,"pretty_points_amount":"2,000","purchase_type":"one_time","recurring_cycle_limit":null,"min_order_quantity":null,"translations":[],"reward_value":20.0,"min_order_value_in_cents":null,"terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":"","translated_terms_of_service":{}}],"referral_rewards":{"referrer_reward":{"id":379711,"name":"£5 off coupon","reward_type":"fixed_amount","properties":{"applies_to":"entire","auto_redeem_enabled":false,"refund_on_expiry_enabled":false,"hide_from_checkout_enabled":false,"min_order_value_excludes_free_product":false,"applies_to_full_price_items_only":false,"translations":[]}},"referred_reward":{"id":379712,"name":"£5 off coupon","reward_type":"fixed_amount","properties":{"applies_to":"entire","auto_redeem_enabled":false,"refund_on_expiry_enabled":false,"hide_from_checkout_enabled":false,"min_order_value_excludes_free_product":false,"applies_to_full_price_items_only":false,"translations":[]}}},"referral_settings":{"referrals_landing_path":"","referrals_landing_domain":null},"referral_social_settings":{"facebook":false,"email":true,"twitter":false,"twitter_message":"","sms":true,"sms_message":"","whatsapp":false,"whatsapp_message":"","share_order":["sms","email","link","twitter","facebook","whatsapp"]},"referrals_customer_account_required":false,"friend_discounts_disabled":false,"vip_tiers":[{"id":294569,"name":"Bronze","threshold":0,"perks":[],"icon_url":null,"desc":"\u003cspan\u003eEarn 0 Points \u003c\/span\u003e","translations":[],"rewards":[],"threshold_text":null},{"id":294570,"name":"Silver","threshold":500,"perks":[],"icon_url":null,"desc":"\u003cspan\u003eEarn 500 Points \u003c\/span\u003e","translations":[],"rewards":[],"threshold_text":null},{"id":294571,"name":"Gold","threshold":1250,"perks":[],"icon_url":null,"desc":"\u003cspan\u003eEarn 1,250 Points \u003c\/span\u003e","translations":[],"rewards":[],"threshold_text":null}],"account_embed_widget_settings":{"enabled":false,"target_page":"customers\/account","custom_insert_method":"beforeend"},"loyalty_landing_page_settings":{"enabled":false,"template_suffix":"rivo-loyalty-landing-page","vip_tiers_table_data":[]},"membership_landing_page_settings":{"enabled":false,"template_suffix":"rivo-membership-landing-page"},"account_dashboard_settings":{},"forms":[],"points_expiry_enabled":false,"credits_expiry_enabled":false,"points_per_points_log_expiry_enabled":false,"credits_per_points_log_expiry_enabled":false,"frontend":{},"referral_campaigns":[],"paid_membership_settings":{"landing_path":"\/","credits_enabled":false,"product_enabled":false,"legacy_product_ids":[],"cancellation_policy":"immediate","final_reminder_days":3,"rebill_reminder_days":5,"migration_mode_enabled":false,"rebill_attempt_interval":"hourly","custom_dashboard_enabled":false,"daily_rebill_attempt_utc_hour":16,"landing_path_redirect_enabled":true,"default_enrollment_tier_method":"customer_creation","failed_payments_retry_schedule":[{"days_after_last_retry":1},{"days_after_last_retry":2},{"days_after_last_retry":3},{"days_after_last_retry":5},{"days_after_last_retry":5},{"days_after_last_retry":5},{"days_after_last_retry":5}],"daily_failed_payments_attempt_utc_hour":23,"selling_plan_after_add_to_cart_js_method":"redirect_to_cart","membership_gift_order_count_starts_at_enrollment":false},"checkout_ui_settings":{"global_show_login_url":"\/customer_authentication\/login?return_to=\/checkout","global_show_login_enabled":false,"redeem_points_max_rewards":10,"redeem_store_credit_button_kind":"primary","global_show_login_header_enabled":false,"shopify_markets_metaobject_enabled":false,"redeem_points_use_custom_select_label":false,"redeem_points_expanded_version_enabled":false,"redeem_points_only_show_from_countries":[],"redeem_points_show_all_rewards_enabled":false,"redeem_points_select_apply_button_enabled":false,"redeemed_rewards_only_show_from_countries":[],"post_purchase_referral_hide_from_countries":[],"redeem_points_default_select_label_enabled":true,"hide_all_checkout_extensions_from_countries":[],"post_purchase_referral_preview_mode_enabled":false,"only_show_checkout_extensions_from_countries":[],"post_purchase_referral_share_buttons_enabled":false,"redeem_points_disable_reward_options_enabled":false,"redeem_store_credit_only_show_from_countries":[],"redeem_points_hide_redeem_when_discount_exists":false,"redeem_points_not_enough_points_banner_enabled":false,"post_purchase_referral_only_show_from_countries":[],"redeem_incremental_earnings_balance_to_currency":false,"redeem_points_expanded_show_custom_icons_enabled":true,"redeemed_rewards_hide_selections_when_no_options":false,"post_purchase_account_activation_button_full_width":true,"cashback_estimation_balance_usd_to_currency_enabled":false,"redeem_points_hide_redeem_when_free_product_applied":false,"redeem_incremental_earnings_only_show_from_countries":[],"redeem_points_hide_selections_unless_discount_exists":false,"post_purchase_account_activation_preview_mode_enabled":false,"post_purchase_referral_always_show_to_advocate_enabled":false,"redeemed_rewards_hide_selections_when_discount_applied":false,"post_purchase_account_activation_membership_mode_enabled":false,"redeem_incremental_earnings_balance_applied_mode_enabled":false,"redeem_incremental_earnings_input_amount_stepper_enabled":false,"post_purchase_account_activation_only_show_from_countries":[],"post_purchase_install_wallet_pass_only_show_from_countries":[],"redeem_incremental_earnings_balance_usd_to_currency_enabled":false,"redeem_incremental_earnings_hide_redeem_when_discount_exists":false,"redeem_incremental_earnings_hide_redeem_when_insufficient_balance":false,"redeem_incremental_earnings_hide_redeem_unless_minimum_order_value_is_met":false},"discount_code_prefix_settings":{"global_prefix":"BAL-","loyalty_gift_prefix":"LGIFT-"},"membership_tiers":[],"credit_mode":false,"active_bonus_campaign":null,"active_bonus_campaigns":[],"js_api_config":{"emit_points_balances_on_load":false},"auto_login":{"enabled":false,"email_provider":"kl","email_identifier":"utm_klaviyo_profile_id","auto_login_reload_enabled":false,"auto_login_bypass_only_mode_enabled":false},"account_widget_settings":{"logo":"\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0868\/8939\/8562\/t\/1\/assets\/bo-tee%20(1).jpg?v=1740609765\"\/\u003e","enabled":true,"or_text":"OR","city_text":"City","edit_text":"Edit","name_text":"Name","custom_css":"\n\n .rivo-slideout__container input{\n border: 1px solid #8c8c8c !important;\n border-radius: 6px !important;\n }\n\n .rivo-slideout__header a.rivo-aw-logo svg, .rivo-slideout__header a.rivo-aw-logo img{\n max-height: 30px;\n }\n\n .rivo-login-component .rivo-checkbox-container{\n margin-top: 15px;\n }\n\n .rivo-aw-logged-out .
3598rivo-slideout-content-wrapper:nth-of-type(2){\n margin-top: 15px;\n }\n\n .rivo-checkbox-label{\n font-weight: 500;\n }\n\n .rivo-aw-logged-out .rivo-login-email-container .rivo-login-subtitle{\n display:none;\n }\n\n .rivo-login-component .rivo-aw-title{\n margin-bottom: 20px !important;\n }\n\n .rivo-slideout__container{\n left: auto;\n }\n\n .rivo-slideout__container .btn--primary{\n background: #fae0df;\n color: #141414;\n font-weight: 800;\n border: none !important;\n border-radius: 0px !important;\n cursor: pointer;\n }\n\n .rivo-slideout__close, .rivo-aw-mini-modal__close{\n font-weight: 800;\n }\n\n .rivo-aw-home-recently-viewed .rivo-mini-block-title,\n .rivo-aw-home-recently-viewed .rivo-mini-block-subtitle{\n display: none;\n }\n\n .rivo-aw-home-recently-viewed .rivo-product-image{\n height: 150px;\n }\n\n .rivo-aw-home-popular-today .rivo-product-image{\n width: 140px;\n height: 210px;\n }\n\n .rivo-aw-home-popular-today .rivo-mini-block-title{\n -webkit-line-clamp: 3;\n max-height: 75px;\n }\n\n .rivo-aw-home-popular-today a.rivo-mini-block-link{\n width: 140px;\n }\n\n .rivo-mini-block-title{\n font-weight: 500;\n }\n\n .rivo-slideout-navigation a.active:before{\n background-color: #141414;\n }\n\n.rivo-aw-button-points-balance-container, .rivo-aw-button-gift-card-balance-container{\n background-color: #141414;\n color: #FFF;\n border-radius: 4px;\n padding: 22px;\n}\n\n.rivo-mini-block-link{\n width: 100px;\n}\n\n.rivo-product-image{\n width: 100px;\n height: 150px;\n}\n\n:not(.rivo-popular-today-products) .rivo-mini-block-title,\n:not(.rivo-popular-today-products) .rivo-mini-block-price {\n display: none;\n}\n\n.rivo-aw-button-component-cta-text{\n text-transform: none;\n}\n\n.rivo-slideout__container .btn-Button-secondary{\n background: transparent;\n color: #141414;\n border-color: #141414;\n}\n\na.rivo-collection-item{\n font-size: 13px;\n}\na.rivo-collection-item:hover{\n background-color: #000000;\n color: #FFFFFF;\n}\n\n.rivo-google-login-button{\n border-color: #0000002e !important;\n}\n\n.rivo-aw-logged-in .rivo-aw-home-hero{\n display: none;\n}\n\n.rivo-slideout__header a.rivo-aw-logo svg, .rivo-slideout__header a.rivo-aw-logo img {\n max-height: 30px;\n width: auto;\n max-height: 15px;\n}\n\n.rivo-mini-block-price .rivo-product-price{\n display: none !important;\n}\n\n.rivo-popular-today-products .rivo-mini-block-title,\n.rivo-popular-today-products .rivo-product-price{ \n display: flex !important;\n}\n\n.rivo-login-component form input[type=submit]{\n background: #000;\n}\n\n.rivo-login-component form input[type=submit]:hover{\n color: #FAFAFA;\n}\n\ninput[name=\"otc_login[code]\"]{\n background: none;\n}\n\n.rivo-popular-today-products .rivo-mini-block-price{\n display: flex !important;\n}","email_text":"Email","order_text":"Order","phone_text":"Phone","taxes_text":"Taxes","total_text":"Total","cards_shape":"rounded","delete_text":"Delete","select_text":"Select","address_text":"Address","company_text":"Company","country_text":"Country","inputs_shape":"rounded","buttons_shape":"rounded","discount_text":"Discount","primary_color":"#000000","province_text":"Province","shipping_text":"Shipping","sold_out_text":"Sold out","subtotal_text":"Subtotal","zip_code_text":"ZIP Code","community_text":"Community","home_cta_1_url":"\/pages\/loyalty-program","home_cta_2_url":"","home_cta_3_url":"","last_name_text":"Last Name","launcher_shape":"circle","container_shape":"rounded","favorites_title":"Favorites","first_name_text":"First Name","home_cta_1_text":"View Rewards","home_cta_2_text":"Manage Subscriptions","home_cta_3_text":"","input_font_size":14,"show_powered_by":false,"add_to_cart_text":"Add to Cart","amount_paid_text":"Amount paid","footer_font_size":14,"footer_home_text":"For You","google_client_id":"105612801293-sameovm86585pon5peultgqlp451r1l5.apps.googleusercontent.com","net_payment_text":"Net payment","saved_cart_title":"Saved from Cart","toast_font_color":"#ffffff","are_you_sure_text":"Are you sure you want to?","cache_app_enabled":false,"collections_title":"Collections","community_enabled":false,"contact_info_text":"Contact info","currency_decimals":0,"default_font_size":16,"desktop_placement":"left","email_placeholder":"Email","favorites_enabled":false,"google_login_text":"Sign in with Google","home_referral_url":"\/pages\/refer-a-friend","login_button_text":"SIGN IN","login_footer_text":"","login_issues_link":"\/account\/login","login_issues_text":"Click here to sign in with your password if you are having issues","my_addresses_text":"My Addresses","onload_javascript":"function setWithdrawButton(){\n if (window.location.hash.includes(\"rivo-order-details--\")) {\n const currentOrder = window.RivoProfileAlpine.store(\"current_order\");\n const fulfillment = window.RivoProfileAlpine.store(\"current_order\")?.fulfillments?.[0];\n const shippingCountry = currentOrder?.shipping_address?.country_code;\n\n \/\/ Find the button by its exact text content\n const allLinksAndButtons = document.querySelectorAll(\".rivo-order-details-page .rivo-aw-ctas a, .rivo-order-details-page .rivo-aw-ctas button\");\n let withdrawBtn = null;\n \n allLinksAndButtons.forEach(el =\u003e {\n if (el.textContent.trim() === \"Withdraw From Contract\") {\n withdrawBtn = el;\n }\n });\n\n if (withdrawBtn) {\n \/\/ Hide the button by default until conditions are verified\n withdrawBtn.style.display = \"none\";\n\n if (fulfillment \u0026\u0026 shippingCountry) {\n const fulfillmentDate = new Date(fulfillment.created_at);\n const now = new Date();\n const daysDifference = (now - fulfillmentDate) \/ (1000 * 60 * 60 * 24);\n\n const euEftaCountries = [\n 'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', \n 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', \n 'PL', 'PT', 'RO', 'SK', '
3598SI', 'ES', 'SE', \n 'IS', 'LI', 'NO', 'CH'\n ];\n\n \/\/ Show ONLY if customer is EU\/EFTA AND within 21 days of fulfillment\n if (euEftaCountries.includes(shippingCountry) \u0026\u0026 daysDifference \u003c= 21) {\n withdrawBtn.style.display = \"block\";\n }\n }\n }\n }\n}\n\nif (window.location.hash.includes(\"rivo-order-details--\")) {\n let runCount = 0;\n const interval = setInterval(() =\u003e {\n setWithdrawButton();\n runCount++;\n if (runCount \u003e= 20) {\n clearInterval(interval);\n }\n }, 1000);\n}","order_placed_text":"Placed on","verify_title_text":"Enter the code we just sent to [[email]]","all_favorites_text":"All Favorites","external_login_url":"https:\/\/boandtee.com\/customer_authentication\/login?return_to=\/?show_rivo_account=true","footer_orders_text":"Orders","home_cta_1_enabled":false,"home_cta_2_enabled":false,"home_cta_3_enabled":false,"latest_order_title":"Latest Order","notifications_text":"Notifications","privacy_policy_url":"\/pages\/our-policies","profile_list_links":[{"url":"https:\/\/boandtee.zendesk.com\/hc\/en-gb","text":"Help \u0026 FAQ","open_new_tab":true},{"url":"\/pages\/delivery-information","text":"Delivery Information","open_new_tab":true},{"url":"\/pages\/returns","text":"Returns Information","open_new_tab":true},{"url":"\/pages\/online-clothing-bank","text":"Online Clothing Bank","open_new_tab":true}],"reload_after_login":false,"saved_cart_enabled":true,"shop_login_enabled":false,"verify_button_text":"Verify Code","address_line_2_text":"Apartment, suite, etc.","apple_login_enabled":false,"delete_address_text":"Yes, Delete Address","external_login_text":"Sign in or Sign up","footer_profile_text":"Profile","home_referral_title":"Refer a Friend \u0026 Earn","locale_urls_enabled":false,"mobile_side_spacing":20,"my_preferences_text":"My Preferences","payment_method_text":"Payment Method","popular_today_title":"Popular Today","select_country_text":"Select Country","select_options_text":"Select Options","skip_edgemesh_cache":false,"slideout_icon_color":"#000000","taxes_included_text":"Taxes (included)","update_profile_text":"Update Profile","view_favorites_text":"View Favorites","amount_refunded_text":"Amount refunded","billing_address_text":"Billing Address","desktop_side_spacing":20,"excluded_product_ids":[],"favorites_load_delay":0,"footer_icons_enabled":false,"google_login_enabled":true,"hide_rivo_login_form":true,"home_logged_in_title":"","legacy_gift_card_app":"","legacy_login_enabled":true,"order_cancelled_text":"Cancelled on","profile_log_out_text":"SIGN OUT","save_collection_text":"Save Collection","select_province_text":"Select Province","shipping_method_text":"Shipping Method","terms_of_service_url":"\/pages\/our-policies","address_default_badge":"Default","alternate_login_title":"Having issues signing in?","featured_content_link":"","featured_home_content":"","home_logged_out_title":"Easily save your shopping history and track and return orders in one place","home_referral_enabled":false,"legacy_membership_app":"","mobile_bottom_spacing":20,"order_returns_enabled":true,"order_returns_partner":"custom_link","popular_today_enabled":true,"recently_viewed_title":"Recently Viewed","redeem_rewards_filter":"all","replace_account_links":true,"shipping_address_text":"Shipping Address","slideout_border_color":"#eaeaea","vip_tier_progress_url":"\/pages\/loyalty-program","add_to_collection_text":"Add to Collection","compare_at_price_color":"#c70000","custom_sub_cta_content":"","custom_sub_cta_enabled":false,"desktop_bottom_spacing":20,"external_login_enabled":true,"featured_content_title":"","hide_sold_out_products":false,"home_referral_subtitle":"\u003cspan rivo-ax-text='$store.rivo_profile_customer?.referral_stats?.completed_count'\u003e\u003c\/span\u003e referrals completed so far","home_wallet_pass_title":"Add Wallet Pass","login_footer_font_size":15,"next_billing_date_text":"You will be charged next on \u003cspan rivo-ax-text='$store.membership_subscription_contract.pretty_next_billing_date_at'\u003e\u003c\/span\u003e","order_tracking_partner":"custom_link","orders_logged_in_title":"Your Orders","popular_products_count":20,"product_rating_enabled":false,"profile_pos_qr_enabled":false,"shop_pay_login_enabled":true,"slideout_subdued_color":"#f7f7f7","toast_background_color":"#000000","added_to_cart_link_text":"Go to Cart","additional_details_text":"Additional Details","alternate_login_enabled":false,"custom_sms_consent_text":"","home_logged_in_subtitle":"","home_referral_copy_text":"Referral link copied to clipboard","ignore_inventory_policy":false,"order_buy_again_enabled":false,"order_returns_subdomain":"boandtee","orders_empty_state_text":"You haven't placed any orders yet","orders_logged_out_title":"Log in to view, track, and manage your orders","post_login_reload_paths":[],"post_sign_in_javascript":"function setWithdrawButton(){\n if (window.location.hash.includes(\"rivo-order-details--\")) {\n const currentOrder = window.RivoProfileAlpine.store(\"current_order\");\n const fulfillment = window.RivoProfileAlpine.store(\"current_order\")?.fulfillments?.[0];\n const shippingCountry = currentOrder?.shipping_address?.country_code;\n\n const allLinksAndButtons = document.querySelectorAll(\".rivo-order-details-page .rivo-aw-ctas a, .rivo-order-details-page .rivo-aw-ctas button\");\n let withdrawBtn = null;\n \n allLinksAndButtons.forEach(el =\u003e {\n if (el.textContent.trim() === \"Withdraw From Contract\") {\n withdrawBtn = el;\n }\n });\n\n if (withdrawBtn) {\n withdrawBtn.style.display = \"none\";\n\n if (fulfillment \u0026\u0026 shippingCountry) {\n const fulfillmentDate = new Date(fulfillment.created_at);\n const now = new Date();\n const daysDifference = (now - fulfillmentDate) \/ (1000 * 60 * 60 * 24);\n\n const euEftaCountries = [\n 'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', \n 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', \n 'PL', 'PT', 'RO', 'SK', '
3598SI', 'ES', 'SE', \n 'IS', 'LI', 'NO', 'CH'\n ];\n\n if (euEftaCountries.includes(shippingCountry) \u0026\u0026 daysDifference \u003c= 21) {\n withdrawBtn.style.display = \"block\";\n }\n }\n }\n }\n}\n\nif (window.location.hash.includes(\"rivo-order-details--\")) {\n let runCount = 0;\n const interval = setInterval(() =\u003e {\n setWithdrawButton();\n runCount++;\n if (runCount \u003e= 20) {\n clearInterval(interval);\n }\n }, 1000);\n}","product_rating_provider":"okendo","recently_viewed_enabled":true,"refresh_cart_javascript":"","section_title_font_size":15,"shopify_markets_enabled":false,"survey_next_button_text":"Next","survey_skip_button_text":"Skip","alternate_login_subtitle":"Use one of the following methods below to sign in.","custom_hide_product_tags":[],"desktop_sidebar_position":"right","home_logged_out_subtitle":"Get access to your rewards, referrals, and more","home_wallet_pass_enabled":false,"legacy_gift_card_enabled":false,"order_cancel_button_text":"Cancel Order","replace_legacy_app_links":true,"shipping_addresses_title":"Shipping Addresses","verify_login_issues_link":"\/#rivo","verify_login_issues_text":"Having issues? Click here to try again.","community_cover_image_url":"","featured_content_subtitle":"","home_button_gift_card_url":"","home_cta_1_primary_button":true,"home_cta_2_primary_button":false,"home_cta_3_primary_button":false,"home_wallet_pass_subtitle":"Unlock exclusive rewards and offers.","legacy_points_balance_app":"","on_hash_change_javascript":"function setWithdrawButton(){\n if (window.location.hash.includes(\"rivo-order-details--\")) {\n const currentOrder = window.RivoProfileAlpine.store(\"current_order\");\n const fulfillment = window.RivoProfileAlpine.store(\"current_order\")?.fulfillments?.[0];\n const shippingCountry = currentOrder?.shipping_address?.country_code;\n\n const allLinksAndButtons = document.querySelectorAll(\".rivo-order-details-page .rivo-aw-ctas a, .rivo-order-details-page .rivo-aw-ctas button\");\n let withdrawBtn = null;\n \n allLinksAndButtons.forEach(el =\u003e {\n if (el.textContent.trim() === \"Withdraw From Contract\") {\n withdrawBtn = el;\n }\n });\n\n if (withdrawBtn) {\n withdrawBtn.style.display = \"none\";\n\n if (fulfillment \u0026\u0026 shippingCountry) {\n const fulfillmentDate = new Date(fulfillment.created_at);\n const now = new Date();\n const daysDifference = (now - fulfillmentDate) \/ (1000 * 60 * 60 * 24);\n\n const euEftaCountries = [\n 'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', \n 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', \n 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', '
3598SE', \n 'IS', 'LI', 'NO', 'CH'\n ];\n\n if (euEftaCountries.includes(shippingCountry) \u0026\u0026 daysDifference \u003c= 21) {\n withdrawBtn.style.display = \"block\";\n }\n }\n }\n }\n}\n\nif (window.location.hash.includes(\"rivo-order-details--\")) {\n let runCount = 0;\n const interval = setInterval(() =\u003e {\n setWithdrawButton();\n runCount++;\n if (runCount \u003e= 20) {\n clearInterval(interval);\n }\n }, 1000);\n}","order_returns_button_text":"Start a Return","order_returns_custom_link":"https:\/\/boandtee.com\/apps\/returns?order_number={{order.name}}\u0026email={{order.email}}","slideout_background_color":"#ffffff","accepts_sms_marketing_text":"Text me with news and offers","add_shipping_address_title":"Add Shipping Address","added_to_cart_link_enabled":false,"alternate_login_email_text":"Sign in with an email and password","create_new_collection_text":"Create New Collection","favorites_empty_state_text":"No favorited products","featured_content_image_url":"","home_button_membership_url":"","logged_out_title_font_size":15,"membership_cover_image_url":"","mini_block_title_font_size":15,"order_tracking_button_text":"Track Shipment","order_tracking_custom_link":"https:\/\/boandtee.com\/apps\/aftership\/order-status?order-number={{order.name}}\u0026email={{order.email}}","primary_button_class_names":"btn-Primary","redirect_from_account_page":true,"save_shipping_address_text":"Save Shipping Address","vip_progress_block_enabled":false,"alternate_login_google_text":"Sign in with Google","buy_again_notification_text":"Order added to the cart","edit_shipping_address_title":"Edit Shipping Address","favorite_button_active_text":"Added to favorites","home_button_membership_text":"Credit","home_loyalty_button_enabled":false,"home_referral_page_subtitle":"Refer a friend who makes a purchase and both of you will claim rewards.","login_verify_identity_title":"Verify your identity","loyalty_opt_in_checkbox_tag":"rivo-loyalty-opt-in","order_buy_again_button_text":"Buy Again","order_cancel_button_enabled":false,"saved_cart_empty_state_text":"No saved from cart items","set_as_default_address_text":"Set as default address","slideout_heading_font_color":"#000000","account_verification_enabled":false,"collections_empty_state_text":"No collections","email_cannot_be_changed_text":"Email used for login cannot be updated","exposed_line_item_properties":[],"favorite_button_active_color":"#ff5e5e","home_additional_button_1_url":"","home_additional_button_2_url":"","home_logged_out_orders_title":"Sign in to access your orders","login_accepts_marketing_text":"Email me with news and offers","loyalty_opt_in_checkbox_text":"Email me just loyalty offers","order_returns_fulfilled_only":true,"order_track_shipment_enabled":true,"orders_additional_button_url":"{{order.order_status_url}}","redeem_rewards_block_enabled":false,"redeem_rewards_display_style":"horizontal","secondary_button_class_names":"btn-Secondary","accepts_sms_marketing_enabled":false,"add_to_cart_notification_text":"Added to cart","alternate_login_shop_pay_text":"Sign in to an existing account with Shop Pay","favorite_button_inactive_text":"Add to favorites","featured_home_content_enabled":false,"home_additional_button_1_text":"","home_additional_button_2_text":"","home_gift_card_button_enabled":false,"home_logged_out_profile_title":"Sign in to access your profile","international_returns_enabled":false,"legacy_points_balance_enabled":false,"mini_block_subtitle_font_size":16,"new_customer_accounts_enabled":false,"order_limited_time_button_url":"{{order.order_status_url}}","orders_additional_button_text":"","same_as_shipping_address_text":"Same as shipping address","shop_pay_login_button_enabled":false,"home_button_balance_points_url":"\/pages\/rewards","home_button_components_enabled":false,"home_button_gift_card_cta_text":"My Credit","home_membership_button_enabled":false,"order_limited_time_button_text":"EDIT OR CANCEL ORDER","address_saved_notification_text":"Address saved","apply_discount_add_to_cart_text":"Apply discount \u0026 add to cart","featured_content_image_position":"center center","home_button_balance_points_text":"Points","home_button_gift_card_code_text":"ID: ","home_button_gift_card_copy_text":"Copy ID","home_button_membership_cta_text":"My Membership","home_expiration_message_enabled":false,"home_logged_out_favorites_title":"Sign in to access your favorites","home_logged_out_orders_subtitle":"Get access to your rewards, referrals, and more","login_accepts_marketing_default":true,"login_accepts_marketing_enabled":true,"loyalty_opt_in_checkbox_default":true,"loyalty_opt_in_checkbox_enabled":false,"profile_list_personal_info_text":"Personal Information","view_product_action_button_text":"View product","home_additional_button_1_enabled":false,"home_additional_button_2_enabled":false,"home_logged_out_profile_subtitle":"Get access to your rewards, referrals, and more","home_logged_out_saved_cart_title":"Sign in to access your saved cart","home_wallet_pass_ios_button_text":"Add Apple Wallet Pass","mini_block_product_price_enabled":true,"mini_block_product_title_enabled":true,"orders_additional_button_enabled":true,"product_compare_at_price_enabled":true,"recently_viewed_empty_state_text":"No recently viewed items","slideout_body_primary_font_color":"#000000","address_deleted_notification_text":"Address deleted successfully","international_returns_button_text":"Start an International Return","login_accepts_marketing_countries":[],"order_limited_time_button_enabled":true,"profile_updated_notification_text":"Profile updated","shipping_address_empty_state_text":"You haven't added any shipping addresses yet","add_to_favorites_notification_text":"Save Item","alternate_login_another_email_text":"Try sending another code","home_button_membership_paywall_url":"","home_logged_out_favorites_subtitle":"Get access to your rewards, referrals, and more","redirect_to_classic_login_on_error":false,"share_favorite_collections_enabled":false,"shop_pay_login_email_field_enabled":true,"slideout_body_secondary_font_color":"#444445","verify_login_
3598issues_alt_login_text":"Having issues? Click here to sign in with an alternate method","view_product_action_button_enabled":false,"cancel_membership_notification_text":"Membership canceled","home_button_balance_points_cta_text":"My Rewards","order_returns_button_primary_button":false,"recently_viewed_collections_enabled":true,"added_to_favorites_notification_text":"Item saved","home_wallet_pass_android_button_text":"Add Google Wallet Pass","order_tracking_button_primary_button":true,"profile_list_shipping_addresses_text":"Shipping Addresses","apple_login_private_relay_error_title":"Please sign in using a different method","order_buy_again_button_primary_button":false,"order_cancel_button_threshold_enabled":true,"orders_secondary_additional_button_url":"{{order.order_status_url}}","home_button_membership_paywall_cta_text":"Join our Membership","orders_additional_button_primary_button":false,"remove_from_favorites_notification_text":"Remove item","apple_login_private_relay_error_subtitle":"Sorry, we couldn't authenticate your Apple account. Please try again using your email or Sign in with Google.","apple_login_reject_private_relay_enabled":false,"home_logged_out_profile_subtitle_enabled":false,"order_cancel_button_threshold_in_minutes":30,"order_limited_time_button_primary_button":false,"removed_from_favorites_notification_text":"Item removed","show_as_loyalty_page_login_modal_enabled":false,"orders_secondary_additional_button_enabled":true,"international_returns_button_primary_button":false,"send_payment_method_email_notification_text":"Confirmation email sent","order_limited_time_button_threshold_in_minutes":15,"orders_secondary_additional_button_primary_button":false,"css_variables":":root {\n --rivo-aw-background-color: #ffffff;\n --rivo-aw-desktop-sidebar-left: auto;\n --rivo-aw-desktop-sidebar-right: 0px;\n --rivo-aw-desktop-slidein-translate-x: 100%;\n --rivo-aw-desktop-slideout-translate-x: 100%;\n --rivo-aw-heading-font-color: #000000;\n --rivo-aw-body-primary-font-color: #000000;\n --rivo-aw-body-secondary-font-color: #444445;\n --rivo-aw-border-color: #eaeaea;\n --rivo-aw-subdued-color: #f7f7f7;\n --rivo-aw-icon-color: #000000;\n --rivo-aw-primary-color: #000000;\n --rivo-aw-favorite-button-active-color: #ff5e5e;\n --rivo-aw-toast-offset-left: auto;\n --rivo-aw-toast-offset-right: 15px;\n --rivo-aw-default-font-size: 16px;\n \n --rivo-aw-input-font-size: 14px;\n --rivo-aw-section-title-font-size: 15px;\n --rivo-aw-logged-out-title-font-size: 15px;\n \n --rivo-aw-mini-block-title-font-size: 15px;\n --rivo-aw-mini-block-subtitle-font-size: 16px;\n --rivo-aw-login-footer-font-size: 15px;\n --rivo-aw-footer-font-size: 14px;\n --rivo-aw-toast-background-color: #000000;\n --rivo-aw-toast-font-color: #ffffff;\n \n \n --rivo-aw-home-featured-content-image-position: center center;\n --rivo-aw-compare-at-price-color: #c70000;\n \n }","terms_and_conditions":"By signing in, you agree to our \u003ca class=\"rivo-underline-link\" href=\"\/pages\/our-policies\" target=\"_blank\"\u003eprivacy policy\u003c\/a\u003e and \u003ca class=\"rivo-underline-link\" href=\"\/pages\/our-policies\" target=\"_blank\"\u003eterms of service\u003c\/a\u003e","sms_terms_and_conditions":null},"persisted_login_enabled":false,"preference_questions":[],"customer_id_verification_enabled":true,"ping_enabled":true,"contests":[],"active_contest":null,"activate_store_balance_consolidation_enabled":false,"deduct_after_order_placed_channels":[],"edit_order_settings":{"enabled":false,"note_text":"Order Note","note_enabled":false,"cancel_enabled":true,"cancel_reasons":["Changed my mind","Shipping concerns","Ordered by mistake","Other"],"note_button_text":"Update Note","note_placeholder":"Add a note to your order","threshold_method":"fulfilled","cancel_button_text":"Cancel Order","contact_info_enabled":true,"preview_mode_enabled":false,"contact_info_button_text":"Update Contact Information","shipping_address_enabled":true,"threshold_time_in_minutes":15,"preview_mode_email_domains":[],"shipping_address_button_text":"Update Shipping Address"},"gift_card_settings":{"enabled":false,"gift_card_product_ids":[]},"surveys":[],"order_earnings_delay_in_seconds":null,"cashback_program_enabled":false,"cashback_offers":[],"fallback_to_db_from_shopify_api_enabled":false,"credit_transfers_enabled":false,"wallet_pass_enabled":false,"account_widget_sections":[],"order_settings":{"order_price_exclude_discounts":false,"order_price_include_taxes":true,"order_price_include_shipping":true,"order_reward_channels":"all","order_reward_financial_statuses":["paid"],"order_revoke_financial_statuses":["refunded"],"convert_pos_customers_to_members":false,"discount_code_prefix_settings":{"global_prefix":"BAL-","loyalty_gift_prefix":"LGIFT-"},"capitalize_discount_codes":false,"discount_combination_settings":{},"discount_combinations_with_product_enabled":false,"discount_combinations_with_order_enabled":false,"discount_combinations_with_shipping_enabled":false,"points_program_excluded_collection_ids":[],"points_program_excluded_product_ids":[null],"points_program_excluded_order_tags":[],"skip_order_earnings_on_product_ids":[],"points_order_earnings_rounding_enabled":true,"points_order_earnings_rounding_type":"round","credits_order_earnings_rounding_enabled":false,"credits_order_earnings_rounding_type":"round","credits_order_earnings_rounding_precision":2,"points_order_earnings_rounding_precision":0,"points_program_fulfillment_earnings_trigger":"order_placed"}}; 3599 window.Rivo.loy_config.api_endpoint = "\/apps\/ba-loy"; 3600</script>
3600 3601
3602<script type="text/javascript" id="rivo-js-customer-init" dynamic> 3603 3604</script>
3604 3605 3606 3607 <link rel="stylesheet" type="text/css" href="https://cdn.shopify.com/s/files/1/0194/1736/6592/t/1/assets/ba_rivo_profile.css?v=1786981399"/> 3608 <style type="text/css"> 3609 3610 :root { 3611 --rivo-aw-background-color: #ffffff; 3612 --rivo-aw-desktop-sidebar-left: auto; 3613 --rivo-aw-desktop-sidebar-right: 0px; 3614 --rivo-aw-desktop-slidein-translate-x: 100%; 3615 --rivo-aw-desktop-slideout-translate-x: 100%; 3616 --rivo-aw-heading-font-color: #000000; 3617 --rivo-aw-body-primary-font-color: #000000; 3618 --rivo-aw-body-secondary-font-color: #444445; 3619 --rivo-aw-border-color: #eaeaea; 3620 --rivo-aw-subdued-color: #f7f7f7; 3621 --rivo-aw-icon-color: #000000; 3622 --rivo-aw-primary-color: #000000; 3623 --rivo-aw-favorite-button-active-color: #ff5e5e; 3624 --rivo-aw-toast-offset-left: auto; 3625 --rivo-aw-toast-offset-right: 15px; 3626 --rivo-aw-default-font-size: 16px; 3627 3628 --rivo-aw-input-font-size: 14px; 3629 --rivo-aw-section-title-font-size: 15px; 3630 --rivo-aw-logged-out-title-font-size: 15px; 3631 3632 --rivo-aw-mini-block-title-font-size: 15px; 3633 --rivo-aw-mini-block-subtitle-font-size: 16px; 3634 --rivo-aw-login-footer-font-size: 15px; 3635 --rivo-aw-footer-font-size: 14px; 3636 --rivo-aw-toast-background-color: #000000; 3637 --rivo-aw-toast-font-color: #ffffff; 3638 3639 3640 --rivo-aw-home-featured-content-image-position: center center; 3641 --rivo-aw-compare-at-price-color: #c70000; 3642 3643 } 3644 3645 3646 .rivo-slideout__container input{ 3647 border: 1px solid #8c8c8c !important; 3648 border-radius: 6px !important; 3649 } 3650 3651 .rivo-slideout__header a.rivo-aw-logo svg, .rivo-slideout__header a.rivo-aw-logo img{ 3652 max-height: 30px; 3653 } 3654 3655 .rivo-login-component .rivo-checkbox-container{ 3656 margin-top: 15px; 3657 } 3658 3659 .rivo-aw-logged-out .rivo-slideout-content-wrapper:nth-of-type(2){ 3660 margin-top: 15px; 3661 } 3662 3663 .rivo-checkbox-label{ 3664 font-weight: 500; 3665 } 3666 3667 .rivo-aw-logged-out .rivo-login-email-container .rivo-login-subtitle{ 3668 display:none; 3669 } 3670 3671 .rivo-login-component .rivo-aw-title{ 3672 margin-bottom: 20px !important; 3673 } 3674 3675 .rivo-slideout__container{ 3676 left: auto; 3677 } 3678 3679 .rivo-slideout__container .btn--primary{ 3680 background: #fae0df; 3681 color: #141414; 3682 font-weight: 800; 3683 border: none !important; 3684 border-radius: 0px !important; 3685 cursor: pointer; 3686 } 3687 3688 .rivo-slideout__close, .rivo-aw-mini-modal__close{ 3689 font-weight: 800; 3690 } 3691 3692 .rivo-aw-home-recently-viewed .rivo-mini-block-title, 3693 .rivo-aw-home-recently-viewed .rivo-mini-block-subtitle{ 3694 display: none; 3695 } 3696 3697 .rivo-aw-home-recently-viewed .rivo-product-image{ 3698 height: 150px; 3699 } 3700 3701 .rivo-aw-home-popular-today .rivo-product-image{ 3702 width: 140px; 3703 height: 210px; 3704 } 3705 3706 .rivo-aw-home-popular-today .rivo-mini-block-title{ 3707 -webkit-line-clamp: 3; 3708 max-height: 75px; 3709 } 3710 3711 .rivo-aw-home-popular-today a.rivo-mini-block-link{ 3712 width: 140px; 3713 } 3714 3715 .rivo-mini-block-title{ 3716 font-weight: 500; 3717 } 3718 3719 .rivo-slideout-navigation a.active:before{ 3720 background-color: #141414; 3721 } 3722 3723.rivo-aw-button-points-balance-container, .rivo-aw-button-gift-card-balance-container{ 3724 background-color: #141414; 3725 color: #FFF; 3726 border-radius: 4px; 3727 padding: 22px; 3728} 3729 3730.rivo-mini-block-link{ 3731 width: 100px; 3732} 3733 3734.rivo-product-image{ 3735 width: 100px; 3736 height: 150px; 3737} 3738 3739:not(.rivo-popular-today-products) .rivo-mini-block-title, 3740:not(.rivo-popular-today-products) .rivo-mini-block-price { 3741 display: none; 3742} 3743 3744.rivo-aw-button-component-cta-text{ 3745 text-transform: none; 3746} 3747 3748.rivo-slideout__container .btn-Button-secondary{ 3749 background: transparent; 3750 color: #141414; 3751 border-color: #141414; 3752} 3753 3754a.rivo-collection-item{ 3755 font-size: 13px; 3756} 3757a.rivo-collection-item:hover{ 3758 background-color: #000000; 3759 color: #FFFFFF; 3760} 3761 3762.rivo-google-login-button{ 3763 border-color: #0000002e !important; 3764} 3765 3766.rivo-aw-logged-in .rivo-aw-home-hero{ 3767 display: none; 3768} 3769 3770.rivo-slideout__header a.rivo-aw-logo svg, .rivo-slideout__header a.rivo-aw-logo img { 3771 max-height: 30px; 3772 width: auto; 3773 max-height: 15px; 3774} 3775 3776.rivo-mini-block-price .rivo-product-price{ 3777 display: none !important; 3778} 3779 3780.rivo-popular-today-products .rivo-mini-block-title, 3781.rivo-popular-today-products .rivo-product-price{ 3782 display: flex !important; 3783} 3784 3785.rivo-login-component form input[type=submit]{ 3786 background: #000; 3787} 3788 3789.rivo-login-component form input[type=submit]:hover{ 3790 color: #FAFAFA; 3791} 3792 3793input[name="otc_login[code]"]{ 3794 background: none; 3795} 3796 3797.rivo-popular-today-products .rivo-mini-block-price{ 3798 display: flex !important; 3799} 3800 </style> 3801 <div id="rivo-shop-pay-login-container" style="display: none;"> 3802
3802<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.shop-login-button.en.esm.js"></script>
vendor: 1 bytes, line 3802
3802
3803<script type="module"> 3804 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.shop-login-button.en.esm.js"); 3805 3806 3807</script>
3807 3808 3809<shop-login-button ux-mode="windoid" return-uri="https://boandtee.com/account/redirect" proxy="true" redirect-type="iframe" response-type="code"></shop-login-button> 3810 3811 </div> 3812 3813<div rivo-ax-data="rivoAccountSlideoutComponent()" rivo-ax-init="initRivoAccountSlideout" class="micromodal-slideout" id="rivo-account-slideout" aria-hidden="true"> 3814 <div class="rivo-slideout__overlay" tabindex="-1" data-rivo-account-slideout-micromodal-close> 3815 <div class="rivo-slideout__container" role="dialog" aria-modal="true" aria-labelledby="rivo-account-dialog-title" tabindex="-1" rivo-ax-bind:class="{ 'rivo-aw-logged-in': $store.rivo_profile_customer, 'rivo-aw-logged-out': !$store.rivo_profile_customer }"> 3816 <header class="rivo-slideout__header rivo-slideout-section"> 3817 <button type="button" class="rivo-slideout__close" aria-label="Close modal" data-rivo-account-slideout-micromodal-close></button> 3818 <h2 id="rivo-account-dialog-title" class="rivo-visually-hidden">Account</h2> 3819 <a href="#rivo" class="rivo-aw-logo" rivo-ax-on:click.prevent="changePage('rivo')" rivo-ax-show="$store.rivo_aw_settings.logo && !$store.current_survey_question" aria-label="Go to home"><span aria-hidden="true" rivo-ax-html="$store.rivo_aw_settings.logo"></span></a> 3820 <div class="rivo-survey-progress-bar-container" rivo-ax-show="$store.current_survey_question" rivo-ax-cloak> 3821 <div class="rivo-survey-progress-bar" role="progressbar" aria-valuenow="0" rivo-ax-effect="$el.setAttribute('aria-valuenow', $store.current_survey?.percentage_completed || 100)" aria-valuemin="0" aria-valuemax="100" aria-label="Survey progress"> 3822 <div class="rivo-survey-progress-bar-fill" rivo-ax-bind:style="'width: ' + ($store.current_survey?.percentage_completed || 100) + '%'"></div> 3823 </div> 3824 <button class="rivo-survey-skip-question" rivo-ax-on:click="saveSurveyAnswer($event, true)" aria-label="Skip current survey question">Skip</button> 3825 </div> 3826 </header> 3827 <main class="rivo-slideout__content rivo-slideout-section"> 3828 <div id="rivo-profile-main"></div> 3829 <template rivo-ax-if="$store.rivo_aw_settings.show_powered_by"> 3830 <div class="rivo-powered-by"> 3831 <a href="https://rivo.io?utm_source=widget&utm_campaign=powered-by" target="_blank" aria-label="Powered by Rivo - Opens in new window"> 3832 <span class="rivo-powered-by-text">Powered by </span> 3833 <div class="rivo-powered-by-icon" rivo-ax-html="$store.icons.rivo"></div> 3834 </a> 3835 </div> 3836 </template> 3837 </main> 3838 <footer id="rivo-slideout-footer" class="rivo-slideout-section" rivo-ax-show="!hideFooter"> 3839 <div class="rivo-slideout-navigation" role="tablist" rivo-ax-on:keydown="handleTabKeydown($event)" rivo-ax-bind:class="{ 'rivo-footer-with-icons': $store.rivo_aw_settings.footer_icons_enabled }" rivo-ax-show="!showStickyFooterButton"> 3840 <a href="#rivo" id="rivo-tab-rivo" role="tab" aria-controls="rivo-tabpanel-rivo" aria-selected="true" tabindex="0" rivo-ax-effect="$el.setAttribute('aria-selected', currentPage === 'rivo' ? 'true' : 'false'); $el.setAttribute('tabindex', currentPage === 'rivo' ? '0' : '-1')" rivo-ax-bind:class="{ 'active': currentPage === 'rivo' }" rivo-ax-on:click.prevent="changePage('rivo')"> 3841 <div rivo-ax-html="$store.icons.profile_home" rivo-ax-show="$store.rivo_aw_settings.footer_icons_enabled"></div> 3842 <div class="rivo-footer-nav-text" rivo-ax-text="$store.rivo_aw_translation?.footer_home_text || $store.rivo_aw_settings.footer_home_text">For You</div> 3843 </a> 3844 <a href="#rivo-orders" id="rivo-tab-rivo-orders" role="tab" aria-controls="rivo-tabpanel-rivo-orders" aria-selected="false" tabindex="-1" rivo-ax-effect="$el.setAttribute('aria-selected', (currentPage === 'rivo-orders' || currentPage === 'rivo-order-details') ? 'true' : 'false'); $el.setAttribute('tabindex', (currentPage === 'rivo-orders' || currentPage === 'rivo-order-details') ? '0' : '-1')" rivo-ax-bind:class="{ 'active': currentPage === 'rivo-orders' || currentPage === 'rivo-order-details' }" rivo-ax-on:click.prevent="changePage('rivo-orders')"> 3845 <div rivo-ax-html="$store.icons.profile_orders" rivo-ax-show="$store.rivo_aw_settings.footer_icons_enabled"></div> 3846 <div class="rivo-footer-nav-text" rivo-ax-text="$store.rivo_aw_translation?.footer_orders_text || $store.rivo_aw_settings.footer_orders_text">Orders</div> 3847 </a> 3848 <a href="#rivo-profile" id="rivo-tab-rivo-profile" role="tab" aria-controls="rivo-tabpanel-rivo-profile" aria-selected="false" tabindex="-1" rivo-ax-effect="$el.setAttribute('aria-selected', currentPage === 'rivo-profile' ? 'true' : 'false'); $el.setAttribute('tabindex', currentPage === 'rivo-profile' ? '0' : '-1')" rivo-ax-bind:class="{ 'active': currentPage === 'rivo-profile' }" rivo-ax-on:click.prevent="changePage('rivo-profile')"> 3849 <div rivo-ax-html="$store.icons.profile_user" rivo-ax-show="$store.rivo_aw_settings.footer_icons_enabled"></div> 3850 <div class="rivo-footer-nav-text" rivo-ax-text="$store.rivo_aw_translation?.footer_profile_text || $store.rivo_aw_settings.footer_profile_text">Profile</div> 3851 </a> 3852 <template rivo-ax-if="$store.rivo_aw_settings.community_enabled"> 3853 <a href="#rivo-community" id="rivo-tab-rivo-community" role="tab" aria-controls="rivo-tabpanel-rivo-community" aria-selected="false" tabindex="-1" rivo-ax-effect="$el.setAttribute('aria-selected', currentPage === 'rivo-community' ? 'true' : 'false'); $el.setAttribute('tabindex', currentPage === 'rivo-community' ? '0' : '-1')" rivo-ax-bind:class="{ 'active': currentPage === 'rivo-community' }" rivo-ax-on:click.prevent="changePage('rivo-community')"> 3854 <div rivo-ax-html="$store.icons.profile_user" rivo-ax-show="$store.rivo_aw_settings.footer_icons_enabled"></div> 3855 <div class="rivo-footer-nav-text" rivo-ax-text="$store.rivo_aw_translation?.footer_community_text || $store.rivo_aw_settings.footer_community_text"></div> 3856 </a> 3857 </template> 3858 </div> 3859 <template rivo-ax-if="showStickyFooterButton && $store.current_survey_question"> 3860 <div class="rivo-sticky-footer-container"> 3861 <button rivo-ax-bind:class="$store.rivo_aw_settings.primary_button_class_names" aria-label="Continue survey" rivo-ax-text="$store.rivo_aw_settings.survey_next_button_text" rivo-ax-on:click="saveSurveyAnswer($event)"></button> 3862 </div> 3863 </template> 3864 </footer> 3865 <div class="rivo-aw-mini-modal rivo-aw-mini-modal-micromodal-slide" id="rivo-aw-mini-modal" aria-hidden="true"> 3866 <div class="rivo-aw-mini-modal__overlay" tabindex="-1" data-rivo-mini-micromodal-close> 3867 <div class="rivo-aw-mini-modal__container" role="dialog" aria-modal="true"> 3868 <button class="rivo-aw-mini-modal__close" aria-label="Close modal" data-rivo-mini-micromodal-close></button> 3869 <div class="rivo-aw-mini-modal__content" rivo-ax-html="miniModalContent"></div> 3870 </div> 3871 </div> 3872 </div> 3873 </div> 3874 </div> 3875 </div> 3876 3877<!-- END app snippet --> 3878 3879 3880</div><div id="shopify-block-AUGZ4bm1wOXlRNVFzT__16187601983559181590" class="shopify-block shopify-app-block"> 3881 3882<!-- BEGIN app snippet: swymVersion -->
3882<script>var __SWYM__VERSION__ = '6.0.0';</script>
3882 3883<!-- END app snippet --> 3884
3885<script id="sbisa-embed-init" defer async> 3886 (function () { 3887 console.log('Swym SBiSA App Embed Block Init'); 3888 window.swymWatchlistEmbedBlockLoaded = true; 3889 var fullAssetUrl = "https://cdn.shopify.com/extensions/01a014b1-6566-7c61-aedf-79a2912282a5/watchlist-145/assets/apps.bundle.js"; 3890 var assetBaseUrl = fullAssetUrl?.substring(0, fullAssetUrl.lastIndexOf('/') + 1); 3891 var swymJsPath = '//premcdn.swymrelay.com/code/swym-shopify.js'; 3892 var baseJsPath = swymJsPath?.substring(0, swymJsPath.lastIndexOf('/') + 1); 3893 window.SwymCurrentJSPath = baseJsPath; 3894 window.SwymAssetBaseUrl = assetBaseUrl; 3895 3896 window.SwymCurrentStorePath = "//swymstore-v3premium-01.swymrelay.com"; 3897 3898 function injectSwymShopifyScript() { 3899 var element = ""; 3900 var scriptSrc = ""; 3901 3902 3903 element = "swym-ext-shopify-script"; 3904 window.SwymShopifyCdnInUse = true; 3905 scriptSrc = "https://cdn.shopify.com/extensions/01a014b1-6566-7c61-aedf-79a2912282a5/watchlist-145/assets/swym-ext-shopify.js"; 3906 3907 3908 if (document.getElementById(element)) { 3909 return; 3910 } 3911 3912 var s = document.createElement("script"); 3913 s.id = element; 3914 s.type = "text/javascript"; 3915 s.async = true; 3916 s.defer = true; 3917 s.src = scriptSrc; 3918 3919 s.onerror = function() { 3920 console.warn("Failed to load Swym Shopify script: ", scriptSrc, " Continuing with default"); 3921 // Fallback logic here 3922 element = `swym-ext-shopify-script-${__SWYM__VERSION__}`; 3923 var fallbackJsPathVal = "\/\/premcdn.swymrelay.com\/code\/swym-shopify.js"; 3924 var fallbackJsPathWithExt = fallbackJsPathVal.replace("swym-shopify", "swym-ext-shopify"); 3925 scriptSrc = fallbackJsPathWithExt + '?shop=' + encodeURIComponent(window.Shopify.shop) + '&v=' + __SWYM__VERSION__; 3926 3927 var fallbackScript = document.createElement("script"); 3928 fallbackScript.id = element; 3929 fallbackScript.type = "text/javascript"; 3930 fallbackScript.async = true; 3931 fallbackScript.defer = true; 3932 fallbackScript.src = scriptSrc; 3933 var y = document.getElementsByTagName("script")[0]; 3934 y.parentNode.insertBefore(fallbackScript, y); 3935 }; 3936 3937 var x = document.getElementsByTagName("script")[0]; 3938 x.parentNode.insertBefore(s, x); 3939 } 3940 3941 const swymAppMetafields = { 3942 pid: 'oNyF/VqOSaXBF+0H+/dDAy2ddiZofO953yIHaXXWD8Y=', 3943 tier: 'v3premium-01', 3944 js_path: '//premcdn.swymrelay.com/code/swym-shopify.js', 3945 relay_path: 'https://swymstore-v3premium-01.swymrelay.com', 3946 isEnabled: '', 3947 }; 3948 3949 function loadSwymShopifyScriptWithWishlistCheck() { 3950 // Check if Wishlist is installed - bypass script injection as a temporary workaround solution to prevent duplicate scripts 3951 // Can be replaced with better logic once Wishlist also uses App Embed Block for script injection 3952 fetch('https://swymstore-v3premium-01.swymrelay.com' + '/script-tag-check?pid=' + 'oNyF/VqOSaXBF+0H+/dDAy2ddiZofO953yIHaXXWD8Y=') 3953 .then((response) => response.json()) 3954 .then((data) => { 3955 if (!data?.["has-swym-script-tag"]) { 3956 injectSwymShopifyScript(); 3957 } 3958 }) 3959 .catch((error) => { 3960 // Handle any errors that occur 3961 console.error('Swym Error: ' + error); 3962 //Inject script to make sure script is injected nonetheless 3963 injectSwymShopifyScript(); 3964 }); 3965 } 3966 3967 3968 var consentAPICallbackInvoked = false; 3969 3970 function loadScriptIfNoCustomerPrivacyAPI() { 3971 if(!window.Shopify?.customerPrivacy) { 3972 loadSwymShopifyScriptWithWishlistCheck(); 3973 return true; 3974 } 3975 return false; 3976 } 3977 3978 function checkConsentAndLoad() { 3979 var requiresConsentCheck = window.Shopify?.customerPrivacy?.shouldShowBanner?.(); 3980 if(!requiresConsentCheck) { 3981 loadSwymShopifyScriptWithWishlistCheck(); 3982 return; 3983 } 3984 var shouldLoadSwymScript = window.Shopify?.customerPrivacy?.preferencesProcessingAllowed?.(); 3985 if (shouldLoadSwymScript) { 3986 loadSwymShopifyScriptWithWishlistCheck(); 3987 } else { 3988 console.warn("No customer consent to load Swym SBiSA"); 3989 } 3990 } 3991 function initialiseConsentCheck() { 3992 document.addEventListener("visitorConsentCollected", (event) => { checkConsentAndLoad(); }); 3993 window.Shopify?.loadFeatures?.( 3994 [{name: 'consent-tracking-api', version: '0.1'}], 3995 error => { 3996 consentAPICallbackInvoked = true; 3997 if (error) { 3998 if(loadScriptIfNoCustomerPrivacyAPI()) { 3999 return; 4000 } 4001 } 4002 checkConsentAndLoad(); 4003 } 4004 ); 4005 } 4006 function consentCheckFallback(retryCount) { 4007 if(!consentAPICallbackInvoked) { 4008 if (window.Shopify?.customerPrivacy) { 4009 checkConsentAndLoad(); 4010 } else if (retryCount >= 1) { 4011 console.warn("Shopify privacy API unavailable, loading Swym script"); 4012 loadSwymShopifyScriptWithWishlistCheck(); 4013 } else { 4014 setTimeout(() => consentCheckFallback(retryCount + 1), 1000); 4015 } 4016 } 4017 } 4018 if (document.readyState === "loading") { 4019 document.addEventListener("DOMContentLoaded", initialiseConsentCheck); 4020 window.addEventListener("load", () => consentCheckFallback(0)); 4021 } else { 4022 initialiseConsentCheck(); 4023 } 4024 4025 })(); 4026</script>
4026 4027 4028 4029 4030 4031 4032<!-- BEGIN app snippet: swymSnippet -->
4032<script defer> 4033 (function () { 4034 const currentSwymJSPath = '//premcdn.swymrelay.com/code/swym-shopify.js'; 4035 const currentSwymStorePath = 'https://swymstore-v3premium-01.swymrelay.com'; 4036 const dnsPrefetchLink = `<link rel="dns-prefetch" href="https://${currentSwymStorePath}" crossorigin>`; 4037 const dnsPrefetchLink2 = `<link rel="dns-prefetch" href="${currentSwymJSPath}">`; 4038 const preConnectLink = `<link rel="preconnect" href="${currentSwymJSPath}">`; 4039 const swymSnippet = document.getElementById('sbisa-embed-init'); 4040 swymSnippet.insertAdjacentHTML('afterend', dnsPrefetchLink); 4041 swymSnippet.insertAdjacentHTML('afterend', dnsPrefetchLink2); 4042 swymSnippet.insertAdjacentHTML('afterend', preConnectLink); 4043 })() 4044</script>
vendor: 1 bytes, line 4044
4044
4045<script id="swym-snippet" type="text"> 4046 window.swymLandingURL = document.URL; 4047 window.swymCart = {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"USD","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}; 4048 window.swymPageLoad = function() { 4049 window.SwymProductVariants = window.SwymProductVariants || {}; 4050 window.SwymHasCartItems = 0 > 0; 4051 window.SwymPageData = {}, window.SwymProductInfo = {}; 4052 var unknown = {et: 0}; 4053 window.SwymPageData = unknown; 4054 4055 window.SwymPageData.uri = window.swymLandingURL; 4056 }; 4057 if(window.selectCallback){ 4058 (function(){ 4059 // Variant select override 4060 var originalSelectCallback = window.selectCallback; 4061 window.selectCallback = function(variant){ 4062 originalSelectCallback.apply(this, arguments); 4063 try{ 4064 if(window.triggerSwymVariantEvent){ 4065 window.triggerSwymVariantEvent(variant.id); 4066 } 4067 }catch(err){ 4068 console.warn("Swym selectCallback", err); 4069 } 4070 };})();} 4071 window.swymCustomerId =null; 4072 window.swymCustomerExtraCheck = 4073 null; 4074 var swappName = ("Wishlist" || "Watchlist"); 4075 var swymJSObject = { 4076 pid: "oNyF\/VqOSaXBF+0H+\/dDAy2ddiZofO953yIHaXXWD8Y=", 4077 interface: "/apps/swym" + swappName + "/interfaces/interfaceStore.php?appname=" + swappName 4078 }; 4079 window.swymJSShopifyLoad = function(){ 4080 if(window.swymPageLoad) swymPageLoad(); 4081 if(!window._swat) { 4082 (function (s, w, r, e, l, a, y) { 4083 r['SwymRetailerConfig'] = s; 4084 r[s] = r[s] || function (k, v) { 4085 r[s][k] = v; 4086 }; 4087 })('_swrc', '', window); 4088 _swrc('RetailerId', swymJSObject.pid); 4089 _swrc('Callback', function(){initSwymShopify();}); 4090 }else if(window._swat.postLoader){ 4091 _swrc = window._swat.postLoader; 4092 _swrc('RetailerId', swymJSObject.pid); 4093 _swrc('Callback', function(){initSwymShopify();}); 4094 }else{ 4095 initSwymShopify();} 4096 } 4097 if(!window._SwymPreventAutoLoad) { 4098 swymJSShopifyLoad(); 4099 } 4100 window.swymGetCartCookies = function(){ 4101 var RequiredCookies = ["cart", "swym-session-id", "swym-swymRegid", "swym-email"]; 4102 var reqdCookies = {}; 4103 RequiredCookies.forEach(function(k){ 4104 reqdCookies[k] = _swat.storage.getRaw(k);}); 4105 var cart_token = window.swymCart.token; 4106 var data = { 4107 action:'cart', 4108 token:cart_token, 4109 cookies:reqdCookies 4110 }; 4111 return data; 4112 } 4113 window.swymGetCustomerData = function(){ 4114 4115 return {status: 1}; 4116 4117 } 4118</script>
4118 4119 4120<style id="safari-flasher-pre"></style>
4121<script> 4122 if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { 4123 document.getElementById("safari-flasher-pre").innerHTML = '' + '#swym-plugin,#swym-hosted-plugin{display: none;}' + '.swym-button.swym-add-to-wishlist{display: none;}' + '.swym-button.swym-add-to-watchlist{display: none;}' + '#swym-plugin #swym-notepad, #swym-hosted-plugin #swym-notepad{opacity: 0; visibility: hidden;}' + '#swym-plugin #swym-notepad, #swym-plugin #swym-overlay, #swym-plugin #swym-notification,' + '#swym-hosted-plugin #swym-notepad, #swym-hosted-plugin #swym-overlay, #swym-hosted-plugin #swym-notification' + '{-webkit-transition: none; transition: none;}' + ''; 4124 window.SwymCallbacks = window.SwymCallbacks || []; 4125 window.SwymCallbacks.push(function(tracker) { 4126 tracker.evtLayer.addEventListener(tracker.JSEvents.configLoaded, function() { 4127 // flash-preventer 4128 var x = function() { 4129 SwymUtils.onDOMReady(function() { 4130 var d = document.createElement("div"); 4131 d.innerHTML = "<style id='safari-flasher-post'>" + "#swym-plugin:not(.swym-ready),#swym-hosted-plugin:not(.swym-ready){display: none;}" + ".swym-button.swym-add-to-wishlist:not(.swym-loaded){display: none;}" + ".swym-button.swym-add-to-watchlist:not(.swym-loaded){display: none;}" + "#swym-plugin.swym-ready #swym-notepad, #swym-plugin.swym-ready #swym-overlay, #swym-plugin.swym-ready #swym-notification," + "#swym-hosted-plugin.swym-ready #swym-notepad, #swym-hosted-plugin.swym-ready #swym-overlay, #swym-hosted-plugin.swym-ready #swym-notification" + "{-webkit-transition: opacity 0.3s, visibility 0.3ms, -webkit-transform 0.3ms !important;-moz-transition: opacity 0.3s, visibility 0.3ms, -moz-transform 0.3ms !important;-ms-transition: opacity 0.3s, visibility 0.3ms, -ms-transform 0.3ms !important;-o-transition: opacity 0.3s, visibility 0.3ms, -o-transform 0.3ms !important;transition: opacity 0.3s, visibility 0.3ms, transform 0.3ms !important;}" + "</style>"; 4132 document.head.appendChild(d); 4133 });}; 4134 setTimeout(x, 10); 4135 });});} 4136 window.SwymOverrideMoneyFormat = "${{amount}}"; // Get the money format for the store from shopify 4137</script>
4137 4138<style id="swym-product-view-defaults"> .swym-button.swym-add-to-wishlist-view-product:not(.swym-loaded) { display: none; /* Hide when not loaded */ } </style><!-- END app snippet --> 4139 4140 4141
4142<script id="swymSnippetCheckAndActivate"> 4143 document.addEventListener('DOMContentLoaded', function () { 4144 var element = document.querySelector('script#swym-snippet:not([type="text"])'); 4145 4146 if (!element) { 4147 //To handle cases where Wishlist is "disabled on live theme" 4148 window.swymSnippetNotLoadedFromThemeFiles = true; 4149 4150 var script = document.querySelector('script#swym-snippet[type="text"]'); 4151 4152 //Activating #swym-snippet 4153 script.type = 'text/javascript'; 4154 new Function(script.textContent)(); 4155 } 4156 }); 4157</script>
4157 4158 4159 4160 4161</div><div id="shopify-block-ASXJCWWEvMUE5L1VWd__5946647744298494267" class="shopify-block shopify-app-block"> 4162 4163 4164<!-- BEGIN app snippet: swymVersion -->
4164<script>var __SWYM__VERSION__ = '7.0.7';</script>
4164<!-- END app snippet --> 4165<!-- BEGIN app snippet: swymCustomCss --> 4166 4167 4168 4169 4170<style id="swym-custom-css"> 4171 4172</style> 4173 4174<!-- END app snippet --> 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186
4187<script> 4188 (function () { 4189 // Get CompanyLocation Metadata for B2B customer scenerios (SFS) 4190 4191 4192 // Put metafields in window variable 4193 const commonCustomizationSettings = ''; 4194 try { 4195 const parsedSettings = JSON.parse(commonCustomizationSettings); 4196 if (parsedSettings) { 4197 window.SwymWishlistCommonCustomizationSettings = parsedSettings[window.Shopify.theme.schema_name] || parsedSettings['global-settings']; 4198 } else { 4199 window.SwymWishlistCommonCustomizationSettings = {}; 4200 } 4201 } catch (e) { 4202 window.SwymWishlistCommonCustomizationSettings = {}; 4203 } 4204 4205 let enabledCommonFeatures = '{"multiple-wishlist":false}'; 4206 try { 4207 enabledCommonFeatures = JSON.parse(enabledCommonFeatures) || {}; 4208 } catch (e) { 4209 enabledCommonFeatures = {}; 4210 } 4211 // Storing COMMON FEATURES data in the window object for potential use in the storefront JS code. 4212 window.SwymEnabledCommonFeatures = enabledCommonFeatures; 4213 4214 // Ghost-Intent Configuration 4215 // Defaults to disabled (false). Only enabled when metafields explicitly set to "true". 4216 try { 4217 let ghostIntentConfig = { 4218 isExplicitConsentNeeded: false, 4219 isExplicitConsentNeededEvenForLocalStorage: false, 4220 askForPermissionOnFirstClick: true 4221 }; 4222 4223 4224 4225 window.SwymGhostIntentConfig = ghostIntentConfig; 4226 } catch(e) { 4227 window.SwymGhostIntentConfig = { 4228 isExplicitConsentNeeded: false, 4229 isExplicitConsentNeededEvenForLocalStorage: false, 4230 askForPermissionOnFirstClick: true 4231 }; 4232 } 4233 4234 // Education Layer Configuration 4235 // Reads from common enabled-features metafield first. Falls back to old standalone metafield for backward compatibility. 4236 4237 4238 window.SwymEducationLayerEnabled = enabledCommonFeatures?.["education-layer"] ?? true; 4239 4240 // Login Nudge Configuration 4241 // Reads from common enabled-features metafield first. Falls back to old standalone metafield for backward compatibility. 4242 4243 4244 window.SwymLoginNudgeEnabled = enabledCommonFeatures?.["login-nudge"] ?? true; 4245 4246 // Initialize or ensure SwymViewProducts exists 4247 if (!window.SwymViewProducts) { 4248 window.SwymViewProducts = {}; 4249 } 4250 4251 })(); 4252</script>
4252 4253 4254<!-- BEGIN app snippet: swymLoadConsentManager -->
4255<script> 4256 (function () { 4257 if (document.querySelector("script[data-swym-consent-manager]")) return; 4258 var swymConsentManagerScript = document.createElement("script"); 4259 swymConsentManagerScript.src = "https:\/\/cdn.shopify.com\/extensions\/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8\/swym-relay-839\/assets\/swym-consent-manager.js"; 4260 swymConsentManagerScript.async = false; // run in insertion order once fetched, instead of whenever fetch resolves 4261 swymConsentManagerScript.setAttribute("data-swym-consent-manager", "true"); 4262 document.head.appendChild(swymConsentManagerScript); 4263 })(); 4264</script>
4264 4265<!-- END app snippet --> 4266
4267<script 4268 4269 id="wishlist-embed-init" 4270 defer 4271 async 4272> 4273 (function () { 4274 window.swymWishlistEmbedLoaded = true; 4275 var fullAssetUrl = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/apps.bundle.js"; 4276 var assetBaseUrl = fullAssetUrl?.substring(0, fullAssetUrl.lastIndexOf('/') + 1); 4277 var swymJsPath = '//premcdn.swymrelay.com/code/swym-shopify.js'; 4278 var baseJsPath = swymJsPath?.substring(0, swymJsPath.lastIndexOf('/') + 1); 4279 window.SwymCurrentJSPath = baseJsPath; 4280 window.SwymAssetBaseUrl = assetBaseUrl; 4281 4282 window.SwymCurrentStorePath = "//swymstore-v3premium-01.swymrelay.com"; 4283 4284 function loadSwymShopifyScript() { 4285 var element = ""; 4286 var scriptSrc = ""; 4287 4288 4289 element = "swym-ext-shopify-script"; 4290 window.SwymShopifyCdnInUse = true; 4291 scriptSrc = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/swym-ext-shopify.js"; 4292 4293 4294 if (document.getElementById(element)) { 4295 return; 4296 } 4297 4298 var s = document.createElement("script"); 4299 s.id = element; 4300 s.type = "text/javascript"; 4301 s.async = true; 4302 s.defer = true; 4303 s.src = scriptSrc; 4304 4305 s.onerror = function() { 4306 console.warn("Failed to load Swym Shopify script: ", scriptSrc, " Continuing with default"); 4307 // Fallback logic here 4308 element = `swym-ext-shopify-script-${__SWYM__VERSION__}`; 4309 var fallbackJsPathVal = "\/\/premcdn.swymrelay.com\/code\/swym-shopify.js"; 4310 var fallbackJsPathWithExt = fallbackJsPathVal.replace("swym-shopify", "swym-ext-shopify"); 4311 scriptSrc = fallbackJsPathWithExt + '?shop=' + encodeURIComponent(window.Shopify.shop) + '&v=' + __SWYM__VERSION__; 4312 4313 var fallbackScript = document.createElement("script"); 4314 fallbackScript.id = element; 4315 fallbackScript.type = "text/javascript"; 4316 fallbackScript.async = true; 4317 fallbackScript.defer = true; 4318 fallbackScript.src = scriptSrc; 4319 var y = document.getElementsByTagName("script")[0]; 4320 y.parentNode.insertBefore(fallbackScript, y); 4321 }; 4322 4323 var x = document.getElementsByTagName("script")[0]; 4324 x.parentNode.insertBefore(s, x); 4325 } 4326 4327 var consentAPICallbackInvoked = false; 4328 function checkConsentAndLoad() { 4329 // Allow app to load in design mode (theme editor) regardless of consent 4330 if (window.Shopify?.designMode) { 4331 loadSwymShopifyScript(); 4332 return; 4333 } 4334 4335 // Ghost-Intent: If merchant enabled explicit consent, block SDK until 4336 // consent is given through our Ghost-Intent flow (sync nudge accept). 4337 // This works on any store regardless of region (EU or non-EU). 4338 var ghostConfig = window.SwymGhostIntentConfig || {}; 4339 if (ghostConfig.isExplicitConsentNeeded || ghostConfig.isExplicitConsentNeededEvenForLocalStorage) { 4340 try { 4341 var consentKey = 'swym-ghost-consent-' + (window.Shopify && window.Shopify.shop || ''); 4342 if (localStorage.getItem(consentKey) === 'true') { 4343 // Consent was given through our flow â load SDK 4344 loadSwymShopifyScript(); 4345 return; 4346 } 4347 } catch(e) {} 4348 4349 // Check if Shopify native cookie consent was given via the cookie banner. 4350 // If user accepted cookies through Shopify's banner, load SDK normally 4351 // (Ghost-Intent is only needed when NO consent mechanism has been used). 4352 var shopifyConsentGiven = window.Shopify?.customerPrivacy?.preferencesProcessingAllowed?.(); 4353 if (shopifyConsentGiven) { 4354 loadSwymShopifyScript(); 4355 return; 4356 } 4357 4358 console.warn("[Swym Ghost-Intent] SDK blocked until explicit consent is given"); 4359 return; 4360 } 4361 4362 var isCookieBannerVisible = window.Shopify?.customerPrivacy?.shouldShowBanner?.(); 4363 if(!isCookieBannerVisible) { 4364 loadSwymShopifyScript(); 4365 return; 4366 } 4367 var shouldLoadSwymScript = window.Shopify?.customerPrivacy?.preferencesProcessingAllowed?.(); 4368 if (shouldLoadSwymScript) { 4369 loadSwymShopifyScript(); 4370 } else { 4371 console.warn("No customer consent to load Swym Wishlist Plus"); 4372 } 4373 } 4374 function initialiseConsentCheck() { 4375 document.addEventListener("visitorConsentCollected", (event) => { checkConsentAndLoad(); }); 4376 window.Shopify?.loadFeatures?.( 4377 [{name: 'consent-tracking-api', version: '0.1'}], 4378 error => { 4379 consentAPICallbackInvoked = true; 4380 if (error) { 4381 if(!window.Shopify?.customerPrivacy) { 4382 loadSwymShopifyScript(); 4383 return; 4384 } 4385 } 4386 checkConsentAndLoad(); 4387 } 4388 ); 4389 } 4390 function consentCheckFallback(retryCount) { 4391 if(!consentAPICallbackInvoked) { 4392 if (window.Shopify?.customerPrivacy) { 4393 checkConsentAndLoad(); 4394 } else if (retryCount >= 1) { 4395 console.warn("Shopify.loadFeatures unsuccessful on site, refer - https://shopify.dev/docs/api/customer-privacy#loading-the-customer-privacy-api. Proceeding with normal Swym Wishlist Plus load"); 4396 // Ghost-Intent: route through checkConsentAndLoad so SDK block is respected 4397 checkConsentAndLoad(); 4398 } else { 4399 setTimeout(() => consentCheckFallback(retryCount + 1), 1000); 4400 } 4401 } 4402 } 4403 if (document.readyState === "loading") { 4404 document.addEventListener("DOMContentLoaded", initialiseConsentCheck); 4405 window.addEventListener("load", () => consentCheckFallback(0)); 4406 } else { 4407 initialiseConsentCheck(); 4408 } 4409 4410 })(); 4411</script>
4411 4412 4413<!-- BEGIN app snippet: swymSnippet -->
4413<script defer> 4414 (function () { 4415 const currentSwymJSPath = '//premcdn.swymrelay.com/code/swym-shopify.js'; 4416 const currentSwymStorePath = 'https://swymstore-v3premium-01.swymrelay.com'; 4417 const dnsPrefetchLink = `<link rel="dns-prefetch" href="${currentSwymStorePath}" crossorigin>`; 4418 const dnsPrefetchLink2 = `<link rel="dns-prefetch" href="${currentSwymJSPath}">`; 4419 const preConnectLink = `<link rel="preconnect" href="${currentSwymJSPath}">`; 4420 const swymSnippet = document.getElementById('wishlist-embed-init'); 4421 if(dnsPrefetchLink) {swymSnippet.insertAdjacentHTML('afterend', dnsPrefetchLink);} 4422 if(dnsPrefetchLink2) {swymSnippet.insertAdjacentHTML('afterend', dnsPrefetchLink2);} 4423 if(preConnectLink) {swymSnippet.insertAdjacentHTML('afterend', preConnectLink);} 4424 })() 4425</script>
vendor: 1 bytes, line 4425
4425
4426<script id="swym-snippet" type="text"> 4427 window.swymLandingURL = document.URL; 4428 window.swymCart = {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"USD","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}; 4429 window.swymPageLoad = function() { 4430 window.SwymProductVariants = window.SwymProductVariants || {}; 4431 window.SwymHasCartItems = 0 > 0; 4432 window.SwymPageData = {}, window.SwymProductInfo = {}; 4433 var unknown = {et: 0}; 4434 window.SwymPageData = unknown; 4435 4436 window.SwymPageData.uri = window.swymLandingURL; 4437 }; 4438 if(window.selectCallback){ 4439 (function(){ 4440 var originalSelectCallback = window.selectCallback; 4441 window.selectCallback = function(variant){ 4442 originalSelectCallback.apply(this, arguments); 4443 try{ 4444 if(window.triggerSwymVariantEvent){ 4445 window.triggerSwymVariantEvent(variant.id); 4446 } 4447 }catch(err){ 4448 console.warn("Swym selectCallback", err); 4449 } 4450 };})();} 4451 window.swymCustomerId =null; 4452 window.swymCustomerExtraCheck = 4453 null; 4454 var swappName = ("Wishlist" || "Wishlist"); 4455 var swymJSObject = { 4456 pid: "oNyF\/VqOSaXBF+0H+\/dDAy2ddiZofO953yIHaXXWD8Y=", 4457 interface: "/apps/swym" + swappName + "/interfaces/interfaceStore.php?appname=" + swappName 4458 }; 4459 window.swymJSShopifyLoad = function(){ 4460 if(window.swymPageLoad) swymPageLoad(); 4461 if(!window._swat) { 4462 (function (s, w, r, e, l, a, y) { 4463 r['SwymRetailerConfig'] = s; 4464 r[s] = r[s] || function (k, v) { 4465 r[s][k] = v; 4466 }; 4467 })('_swrc', '', window); 4468 _swrc('RetailerId', swymJSObject.pid); 4469 _swrc('Callback', function(){initSwymShopify();}); 4470 }else if(window._swat.postLoader){ 4471 _swrc = window._swat.postLoader; 4472 _swrc('RetailerId', swymJSObject.pid); 4473 _swrc('Callback', function(){initSwymShopify();}); 4474 }else{ 4475 initSwymShopify();} 4476 } 4477 if(!window._SwymPreventAutoLoad) { 4478 swymJSShopifyLoad(); 4479 } 4480</script>
4480 4481 4482<style id="safari-flasher-pre"></style>
4483<script> 4484 if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { 4485 document.getElementById("safari-flasher-pre").innerHTML = '' + '#swym-plugin,#swym-hosted-plugin{display: none;}' + '.swym-button.swym-add-to-wishlist{display: none;}' + '.swym-button.swym-add-to-watchlist{display: none;}' + '#swym-plugin #swym-notepad, #swym-hosted-plugin #swym-notepad{opacity: 0; visibility: hidden;}' + '#swym-plugin #swym-notepad, #swym-plugin #swym-overlay, #swym-plugin #swym-notification,' + '#swym-hosted-plugin #swym-notepad, #swym-hosted-plugin #swym-overlay, #swym-hosted-plugin #swym-notification' + '{-webkit-transition: none; transition: none;}' + ''; 4486 window.SwymCallbacks = window.SwymCallbacks || []; 4487 window.SwymCallbacks.push(function(tracker) { 4488 tracker.evtLayer.addEventListener(tracker.JSEvents.configLoaded, function() { 4489 var x = function() { 4490 SwymUtils.onDOMReady(function() { 4491 var d = document.createElement("div"); 4492 d.innerHTML = "<style id='safari-flasher-post'>" + "#swym-plugin:not(.swym-ready),#swym-hosted-plugin:not(.swym-ready){display: none;}" + ".swym-button.swym-add-to-wishlist:not(.swym-loaded){display: none;}" + ".swym-button.swym-add-to-watchlist:not(.swym-loaded){display: none;}" + "#swym-plugin.swym-ready #swym-notepad, #swym-plugin.swym-ready #swym-overlay, #swym-plugin.swym-ready #swym-notification," + "#swym-hosted-plugin.swym-ready #swym-notepad, #swym-hosted-plugin.swym-ready #swym-overlay, #swym-hosted-plugin.swym-ready #swym-notification" + "{-webkit-transition: opacity 0.3s, visibility 0.3ms, -webkit-transform 0.3ms !important;-moz-transition: opacity 0.3s, visibility 0.3ms, -moz-transform 0.3ms !important;-ms-transition: opacity 0.3s, visibility 0.3ms, -ms-transform 0.3ms !important;-o-transition: opacity 0.3s, visibility 0.3ms, -o-transform 0.3ms !important;transition: opacity 0.3s, visibility 0.3ms, transform 0.3ms !important;}" + "</style>"; 4493 document.head.appendChild(d); 4494 });}; 4495 setTimeout(x, 10); 4496 });});} 4497 window.SwymOverrideMoneyFormat = "${{amount}}"; 4498</script>
4498 4499<style id="swym-product-view-defaults"> .swym-button.swym-add-to-wishlist-view-product:not(.swym-loaded) { display: none; } </style><!-- END app snippet --> 4500
4501<script 4502 4503 id="swymSnippetCheckAndActivate" 4504> 4505 (function () { 4506 var duplicateProneIds = ['safari-flasher-pre', 'swym-product-view-defaults', 'swym-wrap-login-handler']; 4507 4508 function removeDuplicateIdNodes(id) { 4509 var nodes = document.querySelectorAll('#' + id); 4510 nodes.forEach(function (node, index) { 4511 if (index > 0) { 4512 node.remove(); 4513 } 4514 }); 4515 } 4516 4517 function cleanupDuplicateSnippetNodes(activeScript) { 4518 if (!activeScript) { 4519 return; 4520 } 4521 var allSwymSnippets = document.querySelectorAll('script#swym-snippet'); 4522 allSwymSnippets.forEach(function (scriptNode) { 4523 if (scriptNode !== activeScript) { 4524 scriptNode.remove(); 4525 } 4526 }); 4527 } 4528 4529 function cleanupDuplicateActivationGuards() { 4530 var guardScripts = document.querySelectorAll('script#swymSnippetCheckAndActivate'); 4531 guardScripts.forEach(function (scriptNode, index) { 4532 if (index > 0) { 4533 scriptNode.removeAttribute('id'); 4534 } 4535 }); 4536 } 4537 4538 function postDomLoad() { 4539 var activeScript = document.querySelector('script#swym-snippet:not([type="text"])'); 4540 if (!activeScript) { 4541 var inactiveScript = document.querySelector('script#swym-snippet[type="text"]'); 4542 if (inactiveScript) { 4543 inactiveScript.type = 'text/javascript'; 4544 new Function(inactiveScript.textContent)(); 4545 activeScript = inactiveScript; 4546 } 4547 } 4548 4549 cleanupDuplicateSnippetNodes(activeScript); 4550 cleanupDuplicateActivationGuards(); 4551 duplicateProneIds.forEach(removeDuplicateIdNodes); 4552 } 4553 4554 if (document.readyState === 'loading') { 4555 document.addEventListener('DOMContentLoaded', postDomLoad); 4556 } else { 4557 postDomLoad(); 4558 } 4559 })(); 4560</script>
4560 4561 4562 4563
4564<script> 4565 (function () { 4566 const themeSchemaName = window.Shopify.theme.schema_name; 4567 4568 if (!window.SwymCallbacks) { 4569 window.SwymCallbacks = []; 4570 } 4571 window.SwymCallbacks.push(swat => { 4572 if (!swat) { 4573 return; 4574 } 4575 4576 // Ghost-Intent: Sync local wishlist items to cloud when SDK loads after consent 4577 if (window.SwymLocalWishlist && window.SwymLocalWishlist.getSyncableItems().length > 0) { 4578 window.SwymLocalWishlist.syncToCloud(swat); 4579 } 4580 4581 if (window._SwymSDKOnlyMode) { 4582 return; 4583 } 4584 4585 // ENABLE COMMON FEATURES 4586 let swymEnabledCommonFeatures = window.SwymEnabledCommonFeatures; 4587 Object.keys(swymEnabledCommonFeatures).forEach(key => { 4588 if (!swymEnabledCommonFeatures[key]) return; 4589 4590 switch (key) { 4591 case 'add-to-wishlist-collections-button': 4592 // Check if app block is already handling the collections button 4593 if (window.SwymCollectionsConfig) { 4594 return; 4595 } 4596 4597 // Check if v2 default collections is handling it 4598 if (window.SwymAdvancedCollectionsWishlistConfig) { 4599 return; 4600 } 4601 4602 // Fallback to old v1 behavior if v2 config is not present 4603 swat?.collectionsApi?.setDefaultCustomizationOptions(); 4604 swat?.collectionsApi?.initializeCollections(swat, false, themeSchemaName); 4605 4606 break; 4607 case 'add-to-wishlist-pdp-button': 4608 // Check if app block is already handling the PDP button 4609 if (window.swymATWButtonConfig?.shopifyExtensionType === 'appblock') { 4610 return; 4611 } 4612 4613 if (!(window.SwymPageData && window.SwymPageData.et === 1)) { 4614 // Not initiating pdp button as it is not a product page 4615 return; 4616 } 4617 4618 // Inject addtowishlist.css into the document's <head> 4619 var head = document.head; 4620 var pdpButtonStylesheet = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/addtowishlistbutton.css"; 4621 var pdpButtonStylesheetTag = document.createElement('link'); 4622 pdpButtonStylesheetTag.id = `swym-pdp-button-stylesheet`; 4623 pdpButtonStylesheetTag.rel = 'stylesheet'; 4624 pdpButtonStylesheetTag.href = pdpButtonStylesheet; 4625 4626 if (!document.getElementById('swym-pdp-button-stylesheet')) { 4627 head.appendChild(pdpButtonStylesheetTag); 4628 } 4629 4630 var x = document.getElementsByTagName('script')[0]; 4631 function createAndInsertScript(id, src, onLoadCallback) { 4632 var scriptTag = document.createElement('script'); 4633 scriptTag.id = id; 4634 scriptTag.type = 'text/javascript'; 4635 scriptTag.src = src; 4636 scriptTag.onload = onLoadCallback; 4637 x.parentNode.insertBefore(scriptTag, x); 4638 } 4639 4640 var pdpButtonScript = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/addtowishlistbutton.js"; 4641 createAndInsertScript(`swym-pdp-button-script`, pdpButtonScript, function () { 4642 const pdpBtnApi = window.WishlistPlusPDPButtonAPI; 4643 if (pdpBtnApi) { 4644 pdpBtnApi.setDefaultCustomizationOptions(swat); 4645 pdpBtnApi.initializePDPButton(swat, true); 4646 } 4647 }); 4648 break; 4649 default: 4650 return; 4651 } 4652 }); 4653 }); 4654 })(); // IIFE to prevent polluting global scope 4655</script>
4655 4656 4657 4658
4659<script> 4660 (function () { 4661 // Get the settings from Shopify's Liquid variables and create the styles 4662 const isControlCentreEnabledFromMetafield = window?.SwymEnabledCommonFeatures?.["control-centre"]; 4663 const isCommonCustomizationEnabledFromMetafield = window?.SwymWishlistCommonCustomizationSettings && 4664 Object.keys(window.SwymWishlistCommonCustomizationSettings).length > 0; 4665 const isControlCentreEnabledFromBlockSettings = false; 4666 4667 if (!(isControlCentreEnabledFromMetafield && isCommonCustomizationEnabledFromMetafield) && !isControlCentreEnabledFromBlockSettings) { 4668 // Don't enable control centre if this is disabled and block settings are not enabled 4669 return; 4670 } 4671 4672 let borderRadius = 6; 4673 let drawerWidth = window?.SwymWishlistCommonCustomizationSettings?.storefrontLayoutDrawerWidth || 400; 4674 4675 // Check if block settings exist, use them, otherwise fall back to common settings 4676 let primaryBgColor = isControlCentreEnabledFromBlockSettings ? 4677 "#000000" : 4678 window.SwymWishlistCommonCustomizationSettings.primaryColor; 4679 4680 let primaryTextColor = isControlCentreEnabledFromBlockSettings ? 4681 "#ffffff" : 4682 window.SwymWishlistCommonCustomizationSettings.secondaryColor; 4683 4684 let secondaryBgColor = isControlCentreEnabledFromBlockSettings ? 4685 "#F4F8FE" : null; 4686 let secondaryTextColor = isControlCentreEnabledFromBlockSettings ? 4687 "#333333" : null; 4688 4689 // Only use color adjustment functions if we're using common settings 4690 if (!secondaryBgColor || !secondaryTextColor) { 4691 function adjustOpacity(color, opacity) { 4692 if (color[0] === '#') { 4693 color = color.slice(1); 4694 } 4695 4696 if (color.length === 3) { 4697 color = color.split('').map(char => char + char).join(''); 4698 } 4699 4700 const r = parseInt(color.slice(0, 2), 16); 4701 const g = parseInt(color.slice(2, 4), 16); 4702 const b = parseInt(color.slice(4, 6), 16); 4703 4704 return `rgba(${r}, ${g}, ${b}, ${opacity})`; 4705 } 4706 4707 function hexToRgb(color) { 4708 if (color[0] === '#') { 4709 color = color.slice(1); 4710 } 4711 if (color.length === 3) { 4712 color = color.split('').map(c => c + c).join(''); 4713 } 4714 4715 return { 4716 r: parseInt(color.slice(0, 2), 16), 4717 g: parseInt(color.slice(2, 4), 16), 4718 b: parseInt(color.slice(4, 6), 16) 4719 }; 4720 } 4721 4722 function getLuminance({ r, g, b }) { 4723 return 0.299 * r + 0.587 * g + 0.114 * b; 4724 } 4725 4726 function generateSecondaryColors(primaryBgColor, primaryTextColor) { 4727 const secondaryBgOpacity = 0.2; 4728 const secondaryTextOpacity = 0.8; 4729 4730 const secondaryBgColor = adjustOpacity(primaryBgColor, secondaryBgOpacity); 4731 4732 const bgRgb = hexToRgb(primaryBgColor); 4733 const bgLuminance = getLuminance(bgRgb); 4734 4735 // Determine whether to use dark or light text for contrast 4736 const lightText = adjustOpacity(primaryTextColor, secondaryTextOpacity); 4737 const darkText = adjustOpacity(primaryBgColor, secondaryTextOpacity); 4738 4739 const secondaryTextColor = bgLuminance > 186 ? darkText : lightText; 4740 4741 return { 4742 secondaryBgColor, 4743 secondaryTextColor 4744 }; 4745 } 4746 4747 const generatedColors = generateSecondaryColors(primaryBgColor, primaryTextColor); 4748 secondaryBgColor = secondaryBgColor || generatedColors.secondaryBgColor; 4749 secondaryTextColor = secondaryTextColor || generatedColors.secondaryTextColor; 4750 } 4751 4752 // Create the CSS rule 4753 let styles = ` 4754 .swym-storefront-layout-root-component { 4755 --swym-storefront-layout-ui-border-radius: ${borderRadius}px; 4756 --swym-storefront-layout-button-border-radius: ${borderRadius}px; 4757 --swym-storefront-layout-side-drawer-width: ${drawerWidth}px; 4758 --swym-storefront-layout-button-color-bg-primary: ${primaryBgColor}; 4759 --swym-storefront-layout-button-color-text-primary: ${primaryTextColor}; 4760 --swym-storefront-layout-button-color-bg-secondary: ${secondaryBgColor}; 4761 --swym-storefront-layout-button-color-text-secondary: ${secondaryTextColor}; 4762 } 4763 `; 4764 4765 // Create a <style> element and append the styles 4766 let styleSheet = document.createElement("style"); 4767 styleSheet.type = "text/css"; 4768 styleSheet.innerText = styles; 4769 document.head.appendChild(styleSheet); 4770 4771 if (typeof window.SwymStorefrontLayoutContext === 'undefined') { 4772 window.SwymStorefrontLayoutContext = {}; 4773 } 4774 if (typeof window.SwymStorefrontLayoutExtensions === 'undefined'){ 4775 window.SwymStorefrontLayoutExtensions = {}; 4776 } 4777 4778 // Expose block settings toggle state so ThemeCSSMapping can respect it. 4779 // When true, theme editor color pickers take priority over inherited theme CSS variables. 4780 SwymStorefrontLayoutContext.BlockSettingsEnabled = isControlCentreEnabledFromBlockSettings; 4781 4782 if (isControlCentreEnabledFromBlockSettings) { 4783 // If block settings are enabled, use them 4784 SwymStorefrontLayoutContext.Settings = { 4785 EnableStorefrontLayoutOnLauncher: true, 4786 EnableStorefrontLayoutNotification: window?.SwymWishlistCommonCustomizationSettings?.enableStorefrontLayoutNotification ?? true, 4787 StorefrontLayoutType: window?.SwymWishlistCommonCustomizationSettings?.storefrontLayoutType || "as-drawer", 4788 StorefrontLayoutDrawerPosition: "left", 4789 StorefrontLayoutAsSectionContainerId: "swym-wishlist-render-container", 4790 StorefrontLayoutAsSectionPageURL: "/pages/swym-wishlist", 4791 EnableStorefrontLayoutVariantSelector: true, 4792 StorefrontLayoutNotificationPosition: "left", 4793 StorefrontLayoutActionPopupPosition: "left", 4794 StorefrontLayoutNotificationDuration: 5000 4795 }; 4796 } else { 4797 // If only metafield is enabled but no block settings, use common settings 4798 SwymStorefrontLayoutContext.Settings = { 4799 EnableStorefrontLayoutOnLauncher: true, 4800 EnableStorefrontLayoutNotification: window?.SwymWishlistCommonCustomizationSettings?.enableStorefrontLayoutNotification ?? true, 4801 StorefrontLayoutType: window?.SwymWishlistCommonCustomizationSettings?.storefrontLayoutType || "as-drawer", 4802 StorefrontLayoutDrawerPosition: "left", 4803 StorefrontLayoutAsSectionContainerId: "swym-wishlist-render-container", 4804 StorefrontLayoutAsSectionPageURL: "/pages/swym-wishlist", 4805 EnableStorefrontLayoutVariantSelector: true, 4806 StorefrontLayoutNotificationPosition: "left", 4807 StorefrontLayoutActionPopupPosition: "left", 4808 StorefrontLayoutNotificationDuration: 5000 4809 }; 4810 } 4811 const storefrontLayoutCallback = (swat) =>{ 4812 SwymStorefrontLayoutContext.swat = swat; 4813 let isStoreOnPaidPlan = swat.getApp('Wishlist')?.['is-paid']; 4814 let isWishlistEnabled = swat.getApp('Wishlist')?.['enabled']; 4815 SwymStorefrontLayoutContext.Settings = { 4816 ...SwymStorefrontLayoutContext?.Settings, 4817 EnableStorefrontLayoutCollection: window?.SwymEnabledCommonFeatures?.["multiple-wishlist"] ?? false, 4818 EnableStorefrontLayout: isWishlistEnabled && (isControlCentreEnabledFromBlockSettings || isControlCentreEnabledFromMetafield), 4819 } 4820 4821 if(SwymStorefrontLayoutContext?.Settings?.EnableStorefrontLayout){ 4822 if(SwymStorefrontLayoutContext?.CustomEvents?.LayoutInitialized){ 4823 var event = new CustomEvent(SwymStorefrontLayoutContext.CustomEvents.LayoutInitialized, { 4824 detail: { settings: SwymStorefrontLayoutContext?.Settings } 4825 }); 4826 document.dispatchEvent(event); 4827 }else{ 4828 swat.utils.warn(`LayoutInitialized event is not defined.`); 4829 } 4830 }else{ 4831 swat.utils.warn(`Storefront Layout is disabled.`); 4832 document.getElementById("swym-storefront-layout-container")?.remove(); 4833 document.getElementById("swym-storefront-extention-render-container")?.remove(); 4834 } 4835 } 4836 4837 if (!window.SwymCallbacks) { 4838 window.SwymCallbacks = []; 4839 } 4840 window.SwymCallbacks.push(storefrontLayoutCallback); 4841 4842 SwymStorefrontLayoutContext.SwymCustomerData = { 4843 4844 name: null, 4845 email: null 4846 4847 };
4848 SwymStorefrontLayoutContext.isShopperLoggedIn = !!SwymStorefrontLayoutContext?.SwymCustomerData?.email; 4849 })(); 4850</script>
4850 4851 4852 4853 4854 4855</div>
4855<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
4855 4856</body>
4856<script> 4857 if (typeof ometria == 'undefined') window.ometria = {}; 4858 4859 4860 ometria.raw_data = { 4861 template: "cart", 4862 cart_total: 0, 4863 cart_count: 0, 4864 cart: [], 4865 product_id: null, 4866 search_count: null, 4867 search_terms: null, 4868 collection_id: null, 4869 collection_handle: null, 4870 page_handle: null, 4871 collection_count: null, 4872 current_page: 1, 4873 shop_currency: "GBP", 4874 customer_email: null, 4875 namespace: "row:" 4876 }; 4877 4878 4879 4880 (function() { 4881 var url = `${window.location.protocol}//cdn.ometria.com/tags/4be0d6b761992ed8.js?v=2023040614dsfds`; 4882 4883 setTimeout(function() { 4884 var sc = document.createElement('script'); 4885 sc.src = url; 4886 sc.setAttribute('async','true'); 4887 document.getElementsByTagName("head")[0].appendChild(sc); 4888 }, 15); 4889 })(); 4890 </script>
4890<script id="ShopColoursMetadata" type="application/json"> 4891 [{"colour_title": "pecan marl","colour_img": "","colour_hex": "#4d3a33"},{"colour_title": "matcha plaid","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/MATCH-PLAID-v1788364930412.png?77x68","colour_hex": ""},{"colour_title": "chestnut stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/pralinestripe-(1)-v1789475297674.png?100x100","colour_hex": ""},{"colour_title": "berry stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/mauvestripe-v1789475390371.png?100x100","colour_hex": ""},{"colour_title": "pebble","colour_img": "","colour_hex": "#d0d0d0"},{"colour_title": "confetti stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/multistripe-(2)-v1789475382267.png?100x100","colour_hex": ""},{"colour_title": "dark cocoa","colour_img": "","colour_hex": "#6c614e"},{"colour_title": "mint chip","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/MINTCHIP-v1782816901356.png?100x100","colour_hex": ""},{"colour_title": "matcha meadow","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/MATCHAMEADOW-v1788363573636.png?100x100","colour_hex": ""},{"colour_title": "espresso gingham","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/CHESTNUTCHECK-v1788363585812.jpg?100x100","colour_hex": ""},{"colour_title": "chestnut","colour_img": "","colour_hex": "#7b5d52"},{"colour_title": "plum plaid","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/CHERRYFLANNEL-v1788363610119.png?100x100","colour_hex": ""},{"colour_title": "berry plaid","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/PINKFLANNEL-v1788363624413.jpg?100x100","colour_hex": ""},{"colour_title": "choc chip","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/CHOCCHIP-v1782816918502.png?100x100","colour_hex": ""},{"colour_title": "mint stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/BLUESTRIPE-v1782818677748.png?100x100","colour_hex": ""},{"colour_title": "peach stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/PEACHSTRIPE-v1782818701404.png?100x100","colour_hex": ""},{"colour_title": "cotton candy","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/COTTONCANDY-v1782816933345.png?100x100","colour_hex": ""},{"colour_title": "cookie butter","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/COOKIEBUTTER-v1782816966048.png?100x100","colour_hex": ""},{"colour_title": "sorbet","colour_img": "","colour_hex": "#ffeffd"},{"colour_title": "butter cream","colour_img": "","colour_hex": "#fff7e1"},{"colour_title": "buttercream","colour_img": "","colour_hex": "#fff7e1"},{"colour_title": "bloom","colour_img": "","colour_hex": "#f4cccc"},{"colour_title": "grey marl stripe","colour_img": "","colour_hex": "#e9e8ec"},{"colour_title": "multi stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/MULTISTRIPE-v1785249867165.png?100x100","colour_hex": ""},{"colour_title": "aqua stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/BLUESTRIPE-v1785249901062.png?100x100","colour_hex": ""},{"colour_title": "marshmallow","colour_img": "","colour_hex": "#f2f2f2"},{"colour_title": "multi stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/multistripe-(1)-v1789380753512.png?100x100","colour_hex": ""},{"colour_title": "praline stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/pralinestripe-v1789380773326.png?100x100","colour_hex": ""},{"colour_title": "praline","colour_img": "","colour_hex": "#ad8b75"},{"colour_title": "mauve stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/mauvestripe-v1789380796472.png?100x100","colour_hex": ""},{"colour_title": "peppermint polka dot","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/swatch-3-v1781621411555.jpg?100x100","colour_hex": ""},{"colour_title": "monochrome polka dot","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/swatch-2-v1781621427494.jpg?100x100","colour_hex": ""},{"colour_title": "coconut","colour_img": "","colour_hex": "#f2f2f2"},{"colour_title": "vanilla","colour_img": "","colour_hex": "#f2f2f2"}
4891,{"colour_title": "jade","colour_img": "","colour_hex": "#aac994"},{"colour_title": "burgundy","colour_img": "","colour_hex": "#54142c"},{"colour_title": "plum","colour_img": "","colour_hex": "#54142c"},{"colour_title": "ice","colour_img": "","colour_hex": "#ece9e4"},{"colour_title": "black leopard","colour_img": "","colour_hex": "#000000"},{"colour_title": "marine","colour_img": "","colour_hex": "#6291bc"},{"colour_title": "chilli","colour_img": "","colour_hex": "#d6372b"},{"colour_title": "crimson red","colour_img": "","colour_hex": "#b7042d"},{"colour_title": "grey stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/Grey-Stripe-v1759397269430.png?100x100","colour_hex": ""},{"colour_title": "magenta pink","colour_img": "","colour_hex": "#c05273"},{"colour_title": "pink stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/PINKSTRIPE-v1785317036839.png?100x100","colour_hex": ""},{"colour_title": "strawberry red","colour_img": "","colour_hex": "#e65c5c"},{"colour_title": "strawberry","colour_img": "","colour_hex": "#ff3838"},{"colour_title": "oat","colour_img": "","colour_hex": "#fffaed"},{"colour_title": "yellow stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/Yellow-Stripe-v1752573544572.png?100x100","colour_hex": ""},{"colour_title": "blue stripe","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/SWATCH-1-v1777469061858.jpg?100x100","colour_hex": ""},{"colour_title": "yellow","colour_img": "","colour_hex": "#fccf3e"},{"colour_title": "mint","colour_img": "","colour_hex": "#87dcb8"},{"colour_title": "multi mocha","colour_img": "","colour_hex": "#b19886"},{"colour_title": "multi pink","colour_img": "","colour_hex": "#f5b5c9"},{"colour_title": "sky","colour_img": "","colour_hex": "#bfd9f2"},{"colour_title": "blue grey","colour_img": "","colour_hex": "#b6c7db"},{"colour_title": "pecan","colour_img": "","colour_hex": "#2f2420"},{"colour_title": "grape","colour_img": "","colour_hex": "#680737"},{"colour_title": "charcoal grey","colour_img": "","colour_hex": "#766f6e"},{"colour_title": "fog grey","colour_img": "","colour_hex": "#ddd8d8"},{"colour_title": "ecru","colour_img": "","colour_hex": "#fffaed"},{"colour_title": "cherry red","colour_img": "","colour_hex": "#ed2213"},{"colour_title": "cherry","colour_img": "","colour_hex": "#951e1e"},{"colour_title": "royal blue","colour_img": "","colour_hex": "#1a359c"},{"colour_title": "pastel pink","colour_img": "","colour_hex": "#f5dce0"},{"colour_title": "ballet pink","colour_img": "","colour_hex": "#f4e3e9"},{"colour_title": "ice white","colour_img": "","colour_hex": "#f3f6f4"},{"colour_title": "cream marl","colour_img": "","colour_hex": "#ede8d0"},{"colour_title": "ice marl","colour_img": "","colour_hex": "#e5e4e3"},{"colour_title": "charcoal marl","colour_img": "","colour_hex": "#4a4a4a"},{"colour_title": "","colour_img": "","colour_hex": ""},{"colour_title": "","colour_img": "","colour_hex": ""},{"colour_title": "bubblegum pink","colour_img": "","colour_hex": "#ff7096"},{"colour_title": "washed charcoal","colour_img": "","colour_hex": "#615c61"},{"colour_title": "washed ice pink","colour_img": "","colour_hex": "#ecced5"},{"colour_title": "washed blue","colour_img": "","colour_hex": "#939eb3"},{"colour_title": "washed cream","colour_img": "","colour_hex": "#dcd1c9"},{"colour_title": "ash","colour_img": "","colour_hex": "#665e5e"},{"colour_title": "cobalt blue","colour_img": "","colour_hex": "#0038c5"},{"colour_title": "varsity green","colour_img": "","colour_hex": "#017151"},{"colour_title": "pacific grey","colour_img": "","colour_hex": "#e8e8e8"},{"colour_title": "golden yellow","colour_img": "","colour_hex": "#ffe65a"},{"colour_title": "poppy red","colour_img": "","colour_hex": "#fb4437"},{"colour_title": "turquoise blue","colour_img": "","colour_hex": "#02cae7"},{"colour_title": "marble","colour_img": "","colour_hex": "#fff9e6"},{"colour_title": "deep olive","colour_img": "","colour_hex": "#b5a780"},{"colour_title": "mocha brown","colour_img": "","colour_hex": "#967969"},{"colour_title": "sage grey","colour_img": "","colour_hex": "#bfc6b2"},{"colour_title": "sage marl","colour_img": "","colour_hex": "#bbd8c4"},{"colour_title": "pistachio","colour_img": "","colour_hex": "#bbd8c4"},{"colour_title": "bone","colour_img": "","colour_hex": "#fff7ec"},{"colour_title": "lavender blue","colour_img": "","colour_hex": "#a1acff"},{"colour_title": "mineral","colour_img": "","colour_hex": "#bdb6a2"},{"colour_title": "espresso","colour_img": "","colour_hex": "#644d2a"},{"colour_title": "vanilla","colour_img": "","colour_hex": "#fffbe8"},{"colour_title": "washed navy","colour_img": "","colour_hex": "#4479ab"},{"colour_title": "light grey melange","colour_img": "","colour_hex": "#eeeeee"},{"colour_title": "light green","colour_img": "","colour_hex": "#989982"},{"colour_title": "grey melange","colour_img": "","colour_hex": "#808080"},{"colour_title": "cloudy grey","colour_img": "","colour_hex": "#d7dcdd"},{"colour_title": "espresso","colour_img": "","colour_hex": "#bf9f88"},{"colour_title": "cobalt","colour_img": "","colour_hex": "#446ce5"},{"colour_title": "iolite","colour_img": "","colour_hex": "#9598e9"},{"colour_title": "tango red","colour_img": "","colour_hex": "#df2929"},{"colour_title": "ice grey","colour_img": "","colour_hex": "#eeeeee"},{"colour_title": "chocolate","colour_img": "","colour_hex": "#93411b"},{"colour_title": "core: chocolate","colour_img": "","colour_hex": "#5e2e26"},{"colour_title": "electric blue","colour_img": "","colour_hex": "#25b2eb"},{"colour_title": "bubblegum pink","colour_img": "","colour_hex": "#f296ad"},{"colour_title": "powder blue","colour_img": "","colour_hex": "#9fc5e8"},{"colour_title": "powder pink","colour_img": "","colour_hex": "#f6e2ee"},{"colour_title": "cocoa brown","colour_img": "","colour_hex": "#633507"},{"colour_title": "cocoa","colour_img": "","colour_hex": "#a46729"},{"colour_title": "dusk","colour_img": "","colour_hex": "#766c91"},{"colour_title": "cocoa","colour_img": "","colour_hex": "#ab917f"},{"colour_title": "iceberg green","colour_img": "","colour_hex": "#a8c1b4"}
4891,{"colour_title": "jade green","colour_img": "","colour_hex": "#214d57"},{"colour_title": "raspberry","colour_img": "","colour_hex": "#d80134"},{"colour_title": "warm grey","colour_img": "","colour_hex": "#b3b2b0"},{"colour_title": "flamingo pink","colour_img": "","colour_hex": "#fc8eac"},{"colour_title": "fuchsia","colour_img": "","colour_hex": "#fc7adc"},{"colour_title": "fuchsia pink","colour_img": "","colour_hex": "#ff0084"},{"colour_title": "butter yellow","colour_img": "","colour_hex": "#f5e3a0"},{"colour_title": "butter","colour_img": "","colour_hex": "#fff6ab"},{"colour_title": "key lime","colour_img": "","colour_hex": "#e4f9a2"},{"colour_title": "coral orange","colour_img": "","colour_hex": "#ff7f50"},{"colour_title": "vintage grey","colour_img": "","colour_hex": "#bcbcbc"},{"colour_title": "mint green","colour_img": "","colour_hex": "#c7ffd8"},{"colour_title": "soft lilac","colour_img": "","colour_hex": "#bfb2ce"},{"colour_title": "eggshell","colour_img": "","colour_hex": "#faf9e3"},{"colour_title": "violet pink","colour_img": "","colour_hex": "#f8dce0"},{"colour_title": "sugar pink","colour_img": "","colour_hex": "#f882c5"},{"colour_title": "periwinkle","colour_img": "","colour_hex": "#ccccff"},{"colour_title": "soft yellow","colour_img": "","colour_hex": "#ffe9aa"},{"colour_title": "classic navy","colour_img": "","colour_hex": "#12375a"},{"colour_title": "midnight","colour_img": "","colour_hex": "#12375a"},{"colour_title": "soft white","colour_img": "","colour_hex": "#fbfaf5"},{"colour_title": "soft pink","colour_img": "","colour_hex": "#f5dadf"},{"colour_title": "ballet","colour_img": "","colour_hex": "#f5dadf"},{"colour_title": "taupe brown","colour_img": "","colour_hex": "#7e5e60"},{"colour_title": "soft olive","colour_img": "","colour_hex": "#a5ab73"},{"colour_title": "mahogany","colour_img": "","colour_hex": "#751f0b"},{"colour_title": "soft lavender","colour_img": "","colour_hex": "#f7eaff"},{"colour_title": "","colour_img": "","colour_hex": ""},{"colour_title": "soft peach","colour_img": "","colour_hex": "#ffe9e0"},{"colour_title": "soft blue","colour_img": "","colour_hex": "#b8cfe0"},{"colour_title": "bone","colour_img": "","colour_hex": "#f9f0e1"},{"colour_title": "soft grey","colour_img": "","colour_hex": "#eeeeee"},{"colour_title": "plum","colour_img": "","colour_hex": "#741b47"},{"colour_title": "dusty mauve","colour_img": "","colour_hex": "#ead1dc"},{"colour_title": "dusty pink","colour_img": "","colour_hex": "#d5a6bd"},{"colour_title": "dusty lilac","colour_img": "","colour_hex": "#d9d2e9"},{"colour_title": "dusty lavender","colour_img": "","colour_hex": "#d7d2e3"},{"colour_title": "dusty teal","colour_img": "","colour_hex": "#94cfd0"},{"colour_title": "denim blue","colour_img": "","colour_hex": "#cfe2f3"},{"colour_title": "dark red","colour_img": "","colour_hex": "#920707"},{"colour_title": "mauve","colour_img": "","colour_hex": "#e5b6ce"},{"colour_title": "berry","colour_img": "","colour_hex": "#f1cad5"},{"colour_title": "taupe","colour_img": "","colour_hex": "#c7a194"},{"colour_title": "dark rose","colour_img": "","colour_hex": "#a85d82"},{"colour_title": "dark navy","colour_img": "","colour_hex": "#184b7c"},{"colour_title": "","colour_img": "","colour_hex": ""},{"colour_title": "jet black","colour_img": "","colour_hex": "#000000"},{"colour_title": "sage","colour_img": "","colour_hex": "#95a98d"},{"colour_title": "indigo","colour_img": "","colour_hex": "#7d6fa9"},{"colour_title": "","colour_img": "","colour_hex": ""},{"colour_title": "blue print","colour_img": "","colour_hex": "#9fc5e8"},{"colour_title": "violet","colour_img": "","colour_hex": "#b4a7d6"},{"colour_title": "dark purple","colour_img": "","colour_hex": "#5c2a8b"},{"colour_title": "berry","colour_img": "","colour_hex": "#bb0049"},{"colour_title": "dark pink","colour_img": "","colour_hex": "#c54e8c"},{"colour_title": "turquoise","colour_img": "","colour_hex": "#2adeda"},{"colour_title": "warm brown","colour_img": "","colour_hex": "#7f4408"},{"colour_title": "beige print","colour_img": "","colour_hex": "#fce5cd"},{"colour_title": "black","colour_img": "","colour_hex": "#000000"},{"colour_title": "lead blue","colour_img": "","colour_hex": "#4e686e"},{"colour_title": "rust","colour_img": "","colour_hex": "#9c5642"},{"colour_title": "orange","colour_img": "","colour_hex": "#ff850f"},{"colour_title": "pink","colour_img": "","colour_hex": "#e7a5c8"},{"colour_title": "blush pink","colour_img": "","colour_hex": "#ffccd0"},{"colour_title": "blush marl","colour_img": "","colour_hex": "#f4cccc"},{"colour_title": "red","colour_img": "","colour_hex": "#ff0000"},{"colour_title": "light grey","colour_img": "","colour_hex": "#c9c9c9"},{"colour_title": "silver","colour_img": "","colour_hex": "#b2b2b2"},{"colour_title": "cream","colour_img": "","colour_hex": "#f5edd6"},{"colour_title": "lilac","colour_img": "","colour_hex": "#b69dd4"},{"colour_title": "lilac ivory","colour_img": "","colour_hex": "#b69dd4"},{"colour_title": "blue","colour_img": "","colour_hex": "#779fe1"},{"colour_title": "green","colour_img": "","colour_hex": "#6db596"}
4891,{"colour_title": "jade","colour_img": "","colour_hex": "#93c47d"},{"colour_title": "green ivory","colour_img": "","colour_hex": "#6db596"},{"colour_title": "peach","colour_img": "","colour_hex": "#fbac82"},{"colour_title": "black marl","colour_img": "","colour_hex": "#464748"},{"colour_title": "marl black","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/Onyx-Swatch-v1691677279848.png?100x100","colour_hex": ""},{"colour_title": "coral","colour_img": "","colour_hex": "#ff8362"},{"colour_title": "sand","colour_img": "","colour_hex": "#c1a68d"},{"colour_title": "copper brown","colour_img": "","colour_hex": "#a05b14"},{"colour_title": "steel blue","colour_img": "","colour_hex": "#3b5790"},{"colour_title": "mineral green","colour_img": "","colour_hex": "#9fbec3"},{"colour_title": "marled grey","colour_img": "","colour_hex": "#dedede"},{"colour_title": "marled oat","colour_img": "","colour_hex": "#faf3e5"},{"colour_title": "onyx black","colour_img": "","colour_hex": "#252525"},{"colour_title": "navy","colour_img": "","colour_hex": "#313d64"},{"colour_title": "blue violet","colour_img": "","colour_hex": "#818bca"},{"colour_title": "lemon marl","colour_img": "","colour_hex": "#ffefbd"},{"colour_title": "mocha marl","colour_img": "","colour_hex": "#ab917f"},{"colour_title": "pink marl","colour_img": "","colour_hex": "#f7dde7"},{"colour_title": "pale pink marl","colour_img": "","colour_hex": "#ebd1d9"},{"colour_title": "pale pink","colour_img": "","colour_hex": "#e3c7cb"},{"colour_title": "ivory marl","colour_img": "","colour_hex": "#ded6c9"},{"colour_title": "lemon","colour_img": "","colour_hex": "#f6e8c6"},{"colour_title": "tan","colour_img": "","colour_hex": "#b6a08c"},{"colour_title": "blush","colour_img": "","colour_hex": "#f4dddf"},{"colour_title": "ice blue","colour_img": "","colour_hex": "#d2e7f8"},{"colour_title": "ice","colour_img": "","colour_hex": "#ece9e4"},{"colour_title": "bamboo green","colour_img": "","colour_hex": "#c6d6bf"},{"colour_title": "baby blue","colour_img": "","colour_hex": "#abc5e0"},{"colour_title": "baby pink","colour_img": "","colour_hex": "#f3afcc"},{"colour_title": "baby pink print","colour_img": "","colour_hex": "#ff9bd2"},{"colour_title": "slate blue","colour_img": "","colour_hex": "#7f99c9"},{"colour_title": "slate grey","colour_img": "","colour_hex": "#708090"},{"colour_title": "slate","colour_img": "","colour_hex": "#305773"},{"colour_title": "teal green","colour_img": "","colour_hex": "#019190"},{"colour_title": "bright blue","colour_img": "","colour_hex": "#0074fd"},{"colour_title": "light blue","colour_img": "","colour_hex": "#def3ff"},{"colour_title": "dark blue","colour_img": "","colour_hex": "#0561be"},{"colour_title": "purple","colour_img": "","colour_hex": "#b69dd4"},{"colour_title": "lavender","colour_img": "","colour_hex": "#d9d2e9"},{"colour_title": "tie dye","colour_img": "","colour_hex": ""},{"colour_title": "white","colour_img": "","colour_hex": "#ffffff"},{"colour_title": "lime green","colour_img": "","colour_hex": "#cce99e"},{"colour_title": "caramel","colour_img": "","colour_hex": "#c68f65"},{"colour_title": "light brown","colour_img": "","colour_hex": "#864c24"},{"colour_title": "dark brown","colour_img": "","colour_hex": "#56352d"},{"colour_title": "brown","colour_img": "","colour_hex": "#614533"},{"colour_title": "brown marl","colour_img": "","colour_hex": "#be9c86"},{"colour_title": "dark green","colour_img": "","colour_hex": "#124b08"},{"colour_title": "melange blue","colour_img": "","colour_hex": "#7a898f"},{"colour_title": "melange green","colour_img": "","colour_hex": "#b7c2b2"},{"colour_title": "melange grey","colour_img": "","colour_hex": "#a09998"},{"colour_title": "melange brown","colour_img": "","colour_hex": "#ae856c"},{"colour_title": "melange red","colour_img": "","colour_hex": "#a2242f"},{"colour_title": "melange purple","colour_img": "","colour_hex": "#634f62"},{"colour_title": "dark grey","colour_img": "","colour_hex": "#878686"},{"colour_title": "aqua","colour_img": "","colour_hex": "#29bad1"},{"colour_title": "peppermint","colour_img": "","colour_hex": "#afe0e8"},{"colour_title": "teal","colour_img": "","colour_hex": "#008799"},{"colour_title": "ivory","colour_img": "","colour_hex": "#fffff0"},{"colour_title": "candy pink","colour_img": "","colour_hex": "#ff89bf"},{"colour_title": "hot pink","colour_img": "","colour_hex": "#e30d4c"},{"colour_title": "truffle","colour_img": "","colour_hex": "#3c2a28"},{"colour_title": "hot red","colour_img": "","colour_hex": "#cc012c"},{"colour_title": "charcoal","colour_img": "","colour_hex": "#4c515b"},{"colour_title": "sky","colour_img": "","colour_hex": "#afd5f0"},{"colour_title": "sweet pink","colour_img": "","colour_hex": "#f2b1c5"},{"colour_title": "milk","colour_img": "","colour_hex": "#ffffff"},{"colour_title": "coconut polka dot","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/SWATCH-3-v17774714862
489110.jpg?100x100","colour_hex": ""},{"colour_title": "mauve pink","colour_img": "","colour_hex": "#d5adb8"},{"colour_title": "pale grey","colour_img": "","colour_hex": "#c8ccca"},{"colour_title": "grey","colour_img": "","colour_hex": "#c4c4c4"},{"colour_title": "terracotta","colour_img": "","colour_hex": "#ce8477"},{"colour_title": "beige","colour_img": "","colour_hex": "#cfba9e"},{"colour_title": "oatmeal","colour_img": "","colour_hex": "#cfba9e"},{"colour_title": "cool blue","colour_img": "","colour_hex": "#b7c0d7"},{"colour_title": "stone","colour_img": "","colour_hex": "#d1c0a8"},{"colour_title": "multi","colour_img": "","colour_hex": "#eeeeee"},{"colour_title": "white pink","colour_img": "","colour_hex": "#fff4f7"},{"colour_title": "white multi","colour_img": "","colour_hex": "#ffffff"},{"colour_title": "blush polka dot","colour_img": "https://cdn.accentuate.io/24797970513/13138007359569/bo-and-tee-oversized-applique-hoodie-in-ivory-polka-dot_BT11301RebloomIvoryPolkaDot_swatch-v1775120186429.jpg?100x100","colour_hex": ""},{"colour_title": "pink multi","colour_img": "","colour_hex": "#fb9dc8"},{"colour_title": "light pink","colour_img": "","colour_hex": "#ffc0d5"},{"colour_title": "deep orange","colour_img": "","colour_hex": "#ff6600"},{"colour_title": "light orange","colour_img": "","colour_hex": "#fda722"},{"colour_title": "olive","colour_img": "","colour_hex": "#808000"},{"colour_title": "khaki","colour_img": "","colour_hex": "#7f8042"},{"colour_title": "washed khaki","colour_img": "","colour_hex": "#c4ca9c"},{"colour_title": "dark khaki","colour_img": "","colour_hex": "#5b613f"},{"colour_title": "rose","colour_img": "","colour_hex": "#e7a5c8"},{"colour_title": "matcha green","colour_img": "","colour_hex": "#b7b179"},{"colour_title": "matcha","colour_img": "","colour_hex": "#d9ead3"},{"colour_title": "acai","colour_img": "","colour_hex": "#ae7a95"},{"colour_title": "heather grey","colour_img": "","colour_hex": "#d5d5d8"},{"colour_title": "chestnut brown","colour_img": "","colour_hex": "#af876d"},{"colour_title": "cerulean blue","colour_img": "","colour_hex": "#4b81bf"},{"colour_title": "deep red","colour_img": "","colour_hex": "#6b0000"},{"colour_title": "washed black","colour_img": "","colour_hex": "#1f262a"},{"colour_title": "limestone","colour_img": "","colour_hex": "#e9ebd5"},{"colour_title": "heather oat","colour_img": "","colour_hex": "#e2b68f"},{"colour_title": "confidence blue","colour_img": "","colour_hex": "#cfddff"},{"colour_title": "consistency grey","colour_img": "","colour_hex": "#f1f1f1"},{"colour_title": "mocha","colour_img": "","colour_hex": "#915f59"},{"colour_title": "warm taupe","colour_img": "","colour_hex": "#e5ae77"},{"colour_title": "grey marl","colour_img": "","colour_hex": "#e0e0e0"},{"colour_title": "light grey marl","colour_img": "","colour_hex": "#ededed"},{"colour_title": "pink/navy/burgundy","colour_img": "","colour_hex": "#642619"},{"colour_title": "cashmere","colour_img": "","colour_hex": "#ffdba8"},{"colour_title": "fog","colour_img": "","colour_hex": "#eeeeee"},{"colour_title": "onyx","colour_img": "","colour_hex": "#000000"}] 4892 </script>
4892 4893</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.