PageSourceSearch

https://twoblindbrothers.com/cart

html twoblindbrothers.com collected 2026-10-02 05:31:48 UTC 335,085 bytes, 2,311 lines download raw bytes

1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2    "http://www.w3.org/TR/html4/strict.dtd">
3<!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]-->
4<!--[if IE 9 ]><html class="ie9 no-js"> <![endif]-->
5<!--[if (gt IE 9)|!(IE)]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
6<head>
7
8  <!-- Google Tag Manager -->
9<script>
vendor: 327 bytes, lines 9-13
9(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
10new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
11j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
12'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
13})(window,document,'script','dataLayer','
13GTM-WRF9GG7G
vendor: 3 bytes, line 13
13');
13</script>
13
14<!-- End Google Tag Manager -->
15
16
17  
18
19  
19<script>
20    console.log('LAYOUT:theme.liquid')
21    console.log('TEMPLATE:"cart"')
22    console.log('THEME ID:122340769888')
23    console.log('PREVIEW THEME ID URL:https://twoblindbrothers.com/?preview_theme_id=122340769888')
24    let pathname = window.location.pathname
25    if (pathname !== '/') {
26      console.log(`THEME EDITOR:https://admin.shopify.com/store/two-blind-brothers/themes/122340769888/editor?previewPath=${pathname}`)
27    } else {
28      console.log('THEME EDITOR:https://admin.shopify.com/store/two-blind-brothers/themes/122340769888/editor')
29    }
30  </script>
30
31
32<!-- Start of Shoplift scripts -->
33<!-- 2026-05-07T22:05:52.3063795Z -->
34<style>.shoplift-hide { opacity: 0 !important; }</style>
35<style id="sl-preview-bar-hide">#preview-bar-iframe, #PBarNextFrameWrapper { display: none !important; }</style>
36<script type="text/javascript">(function(rootPath, template, themeRole, themeId, isThemePreview){ /* Generated on 2026-10-02T05:00:05.4373831Z */(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
367|;\\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}
36const 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",Oe="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 Ve(a){let e=a.replace(/-/g,"+").replace(/_/g,"/");for(;e.length%4;)e+="=";const t=atob(e),i=Uint8Array.from(t,o=>
36o.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;
36const 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)}
36else 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 V=R.querySelector(A),O=R.querySelector(x);if(V&&O){const L=h[V.value];if(L!==void 0){if(L===0)O.style.display!=="none"&&(O.style.display="none");else if(O.style.display==="none"&&(O.style.display=""),O.textContent){const Q=O.textContent.match(/[\d.]+%/)?.[0];Q&&Q!==`${L}%`&&$(O,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 V of Array.from(R.shadowRoot.querySelectorAll("li")))if(V.textContent?.includes("Save")){const O=V;if(P===0)O.style.display!=="none"&&(O.style.display="none");else{O.style.display==="none"&&(O.style.display="");const L=V.textContent.match(/[\d.]+%/)?.[0];L&&L!==`${P}%`&&$(V,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 V=h[R.value];V!==void 0&&(A=V)}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 V of R){const O=P.querySelector(V.selector)||P.querySelector(`[part~="${V.selector}"]`);O?.textContent&&!O.textContent.includes(g.formattedDiscounted)&&$(O,L=>/\d/.test(L)?g.formattedDiscounted:L)}}function v(){a.subscriptionHideWrongPlans&&a.subscriptionHideWrongPlans(),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?.hy
36pothesis;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];if(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{}}
36document.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);urlParams=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=>
36S.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()}
36async 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 Ve(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=Oe,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);
36const 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
36ategoryFromExistingTests(),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")}
36),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
36ing 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;
36if(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=>
36i.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()=>
36{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}`};
36this.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
36ndToGa??!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){return new URLSearchParams(window.location.search).get(e)||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 )|
36sy(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")}
36,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",
36y):(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}
36const 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
36CookieState(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
36andex\.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
36pera\.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)}
36,{"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
36akao|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
36andex\.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
36: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("two-blind-brothers.myshopify.com","https://app.shoplift.ai","https://events.shoplift.ai",false,false,false,{"sendEvents":false,"mode":"gtag"}
36,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 V=c[x.value];if(V!==void 0){const O=R.textContent.match(/[\d.]+%/)?.[0];O&&O!==`${V}%`&&$(R,L=>N(L,V))}}}}function _(f){const v=f.querySelector("select");if(v)for(const g of Array.from(v.options)){const 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 V of v){const O=R.querySelector(`[part~="${V.selector}"]`);O?.textContent&&!O.textContent.includes(A)&&$(O,L=>/\d/.test(L)?A:L)}}function m(f,v){const 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,V=>N(V,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", 122340769888, false)</script>
36
37<!-- End of Shoplift scripts -->
38
39
40<!-- Hotjar Tracking Code for https://www.twoblindbrothers.com -->
41<script>
vendor: 125 bytes, lines 41-44
41
42    (function(h,o,t,j,a,r){
43        h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
44        h._hjSettings={hjid:
443468127
vendor: 258 bytes, lines 44-49
44,hjsv:6};
45        a=o.getElementsByTagName('head')[0];
46        r=o.createElement('script');r.async=1;
47        r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
48        a.appendChild(r);
49    })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
50</script>
50
51
52    <meta name="google-site-verification" content="ttZca2KoetOEPToVJiLZw0nT_jA3cZ4ixQY5RiTjmKY" />
53
54    <!-- Basic page needs ================================================== -->
55    <meta charset="utf-8">
56    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
57
58    
59
60    
61
62    
63    
64    
65    
66    
67    
68
69    <link rel="shortcut icon" href="//twoblindbrothers.com/cdn/shop/t/278/assets/favicon.png?v=129341062381478472471702066482" type="image/png" />
70
71    <!-- Title and description ================================================== -->
72    <title>
73        Your Shopping Cart &ndash; Two Blind Brothers
74    </title>
75
76    
77
78    <!-- Helpers ================================================== -->
79    <!-- /snippets/social-meta-tags.liquid -->
80
81
82  <meta property="og:type" content="website">
83  <meta property="og:title" content="Your Shopping Cart">
84  
85
86<meta property="og:url" content="https://twoblindbrothers.com/cart">
87<meta property="og:site_name" content="Two Blind Brothers">
88
89
90
91  <meta name="twitter:site" content="@twoblindbros/">
92
93
94  <meta name="twitter:card" content="summary">
95
96
97
98    <link rel="canonical" href="https://twoblindbrothers.com/cart">
99    <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
100    <meta name="theme-color" content="#0c0c0b"><style>
101  @font-face {
102    font-family: 'ABC Diatype';
103    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Bold.eot?v=142736);
104    src: local('ABC Diatype Bold'), local('ABCDiatype-Bold'),
105    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Bold.woff2?v=61621994078008140441702066482) format('woff2'),
106    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Bold.woff?v=118774794543504185321702066484) format('woff');
107    font-weight: 700;
108    font-style: normal;
109    font-display: swap;
110  }
111  @font-face {
112    font-family: 'ABC Diatype';
113    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-BoldItalic.eot?v=142736);
114    src: local('ABC Diatype BoldItalic'), local('ABCDiatype-BoldItalic'),
115    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-BoldItalic.woff2?v=3446157521833915091702066489) format('woff2'),
116    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-BoldItalic.woff?v=126519971189529389871702066482) format('woff');
117    font-weight: 700;
118    font-style: italic;
119    font-display: swap;
120  }
121
122  @font-face {
123    font-family: 'ABC Diatype';
124    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Medium.eot?v=142736);
125    src: local('ABC Diatype Medium'), local('ABCDiatype-Medium'),
126    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Medium.woff2?v=105160479550526472651702066490) format('woff2'),
127    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Medium.woff?v=14588951915142266711702066479) format('woff');
128    font-weight: 500;
129    font-style: normal;
130    font-display: swap;
131  }
132
133  @font-face {
134    font-family: 'ABC Diatype';
135    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-MediumItalic.eot?v=142736);
136    src: local('ABC Diatype MediumItalic'), local('ABCDiatype-MediumItalic'),
137    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-MediumItalic.woff2?v=92103211414022689741702066485) format('woff2'),
138    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-MediumItalic.woff?v=116835433626418491251702066484) format('woff');
139    font-weight: 500;
140    font-style: italic;
141    font-display: swap;
142  }
143
144  @font-face {
145    font-family: 'ABC Diatype';
146    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Regular.eot?v=142736);
147    src: local('ABC Diatype Regular'), local('ABCDiatype-Regular'),
148    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Regular.woff2?v=23638199471490003521702066479) format('woff2'),
149    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Regular.woff?v=34498873463096933311702066485) format('woff');
150    font-weight: 400;
151    font-style: normal;
152    font-display: swap;
153  }
154
155  @font-face {
156    font-family: 'ABC Diatype';
157    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-RegularItalic.eot?v=142736);
158    src: local('ABC Diatype RegularItalic'), local('ABCDiatype-RegularItalic'),
159    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-RegularItalic.woff2?v=119111936877245938531702066484) format('woff2'),
160    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-RegularItalic.woff?v=16655217921606239891702066484) format('woff');
161    font-weight: 400;
162    font-style: italic;
163    font-display: swap;
164  }
165
166  @font-face {
167    font-family: 'helvetica_neuebold';
168    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/helveticaneuebold-webfont.woff2?v=4078072587728333361713202500) format('woff2'),
169         url(//twoblindbrothers.com/cdn/shop/t/278/assets/helveticaneuebold-webfont.woff?v=153274710969038952061713202499) format('woff');
170    font-weight: normal;
171    font-style: normal;
172  }
173
174  .abc-font {
175    font-family: 'ABC Diatype';
176  }
177
178  .font-helvetica-bold {
179    font-family: 'helvetica_neuebold';
180    font-weight: 700;
181  }
182</style>
183<!-- CSS ================================================== -->
184    <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/timber.scss.css?v=128086802768631726781773323265" rel="stylesheet" type="text/css" media="all" />
185    <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/recharge.scss.css?v=162669795343502608011702066509" rel="stylesheet" type="text/css" media="all" />
186
187    
188
189    
190
191    <!-- Header hook for plugins ================================================== -->
191<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
191<meta name="google-site-verification" content="6-QxAWRb8ofpk6AybdtJP7uZBN7HmAKI4QqszudEjsM">
192<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/13308707/digital_wallets/dialog">
193<meta id="in-context-paypal-metadata" data-shop-id="13308707" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD">
194<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
194<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=8192096"></script>
194
195<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
196<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=8192096&shop_id=13308707" crossorigin="anonymous"></script>
vendor: 1 bytes, line 196
196
197<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":13308707,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/13308707","merchantName":"Two Blind Brothers","requiredBillingContactFields":["postalAddress","email"],"requiredShippingContactFields":["postalAddress","email"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Two Blind Brothers","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 197
197
198<script id="shopify-features" type="application/json">{"accessToken":"481a568e74dddfde486227443a6b9500","betas":["rich-media-storefront-analytics"],"domain":"twoblindbrothers.com","predictiveSearch":true,"shopId":13308707,"locale":"en"}</script>
vendor: 1 bytes, line 198
198
199<script>var Shopify = Shopify || {};
200Shopify.shop = "two-blind-brothers.myshopify.com";
201Shopify.locale = "en";
202Shopify.currency = {"active":"USD","rate":"1.0"};
203Shopify.country = "US";
204Shopify.theme = {"name":"Live theme","id":122340769888,"schema_name":null,"schema_version":null,"theme_store_id":null,"role":"main"};
205Shopify.theme.handle = "null";
206Shopify.theme.style = {"id":null,"handle":null};
207Shopify.cdnHost = "twoblindbrothers.com/cdn";
208Shopify.routes = Shopify.routes || {};
209Shopify.routes.root = "/";
210Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js";
211Shopify.SignInWithShop = Shopify.SignInWithShop || {};
212Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {};
213Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 213
213
214<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 214
214
215<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 215
215
216<script>
217  window.ShopifyPay = window.ShopifyPay || {};
218  window.ShopifyPay.apiHost = "shop.app\/pay";
219  window.ShopifyPay.redirectState = null;
220</script>
vendor: 1 bytes, line 220
220
221<script>
222  window.Shopify = window.Shopify || {};
223  window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {};
224  window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 };
225  window.Shopify.SignInWithShop.eligible = true;
226</script>
vendor: 1 bytes, line 226
226
227<script id="shop-js-analytics" type="application/json">{"pageType":"cart"}</script>
vendor: 1 bytes, line 227
227
228<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 228
228
229<script type="module">
230  await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js");
231
232  window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true});
233
234</script>
vendor: 1 bytes, line 234
234
235<script>
236  window.Shopify = window.Shopify || {};
237  if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {};
238  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"]};
239</script>
vendor: 1 bytes, line 239
239
240<script>window.shopifyAppUrls = ["https:\/\/files.getpaloma.com\/shopify-production.js?shop=two-blind-brothers.myshopify.com","https:\/\/static.rechargecdn.com\/assets\/js\/widget.min.js?shop=two-blind-brothers.myshopify.com","https:\/\/config.gorgias.chat\/bundle-loader\/01H2DX32D7RHVBGVWR3EG2HXDS?source=shopify1click\u0026shop=two-blind-brothers.myshopify.com","https:\/\/media.9gtb.com\/loader.js?g_cvt_id=a0d70923-fcdb-4a11-97b9-324294ad9419\u0026shop=two-blind-brothers.myshopify.com",];</script>
240
241
242<script id="__st">var __st={"a":13308707,"offset":-14400,"reqid":"9139c51a-606b-4b3b-af02-ba4be761bda6-1790919106","pageurl":"twoblindbrothers.com\/cart","u":"7f935158330a","p":"cart"};</script>
vendor: 1 bytes, line 242
242
243<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 243
243
244<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'])})(!1,!0)}();</script>
vendor: 1 bytes, line 244
244
245<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//twoblindbrothers.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 245
245
246<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 = "//twoblindbrothers.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>
246<script crossorigin="anonymous" defer="defer" src="//twoblindbrothers.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 246
246
247<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 247
247
248<script>
249  window.Shopify = window.Shopify || {};
250  window.Shopify.MCP = window.Shopify.MCP || {};
251  window.Shopify.MCP.enabled = true;
252  window.Shopify.MCP.shop = "two-blind-brothers.myshopify.com";
253  window.Shopify.MCP.mcpEndpoint = "https:\/\/twoblindbrothers.com\/api\/mcp";
254  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"]}}];
255</script>
vendor: 1 bytes, line 255
255
256<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("\/\/twoblindbrothers.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})();
257</script>
vendor: 1 bytes, line 257
257
258<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://twoblindbrothers.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}};
259</script>
vendor: 1 bytes, line 259
259
260<script data-source-attribution="shopify.dynamic_checkout.buyer_consent">
261  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);
262</script>
vendor: 1 bytes, line 262
262
263<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})}}));
264</script>
264
265<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://twoblindbrothers.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous">
266<style id="shopify-accelerated-checkout-cart">
267        #shopify-buyer-consent {
268  margin-top: 1em;
269  display: inline-block;
270  width: 100%;
271}
272
273#shopify-buyer-consent.hidden {
274  display: none;
275}
276
277#shopify-subscription-policy-button {
278  background: none;
279  border: none;
280  padding: 0;
281  text-decoration: underline;
282  font-size: inherit;
283  cursor: pointer;
284}
285
286#shopify-subscription-policy-button::before {
287  box-shadow: none;
288}
289
290      </style>
291
292<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
vendor: 1 bytes, line 292
292
293<script>
294  (function() {function createScript(url) {
295        var s = document.createElement('script');
296        s.type = 'text/javascript';
297        s.async = true;
298        s.src = url;
299        var x = document.getElementsByTagName('script')[0];
300        x.parentNode.insertBefore(s, x);
301      };
302
303      var urls = [].concat(window.shopifyAppUrls || []);
304
305      // We want to load rebuy immediately
306      var rebuyUrl = window.shopifyAppUrls.find(url => url.includes('cdn.rebuyengine.com'));
307
308      if ( rebuyUrl ) {
309        createScript(rebuyUrl);
310      }
311
312      urls = urls.filter(function(url) {
313        return !url.includes('cdn.rebuyengine.com');
314      });
315
316      function delayLoad(event) {
317        if (event && !event.isTrusted) {
318          return;
319        }
320        setTimeout(function() {
321          for (var i = 0; i < urls.length; i++) {
322            createScript(urls[i]);
323          };},0);
324        events.forEach(function(event) {
325          window.removeEventListener(event, delayLoad);
326        });
327      };
328      var events = ['keydown', 'mousemove', 'touchmove', 'touchstart', 'touchend', 'wheel'];
329      events.forEach(function(event) {
330        window.addEventListener(event, delayLoad);
331      });}());
332</script>
vendor: 1 bytes, line 332
332
333<script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
333
334    
334<script async src="//use.fontawesome.com/3802097393.js"></script>
334
335
336
337    
338
339    
339<script src="https://use.typekit.net/ugw7ksw.js"></script>
339
340    
340<script> try{Typekit.load({  async: true }); }catch(e){} </script>
340
341
342    
343
344    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.css" />
345    
345<script defer src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js"></script>
345
346
347    
347<script type="text/javascript" src="https://addevent.com/libs/atc/1.6.1/atc.min.js" async defer></script>
347
348
349    <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/jquery.fancybox.min.css?v=32046022409454516561702066480" rel="stylesheet" type="text/css" media="all" />
350    
350<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/jquery.fancybox.min.js?v=102984942719613846721702066489"></script>
350
351    
351<script async src="https://unpkg.com/infinite-scroll@4/dist/infinite-scroll.pkgd.min.js"></script>
351
352
353    <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 353-354
353
354    <script async src="https://www.googletagmanager.com/gtag/js?id=
354AW-881678315
vendor: 16 bytes, lines 354-355
354"></script>
355    
355<script>
356        
vendor: 152 bytes, lines 356-360
356window.dataLayer = window.dataLayer || [];
357        function gtag(){dataLayer.push(arguments);}
358        gtag('js', new Date());
359
360        gtag('config', '
360AW-881678315
vendor: 8 bytes, lines 360-361
360');
361    
361</script>
361
362
363    <!-- Google Adwords Tags implemented by Brad ================================================== -->
364
365    
365<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/jquery.infinitescroll.2.1.0.min.js?v=154868730476094579131702066480"></script>
365
366
367    <!-- Start WKND tag. Deploy at the beginning of document head. -->
368    
368<script>
369        (function(d) {
370        var e = d.createElement('script');
371        e.src = d.location.protocol + '//tag.wknd.ai/5456/i.js';
372        e.async = true;
373        d.getElementsByTagName("head")[0].appendChild(e);
374        }(document));
375    </script>
375
376  <!-- End WKND tag -->
377
378
379  <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/custom-40999080.css" rel="stylesheet" type="text/css" media="all" />
380
381
382
383
384  
384<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/reserve-3cb4ad76.js" type="module" crossorigin="anonymous"></script>
384
385  <link rel="modulepreload" href="//twoblindbrothers.com/cdn/shop/t/278/assets/_commonjsHelpers-725317a4.js" crossorigin="anonymous">
386
387
388
389
390  <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/global-navigation-11299834.css" rel="stylesheet" type="text/css" media="all" />
391
392<!-- Begin: Northbeam pixel -->
393  
393<script>(function(){var r;(e=r=r||{}).A="identify",e.B="trackPageView",e.C="fireEmailCaptureEvent",e.D="fireCustomGoal",e.E="firePurchaseEvent";var e="//j.northbeam.io/ota-sp/ae689b81-77f1-468c-bb7e-d7ad823f43fb.js";function t(e){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];a.push({fnName:e,args:n})}var a=[],n=((n={_q:a})[r.A]=function(e,n){return t(r.A,e,n)},n[r.B]=function(){return t(r.B)},n[r.C]=function(e,n){return t(r.C,e,n)},n[r.D]=function(e,n){return t(r.D,e,n)},n[r.E]=function(e){return t(r.E,e)},window.Northbeam=n,document.createElement("script"));n.async=!0,n.src=e,document.head.appendChild(n);})()</script>
393
394    <!-- End: Northbeam pixel -->
395<!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/gdpr_cookie_consent/4fbe573f-a377-4fea-9801-3ee0858cae41 -->
396<link rel="preconnect" href="https://app.consentmo.com" crossorigin data-csm-preconnect="app">
397<link rel="dns-prefetch" href="https://workers.consentmo.com" data-csm-preconnect="workers">
398<link rel="dns-prefetch" href="https://storage.consentmo.com" data-csm-preconnect="storage">
399<link rel="preconnect" href="https://cdn.consentmo.com" crossorigin data-csm-preconnect="cdn"><link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="banner">
400  <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-dialog.consentmo.js" crossorigin data-csm-layout-prefetch="dialog">
401  <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-box.consentmo.js" crossorigin data-csm-layout-prefetch="box">
402  <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-smart-banner.consentmo.js" crossorigin data-csm-layout-prefetch="smart">
403  <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-mobile-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="mobile">
403<script>
404(function () {
405  try {
406    document.documentElement.classList.add('csm-cookie-embed');
407  } catch (e) {}
408})();
409</script>
409<script data-consentmo-data-src-bootstrap>
410(function () {
411  'use strict';
412  if (window.__consentmoDataSrcBootstrapInit) return;
413  window.__consentmoDataSrcBootstrapInit = true;
414
415  var DATA_SRC_SELECTOR = [
416    'script[data-src*="consentmo_cookie_consent"]',
417    'script[data-src*="gdpr_cookie_consent.min"]',
418    'script[data-src*="gdrp_cookie_consent_unlimited"]'
419  ].join(',');
420
421  function activateConsentmoDataSrcScripts() {
422    if (!window.Shopify || !window.Shopify.shop) return;
423    document.querySelectorAll(DATA_SRC_SELECTOR).forEach(function (scriptEl) {
424      // getAttribute: src="" must not count as "already has src" (.src === page URL).
425      if (scriptEl.getAttribute('src')) return;
426      var url = scriptEl.getAttribute('data-src');
427      if (!url) return;
428      if (scriptEl.getAttribute('type') === 'text/plain') {
429        scriptEl.removeAttribute('type');
430      }
431      scriptEl.src = url;
432    });
433  }
434  function scheduleActivation() {
435    activateConsentmoDataSrcScripts();
436    // Retry on next task so other DCL handlers (lazy-loaders) can finish setting Shopify.shop / data-src first.
437    setTimeout(activateConsentmoDataSrcScripts, 0);
438  }
439  if (document.readyState === 'loading') {
440    document.addEventListener('DOMContentLoaded', scheduleActivation, { once: true });
441  } else {
442    scheduleActivation();
443  }
444})();
445</script>
445
446
447
448<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 -->
449
450
451
452
453
454
455
456
457
458
459
460
461  
461<script async src="https://static.klaviyo.com/onsite/js/HMZ6Wk/klaviyo.js?company_id=HMZ6Wk"></script>
461
462  
462<script>!function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();</script>
462
463
464  
465
466
467
468
469  
469<script>
470    window.klaviyoReviewsProductDesignMode = false
471  </script>
471
472
473
474
475
476
477
478
479
480
481<!-- END app block --><!-- BEGIN app block: shopify://apps/okendo/blocks/theme-settings/bb689e69-ea70-4661-8fb7-ad24a2e23c29 --><!-- BEGIN app snippet: header-metafields -->
482
483
484
485
486
487
488
489
490
491
492
493
494    
495        <style data-oke-reviews-version="0.81.8" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/okendo-reviews-styles.9d163ae1.css"></style><style data-oke-reviews-version="0.81.8" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/modules/okendo-star-rating.4cb378a8.css"></style><style data-oke-reviews-version="0.81.8" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/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:""}
495.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://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/fonts/oke-widget-icons.ttf) format("truetype"),url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/fonts/oke-widget-icons.woff) format("woff"),url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/img/oke-widget-icons.bc0d6b0a.svg) format("svg");font-weight:400;font-style:normal;font-display:block}.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
495or: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 32px}@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% - 64px)}@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}
495to{opacity:1}}
496.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:")"}
497.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>
498    
499    
499<script type="application/json" id="oke-reviews-settings">{"subscriberId":"17dfac7f-7c7e-496b-862c-a9fabb64d465","analyticsSettings":{"isWidgetOnScreenTrackingEnabled":true,"provider":"gtag"},"locale":"en","localeAndVariant":{"code":"en"},"matchCustomerLocale":false,"widgetSettings":{"global":{"dateSettings":{"format":{"type":"relative"}},"hideOkendoBranding":true,"stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#000000","interspace":2,"shape":{"type":"default"},"showBorder":false},"showIncentiveIndicator":false,"searchEnginePaginationEnabled":false,"font":{"fontType":"inherit-from-page"}},"homepageCarousel":{"slidesPerPage":{"large":3,"medium":2},"totalSlides":12,"scrollBehaviour":"slide","style":{"showDates":true,"border":{"color":"#E5E5EB","width":{"value":1,"unit":"px"}},"headingFont":{"hasCustomFontSettings":false},"bodyFont":{"hasCustomFontSettings":false},"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"}},"productImageSize":{"value":48,"unit":"px"},"layout":{"name":"default","reviewDetailsPosition":"below","showProductName":false,"showAttributeBars":false,"showProductVariantName":false,"showProductDetails":"only-when-grouped"},"highlightColor":"#0E7A82","spaceAbove":{"value":20,"unit":"px"},"text":{"primaryColor":"#2C3E50","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeSmall":{"value":12,"unit":"px"},"secondaryColor":"#676986"},"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":"minimal","stars":{"height":{"value":16,"unit":"px"}}},"reviewsTab":{"enabled":false},"reviewsWidget":{"tabs":{"reviews":true,"questions":false},"header":{"columnDistribution":"space-between","verticalAlignment":"top","blocks":[{"columnWidth":"half","modules":[{"name":"attributes","layout":"stacked","stretchMode":"stretch"}],"textAlignment":"left"},{"columnWidth":"half","modules":[{"name":"rating-average","layout":"one-line"},{"name":"rating-breakdown","backgroundColor":"#EAEAEA","shadingColor":"#000000","stretchMode":"stretch"}],"textAlignment":"left"}]},"style":{"showDates":false,"border":{"color":"#000000","width":{"value":0,"unit":"px"}},"bodyFont":{"hasCustomFontSettings":false},"headingFont":{"hasCustomFontSettings":false},"filters":{"backgroundColorActive":"#676986","backgroundColor":"#FFFFFF","borderColor":"#000000","borderRadius":{"value":100,"unit":"px"},"borderColorActive":"#676986","textColorActive":"#FFFFFF","textColor":"#000000","searchHighlightColor":"#999999"},"avatar":{"enabled":false},"stars":{"height":{"value":16,"unit":"px"}},"shadingColor":"#FFFFFF","productImageSize":{"value":48,"unit":"px"},"button":{"backgroundColorActive":"#000000","borderColorHover":"#DBDDE4","backgroundColor":"#000000","borderColor":"#DBDDE4","backgroundColorHover":"#000000","textColorHover":"#FFFFFF","borderRadius":{"value":4,"unit":"px"},"borderWidth":{"value":1,"unit":"px"},"borderColorActive":"#000000","textColorActive":"#FFFFFF","textColor":"#FFFFFF","font":{"hasCustomFontSettings":false}},"highlightColor":"#000000","spaceAbove":{"value":20,"unit":"px"},"text":{"primaryColor":"#000000","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeLarge":{"value":20,"unit":"px"},"fontSizeSmall":{"value":12,"unit":"px"},"secondaryColor":"#000000"},"spaceBelow":{"value":20,"unit":"px"},"attributeBar":{"style":"default","backgroundColor":"#D3D4DD","shadingColor":"#9A9DB1","markerColor":"#000000"}},"showWhenEmpty":true,"reviews":{"list":{"layout":{"collapseReviewerDetails":false,"columnAmount":4,"
499name":"default","showAttributeBars":false,"borderStyle":"full","showProductVariantName":false,"showProductDetails":"only-when-grouped"},"initialPageSize":5,"media":{"layout":"hidden"},"truncation":{"bodyMaxLines":3,"truncateAll":false,"enabled":true},"loadMorePageSize":5},"controls":{"filterMode":"off","defaultSort":"date desc","writeReviewButtonEnabled":true,"freeTextSearchEnabled":false}}},"starRatings":{"showWhenEmpty":false,"style":{"spaceAbove":{"value":0,"unit":"px"},"text":{"content":"review-count","style":"number-only","brackets":false},"singleStar":false,"height":{"value":16,"unit":"px"},"spaceBelow":{"value":0,"unit":"px"}},"clickBehavior":"scroll-to-widget"}},"features":{"recorderPlusEnabled":true,"recorderQandaPlusEnabled":true}}</script>
499
500            <style id="oke-css-vars">:root{--oke-widget-spaceAbove:20px;--oke-widget-spaceBelow:20px;--oke-starRating-spaceAbove:0;--oke-starRating-spaceBelow:0;--oke-button-backgroundColor:#000;--oke-button-backgroundColorHover:#000;--oke-button-backgroundColorActive:#000;--oke-button-textColor:#fff;--oke-button-textColorHover:#fff;--oke-button-textColorActive:#fff;--oke-button-borderColor:#dbdde4;--oke-button-borderColorHover:#dbdde4;--oke-button-borderColorActive:#000;--oke-button-borderRadius:4px;--oke-button-borderWidth:1px;--oke-button-fontWeight:700;--oke-button-fontSize:var(--oke-text-regular,14px);--oke-button-fontFamily:inherit;--oke-border-color:#000;--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:undefined;--oke-avatar-backgroundColor:undefined;--oke-avatar-placeholderTextColor:undefined;--oke-highlightColor:#000;--oke-shadingColor:#fff;--oke-productImageSize:48px;--oke-attributeBar-shadingColor:#9a9db1;--oke-attributeBar-borderColor:undefined;--oke-attributeBar-backgroundColor:#d3d4dd;--oke-attributeBar-markerColor:#000;--oke-filter-backgroundColor:#fff;--oke-filter-backgroundColorActive:#676986;--oke-filter-borderColor:#000;--oke-filter-borderColorActive:#676986;--oke-filter-textColor:#000;--oke-filter-textColorActive:#fff;--oke-filter-borderRadius:100px;--oke-filter-searchHighlightColor:#999;--oke-mediaGrid-chevronColor:#676986;--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>
501            <style id="oke-reviews-custom-css">div.okeReviews[data-oke-container] p{font-size:14px}div.okeReviews[data-oke-container] .oke-helpful-vote-button{line-height:1}div.okeReviews[data-oke-container] .oke-helpful-vote-counter{line-height:normal}</style>
502            <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-default--empty" fill="var(--oke-stars-backgroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M3.34 13.86c-.48.3-.76.1-.63-.44l1.08-4.56L.26 5.82c-.42-.36-.32-.7.24-.74l4.63-.37L6.92.39c.2-.52.55-.52.76 0l1.8 4.32 4.62.37c.56.05.67.37.24.74l-3.53 3.04 1.08 4.56c.13.54-.14.74-.63.44L7.3 11.43l-3.96 2.43z"/></symbol><symbol id="oke-star-filled" style="overflow:visible;"><path id="star-default--filled" fill="var(--oke-stars-foregroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M3.34 13.86c-.48.3-.76.1-.63-.44l1.08-4.56L.26 5.82c-.42-.36-.32-.7.24-.74l4.63-.37L6.92.39c.2-.52.55-.52.76 0l1.8 4.32 4.62.37c.56.05.67.37.24.74l-3.53 3.04 1.08 4.56c.13.54-.14.74-.63.44L7.3 11.43l-3.96 2.43z"/></symbol></svg></template>
502<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>
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516<!-- END app snippet -->
517
518    <!-- BEGIN app snippet: okendo-reviews-json-ld -->
519<!-- END app snippet -->
520
521<!-- BEGIN app snippet: widget-plus-initialisation-script -->
522
523
524
525
526    
526<script async id="okendo-reviews-script" src="https://cdn-static.okendo.io/reviews-widget-plus/js/okendo-reviews.js"></script>
526
527
528<!-- END app snippet -->
529
530
531<!-- END app block --><!-- BEGIN app block: shopify://apps/rebuy-personalization-engine/blocks/rebuy-global-embed/a26ae9b9-933b-40bf-bbc6-bf1220bbc4dc -->
532<script>
533  window.Rebuy = window.Rebuy || {};
534  window.Rebuy.customer = window.Rebuy.customer || {};
535  
536  window.Rebuy.market = window.Rebuy.market || {};
537  
538  window.Rebuy.market.country = "US";
539  
540  
541  window.Rebuy.market.locale = "en";
542  
543</script>
543
544
545
546<link rel="preconnect" href="https://cdn.rebuyengine.com">
547  <link rel="preconnect" href="https://rebuyengine.com" crossorigin>
548  <link rel="preconnect" href="https://cached.rebuyengine.com" crossorigin>
549  
549<script async src="https://cdn.rebuyengine.com/onsite/js/rebuy.js?shop=two-blind-brothers.myshopify.com"></script>
549
550
551
552<!-- END app block --><!-- BEGIN app block: shopify://apps/tolstoy-ads-image-video/blocks/widget-block/06fa8282-42ff-403e-b67c-1936776aed11 -->
553
554
555
556
557
558
559
560
561
562                
563
564
565
566
567
568
569
570
571
572
573
574<script
575  type="module"
576  async
577  src="https://widget.gotolstoy.com/we/widget.js"
578  data-shop=two-blind-brothers.myshopify.com
579  data-app-key=700d386d-5abe-4e24-886d-969b2ede5a54
580  data-should-use-cache=true
581  data-cache-version=19f2c1e0263
582  data-product-gallery-projects="[]"
583  data-collection-gallery-projects="[]"
584  data-product-id=""
585  data-template-name="cart"
586  data-ot-ignore
587  data-cookieconsent="ignore"
588>
589</script>
vendor: 1 bytes, line 589
589
590<script
591  type="module"
592  async
593  src="https://play.gotolstoy.com/widget-v2/widget.js"
594  id="tolstoy-widget-script"
595  data-shop=two-blind-brothers.myshopify.com
596  data-app-key=700d386d-5abe-4e24-886d-969b2ede5a54
597  data-should-use-cache=true
598  data-cache-version=19f2c1e0263
599  data-product-gallery-projects="[]"
600  data-collection-gallery-projects="[]"
601  data-product-id=""
602  data-collection-id=""
603  data-shop-assistant-enabled="false"
604  data-search-bar-widget-enabled="false"
605  data-template-name="cart"
606  data-customer-id=""
607  data-ot-ignore
608  data-cookieconsent="ignore"
609></script>
vendor: 1 bytes, line 609
609
610<script
611  type="module"
612  async
613  src="https://play.gotolstoy.com/widget-v2/widget.brand-mcp.js"
614  data-app-key=700d386d-5abe-4e24-886d-969b2ede5a54
615  data-ot-ignore
616  data-cookieconsent="ignore"
617></script>
vendor: 1 bytes, line 617
617
618<script>
619  window.tolstoyCurrencySymbol = "$";
620  window.tolstoyMoneyFormat = "${{amount_no_decimals}}";
621</script>
vendor: 1 bytes, line 621
621
622<script>
623  (function(){
624    function hideOrphanedTiles(){
625      var els = document.querySelectorAll('.tolstoy-collection-page-tile,tolstoy-collection-tile');
626      for(var i=0;i<els.length;i++){
627        if(els[i].children.length>0) continue;
628        els[i].style.setProperty('display','none','important');
629        var w=els[i].closest('[class*="tolstoy-grid"]')||els[i].closest('.tolstoy-collection-page-tile-wrapper');
630        if(w) w.style.setProperty('display','none','important');
631      }
632    }
633    if(document.readyState==='loading'){
634      document.addEventListener('DOMContentLoaded',hideOrphanedTiles);
635    }else{
636      hideOrphanedTiles();
637    }
638  })();
639</script>
vendor: 1 bytes, line 639
639
640<script>
641  window.tolstoyDebug = {
642    enable: () => {
643      fetch('/cart/update.js', {
644        method: 'POST',
645        headers: { 'Content-Type': 'application/json' },
646        body: JSON.stringify({ attributes: { TolstoyDebugEnabled: 'true' } })
647      })
648      .then(response => response.json())
649      .then(() => window.location.reload());
650    },
651    disable: () => {
652      fetch('/cart/update.js', {
653        method: 'POST',
654        headers: { 'Content-Type': 'application/json' },
655        body: JSON.stringify({ attributes: { TolstoyDebugEnabled: null } })
656      })
657      .then(response => response.json())
658      .then(() => window.location.reload())
659    },
660    status: async () => {
661      const response = await fetch('/cart.js');
662      const json = await response.json();
663      console.log(json.attributes);
664    }
665  }
666</script>
666
667
668<!-- END app block -->
668<script src="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/consentmo_cookie_consent.js" type="text/javascript" defer="defer"></script>
668
669<meta property="og:image" content="https://cdn.shopify.com/s/files/1/1330/8707/files/Social_Share_Image.jpg?v=1714672345" />
670<meta property="og:image:secure_url" content="https://cdn.shopify.com/s/files/1/1330/8707/files/Social_Share_Image.jpg?v=1714672345" />
671<meta property="og:image:width" content="1200" />
672<meta property="og:image:height" content="628" />
673<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
674<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: 13308707,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 674
674
675<script>
676  window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || [];
677</script>
vendor: 1 bytes, line 677
677
678<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}
678).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: 13308707,storefrontBaseUrl: "https://twoblindbrothers.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://twoblindbrothers.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2705227872","configuration":"{\"myshopifyDomain\":\"two-blind-brothers.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"23b97d18e2aa74363140dc29c9284e87","type":"APP","apiClientId":2775569,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"}
678,{"id":"1510342752","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"9bce1c0cdfc09538057898e4ff134fa2","type":"APP","apiClientId":30400643073,"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":"1499037792","configuration":"{\"tenantId\":\"a428e91e-2b11-4ea4-b2a3-f860d7ccfa66\", \"shop\":\"two-blind-brothers.myshopify.com\", \"datasourceId\":\"e860cf2c-31d8-4d12-aab2-7437c6e642c6\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"480ec4c467668a19b56bc858d759ef88","type":"APP","apiClientId":4294333,"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":"1262387296","configuration":"{\"accountID\":\"two-blind-brothers.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c036f20e16986dd29d452a2b9058704e","type":"APP","apiClientId":316241608705,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1075249248","configuration":"{\"vibePixelId\":\"hZ7kV0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"72859894ec8aa8d5e0246c40aaed9466","type":"APP","apiClientId":132266098689,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":[],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1067712608","configuration":"{\"pixelCode\":\"CL4LFBBC77UD34TA49B0\"}","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":"1031962720","configuration":"{\"accountID\":\"HMZ6Wk\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"617939040","configuration":"{\"debug\":\"false\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"a9a83cf44fb282052ff936f7ab101058","type":"APP","apiClientId":4539653,"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":"329646176","configuration":"{\"token\":\"cb9ac6bd-94a3-4340-bfa8-d789a7e4793f\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"a11948d157c1c71bab368db7465b61ce","type":"APP","apiClientId":149080899585,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"269254752","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"AW-881678315\\\",\\\"GT-TB654X7\\\"],\\\"target_country\\\":\\\"US\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/FSD6CNrs64gBEOuvtaQD\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/SHYtCN3s64gBEOuvtaQD\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-Q8VCXXLR00\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/g5sMCNTs64gBEOuvtaQD\\\",\\\"MC-R96CCKGP1P\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-Q8VCXXLR00\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/hm0bCNHs64gBEOuvtaQD\\\",\\\"MC-R96CCKGP1P\\\",\\\"AW-881678315\\\/lioxCOzw64gBEOuvtaQD\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/PvlbCM7s64gBEOuvtaQD\\\",\\\"MC-R96CCKGP1P\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-Q8VCXXLR00\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/3YDiCODs64gBEOuvtaQD\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/yzGYCNfs64gBEOuvtaQD\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-Q8VCXXLR00\\\"}],\\\"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":"98828384","configuration":"{\"pixel_id\":\"982280505227025\",\"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":"29261920","configuration":"{\"tagID\":\"2612506441653\"}","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":"21987424","configuration":"{\"northbeamId\": \"ae689b81-77f1-468c-bb7e-d7ad823f43fb\", \"collectorDomain\": \"i.twoblindbrothers.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"e46c2d6352a678fc6581f4bd0bc772e1","type":"APP","apiClientId":3188721,"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":"7143520","configuration":"{\"shop\":\"two-blind-brothers.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"]}
678,"dataSharingState":"unrestricted"},{"id":"60293216","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"4","type":"CUSTOM","privacyPurposes":[],"name":"Reddit Pixel"},{"id":"60325984","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"2","type":"CUSTOM","privacyPurposes":[],"name":"Bing UET"},{"id":"60391520","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"3","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"],"name":"Twitter UWT"},{"id":"60522592","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"ATTN Pixel"},{"id":"83951712","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"],"name":"Northbeam Event 2025"},{"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":"Two Blind Brothers","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"two-blind-brothers.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/twoblindbrothers.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://twoblindbrothers.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"122340769888","themePublished":"true","eventMetadataId":"2484df84-9e44-4c99-8014-a692b340ff35","pageType":"cart","shopId":"13308707","storefrontBaseUrl":"https:\/\/twoblindbrothers.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
678<script>
679  window.ShopifyAnalytics = window.ShopifyAnalytics || {};
680  window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
681  window.ShopifyAnalytics.meta.currency = 'USD';
682  var meta = {"page":{"pageType":"cart","requestId":"9139c51a-606b-4b3b-af02-ba4be761bda6-1790919106"}};
683  for (var attr in meta) {
684    window.ShopifyAnalytics.meta[attr] = meta[attr];
685  }
686</script>
vendor: 1 bytes, line 686
686
687<script class="analytics">
688  (function () {
689    var customDocumentWrite = function(content) {
690      var jquery = null;
691
692      if (window.jQuery) {
693        jquery = window.jQuery;
694      } else if (window.Checkout && window.Checkout.$) {
695        jquery = window.Checkout.$;
696      }
697
698      if (jquery) {
699        jquery('body').append(content);
700      }
701    };
702
703    var hasLoggedConversion = function(token) {
704      if (token) {
705        return document.cookie.indexOf('loggedConversion=' + token) !== -1;
706      }
707      return false;
708    }
709
710    var setCookieIfConversion = function(token) {
711      if (token) {
712        var twoMonthsFromNow = new Date(Date.now());
713        twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);
714
715        document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow;
716      }
717    }
718
719    var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
720    window.ShopifyAnalytics.lib.trekkie = window.trekkie;
721    if (trekkie.integrations) {
722      return;
723    }
724    trekkie.methods = [
725      'identify',
726      'page',
727      'ready',
728      'track',
729      'trackForm',
730      'trackLink'
731    ];
732    trekkie.factory = function(method) {
733      return function() {
734        var args = Array.prototype.slice.call(arguments);
735        args.unshift(method);
736        trekkie.push(args);
737        if (method == 'track' || method == 'page') {
738          var pageUrl;
739          try {
740            pageUrl = window.location.href;
741          } catch (e) {}
742          var pageReferrer;
743          try {
744            pageReferrer = document.referrer;
745          } catch (e) {}
746          try {
747            if (window.__TREKKIE_SHIM_QUEUE == null) {
748              window.__TREKKIE_SHIM_QUEUE = [];
749            }
750            window.__TREKKIE_SHIM_QUEUE.push({
751              from: 'trekkie-stub',
752              method: method,
753              args: args.slice(1),
754              pageContext: {
755                url: pageUrl,
756                referrer: pageReferrer
757              }
758            });
759          } catch (e) {
760            // no-op
761          }
762        }
763        return trekkie;
764      };
765    };
766    for (var i = 0; i < trekkie.methods.length; i++) {
767      var key = trekkie.methods[i];
768      trekkie[key] = trekkie.factory(key);
769    }
770    trekkie.load = function(config) {
771      trekkie.config = config || {};
772      trekkie.config.initialDocumentCookie = document.cookie;
773      var first = document.getElementsByTagName('script')[0];
774var script = document.createElement('script');
775script.type = 'text/javascript';
776script.onerror = function(e) {
777  var scriptFallback = document.createElement('script');
778  scriptFallback.type = 'text/javascript';
779  scriptFallback.onerror = function(error) {
780          var Monorail = {
781      produce: function produce(monorailDomain, schemaId, payload) {
782        var currentMs = new Date().getTime();
783        var event = {
784          schema_id: schemaId,
785          payload: payload,
786          metadata: {
787            event_created_at_ms: currentMs,
788            event_sent_at_ms: currentMs
789          }
790        };
791        return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event));
792      },
793      sendRequest: function sendRequest(endpointUrl, payload) {
794        // Try the sendBeacon API
795        if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) {
796          var blobData = new window.Blob([payload], {
797            type: 'text/plain'
798          });
799
800          if (window.navigator.sendBeacon(endpointUrl, blobData)) {
801            return true;
802          } // sendBeacon was not successful
803
804        } // XHR beacon
805
806        var xhr = new XMLHttpRequest();
807
808        try {
809          xhr.open('POST', endpointUrl);
810          xhr.setRequestHeader('Content-Type', 'text/plain');
811          xhr.send(payload);
812        } catch (e) {
813          console.log(e);
814        }
815
816        return false;
817      },
818      isIos12: function isIos12() {
819        return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1;
820      }
821    };
822    Monorail.produce('monorail-edge.shopifysvc.com',
823      'trekkie_storefront_load_errors/1.1',
824      {shop_id: 13308707,
825      theme_id: 122340769888,
826      app_name: "storefront",
827      context_url: window.location.href,
828      source_url: "//twoblindbrothers.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"});
829
830  };
831  scriptFallback.async = true;
832  scriptFallback.src = '//twoblindbrothers.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js';
833  first.parentNode.insertBefore(scriptFallback, first);
834};
835script.async = true;
836script.src = '//twoblindbrothers.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js';
837first.parentNode.insertBefore(script, first);
838
839    };
840    trekkie.load(
841      {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":13308707,"isMerchantRequest":null,"themeId":122340769888,"themeCityHash":"14711308733596041529","contentLanguage":"en","currency":"USD","eventMetadataId":"2484df84-9e44-4c99-8014-a692b340ff35"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}}
842    );
843
844    var loaded = false;
845    trekkie.ready(function() {
846      if (loaded) return;
847      loaded = true;
848
849      window.ShopifyAnalytics.lib = window.trekkie;
850
851      var originalDocumentWrite = document.write;
852      document.write = customDocumentWrite;
853      try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
854      document.write = originalDocumentWrite;
855
856      var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/)
857      var token = match? match[1]: undefined;
858      if (!hasLoggedConversion(token)) {
859        setCookieIfConversion(token);
860        
861      }
862    });
863
864    window.ShopifyAnalytics.lib.page(null,{"pageType":"cart","requestId":"9139c51a-606b-4b3b-af02-ba4be761bda6-1790919106","shopifyEmitted":true});
865
866    var eventsListenerScript = document.createElement('script');
867    eventsListenerScript.async = true;
868    eventsListenerScript.src = "//twoblindbrothers.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js";
869    document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
870})();</script>
870
871  
871<script>
872  if (!window.ga || (window.ga && typeof window.ga !== 'function')) {
873    window.ga = function ga() {
874      (window.ga.q = window.ga.q || []).push(arguments);
875      if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
876        window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"});
877      }
878      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.");
879    };
880    if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
881      window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"});
882    }
883  }
884</script>
vendor: 1 bytes, line 884
884
885<script
886  defer
887  src="https://twoblindbrothers.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js"
888  data-application="storefront-renderer"
889  data-shop-id="13308707"
890  data-render-region="gcp-us-central1"
891  data-page-type="cart"
892  data-theme-instance-id="122340769888"
893  data-theme-name=""
894  data-theme-version=""
895  data-monorail-region="shop_domain"
896  data-resource-timing-sampling-rate="10"
897  data-shs="true"
898  data-shs-beacon="true"
899  data-shs-export-with-fetch="true"
900  data-shs-logs-sample-rate="1"
901  data-shs-beacon-endpoint="https://twoblindbrothers.com/api/collect"
902></script>
902
903<meta name="shopify-y" content="1b0e9251-a7ba-4e27-90a7-043ee3acdf07" data-expiration="1822476706000"><meta name="shopify-s" content="eed2af9c-7c50-4a86-8dbc-899cab237b1a" data-expiration="1790920906000"><meta name="new-cookie-storage-activated" content="t">
904</head>
905
906
907<body id="your-shopping-cart" class="template-cart">
908
909  <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 909-910
909
910<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
910GTM-WRF9GG7G
vendor: 83 bytes, lines 910-911
910"
911height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
912<!-- End Google Tag Manager (noscript) -->
913
914
915
916    <!-- Conversion Pixel for [lead]- DO NOT MODIFY -->
917        
918    <!-- End of Conversion Pixel -->
919
920    <div class="sr-only">
921        
922    </div>
923    <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 923-924
923
924    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
924GTM-NJTDWKD
vendor: 87 bytes, lines 924-925
924" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
925    
925<!-- End Google Tag Manager (noscript) -->
926
927  <div id="PageContainer">
928
929    <div id="custom-reserve-announcement-bar">
930      <div id="shopify-section-reserve-announcement-bar" class="shopify-section">
931
932
933
934
935</div>
936    </div>
937
938    <div id="shopify-section-global-navigation" class="shopify-section"><style>
939  .header-reserve__menu-item-icon-lock > svg > path {
940    transition-duration: .25s;
941  }
942
943  .js-header-reserve-navigation:hover .header-reserve__menu-item-icon-lock > svg > path {
944    fill: #3d3d3d;
945  }
946
947  .hover:hover .header-reserve__menu-item-icon-lock > svg > path {
948    fill: #3d3d3d;
949  }
950
951  .js-header-reserve-navigation:hover .text-grey {
952    color: #3d3d3d;
953  }
954
955  .hover:hover {
956    color: #3d3d3d;
957  }
958
959  .none {
960    display: none;
961  }
962
963  .love-tag-icon {
964    margin-top: -6px;
965    display: inline-block;
966  }
967
968  .love-tag-fix {
969    position: absolute;
970    left: -50px;
971    top: -50px;
972  }
973
974  #rebuy-widget-175048 {
975    padding: 0px;
976  }
977</style>
978  <header-reserve class="block bg-white header-reserve" id="headerReserve">
979    <div class="fixed inset-0 opacity-0 z-10 w-full h-full bg-black/40 invisible transition-all duration-300 ease-in-out [.is-active_&]:opacity-100 [.is-active_&]:visible" data-menu-overlay></div>
980    
981    <span class="love-tag-fix">
982
983<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="26" zoomAndPan="magnify" viewBox="0 0 75 74.999997" height="26" preserveAspectRatio="xMidYMid meet" version="1.0"><defs><clipPath id="4bd791745a"><path d="M 4 5 L 62 5 L 62 70 L 4 70 Z M 4 5" clip-rule="nonzero"/></clipPath><clipPath id="0b881fa5f7"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="5e6f85307e"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="7cf9d2691d"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="771b14f9a0"><path d="M 23 24 L 49 24 L 49 48 L 23 48 Z M 23 24" clip-rule="nonzero"/></clipPath><clipPath id="0d9462095f"><path d="M 28.203125 21.335938 L 50.808594 33.777344 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.203125 21.335938" clip-rule="nonzero"/></clipPath><clipPath id="5b02e7e0d8"><path d="M 27.320312 25.0625 C 23.828125 27.070312 23.503906 30.714844 24.269531 33.164062 L 28.742188 47.464844 L 43 43.511719 C 45.429688 42.667969 46.984375 41.207031 47.753906 39.050781 C 48.816406 36.070312 47.726562 32.703125 45.109375 30.867188 C 43.5 29.742188 41.582031 29.316406 39.703125 29.679688 C 39.199219 29.777344 38.710938 29.925781 38.25 30.128906 C 38.148438 29.554688 37.972656 28.980469 37.726562 28.425781 C 36.863281 26.484375 35.222656 24.996094 33.21875 24.347656 C 31.320312 23.734375 29.171875 23.996094 27.320312 25.0625 Z M 27.320312 25.0625" clip-rule="nonzero"/></clipPath></defs><g clip-path="url(#4bd791745a)"><g clip-path="url(#0b881fa5f7)"><g clip-path="url(#5e6f85307e)"><g clip-path="url(#7cf9d2691d)"><path fill="#000000" d="M 40.742188 69.582031 L 4.113281 50.609375 L 24.753906 10.753906 L 41.050781 5.5625 L 56.222656 13.421875 L 61.382812 29.726562 Z M 5.203125 50.261719 L 40.394531 68.492188 L 60.511719 29.652344 L 55.550781 13.988281 L 40.972656 6.4375 L 25.320312 11.425781 Z M 44.753906 16.988281 C 44.449219 16.832031 44.183594 16.621094 43.964844 16.359375 C 43.742188 16.09375 43.578125 15.800781 43.476562 15.472656 C 43.371094 15.144531 43.335938 14.808594 43.363281 14.464844 C 43.394531 14.121094 43.488281 13.796875 43.644531 13.492188 C 43.804688 13.1875 44.015625 12.921875 44.277344 12.699219 C 44.539062 12.476562 44.835938 12.316406 45.164062 12.210938 C 45.492188 12.105469 45.828125 12.066406 46.167969 12.097656 C 46.511719 12.125 46.835938 12.21875 47.140625 12.378906 C 47.445312 12.535156 47.710938 12.746094 47.929688 13.011719 C 48.152344 13.273438 48.316406 13.570312 48.417969 13.894531 C 48.523438 14.222656 48.558594 14.558594 48.53125 14.902344 C 48.5 15.246094 48.40625 15.570312 48.25 15.875 C 48.089844 16.179688 47.878906 16.445312 47.617188 16.667969 C 47.351562 16.886719 47.058594 17.050781 46.730469 17.15625 C 46.402344 17.261719 46.066406 17.296875 45.722656 17.269531 C 45.382812 17.238281 45.058594 17.148438 44.753906 16.988281 Z M 46.769531 13.097656 C 46.558594 12.988281 46.335938 12.925781 46.101562 12.90625 C 45.863281 12.882812 45.632812 12.910156 45.410156 12.980469 C 45.183594 13.054688 44.980469 13.167969 44.796875 13.320312 C 44.617188 13.472656 44.472656 13.652344 44.363281 13.863281 C 44.253906 14.074219 44.191406 14.296875 44.167969 14.53125 C 44.148438 14.769531 44.175781 15 44.246094 15.226562 C 44.316406 15.449219 44.429688 15.652344 44.582031 15.835938 C 44.734375 16.015625 44.914062 16.160156 45.125 16.269531 C 45.335938 16.378906 45.558594 16.441406 45.792969 16.460938 C 46.03125 16.484375 46.261719 16.457031 46.484375 16.386719 C 46.710938 16.3125 46.914062 16.199219 47.09375 16.046875 C 47.277344 15.894531 47.421875 15.714844 47.53125 15.503906 C 47.640625 15.292969 47.703125 15.070312 47.722656 14.835938 C 47.742188 14.597656 47.71875 14.367188 47.648438 14.140625 C 47.574219 13.917969 47.464844 13.714844 47.3125 13.53125 C 47.160156 13.351562 46.976562 13.207031 46.769531 13.097656 Z M 46.769531 13.097656" fill-opacity="1" fill-rule="nonzero"/></g></g></g></g><g clip-path="url(#771b14f9a0)"><g clip-path="url(#0d9462095f)"><g clip-path="url(#5b02e7e0d8)"><path fill="#ff3131" d="M 28.160156 21.414062 L 50.765625 33.855469 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.160156 21.414062" fill-opacity="1" fill-rule="nonzero"/></g></g></g></svg></span>
984    <div class="header-reserve__wrapper relative flex justify-center w-full items-center max-w-[1440px] mx-auto pt-4 pb-[12px] px-4 bg-white z-[99] md:px-10 lg:justify-between lg:py-[26px] lg:px-[56px]">
985      <nav class="absolute header-reserve__nav-mobile left-4 sm:left-8 md:left-10 lg:hidden">
986        <button class="hamburger--spring header-reserve__hamburger" type="button" data-btn-menu-trigger id="headerReserveButton" aria-label="Hamburger Menu">
987          <span class="header-reserve__hamburger-box">
988            <span class="header-reserve__hamburger-inner"></span>
989          </span>
990        </button>
991      </nav>
992      
993      
994      
995
996      
997
998      <a class="header-reserve__logo-wrapper flex flex-col justify-center items-center gap-[6px] lg:gap-[7px]" href="/pages/reveal" itemprop="url">
999            <img loading="eager" src="//twoblindbrothers.com/cdn/shop/t/278/assets/2bb-logo.png?v=50054669825176451691730151967" width="124" height="auto" alt="logo"/>
1000          
1001          <h1 class="visually-hidden">Two Blind Brothers</h1></a>
1002      <nav class="hidden header-reserve__nav-desktop lg:block lg:relative lg:z-10">
1003        <ul class="flex flex-row gap-10" style="gap: 4rem"><li class="m-0">
1004              <div class="js-header-reserve-navigation">
1005                <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop>
1006                  
1007<a class="font-medium tracking-normal text-black text-p2 font-base" href="/pages/thereserve">Apparel </a>
1008                      <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon">
1009
1010<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1011      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1012    </svg></span>
1013                </div>
1014                
1015<div class="absolute top-5 w-full h-auto opacity-0 pt-8 invisible transition-all duration-300 ease-in-out header-reserve__menu-item-content" style="left: 75%; transform: translateX(-50%); min-width: 700px;">
1016                      <div class="flex flex-row gap-10 bg-white px-6 py-4 lg:rounded-[0_0_16px_16px]" style="box-shadow: 0px 12px 20px -10px rgba(0,0,0,0.4);">
1017                        <ul class="grid w-full grid-cols-2 m-0 bg-white gap-x-10 gap-y-8 after:content-none"><li class="m-0">
1018                              
1019                              <a href="/collections/womens"
1020                              
1021                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Women's
1022                              </a>
1023                              
1024<ul class="m-0 flex flex-col gap-[6px]"><li class="m-0">
1025                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens">Shop All</a>
1026                                    </li><li class="m-0">
1027                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-graphic-tees">Graphic Tees</a>
1028                                    </li><li class="m-0">
1029                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-long-sleeve-henley">Long Sleeve Tops</a>
1030                                    </li><li class="m-0">
1031                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-short-sleeve-relaxed-fit-henley">Short Sleeve Tops</a>
1032                                    </li><li class="m-0">
1033                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-bottoms">Bottoms</a>
1034                                    </li><li class="m-0">
1035                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-sale">Sale</a>
1036                                    </li></ul></li><li class="m-0">
1037                              
1038                              <a href="/collections/mens"
1039                              
1040                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Men's
1041                              </a>
1042                              
1043<ul class="m-0 flex flex-col gap-[6px]"><li class="m-0">
1044                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens">Shop All</a>
1045                                    </li><li class="m-0">
1046                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens-graphic-tees">Graphic Tees</a>
1047                                    </li><li class="m-0">
1048                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens-long-sleeve-henley">Long Sleeve Tops</a>
1049                                    </li><li class="m-0">
1050                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens-short-sleeve-henley">Short Sleeve Tops</a>
1051                                    </li><li class="m-0">
1052                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens-bottoms-1">Bottoms</a>
1053                                    </li><li class="m-0">
1054                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens-sale">Sale</a>
1055                                    </li></ul></li><li class="m-0">
1056                              
1057                              <a href="/collections/kids"
1058                              
1059                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Kid's
1060                              </a>
1061                              
1062</li></ul></div>
1063                    </div>
1064
1065              </div>
1066            </li><li class="m-0">
1067              <div class="js-header-reserve-navigation">
1068                <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop>
1069                  
1070<a class="font-medium tracking-normal text-black text-p2 font-base" href="/collections/gifts">Accessories</a>
1071                      <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon">
1072
1073<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1074      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1075    </svg></span>
1076                </div>
1077                
1078<div class="absolute top-5 w-full h-auto opacity-0 pt-8 invisible transition-all duration-300 ease-in-out header-reserve__menu-item-content" style="left: 75%; transform: translateX(-50%); min-width: 700px;">
1079                      <div class="flex flex-row gap-10 bg-white px-6 py-4 lg:rounded-[0_0_16px_16px]" style="box-shadow: 0px 12px 20px -10px rgba(0,0,0,0.4);">
1080                        <ul class="grid w-full grid-cols-2 m-0 bg-white gap-x-10 gap-y-8 after:content-none"><li class="m-0">
1081                              
1082                              <a href="/collections/gifts"
1083                              
1084                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Shop All
1085                              </a>
1086                              
1087</li><li class="m-0">
1088                              
1089                              <a href="/collections/the-2bb-sock-collection"
1090                              
1091                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Socks
1092                              </a>
1093                              
1094</li><li class="m-0">
1095                              
1096                              <a href="/pages/sunglasses"
1097                              
1098                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Sunglasses
1099                              </a>
1100                              
1101</li><li class="m-0">
1102                              
1103                              <a href="/collections/guide-dog-collection"
1104                              
1105                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Guide Dogs
1106                              </a>
1107                              
1108</li></ul></div>
1109                    </div>
1110
1111              </div>
1112            </li><li class="m-0">
1113              <div class="js-header-reserve-navigation">
1114                <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop>
1115                  
1116<a class="font-medium tracking-normal text-black text-p2 font-base" href="/pages/no-barriers-x-2bb-collab">Collaborations</a>
1117                      <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon">
1118
1119<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1120      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1121    </svg></span>
1122                </div>
1123                
1124<div class="absolute top-5 w-full h-auto opacity-0 pt-8 invisible transition-all duration-300 ease-in-out header-reserve__menu-item-content" style="left: 75%; transform: translateX(-50%); min-width: 700px;">
1125                      <div class="flex flex-row gap-10 bg-white px-6 py-4 lg:rounded-[0_0_16px_16px]" style="box-shadow: 0px 12px 20px -10px rgba(0,0,0,0.4);">
1126                        <ul class="grid w-full grid-cols-2 m-0 bg-white gap-x-10 gap-y-8 after:content-none"><li class="m-0">
1127                              
1128                              <a href="/pages/no-barriers-x-2bb-collab"
1129                              
1130                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">No Barriers Hiking Socks 
1131                              </a>
1132                              
1133</li><li class="m-0">
1134                              
1135                              <a href="/pages/dogs-inc-shop-blind"
1136                              
1137                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Dogs Inc Shop Blind 
1138                              </a>
1139                              
1140</li></ul></div>
1141                    </div>
1142
1143              </div>
1144            </li><li class="m-0">
1145              <div class="js-header-reserve-navigation">
1146                <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item">
1147                  
1148<a class="font-medium tracking-normal text-black text-p2 font-base flex" href="/pages/gift-tag">LoveTags<span class="love-tag-icon">
1149
1150<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="26" zoomAndPan="magnify" viewBox="0 0 75 74.999997" height="26" preserveAspectRatio="xMidYMid meet" version="1.0"><defs><clipPath id="4bd791745a"><path d="M 4 5 L 62 5 L 62 70 L 4 70 Z M 4 5" clip-rule="nonzero"/></clipPath><clipPath id="0b881fa5f7"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="5e6f85307e"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="7cf9d2691d"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="771b14f9a0"><path d="M 23 24 L 49 24 L 49 48 L 23 48 Z M 23 24" clip-rule="nonzero"/></clipPath><clipPath id="0d9462095f"><path d="M 28.203125 21.335938 L 50.808594 33.777344 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.203125 21.335938" clip-rule="nonzero"/></clipPath><clipPath id="5b02e7e0d8"><path d="M 27.320312 25.0625 C 23.828125 27.070312 23.503906 30.714844 24.269531 33.164062 L 28.742188 47.464844 L 43 43.511719 C 45.429688 42.667969 46.984375 41.207031 47.753906 39.050781 C 48.816406 36.070312 47.726562 32.703125 45.109375 30.867188 C 43.5 29.742188 41.582031 29.316406 39.703125 29.679688 C 39.199219 29.777344 38.710938 29.925781 38.25 30.128906 C 38.148438 29.554688 37.972656 28.980469 37.726562 28.425781 C 36.863281 26.484375 35.222656 24.996094 33.21875 24.347656 C 31.320312 23.734375 29.171875 23.996094 27.320312 25.0625 Z M 27.320312 25.0625" clip-rule="nonzero"/></clipPath></defs><g clip-path="url(#4bd791745a)"><g clip-path="url(#0b881fa5f7)"><g clip-path="url(#5e6f85307e)"><g clip-path="url(#7cf9d2691d)"><path fill="#000000" d="M 40.742188 69.582031 L 4.113281 50.609375 L 24.753906 10.753906 L 41.050781 5.5625 L 56.222656 13.421875 L 61.382812 29.726562 Z M 5.203125 50.261719 L 40.394531 68.492188 L 60.511719 29.652344 L 55.550781 13.988281 L 40.972656 6.4375 L 25.320312 11.425781 Z M 44.753906 16.988281 C 44.449219 16.832031 44.183594 16.621094 43.964844 16.359375 C 43.742188 16.09375 43.578125 15.800781 43.476562 15.472656 C 43.371094 15.144531 43.335938 14.808594 43.363281 14.464844 C 43.394531 14.121094 43.488281 13.796875 43.644531 13.492188 C 43.804688 13.1875 44.015625 12.921875 44.277344 12.699219 C 44.539062 12.476562 44.835938 12.316406 45.164062 12.210938 C 45.492188 12.105469 45.828125 12.066406 46.167969 12.097656 C 46.511719 12.125 46.835938 12.21875 47.140625 12.378906 C 47.445312 12.535156 47.710938 12.746094 47.929688 13.011719 C 48.152344 13.273438 48.316406 13.570312 48.417969 13.894531 C 48.523438 14.222656 48.558594 14.5
115058594 48.53125 14.902344 C 48.5 15.246094 48.40625 15.570312 48.25 15.875 C 48.089844 16.179688 47.878906 16.445312 47.617188 16.667969 C 47.351562 16.886719 47.058594 17.050781 46.730469 17.15625 C 46.402344 17.261719 46.066406 17.296875 45.722656 17.269531 C 45.382812 17.238281 45.058594 17.148438 44.753906 16.988281 Z M 46.769531 13.097656 C 46.558594 12.988281 46.335938 12.925781 46.101562 12.90625 C 45.863281 12.882812 45.632812 12.910156 45.410156 12.980469 C 45.183594 13.054688 44.980469 13.167969 44.796875 13.320312 C 44.617188 13.472656 44.472656 13.652344 44.363281 13.863281 C 44.253906 14.074219 44.191406 14.296875 44.167969 14.53125 C 44.148438 14.769531 44.175781 15 44.246094 15.226562 C 44.316406 15.449219 44.429688 15.652344 44.582031 15.835938 C 44.734375 16.015625 44.914062 16.160156 45.125 16.269531 C 45.335938 16.378906 45.558594 16.441406 45.792969 16.460938 C 46.03125 16.484375 46.261719 16.457031 46.484375 16.386719 C 46.710938 16.3125 46.914062 16.199219 47.09375 16.046875 C 47.277344 15.894531 47.421875 15.714844 47.53125 15.503906 C 47.640625 15.292969 47.703125 15.070312 47.722656 14.835938 C 47.742188 14.597656 47.71875 14.367188 47.648438 14.140625 C 47.574219 13.917969 47.464844 13.714844 47.3125 13.53125 C 47.160156 13.351562 46.976562 13.207031 46.769531 13.097656 Z M 46.769531 13.097656" fill-opacity="1" fill-rule="nonzero"/></g></g></g></g><g clip-path="url(#771b14f9a0)"><g clip-path="url(#0d9462095f)"><g clip-path="url(#5b02e7e0d8)"><path fill="#ff3131" d="M 28.160156 21.414062 L 50.765625 33.855469 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.160156 21.414062" fill-opacity="1" fill-rule="nonzero"/></g></g></g></svg></span>
1151                        </a>
1152                </div>
1153                
1154
1155
1156              </div>
1157            </li><li class="m-0">
1158              <div class="js-header-reserve-navigation">
1159                <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop>
1160                  
1161<a class="font-medium tracking-normal text-black text-p2 font-base" href="/pages/about-us">About Us </a>
1162                      <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon">
1163
1164<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1165      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1166    </svg></span>
1167                </div>
1168                
1169<div class="absolute top-5 w-full h-auto opacity-0 pt-8 invisible transition-all duration-300 ease-in-out header-reserve__menu-item-content" style="left: 75%; transform: translateX(-50%); min-width: 700px;">
1170                      <div class="flex flex-row gap-10 bg-white px-6 py-4 lg:rounded-[0_0_16px_16px]" style="box-shadow: 0px 12px 20px -10px rgba(0,0,0,0.4);">
1171                        <ul class="grid w-full grid-cols-2 m-0 bg-white gap-x-10 gap-y-8 after:content-none"><li class="m-0">
1172                              
1173                              <a href="/pages/about-us"
1174                              
1175                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Our Mission 
1176                              </a>
1177                              
1178</li><li class="m-0">
1179                              
1180                              <a href="https://www.twoblindbrothers.org"
1181                              
1182                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Programs
1183                              </a>
1184                              
1185</li><li class="m-0">
1186                              
1187                              <a href="/pages/donations"
1188                              
1189                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Donate
1190                              </a>
1191                              
1192</li></ul></div>
1193                    </div>
1194
1195              </div>
1196            </li></ul>
1197      </nav>
1198      <div class="absolute flex flex-row items-center justify-end gap-4 right-4 sm:right-8 md:right-10 lg:relative lg:inset-0 lg:gap-[13px] header-reserve__icons">
1199        <a href="https://twoblindbrothers.com/" class="hidden hover:bg-yellow-30 lg:flex justify-center items-center gap-[10px] w-fit mr-[11px] px-6 py-[11px] font-medium text-black border border-yellow bg-yellow text-p2 tracking-normal font-base rounded-[30px]">
1200          <span class="block w-5 h-auto">
1201
1202<svg xmlns="http://www.w3.org/2000/svg" width="21" height="10" viewBox="0 0 21 10" fill="none">
1203      <path d="M17.9695 0.332764C17.2599 1.69214 16.1953 2.83385 14.8888 3.63653C13.5823 4.43922 12.0826 4.87288 10.5493 4.89141C9.01158 4.91175 7.49732 4.51284 6.16917 3.73751C4.84102 2.96217 3.74915 1.8397 3.0108 0.490639" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1204      <path d="M2.8924 3.03638L0.30719 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1205      <path d="M5.35921 5.26636L3.54364 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1206      <path d="M8.81272 6.4502L8.27989 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1207      <path d="M12.5425 6.4502L13.0556 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1208      <path d="M15.6606 5.26636L17.4761 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1209      <path d="M18.0879 3.03638L20.6928 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1210    </svg></span>
1211          <span>Shop Blind</span>
1212        </a>
1213        <a class="hidden lg:block" aria-controls="searchFormDesktop" href="javascript:void(0)" aria-expanded="false" data-btn-search-desktop>
1214          <span class="w-5 h-auto">
1215
1216<svg xmlns="http://www.w3.org/2000/svg" width="21" height="22" viewBox="0 0 21 22" fill="none">
1217      <circle cx="9.47607" cy="10.3987" r="5.95059" transform="rotate(-45 9.47607 10.3987)" stroke="black" stroke-width="1.5"/>
1218      <path d="M14.0458 14.9692L19.7778 20.7013" stroke="black" stroke-width="1.5"/>
1219    </svg></span>
1220        </a>
1221        <status-saved-link
1222          class="block w-[22px] h-5 indent-0.5 header-reserve__icons-wishlist status-save-link hidden"
1223          aria-label="View saved items"
1224          style="--indicator-position-vertical: -7%; --indicator-position-horizontal: 120%;"
1225        ></status-saved-link>
1226        <a href="/account" class="hidden lg:block">
1227          <span class="block w-5 h-auto">
1228
1229<svg class="w-full h-full" xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16" fill="none">
1230      <circle cx="6.94263" cy="5.36182" r="2.76355" transform="rotate(-45 6.94263 5.36182)" stroke="black"/>
1231      <path d="M12.511 15.5455C12.511 12.4701 10.0179 9.97705 6.94251 9.97705C3.86712 9.97705 1.37402 12.4701 1.37402 15.5455" stroke="black"/>
1232    </svg></span>
1233        </a>
1234        <a onclick="return false" href="/cart" class="w-5 h-5 relative js-drawer-open-right header-reserve__icons-cart" aria-controls="CartDrawer" aria-expanded="false">
1235          
1236
1237<svg class="w-full h-full" fill="none" viewBox="0 0 20 20">
1238      <path fill="#000" d="M6.354 19.945c-.495 0-.916-.177-1.265-.529a1.74 1.74 0 0 1-.522-1.269c0-.494.176-.916.528-1.264a1.74 1.74 0 0 1 1.27-.523c.494 0 .915.176 1.263.528.349.352.523.775.523 1.27 0 .494-.176.915-.528 1.264a1.74 1.74 0 0 1-1.27.523Zm9.957 0c-.495 0-.916-.177-1.265-.529a1.74 1.74 0 0 1-.522-1.269c0-.494.176-.916.528-1.264a1.74 1.74 0 0 1 1.27-.523c.493 0 .915.176 1.263.528.349.352.523.775.523 1.27 0 .494-.176.915-.528 1.264a1.74 1.74 0 0 1-1.27.523ZM5.065 3.515l2.738 5.676h7.169l3.111-5.675H5.065Zm-.747-1.493H18.98c.381 0 .671.174.87.523a.99.99 0 0 1 0 1.045l-3.36 6.05c-.182.314-.42.567-.71.758a1.715 1.715 0 0 1-.958.287H7.28l-1.394 2.588h12.222v1.494H6.11c-.697 0-1.199-.232-1.506-.697-.307-.465-.303-.987.012-1.568L6.21 9.564 2.426 1.55H.484V.056h2.913l.92 1.966Z"/>
1239    </svg>
1240          <span class="cart__item-count absolute left-auto -right-[15px] top-[2px] font-bold text-white bg-yellow text-black p3 flex justify-center items-center w-5 h-5 rounded-full js-item-count hidden">0</span>
1241        </a>
1242        
1243      </div>
1244    </div>
1245    <nav class="fixed none left-[-100%] w-full h-full z-[100] bg-white transition-[left] duration-300 ease-in-out md:max-w-[396px] [.is-active_&]:left-0 lg:absolute lg:h-auto lg:bg-transparent lg:max-w-none lg:left-0 lg:right-0 lg:hidden lg:transition-none [&.is-active]:lg:block"
1246      aria-hidden
1247      aria-modal="true"
1248      aria-labelledby="menu-overlay-title"
1249      role="dialog"
1250      aria-hidden="true"
1251      data-search-form-desktop
1252    >
1253      <predictive-search>
1254  <form
1255    action="/search"
1256    method="get"
1257    role="search"
1258    class="predictive-search "
1259    id="searchForm"
1260    
1261  >
1262    <div class="predictive-search__wrapper">
1263      <div class="predictive-search__inner">
1264        <div class="flex items-center">
1265          <button type="submit" class="predictive-search__submit" aria-label="Search" title="Search">
1266            
1267
1268<svg xmlns="http://www.w3.org/2000/svg" width="21" height="22" viewBox="0 0 21 22" fill="none">
1269      <circle cx="9.47607" cy="10.3987" r="5.95059" transform="rotate(-45 9.47607 10.3987)" stroke="black" stroke-width="1.5"/>
1270      <path d="M14.0458 14.9692L19.7778 20.7013" stroke="black" stroke-width="1.5"/>
1271    </svg>
1272          </button>
1273          <label for="formSearchField" class="hidden-label hidden">Search for keywords, style, etc…</label>
1274          <input
1275            class="predictive-search__input"
1276            placeholder="Search for keywords, style, etc…"
1277            id="formSearchField"
1278            type="search"
1279            name="q"
1280            value=""
1281            role="combobox"
1282            aria-expanded="false"
1283            aria-owns="predictive-search-results"
1284            aria-controls="predictive-search-results"
1285            aria-haspopup="listbox"
1286            aria-autocomplete="list"
1287            aria-label="Search for keywords, style, etc…"
1288            onkeydown="return event.key != 'Enter'"
1289          />
1290          <input name="options[prefix]" type="hidden" value="last">
1291          <button type="button" class="predictive-search__close" aria-label="Close Search" title="Close Search" data-btn-close-search>
1292            
1293
1294<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1295      <path d="M2.66 1.34 2 .68.68 2l.66.66 1.32-1.32zm18.68 21.32.66.66L23.32 22l-.66-.66-1.32 1.32zm1.32-20 .66-.66L22 .68l-.66.66 1.32 1.32zM1.34 21.34.68 22 2 23.32l.66-.66-1.32-1.32zm0-18.68 10 10 1.32-1.32-10-10-1.32 1.32zm11.32 10 10-10-1.32-1.32-10 10 1.32 1.32zm-1.32-1.32-10 10 1.32 1.32 10-10-1.32-1.32zm0 1.32 10 10 1.32-1.32-10-10-1.32 1.32z" fill="currentColor"/>
1296    </svg>
1297          </button>
1298        </div>
1299        <div id="predictive-search" class="hidden [.predictive-search.is-open_&]:block" tabindex="-1"></div>
1300      </div>
1301    </div>
1302  </form>
1303</predictive-search>
1304
1305      <div class="js-mobile-nav-container [&.open]:overflow-hidden overflow-x-hidden relative h-[calc(100%-165px)] px-4 overflow-auto sm:h-[calc(100%-120px)] sm:px-8 md:h-[calc(100%-150px)] md:px-10 lg:hidden">
1306        <ul class="flex flex-col gap-6 pt-8 m-0">
1307          
1308<li class="m-0">
1309              <div>
1310                <div class="flex flex-row items-center gap-4 cursor-pointer">
1311                  
1312<a class="font-normal text-black text-h2 font-base tracking-normal" href="/pages/thereserve">Apparel </a><span class="block w-[5px] h-[11px]" data-btn-submenu>
1313
1314<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1315      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1316    </svg></span>
1317                </div><div class="absolute right-[-100%] top-0 w-full h-auto px-4 pt-[18px] pb-5 bg-white transition-[right] duration-300 ease-in-out sm:px-8 md:px-10 [&.is-active]:right-0 [&.is-active]:h-full [&.is-active]:overflow-y-auto" data-submenu-0>
1318                    <div class="flex flex-row items-center gap-[9px] mb-[33px] cursor-pointer" data-btn-back-menu>
1319                      <span class="block w-[10px] h-[10px]">
1320
1321<svg class="w-full h-full" fill="none" viewBox="0 0 12 12">
1322      <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/>
1323    </svg></span>
1324                      <p class="font-medium tracking-normal text-black font-base text-label">Back</p>
1325                    </div>
1326                    <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0">
1327                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="javascript:void(0)">Women's</a><ul class="m-0"><li class="m-0">
1328                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens">Shop All</a>
1329                                </li><li class="m-0">
1330                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-graphic-tees">Graphic Tees</a>
1331                                </li><li class="m-0">
1332                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-long-sleeve-henley">Long Sleeve Tops</a>
1333                                </li><li class="m-0">
1334                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-short-sleeve-relaxed-fit-henley">Short Sleeve Tops</a>
1335                                </li><li class="m-0">
1336                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-bottoms">Bottoms</a>
1337                                </li><li class="m-0">
1338                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-sale">Sale</a>
1339                                </li></ul></li><li class="m-0">
1340                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="javascript:void(0)">Men's</a><ul class="m-0"><li class="m-0">
1341                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens">Shop All</a>
1342                                </li><li class="m-0">
1343                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-graphic-tees">Graphic Tees</a>
1344                                </li><li class="m-0">
1345                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-long-sleeve-henley">Long Sleeve Tops</a>
1346                                </li><li class="m-0">
1347                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-short-sleeve-henley">Short Sleeve Tops</a>
1348                                </li><li class="m-0">
1349                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-bottoms-1">Bottoms</a>
1350                                </li><li class="m-0">
1351                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-sale">Sale</a>
1352                                </li></ul></li><li class="m-0">
1353                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/collections/kids">Kid's</a></li></ul></div>
1354                  
1355</div>
1356            </li><li class="m-0">
1357              <div>
1358                <div class="flex flex-row items-center gap-4 cursor-pointer">
1359                  
1360<a class="font-normal text-black text-h2 font-base tracking-normal" href="/collections/gifts">Accessories</a><span class="block w-[5px] h-[11px]" data-btn-submenu>
1361
1362<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1363      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1364    </svg></span>
1365                </div><div class="absolute right-[-100%] top-0 w-full h-auto px-4 pt-[18px] pb-5 bg-white transition-[right] duration-300 ease-in-out sm:px-8 md:px-10 [&.is-active]:right-0 [&.is-active]:h-full [&.is-active]:overflow-y-auto" data-submenu-1>
1366                    <div class="flex flex-row items-center gap-[9px] mb-[33px] curs
1366or-pointer" data-btn-back-menu>
1367                      <span class="block w-[10px] h-[10px]">
1368
1369<svg class="w-full h-full" fill="none" viewBox="0 0 12 12">
1370      <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/>
1371    </svg></span>
1372                      <p class="font-medium tracking-normal text-black font-base text-label">Back</p>
1373                    </div>
1374                    <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0">
1375                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/collections/gifts">Shop All</a></li><li class="m-0">
1376                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/collections/the-2bb-sock-collection">Socks</a></li><li class="m-0">
1377                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/pages/sunglasses">Sunglasses</a></li><li class="m-0">
1378                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/collections/guide-dog-collection">Guide Dogs</a></li></ul></div>
1379                  
1380</div>
1381            </li><li class="m-0">
1382              <div>
1383                <div class="flex flex-row items-center gap-4 cursor-pointer">
1384                  
1385<a class="font-normal text-black text-h2 font-base tracking-normal" href="/pages/no-barriers-x-2bb-collab">Collaborations</a><span class="block w-[5px] h-[11px]" data-btn-submenu>
1386
1387<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1388      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1389    </svg></span>
1390                </div><div class="absolute right-[-100%] top-0 w-full h-auto px-4 pt-[18px] pb-5 bg-white transition-[right] duration-300 ease-in-out sm:px-8 md:px-10 [&.is-active]:right-0 [&.is-active]:h-full [&.is-active]:overflow-y-auto" data-submenu-2>
1391                    <div class="flex flex-row items-center gap-[9px] mb-[33px] cursor-pointer" data-btn-back-menu>
1392                      <span class="block w-[10px] h-[10px]">
1393
1394<svg class="w-full h-full" fill="none" viewBox="0 0 12 12">
1395      <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/>
1396    </svg></span>
1397                      <p class="font-medium tracking-normal text-black font-base text-label">Back</p>
1398                    </div>
1399                    <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0">
1400                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/pages/no-barriers-x-2bb-collab">No Barriers Hiking Socks </a></li><li class="m-0">
1401                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/pages/dogs-inc-shop-blind">Dogs Inc Shop Blind </a></li></ul></div>
1402                  
1403</div>
1404            </li><li class="m-0">
1405              <div>
1406                <div class="flex flex-row items-center gap-4 cursor-pointer">
1407                  
1408<a class="font-normal text-black text-h2 font-base tracking-normal" href="/pages/gift-tag">LoveTags<span class="love-tag-icon">
1409
1410<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="26" zoomAndPan="magnify" viewBox="0 0 75 74.999997" height="26" preserveAspectRatio="xMidYMid meet" version="1.0"><defs><clipPath id="4bd791745a"><path d="M 4 5 L 62 5 L 62 70 L 4 70 Z M 4 5" clip-rule="nonzero"/></clipPath><clipPath id="0b881fa5f7"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="5e6f85307e"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="7cf9d2691d"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="771b14f9a0"><path d="M 23 24 L 49 24 L 49 48 L 23 48 Z M 23 24" clip-rule="nonzero"/></clipPath><clipPath id="0d9462095f"><path d="M 28.203125 21.335938 L 50.808594 33.777344 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.203125 21.335938" clip-rule="nonzero"/></clipPath><clipPath id="5b02e7e0d8"><path d="M 27.320312 25.0625 C 23.828125 27.070312 23.503906 30.714844 24.269531 33.164062 L 28.742188 47.464844 L 43 43.511719 C 45.429688 42.667969 46.984375 41.207031 47.753906 39.050781 C 48.816406 36.070312 47.726562 32.703125 45.109375 30.867188 C 43.5 29.742188 41.582031 29.316406 39.703125 29.679688 C 39.199219 29.777344 38.710938 29.925781 38.25 30.128906 C 38.148438 29.554688 37.972656 28.980469 37.726562 28.425781 C 36.863281 26.484375 35.222656 24.996094 33.21875 24.347656 C 31.320312 23.734375 29.171875 23.996094 27.320312 25.0625 Z M 27.320312 25.0625" clip-rule="nonzero"/></clipPath></defs><g clip-path="url(#4bd791745a)"><g clip-path="url(#0b881fa5f7)"><g clip-path="url(#5e6f85307e)"><g clip-path="url(#7cf9d2691d)"><path fill="#000000" d="M 40.742188 69.582031 L 4.113281 50.609375 L 24.753906 10.753906 L 41.050781 5.5625 L 56.222656 13.421875 L 61.382812 29.726562 Z M 5.203125 50.261719 L 40.394531 68.492188 L 60.511719 29.652344 L 55.550781 13.988281 L 40.972656 6.4375 L 25.320312 11.425781 Z M 44.753906 16.988281 C 44.449219 16.832031 44.183594 16.621094 43.964844 16.359375 C 43.742188 16.09375 43.578125 15.800781 43.476562 15.472656 C 43.371094 15.144531 43.335938 14.808594 43.363281 14.464844 C 43.394531 14.121094 43.488281 13.796875 43.644531 13.492188 C 43.804688 13.1875 44.015625 12.921875 44.277344 12.699219 C 44.539062 12.476562 44.835938 12.316406 45.164062 12.210938 C 45.492188 12.105469 45.828125 12.066406 46.167969 12.097656 C 46.511719 12.125 46.835938 12.21875 47.140625 12.378906 C 47.445312 12.535156 47.710938 12.746094 47.929688 13.011719 C 48.152344 13.273438 48.316406 13.570312 48.417969 13.894531 C 48.523438 14.222656 48.558594 14.5
141058594 48.53125 14.902344 C 48.5 15.246094 48.40625 15.570312 48.25 15.875 C 48.089844 16.179688 47.878906 16.445312 47.617188 16.667969 C 47.351562 16.886719 47.058594 17.050781 46.730469 17.15625 C 46.402344 17.261719 46.066406 17.296875 45.722656 17.269531 C 45.382812 17.238281 45.058594 17.148438 44.753906 16.988281 Z M 46.769531 13.097656 C 46.558594 12.988281 46.335938 12.925781 46.101562 12.90625 C 45.863281 12.882812 45.632812 12.910156 45.410156 12.980469 C 45.183594 13.054688 44.980469 13.167969 44.796875 13.320312 C 44.617188 13.472656 44.472656 13.652344 44.363281 13.863281 C 44.253906 14.074219 44.191406 14.296875 44.167969 14.53125 C 44.148438 14.769531 44.175781 15 44.246094 15.226562 C 44.316406 15.449219 44.429688 15.652344 44.582031 15.835938 C 44.734375 16.015625 44.914062 16.160156 45.125 16.269531 C 45.335938 16.378906 45.558594 16.441406 45.792969 16.460938 C 46.03125 16.484375 46.261719 16.457031 46.484375 16.386719 C 46.710938 16.3125 46.914062 16.199219 47.09375 16.046875 C 47.277344 15.894531 47.421875 15.714844 47.53125 15.503906 C 47.640625 15.292969 47.703125 15.070312 47.722656 14.835938 C 47.742188 14.597656 47.71875 14.367188 47.648438 14.140625 C 47.574219 13.917969 47.464844 13.714844 47.3125 13.53125 C 47.160156 13.351562 46.976562 13.207031 46.769531 13.097656 Z M 46.769531 13.097656" fill-opacity="1" fill-rule="nonzero"/></g></g></g></g><g clip-path="url(#771b14f9a0)"><g clip-path="url(#0d9462095f)"><g clip-path="url(#5b02e7e0d8)"><path fill="#ff3131" d="M 28.160156 21.414062 L 50.765625 33.855469 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.160156 21.414062" fill-opacity="1" fill-rule="nonzero"/></g></g></g></svg></span>
1411                        </a>
1412                </div></div>
1413            </li><li class="m-0">
1414              <div>
1415                <div class="flex flex-row items-center gap-4 cursor-pointer">
1416                  
1417<a class="font-normal text-black text-h2 font-base tracking-normal" href="/pages/about-us">About Us </a><span class="block w-[5px] h-[11px]" data-btn-submenu>
1418
1419<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1420      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1421    </svg></span>
1422                </div><div class="absolute right-[-100%] top-0 w-full h-auto px-4 pt-[18px] pb-5 bg-white transition-[right] duration-300 ease-in-out sm:px-8 md:px-10 [&.is-active]:right-0 [&.is-active]:h-full [&.is-active]:overflow-y-auto" data-submenu-3>
1423                    <div class="flex flex-row items-center gap-[9px] mb-[33px] cursor-pointer" data-btn-back-menu>
1424                      <span class="block w-[10px] h-[10px]">
1425
1426<svg class="w-full h-full" fill="none" viewBox="0 0 12 12">
1427      <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/>
1428    </svg></span>
1429                      <p class="font-medium tracking-normal text-black font-base text-label">Back</p>
1430                    </div>
1431                    <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0">
1432                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/pages/about-us">Our Mission </a></li><li class="m-0">
1433                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="https://www.twoblindbrothers.org">Programs</a></li><li class="m-0">
1434                          <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/pages/donations">Donate</a></li></ul></div>
1435                  
1436</div>
1437            </li></ul>
1438        <ul class="flex flex-col gap-4 mt-8"></ul>
1439        <div class="flex flex-col gap-3 py-4 border-solid border-y border-grey-200"><p class="font-medium tracking-normal text-black font-base text-p2">Take the Shop Blind Challenge</p><p class="font-normal tracking-normal text-grey-400 font-base text-p2">Would you buy something you can’t see? We promise you’ll receive something you’ll love — no tricks, just treats. And if it’s not perfect, you can return it, no questions asked. Trust us: every purchase supports the blind community directly through Two Blind Brothers, a 501c3 charity built around awareness, education, and connection.</p><a href="https://twoblindbrothers.com/" class="flex justify-center items-center gap-[10px] px-8 py-2 font-medium text-black bg-yellow text-p2 tracking-normal font-base rounded-[30px] md:py-[10px]">
1440            <span class="block w-5 h-auto">
1441
1442<svg xmlns="http://www.w3.org/2000/svg" width="21" height="10" viewBox="0 0 21 10" fill="none">
1443      <path d="M17.9695 0.332764C17.2599 1.69214 16.1953 2.83385 14.8888 3.63653C13.5823 4.43922 12.0826 4.87288 10.5493 4.89141C9.01158 4.91175 7.49732 4.51284 6.16917 3.73751C4.84102 2.96217 3.74915 1.8397 3.0108 0.490639" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1444      <path d="M2.8924 3.03638L0.30719 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1445      <path d="M5.35921 5.26636L3.54364 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1446      <path d="M8.81272 6.4502L8.27989 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1447      <path d="M12.5425 6.4502L13.0556 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1448      <path d="M15.6606 5.26636L17.4761 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1449      <path d="M18.0879 3.03638L20.6928 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1450    </svg></span>
1451            <span>Shop Blind</span>
1452          </a>
1453        </div>
1454        <ul class="flex flex-wrap justify-between items-center gap-4 mt-8 mb-6">
1455          
1456          <li class="m-0">
1457            <a href="/account" class="flex flex-row items-center gap-2">
1458              <span class="block w-4 h-4">
1459
1460<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
1461      <circle cx="9.5" cy="5.5" r="3" fill="#F0D83D"/>
1462      <circle cx="3.36376" cy="3.36376" r="2.73876" transform="matrix(0.718673 -0.695349 0.718673 0.695349 2.99841 4.67773)" stroke="black" stroke-width="1.25"/>
1463      <path d="M13.6667 15C13.6667 11.8829 11.055 9.35596 7.83333 9.35596C4.61167 9.35596 2 11.8829 2 15" stroke="black" stroke-width="1.25"/>
1464    </svg></span>
1465              <span class="font-medium tracking-normal text-black text-label font-base">
1466                
1467                  Account
1468                
1469              </span>
1470            </a>
1471          </li>
1472        </ul><ul class="flex flex-row items-center justify-center gap-6 mt-6 mb-5"><li class="flex max-w-[26px]">
1473      <a href="https://instagram.com/twoblindbrothers/" target="_blank" rel="noopener" title="Two Blind Brothers on Instagram">
1474
1475<svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewBox="0 0 24 25" fill="none">
1476      <path fill-rule="evenodd" clip-rule="evenodd" d="M23.2532 12.3219C23.2532 10.0107 23.228 8.41107 23.1775 7.52292C23.0766 5.42366 22.4509 3.79878 21.3003 2.64822C20.1498 1.49766 18.5249 0.871933 16.4256 0.771007C15.5375 0.720544 13.9378 0.695312 11.6266 0.695312C9.31541 0.695312 7.71575 0.720544 6.82761 0.771007C4.72835 0.871933 3.10346 1.49766 1.95291 2.64822C0.802351 3.79878 0.17662 5.42366 0.0756941 7.52292C0.0252311 8.41107 0 10.0107 0 12.3219C0 14.6331 0.0252311 16.2328 0.0756941 17.1209C0.17662 19.2202 0.802351 20.8451 1.95291 21.9956C3.10346 23.1462 4.72835 23.7719 6.82761 23.8728C7.71575 23.9233 9.31541 23.9485 11.6266 23.9485C13.9378 23.9485 15.5375 23.9233 16.4256 23.8728C18.5249 23.7719 20.1498 23.1462 21.3003 21.9956C22.4509 20.8451 23.0766 19.2202 23.1775 17.1209C23.228 16.2328 23.2532 14.6331 23.2532 12.3219ZM12.7772 2.78447H11.6266C11.556 2.78447 11.1699 2.78195 10.4685 2.7769C9.76706 2.77185 9.23468 2.77185 8.87135 2.7769C8.50801 2.78195 8.02105 2.79708 7.41045 2.82232C6.79985 2.84755 6.28009 2.89801 5.85115 2.9737C5.42222 3.0494 5.06141 3.14275 4.76873 3.25377C4.2641 3.45562 3.82003 3.7483 3.43651 4.13182C3.05299 4.51534 2.76031 4.95941 2.55846 5.46404C2.44744 5.75672 2.35409 6.11753 2.27839 6.54646C2.2027 6.9754 2.15224 7.49516 2.127 8.10576C2.10177 8.71636 2.08663 9.20332 2.08159 9.56666C2.07654 9.92999 2.07654 10.4624 2.08159 11.1638C2.08663 11.8652 2.08916 12.2513 2.08916 12.3219C2.08916 12.3926 2.08663 12.7786 2.08159 13.48C2.07654 14.1815 2.07654 14.7139 2.08159 15.0772C2.08663 15.4405 2.10177 15.9275 2.127 16.5381C2.15224 17.1487 2.2027 17.6684 2.27839 18.0974C2.35409 18.5263 2.44744 18.8871 2.55846 19.1798C2.76031 19.6844 3.05299 20.1285 3.43651 20.512C3.82003 20.8955 4.2641 21.1882 4.76873 21.3901C5.06141 21.5011 5.42222 21.5944 5.85115 21.6701C6.28009 21.7458 6.79985 21.7963 7.41045 21.8215C8.02105 21.8468 8.50801 21.8619 8.87135 21.8669C9.23468 21.872 9.76706 21.872 10.4685 21.8669C11.1699 21.8619 11.556 21.8594 11.6266 21.8594C11.6973 21.8594 12.0833 21.8619 12.7847 21.8669C13.4862 21.872 14.0185 21.872 14.3819 21.8669C14.7452 21.8619 15.2322 21.8468 15.8428 21.8215C16.4534 21.7963 16.9731 21.7458 17.4021 21.6701C17.831 21.5944 18.1918 21.5011 18.4845 21.3901C18.9891 21.1882 19.4332 20.8955 19.8167 20.512C20.2002 20.1285 20.4929 19.6844 20.6948 19.1798C20.8058 18.8871 20.8991 18.5263 20.9748 18.0974C21.0505 17.6684 21.101 17.1487 21.1262 16.5381C21.1514 15.927
14765 21.1666 15.4405 21.1716 15.0772C21.1767 14.7139 21.1767 14.1815 21.1716 13.48C21.1666 12.7786 21.1641 12.3926 21.1641 12.3219C21.1641 12.2513 21.1666 11.8652 21.1716 11.1638C21.1767 10.4624 21.1767 9.92999 21.1716 9.56666C21.1666 9.20332 21.1514 8.71636 21.1262 8.10576C21.101 7.49516 21.0505 6.9754 20.9748 6.54646C20.8991 6.11753 20.8058 5.75672 20.6948 5.46404C20.4929 4.95941 20.2002 4.51534 19.8167 4.13182C19.4332 3.7483 18.9891 3.45562 18.4845 3.25377C18.1918 3.14275 17.831 3.0494 17.4021 2.9737C16.9731 2.89801 16.4534 2.84755 15.8428 2.82232C15.2322 2.79708 14.7452 2.78195 14.3819 2.7769C14.0185 2.77185 13.4836 2.77438 12.7772 2.78447ZM19.2263 6.11501C19.2263 5.73149 19.09 5.40349 18.8175 5.13099C18.545 4.85849 18.217 4.72224 17.8335 4.72224C17.45 4.72224 17.122 4.85849 16.8495 5.13099C16.577 5.40349 16.4408 5.73149 16.4408 6.11501C16.4408 6.49853 16.577 6.82653 16.8495 7.09903C17.122 7.37153 17.45 7.50778 17.8335 7.50778C18.217 7.50778 18.545 7.37153 18.8175 7.09903C19.09 6.82653 19.2263 6.49853 19.2263 6.11501ZM15.8503 8.09819C17.011 9.25884 17.5913 10.6667 17.5913 12.3219C17.5913 13.9771 17.011 15.385 15.8503 16.5457C14.6897 17.7063 13.2818 18.2866 11.6266 18.2866C9.97142 18.2866 8.56353 17.7063 7.40288 16.5457C6.24223 15.385 5.66192 13.9771 5.66192 12.3219C5.66192 10.6667 6.24223 9.25884 7.40288 8.09819C8.56353 6.93754 9.97142 6.35723 11.6266 6.35723C13.2818 6.35723 14.6897 6.93754 15.8503 8.09819ZM14.3667 15.062C15.1237 14.3051 15.5021 13.3917 15.5021 12.3219C15.5021 11.2521 15.1237 10.3387 14.3
1476667 9.5818C13.6098 8.82485 12.6964 8.44639 11.6266 8.44639C10.5568 8.44639 9.64343 8.82485 8.88649 9.5818C8.12954 10.3387 7.75107 11.2521 7.75107 12.3219C7.75107 13.3917 8.12954 14.3051 8.88649 15.062C9.64343 15.819 10.5568 16.1975 11.6266 16.1975C12.6964 16.1975 13.6098 15.819 14.3667 15.062Z" fill="black"/>
1477    </svg></a>
1478    </li><li class="flex max-w-[26px]">
1479      <a href="https://twitter.com/twoblindbros/" target="_blank" rel="noopener" title="Two Blind Brothers on Twitter">
1480
1481<svg class="w-full h-auto" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
1482      <path d="m2.367 3 7.096 10.14L2.74 21h2.64l5.265-6.17L14.96 21h6.91L14.45 10.375 20.74 3h-2.6l-4.869 5.688L9.3 3H2.367zm3.84 2h2.049l9.777 14h-2.031L6.207 5z"/>
1483    </svg></a>
1484    </li><li class="flex max-w-[26px]">
1485      <a href="https://www.facebook.com/twoblindbros/" target="_blank" rel="noopener" title="Two Blind Brothers on Facebook">
1486
1487<svg width="26" height="22" viewbox="0 0 37 24" fill="white" xmlns="http://www.w3.org/2000/svg">
1488    <g clip-path="url(#clip0_133_73)">
1489    <path d="M3.99645 15.8325C3.99645 17.2147 4.30655 18.2714 4.71185 18.9123C4.92784 19.2771 5.23887 19.5796 5.61333 19.789C5.9878 19.9985 6.41237 20.1074 6.84389 20.1047C7.88611 20.1047 8.83955 19.8534 10.6769 17.3705C12.1489 15.3814 13.8834 12.5956 15.0517 10.8364L17.028 7.87099C18.4009 5.81152 19.9874 3.52209 21.8119 1.96524C23.2981 0.703665 24.9026 0 26.5174 0C29.2284 0 31.8108 1.53424 33.7871 4.41173C35.9501 7.56314 37.0039 11.5326 37.0039 15.6289C37.0039 18.0641 36.5123 19.8534 35.676 21.267C34.8692 22.6341 33.2892 24 30.6399 24V20.1047C32.9083 20.1047 33.4706 18.0691 33.4706 15.7395C33.4706 12.4197 32.678 8.7355 30.932 6.10304C29.6929 4.23581 28.0871 3.09487 26.3205 3.09487C24.4098 3.09487 22.8722 4.5022 21.1441 7.01152C20.2255 8.34471 19.2823 9.96942 18.2234 11.8027L17.0576 13.8132C14.7159 17.8681 14.1227 18.7916 12.9518 20.3158C10.9034 22.9948 9.15093 24 6.84389 24C4.10711 24 2.37651 22.8427 1.31114 21.0986C0.429754 19.6775 0 17.8128 0 15.688L3.99645 15.8325Z" fill="black"></path>
1490    <path d="M3.15112 4.68691C4.98337 1.9288 7.62751 0 10.6602 0C12.4166 0 14.1626 0.502618 15.9858 1.96147C17.9802 3.55099 20.1032 6.16838 22.7577 10.4821L23.7085 12.0302C26.004 15.7646 27.3113 17.6846 28.0743 18.5918C29.0573 19.7554 29.747 20.0997 30.6399 20.0997C32.9084 20.0997 33.4706 18.0641 33.4706 15.7344L36.9962 15.6264C36.9962 18.0616 36.5046 19.8509 35.6683 21.2645C34.8693 22.6341 33.2892 24 30.6399 24C28.993 24 27.5339 23.6507 25.9204 22.1642C24.68 21.0232 23.2299 18.9964 22.1143 17.1744L18.796 11.7613C17.131 9.04461 15.6037 7.01906 14.7197 6.10681C13.7676 5.11539 12.5465 3.92419 10.5959 3.92419C9.01713 3.92419 7.6764 5.00607 6.55441 6.66094L3.15112 4.68691Z" fill="black"></path>
1491    <path d="M10.5959 3.92419C9.01711 3.92419 7.67638 5.00607 6.55439 6.66094C4.9679 8.99937 3.99645 12.4825 3.99645 15.8325C3.99645 17.2147 4.30655 18.2714 4.71185 18.9123L1.3047 21.0986C0.429754 19.6775 0 17.8128 0 15.688C0 11.8241 1.08596 7.79686 3.1511 4.68691C4.98334 1.9288 7.62749 0 10.6602 0L10.5959 3.92419Z" fill="black"></path>
1492    </g>
1493    <defs>
1494    <lineargradient id="paint0_linear_133_73" x1="8.02124" y1="11.378" x2="33.4945" y2="12.6954" gradientunits="userSpaceOnUse">
1495    <stop></stop>
1496    <stop offset="0.4" stop-opacity="0.88"></stop>
1497    <stop offset="0.83" stop-opacity="0.83"></stop>
1498    <stop offset="1"></stop>
1499    </lineargradient>
1500    <lineargradient id="paint1_linear_133_73" x1="5.32946" y1="17.466" x2="5.32946" y2="8.29319" gradientunits="userSpaceOnUse">
1501    <stop stop-opacity="0.99"></stop>
1502    <stop offset="1"></stop>
1503    </lineargradient>
1504    <clippath id="clip0_133_73">
1505    <rect width="37" height="24" fill="white"></rect>
1506    </clippath>
1507    </defs>
1508    </svg></a>
1509    </li></ul>
1510</div>
1511    </nav>
1512  </header-reserve>
1513
1514
1515<script>
1516  window.addEventListener("DOMContentLoaded", () => {
1517    const aboutUsButton = document.getElementById('aboutUs')
1518    const headerReserve = document.getElementById('headerReserve')
1519    const headerReserveButton = document.getElementById('headerReserveButton')
1520
1521    if (aboutUsButton) {
1522      aboutUsButton.addEventListener('click', () => {
1523        headerReserve.classList.remove("is-active");
1524        headerReserve.setAttribute('aria-expanded', false);
1525        headerReserveButton.classList.remove("is-active");
1526        document.documentElement.classList.remove('mega-menu-active');
1527      })
1528    }
1529  });
1530</script>
1530
1531
1532
1533</div>
1534    <main class="main-content" role="main" id="main-content">
1535
1536        <div id="twobbloader" class="loading">
1537  <div class="blobs">
1538    <div class="blob blob-0"></div>
1539    <div class="blob blob-1"></div>
1540    <div class="blob blob-2"></div>
1541    <div class="blob blob-3"></div>
1542    <div class="blob blob-4"></div>
1543    <div class="blob blob-5"></div>
1544  </div>
1545</div>
1546
1547<script type="text/javascript">
1548  document.addEventListener('DOMContentLoaded', () => {
1549    if ( $('#braille-translator').length ) {
1550      $("#twobbloader").fadeOut();
1551    } else {
1552      $("#twobbloader").fadeOut();
1553    }
1554  })
1555</script>
1555
1556
1557
1558        <!-- /templates/cart.liquid -->
1559
1560
1561<script src="https://cdn.tailwindcss.com/3.3.3"></script>
vendor: 1 bytes, line 1561
1561
1562<script data-cfasync="false" type="text/javascript">
1563  if (typeof Shopify === "undefined") var Shopify = {};
1564  Shopify.money_format = "${{amount}}";
1565  Shopify.cart = {"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};
1566
1567  function updateQuantity(button, change) {
1568    const container = button.closest("div");
1569    // Replacement = 1 pair max: block qty increase.
1570    const stepper = button.closest("[data-qty-stepper]");
1571    if (change > 0 && stepper && stepper.getAttribute("data-replacement") === "true") {
1572      return;
1573    }
1574    const input = container.querySelector("input[name='updates[]']");
1575    let value = parseInt(input.value) || 1;
1576    value = Math.max(1, value + change);
1577    input.value = value;
1578
1579    const form = button.closest("form");
1580    if (form) {
1581      form.submit();
1582    }
1583  }
1584
1585  function removeCartItem(button) {
1586    const itemRow = button.closest(".grid");
1587    const input = itemRow.querySelector("input[name='updates[]']");
1588    let itemKey = input ? input.getAttribute("data-id") : null;
1589
1590    if (!itemKey) {
1591      itemKey = itemRow.getAttribute("data-key");
1592    }
1593
1594    const cartObj = (typeof window !== "undefined" && window.cart) ? window.cart : (typeof cart !== "undefined" ? cart : null);
1595
1596    if (itemKey && cartObj && typeof cartObj.updateItem === "function") {
1597      cartObj.updateItem(itemKey, 0).then(function() {
1598        window.location.reload();
1599      }).catch(function() {
1600        if (input) {
1601          input.value = 0;
1602          const form = button.closest("form");
1603          if (form) {
1604            form.submit();
1605          }
1606        }
1607      });
1608    } else {
1609      if (input) {
1610        input.value = 0;
1611        const form = button.closest("form");
1612        if (form) {
1613          form.submit();
1614        }
1615      }
1616    }
1617  }
1618
1619  document.addEventListener('DOMContentLoaded', function () {
1620    var format = Shopify.money_format || "${{amount_no_decimals}}";
1621    function reformatEl(el) {
1622      var cents = parseInt(el.getAttribute('data-original-cents'), 10);
1623      if (!isNaN(cents)) {
1624        if (Shopify && typeof Shopify.formatMoney === 'function') {
1625          el.textContent = Shopify.formatMoney(cents, format);
1626        } else if (typeof formatMoney === 'function') {
1627          el.textContent = formatMoney(cents, format);
1628        } else {
1629          el.textContent = (cents / 100).toFixed(2);
1630        }
1631      }
1632    }
1633    var priceEls = document.querySelectorAll('.auto-cart-item-line-price[data-original-cents], .auto-cart-original-total[data-original-cents]');
1634    priceEls.forEach(function (el) {
1635      reformatEl(el);
1636      var observer = new MutationObserver(function () { reformatEl(el); });
1637      observer.observe(el, { childList: true, characterData: true, subtree: true });
1638    });
1639  });
1640</script>
1640
1641<div id="sca_fg_cart">
1642  <div class="wrapper cart-wrapper">
1643    
1644      
1645      <div class="cart-empty">
1646        <h2 class="cart-empty-header">Shopping Cart</h2>
1647        <div class="cart-empty-description">
1648          <p>Your cart is currently empty.</p>
1649          <p>Continue browsing <a href="/collections/all">here</a>.</p>
1650        </div>
1651      </div>
1652    
1653  </div>
1654  <div id="cbb-also-bought-box"></div>
1655</div>
1656
1657<div id="shopify-section-cart-recommendations" class="shopify-section">
1658
1659
1660</div>
1661
1662<div data-rebuy-id="114311"></div>
1663
1664        
1665
1666
1667  <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/left-side-buttons-25c6a995.css" rel="stylesheet" type="text/css" media="all" />
1668
1669
1670
1671
1672  
1672<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/left-side-buttons-f2532d56.js" type="module" crossorigin="anonymous"></script>
1672
1673
1674<div id="left-side-buttons__wrapper">
1675  <!-- Toggle -->
1676  <button
1677    id="left-side-buttons__toggle"
1678    aria-controls="left-side-panel"
1679    aria-expanded="false"
1680    aria-label="Open accessibility menu"
1681    class="toggle-btn"
1682  >
1683    <span class="svg">
1684
1685<svg width="469" height="447" viewBox="0 0 469 447" fill="none" xmlns="http://www.w3.org/2000/svg">
1686      <path d="M398.854 334.516C437.141 334.516 468.474 303.188 468.474 264.901V69.6198C468.474 31.3334 437.141 0 398.854 0H234.237H69.6198C31.3229 0 0 31.3334 0 69.6198V264.901C0 303.188 31.3229 334.516 69.6198 334.516H243.01L373.839 446.297L398.854 334.516Z" fill="#100F0D"/>
1687      <path d="M233 212.969C255.474 212.969 273.76 194.578 273.76 171.974C273.76 149.37 255.474 130.979 233 130.979C210.521 130.979 192.239 149.37 192.239 171.974C192.239 194.578 210.521 212.969 233 212.969Z" fill="white"/>
1688      <path d="M133.859 213.969C156.333 213.969 174.62 195.578 174.62 172.974C174.62 150.37 156.333 131.979 133.859 131.979C111.38 131.979 93.0938 150.37 93.0938 172.974C93.0938 195.578 111.38 213.969 133.859 213.969Z" fill="white"/>
1689      <path d="M332.141 213.969C354.615 213.969 372.906 195.578 372.906 172.974C372.906 150.37 354.615 131.979 332.141 131.979C309.661 131.979 291.375 150.37 291.375 172.974C291.375 195.578 309.661 213.969 332.141 213.969Z" fill="white"/>
1690    </svg></span>
1691  </button>
1692
1693  <!-- Panel (hidden by default) -->
1694  <div
1695    id="left-side-panel"
1696    class="side-panel"
1697    role="dialog"
1698    aria-modal="true"
1699    aria-labelledby="left-side-buttons__toggle"
1700  >
1701
1702    <ul class="side-panel-list">
1703      <li class="side-panel-item" style="--delay:.1s">
1704        <button id="eyeball" class="left-side-button">
1705          <span class="label">See How We See</span>
1706          
1707          <span class="svg">
1708
1709<svg class="[.active-blind-mission_&]:!pointer-events-none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 106.3 48.9">
1710      <g class="[.active-blind-mission_&]:!pointer-events-none" id="Art">
1711        <path class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" d="M91,1.2A43,43,0,0,1,53.4,24.3,42.9,42.9,0,0,1,15.2,2"/>
1712        <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="14.6" y1="14.9" x2="1.5" y2="24.9"/>
1713        <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="27.1" y1="26.2" x2="17.9" y2="39.9"/>
1714        <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="44.6" y1="32.2" x2="41.9" y2="48.5"/>
1715        <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="63.5" y1="32.2" x2="66.1" y2="48.5"/>
1716        <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="79.3" y1="26.2" x2="88.5" y2="39.9"/>
1717        <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="91.6" y1="14.9" x2="104.8" y2="24.9"/>
1718      </g>
1719    </svg></span>
1720        </button>
1721      </li>
1722      <li class="side-panel-item" style="--delay:.2s">
1723        <button id="get-support-button" class="left-side-button" aria-label="Get help">
1724          <span class="label">Chat Support</span>
1725          <span class="svg">
1726
1727<svg width="469" height="447" viewBox="0 0 469 447" fill="none" xmlns="http://www.w3.org/2000/svg">
1728      <path d="M398.854 334.516C437.141 334.516 468.474 303.188 468.474 264.901V69.6198C468.474 31.3334 437.141 0 398.854 0H234.237H69.6198C31.3229 0 0 31.3334 0 69.6198V264.901C0 303.188 31.3229 334.516 69.6198 334.516H243.01L373.839 446.297L398.854 334.516Z" fill="#100F0D"/>
1729      <path d="M233 212.969C255.474 212.969 273.76 194.578 273.76 171.974C273.76 149.37 255.474 130.979 233 130.979C210.521 130.979 192.239 149.37 192.239 171.974C192.239 194.578 210.521 212.969 233 212.969Z" fill="white"/>
1730      <path d="M133.859 213.969C156.333 213.969 174.62 195.578 174.62 172.974C1
173074.62 150.37 156.333 131.979 133.859 131.979C111.38 131.979 93.0938 150.37 93.0938 172.974C93.0938 195.578 111.38 213.969 133.859 213.969Z" fill="white"/>
1731      <path d="M332.141 213.969C354.615 213.969 372.906 195.578 372.906 172.974C372.906 150.37 354.615 131.979 332.141 131.979C309.661 131.979 291.375 150.37 291.375 172.974C291.375 195.578 309.661 213.969 332.141 213.969Z" fill="white"/>
1732    </svg></span>
1733          
1734        </button>
1735      </li>
1736    </ul>
1737  </div>
1738</div>
1739
1740    </main>
1741
1742    <!-- begin site-footer --><div id="shopify-section-footer-reserve" class="shopify-section"><style>
1743  .footer-reserve__item-header {
1744    font-weight: 500;
1745    font-size: 20px;
1746  }
1747
1748  .footer-reserve__item--newsletter {
1749    display: flex;
1750    flex-direction: column;
1751  }
1752
1753  .newsletter-email {
1754    margin-top: 14px;
1755  }
1756
1757  .newsletter-email button {
1758    background: #F0D83D !important;
1759  }
1760</style>
1761  <footer class="footer-reserve bg-black text-white" role="contentinfo">
1762    <div class="wrapper max-w-[1440px] px-[15px] pt-[32px] pb-[20px] mx-auto sm:px-[32px] sm:pt-[32px] md:px-[40px] md:pt-[40px] lg:px-[56px] lg:pt-[56px]">
1763      <div class="footer-reserve__top flex flex-col-reverse sm:flex-row sm:justify-between gap-[80px]">
1764        <div class="footer-reserve__item-links flex gap-[15px] sm:gap-[24px] md:gap-[48px] lg:gap-[61px]">
1765              
1766              <div class="footer-reserve__item w-1/2 sm:w-[165px] md:w-[180px] shrink-0">
1767                <h2 class="label font-normal mb-[18px] md:mb-[20px] capitalize footer-reserve__item-header">Shop</h2>
1768                <nav aria-labelledby="footer-menu" class="footer-menu-container">
1769                  <ul class="no-bullets p1">
1770                    
1771                      <li class="mb-2" >
1772                        <a class="hover:text-yellow hover:underline" href="/pages/donations">Donations </a>
1773                      </li>
1774                    
1775                      <li class="mb-2" >
1776                        <a class="hover:text-yellow hover:underline" href="/pages/thereserve">Apparel</a>
1777                      </li>
1778                    
1779                      <li class="mb-2" >
1780                        <a class="hover:text-yellow hover:underline" href="/pages/sunglasses">Sunglasses</a>
1781                      </li>
1782                    
1783                      <li class="mb-2" >
1784                        <a class="hover:text-yellow hover:underline" href="/collections/guide-dog-collection">My Guide Dog</a>
1785                      </li>
1786                    
1787                      <li class="mb-2" >
1788                        <a class="hover:text-yellow hover:underline" href="/collections/gifts">Accessories</a>
1789                      </li>
1790                    
1791                      <li class="mb-2" >
1792                        <a class="hover:text-yellow hover:underline" href="https://twoblindbrothers.com/pages/sitemap">Site Map</a>
1793                      </li>
1794                    
1795                  </ul>
1796                </nav>
1797              </div>
1798            
1799              
1800              <div class="footer-reserve__item w-1/2 sm:w-[165px] md:w-[180px] shrink-0">
1801                <h2 class="label font-normal mb-[18px] md:mb-[20px] capitalize footer-reserve__item-header">Company</h2>
1802                <nav aria-labelledby="footer-menu" class="footer-menu-container">
1803                  <ul class="no-bullets p1">
1804                    
1805                      <li class="mb-2" >
1806                        <a class="hover:text-yellow hover:underline" href="/pages/about-us">About Us</a>
1807                      </li>
1808                    
1809                      <li class="mb-2" >
1810                        <a class="hover:text-yellow hover:underline" href="/blogs/the-blind-spot">The Blind Spot</a>
1811                      </li>
1812                    
1813                      <li class="mb-2" >
1814                        <a class="hover:text-yellow hover:underline" href="/pages/braille">Braille Translator</a>
1815                      </li>
1816                    
1817                      <li class="mb-2" >
1818                        <a class="hover:text-yellow hover:underline" href="https://two-blind-brothers-rxaedbshu7o.gorgias.help/en-US/contact">Contact Us</a>
1819                      </li>
1820                    
1821                      <li class="mb-2" >
1822                        <a class="hover:text-yellow hover:underline" href="https://twoblindbrothers.loopreturns.com/#/">Returns & Exchanges </a>
1823                      </li>
1824                    
1825                      <li class="mb-2" >
1826                        <a class="hover:text-yellow hover:underline" href="https://two-blind-brothers-rxaedbshu7o.gorgias.help/en-US">FAQ</a>
1827                      </li>
1828                    
1829                      <li class="mb-2" >
1830                        <a class="hover:text-yellow hover:underline" href="/account">Account</a>
1831                      </li>
1832                    
1833                  </ul>
1834                </nav>
1835              </div>
1836            
1837</div>
1838
1839        <div class="footer-reserve__item--newsletter w-full sm:w-[321px] md:w-[380px] lg:w-[495px] lg:mr-[153px]">
1840          <h2 class="label font-normal mb-[18px] md:mb-[20px] capitalize footer-reserve__item-header">Newsletter</h2>
1841          <div class="footer-reserve__newsletter-form">
1842            <p class="p1">Subscribe to get notified about any and all brand updates and special offers.</p><div class="klaviyo-form-RNp37i newsletter-email"></div></div>
1843          <div class="footer-reserve__socials">
1844            <ul class="inline-list flex items-end gap-[18px] mt-[26px] lg:mt-[32px]">
1845              
1846                <li>
1847                  <a class="social-icon flex items-center justify-center w-10 h-10 text-[#3df0aa] p-0 border-none transition duration-200 ease-in-out" href="https://www.instagram.com/twoblindbrothers/" target="_blank" rel="noopener" title="" aria-label="Instagram">
1848                    <img class="lazy" src="//twoblindbrothers.com/cdn/shop/files/Instagram.png?v=1696586169" alt="" width="auto" height="26">
1849                  </a>
1850                </li>
1851              
1852              
1853                <li>
1854                  <a class="social-icon flex items-center justify-center w-10 h-10 text-[#3df0aa] p-0 border-none transition duration-200 ease-in-out" href="https://twitter.com/i/flow/login?redirect_after_login=%2Ftwoblindbros%2F" target="_blank" rel="noopener" title="" aria-label="Twitter">
1855                    <img class="lazy" src="//twoblindbrothers.com/cdn/shop/files/twitter.png?v=1696586174" alt="" width="auto" height="26">
1856                  </a>
1857                </li>
1858              
1859              
1860                <li>
1861                  <a class="social-icon flex items-center justify-center w-10 h-10 text-[#3df0aa] p-0 border-none transition duration-200 ease-in-out" href="https://www.facebook.com/twoblindbros/" target="_blank" rel="noopener" title="" aria-label="Facebook">
1862
1863<svg width="26" height="22" viewbox="0 0 37 24" fill="white" xmlns="http://www.w3.org/2000/svg">
1864    <g clip-path="url(#clip0_133_73)">
1865    <path d="M3.99645 15.8325C3.99645 17.2147 4.30655 18.2714 4.71185 18.9123C4.92784 19.2771 5.23887 19.5796 5.61333 19.789C5.9878 19.9985 6.41237 20.1074 6.84389 20.1047C7.88611 20.1047 8.83955 19.8534 10.6769 17.3705C12.1489 15.3814 13.8834 12.5956 15.0517 10.8364L17.028 7.87099C18.4009 5.81152 19.9874 3.52209 21.8119 1.96524C23.2981 0.703665 24.9026 0 26.5174 0C29.2284 0 31.8108 1.53424 33.7871 4.41173C35.9501 7.56314 37.0039 11.5326 37.0039 15.6289C37.0039 18.0641 36.5123 19.8534 35.676 21.267C34.8692 22.6341 33.2892 24 30.6399 24V20.1047C32.9083 20.1047 33.4706 18.0691 33.4706 15.7395C33.4706 12.4197 32.678 8.7355 30.932 6.10304C29.6929 4.23581 28.0871 3.09487 26.3205 3.09487C24.4098 3.09487 22.8722 4.5022 21.1441 7.01152C20.2255 8.34471 19.2823 9.96942 18.2234 11.8027L17.0576 13.8132C14.7159 17.8681 14.1227 18.7916 12.9518 20.3158C10.9034 22.9948 9.15093 24 6.84389 24C4.10711 24 2.37651 22.8427 1.31114 21.0986C0.429754 19.6775 0 17.8128 0 15.688L3.99645 15.8325Z" fill="white"></path>
1866    <path d="M3.15112 4.68691C4.98337 1.9288 7.62751 0 10.6602 0C12.4166 0 14.1626 0.502618 15.9858 1.96147C17.9802 3.55099 20.1032 6.16838 22.7577 10.4821L23.7085 12.0302C26.004 15.7646 27.3113 17.6846 28.0743 18.5918C29.0573 19.7554 29.747 20.0997 30.6399 20.0997C32.9084 20.0997 33.4706 18.0641 33.4706 15.7344L36.9962 15.6264C36.9962 18.0616 36.5046 19.8509 35.6683 21.2645C34.8693 22.6341 33.2892 24 30.6399 24C28.993 24 27.5339 23.6507 25.9204 22.1642C24.68 21.0232 23.2299 18.9964 22.1143 17.1744L18.796 11.7613C17.131 9.04461 15.6037 7.01906 14.7197 6.10681C13.7676 5.11539 12.5465 3.92419 10.5959 3.92419C9.01713 3.92419 7.6764 5.00607 6.55441 6.66094L3.15112 4.68691Z" fill="white"></path>
1867    <path d="M10.5959 3.92419C9.01711 3.92419 7.67638 5.00607 6.55439 6.66094C4.9679 8.99937 3.99645 12.4825 3.99
1867645 15.8325C3.99645 17.2147 4.30655 18.2714 4.71185 18.9123L1.3047 21.0986C0.429754 19.6775 0 17.8128 0 15.688C0 11.8241 1.08596 7.79686 3.1511 4.68691C4.98334 1.9288 7.62749 0 10.6602 0L10.5959 3.92419Z" fill="white"></path>
1868    </g>
1869    <defs>
1870    <lineargradient id="paint0_linear_133_73" x1="8.02124" y1="11.378" x2="33.4945" y2="12.6954" gradientunits="userSpaceOnUse">
1871    <stop></stop>
1872    <stop offset="0.4" stop-opacity="0.88"></stop>
1873    <stop offset="0.83" stop-opacity="0.83"></stop>
1874    <stop offset="1"></stop>
1875    </lineargradient>
1876    <lineargradient id="paint1_linear_133_73" x1="5.32946" y1="17.466" x2="5.32946" y2="8.29319" gradientunits="userSpaceOnUse">
1877    <stop stop-opacity="0.99"></stop>
1878    <stop offset="1"></stop>
1879    </lineargradient>
1880    <clippath id="clip0_133_73">
1881    <rect width="37" height="24" fill="white"></rect>
1882    </clippath>
1883    </defs>
1884    </svg>
1885                  </a>
1886                </li>
1887              
1888              
1889                <li style="margin-left: 6px;">
1890                  <a class="social-icon flex items-center justify-center w-10 h-10 text-[#3df0aa] p-0 border-none transition duration-200 ease-in-out" href="https://www.tiktok.com/@twoblindbrothers" target="_blank" rel="noopener" title="" aria-label="Tiktok">
1891                    <img class="lazy" src="//twoblindbrothers.com/cdn/shop/files/tiktok.png?v=1696586171" alt="" width="auto" height="26">
1892                  </a>
1893                </li>
1894              
1895            </ul>
1896          </div>
1897        </div>
1898      </div><div class="footer-reserve__middle mb-[32px] mt-[72px] sm:mb-[47px] sm:mt-[90px] md:mb-[56px] md:mt-[96px] lg:mb-[76px] lg:mt-[125px]">
1899          <picture class="w-full">
1900            <source data-srcset="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752" media="(min-width: 769px)" />
1901            <source data-srcset="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752&width=1024" media="(min-width: 500px)" />
1902            <source data-srcset="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752&width=500" media="(min-width: 320px)" />
1903            <img width="auto" height="auto" src="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752&width=500" alt="" loading="lazy"/>
1904          </picture>
1905        </div><div class="footer-reserve__bottom pt-[24px] border-t border-grey flex flex-col-reverse sm:flex-row sm:justify-between">
1906        <p class="p1 mt-[14px] sm:mt-0">
1907          © 2026 Two Blind Brothers | A registered 501(c)(3) nonprofit organization | EIN 47-5511564
1908          
1909        </p>
1910        <nav>
1911          <ul class="no-bullets p1 flex gap-[12px] md:gap-[32px]">
1912            
1913              <li>
1914                <a class="hover:text-yellow hover:underline" href="/pages/terms-of-service">Terms & Conditions</a>
1915              </li>
1916            
1917              <li>
1918                <a class="hover:text-yellow hover:underline" href="/pages/privacy-policy">Privacy Policy</a>
1919              </li>
1920            
1921              <li>
1922                <a class="hover:text-yellow hover:underline" href="/pages/accessibility">Accessibility </a>
1923              </li>
1924            
1925          </ul>
1926        </nav>
1927      </div>
1928    </div>
1929  </footer>
1930
1931
1932
1933</div><!-- //site-footer -->
1934
1935    <div id="heatmap-banner" class="">
1936      <p>There are lots of types of blindness. We have Stargardt's, a type of macular degeneration that means we lose vision in the center of the retina. This simulator gives you peek at what its like to peep with our peepers.</p><a class="heatmap-close" href="#" title="close banner">X</a>
1937    </div>
1938
1939    <svg xmlns="http://www.w3.org/2000/svg" width="80%" height="80%" viewBox="10 0 50 75" id="heatmap-display">
1940      <filter id="blurMe">
1941        <feGaussianBlur in="SourceGraphic" stdDeviation="1"></feGaussianBlur>
1942      </filter>
1943      <path d="M10,59l9,6,10,3a18,18,0,0,0,10-3h1l9-5,10-4,5-5a15,15,0,0,0,2-7h0a20,20,0,0,0-1-6l-4-6-6-5-9-5L37,14l-3-2L27,9a14,14,0,0,0-9,1,20,20,0,0,0-7,6L6,24a49,49,0,0,0-3,9,45,45,0,0,0-1,9H2a20,20,0,0,0,2,9Z" fill="rgba(0,0,0,.7)" filter="url(#blurMe)"></path>
1944      <path d="M9,48l5,7,7,5h9l8-2,9-2h5a5,5,0,0,0,3-3h0l2-6a42,42,0,0,0,0-9c0-3-1-6-2-7s-4-3-7-3l-8-2-2-2-5-4-7-2-7,2-5,4-4,6L7,34H7a14,14,0,0,0,0,7A22,22,0,0,0,9,48Z" fill="#666" filter="url
1944(#blurMe)"></path>
1945      <path d="M14,52l7,4,8,2,8-2h1l7-3,7-3,3-3a10,10,0,0,0,2-5h0a13,13,0,0,0-1-4l-3-4-4-3-7-4-8-4H32l-5-2H20l-5,4-3,6L9,34a29,29,0,0,0-1,6H9a14,14,0,0,0,2,6Z" filter="url(#blurMe)"></path>
1946    </svg>
1947
1948  </div>
1949
1950  <div id="shopify-section-collection-nav-images" class="shopify-section">
1951</div>
1952
1953  <reserve-collapsible-cart class="reserve-collapsible-cart collapsible js-reserve-cart-collapsible" hidden>
1954    <button type="button" class="collapsible-trigger" id="collapsible-trigger" aria-expanded="false" aria-controls="collapsible-content">
1955      <span class="collapsible-title">Thanks to you, we’ve donated +$2.5m to fight blindness.</span>
1956      <span class="collapsible-icon">
1957        <svg xmlns="http://www.w3.org/2000/svg" width="13" height="8" fill="none" viewBox="0 0 13 8"><path stroke="#000" stroke-width="1.5" d="m1 1 5.5 5L12 1"/></svg>
1958      </span>
1959    </button>
1960    <div class="collapsible-content" id="collapsible-content" role="region" aria-labelledby="collapsible-trigger">
1961      <div class="collapsible-content__inner">
1962        We started Two Blind Brothers to make the softest clothing and gifts in the world and to help the blind community by donating 100% of our profits back to research for eye disease through Foundation Fighting Blindness.
1963      </div>
1964    </div>
1965  </reserve-collapsible-cart>
1966
1967
1968  
1968<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/reserve-collapsible-cart-4546fed9.js" type="module" crossorigin="anonymous"></script>
1968
1969
1970
1971<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/timber.js?v=31070900647156016061761863562"></script>
1971
1972  
1972<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/scripts.js?v=87841220958860870631781797004"></script>
1972
1973  
1973<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/nav.js?v=152844729932761356901718126068"></script>
1973
1974  
1974<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/aria-modal.js?v=267549560295848651752613227"></script>
1974
1975  
1975<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/js.cookie.js?v=55157327875759164121702066481"></script>
1975
1976  
1976<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/simpleheat.js?v=156388220822006659271702066480"></script>
1976
1977  
1977<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/data.js?v=90591694455426389211702066488"></script>
1977
1978
1979  <!-- <div class="options">
1980  <label>Radius </label><input type="range" id="radius" value="25" min="10" max="50" /><br />
1981  <label>Blur </label><input type="range" id="blur" value="15" min="10" max="50" />
1982</div>
1983
1984<canvas id="canvas" width="1000" height="600"></canvas> -->
1985
1986<div id="canvas"></div>
1987
1988<script>
1989  window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
1990
1991  // function get(id) {
1992  //   return document.getElementById(id);
1993  // }
1994
1995  // var heat = simpleheat('canvas').data(data).max(18),
1996  //   frame;
1997  //
1998  // function draw() {
1999  //   console.time('draw');
2000  //   heat.draw();
2001  //   console.timeEnd('draw');
2002  //   frame = null;
2003  // }
2004  //
2005  // draw();
2006
2007  // get('canvas').onmousemove = function (e) {
2008  //   heat.add([e.layerX, e.layerY, 1]);
2009  //   frame = frame || window.requestAnimationFrame(draw);
2010  // };
2011  //
2012  // var radius = get('radius'),
2013  //   blur = get('blur'),
2014  //   changeType = 'oninput' in radius ? 'oninput' : 'onchange';
2015  //
2016  // radius[changeType] = blur[changeType] = function (e) {
2017  //   heat.radius(+radius.value, +blur.value);
2018  //   frame = frame || window.requestAnimationFrame(draw);
2019  // };
2020
2021  function handler1() {
2022    document.body.classList.add('active-eyeball-blind')
2023    $('#eyeball svg title#eyeball-title').html('Remove');
2024    $('#eyeball').attr('aria-label', 'Remove');
2025
2026    $('.blink').addClass('blinked');
2027    // $('#stargardt').addClass('content-grow2');
2028    $('#heatmap-banner').addClass('nav-down');
2029    $(this).one("click", handler2);
2030
2031    $("#canvas").fadeIn();
2032
2033    $("#canvas").addClass("growing");
2034
2035    // setInterval(function(){
2036    //   if (v > 1) {
2037    //     v = parseInt(v) - 1;
2038    //     $("#canvas").css("filter", "blur(" + v + "em)");
2039    //   }
2040    // }, 1000);
2041  }
2042
2043  function handler2() {
2044    document.body.classList.remove('active-eyeball-blind')
2045    $('.blink').removeClass('blinked');
2046    $('#eyeball svg title#eyeball-title').html('Select this button to see how the Two Blind Brothers see that Page');
2047    $('#eyeball').attr('aria-label', 'Select this button to see how the Two Blind Brothers see that Page');
2048    // $('#stargardt').removeClass('content-grow2');
2049    $("#canvas").fadeOut();
2050    $("#canvas").removeClass("growing");
2051    $('#heatmap-banner').removeClass('nav-down');
2052    $(this).one("click", handler1);
2053  }
2054
2055  $("#eyeball").one("click", handler1);
2056  $( ".heatmap-close" ).click(function(e) {
2057    e.preventDefault();
2058    $('#heatmap-banner').removeClass('nav-down')
2059    $("#canvas").fadeOut();
2060    $("#canvas").removeClass("growing");
2061  });
2062</script>
2062
2063
2064
2065  
2065<script>
2066    //lazy bgs
2067    document.addEventListener('lazybeforeunveil', function(e){
2068      var bg = e.target.getAttribute('data-bg');
2069      if(bg){ e.target.style.backgroundImage = 'url(' + bg + ')'; }
2070    });
2071  </script>
2071
2072
2073  
2073<script>
2074    // Video modals
2075    jQuery(function() {
2076      $('iframe[src*="https://www.youtube.com/embed/"]').addClass("remodal-video");
2077      $(document).on('closing', '.remodal', function (e) {
2078        $('.remodal-video').each(function(index) {
2079          $(this).attr('src', $(this).attr('src'));
2080          return false;
2081        });
2082      });
2083      jQuery('.swatch :radio').change(function() {
2084        var optionIndex = jQuery(this).closest('.swatch').attr('data-option-index');
2085        var optionValue = jQuery(this).val();
2086        jQuery(this)
2087        .closest('form')
2088        .find('.single-option-selector')
2089        .eq(optionIndex)
2090        .val(optionValue)
2091        .trigger('change');
2092      });
2093    });
2094  </script>
2094
2095
2096  
2096<script>
2097    // Smooth Scroll
2098    $('a[href*="#"]')
2099    .not('[href="#"]')
2100    .not('[href="#0"]')
2101    .click(function(event) {
2102      if (
2103        location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '')
2104        &&
2105        location.hostname == this.hostname
2106      ) {
2107        var target = $(this.hash);
2108        target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
2109        if (target.length) {
2110          event.preventDefault();
2111          $('html, body').animate({
2112            scrollTop: target.offset().top - 120
2113          }, 1000, function() {
2114            var $target = $(target);
2115            $target.focus();
2116            if ($target.is(":focus")) {
2117              return false;
2118            } else {
2119              $target.attr('tabindex','-1');
2120              $target.focus();
2121            };
2122          });
2123        }
2124      }
2125    });
2126  </script>
2126
2127
2128  
2128<script>
2129    
2130  </script>
2130
2131
2132  
2133
2134  
2135
2136  
2136<script type="text/javascript">
2137    (function () {
2138      var b = document.createElement('script'); b.type = 'text/javascript'; b.async = true;
2139      b.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'a.klaviyo.com/media/js/analytics/analytics.js';
2140      var a = document.getElementsByTagName('script')[0]; a.parentNode.insertBefore(b, a);
2141    })();
2142  </script>
2142
2143
2144  
2145
2146  
2146<script type="text/javascript">
2147    !function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();
2148
2149    klaviyo.push(['account', 'HMZ6Wk']);
2150  </script>
2150
2151
2152  <div id="shopify-section-product-names" class="shopify-section product-names">
2153</div>
2154
2155  <input type="hidden" name="aaaformbuilder_customer_logged_id" value="" id="aaaformbuilder_customer_logged_id">
2156
2157<script id="back-in-stock-helper">
2158  var _BISConfig = _BISConfig || {};
2159
2160
2161
2162
2163</script>
2163
2164
2165
2166  
2167
2168  <!-- Twitter universal website tag code -->
2169  
2169<script>
2170    !function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments);
2171                                                     },s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='//static.ads-twitter.com/uwt.js',
2172                                   a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script');
2173    // Insert Twitter Pixel ID and Standard Event data below
2174    twq('init','nzf97');
2175    twq('track','PageView');
2176  </script>
2176
2177  <!-- End Twitter universal website tag code -->
2178
2179    <!-- Outbrain Pixel implemented by Brad -->
2180
2181<script data-obct type="text/javascript">
2182  /** DO NOT MODIFY THIS CODE**/
2183  !function(_window, _document) {
2184    var OB_ADV_ID='00dfab9c8bb5ecb00218393d5a60382924';
2185    if (_window.obApi) {var toArray = function(object) {
2186      return Object.prototype.toString.call(object) === '[object Array]' ? object : [object];
2187    }
2188    _window.obApi.marketerId = toArray(_window.obApi.marketerId).concat(toArray(OB_ADV_ID));return;}
2189    var api = _window.obApi = function() {
2190      api.dispatch
2191        ? api.dispatch.apply(api, arguments)
2192        : api.queue.push(arguments);
2193    }
2194    api.version = '1.1';
2195    api.loaded = true;
2196    api.marketerId = OB_ADV_ID;
2197    api.queue = [];
2198    var tag = _document.createElement('script');
2199    tag.async = true;
2200    tag.src = '//amplify.outbrain.com/cp/obtp.js';
2201    tag.type = 'text/javascript';
2202    var script = _document.getElementsByTagName('script')[0];
2203    script.parentNode.insertBefore(tag, script);
2204  }(window, document);
2205  obApi('track', 'PAGE_VIEW');
2206</script>
2206
2207
2208  <!-- Outbrain Pixel End -->
2209
2210  <!-- LinkedIn website tag code -->
2211
2212  
2212<script type="text/javascript">
2213    _linkedin_data_partner_id = "397714";
2214  </script>
2214
2215
2216  
2216<script type="text/javascript">
2217    (function(){var s = document.getElementsByTagName("script")[0];
2218                var b = document.createElement("script");
2219                b.type = "text/javascript";b.async = true;
2220                b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
2221                s.parentNode.insertBefore(b, s);})();
2222  </script>
2222
2223  <noscript>
2224    <img height="1" width="1" style="display:none;" alt="" src="https://dc.ads.linkedin.com/collect/?pid=397714&fmt=gif" />
2225  </noscript>
2226
2227  <!-- This line added automatically by JSON-LD for SEO. -->
2228  
2229
2230
2231<script type="application/ld+json">
2232{
2233    "@context": "https://schema.org",
2234    "@type": "Organization",
2235    "@id": "https:\/\/twoblindbrothers.com\/#org",
2236    "name": "Two Blind Brothers",
2237    "url": "https://twoblindbrothers.com",
2238    "description": "Two Blind Brothers is a nonprofit creating awareness, education, and opportunities that help people thrive with blindness and low vision. Every purchase and donation helps support our programs.",
2239    "telephone": "9177226284",
2240    "logo": "https:\/\/twoblindbrothers.com\/cdn\/shop\/t\/278\/assets\/logo_small.png?v=142736",
2241    "image": "https:\/\/twoblindbrothers.com\/cdn\/shop\/t\/278\/assets\/logo_small.png?v=142736",
2242    "sameAs": [],
2243    "address": {
2244        "@type": "PostalAddress",
2245        "streetAddress": "379 West Broadway, 2nd Floor",
2246        "addressLocality": "New York",
2247        "addressRegion": "New York",
2248        "postalCode": "10012",
2249        "addressCountry": "United States"
2250    }
2251}
2252</script>
2252
2253
2254
2255
2256
2257
2258
2259
2260  
2261
2262
2263<div data-rebuy-id="120361"></div>
2264<script async src="https://cdn.rebuyengine.com/onsite/js/rebuy.js?shop=two-blind-brothers.myshopify.com"></script>
2264
2265  
2265<script> (function(){ var s = document.createElement('script'); var h = document.querySelector('head') || document.body; s.src = 'https://acsbapp.com/apps/app/dist/js/app.js'; s.async = true; s.onload = function(){ acsbJS.init({ statementLink : '', footerHtml : '', hideMobile : false, hideTrigger : false, disableBgProcess : false, language : 'en', position : 'left', leadColor : '#000205', triggerColor : '#000205', triggerRadius : '50%', triggerPositionX : 'right', triggerPositionY : 'bottom', triggerIcon : 'people', triggerSize : 'small', triggerOffsetX : 20, triggerOffsetY : 20, mobile : { triggerSize : 'small', triggerPositionX : 'right', triggerPositionY : 'bottom', triggerOffsetX : 10, triggerOffsetY : 10, triggerRadius : '50%' } }); }; h.appendChild(s); })(); </script>
vendor: 1 bytes, line 2265
2265
2266<script async src="https://cdn.attn.tv/2bb/dtag.js"></script>
2266
2267
2268<!-- Widget : Free GWP Gift Tags  -->
2269<div data-rebuy-id="175048"></div>
2270<!-- End Widget : Free GWP Gift Tags  -->
2271
2272<!-- Widget : Gift with Purchase - Gift Card -->
2273  <div data-rebuy-id="184713"></div>
2274<!-- End Widget : Gift with Purchase - Gift Card -->
2275<style> body > .additional-checkout-buttons {display: none !important;} </style>
2276<div id="shopify-block-AVElYbHJnemxjbVVrN__10840395464443086010" class="shopify-block shopify-app-block">
2277
2278
2279<script>
2280  console.log("[Alia app extension] v1.0.5");
2281
2282  const BACKEND_URL = "https://backend.alia-prod.com";
2283
2284  window.ALIA_SHOPIFY_EXTENSION_INFO = {
2285    customerID: "",
2286    country: "US",
2287    market: "us",
2288    language: "en"
2289  }
2290
2291  if (document.readyState !== "loading") {
2292    initAlia();
2293  } else {
2294    document.addEventListener("DOMContentLoaded", () => initAlia(), { once: true });
2295  }
2296
2297  async function initAlia() {
2298    const url = BACKEND_URL + "/public/launcher.js?shopifyUrl=two-blind-brothers.myshopify.com";
2299    const script = document.createElement("script");
2300    script.src = url;
2301    script.async = true;
2302    document.head.appendChild(script);
2303  }
2304</script>
2304
2305
2306</div>
2306<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
2306
2307</body>
2308</html>
2309<!-- Widget : Free Cream Gloves w/ Apparel Purchase Dec/Jan -->
2310<div data-rebuy-id="263839"></div>
2311<!-- End Widget : Free Cream Gloves w/ Apparel Purchase Dec/Jan -->

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.