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 – 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">›</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 & 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 »</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.