PageSourceSearch

https://twoblindbrothers.com/blogs/the-blind-spot

html twoblindbrothers.com collected 2026-09-24 19:23:23 UTC 353,420 bytes, 2,672 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="reserve-template no-js lt-ie9" lang="en"> <![endif]-->
4<!--[if IE 9 ]><html class="reserve-template ie9 no-js"> <![endif]-->
5<!--[if (gt IE 9)|!(IE)]><!--> <html class="reserve-template 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<script>
19    if (window.location.href.includes('collect-them-all')) {
20      window.location.href = 'https://twoblindbrothers.com/products/gift-tags?variant=41377350058080';
21    }
22  </script>
22
23
24  
24<script>
25    console.log('LAYOUT:theme.reserve.liquid')
26    console.log('TEMPLATE:"blog"')
27    console.log('THEME ID:122340769888')
28    console.log('PREVIEW THEME ID URL:https://twoblindbrothers.com/?preview_theme_id=122340769888')
29
30    let pathname = window.location.pathname
31    if (pathname !== '/') {
32      console.log(`THEME EDITOR:https://admin.shopify.com/store/two-blind-brothers/themes/122340769888/editor?previewPath=${pathname}`)
33    } else {
34      console.log('THEME EDITOR:https://admin.shopify.com/store/two-blind-brothers/themes/122340769888/editor')
35    }
36  </script>
36
37
38  <!-- Start of Shoplift scripts -->
39  <!-- 2026-05-07T22:05:52.3063795Z -->
40<style>.shoplift-hide { opacity: 0 !important; }</style>
41<style id="sl-preview-bar-hide">#preview-bar-iframe, #PBarNextFrameWrapper { display: none !important; }</style>
42<script type="text/javascript">(function(rootPath, template, themeRole, themeId, isThemePreview){ /* Generated on 2026-09-24T19:00:06.1337849Z */(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
427|;\\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}
42const M={Template:0,UrlRedirect:2,Script:3,Price:5},De="data:image/svg+xml,%3csvg%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M9.96001%207.90004C9.86501%207.90004%209.77001%207.86504%209.69501%207.79004L6.43501%204.53004C6.19501%204.29004%205.80501%204.29004%205.56501%204.53004L2.30501%207.79004C2.16001%207.93504%201.92001%207.93504%201.77501%207.79004C1.63001%207.64504%201.63001%207.40504%201.77501%207.26004L5.03501%204.00004C5.56501%203.47004%206.43001%203.47004%206.96501%204.00004L10.225%207.26004C10.37%207.40504%2010.37%207.64504%2010.225%207.79004C10.15%207.86004%2010.055%207.90004%209.96001%207.90004Z'%20fill='white'/%3e%3c/svg%3e",Ve="data:image/svg+xml,%3csvg%20width='14'%20height='24'%20viewBox='0%200%2014%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M12.3976%2014.5255C12.2833%2013.8788%2012.0498%2013.3024%2011.6952%2012.7961C11.3416%2012.2898%2010.9209%2011.8353%2010.4353%2011.4317C9.94868%2011.0291%209.43546%2010.6488%208.89565%2010.292C8.48487%2010.049%208.09577%209.78565%207.72637%209.50402C7.35697%209.2224%207.08016%208.89503%206.89694%208.51987C6.71273%208.14471%206.67826%207.69533%206.79055%207.1697C6.86345%206.83216%206.97476%206.54647%207.12351%206.31162C7.27324%206.07778%207.47124%205.89986%207.7175%205.77684C7.96377%205.65483%208.21989%205.59383%208.48389%205.59383C8.88087%205.59383%209.17639%205.7016%209.3734%205.91714C9.56943%206.13268%209.68271%206.42345%209.71424%206.78946C9.74576%207.15547%209.72015%207.55401%209.63839%207.98509C9.55663%208.41617%209.43645%208.84724%209.27687%209.27934L13.5127%208.80149C13.9638%207.52656%2014.1017%206.42447%2013.9264%205.49725C13.751%204.56901%2013.2664%203.85122%2012.4724%203.34491C12.239%203.19648%2011.9779%203.07041%2011.6893%202.96569L12.0026%201.50979L9.86397%200L7.3875%201.50979L7.11169%202.78878C6.65166%202.8874%206.21724%203.01957%205.8114%203.19038C4.85292%203.594%204.06684%204.15115%203.45117%204.86385C2.83452%205.57655%202.42571%206.40108%202.22378%207.33847C2.06616%208.06947%202.04942%208.70796%202.17551%209.25087C2.30061%209.7948%202.52028%2010.2828%202.8355%2010.7139C3.14974%2011.145%203.51816%2011.5344%203.93977%2011.881C4.36039%2012.2288%204.782%2012.5521%205.20164%2012.851C5.68334%2013.1702%206.13844%2013.5169%206.56497%2013.8921C6.99052%2014.2672%207.31954%2014.7125%207.55004%2015.228C7.78055%2015.7445%207.81502%2016.3769%207.65347%2017.1262C7.56482%2017.5389%207.43676%2017.8765%207.27028%2018.1388C7.10381%2018.4011%206.89596%2018.5983%206.64772%2018.7295C6.3985%2018.8606%206.12071%2018.9267%205.8114%2018.9267C5.21641%2018.9267%204.79776%2018.6034%204.62833%2018.1632C4.4589%2017.7229%204.47367%2017.2583%204.60075%2016.5639C4.72782%2015.8705%205.05092%2015.1395%205.37107%2014.3699H1.17665C1.17665%2014.3699%200.207341%2016.1115%200.0310135%2017.6762C-0.0655232%2018.5302%200.0635208%2019.2653%200.41519%2019.8844C0.76686%2020.5036%201.33032%2020.9814%202.10655%2021.319C2.39222%2021.443%202.7104%2021.5447%203.05813%2021.623L2.54589%2024H7.17473L7.7047%2021.5386C8.08493%2021.442%208.43857%2021.3231%208.76562%2021.1787C9.73985%2020.7476%2010.52%2020.1427%2011.1071%2019.3649C11.6932%2018.5871%2012.0873%2017.7291%2012.2892%2016.7917C12.4744%2015.9295%2012.5099%2015.1741%2012.3966%2014.5275L12.3976%2014.5255Z'%20fill='white'/%3e%3c/svg%3e";async function Oe(a){let e=a.replace(/-/g,"+").replace(/_/g,"/");for(;e.length%4;)e+="=";const t=atob(e),i=Uint8Array.from(t,o=>
42o.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;
42const 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)}
42else if(typeof l.body=="string"){const d=JSON.parse(l.body);if(d.items)for(const u of d.items){const h=String(u.selling_plan??"");h?u.selling_plan=r(h):!u.selling_plan&&t&&(u.properties||(u.properties={}),u.properties._slpt=t)}else if(d.id){const u=String(d.selling_plan??"");u?d.selling_plan=r(u):!d.selling_plan&&t&&(d.properties||(d.properties={}),d.properties._slpt=t)}l.body=JSON.stringify(d)}}catch(d){s("[SUB-INTERCEPT] body parse failed; cart-add proceeds with un-swapped plan",d)}return a.call(window,n,l)};return o.__shoplift_intercepted=!0,window.fetch=o,function(){window.fetch===o&&(window.fetch=a)}}function Be({log:a}){if(window.fetch.__shoplift_intercepted)return a("[SUB-PREVIEW-BLOCK] already installed — skipping"),()=>{};const e=window.fetch,t=function(i,s){const r=typeof i=="string"?i:i instanceof URL?i.href:i.url;return r.includes("/cart/add")?(a("[SUB-PREVIEW-BLOCK] cart-add blocked in preview mode",{url:r}),Promise.resolve(new Response(JSON.stringify({id:0,properties:{},quantity:0,variant_id:0,key:"preview",title:"Preview — cart-add blocked",price:0,original_price:0,line_price:0,original_line_price:0,total_discount:0,discounts:[],preview:!0}),{status:200,headers:{"Content-Type":"application/json"}}))):e.call(window,i,s)};return t.__shoplift_intercepted=!0,window.fetch=t,function(){window.fetch===t&&(window.fetch=e)}}function pe({data:a,runUpdates:e,debounceMs:t=150}){let i=null;function s(){i&&clearTimeout(i),e(),i=setTimeout(e,t)}let r=null;const o=[],n={childList:!0,subtree:!0,characterData:!0,attributes:!0};function l(h){for(const p of o)p.disconnect();o.length=0;for(const p of Array.from(h.querySelectorAll("*")))if(p.shadowRoot){const b=new MutationObserver(s);b.observe(p.shadowRoot,n),o.push(b)}}function c(){const h=B(a);return h?(r&&r.disconnect(),l(h),r=new MutationObserver(p=>{p.some(b=>b.type==="childList"&&b.addedNodes.length>0)&&l(h),s()}),r.observe(h,n),!0):!1}const d=document.body||document.documentElement,u=new MutationObserver(()=>{c()&&s()});return u.observe(d,{childList:!0,subtree:!0}),c()&&s(),e(),function(){i&&(clearTimeout(i),i=null),u.disconnect(),r&&(r.disconnect(),r=null);for(const p of o)p.disconnect();o.length=0}}async function ze(a){if(a.subscriptionPriceDone)return;const e=a.getActiveAssignment(),t=e?a.getHypothesis(e.hypothesisId):void 0,i=t?.subscriptionData?null:a.findActiveSubscriptionTestControl(),s=t?.subscriptionData?t:i?.hypothesis;if(!s?.subscriptionData)return;const r=t?.subscriptionData?e.testId:i.testId;a.subscriptionPriceDone=!0;const o=s.subscriptionData,n=s.isControl,l=s.priceData,c=o.widget.widgetType;let d=W(l),u=J(o,d),h=u.discountMap,p=u.maxDiscount;function b(){const g=W(l);g!==d&&(d=g,u=J(o,d),h=u.discountMap,p=u.maxDiscount,a.log(`[SUB-PRICE] scope refreshed side=${n?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${p}`))}a.log(`[SUB-PRICE] side=${n?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${p}`),a.updatePriceTestHiddenInputs(r,n?"control":"variant",!1);function E(){if(!l)return null;const g=j(l),P=Z(g),A=ce(o,P,d);if(!de(A,n))return null;const k=P?g.get(P):void 0;return k?{formattedVariantPrice:G(k.priceInCents,l),formattedDiscounted:G(k.priceInCents*(1-p/100),l)}:null}Fe({originalFetch:a.fetch,swapMap:a.swapMap??{},slptValue:a.slptValue??void 0,log:a.log,getSelectedPlanId:()=>{const g=B(o);if(!g)return null;const P=Y(o,g);if(!P)return null;const A=D(o,"subscriptionInput"),k=A.length?A[0].selector:'input[name="rc_plan"]';return P.querySelector(`${k}:checked`)?.value??null}});function S(g){const P=D(o,"subscriptionDiscount");for(const A of P)if(A.selector.includes("badge")||A.selector.includes("__badge")){const k=g.querySelector(A.selector);k?.textContent&&!k.textContent.includes(`${p}%`)&&$(k,x=>N(x,p))}}function C(g){const P=E();if(!P)return;const A=D(o,"subscriptionCompareAt");for(const k of A){const x=g.querySelector(k.selector)||g.querySelector(`[part~="${k.selector}"]`);x?.textContent&&!x.textContent.includes(P.formattedVariantPrice)&&$(x,R=>/\d/.test(R)?P.formattedVariantPrice:R)}}function _(g,P){const A=D(o,"subscriptionCompareAt"),k=P===0?"none":"";for(const x of A){const R=g.querySelector(x.selector)||g.querySelector(`[part~="${x.selector}"]`);R&&(k==="none"?R.style.display!=="none"&&(R.style.display="none"):R.style.display==="none"&&(R.style.display=""))}}function T(g){const P=D(o,"subscriptionInput"),A=P.length?P[0].selector:'input[name="rc_plan"]',k=D(o,"subscriptionPlanDiscount"),x=k.length?k[0].selector:".rc-plans-button__discount";for(const R of Array.from(g.querySelectorAll("label"))){const O=R.querySelector(A),V=R.querySelector(x);
42if(O&&V){const L=h[O.value];if(L!==void 0){if(L===0)V.style.display!=="none"&&(V.style.display="none");else if(V.style.display==="none"&&(V.style.display=""),V.textContent){const Q=V.textContent.match(/[\d.]+%/)?.[0];Q&&Q!==`${L}%`&&$(V,et=>N(et,L))}}}}}function m(g){const P=g.querySelector("select");if(P)for(const A of Array.from(P.options)){const k=h[A.value];if(k!==void 0&&A.textContent){const x=A.textContent.match(/[\d.]+%/)?.[0];x&&x!==`${k}%`&&(A.textContent=N(A.textContent,k))}}}function y(g,P){const k=D(o,"subscriptionDiscount").filter(x=>x.selector.includes("benefit")||x.selector==="rc-benefits");for(const x of k){const R=g.querySelector(x.selector);if(R?.shadowRoot){for(const O of Array.from(R.shadowRoot.querySelectorAll("li")))if(O.textContent?.includes("Save")){const V=O;if(P===0)V.style.display!=="none"&&(V.style.display="none");else{V.style.display==="none"&&(V.style.display="");const L=O.textContent.match(/[\d.]+%/)?.[0];L&&L!==`${P}%`&&$(O,Q=>N(Q,P))}}}}}let w=!1;function I(){if(!w){w=!0;try{if(b(),d!==null&&Object.keys(h).length===0)return;const g=B(o);if(!g)return;S(g),l&&C(g);const P=Y(o,g);let A=p;if(P){const k=D(o,"subscriptionInput"),x=k.length?k[0].selector:'input[name="rc_plan"]',R=P.querySelector(`${x}:checked`);if(R){const O=h[R.value];O!==void 0&&(A=O)}c==="buttons"||c==="radio"?T(P):m(P)}_(g,A),y(g,A)}finally{w=!1}}}function f(){const g=E();if(!g)return;const P=B(o);if(!P)return;const A=D(o,"onetimeToggle"),k=A.length?A[0].selector:'input[value="onetime"]';if(!P.querySelector(k)?.checked)return;const R=D(o,"subscriptionPrice");for(const O of R){const V=P.querySelector(O.selector)||P.querySelector(`[part~="${O.selector}"]`);V?.textContent&&!V.textContent.includes(g.formattedDiscounted)&&$(V,L=>/\d/.test(L)?g.formattedDiscounted:L)}}function v(){a.subscriptionHideWrongPlans&&a.subscriptionHideWrongPlans(),I(),a.subscriptionUpdateOneTime&&a.subscriptionUpdateOneTime(),f()}pe({data:o,runUpdates:v})}async function We(a){if(a.subscriptionOneTimeDone)return;const e=a.getActiveAssignment(),t=e?a.getHypothesis(e.hypothesisId):void 0,i=!!(t?.subscriptionData&&t.priceData),s=i?null:a.findActiveSubscriptionTestControl(),r=i?t:s?.hypothesis;if(!r?.subscriptionData||!r.priceData)return;const o=i?e.testId:s.testId;a.subscriptionOneTimeDone=!0;const n=r.subscriptionData,l=r.priceData,c=j(l),d=r.isControl,u=d?"control":"variant";a.slptValue=`${o}:${u}:f`,a.updatePriceTestHiddenInputs(o,u,!1);function h(){const p=B(n);if(!p)return;const b=Z(c);if(!b)return;const E=W(l),S=ce(n,b,E);if(!de(S,d))return;const C=c.get(b);if(!C)return;const _=H(C.priceInCents,l.moneyFormat,l.currency,l.currencyCodeEnabled),T=D(n,"onetimePrice");if(!T.length)return;const m=D(n,"onetimeContainer"),y=m.length?m[0].selector:'[part~="rc-purchase-option__onetime"]',I=p.querySelector(y)??p;for(const f of T){let v=null;try{v=I.querySelector(f.selector)}catch{v=null}v??=I.querySelector(`[part~="${f.selector}"]`),v&&v.textContent&&!v.textContent.includes(_)&&$(v,g=>/\d/.test(g)?_:g)}}a.subscriptionUpdateOneTime=h,h()}async function Ge(a,e){const{subscriptionPreviewRender:t}=await Ne(async()=>{const{subscriptionPreviewRender:i}=await Promise.resolve().then(()=>Xe);return{subscriptionPreviewRender:i}},void 0);return t(a.subscriptionData,a.priceData,a.isControl,e)}function je(a,e){const t=a.widget.selectors.widgetParent??[],i=a.widget.selectors.subscriptionPlans??[],s=a.widget.selectors.subscriptionInput??[];if(!t.length||!i.length||!s.length){e("[SUB-GLOBAL-HIDE] Missing required selectors — skipping");return}const r=t[0].selector,o=i[0].selector,n=s[0].selector;let l=!1,c=null,d=!1;function u(){if(!d){d=!0;try{h()}finally{d=!1}}}function h(){const C=document.querySelector(r);if(!C?.shadowRoot)return;const _=C.shadowRoot.querySelector(o);if(!_?.shadowRoot)return;_.shadowRoot!==c&&(c=_.shadowRoot,l=!1);let T=0;if(a.widget.widgetType==="buttons"||a.widget.widgetType==="radio"){const m=Array.from(_.shadowRoot.querySelectorAll(n));for(const f of m)if(a.planIds.includes(f.value)){f.disabled||(f.disabled=!0);const v=f.closest("label");v&&v.style.display!=="none"&&(v.style.display="none",T++)}const y=m.filter(f=>!a.planIds.includes(f.value));if(!y.some(f=>f.checked)&&!l&&y.length>0){l=!0;const f=y[0];f.closest("label")?.click(),f.dispatchEvent(new Event("change",{bubbles:!0})),e(`[SUB-GLOBAL-HIDE] Preselected first visible plan input=${f.value}`)}const I=y.find(f=>f.checked)??y[0];
42if(I){const f=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const v of f)v.value!==I.value&&(v.value=I.value,e(`[SUB-GLOBAL-HIDE] Mirrored plan id ${I.value} to form selling_plan input`))}}else if(a.widget.widgetType==="dropdown"){const m=_.shadowRoot.querySelector("select");if(!m)return;for(const I of Array.from(m.options))a.planIds.includes(I.value)&&(I.style.display!=="none"&&(I.style.display="none"),I.disabled||(I.disabled=!0),T++);const y=Array.from(m.options).filter(I=>!a.planIds.includes(I.value)),w=y.some(I=>I.value===m.value);y.length>0&&!w&&!l&&(l=!0,m.value=y[0].value,m.dispatchEvent(new Event("change",{bubbles:!0})),e(`[SUB-GLOBAL-HIDE] Preselected first visible option=${y[0].value}`))}T>0&&e(`[SUB-GLOBAL-HIDE] Hidden ${T} B-side plan buttons`)}const p={childList:!0,subtree:!0,characterData:!0};let b=null;function E(C){b?.disconnect(),b=new MutationObserver(()=>u()),b.observe(C,p)}function S(){const C=document.querySelector(r);if(!C?.shadowRoot)return!1;u(),new MutationObserver(()=>{u();const m=C.shadowRoot.querySelector(o);m?.shadowRoot&&E(m.shadowRoot)}).observe(C.shadowRoot,p);const T=C.shadowRoot.querySelector(o);return T?.shadowRoot&&E(T.shadowRoot),!0}if(!S()){e("[SUB-GLOBAL-HIDE] Widget not in DOM yet — waiting via MutationObserver");const C=new MutationObserver(()=>{S()&&C.disconnect()});C.observe(document.body??document.documentElement,{childList:!0,subtree:!0})}}const ue="Limited preview",Ke="Add-to-cart and checkout prices won't reflect this test until it launches — test selling plans are not created in your subscription app until after a test is launched.",Je=5e3;function Ye(){const a=document.createElement("div");a.id="shoplift-preview-subscription-warning";const e=document.createElement("span");e.id="shoplift-preview-subscription-warning__icon",e.setAttribute("aria-hidden","true"),e.textContent="!";const t=document.createElement("span");t.id="shoplift-preview-subscription-warning__label",t.textContent=ue;const i=document.createElement("div");i.id="shoplift-preview-subscription-warning__tooltip",i.setAttribute("role","tooltip"),i.textContent=Ke,a.appendChild(e),a.appendChild(t),a.appendChild(i),a.setAttribute("tabindex","0"),a.setAttribute("aria-describedby",i.id),a.setAttribute("aria-label",ue);let s=null;function r(){s!==null&&(clearTimeout(s),s=null)}function o(){i.classList.add("shoplift-preview-subscription-warning__tooltip--visible")}function n(){i.classList.remove("shoplift-preview-subscription-warning__tooltip--visible")}function l(){o(),r(),s=setTimeout(()=>{n(),s=null},Je)}function c(){r(),o()}function d(){s===null&&n()}a.addEventListener("mouseenter",c),a.addEventListener("mouseleave",d),a.addEventListener("focus",c),a.addEventListener("blur",d);function u(p){try{const b=p.target;if(!(b instanceof Element))return;(b.closest('form[action*="/cart/add"] button[type="submit"], form[action*="/cart/add"] input[type="submit"]')!==null||b.closest('[name="add"], button[name="add"], [data-add-to-cart], button[data-add-to-cart]')!==null)&&l()}catch{}}document.addEventListener("click",u,!0);function h(){r(),document.removeEventListener("click",u,!0),a.removeEventListener("mouseenter",c),a.removeEventListener("mouseleave",d),a.removeEventListener("focus",c),a.removeEventListener("blur",d),a.remove()}return{root:a,tooltip:i,cleanup:h}}let he=!1;class Ze{DATA_SL_ATTRIBUTE_P="data-sl-attribute-p";DATA_SL_TEST_ID="data-sl-test-id";VIEWPORT_TRACK_THRESHOLD=.5;temporarySessionKey="Shoplift_Session";essentialSessionKey="Shoplift_Essential";analyticsSessionKey="Shoplift_Analytics";priceSelectorsSessionKey="Shoplift_PriceSelectors_v2";shop;host;eventHost;disableReferrerOverride;legacySessionKey;cssHideClass;testConfigs;inactiveTestConfigs;hiddenSubscriptionPlans;testsFilteredByAudience;sendPageView;shopliftDebug;gaConfig;telemetryEnabled;getCountryTimeout;geoViaShopify;resolvedRegion=null;state;subscriptionPreviewWarningCleanup=null;shopifyAnalyticsId;cookie=document.cookie;isSyncing=!1;isSyncingGA=!1;fetch;localStorageSet;localStorageGet;sessionStorageSet=window.sessionStorage.setItem.bind(window.sessionStorage);sessionStorageGet=window.sessionStorage.getItem.bind(window.sessionStorage);
42urlParams=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=>
42S.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()}
42async initPreview(){const e=this.urlParams.get("previewConfig");if(e){this.state.temporary.previewConfig=void 0,this.log("Setting up the preview"),this.log("Found preview config, writing to temporary state");const t=await Oe(e);if(this.state.temporary.previewConfig=t,this.state.temporary.previewConfig.testTypeCategory===M.Price){this.hidePage(!0);const s=this.state.temporary.previewConfig;let r=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/${s.isDraft||!1}`;s.shopifyProductId&&(r+=`?productId=${s.shopifyProductId}`);const o=await this.makeJsonRequest({method:"get",url:r}).catch(n=>(this.log("Error getting domSelectors",n),null));if(s.variants.forEach(n=>n.domSelectors=o[n.id]?.domSelectors),s.isDraft){const n=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/subscription-preview`,l=await this.makeJsonRequest({method:"get",url:n}).catch(c=>(this.log("No subscription preview data for draft (test may not have a subscription widget)",c),null));l?.subscriptionData&&s.variants.forEach(c=>{c.subscriptionData=l.subscriptionData,c.priceData=l.priceData})}}this.persistTemporaryState();const i=new URL(window.location.toString());i.searchParams.delete("previewConfig"),this.queueRedirect(i)}else if(this.state.temporary.previewConfig){this.showPage();const t=this.state.temporary.previewConfig;if(t.testTypeCategory===M.Template&&this.handleTemplatePreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.UrlRedirect&&this.handleUrlPreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.Script&&this.handleScriptPreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.Price){const i=await this.handlePricePreview(t);t.isDraft?await this.handleSubscriptionPricePreview(t):await this.handleSubscriptionLivePreview(t),i&&this.initPreviewControls(t)}}}initPreviewControls(e){document.addEventListener("DOMContentLoaded",()=>{const t=e.variants.find(b=>b.id===e.currentVariant),i=t?.label||"a",s=e.variants,r=document.createElement("div");r.id="shoplift-preview-control";const o=document.createElement("div"),n=document.createElement("img");n.src=Ve,n.height=24,n.width=14,o.style.padding="0 16px",o.style.lineHeight="100%",o.appendChild(n),r.appendChild(o);const l=document.createElement("div");l.id="shoplift-preview-variant-selector";const c=document.createElement("button");c.id="shoplift-preview-variant-menu-trigger";const d=document.createElement("div");d.className="menu-variant-label",d.style.backgroundColor=this.getVariantColor(i).bg,d.style.color=this.getVariantColor(i).text,d.innerText=i.toUpperCase(),c.appendChild(d);const u=document.createElement("span");if(u.id="shoplift-preview-variant-title",u.innerText=t?this.getDefaultVariantTitle(t):"Untitled variant "+i.toUpperCase(),c.appendChild(u),s.length>1){const b=document.createElement("img");b.src=De,b.width=12,b.height=12,b.style.height="12px",b.style.width="12px",c.appendChild(b);const E=document.createElement("div");E.className="preview-variant-menu";for(const S of e.variants.filter(C=>C.id!==e.currentVariant)){const C=document.createElement("div");C.className="preview-variant-menu--item";const _=document.createElement("div");_.className="menu-variant-label",_.style.backgroundColor=this.getVariantColor(S.label).bg,_.style.color=this.getVariantColor(S.label).text,_.style.flexShrink="0",_.innerText=S.label.toUpperCase(),C.appendChild(_);const T=document.createElement("span");T.innerText=this.getDefaultVariantTitle(S),C.appendChild(T),C.addEventListener("click",()=>{this.pickVariant(S.id)}),E.appendChild(C)}l.appendChild(E),c.addEventListener("click",()=>{E.className!=="preview-variant-menu preview-variant-menu__visible"?E.classList.add("preview-variant-menu__visible"):E.classList.remove("preview-variant-menu__visible")}),document.addEventListener("click",S=>{S.target instanceof Element&&!c.contains(S.target)&&E.className==="preview-variant-menu preview-variant-menu__visible"&&E.classList.remove("preview-variant-menu__visible")})}else c.style.pointerEvents="none",d.style.margin="0";if(l.appendChild(c),r.appendChild(l),e.hasSubscription){this.subscriptionPreviewWarningCleanup?.();const b=Ye();r.appendChild(b.root),this.subscriptionPreviewWarningCleanup=b.cleanup}const h=document.createElement("div"),p=document.createElement("button");p.id="shoplift-exit-preview-button",p.innerText="Exit",h.appendChild(p),p.addEventListener("click",()=>{this.exitPreview()}),r.appendChild(h),document.body.appendChild(r),requestAnimationFrame(()=>{r.classList.add("visible")})}),this.ensureCartAttributesForExistingPriceTests(!0)}pickVariant(e){if(this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig,i=new URL(window.location.toString());if(t.testTypeCategory===M.UrlRedirect){const s=t.variants.find(r=>r.id===t.currentVariant)?.redirectUrl;if(i.pathname===s){const r=t.variants.find(o=>o.id===e)?.redirectUrl;r&&(i.pathname=r)}}if(t.testTypeCategory===M.Template){const s=t.variants.find(r=>r.id===t.currentVariant)?.pathName;if(s&&i.pathname===s){const r=t.variants.find(o=>o.id===e)?.pathName;r&&r!==s&&(i.pathname=r)}}t.currentVariant=e,this.persistTemporaryState(),this.queueRedirect(i)}}exitPreview(){const e=new URL(window.location.toString());if(this.state.temporary.previewConfig?.testTypeCategory===M.Template&&e.searchParams.delete("view"),this.state.temporary.previewConfig?.testTypeCategory===M.Script&&e.searchParams.delete("slVariant"),this.state.temporary.previewConfig?.testTypeCategory===M.UrlRedirect){const i=this.state.temporary.previewConfig.variants.filter(r=>!r.isControl&&r.redirectUrl!==null).map(r=>r.redirectUrl),s=this.state.temporary.previewConfig.variants.find(r=>r.label==="a")?.redirectUrl;i.includes(e.pathname)&&s&&(e.pathname=s)}this.state.temporary.isMerchant=!1,e.searchParams.delete("isShopliftMerchant"),this.state.temporary.previewConfig=void 0,this.persistTemporaryState(),this.subscriptionPreviewWarningCleanup?.(),this.subscriptionPreviewWarningCleanup=null,this.hidePage(),this.queueRedirect(e)}handleTemplatePreview(e){const t=e.currentVariant,i=e.variants.find(l=>l.id===t);if(!i)return!1;const s=e.variants.find(l=>l.isControl);if(!s)return!1;this.log("Setting up template preview for type",s.type);
42const 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
42ategoryFromExistingTests(),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")}
42),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
42ing 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;
42if(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=>
42i.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()=>
42{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}`};
42this.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
42ndToGa??!1,s.testType=n?.testType,s.assignedTo=n?.assignedTo,s.testTitle=n?.testTitle,this.state.essential.visitorTests.splice(r,1,s)}}this.log("updateLocalVisitor - FINAL local tests: %o",this.state.essential.visitorTests.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isSaved:s.isSaved,isInvalid:s.isInvalid}))),this.state.analytics.visitor.storedAt=new Date}async getVisitor(e){try{return await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/by-key/${this.shop}/${e}`})}catch{return null}}async sendEvents(e){await this.makeRequest({method:"post",url:`${this.eventHost}/api/v0/events`,data:JSON.stringify(e)})}sendDiagnosticTelemetry(e,t,i){if(!this.telemetryEnabled||!navigator.sendBeacon)return;const s=this.state.essential.consentApproved,r=JSON.stringify({shop:this.shop,testId:t,checkpoint:e,device:this.device,...s?{visitorId:this.shopifyAnalyticsId??"unknown"}:{},clientTimestamp:Date.now(),consentApproved:s,hasConsentInteraction:this.state.essential.hasConsentInteraction,...i});navigator.sendBeacon(`${this.eventHost}/api/v0/telemetry`,new Blob([r],{type:"text/plain"}))}getUTMValue(e){const i=decodeURIComponent(window.location.search.substring(1)).split("&");for(let s=0;s<i.length;s++){const r=i[s].split("=");if(r[0]===e)return r[1]||null}return null}hidePage(e){this.log("Hiding page"),this.cssHideClass&&!window.document.documentElement.classList.contains(this.cssHideClass)&&(window.document.documentElement.classList.add(this.cssHideClass),e||setTimeout(this.removeAsyncHide(this.cssHideClass),2e3))}showPage(){this.cssHideClass&&this.removeAsyncHide(this.cssHideClass)()}getDeviceType(){function e(){let i=!1;return(function(s){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(s.substr(0,4)))&&(i=!0)})(navigator.userAgent||navigator.vendor),i}function t(){let i=!1;return(function(s){(/android|ipad|playbook|silk/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|
42sy(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")}
42,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",
42y):(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}
42const 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
42CookieState(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
42andex\.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
42pera\.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)}
42,{"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
42akao|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
42andex\.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
42: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"}
42,false,false,1000,[],[],null,false),await window.shopliftInstance.init())})();async function Qe(a,e,t,i){const s=Be({log:i});if(t)return i("[SUB-PREVIEW] A side — no overlay applied; widget renders naturally"),s;const r=a.widget.widgetType,o=e?j(e):null;let n=W(e),l=J(a,n),c=l.discountMap,d=l.maxDiscount;function u(){const f=W(e);f!==n&&(n=f,l=J(a,n),c=l.discountMap,d=l.maxDiscount,i(`[SUB-PREVIEW] scope refreshed currentProductId=${n??"n/a"}, maxDiscount=${d}`))}i(`[SUB-PREVIEW] side=B, currentProductId=${n??"n/a"}, maxDiscount=${d}`);function h(f){if(!e||!o)return null;const v=Z(o),g=v?o.get(v):void 0;return g?{formattedVariantPrice:G(g.priceInCents,e),formattedDiscounted:G(g.priceInCents*(1-f/100),e)}:null}function p(f){const v=Y(a,f);if(!v)return d;const g=D(a,"subscriptionInput"),P=g.length?g[0].selector:'input[name="rc_plan"]',A=v.querySelector(`${P}:checked`);if(A){const k=c[A.value];if(k!==void 0)return k}return d}function b(f){const v=D(a,"subscriptionDiscount");for(const g of v)if(g.selector.includes("badge")||g.selector.includes("__badge")){const P=f.querySelector(g.selector);P?.textContent&&!P.textContent.includes(`${d}%`)&&$(P,A=>N(A,d))}}function E(f,v){const g=h(v);if(!g)return;const P=D(a,"subscriptionCompareAt");for(const A of P){const k=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);k?.textContent&&!k.textContent.includes(g.formattedVariantPrice)&&$(k,x=>/\d/.test(x)?g.formattedVariantPrice:x)}}function S(f,v){const g=h(v);if(!g)return;const P=D(a,"subscriptionPrice");for(const A of P){const k=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);k?.textContent&&!k.textContent.includes(g.formattedDiscounted)&&$(k,x=>/\d/.test(x)?g.formattedDiscounted:x)}}function C(f){const v=D(a,"subscriptionInput"),g=v.length?v[0].selector:'input[name="rc_plan"]',P=D(a,"subscriptionPlanDiscount"),A=P.length?P[0].selector:".rc-plans-button__discount";for(const k of Array.from(f.querySelectorAll("label"))){const x=k.querySelector(g),R=k.querySelector(A);if(x&&R?.textContent){const O=c[x.value];if(O!==void 0){const V=R.textContent.match(/[\d.]+%/)?.[0];V&&V!==`${O}%`&&$(R,L=>N(L,O))}}}}function _(f){const v=f.querySelector("select");if(v)for(const g of Array.from(v.options)){const P=c[g.value];if(P!==void 0&&g.textContent){const A=g.textContent.match(/[\d.]+%/)?.[0];A&&A!==`${P}%`&&(g.textContent=N(g.textContent,P))}}}function T(f){const v=D(a,"onetimePrice");if(!v.length||!e||!o)return;const g=Z(o),P=g?o.get(g):void 0;if(!P)return;const A=G(P.priceInCents,e),k=D(a,"onetimeContainer"),x=k.length?k[0].selector:'[part~="rc-purchase-option__onetime"]',R=f.querySelector(x);if(R)for(const O of v){const V=R.querySelector(`[part~="${O.selector}"]`);V?.textContent&&!V.textContent.includes(A)&&$(V,L=>/\d/.test(L)?A:L)}}function m(f,v){const P=D(a,"subscriptionDiscount").filter(A=>A.selector.includes("benefit")||A.selector==="rc-benefits");for(const A of P){const k=f.querySelector(A.selector);if(k?.shadowRoot){for(const x of Array.from(k.shadowRoot.querySelectorAll("li")))if(x.textContent?.includes("Save")){const R=x.textContent.match(/[\d.]+%/)?.[0];R&&R!==`${v}%`&&$(x,O=>N(O,v))}}}}let y=!1;function w(){if(!y){y=!0;try{u();const f=B(a);if(!f)return;const v=p(f);b(f),E(f,v),S(f,v),T(f);const g=Y(a,f);g&&(r==="buttons"||r==="radio"?C(g):_(g)),m(f,v)}finally{y=!1}}}const I=pe({data:a,runUpdates:w});return function(){I(),s()}}const Xe=Object.freeze(Object.defineProperty({__proto__:null,subscriptionPreviewRender:Qe},Symbol.toStringTag,{value:"Module"}))})(); })("/", { suffix: "", type: "blog" }, "main", 122340769888, false)</script>
42
43  <!-- End of Shoplift scripts -->
44
45  <meta name="google-site-verification" content="ttZca2KoetOEPToVJiLZw0nT_jA3cZ4ixQY5RiTjmKY" />
46
47  <!-- Basic page needs ================================================== -->
48  <meta charset="utf-8">
49  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
50  <link rel="shortcut icon" href="//twoblindbrothers.com/cdn/shop/t/278/assets/favicon.png?v=129341062381478472471702066482" type="image/png" />
51  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
52
53  <!-- Title and description ================================================== -->
54  <title>
55    The Blind Spot &ndash; Two Blind Brothers
56  </title>
57
58  
59
60  <!-- Helpers ================================================== --><!-- /snippets/social-meta-tags.liquid -->
61
62
63  <meta property="og:type" content="website">
64  <meta property="og:title" content="The Blind Spot">
65  
66
67<meta property="og:url" content="https://twoblindbrothers.com/blogs/the-blind-spot">
68<meta property="og:site_name" content="Two Blind Brothers">
69
70
71
72  <meta name="twitter:site" content="@twoblindbros/">
73
74
75  <meta name="twitter:card" content="summary">
76
77
78
79  <link rel="canonical" href="https://twoblindbrothers.com/blogs/the-blind-spot">
80  <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
81  <meta name="theme-color" content="#0c0c0b">
82
83  
84
85  
86  
87  
88  
89
90  
91
92  <style data-shopify>
93
94    
95      .blob {
96        background-color: white!important;
97      }
98      .utility-links-container #utility-links a:hover {
99        color: white!important;
100      }
101      .utility-links-container #utility-links a:hover svg path {
102        fill: white!important;
103      }
104      #utility-links .hamburger-wrapper.large--hide, #utility-links .hamburger-wrapper.large--hide .large--hide {
105        display: block!important;
106      }
107      #utility-links .hamburger .hamburger-inner, #utility-links .hamburger .hamburger-inner:before, #utility-links .hamburger .hamburger-inner:after {
108        background-color: white!important;
109      }
110      #utility-links .hamburger:hover .hamburger-inner, #utility-links .hamburger:hover .hamburger-inner:before, #utility-links .hamburger:hover .hamburger-inner:after {
111        background-color: white!important;
112      }
113    
114:root {
115      --sb-color-bg: #ffffff;
116      --sb-color-dark: rgb(243.525, 233.325, 257.55);
117      --sb-color-darker: rgb(257.55, 209.1, 127.5);
118      --sb-btn-bg-color: #ffffff;
119      --sb-btn-text-color: black;
120      --sb-featured-btn-bg-color: #ffffff;
121      --sb-featured-btn-text-color: black;
122      --sb-default-box-bg: #ffffff;
123      --sb-default-box-dark: rgb(257.55, 209.1, 127.5);
124      --sb-featured-box-bg: #ffffff;
125      --sb-featured-box-dark: rgb(257.55, 209.1, 127.5);
126    }
127
128    body, p {
129      font-family: 'ABC Diatype' !important;
130      letter-spacing: normal !important;
131    }
132  </style>
133<style>
134  @font-face {
135    font-family: 'ABC Diatype';
136    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Bold.eot?v=142696);
137    src: local('ABC Diatype Bold'), local('ABCDiatype-Bold'),
138    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Bold.woff2?v=61621994078008140441702066482) format('woff2'),
139    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Bold.woff?v=118774794543504185321702066484) format('woff');
140    font-weight: 700;
141    font-style: normal;
142    font-display: swap;
143  }
144  @font-face {
145    font-family: 'ABC Diatype';
146    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-BoldItalic.eot?v=142696);
147    src: local('ABC Diatype BoldItalic'), local('ABCDiatype-BoldItalic'),
148    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-BoldItalic.woff2?v=3446157521833915091702066489) format('woff2'),
149    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-BoldItalic.woff?v=126519971189529389871702066482) format('woff');
150    font-weight: 700;
151    font-style: italic;
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-Medium.eot?v=142696);
158    src: local('ABC Diatype Medium'), local('ABCDiatype-Medium'),
159    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Medium.woff2?v=105160479550526472651702066490) format('woff2'),
160    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Medium.woff?v=14588951915142266711702066479) format('woff');
161    font-weight: 500;
162    font-style: normal;
163    font-display: swap;
164  }
165
166  @font-face {
167    font-family: 'ABC Diatype';
168    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-MediumItalic.eot?v=142696);
169    src: local('ABC Diatype MediumItalic'), local('ABCDiatype-MediumItalic'),
170    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-MediumItalic.woff2?v=92103211414022689741702066485) format('woff2'),
171    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-MediumItalic.woff?v=116835433626418491251702066484) format('woff');
172    font-weight: 500;
173    font-style: italic;
174    font-display: swap;
175  }
176
177  @font-face {
178    font-family: 'ABC Diatype';
179    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Regular.eot?v=142696);
180    src: local('ABC Diatype Regular'), local('ABCDiatype-Regular'),
181    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Regular.woff2?v=23638199471490003521702066479) format('woff2'),
182    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Regular.woff?v=34498873463096933311702066485) format('woff');
183    font-weight: 400;
184    font-style: normal;
185    font-display: swap;
186  }
187
188  @font-face {
189    font-family: 'ABC Diatype';
190    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-RegularItalic.eot?v=142696);
191    src: local('ABC Diatype RegularItalic'), local('ABCDiatype-RegularItalic'),
192    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-RegularItalic.woff2?v=119111936877245938531702066484) format('woff2'),
193    url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-RegularItalic.woff?v=16655217921606239891702066484) format('woff');
194    font-weight: 400;
195    font-style: italic;
196    font-display: swap;
197  }
198
199  @font-face {
200    font-family: 'helvetica_neuebold';
201    src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/helveticaneuebold-webfont.woff2?v=4078072587728333361713202500) format('woff2'),
202         url(//twoblindbrothers.com/cdn/shop/t/278/assets/helveticaneuebold-webfont.woff?v=153274710969038952061713202499) format('woff');
203    font-weight: normal;
204    font-style: normal;
205  }
206
207  .abc-font {
208    font-family: 'ABC Diatype';
209  }
210
211  .font-helvetica-bold {
212    font-family: 'helvetica_neuebold';
213    font-weight: 700;
214  }
215</style>
216<!-- CSS ================================================== -->
217  <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/timber-2.scss.css?v=63522944912174959471773663809" rel="stylesheet" type="text/css" media="all" />
218
219  
220
221  
222
223  <link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
224
225  <!-- Header hook for plugins ================================================== -->
225<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
225<meta name="google-site-verification" content="6-QxAWRb8ofpk6AybdtJP7uZBN7HmAKI4QqszudEjsM">
226<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/13308707/digital_wallets/dialog">
227<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">
228<link rel="alternate" type="application/atom+xml" title="Feed" href="/blogs/the-blind-spot.atom" />
229<link rel="next" href="/blogs/the-blind-spot?page=2">
230<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=8192096"></script>
230
231<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
232<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 232
232
233<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 233
233
234<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 234
234
235<script>var Shopify = Shopify || {};
236Shopify.shop = "two-blind-brothers.myshopify.com";
237Shopify.locale = "en";
238Shopify.currency = {"active":"USD","rate":"1.0"};
239Shopify.country = "US";
240Shopify.theme = {"name":"Live theme","id":122340769888,"schema_name":null,"schema_version":null,"theme_store_id":null,"role":"main"};
241Shopify.theme.handle = "null";
242Shopify.theme.style = {"id":null,"handle":null};
243Shopify.cdnHost = "twoblindbrothers.com/cdn";
244Shopify.routes = Shopify.routes || {};
245Shopify.routes.root = "/";
246Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js";
247Shopify.SignInWithShop = Shopify.SignInWithShop || {};
248Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {};
249Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 249
249
250<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 250
250
251<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 251
251
252<script>
253  window.ShopifyPay = window.ShopifyPay || {};
254  window.ShopifyPay.apiHost = "shop.app\/pay";
255  window.ShopifyPay.redirectState = null;
256</script>
vendor: 1 bytes, line 256
256
257<script>
258  window.Shopify = window.Shopify || {};
259  window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {};
260  window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 };
261  window.Shopify.SignInWithShop.eligible = true;
262</script>
vendor: 1 bytes, line 262
262
263<script id="shop-js-analytics" type="application/json">{"pageType":"blog"}</script>
vendor: 1 bytes, line 263
263
264<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 264
264
265<script type="module">
266  await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js");
267
268  window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true});
269
270</script>
vendor: 1 bytes, line 270
270
271<script>
272  window.Shopify = window.Shopify || {};
273  if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {};
274  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"]};
275</script>
vendor: 1 bytes, line 275
275
276<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>
276
277
278<script id="__st">var __st={"a":13308707,"offset":-14400,"reqid":"37ef8ac3-216f-4425-99ea-62bfc70f7fc5-1790277803","pageurl":"twoblindbrothers.com\/blogs\/the-blind-spot","s":"blogs-104435079","u":"512f5c61e37f","p":"blog","rtyp":"blog","rid":104435079};</script>
vendor: 1 bytes, line 278
278
279<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 279
279
280<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 280
280
281<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 281
281
282<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>
282<script crossorigin="anonymous" defer="defer" src="//twoblindbrothers.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 282
282
283<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 283
283
284<script>
285  window.Shopify = window.Shopify || {};
286  window.Shopify.MCP = window.Shopify.MCP || {};
287  window.Shopify.MCP.enabled = true;
288  window.Shopify.MCP.shop = "two-blind-brothers.myshopify.com";
289  window.Shopify.MCP.mcpEndpoint = "https:\/\/twoblindbrothers.com\/api\/mcp";
290  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"]}}];
291</script>
vendor: 1 bytes, line 291
291
292<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=");})();
293</script>
vendor: 1 bytes, line 293
293
294<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)}};
295</script>
vendor: 1 bytes, line 295
295
296<script data-source-attribution="shopify.dynamic_checkout.buyer_consent">
297  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);
298</script>
vendor: 1 bytes, line 298
298
299<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})}}));
300</script>
300
301<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">
302<style id="shopify-accelerated-checkout-cart">
303        #shopify-buyer-consent {
304  margin-top: 1em;
305  display: inline-block;
306  width: 100%;
307}
308
309#shopify-buyer-consent.hidden {
310  display: none;
311}
312
313#shopify-subscription-policy-button {
314  background: none;
315  border: none;
316  padding: 0;
317  text-decoration: underline;
318  font-size: inherit;
319  cursor: pointer;
320}
321
322#shopify-subscription-policy-button::before {
323  box-shadow: none;
324}
325
326      </style>
327
328<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
vendor: 1 bytes, line 328
328
329<script>
330  (function() {function createScript(url) {
331        var s = document.createElement('script');
332        s.type = 'text/javascript';
333        s.async = true;
334        s.src = url;
335        var x = document.getElementsByTagName('script')[0];
336        x.parentNode.insertBefore(s, x);
337      };
338
339      var urls = [].concat(window.shopifyAppUrls || []);
340
341      // We want to load rebuy immediately
342      var rebuyUrl = window.shopifyAppUrls.find(url => url.includes('cdn.rebuyengine.com'));
343
344      if ( rebuyUrl ) {
345        createScript(rebuyUrl);
346      }
347
348      urls = urls.filter(function(url) {
349        return !url.includes('cdn.rebuyengine.com');
350      });
351
352      function delayLoad(event) {
353        if (event && !event.isTrusted) {
354          return;
355        }
356        setTimeout(function() {
357          for (var i = 0; i < urls.length; i++) {
358            createScript(urls[i]);
359          };},0);
360        events.forEach(function(event) {
361          window.removeEventListener(event, delayLoad);
362        });
363      };
364      var events = ['keydown', 'mousemove', 'touchmove', 'touchstart', 'touchend', 'wheel'];
365      events.forEach(function(event) {
366        window.addEventListener(event, delayLoad);
367      });}());
368</script>
vendor: 1 bytes, line 368
368
369<script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
369
370
371  
371<script src="https://use.typekit.net/ugw7ksw.js"></script>
371
372  
372<script> try{Typekit.load({  async: true }); }catch(e){} </script>
372
373
374  
375
376  <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/jquery.fancybox.min.css?v=32046022409454516561702066480" rel="stylesheet" type="text/css" media="all" />
377  
377<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/jquery.fancybox.min.js?v=102984942719613846721702066489"></script>
377
378
379  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.css" />
380  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick-theme.css" />
381  
381<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js"></script>
381
382
383  <!-- Google tag (gtag.js) -->
vendor: 66 bytes, lines 383-384
383
384  <script async src="https://www.googletagmanager.com/gtag/js?id=
384AW-881678315
vendor: 14 bytes, lines 384-385
384"></script>
385  
385<script>
386    
vendor: 140 bytes, lines 386-390
386window.dataLayer = window.dataLayer || [];
387    function gtag(){dataLayer.push(arguments);}
388    gtag('js', new Date());
389
390    gtag('config', '
390AW-881678315
vendor: 6 bytes, lines 390-391
390');
391  
391</script>
391
392
393  <!-- Start WKND tag. Deploy at the beginning of document head. -->
394  
394<script>
395    (function(d) {
396      var e = d.createElement('script');
397      e.src = d.location.protocol + '//tag.wknd.ai/5456/i.js';
398      e.async = true;
399      d.getElementsByTagName("head")[0].appendChild(e);
400    }(document));
401  </script>
401
402  <!-- End WKND tag -->
403
404  
404<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/jquery.infinitescroll.2.1.0.min.js?v=154868730476094579131702066480"></script>
404
405
406  
406<script src="https://cdnjs.cloudflare.com/ajax/libs/lottie-web/5.11.0/lottie.min.js"></script>
406
407
408  <!-- Vite - Tailwind CSS -->
409
410
411  <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/global-navigation-11299834.css" rel="stylesheet" type="text/css" media="all" />
412
413
414
415
416  <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/shop-blind-d8f78d3e.css" rel="stylesheet" type="text/css" media="all" />
417
418
419
420
421  
421<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/reserve-3cb4ad76.js" type="module" crossorigin="anonymous"></script>
421
422  <link rel="modulepreload" href="//twoblindbrothers.com/cdn/shop/t/278/assets/_commonjsHelpers-725317a4.js" crossorigin="anonymous">
423
424<script>
425    flu = window.flu || {};
426    flu.chunks = {
427      nouislider: "//twoblindbrothers.com/cdn/shop/t/278/assets/nouislider-chunk.js?v=119160367387469102641702066480"
428    };
429  </script>
429
430  
430<script>
431  document.documentElement.className = document.documentElement.className.replace('no-js', '');
432  if (window.matchMedia(`(prefers-reduced-motion: reduce)`) === true || window.matchMedia(`(prefers-reduced-motion: reduce)`).matches === true) {
433    document.documentElement.classList.add('prefers-reduced-motion');
434  } else {
435    document.documentElement.classList.add('do-anim');
436  }
437
438  window.theme = {
439    version: 'v2.2.2',
440    themeName: 'Stiletto',
441    moneyFormat: "${{amount_no_decimals}}",
442    strings: {
443      name: "Two Blind Brothers",
444      accessibility: {
445        play_video: "Play",
446        pause_video: "Pause",
447        range_lower: "Lower",
448        range_upper: "Upper"
449      },
450      product: {
451        no_shipping_rates: "Translation missing: en.products.product.no_rates",
452        country_placeholder: "Translation missing: en.products.product.country_placeholder",
453        review: "Translation missing: en.products.product.write_a_review"
454      },
455      products: {
456        product: {
457          unavailable: "Unavailable",
458          unitPrice: "Translation missing: en.products.product.unit_price_label",
459          unitPriceSeparator: "per",
460          sku: "Translation missing: en.products.product.sku"
461        }
462      },
463      cart: {
464        editCartNote: "Translation missing: en.cart.general.order_note_button_edit",
465        addCartNote: "Translation missing: en.cart.general.order_note_button_add",
466        quantityError: "Translation missing: en.cart.general.error"
467      },
468      pagination: {
469        viewing: "You’re viewing {{ of }} of {{ total }}",
470        products: "products",
471        results: "results"
472      }
473    },
474    routes: {
475      root: "/",
476      cart: {
477        base: "/cart",
478        add: "/cart/add",
479        change: "/cart/change",
480        update: "/cart/update",
481        clear: "/cart/clear",
482        // Manual routes until Shopify adds support
483        shipping: "/cart/shipping_rates",
484      },
485      // Manual routes until Shopify adds support
486      products: "/products",
487      productRecommendations: "/recommendations/products",
488      predictive_search_url: '/search/suggest',
489    },
490    icons: {
491      chevron: "\n\n\u003csvg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n      \u003cpath d=\"M1.875 7.438 12 17.563 22.125 7.438\" stroke=\"currentColor\" stroke-width=\"2\"\/\u003e\n    \u003c\/svg\u003e\n",
492      close: "\n\n\u003csvg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n      \u003cpath 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\"\/\u003e\n    \u003c\/svg\u003e\n",
493      zoom: "\n\n\u003csvg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n      \u003cpath d=\"M10.3,19.71c5.21,0,9.44-4.23,9.44-9.44S15.51,.83,10.3,.83,.86,5.05,.86,10.27s4.23,9.44,9.44,9.44Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"1.63\"\/\u003e\n      \u003cpath d=\"M5.05,10.27H15.54\" fill=\"none\" stroke=\"currentColor\" stroke-miterlimit=\"10\" stroke-width=\"1.63\"\/\u003e\n      \u003cpath class=\"cross-up\" d=\"M10.3,5.02V15.51\" fill=\"none\" stroke=\"currentColor\" stroke-miterlimit=\"10\" stroke-width=\"1.63\"\/\u003e\n      \u003cpath d=\"M16.92,16.9l6.49,6.49\" fill=\"none\" stroke=\"currentColor\" stroke-miterlimit=\"10\" stroke-width=\"1.63\"\/\u003e\n    \u003c\/svg\u003e\n\n  \n\n"
494    },
495    coreData: {
496      n: "Stiletto",
497      v: "v2.2.2",
498    }
499  }
500
501  
502</script>
502
503
504
505  
505<script type="module" src="//twoblindbrothers.com/cdn/shop/t/278/assets/theme.js?v=128691185150287049241774449012"></script>
505
506  <!-- Begin: Northbeam pixel -->
507  
507<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>
507
508  <!-- End: Northbeam pixel -->
509
510  
511<!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/gdpr_cookie_consent/4fbe573f-a377-4fea-9801-3ee0858cae41 -->
512<link rel="preconnect" href="https://app.consentmo.com" crossorigin data-csm-preconnect="app">
513<link rel="dns-prefetch" href="https://workers.consentmo.com" data-csm-preconnect="workers">
514<link rel="dns-prefetch" href="https://storage.consentmo.com" data-csm-preconnect="storage">
515<link rel="preconnect" href="https://cdn.consentmo.com" crossorigin data-csm-preconnect="cdn"><link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/layout-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="banner">
516  <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/layout-cookie-dialog.consentmo.js" crossorigin data-csm-layout-prefetch="dialog">
517  <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/layout-cookie-box.consentmo.js" crossorigin data-csm-layout-prefetch="box">
518  <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/layout-cookie-smart-banner.consentmo.js" crossorigin data-csm-layout-prefetch="smart">
519  <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/layout-mobile-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="mobile">
519<script>
520(function () {
521  try {
522    document.documentElement.classList.add('csm-cookie-embed');
523  } catch (e) {}
524})();
525</script>
525<script data-consentmo-data-src-bootstrap>
526(function () {
527  'use strict';
528  if (window.__consentmoDataSrcBootstrapInit) return;
529  window.__consentmoDataSrcBootstrapInit = true;
530
531  var DATA_SRC_SELECTOR = [
532    'script[data-src*="consentmo_cookie_consent"]',
533    'script[data-src*="gdpr_cookie_consent.min"]',
534    'script[data-src*="gdrp_cookie_consent_unlimited"]'
535  ].join(',');
536
537  function activateConsentmoDataSrcScripts() {
538    if (!window.Shopify || !window.Shopify.shop) return;
539    document.querySelectorAll(DATA_SRC_SELECTOR).forEach(function (scriptEl) {
540      // getAttribute: src="" must not count as "already has src" (.src === page URL).
541      if (scriptEl.getAttribute('src')) return;
542      var url = scriptEl.getAttribute('data-src');
543      if (!url) return;
544      if (scriptEl.getAttribute('type') === 'text/plain') {
545        scriptEl.removeAttribute('type');
546      }
547      scriptEl.src = url;
548    });
549  }
550  function scheduleActivation() {
551    activateConsentmoDataSrcScripts();
552    // Retry on next task so other DCL handlers (lazy-loaders) can finish setting Shopify.shop / data-src first.
553    setTimeout(activateConsentmoDataSrcScripts, 0);
554  }
555  if (document.readyState === 'loading') {
556    document.addEventListener('DOMContentLoaded', scheduleActivation, { once: true });
557  } else {
558    scheduleActivation();
559  }
560})();
561</script>
561
562
563
564<!-- END app block --><!-- BEGIN app block: shopify://apps/okendo/blocks/theme-settings/bb689e69-ea70-4661-8fb7-ad24a2e23c29 --><!-- BEGIN app snippet: header-metafields -->
565
566
567
568
569
570
571
572
573
574
575
576
577    
578        <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:""}
578.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
578or: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}
578to{opacity:1}}
579.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:")"}
580.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>
581    
582    
582<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,"
582name":"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>
582
583            <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>
584            <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>
585            <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>
585<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>
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599<!-- END app snippet -->
600
601    <!-- BEGIN app snippet: okendo-reviews-json-ld -->
602<!-- END app snippet -->
603
604<!-- BEGIN app snippet: widget-plus-initialisation-script -->
605
606
607
608
609    
609<script async id="okendo-reviews-script" src="https://cdn-static.okendo.io/reviews-widget-plus/js/okendo-reviews.js"></script>
609
610
611<!-- END app snippet -->
612
613
614<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 -->
615
616
617
618
619
620
621
622
623
624
625
626
627  
627<script async src="https://static.klaviyo.com/onsite/js/HMZ6Wk/klaviyo.js?company_id=HMZ6Wk"></script>
627
628  
628<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>
628
629
630  
631
632
633
634
635  
635<script>
636    window.klaviyoReviewsProductDesignMode = false
637  </script>
637
638
639
640
641
642
643
644
645
646
647<!-- END app block --><!-- BEGIN app block: shopify://apps/tolstoy-ads-image-video/blocks/widget-block/06fa8282-42ff-403e-b67c-1936776aed11 -->
648
649
650
651
652
653
654
655
656
657                
658
659
660
661
662
663
664
665
666
667
668
669<script
670  type="module"
671  async
672  src="https://widget.gotolstoy.com/we/widget.js"
673  data-shop=two-blind-brothers.myshopify.com
674  data-app-key=700d386d-5abe-4e24-886d-969b2ede5a54
675  data-should-use-cache=true
676  data-cache-version=19f2c1e0263
677  data-product-gallery-projects="[]"
678  data-collection-gallery-projects="[]"
679  data-product-id=""
680  data-template-name="blog"
681  data-ot-ignore
682  data-cookieconsent="ignore"
683>
684</script>
vendor: 1 bytes, line 684
684
685<script
686  type="module"
687  async
688  src="https://play.gotolstoy.com/widget-v2/widget.js"
689  id="tolstoy-widget-script"
690  data-shop=two-blind-brothers.myshopify.com
691  data-app-key=700d386d-5abe-4e24-886d-969b2ede5a54
692  data-should-use-cache=true
693  data-cache-version=19f2c1e0263
694  data-product-gallery-projects="[]"
695  data-collection-gallery-projects="[]"
696  data-product-id=""
697  data-collection-id=""
698  data-shop-assistant-enabled="false"
699  data-search-bar-widget-enabled="false"
700  data-template-name="blog"
701  data-customer-id=""
702  data-ot-ignore
703  data-cookieconsent="ignore"
704></script>
vendor: 1 bytes, line 704
704
705<script
706  type="module"
707  async
708  src="https://play.gotolstoy.com/widget-v2/widget.brand-mcp.js"
709  data-app-key=700d386d-5abe-4e24-886d-969b2ede5a54
710  data-ot-ignore
711  data-cookieconsent="ignore"
712></script>
vendor: 1 bytes, line 712
712
713<script>
714  window.tolstoyCurrencySymbol = "$";
715  window.tolstoyMoneyFormat = "${{amount_no_decimals}}";
716</script>
vendor: 1 bytes, line 716
716
717<script>
718  (function(){
719    function hideOrphanedTiles(){
720      var els = document.querySelectorAll('.tolstoy-collection-page-tile,tolstoy-collection-tile');
721      for(var i=0;i<els.length;i++){
722        if(els[i].children.length>0) continue;
723        els[i].style.setProperty('display','none','important');
724        var w=els[i].closest('[class*="tolstoy-grid"]')||els[i].closest('.tolstoy-collection-page-tile-wrapper');
725        if(w) w.style.setProperty('display','none','important');
726      }
727    }
728    if(document.readyState==='loading'){
729      document.addEventListener('DOMContentLoaded',hideOrphanedTiles);
730    }else{
731      hideOrphanedTiles();
732    }
733  })();
734</script>
vendor: 1 bytes, line 734
734
735<script>
736  window.tolstoyDebug = {
737    enable: () => {
738      fetch('/cart/update.js', {
739        method: 'POST',
740        headers: { 'Content-Type': 'application/json' },
741        body: JSON.stringify({ attributes: { TolstoyDebugEnabled: 'true' } })
742      })
743      .then(response => response.json())
744      .then(() => window.location.reload());
745    },
746    disable: () => {
747      fetch('/cart/update.js', {
748        method: 'POST',
749        headers: { 'Content-Type': 'application/json' },
750        body: JSON.stringify({ attributes: { TolstoyDebugEnabled: null } })
751      })
752      .then(response => response.json())
753      .then(() => window.location.reload())
754    },
755    status: async () => {
756      const response = await fetch('/cart.js');
757      const json = await response.json();
758      console.log(json.attributes);
759    }
760  }
761</script>
761
762
763<!-- END app block -->
763<script src="https://cdn.shopify.com/extensions/01a0cea5-f48c-77e6-82d1-fa498b728463/gdpr-backpack-895/assets/consentmo_cookie_consent.js" type="text/javascript" defer="defer"></script>
763
764<meta property="og:image" content="https://cdn.shopify.com/s/files/1/1330/8707/files/Social_Share_Image.jpg?v=1714672345" />
765<meta property="og:image:secure_url" content="https://cdn.shopify.com/s/files/1/1330/8707/files/Social_Share_Image.jpg?v=1714672345" />
766<meta property="og:image:width" content="1200" />
767<meta property="og:image:height" content="628" />
768<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
769<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: "blog"};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 769
769
770<script>
771  window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || [];
772</script>
vendor: 1 bytes, line 772
772
773<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}
773).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: ["16072cab","8450a54b"],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"}
773,{"id":"1510342752","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"f92d7cfd1521456d481ee553d236893f","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"]}
773,"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","c8540278we853e1abpb62b2c4amde256306",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"122340769888","themePublished":"true","eventMetadataId":"1354bd97-06bb-4e3e-8bfc-74598537ba59","pageType":"blog","resourceId":"104435079","shopId":"13308707","storefrontBaseUrl":"https:\/\/twoblindbrothers.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"16072cab\", \"8450a54b\"]","isMerchantRequest":"false","hashVersion":"c8540278we853e1abpb62b2c4amde256306","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
773<script>
774  window.ShopifyAnalytics = window.ShopifyAnalytics || {};
775  window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
776  window.ShopifyAnalytics.meta.currency = 'USD';
777  var meta = {"page":{"pageType":"blog","resourceType":"blog","resourceId":104435079,"requestId":"37ef8ac3-216f-4425-99ea-62bfc70f7fc5-1790277803"}};
778  for (var attr in meta) {
779    window.ShopifyAnalytics.meta[attr] = meta[attr];
780  }
781</script>
vendor: 1 bytes, line 781
781
782<script class="analytics">
783  (function () {
784    var customDocumentWrite = function(content) {
785      var jquery = null;
786
787      if (window.jQuery) {
788        jquery = window.jQuery;
789      } else if (window.Checkout && window.Checkout.$) {
790        jquery = window.Checkout.$;
791      }
792
793      if (jquery) {
794        jquery('body').append(content);
795      }
796    };
797
798    var hasLoggedConversion = function(token) {
799      if (token) {
800        return document.cookie.indexOf('loggedConversion=' + token) !== -1;
801      }
802      return false;
803    }
804
805    var setCookieIfConversion = function(token) {
806      if (token) {
807        var twoMonthsFromNow = new Date(Date.now());
808        twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);
809
810        document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow;
811      }
812    }
813
814    var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
815    window.ShopifyAnalytics.lib.trekkie = window.trekkie;
816    if (trekkie.integrations) {
817      return;
818    }
819    trekkie.methods = [
820      'identify',
821      'page',
822      'ready',
823      'track',
824      'trackForm',
825      'trackLink'
826    ];
827    trekkie.factory = function(method) {
828      return function() {
829        var args = Array.prototype.slice.call(arguments);
830        args.unshift(method);
831        trekkie.push(args);
832        if (method == 'track' || method == 'page') {
833          try {
834            if (window.__TREKKIE_SHIM_QUEUE == null) {
835              window.__TREKKIE_SHIM_QUEUE = [];
836            }
837            window.__TREKKIE_SHIM_QUEUE.push({
838              from: 'trekkie-stub',
839              method: method,
840              args: args.slice(1)
841            });
842          } catch (e) {
843            // no-op
844          }
845        }
846        return trekkie;
847      };
848    };
849    for (var i = 0; i < trekkie.methods.length; i++) {
850      var key = trekkie.methods[i];
851      trekkie[key] = trekkie.factory(key);
852    }
853    trekkie.load = function(config) {
854      trekkie.config = config || {};
855      trekkie.config.initialDocumentCookie = document.cookie;
856      var first = document.getElementsByTagName('script')[0];
857var script = document.createElement('script');
858script.type = 'text/javascript';
859script.onerror = function(e) {
860  var scriptFallback = document.createElement('script');
861  scriptFallback.type = 'text/javascript';
862  scriptFallback.onerror = function(error) {
863          var Monorail = {
864      produce: function produce(monorailDomain, schemaId, payload) {
865        var currentMs = new Date().getTime();
866        var event = {
867          schema_id: schemaId,
868          payload: payload,
869          metadata: {
870            event_created_at_ms: currentMs,
871            event_sent_at_ms: currentMs
872          }
873        };
874        return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event));
875      },
876      sendRequest: function sendRequest(endpointUrl, payload) {
877        // Try the sendBeacon API
878        if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) {
879          var blobData = new window.Blob([payload], {
880            type: 'text/plain'
881          });
882
883          if (window.navigator.sendBeacon(endpointUrl, blobData)) {
884            return true;
885          } // sendBeacon was not successful
886
887        } // XHR beacon
888
889        var xhr = new XMLHttpRequest();
890
891        try {
892          xhr.open('POST', endpointUrl);
893          xhr.setRequestHeader('Content-Type', 'text/plain');
894          xhr.send(payload);
895        } catch (e) {
896          console.log(e);
897        }
898
899        return false;
900      },
901      isIos12: function isIos12() {
902        return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1;
903      }
904    };
905    Monorail.produce('monorail-edge.shopifysvc.com',
906      'trekkie_storefront_load_errors/1.1',
907      {shop_id: 13308707,
908      theme_id: 122340769888,
909      app_name: "storefront",
910      context_url: window.location.href,
911      source_url: "//twoblindbrothers.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js"});
912
913  };
914  scriptFallback.async = true;
915  scriptFallback.src = '//twoblindbrothers.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js';
916  first.parentNode.insertBefore(scriptFallback, first);
917};
918script.async = true;
919script.src = '//twoblindbrothers.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js';
920first.parentNode.insertBefore(script, first);
921
922    };
923    trekkie.load(
924      {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":13308707,"isMerchantRequest":null,"themeId":122340769888,"themeCityHash":"14711308733596041529","contentLanguage":"en","currency":"USD","eventMetadataId":"1354bd97-06bb-4e3e-8bfc-74598537ba59"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}}
925    );
926
927    var loaded = false;
928    trekkie.ready(function() {
929      if (loaded) return;
930      loaded = true;
931
932      window.ShopifyAnalytics.lib = window.trekkie;
933
934      var originalDocumentWrite = document.write;
935      document.write = customDocumentWrite;
936      try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
937      document.write = originalDocumentWrite;
938
939      var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/)
940      var token = match? match[1]: undefined;
941      if (!hasLoggedConversion(token)) {
942        setCookieIfConversion(token);
943        
944      }
945    });
946
947    window.ShopifyAnalytics.lib.page(null,{"pageType":"blog","resourceType":"blog","resourceId":104435079,"requestId":"37ef8ac3-216f-4425-99ea-62bfc70f7fc5-1790277803","shopifyEmitted":true});
948
949    var eventsListenerScript = document.createElement('script');
950    eventsListenerScript.async = true;
951    eventsListenerScript.src = "//twoblindbrothers.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js";
952    document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
953})();</script>
953
954  
954<script>
955  if (!window.ga || (window.ga && typeof window.ga !== 'function')) {
956    window.ga = function ga() {
957      (window.ga.q = window.ga.q || []).push(arguments);
958      if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
959        window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"});
960      }
961      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.");
962    };
963    if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
964      window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"});
965    }
966  }
967</script>
vendor: 1 bytes, line 967
967
968<script
969  defer
970  src="https://twoblindbrothers.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js"
971  data-application="storefront-renderer"
972  data-shop-id="13308707"
973  data-render-region="gcp-us-central1"
974  data-page-type="blog"
975  data-theme-instance-id="122340769888"
976  data-theme-name=""
977  data-theme-version=""
978  data-monorail-region="shop_domain"
979  data-resource-timing-sampling-rate="10"
980  data-shs="true"
981  data-shs-beacon="true"
982  data-shs-export-with-fetch="true"
983  data-shs-logs-sample-rate="1"
984  data-shs-beacon-endpoint="https://twoblindbrothers.com/api/collect"
985></script>
985
986<meta name="shopify-y" content="7bef55c6-ee31-4aee-9aa7-1add4de6b0e8" data-expiration="1821835403000"><meta name="shopify-s" content="a9e14d99-f4ec-48a6-ad37-9b686ce8ac45" data-expiration="1790279603000"><meta name="new-cookie-storage-activated" content="t">
987</head>
988
989<body id="two-blind-brothers" class="the-reserve template-blog shop-blind-layout blog [.mega-menu-active_&]:overflow-hidden">
990
991  <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 991-992
991
992<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
992GTM-WRF9GG7G
vendor: 83 bytes, lines 992-993
992"
993height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
994<!-- End Google Tag Manager (noscript) -->
995
996
997<link rel="preload" as="image" href="https://twoblindbrothers.com/cdn/shop/files/pile_1440x.jpg?v=1730122254">
998<div class="sr-only">
999  
1000</div>
1001
1002
1003<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 1003-1004
1003
1004<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1004GTM-NJTDWKD
vendor: 83 bytes, line 1004
1004" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1005<!-- End Google Tag Manager (noscript) -->
1006
1007<div id="shopify-section-page-loading" class="shopify-section">
1008
1009<page-loading class="page-loading is-active" data-delay="500">
1010  <div class="loader">
1011    <div class="dot dot-1"></div>
1012    <div class="dot dot-2"></div>
1013    <div class="dot dot-3"></div>
1014    <div class="dot dot-4"></div>
1015    <div class="dot dot-5"></div>
1016    <div class="dot dot-6"></div>
1017  </div>
1018</page-loading>
1019
1020
1021</div>
1022
1023<div id="NavDrawer" class="drawer drawer--left">
1024</div>
1025
1026<div id="PageContainer" class="js-page-container">
1027    <div id="shopify-section-reserve-announcement-bar" class="shopify-section">
1028
1029
1030
1031
1032</div>
1033  
1034<div id="shopify-section-global-navigation" class="shopify-section"><style>
1035  .header-reserve__menu-item-icon-lock > svg > path {
1036    transition-duration: .25s;
1037  }
1038
1039  .js-header-reserve-navigation:hover .header-reserve__menu-item-icon-lock > svg > path {
1040    fill: #3d3d3d;
1041  }
1042
1043  .hover:hover .header-reserve__menu-item-icon-lock > svg > path {
1044    fill: #3d3d3d;
1045  }
1046
1047  .js-header-reserve-navigation:hover .text-grey {
1048    color: #3d3d3d;
1049  }
1050
1051  .hover:hover {
1052    color: #3d3d3d;
1053  }
1054
1055  .none {
1056    display: none;
1057  }
1058
1059  .love-tag-icon {
1060    margin-top: -6px;
1061    display: inline-block;
1062  }
1063
1064  .love-tag-fix {
1065    position: absolute;
1066    left: -50px;
1067    top: -50px;
1068  }
1069
1070  #rebuy-widget-175048 {
1071    padding: 0px;
1072  }
1073</style>
1074  <header-reserve class="block bg-white header-reserve" id="headerReserve">
1075    <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>
1076    
1077    <span class="love-tag-fix">
1078
1079<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
107958594 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>
1080    <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]">
1081      <nav class="absolute header-reserve__nav-mobile left-4 sm:left-8 md:left-10 lg:hidden">
1082        <button class="hamburger--spring header-reserve__hamburger" type="button" data-btn-menu-trigger id="headerReserveButton" aria-label="Hamburger Menu">
1083          <span class="header-reserve__hamburger-box">
1084            <span class="header-reserve__hamburger-inner"></span>
1085          </span>
1086        </button>
1087      </nav>
1088      
1089      
1090      
1091
1092      
1093
1094      <a class="header-reserve__logo-wrapper flex flex-col justify-center items-center gap-[6px] lg:gap-[7px]" href="/pages/reveal" itemprop="url">
1095            <img loading="eager" src="//twoblindbrothers.com/cdn/shop/t/278/assets/2bb-logo.png?v=50054669825176451691730151967" width="124" height="auto" alt="logo"/>
1096          
1097          <h1 class="visually-hidden">Two Blind Brothers</h1></a>
1098      <nav class="hidden header-reserve__nav-desktop lg:block lg:relative lg:z-10">
1099        <ul class="flex flex-row gap-10" style="gap: 4rem"><li class="m-0">
1100              <div class="js-header-reserve-navigation">
1101                <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop>
1102                  
1103<a class="font-medium tracking-normal text-black text-p2 font-base" href="/pages/thereserve">Apparel </a>
1104                      <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon">
1105
1106<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1107      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1108    </svg></span>
1109                </div>
1110                
1111<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;">
1112                      <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);">
1113                        <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">
1114                              
1115                              <a href="/collections/womens"
1116                              
1117                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Women's
1118                              </a>
1119                              
1120<ul class="m-0 flex flex-col gap-[6px]"><li class="m-0">
1121                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens">Shop All</a>
1122                                    </li><li class="m-0">
1123                                      <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>
1124                                    </li><li class="m-0">
1125                                      <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>
1126                                    </li><li class="m-0">
1127                                      <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>
1128                                    </li><li class="m-0">
1129                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-bottoms">Bottoms</a>
1130                                    </li><li class="m-0">
1131                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-sale">Sale</a>
1132                                    </li></ul></li><li class="m-0">
1133                              
1134                              <a href="/collections/mens"
1135                              
1136                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Men's
1137                              </a>
1138                              
1139<ul class="m-0 flex flex-col gap-[6px]"><li class="m-0">
1140                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens">Shop All</a>
1141                                    </li><li class="m-0">
1142                                      <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>
1143                                    </li><li class="m-0">
1144                                      <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>
1145                                    </li><li class="m-0">
1146                                      <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>
1147                                    </li><li class="m-0">
1148                                      <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>
1149                                    </li><li class="m-0">
1150                                      <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens-sale">Sale</a>
1151                                    </li></ul></li><li class="m-0">
1152                              
1153                              <a href="/collections/kids"
1154                              
1155                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Kid's
1156                              </a>
1157                              
1158</li></ul></div>
1159                    </div>
1160
1161              </div>
1162            </li><li class="m-0">
1163              <div class="js-header-reserve-navigation">
1164                <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop>
1165                  
1166<a class="font-medium tracking-normal text-black text-p2 font-base" href="/collections/gifts">Accessories</a>
1167                      <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon">
1168
1169<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1170      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1171    </svg></span>
1172                </div>
1173                
1174<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;">
1175                      <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);">
1176                        <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">
1177                              
1178                              <a href="/collections/gifts"
1179                              
1180                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Shop All
1181                              </a>
1182                              
1183</li><li class="m-0">
1184                              
1185                              <a href="/collections/the-2bb-sock-collection"
1186                              
1187                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Socks
1188                              </a>
1189                              
1190</li><li class="m-0">
1191                              
1192                              <a href="/pages/sunglasses"
1193                              
1194                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Sunglasses
1195                              </a>
1196                              
1197</li><li class="m-0">
1198                              
1199                              <a href="/collections/guide-dog-collection"
1200                              
1201                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Guide Dogs
1202                              </a>
1203                              
1204</li></ul></div>
1205                    </div>
1206
1207              </div>
1208            </li><li class="m-0">
1209              <div class="js-header-reserve-navigation">
1210                <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop>
1211                  
1212<a class="font-medium tracking-normal text-black text-p2 font-base" href="/pages/no-barriers-x-2bb-collab">Collaborations</a>
1213                      <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon">
1214
1215<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1216      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1217    </svg></span>
1218                </div>
1219                
1220<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;">
1221                      <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);">
1222                        <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">
1223                              
1224                              <a href="/pages/no-barriers-x-2bb-collab"
1225                              
1226                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">No Barriers Hiking Socks 
1227                              </a>
1228                              
1229</li><li class="m-0">
1230                              
1231                              <a href="/pages/dogs-inc-shop-blind"
1232                              
1233                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Dogs Inc Shop Blind 
1234                              </a>
1235                              
1236</li></ul></div>
1237                    </div>
1238
1239              </div>
1240            </li><li class="m-0">
1241              <div class="js-header-reserve-navigation">
1242                <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item">
1243                  
1244<a class="font-medium tracking-normal text-black text-p2 font-base flex" href="/pages/gift-tag">LoveTags<span class="love-tag-icon">
1245
1246<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
124658594 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>
1247                        </a>
1248                </div>
1249                
1250
1251
1252              </div>
1253            </li><li class="m-0">
1254              <div class="js-header-reserve-navigation">
1255                <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop>
1256                  
1257<a class="font-medium tracking-normal text-black text-p2 font-base" href="/pages/about-us">About Us </a>
1258                      <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon">
1259
1260<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1261      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1262    </svg></span>
1263                </div>
1264                
1265<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;">
1266                      <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);">
1267                        <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">
1268                              
1269                              <a href="/pages/about-us"
1270                              
1271                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Our Mission 
1272                              </a>
1273                              
1274</li><li class="m-0">
1275                              
1276                              <a href="https://www.twoblindbrothers.org"
1277                              
1278                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Programs
1279                              </a>
1280                              
1281</li><li class="m-0">
1282                              
1283                              <a href="/pages/donations"
1284                              
1285                              class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Donate
1286                              </a>
1287                              
1288</li></ul></div>
1289                    </div>
1290
1291              </div>
1292            </li></ul>
1293      </nav>
1294      <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">
1295        <a href="/" 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]">
1296          <span class="block w-5 h-auto">
1297
1298<svg xmlns="http://www.w3.org/2000/svg" width="21" height="10" viewBox="0 0 21 10" fill="none">
1299      <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"/>
1300      <path d="M2.8924 3.03638L0.30719 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1301      <path d="M5.35921 5.26636L3.54364 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1302      <path d="M8.81272 6.4502L8.27989 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1303      <path d="M12.5425 6.4502L13.0556 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1304      <path d="M15.6606 5.26636L17.4761 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1305      <path d="M18.0879 3.03638L20.6928 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1306    </svg></span>
1307          <span>Shop Blind</span>
1308        </a>
1309        <a class="hidden lg:block" aria-controls="searchFormDesktop" href="javascript:void(0)" aria-expanded="false" data-btn-search-desktop>
1310          <span class="w-5 h-auto">
1311
1312<svg xmlns="http://www.w3.org/2000/svg" width="21" height="22" viewBox="0 0 21 22" fill="none">
1313      <circle cx="9.47607" cy="10.3987" r="5.95059" transform="rotate(-45 9.47607 10.3987)" stroke="black" stroke-width="1.5"/>
1314      <path d="M14.0458 14.9692L19.7778 20.7013" stroke="black" stroke-width="1.5"/>
1315    </svg></span>
1316        </a>
1317        <status-saved-link
1318          class="block w-[22px] h-5 indent-0.5 header-reserve__icons-wishlist status-save-link hidden"
1319          aria-label="View saved items"
1320          style="--indicator-position-vertical: -7%; --indicator-position-horizontal: 120%;"
1321        ></status-saved-link>
1322        <a href="/account" class="hidden lg:block">
1323          <span class="block w-5 h-auto">
1324
1325<svg class="w-full h-full" xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16" fill="none">
1326      <circle cx="6.94263" cy="5.36182" r="2.76355" transform="rotate(-45 6.94263 5.36182)" stroke="black"/>
1327      <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"/>
1328    </svg></span>
1329        </a>
1330        <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">
1331          
1332
1333<svg class="w-full h-full" fill="none" viewBox="0 0 20 20">
1334      <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"/>
1335    </svg>
1336          <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>
1337        </a>
1338        
1339      </div>
1340    </div>
1341    <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"
1342      aria-hidden
1343      aria-modal="true"
1344      aria-labelledby="menu-overlay-title"
1345      role="dialog"
1346      aria-hidden="true"
1347      data-search-form-desktop
1348    >
1349      <predictive-search>
1350  <form
1351    action="/search"
1352    method="get"
1353    role="search"
1354    class="predictive-search "
1355    id="searchForm"
1356    
1357  >
1358    <div class="predictive-search__wrapper">
1359      <div class="predictive-search__inner">
1360        <div class="flex items-center">
1361          <button type="submit" class="predictive-search__submit" aria-label="Search" title="Search">
1362            
1363
1364<svg xmlns="http://www.w3.org/2000/svg" width="21" height="22" viewBox="0 0 21 22" fill="none">
1365      <circle cx="9.47607" cy="10.3987" r="5.95059" transform="rotate(-45 9.47607 10.3987)" stroke="black" stroke-width="1.5"/>
1366      <path d="M14.0458 14.9692L19.7778 20.7013" stroke="black" stroke-width="1.5"/>
1367    </svg>
1368          </button>
1369          <label for="formSearchField" class="hidden-label hidden">Search for keywords, style, etc…</label>
1370          <input
1371            class="predictive-search__input"
1372            placeholder="Search for keywords, style, etc…"
1373            id="formSearchField"
1374            type="search"
1375            name="q"
1376            value=""
1377            role="combobox"
1378            aria-expanded="false"
1379            aria-owns="predictive-search-results"
1380            aria-controls="predictive-search-results"
1381            aria-haspopup="listbox"
1382            aria-autocomplete="list"
1383            aria-label="Search for keywords, style, etc…"
1384            onkeydown="return event.key != 'Enter'"
1385          />
1386          <input name="options[prefix]" type="hidden" value="last">
1387          <button type="button" class="predictive-search__close" aria-label="Close Search" title="Close Search" data-btn-close-search>
1388            
1389
1390<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1391      <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"/>
1392    </svg>
1393          </button>
1394        </div>
1395        <div id="predictive-search" class="hidden [.predictive-search.is-open_&]:block" tabindex="-1"></div>
1396      </div>
1397    </div>
1398  </form>
1399</predictive-search>
1400
1401      <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">
1402        <ul class="flex flex-col gap-6 pt-8 m-0">
1403          
1404<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/thereserve">Apparel </a><span class="block w-[5px] h-[11px]" data-btn-submenu>
1409
1410<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1411      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1412    </svg></span>
1413                </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>
1414                    <div class="flex flex-row items-center gap-[9px] mb-[33px] cursor-pointer" data-btn-back-menu>
1415                      <span class="block w-[10px] h-[10px]">
1416
1417<svg class="w-full h-full" fill="none" viewBox="0 0 12 12">
1418      <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/>
1419    </svg></span>
1420                      <p class="font-medium tracking-normal text-black font-base text-label">Back</p>
1421                    </div>
1422                    <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0">
1423                          <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">
1424                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens">Shop All</a>
1425                                </li><li class="m-0">
1426                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-graphic-tees">Graphic Tees</a>
1427                                </li><li class="m-0">
1428                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-long-sleeve-henley">Long Sleeve Tops</a>
1429                                </li><li class="m-0">
1430                                  <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>
1431                                </li><li class="m-0">
1432                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-bottoms">Bottoms</a>
1433                                </li><li class="m-0">
1434                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-sale">Sale</a>
1435                                </li></ul></li><li class="m-0">
1436                          <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">
1437                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens">Shop All</a>
1438                                </li><li class="m-0">
1439                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-graphic-tees">Graphic Tees</a>
1440                                </li><li class="m-0">
1441                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-long-sleeve-henley">Long Sleeve Tops</a>
1442                                </li><li class="m-0">
1443                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-short-sleeve-henley">Short Sleeve Tops</a>
1444                                </li><li class="m-0">
1445                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-bottoms-1">Bottoms</a>
1446                                </li><li class="m-0">
1447                                  <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-sale">Sale</a>
1448                                </li></ul></li><li class="m-0">
1449                          <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>
1450                  
1451</div>
1452            </li><li class="m-0">
1453              <div>
1454                <div class="flex flex-row items-center gap-4 cursor-pointer">
1455                  
1456<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>
1457
1458<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1459      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1460    </svg></span>
1461                </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>
1462                    <div class="flex flex-row items-center gap-[9px] mb-[33px] curs
1462or-pointer" data-btn-back-menu>
1463                      <span class="block w-[10px] h-[10px]">
1464
1465<svg class="w-full h-full" fill="none" viewBox="0 0 12 12">
1466      <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/>
1467    </svg></span>
1468                      <p class="font-medium tracking-normal text-black font-base text-label">Back</p>
1469                    </div>
1470                    <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0">
1471                          <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">
1472                          <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">
1473                          <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">
1474                          <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>
1475                  
1476</div>
1477            </li><li class="m-0">
1478              <div>
1479                <div class="flex flex-row items-center gap-4 cursor-pointer">
1480                  
1481<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>
1482
1483<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1484      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1485    </svg></span>
1486                </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>
1487                    <div class="flex flex-row items-center gap-[9px] mb-[33px] cursor-pointer" data-btn-back-menu>
1488                      <span class="block w-[10px] h-[10px]">
1489
1490<svg class="w-full h-full" fill="none" viewBox="0 0 12 12">
1491      <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/>
1492    </svg></span>
1493                      <p class="font-medium tracking-normal text-black font-base text-label">Back</p>
1494                    </div>
1495                    <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0">
1496                          <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">
1497                          <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>
1498                  
1499</div>
1500            </li><li class="m-0">
1501              <div>
1502                <div class="flex flex-row items-center gap-4 cursor-pointer">
1503                  
1504<a class="font-normal text-black text-h2 font-base tracking-normal" href="/pages/gift-tag">LoveTags<span class="love-tag-icon">
1505
1506<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
150658594 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>
1507                        </a>
1508                </div></div>
1509            </li><li class="m-0">
1510              <div>
1511                <div class="flex flex-row items-center gap-4 cursor-pointer">
1512                  
1513<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>
1514
1515<svg class="w-full h-full" fill="none" viewBox="0 0 7 13">
1516      <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/>
1517    </svg></span>
1518                </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>
1519                    <div class="flex flex-row items-center gap-[9px] mb-[33px] cursor-pointer" data-btn-back-menu>
1520                      <span class="block w-[10px] h-[10px]">
1521
1522<svg class="w-full h-full" fill="none" viewBox="0 0 12 12">
1523      <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/>
1524    </svg></span>
1525                      <p class="font-medium tracking-normal text-black font-base text-label">Back</p>
1526                    </div>
1527                    <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0">
1528                          <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">
1529                          <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">
1530                          <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>
1531                  
1532</div>
1533            </li></ul>
1534        <ul class="flex flex-col gap-4 mt-8"></ul>
1535        <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="/" 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]">
1536            <span class="block w-5 h-auto">
1537
1538<svg xmlns="http://www.w3.org/2000/svg" width="21" height="10" viewBox="0 0 21 10" fill="none">
1539      <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"/>
1540      <path d="M2.8924 3.03638L0.30719 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1541      <path d="M5.35921 5.26636L3.54364 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1542      <path d="M8.81272 6.4502L8.27989 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1543      <path d="M12.5425 6.4502L13.0556 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1544      <path d="M15.6606 5.26636L17.4761 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1545      <path d="M18.0879 3.03638L20.6928 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/>
1546    </svg></span>
1547            <span>Shop Blind</span>
1548          </a>
1549        </div>
1550        <ul class="flex flex-wrap justify-between items-center gap-4 mt-8 mb-6">
1551          
1552          <li class="m-0">
1553            <a href="/account" class="flex flex-row items-center gap-2">
1554              <span class="block w-4 h-4">
1555
1556<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
1557      <circle cx="9.5" cy="5.5" r="3" fill="#F0D83D"/>
1558      <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"/>
1559      <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"/>
1560    </svg></span>
1561              <span class="font-medium tracking-normal text-black text-label font-base">
1562                
1563                  Account
1564                
1565              </span>
1566            </a>
1567          </li>
1568        </ul><ul class="flex flex-row items-center justify-center gap-6 mt-6 mb-5"><li class="flex max-w-[26px]">
1569      <a href="https://instagram.com/twoblindbrothers/" target="_blank" rel="noopener" title="Two Blind Brothers on Instagram">
1570
1571<svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewBox="0 0 24 25" fill="none">
1572      <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
15725 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
1572667 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"/>
1573    </svg></a>
1574    </li><li class="flex max-w-[26px]">
1575      <a href="https://twitter.com/twoblindbros/" target="_blank" rel="noopener" title="Two Blind Brothers on Twitter">
1576
1577<svg class="w-full h-auto" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
1578      <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"/>
1579    </svg></a>
1580    </li><li class="flex max-w-[26px]">
1581      <a href="https://www.facebook.com/twoblindbros/" target="_blank" rel="noopener" title="Two Blind Brothers on Facebook">
1582
1583<svg width="26" height="22" viewbox="0 0 37 24" fill="white" xmlns="http://www.w3.org/2000/svg">
1584    <g clip-path="url(#clip0_133_73)">
1585    <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>
1586    <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>
1587    <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>
1588    </g>
1589    <defs>
1590    <lineargradient id="paint0_linear_133_73" x1="8.02124" y1="11.378" x2="33.4945" y2="12.6954" gradientunits="userSpaceOnUse">
1591    <stop></stop>
1592    <stop offset="0.4" stop-opacity="0.88"></stop>
1593    <stop offset="0.83" stop-opacity="0.83"></stop>
1594    <stop offset="1"></stop>
1595    </lineargradient>
1596    <lineargradient id="paint1_linear_133_73" x1="5.32946" y1="17.466" x2="5.32946" y2="8.29319" gradientunits="userSpaceOnUse">
1597    <stop stop-opacity="0.99"></stop>
1598    <stop offset="1"></stop>
1599    </lineargradient>
1600    <clippath id="clip0_133_73">
1601    <rect width="37" height="24" fill="white"></rect>
1602    </clippath>
1603    </defs>
1604    </svg></a>
1605    </li></ul>
1606</div>
1607    </nav>
1608  </header-reserve>
1609
1610
1611<script>
1612  window.addEventListener("DOMContentLoaded", () => {
1613    const aboutUsButton = document.getElementById('aboutUs')
1614    const headerReserve = document.getElementById('headerReserve')
1615    const headerReserveButton = document.getElementById('headerReserveButton')
1616
1617    if (aboutUsButton) {
1618      aboutUsButton.addEventListener('click', () => {
1619        headerReserve.classList.remove("is-active");
1620        headerReserve.setAttribute('aria-expanded', false);
1621        headerReserveButton.classList.remove("is-active");
1622        document.documentElement.classList.remove('mega-menu-active');
1623      })
1624    }
1625  });
1626</script>
1626
1627
1628
1629</div><main class="main-content" role="main" id="main-content"><div id="shopify-section-template--15150222573664__blog" class="shopify-section">
1630  <h1 class="absolute w-px h-px -m-px border-none whitespace-nowrap overflow-hidden">The Blind Spot</h1>
1631
1632  <div class="w-full max-w-[1200px] px-4 mx-auto sm:px-8">
1633    <!-- /snippets/breadcrumb.liquid -->
1634
1635
1636
1637  <nav class="breadcrumb flex items-center" role="navigation" aria-label="breadcrumbs">
1638    <a href="/" title="Back to the home page" class="h4">Home</a>
1639
1640    
1641      <span aria-hidden="true" class="h4">&rsaquo;</span>
1642      
1643        <span class="h4">The Blind Spot</span>
1644      
1645
1646    
1647  </nav>
1648
1649
1650
1651    <div class="flex flex-col gap-0 sm:grid sm:grid-cols-2 sm:gap-x-8">
1652      
1653        <div class="block w-full">
1654          <div class="relative pt-[80%] my-[30px] text-center overflow-hidden">
1655            
1656  <picture class="absolute top-0 left-0 right-0 bottom-0 block mx-auto">
1657    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/openai_blog_26f8bbd5-13d3-402e-98cc-8692e69749c1.png?crop=center&height=800&v=1789163209&width=600" media="(min-width: 1200px)" />
1658    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/openai_blog_26f8bbd5-13d3-402e-98cc-8692e69749c1.png?crop=center&height=800&v=1789163209&width=400" media="(min-width: 769px)" />
1659    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/openai_blog_26f8bbd5-13d3-402e-98cc-8692e69749c1.png?crop=center&height=768&v=1789163209&width=768" media="(max-width: 768px)" />
1660    <img 
1661      src="//twoblindbrothers.com/cdn/shop/articles/openai_blog_26f8bbd5-13d3-402e-98cc-8692e69749c1.png?crop=center&height=600&v=1789163209&width=1000" 
1662      class="w-full" 
1663      alt="ChatGPT x Two Blind Brothers"
1664      loading="lazy"
1665      width="auto"
1666      height="auto"/>
1667  </picture>
1668
1669
1670<div class="absolute top-[50%] left-[50%] w-4/5 bg-white text-center p-[15px] transform -translate-x-[50%] -translate-y-[50%] sm:max-w-[66%] sm:p-[35px] sm-md:p-[40px]">
1671  <h2 class="h2 text-h2 text-center mb-0 sm:text-[24px]"><a href="/blogs/the-blind-spot/chatgpt-x-two-blind-brothers">ChatGPT x Two Blind Brothers</a></h2>
1672</div>
1673
1674
1675
1676<p class="absolute w-px h-px -m-px border-none whitespace-nowrap overflow-hidden">
1677  Posted by <strong>Krysta White</strong> on <time datetime="2026-09-11">September 11, 2026</time>
1678</p>
1679
1680          </div>
1681        </div>
1682      
1683        <div class="block w-full">
1684          <div class="relative pt-[80%] my-[30px] text-center overflow-hidden">
1685            
1686  <picture class="absolute top-0 left-0 right-0 bottom-0 block mx-auto">
1687    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/A001_001_2016-03-31_1511_C0011_000381.jpg?crop=center&height=800&v=1770074723&width=600" media="(min-width: 1200px)" />
1688    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/A001_001_2016-03-31_1511_C0011_000381.jpg?crop=center&height=800&v=1770074723&width=400" media="(min-width: 769px)" />
1689    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/A001_001_2016-03-31_1511_C0011_000381.jpg?crop=center&height=768&v=1770074723&width=768" media="(max-width: 768px)" />
1690    <img 
1691      src="//twoblindbrothers.com/cdn/shop/articles/A001_001_2016-03-31_1511_C0011_000381.jpg?crop=center&height=600&v=1770074723&width=1000" 
1692      class="w-full" 
1693      alt="A New Chapter for Two Blind Brothers"
1694      loading="lazy"
1695      width="auto"
1696      height="auto"/>
1697  </picture>
1698
1699
1700<div class="absolute top-[50%] left-[50%] w-4/5 bg-white text-center p-[15px] transform -translate-x-[50%] -translate-y-[50%] sm:max-w-[66%] sm:p-[35px] sm-md:p-[40px]">
1701  <h2 class="h2 text-h2 text-center mb-0 sm:text-[24px]"><a href="/blogs/the-blind-spot/big-news-a-new-chapter-for-two-blind-brothers">A New Chapter for Two Blind Brothers</a></h2>
1702</div>
1703
1704
1705
1706<p class="absolute w-px h-px -m-px border-none whitespace-nowrap overflow-hidden">
1707  Posted by <strong>Bradford Manning</strong> on <time datetime="2026-02-02">February 02, 2026</time>
1708</p>
1709
1710          </div>
1711        </div>
1712      
1713        <div class="block w-full">
1714          <div class="relative pt-[80%] my-[30px] text-center overflow-hidden">
1715            
1716  <picture class="absolute top-0 left-0 right-0 bottom-0 block mx-auto">
1717    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/blog_2_e7b58087-b41d-4f73-8d3d-2e83357cd5bf.svg?crop=center&height=800&v=1761060410&width=600" media="(min-width: 1200px)" />
1718    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/blog_2_e7b58087-b41d-4f73-8d3d-2e83357cd5bf.svg?crop=center&height=800&v=1761060410&width=400" media="(min-width: 769px)" />
1719    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/blog_2_e7b58087-b41d-4f73-8d3d-2e83357cd5bf.svg?crop=center&height=768&v=1761060410&width=768" media="(max-width: 768px)" />
1720    <img 
1721      src="//twoblindbrothers.com/cdn/shop/articles/blog_2_e7b58087-b41d-4f73-8d3d-2e83357cd5bf.svg?crop=center&height=600&v=1761060410&width=1000" 
1722      class="w-full" 
1723      alt="Two Blind Brothers x Dogs Inc"
1724      loading="lazy"
1725      width="auto"
1726      height="auto"/>
1727  </picture>
1728
1729
1730<div class="absolute top-[50%] left-[50%] w-4/5 bg-white text-center p-[15p
1730x] transform -translate-x-[50%] -translate-y-[50%] sm:max-w-[66%] sm:p-[35px] sm-md:p-[40px]">
1731  <h2 class="h2 text-h2 text-center mb-0 sm:text-[24px]"><a href="/blogs/the-blind-spot/two-blind-brothers-x-dogs-inc">Two Blind Brothers x Dogs Inc</a></h2>
1732</div>
1733
1734
1735
1736<p class="absolute w-px h-px -m-px border-none whitespace-nowrap overflow-hidden">
1737  Posted by <strong>Krysta White</strong> on <time datetime="2025-10-17">October 17, 2025</time>
1738</p>
1739
1740          </div>
1741        </div>
1742      
1743        <div class="block w-full">
1744          <div class="relative pt-[80%] my-[30px] text-center overflow-hidden">
1745            
1746  <picture class="absolute top-0 left-0 right-0 bottom-0 block mx-auto">
1747    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/Boo_mobilesquareblur_494a6276-8b94-4702-85e1-26b5826050d4.svg?crop=center&height=800&v=1758738752&width=600" media="(min-width: 1200px)" />
1748    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/Boo_mobilesquareblur_494a6276-8b94-4702-85e1-26b5826050d4.svg?crop=center&height=800&v=1758738752&width=400" media="(min-width: 769px)" />
1749    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/Boo_mobilesquareblur_494a6276-8b94-4702-85e1-26b5826050d4.svg?crop=center&height=768&v=1758738752&width=768" media="(max-width: 768px)" />
1750    <img 
1751      src="//twoblindbrothers.com/cdn/shop/articles/Boo_mobilesquareblur_494a6276-8b94-4702-85e1-26b5826050d4.svg?crop=center&height=600&v=1758738752&width=1000" 
1752      class="w-full" 
1753      alt="Coming Soon! September 25th"
1754      loading="lazy"
1755      width="auto"
1756      height="auto"/>
1757  </picture>
1758
1759
1760<div class="absolute top-[50%] left-[50%] w-4/5 bg-white text-center p-[15px] transform -translate-x-[50%] -translate-y-[50%] sm:max-w-[66%] sm:p-[35px] sm-md:p-[40px]">
1761  <h2 class="h2 text-h2 text-center mb-0 sm:text-[24px]"><a href="/blogs/the-blind-spot/coming-soon-september-25th">Coming Soon! September 25th</a></h2>
1762</div>
1763
1764
1765
1766<p class="absolute w-px h-px -m-px border-none whitespace-nowrap overflow-hidden">
1767  Posted by <strong>Krysta White</strong> on <time datetime="2025-09-12">September 12, 2025</time>
1768</p>
1769
1770          </div>
1771        </div>
1772      
1773    </div> <!-- end first grid -->
1774
1775    <style>
1776    .instagram { text-align: center;margin-top: 90px;margin-bottom: 90px;
1777    }
1778    .fs-slider-container {overflow: visible}
1779    .fs-has-links::after { padding: 8px 12px;background-color: #fff;color: rgba(0, 0, 0, 0.8);content: "SHOP IT";
1780    }
1781    .fs-mobile .fs-entry-container { width: 50% !important;  padding-top: 50% !important;}
1782    .fs-timeline-entry {  border: 5px solid white; outline: 10px solid #0c0c0b;  }
1783    .fs-wrapper {overflow: hidden}
1784    .fs-wrapper div.fs-text-container .fs-entry-title, div.fs-detail-title {
1785        font-family: "canada-type-gibson", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
1786        font-style: normal;
1787        font-weight: normal;
1788    }
1789    div.fs-text-container .fs-entry-date, div.fs-detail-container .fs-post-info, div.fs-wrapper div.fs-has-links::after, .fs-text-product, .fs-overlink-text {
1790        font-family: "canada-type-gibson", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
1791        font-style: normal;
1792        font-weight: bold;
1793    }
1794    .fs-wrapper div.fs-text-container * { color: #fff }
1795    .fs-wrapper div.fs-text-container { background-color: rgba(0, 0, 0, 0.8); margin: 0px }
1796    div.fs-entry-date { display: none }
1797    div.fs-entry-title { display: none }
1798    .fs-wrapper div.fs-timeline-entry { margin: 15px }
1799    .fs-slider-next-button, .fs-slider-prev-button { opacity: 1; top: 50%;transform: translatey(-50%); height: 40px; background:none}
1800    .fs-slider-next-button { right: -40px }
1801    .fs-slider-prev-button { left: -40px; transform: translateY(-50%);}
1802      @media (min-width: 769px) {
1803          .fs-slider-next-button{right: -60px;}
1804          .fs-slider-prev-button {left:-60px}
1805    }
1806    .fs-slider-next-button img, .fs-slider-prev-button img { height: 30px }
1807    .fs-mobile .fs-slider-prev-button, .fs-mobile .fs-slider-next-button { display: block; height: 25px }
1808    .fs-mobile .fs-slider-prev-button img, .fs-mobile .fs-slider-next-button img { height: 25px }
1809    .fs-mobile .fs-slider-prev-button { left: -45px }
1810    .fs-mobile div.fs-entry-container { width: calc(100% / 2) !important; padding-top: calc(100% / 2) !important;
1811    }
1812
1813     @media (max-width: 768px) {
1814         .instagram { margin-top: 30px; margin-bottom: 30px }
1815        .fs-wrapper div.fs-timeline-entry { outline-width: 6px; margin: 10px  }
1816    }
1817</style>
1818
1819  <!-- <div class="instagram wrapper">
1820
1821  <span class="h1 text-center">
1822  
1823   </span>
1824    <div class="wrapper thinner">
1825        
1825<script src="//foursixty.com/media/scripts/fs.slider.v2.5.js" data-feed-id="two-blind-brothers" data-open-links-in-same-page="false" data-theme="slider_v2_5" data-cell-size="25%" async></script>
1825
1826    </div>
1827</div> -->
1828
1829
1830    <div class="flex flex-col gap-0 sm:grid sm:grid-cols-2 sm:gap-x-8">
1831      
1832        <div class="block w-full">
1833          <div class="relative pt-[80%] my-[30px] text-center overflow-hidden">
1834            
1835  <picture class="absolute top-0 left-0 right-0 bottom-0 block mx-auto">
1836    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/logosmalltennis.png?crop=center&height=800&v=1755724983&width=600" media="(min-width: 1200px)" />
1837    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/logosmalltennis.png?crop=center&height=800&v=1755724983&width=400" media="(min-width: 769px)" />
1838    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/logosmalltennis.png?crop=center&height=768&v=1755724983&width=768" media="(max-width: 768px)" />
1839    <img 
1840      src="//twoblindbrothers.com/cdn/shop/articles/logosmalltennis.png?crop=center&height=600&v=1755724983&width=1000" 
1841      class="w-full" 
1842      alt="🎾 Hear It, Feel It, Play It: The Rise of Blind Tennis"
1843      loading="lazy"
1844      width="auto"
1845      height="auto"/>
1846  </picture>
1847
1848
1849<div class="absolute top-[50%] left-[50%] w-4/5 bg-white text-center p-[15px] transform -translate-x-[50%] -translate-y-[50%] sm:max-w-[66%] sm:p-[35px] sm-md:p-[40px]">
1850  <h2 class="h2 text-h2 text-center mb-0 sm:text-[24px]"><a href="/blogs/the-blind-spot/hear-it-feel-it-play-it-the-rise-of-blind-tennis">🎾 Hear It, Feel It, Play It: The Rise of Blind Tennis</a></h2>
1851</div>
1852
1853
1854
1855<p class="absolute w-px h-px -m-px border-none whitespace-nowrap overflow-hidden">
1856  Posted by <strong>Krysta White</strong> on <time datetime="2025-08-20">August 20, 2025</time>
1857</p>
1858
1859          </div>
1860        </div>
1861      
1862        <div class="block w-full">
1863          <div class="relative pt-[80%] my-[30px] text-center overflow-hidden">
1864            
1865  <picture class="absolute top-0 left-0 right-0 bottom-0 block mx-auto">
1866    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/30_Ace_Joe_SILO_22.jpg?crop=center&height=800&v=1730215760&width=600" media="(min-width: 1200px)" />
1867    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/30_Ace_Joe_SILO_22.jpg?crop=center&height=800&v=1730215760&width=400" media="(min-width: 769px)" />
1868    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/30_Ace_Joe_SILO_22.jpg?crop=center&height=768&v=1730215760&width=768" media="(max-width: 768px)" />
1869    <img 
1870      src="//twoblindbrothers.com/cdn/shop/articles/30_Ace_Joe_SILO_22.jpg?crop=center&height=600&v=1730215760&width=1000" 
1871      class="w-full" 
1872      alt="Ace! The Newest Addition to the My Guide Dog family &amp; Short Film! - Two Blind Brothers"
1873      loading="lazy"
1874      width="auto"
1875      height="auto"/>
1876  </picture>
1877
1878
1879<div class="absolute top-[50%] left-[50%] w-4/5 bg-white text-center p-[15px] transform -translate-x-[50%] -translate-y-[50%] sm:max-w-[66%] sm:p-[35px] sm-md:p-[40px]">
1880  <h2 class="h2 text-h2 text-center mb-0 sm:text-[24px]"><a href="/blogs/the-blind-spot/my-guide-dog-ace">Ace! The Newest Addition to the My Guide Dog family & Short Film!</a></h2>
1881</div>
1882
1883
1884
1885<p class="absolute w-px h-px -m-px border-none whitespace-nowrap overflow-hidden">
1886  Posted by <strong>Krysta White</strong> on <time datetime="2024-07-15">July 15, 2024</time>
1887</p>
1888
1889          </div>
1890        </div>
1891      
1892        <div class="block w-full">
1893          <div class="relative pt-[80%] my-[30px] text-center overflow-hidden">
1894            
1895  <picture class="absolute top-0 left-0 right-0 bottom-0 block mx-auto">
1896    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/B_Bsunglasses.jpg?crop=center&height=800&v=1770146213&width=600" media="(min-width: 1200px)" />
1897    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/B_Bsunglasses.jpg?crop=center&height=800&v=1770146213&width=400" media="(min-width: 769px)" />
1898    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/B_Bsunglasses.jpg?crop=center&height=768&v=1770146213&width=768" media="(max-width: 768px)" />
1899    <img 
1900      src="//twoblindbrothers.com/cdn/shop/articles/B_Bsunglasses.jpg?crop=center&height=600&v=1770146213&width=1000" 
1901      class="w-full" 
1902      alt="2BB Eyewear Collection - Two Blind Brothers"
1903      loading="lazy"
1904      width="auto"
1905      height="auto"/>
1906  </picture>
1907
1908
1909<div class="absolute top-[50%] left-[50%] w-4/5 bg-white text-center p-[15p
1909x] transform -translate-x-[50%] -translate-y-[50%] sm:max-w-[66%] sm:p-[35px] sm-md:p-[40px]">
1910  <h2 class="h2 text-h2 text-center mb-0 sm:text-[24px]"><a href="/blogs/the-blind-spot/2bb-eyewear-collection">2BB Eyewear Collection</a></h2>
1911</div>
1912
1913
1914
1915<p class="absolute w-px h-px -m-px border-none whitespace-nowrap overflow-hidden">
1916  Posted by <strong>Krysta White</strong> on <time datetime="2024-03-21">March 21, 2024</time>
1917</p>
1918
1919          </div>
1920        </div>
1921      
1922        <div class="block w-full">
1923          <div class="relative pt-[80%] my-[30px] text-center overflow-hidden">
1924            
1925  <picture class="absolute top-0 left-0 right-0 bottom-0 block mx-auto">
1926    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/Screen_Shot_2022-03-17_at_4.09.38_PM.png?crop=center&height=800&v=1730215759&width=600" media="(min-width: 1200px)" />
1927    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/Screen_Shot_2022-03-17_at_4.09.38_PM.png?crop=center&height=800&v=1730215759&width=400" media="(min-width: 769px)" />
1928    <source data-srcset="//twoblindbrothers.com/cdn/shop/articles/Screen_Shot_2022-03-17_at_4.09.38_PM.png?crop=center&height=768&v=1730215759&width=768" media="(max-width: 768px)" />
1929    <img 
1930      src="//twoblindbrothers.com/cdn/shop/articles/Screen_Shot_2022-03-17_at_4.09.38_PM.png?crop=center&height=600&v=1730215759&width=1000" 
1931      class="w-full" 
1932      alt="Watch Now - Pip, A Short Animated Film - Two Blind Brothers"
1933      loading="lazy"
1934      width="auto"
1935      height="auto"/>
1936  </picture>
1937
1938
1939<div class="absolute top-[50%] left-[50%] w-4/5 bg-white text-center p-[15px] transform -translate-x-[50%] -translate-y-[50%] sm:max-w-[66%] sm:p-[35px] sm-md:p-[40px]">
1940  <h2 class="h2 text-h2 text-center mb-0 sm:text-[24px]"><a href="/blogs/the-blind-spot/the-power-of-pawseverance-becoming-a-guide-dog-like-pip">Watch Now - Pip, A Short Animated Film</a></h2>
1941</div>
1942
1943
1944
1945<p class="absolute w-px h-px -m-px border-none whitespace-nowrap overflow-hidden">
1946  Posted by <strong>Bradford Manning</strong> on <time datetime="2022-02-18">February 18, 2022</time>
1947</p>
1948
1949          </div>
1950        </div>
1951      
1952    </div> <!-- end second grid -->
1953  </div>
1954
1955  
1956    <hr>
1957    <div class="pagination">
1958      <span class="page current">1</span> <span class="page"><a href="/blogs/the-blind-spot?page=2" title="">2</a></span> <span class="page"><a href="/blogs/the-blind-spot?page=3" title="">3</a></span> <span class="next"><a href="/blogs/the-blind-spot?page=2" title="">Next &raquo;</a></span>
1959    </div>
1960  
1961
1962
1963
1964</div>
1965
1966
1967
1968  <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/left-side-buttons-25c6a995.css" rel="stylesheet" type="text/css" media="all" />
1969
1970
1971
1972
1973  
1973<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/left-side-buttons-f2532d56.js" type="module" crossorigin="anonymous"></script>
1973
1974
1975<div id="left-side-buttons__wrapper">
1976  <!-- Toggle -->
1977  <button
1978    id="left-side-buttons__toggle"
1979    aria-controls="left-side-panel"
1980    aria-expanded="false"
1981    aria-label="Open accessibility menu"
1982    class="toggle-btn"
1983  >
1984    <span class="svg">
1985
1986<svg width="469" height="447" viewBox="0 0 469 447" fill="none" xmlns="http://www.w3.org/2000/svg">
1987      <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"/>
1988      <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"/>
1989      <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"/>
1990      <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"/>
1991    </svg></span>
1992  </button>
1993
1994  <!-- Panel (hidden by default) -->
1995  <div
1996    id="left-side-panel"
1997    class="side-panel"
1998    role="dialog"
1999    aria-modal="true"
2000    aria-labelledby="left-side-buttons__toggle"
2001  >
2002
2003    <ul class="side-panel-list">
2004      <li class="side-panel-item" style="--delay:.1s">
2005        <button id="eyeball" class="left-side-button">
2006          <span class="label">See How We See</span>
2007          
2008          <span class="svg">
2009
2010<svg class="[.active-blind-mission_&]:!pointer-events-none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 106.3 48.9">
2011      <g class="[.active-blind-mission_&]:!pointer-events-none" id="Art">
2012        <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"/>
2013        <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"/>
2014        <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"/>
2015        <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"/>
2016        <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"/>
2017        <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"/>
2018        <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"/>
2019      </g>
2020    </svg></span>
2021        </button>
2022      </li>
2023      <li class="side-panel-item" style="--delay:.2s">
2024        <button id="get-support-button" class="left-side-button" aria-label="Get help">
2025          <span class="label">Chat Support</span>
2026          <span class="svg">
2027
2028<svg width="469" height="447" viewBox="0 0 469 447" fill="none" xmlns="http://www.w3.org/2000/svg">
2029      <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"/>
2030      <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"/>
2031      <path d="M133.859 213.969C156.333 213.969 174.62 195.578 174.62 172.974C1
203174.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"/>
2032      <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"/>
2033    </svg></span>
2034          
2035        </button>
2036      </li>
2037    </ul>
2038  </div>
2039</div>
2040  </main>
2041
2042  <!-- begin site-footer --><div id="shopify-section-footer-reserve" class="shopify-section"><style>
2043  .footer-reserve__item-header {
2044    font-weight: 500;
2045    font-size: 20px;
2046  }
2047
2048  .footer-reserve__item--newsletter {
2049    display: flex;
2050    flex-direction: column;
2051  }
2052
2053  .newsletter-email {
2054    margin-top: 14px;
2055  }
2056
2057  .newsletter-email button {
2058    background: #F0D83D !important;
2059  }
2060</style>
2061  <footer class="footer-reserve bg-black text-white" role="contentinfo">
2062    <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]">
2063      <div class="footer-reserve__top flex flex-col-reverse sm:flex-row sm:justify-between gap-[80px]">
2064        <div class="footer-reserve__item-links flex gap-[15px] sm:gap-[24px] md:gap-[48px] lg:gap-[61px]">
2065              
2066              <div class="footer-reserve__item w-1/2 sm:w-[165px] md:w-[180px] shrink-0">
2067                <h2 class="label font-normal mb-[18px] md:mb-[20px] capitalize footer-reserve__item-header">Shop</h2>
2068                <nav aria-labelledby="footer-menu" class="footer-menu-container">
2069                  <ul class="no-bullets p1">
2070                    
2071                      <li class="mb-2" >
2072                        <a class="hover:text-yellow hover:underline" href="/pages/donations">Donations </a>
2073                      </li>
2074                    
2075                      <li class="mb-2" >
2076                        <a class="hover:text-yellow hover:underline" href="/pages/thereserve">Apparel</a>
2077                      </li>
2078                    
2079                      <li class="mb-2" >
2080                        <a class="hover:text-yellow hover:underline" href="/pages/sunglasses">Sunglasses</a>
2081                      </li>
2082                    
2083                      <li class="mb-2" >
2084                        <a class="hover:text-yellow hover:underline" href="/collections/guide-dog-collection">My Guide Dog</a>
2085                      </li>
2086                    
2087                      <li class="mb-2" >
2088                        <a class="hover:text-yellow hover:underline" href="/collections/gifts">Accessories</a>
2089                      </li>
2090                    
2091                      <li class="mb-2" >
2092                        <a class="hover:text-yellow hover:underline" href="https://twoblindbrothers.com/pages/sitemap">Site Map</a>
2093                      </li>
2094                    
2095                  </ul>
2096                </nav>
2097              </div>
2098            
2099              
2100              <div class="footer-reserve__item w-1/2 sm:w-[165px] md:w-[180px] shrink-0">
2101                <h2 class="label font-normal mb-[18px] md:mb-[20px] capitalize footer-reserve__item-header">Company</h2>
2102                <nav aria-labelledby="footer-menu" class="footer-menu-container">
2103                  <ul class="no-bullets p1">
2104                    
2105                      <li class="mb-2" >
2106                        <a class="hover:text-yellow hover:underline" href="/pages/about-us">About Us</a>
2107                      </li>
2108                    
2109                      <li class="mb-2" class="site-nav--active">
2110                        <a class="hover:text-yellow hover:underline" href="/blogs/the-blind-spot">The Blind Spot</a>
2111                      </li>
2112                    
2113                      <li class="mb-2" >
2114                        <a class="hover:text-yellow hover:underline" href="/pages/braille">Braille Translator</a>
2115                      </li>
2116                    
2117                      <li class="mb-2" >
2118                        <a class="hover:text-yellow hover:underline" href="https://two-blind-brothers-rxaedbshu7o.gorgias.help/en-US/contact">Contact Us</a>
2119                      </li>
2120                    
2121                      <li class="mb-2" >
2122                        <a class="hover:text-yellow hover:underline" href="https://twoblindbrothers.loopreturns.com/#/">Returns & Exchanges </a>
2123                      </li>
2124                    
2125                      <li class="mb-2" >
2126                        <a class="hover:text-yellow hover:underline" href="https://two-blind-brothers-rxaedbshu7o.gorgias.help/en-US">FAQ</a>
2127                      </li>
2128                    
2129                      <li class="mb-2" >
2130                        <a class="hover:text-yellow hover:underline" href="/account">Account</a>
2131                      </li>
2132                    
2133                  </ul>
2134                </nav>
2135              </div>
2136            
2137</div>
2138
2139        <div class="footer-reserve__item--newsletter w-full sm:w-[321px] md:w-[380px] lg:w-[495px] lg:mr-[153px]">
2140          <h2 class="label font-normal mb-[18px] md:mb-[20px] capitalize footer-reserve__item-header">Newsletter</h2>
2141          <div class="footer-reserve__newsletter-form">
2142            <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>
2143          <div class="footer-reserve__socials">
2144            <ul class="inline-list flex items-end gap-[18px] mt-[26px] lg:mt-[32px]">
2145              
2146                <li>
2147                  <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">
2148                    <img class="lazy" src="//twoblindbrothers.com/cdn/shop/files/Instagram.png?v=1696586169" alt="" width="auto" height="26">
2149                  </a>
2150                </li>
2151              
2152              
2153                <li>
2154                  <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">
2155                    <img class="lazy" src="//twoblindbrothers.com/cdn/shop/files/twitter.png?v=1696586174" alt="" width="auto" height="26">
2156                  </a>
2157                </li>
2158              
2159              
2160                <li>
2161                  <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">
2162
2163<svg width="26" height="22" viewbox="0 0 37 24" fill="white" xmlns="http://www.w3.org/2000/svg">
2164    <g clip-path="url(#clip0_133_73)">
2165    <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>
2166    <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>
2167    <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
2167645 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>
2168    </g>
2169    <defs>
2170    <lineargradient id="paint0_linear_133_73" x1="8.02124" y1="11.378" x2="33.4945" y2="12.6954" gradientunits="userSpaceOnUse">
2171    <stop></stop>
2172    <stop offset="0.4" stop-opacity="0.88"></stop>
2173    <stop offset="0.83" stop-opacity="0.83"></stop>
2174    <stop offset="1"></stop>
2175    </lineargradient>
2176    <lineargradient id="paint1_linear_133_73" x1="5.32946" y1="17.466" x2="5.32946" y2="8.29319" gradientunits="userSpaceOnUse">
2177    <stop stop-opacity="0.99"></stop>
2178    <stop offset="1"></stop>
2179    </lineargradient>
2180    <clippath id="clip0_133_73">
2181    <rect width="37" height="24" fill="white"></rect>
2182    </clippath>
2183    </defs>
2184    </svg>
2185                  </a>
2186                </li>
2187              
2188              
2189                <li style="margin-left: 6px;">
2190                  <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">
2191                    <img class="lazy" src="//twoblindbrothers.com/cdn/shop/files/tiktok.png?v=1696586171" alt="" width="auto" height="26">
2192                  </a>
2193                </li>
2194              
2195            </ul>
2196          </div>
2197        </div>
2198      </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]">
2199          <picture class="w-full">
2200            <source data-srcset="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752" media="(min-width: 769px)" />
2201            <source data-srcset="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752&width=1024" media="(min-width: 500px)" />
2202            <source data-srcset="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752&width=500" media="(min-width: 320px)" />
2203            <img width="auto" height="auto" src="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752&width=500" alt="" loading="lazy"/>
2204          </picture>
2205        </div><div class="footer-reserve__bottom pt-[24px] border-t border-grey flex flex-col-reverse sm:flex-row sm:justify-between">
2206        <p class="p1 mt-[14px] sm:mt-0">
2207          © 2026 Two Blind Brothers | A registered 501(c)(3) nonprofit organization | EIN 47-5511564
2208          
2209        </p>
2210        <nav>
2211          <ul class="no-bullets p1 flex gap-[12px] md:gap-[32px]">
2212            
2213              <li>
2214                <a class="hover:text-yellow hover:underline" href="/pages/terms-of-service">Terms & Conditions</a>
2215              </li>
2216            
2217              <li>
2218                <a class="hover:text-yellow hover:underline" href="/pages/privacy-policy">Privacy Policy</a>
2219              </li>
2220            
2221              <li>
2222                <a class="hover:text-yellow hover:underline" href="/pages/accessibility">Accessibility </a>
2223              </li>
2224            
2225          </ul>
2226        </nav>
2227      </div>
2228    </div>
2229  </footer>
2230
2231
2232
2233</div><!-- //site-footer -->
2234
2235  
2236
2237  <div id="heatmap-banner" class="fixed -top-[200px] w-full bg-yellow text-center px-2.5 py-7 z-[100000] transition-all duration-1000 ease-linear">
2238    <p class="block max-w-[800px] text-black text-label mx-auto">
2239      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.
2240    </p>
2241    <a class="heatmap-close absolute top-2.5 right-2.5 font-bold text-black" href="#" title="close banner">X</a>
2242  </div>
2243
2244  <svg xmlns="http://www.w3.org/2000/svg" width="80%" height="80%" viewBox="10 0 50 75" id="heatmap-display" class="fixed top-[50%] left-[50%] transform -translate-x-1/2 -translate-y-1/2 scale-[0.2] opacity-0 transition-all duration-1000 ease-linear z-[999] pointer-events-none">
2245    <filter id="blurMe">
2246      <feGaussianBlur in="SourceGraphic" stdDeviation="1"></feGaussianBlur>
2247    </filter>
2248    <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
2248(#blurMe)"></path>
2249    <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(#blurMe)"></path>
2250    <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>
2251  </svg>
2252
2253</div>
2254  <reserve-collapsible-cart class="reserve-collapsible-cart collapsible js-reserve-cart-collapsible" hidden>
2255    <button type="button" class="collapsible-trigger" id="collapsible-trigger" aria-expanded="false" aria-controls="collapsible-content">
2256      <span class="collapsible-title">Thanks to you, we’ve donated +$2.5m to fight blindness.</span>
2257      <span class="collapsible-icon">
2258        <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>
2259      </span>
2260    </button>
2261    <div class="collapsible-content" id="collapsible-content" role="region" aria-labelledby="collapsible-trigger">
2262      <div class="collapsible-content__inner">
2263        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.
2264      </div>
2265    </div>
2266  </reserve-collapsible-cart>
2267
2268
2269  
2269<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/reserve-collapsible-cart-4546fed9.js" type="module" crossorigin="anonymous"></script>
2269
2270
2271
2272<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/timber.js?v=31070900647156016061761863562"></script>
vendor: 1 bytes, line 2272
2272
2273<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/scripts.js?v=87841220958860870631781797004"></script>
vendor: 1 bytes, line 2273
2273
2274<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/aria-modal.js?v=267549560295848651752613227"></script>
vendor: 1 bytes, line 2274
2274
2275<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/nav.js?v=152844729932761356901718126068"></script>
vendor: 1 bytes, line 2275
2275
2276<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/js.cookie.js?v=55157327875759164121702066481"></script>
2276
2277<!-- <div class="options">
2278  <label>Radius </label><input type="range" id="radius" value="25" min="10" max="50" /><br />
2279  <label>Blur </label><input type="range" id="blur" value="15" min="10" max="50" />
2280</div>
2281
2282<canvas id="canvas" width="1000" height="600"></canvas> -->
2283
2284<div id="canvas"></div>
2285
2286<script>
2287  window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
2288
2289  // function get(id) {
2290  //   return document.getElementById(id);
2291  // }
2292
2293  // var heat = simpleheat('canvas').data(data).max(18),
2294  //   frame;
2295  //
2296  // function draw() {
2297  //   console.time('draw');
2298  //   heat.draw();
2299  //   console.timeEnd('draw');
2300  //   frame = null;
2301  // }
2302  //
2303  // draw();
2304
2305  // get('canvas').onmousemove = function (e) {
2306  //   heat.add([e.layerX, e.layerY, 1]);
2307  //   frame = frame || window.requestAnimationFrame(draw);
2308  // };
2309  //
2310  // var radius = get('radius'),
2311  //   blur = get('blur'),
2312  //   changeType = 'oninput' in radius ? 'oninput' : 'onchange';
2313  //
2314  // radius[changeType] = blur[changeType] = function (e) {
2315  //   heat.radius(+radius.value, +blur.value);
2316  //   frame = frame || window.requestAnimationFrame(draw);
2317  // };
2318
2319  function handler1() {
2320    document.body.classList.add('active-eyeball-blind')
2321    $('#eyeball svg title#eyeball-title').html('Remove');
2322    $('#eyeball').attr('aria-label', 'Remove');
2323
2324    $('.blink').addClass('blinked');
2325    // $('#stargardt').addClass('content-grow2');
2326    $('#heatmap-banner').addClass('nav-down');
2327    $(this).one("click", handler2);
2328
2329    $("#canvas").fadeIn();
2330
2331    $("#canvas").addClass("growing");
2332
2333    // setInterval(function(){
2334    //   if (v > 1) {
2335    //     v = parseInt(v) - 1;
2336    //     $("#canvas").css("filter", "blur(" + v + "em)");
2337    //   }
2338    // }, 1000);
2339  }
2340
2341  function handler2() {
2342    document.body.classList.remove('active-eyeball-blind')
2343    $('.blink').removeClass('blinked');
2344    $('#eyeball svg title#eyeball-title').html('Select this button to see how the Two Blind Brothers see that Page');
2345    $('#eyeball').attr('aria-label', 'Select this button to see how the Two Blind Brothers see that Page');
2346    // $('#stargardt').removeClass('content-grow2');
2347    $("#canvas").fadeOut();
2348    $("#canvas").removeClass("growing");
2349    $('#heatmap-banner').removeClass('nav-down');
2350    $(this).one("click", handler1);
2351  }
2352
2353  $("#eyeball").one("click", handler1);
2354  $( ".heatmap-close" ).click(function(e) {
2355    e.preventDefault();
2356    $('#heatmap-banner').removeClass('nav-down')
2357    $("#canvas").fadeOut();
2358    $("#canvas").removeClass("growing");
2359  });
2360</script>
2360
2361
2362
2363<script>
2364  // Video modals
2365  jQuery(function() {
2366    $('iframe[src*="https://www.youtube.com/embed/"]').addClass("remodal-video");
2367    $(document).on('closing', '.remodal', function (e) {
2368      $('.remodal-video').each(function(index) {
2369        $(this).attr('src', $(this).attr('src'));
2370        return false;
2371      });
2372    });
2373    jQuery('.swatch :radio').change(function() {
2374      var optionIndex = jQuery(this).closest('.swatch').attr('data-option-index');
2375      var optionValue = jQuery(this).val();
2376      jQuery(this)
2377        .closest('form')
2378        .find('.single-option-selector')
2379        .eq(optionIndex)
2380        .val(optionValue)
2381        .trigger('change');
2382    });
2383  });
2384
2385  jQuery.post('/cart/update.js', {
2386    "attributes": {
2387      "origin": 'Shop Blind'
2388    }
2389  })
2390</script>
2390
2391
2392<script>
2393  // Smooth Scroll
2394  $('a[href*="#"]')
2395    .not('[href="#"]')
2396    .not('[href="#0"]')
2397    .click(function(event) {
2398      if (
2399        location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '')
2400        &&
2401        location.hostname == this.hostname
2402      ) {
2403        var target = $(this.hash);
2404        target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
2405        if (target.length) {
2406          event.preventDefault();
2407          $('html, body').animate({
2408            scrollTop: target.offset().top - 120
2409          }, 1000, function() {
2410            var $target = $(target);
2411            $target.focus();
2412            if ($target.is(":focus")) {
2413              return false;
2414            } else {
2415              $target.attr('tabindex','-1');
2416              $target.focus();
2417            };
2418          });
2419        }
2420      }
2421    });
2422</script>
2422
2423
2424<script>
2425  
2426</script>
2426
2427
2428
2429<script type="text/javascript">
2430
2431  (function () {
2432    var b = document.createElement('script'); b.type = 'text/javascript'; b.async = true;
2433    b.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'a.klaviyo.com/media/js/analytics/analytics.js';
2434    var a = document.getElementsByTagName('script')[0]; a.parentNode.insertBefore(b, a);
2435  })();
2436</script>
2436
2437
2438
2439
2440<script type="text/javascript">
2441  !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)}}}}();
2442
2443  klaviyo.push(['account', 'HMZ6Wk']);
2444</script>
2444
2445
2446
2447<!-- Conversion Pixel for [lead]- DO NOT MODIFY -->
2448<img style="display:none;" src="https://data.adxcel-ec2.com/pixel/?ad_log=referer&action=lead&pixid=e503aefe-73f2-46f2-8010-e12740208050" width="1" height="1" border="0">
2449<!-- End of Conversion Pixel -->
2450
2451<!--Gorgias Chat Widget Start-->
2452<script id="gorgias-chat-widget-install-v3"
2453        src="https://config.gorgias.chat/bundle-loader/01H2DX32D7RHVBGVWR3EG2HXDS">
2454</script>
2454
2455<!--Gorgias Chat Widget End-->
2456
2457  <div id="shopify-section-reserve-gate-new" class="shopify-section"><style>
2458  #new-reserve-gate {
2459    position: fixed;
2460    top: 0;
2461    left: 0;
2462    width: 100%;
2463    height: 100%;
2464    z-index: 99999;
2465    background: rgba(0, 0, 0, 0.7);
2466    text-align: center;
2467  }
2468  #reserve-gate-selection-container {
2469    background: white;
2470    width: 100%;
2471    bottom: 0;
2472    position: absolute;
2473    padding: 3rem 2rem;
2474    visibility: hidden;
2475  }
2476  #reserve-gate-buttons {
2477    margin-top: 1rem;
2478    display: flex;
2479    justify-content: center;
2480    gap: 2rem;
2481  }
2482  #reserve-gate-buttons button {
2483    padding: 10px 30px;
2484    background: #f0d83d;
2485    border-radius: 30px;
2486    color: black;
2487    font-size: 18px;
2488    font-weight: 500;
2489  }
2490  #reserve-gate-selection-no-container {
2491    background: white;
2492    display: none;
2493    width: 100%;
2494    bottom: 0;
2495    position: absolute;
2496    padding: 3rem 2rem;
2497  }
2498  #reserve-gate-selection-no-container > p {
2499    font-weight: 700;
2500    font-size: 2rem;
2501  }
2502  #reserve-gate-selection-no-container a {
2503    padding: 10px 30px;
2504    background: #f0d83d;
2505    border-radius: 30px;
2506    color: black;
2507    margin-top: 1rem;
2508    display: inline-block;
2509    font-weight: 500;
2510  }
2511  #reserve-gate-links {
2512    display: flex;
2513    justify-content: center;
2514    gap: 2rem;
2515    margin-top: 1rem;
2516
2517    @media (max-width: 767px) {
2518      flex-direction: column;
2519      gap: 0rem;
2520    }
2521  }
2522  #reserve-gate-links p {
2523    font-size: 12px;
2524  }
2525  .reserve-gate-selection-header {
2526    font-weight: 700;
2527    font-size: 2rem;
2528  }
2529  .reserve-gate-selection-content {
2530    width: 80%;
2531    margin: 1rem auto;
2532
2533    p {
2534      font-size: 1rem;
2535    }
2536  }
2537  #shopblind-svg {
2538    width: 400px;
2539    height: 200px;
2540    display: flex;
2541    align-items: center;
2542    justify-content: center;
2543    margin: auto;
2544    overflow: hidden;
2545  }
2546  #shopblind-svg svg {
2547    width: 400px !important;
2548    height: 400px !important;
2549  }
2550</style>
2551
2552
2553
2554
2555  
2556
2557
2558<script>
2559  window.addEventListener("DOMContentLoaded", () => {
2560    // function to get cookie name
2561    function getCookie(name) {
2562      const value = `; ${document.cookie}`;
2563      const parts = value.split(`; ${name}=`);
2564      if (parts.length === 2) return parts.pop().split(';').shift();
2565    }
2566    function setCookie(name, value) {
2567      const date = new Date();
2568      date.setTime(date.getTime() + (1440 * 60 * 1000)); // 1440 minutes (24 hours) in milliseconds
2569      const expires = "expires=" + date.toUTCString();
2570      document.cookie = `${name}=${value}; ${expires}; path=/`;
2571    }
2572    const newReserveGate = document.getElementById('new-reserve-gate');
2573    const selectionContainer = document.getElementById('reserve-gate-selection-container');
2574    const selectionNoContainer = document.getElementById('reserve-gate-selection-no-container');
2575    const yesButton = document.getElementById('reserve-gate-buttons-yes');
2576    const noButton = document.getElementById('reserve-gate-buttons-no');
2577
2578    setTimeout(() => {
2579      if (selectionContainer) {
2580        selectionContainer.style.visibility = 'visible'
2581      }
2582    }, 1000);
2583
2584    if (getCookie('showGate')) {
2585      if (getCookie('showGate') === 'false') {
2586        newReserveGate.style.display = 'none';
2587        document.body.style.overflowY = 'auto';
2588      }
2589    }
2590    if (newReserveGate) {
2591      yesButton.addEventListener('click', function() {
2592        newReserveGate.style.display = 'none';
2593        document.body.style.overflowY = 'auto';
2594        setCookie('showGate', 'false');
2595      });
2596      noButton.addEventListener('click', function() {
2597        selectionContainer.style.display = 'none';
2598        selectionNoContainer.style.display = 'block';
2599        setCookie('showGate', 'true');
2600      });
2601    }
2602  });
2603</script>
2603
2604
2605</div>
2606  
2607
2608<div data-rebuy-id="120361"></div>
2609<script async src="https://cdn.rebuyengine.com/onsite/js/rebuy.js?shop=two-blind-brothers.myshopify.com"></script>
2609
2610        
2610<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>
2610
2611<style> body > .additional-checkout-buttons {display: none !important;} </style>
2612<div id="shopify-block-AQTlTWDBDUEVwNWNoZ__10641372206048101839" class="shopify-block shopify-app-block">
2613<script>
2614  window.Rebuy = window.Rebuy || {};
2615  window.Rebuy.customer = window.Rebuy.customer || {};
2616  
2617  window.Rebuy.market = window.Rebuy.market || {};
2618  
2619  window.Rebuy.market.country = "US";
2620  
2621  
2622  window.Rebuy.market.locale = "en";
2623  
2624</script>
2624
2625
2626
2627<script async src="https://cdn.rebuyengine.com/onsite/js/rebuy.js?shop=two-blind-brothers.myshopify.com"></script>
2627
2628
2629
2630</div><div id="shopify-block-AVElYbHJnemxjbVVrN__10840395464443086010" class="shopify-block shopify-app-block">
2631
2632
2633<script>
2634  console.log("[Alia app extension] v1.0.5");
2635
2636  const BACKEND_URL = "https://backend.alia-prod.com";
2637
2638  window.ALIA_SHOPIFY_EXTENSION_INFO = {
2639    customerID: "",
2640    country: "US",
2641    market: "us",
2642    language: "en"
2643  }
2644
2645  if (document.readyState !== "loading") {
2646    initAlia();
2647  } else {
2648    document.addEventListener("DOMContentLoaded", () => initAlia(), { once: true });
2649  }
2650
2651  async function initAlia() {
2652    const url = BACKEND_URL + "/public/launcher.js?shopifyUrl=two-blind-brothers.myshopify.com";
2653    const script = document.createElement("script");
2654    script.src = url;
2655    script.async = true;
2656    document.head.appendChild(script);
2657  }
2658</script>
2658
2659
2660</div>
2660<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
2660
2661</body>
2662<script>
2663  function debounce(func, timeout = 300){
2664    let timer;
2665    return (...args) => {
2666      clearTimeout(timer);
2667      timer = setTimeout(() => { func.apply(this, args); }, timeout);
2668    };
2669  }
2670</script>
2670
2671<link href="//twoblindbrothers.com/cdn/shop/t/278/assets/theme-deferred.css?v=1803961940013862381702066483" rel="stylesheet" type="text/css" media="all" />
2672</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.