PageSourceSearch

https://boandtee.com/cart

html boandtee.com collected 2026-09-24 18:37:10 UTC 744,182 bytes, 4,893 lines download raw bytes

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&ndash; 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&amp;width=4470" srcset="//boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=180 180w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=360 360w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=540 540w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=720 720w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=900 900w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=1080 1080w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=1296 1296w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=1512 1512w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=1728 1728w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=1944 1944w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=2160 2160w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=2376 2376w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=2592 2592w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=2880 2880w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=3024 3024w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;width=3440 3440w, //boandtee.com/cdn/shop/files/Alumna-ML_DESKTOP.jpg?v=1756824901&amp;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&amp;width=750" srcset="//boandtee.com/cdn/shop/files/Alumna-ML_MOBILE.jpg?v=1756824898&amp;width=180 180w, //boandtee.com/cdn/shop/files/Alumna-ML_MOBILE.jpg?v=1756824898&amp;width=360 360w, //boandtee.com/cdn/shop/files/Alumna-ML_MOBILE.jpg?v=1756824898&amp;width=540 540w, //boandtee.com/cdn/shop/files/Alumna-ML_MOBILE.jpg?v=1756824898&amp;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>&nbsp;</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&nbsp;</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&amp;width=640" srcset="//boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_trending.jpg?v=1789740991&amp;width=180 180w, //boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_trending.jpg?v=1789740991&amp;width=360 360w, //boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_trending.jpg?v=1789740991&amp;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&amp;width=640" srcset="//boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_BackInStock.jpg?v=1789740988&amp;width=180 180w, //boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_BackInStock.jpg?v=1789740988&amp;width=360 360w, //boandtee.com/cdn/shop/files/New-Homepage_MEGAMENU_BackInStock.jpg?v=1789740988&amp;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&amp;width=640" srcset="//boandtee.com/cdn/shop/files/Ski-WEB.jpg?v=1787139696&amp;width=180 180w, //boandtee.com/cdn/shop/files/Ski-WEB.jpg?v=1787139696&amp;width=360 360w, //boandtee.com/cdn/shop/files/Ski-WEB.jpg?v=1787139696&amp;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&amp;width=640" srcset="//boandtee.com/cdn/shop/files/BT_Menu_image_2jpg_929d8b7d-a858-443d-85ef-86a1cd373f34.jpg?v=1784631349&amp;width=180 180w, //boandtee.com/cdn/shop/files/BT_Menu_image_2jpg_929d8b7d-a858-443d-85ef-86a1cd373f34.jpg?v=1784631349&amp;width=360 360w, //boandtee.com/cdn/shop/files/BT_Menu_image_2jpg_929d8b7d-a858-443d-85ef-86a1cd373f34.jpg?v=1784631349&amp;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&amp;width=640" srcset="//boandtee.com/cdn/shop/files/Sale_731cae76-cce8-488c-a7a3-006f5d8f09a0.jpg?v=1788969481&amp;width=180 180w, //boandtee.com/cdn/shop/files/Sale_731cae76-cce8-488c-a7a3-006f5d8f09a0.jpg?v=1788969481&amp;width=360 360w, //boandtee.com/cdn/shop/files/Sale_731cae76-cce8-488c-a7a3-006f5d8f09a0.jpg?v=1788969481&amp;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&amp;width=640" srcset="//boandtee.com/cdn/shop/files/SaleSportsBra.jpg?v=1788969486&amp;width=180 180w, //boandtee.com/cdn/shop/files/SaleSportsBra.jpg?v=1788969486&amp;width=360 360w, //boandtee.com/cdn/shop/files/SaleSportsBra.jpg?v=1788969486&amp;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          &copy;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&amp;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&amp;width=180 180w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&amp;width=360 360w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&amp;width=540 540w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&amp;width=720 720w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&amp;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&amp;width=900" alt="bestsellers" srcset="//boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&amp;width=180 180w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&amp;width=360 360w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&amp;width=540 540w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&amp;width=720 720w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&amp;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&amp;width=900" alt="back in stock" srcset="//boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&amp;width=180 180w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&amp;width=360 360w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&amp;width=540 540w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&amp;width=720 720w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&amp;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&amp;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&amp;width=180 180w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&amp;width=360 360w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&amp;width=540 540w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&amp;width=720 720w, //boandtee.com/cdn/shop/files/bt-megamenu_search-newin_1x_1_960_9d353393-1259-4ca9-b47a-1e43072c9fa3.jpg?v=1789659879&amp;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&amp;width=900" alt="bestsellers" srcset="//boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&amp;width=180 180w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&amp;width=360 360w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&amp;width=540 540w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&amp;width=720 720w, //boandtee.com/cdn/shop/files/bt-searchimage_0001_6d3a0039_960.jpg?v=1789560302&amp;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&amp;width=900" alt="back in stock" srcset="//boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&amp;width=180 180w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&amp;width=360 360w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&amp;width=540 540w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&amp;width=720 720w, //boandtee.com/cdn/shop/files/bt-searchimage_0004_l10p1_960.jpg?v=1789560269&amp;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.