1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 2 "http://www.w3.org/TR/html4/strict.dtd"> 3<!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]--> 4<!--[if IE 9 ]><html class="ie9 no-js"> <![endif]--> 5<!--[if (gt IE 9)|!(IE)]><!--> <html class="no-js" lang="en"> <!--<![endif]--> 6<head> 7 8 <!-- Google Tag Manager -->
9<script>
vendor: 327 bytes, lines 9-13
9(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 10new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 11j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 12'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 13})(window,document,'script','dataLayer','
13GTM-WRF9GG7G
vendor: 3 bytes, line 13
13');
13</script>
13 14<!-- End Google Tag Manager --> 15 16 17 18 19
19<script> 20 console.log('LAYOUT:theme.liquid') 21 console.log('TEMPLATE:"cart"') 22 console.log('THEME ID:122340769888') 23 console.log('PREVIEW THEME ID URL:https://twoblindbrothers.com/?preview_theme_id=122340769888') 24 let pathname = window.location.pathname 25 if (pathname !== '/') { 26 console.log(`THEME EDITOR:https://admin.shopify.com/store/two-blind-brothers/themes/122340769888/editor?previewPath=${pathname}`) 27 } else { 28 console.log('THEME EDITOR:https://admin.shopify.com/store/two-blind-brothers/themes/122340769888/editor') 29 } 30 </script>
30 31 32<!-- Start of Shoplift scripts --> 33<!-- 2026-05-07T22:05:52.3063795Z --> 34<style>.shoplift-hide { opacity: 0 !important; }</style> 35<style id="sl-preview-bar-hide">#preview-bar-iframe, #PBarNextFrameWrapper { display: none !important; }</style>
36<script type="text/javascript">(function(rootPath, template, themeRole, themeId, isThemePreview){ /* Generated on 2026-10-02T05:00:05.4373831Z */(function(){"use strict";var te=document.createElement("style");te.textContent=`#shoplift-preview-control{position:fixed;max-width:332px;height:56px;background-color:#141414;z-index:9999;bottom:20px;display:flex;border-radius:8px;box-shadow:13px 22px 7px #0000,9px 14px 7px #00000003,5px 8px 6px #0000000d,2px 4px 4px #00000017,1px 1px 2px #0000001a,0 0 #0000001a;align-items:center;margin:0 auto;left:16px;right:16px;opacity:0;transform:translateY(20px);visibility:hidden;transition:opacity .4s ease-in-out,transform .4s ease-in-out,visibility 0s .4s}#shoplift-preview-control.visible{opacity:1;transform:translateY(0);visibility:visible;transition:opacity .4s ease-in-out,transform .4s ease-in-out,visibility 0s 0s}#shoplift-preview-control *{font-family:Inter,sans-serif;color:#fff;box-sizing:border-box;font-size:16px}#shoplift-preview-variant-title{font-weight:400;line-height:140%;font-size:16px;text-align:start;letter-spacing:-.16px;flex-grow:1;text-wrap:nowrap;overflow:hidden;text-overflow:ellipsis}#shoplift-preview-variant-selector{position:relative;display:block;padding:6px 0;height:100%;min-width:0;flex:1 1 auto}#shoplift-preview-variant-menu-trigger{border:none;cursor:pointer;width:100%;background-color:transparent;padding:0 16px;border-left:1px solid #333;border-right:1px solid #333;height:100%;display:flex;align-items:center;justify-content:start;gap:8px}#shoplift-preview-variant-selector .menu-variant-label{width:24px;height:24px;border-radius:50%;padding:6px;display:flex;justify-content:center;align-items:center;font-size:12px;font-style:normal;font-weight:600;line-height:100%;letter-spacing:-.12px;flex-shrink:0}#shoplift-preview-variant-selector .preview-variant-menu{position:absolute;bottom:110%;transform:translate3d(0,20px,0);visibility:hidden;pointer-events:none;opacity:0;cursor:pointer;background-color:#141414;border:1px solid #141414;border-radius:6px;width:100%;max-height:156px;overflow-y:auto;box-shadow:0 8px 16px #0003;z-index:1;transition:opacity .3s ease-in-out,transform .3s ease-in-out,visibility 0s .3s}#shoplift-preview-variant-selector .preview-variant-menu.preview-variant-menu__visible{visibility:visible;pointer-events:auto;opacity:100;transform:translateZ(0);transition:opacity .3s ease-in-out,transform .3s ease-in-out,visibility 0s 0s}@media screen and (max-width:400px){#shoplift-preview-variant-selector .preview-variant-menu{position:fixed;left:0;right:0;width:auto;bottom:110%}}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item{padding:12px 16px;display:flex;overflow:hidden}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item .menu-variant-label{margin-right:6px}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item span{overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap;white-space:nowrap;color:#f6f6f6;font-size:14px;font-style:normal;font-weight:500}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:hover{background-color:#545454}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:last-of-type{border-bottom-left-radius:6px;border-bottom-right-radius:6px}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:first-of-type{border-top-left-radius:6px;border-top-right-radius:6px}#shoplift-preview-control div:has(#shoplift-exit-preview-button){padding:0 16px}#shoplift-exit-preview-button{padding:6px 8px;font-weight:500;line-height:75%;border-radius:4px;background-color:transparent;border:none;text-decoration:none}#shoplift-exit-preview-button:hover{cursor:pointer;background-color:#333}#shoplift-preview-subscription-warning{position:relative;display:flex;align-items:center;gap:6px;padding:6px 10px;margin:0 4px;border-left:1px solid #333;cursor:help;outline:none}#shoplift-preview-subscription-warning__icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background-color:#f59e0b;color:#141414!important;font-weight:700;font-size:12px!important;line-height:1;flex-shrink:0}#shoplift-preview-subscription-warning__label{font-size:13px!important;font-weight:500;color:#fbbf24!important;text-wrap:nowrap;white-space:nowrap}#shoplift-preview-subscription-warning__tooltip{position:absolute;bottom:calc(100% + 8px);right:0;max-width:320px;width:max-content;padding:10px 12px;border-radius:6px;background-color:#1f1f1f;color:#fff!important;font-size:12px!important;line-height:1.4!important;box-shadow:0 8px 16px #0000004d;z-index:10000;opacity:0;visibility:hidden;transform:translateY(4px);transition:opacity .2s ease-in-out,transform .2s ease-in-out,visibility 0s .2s;pointer-events:none}#shoplift-preview-subscription-warning__tooltip.shoplift-preview-subscription-warning__tooltip--visible{opacity:1;visibility:visible;transform:translateY(0);transition:opacity .2s ease-in-out,transform .2s ease-in-out,visibility 0s 0s}#shoplift-preview-subscription-warning:focus-visible{box-shadow:inset 0 0 0 2px #f59e0b;border-radius:4px}#shoplift-preview-control:has(#shoplift-preview-subscription-warning){max-width:480px}/*$vite$:1*/`,document.head.appendChild(te);var fe=" daum[ /]| deusu/|(?:^|[^g])news(?!sapphire)|(?<! channel/|google/)google(?!(?:wv|app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!cam)scan|(?<!lib)http|24x
367|;\\s\\w+;$|@[a-z][\\w-]+\\.|\\(\\)|\\.com\\b|\\b\\w+/1\\.0;|\\bbw/|\\bdlc\\b|\\bort/|\\bperl\\b|\\btime/|\\||^[<\\(;]|^[\\w \\.\\-\\(?:\\):%]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[\\w\\-]+/[\\w]+$|^[^ ]{50,}$|^\\d+\\b|^\\w*search\\b|^\\w+/[\\w\\(\\)]*$|^\\w+/\\d\\.\\d\\s\\([\\w@]+\\)$|^active|^ad muncher|^amaya|^apache/|^avsdevicesdk/|^azure|^biglotron|^blackbox exporter|^bot|^clamav[ /]|^claude-code/|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^email|^exodusmovement|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^igetter/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d\\s[\\w\\.-]+$|^mozilla/\\d\\.\\d\\s\\((?:compatible;)?(?:\\s?[\\w\\d-.]+\\/\\d+\\.\\d+)?\\)$|^navermailapp|^netsurf|^offline|^openai/|^owler|^php|^postman|^ps_daily/|^python|^rank|^read|^reed|^remove\\.bg/|^rest|^rss|^snapchat|^sora |^space bison|^stape/|^svn|^swcd |^taringa|^thumbor/|^track|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|abuse|advisor|agent\\b|analyzer|archive|ask jeeves/teoma|attracta|audit|bluecoat drtr|browsex|burpcollaborator|capture|catch|check\\b|checker|chrome-lighthouse|chromeframe|classifier|cloudflare|collapsify\\b|convertify|cookiehubverify/|crawl|cursor/|cypress/|dareboost|datanyze|dejaclick|detect|discovery|dmbrowser|download|exaleadcloudview|feed|firephp|foregenix|functionize|grab|hardenize\\b|headless|hotjar|httrack|hubspot marketing grader|ibisbrowser|infrawatch|insight|inspect|iplabel|java(?!;)|library|linkcheck|linktiger|mail\\.ru/|manager|manus-user/|marketgoo/|measure|monitor\\b|neustar wpm|node\\b|nutch|offbyone|openvas|optimize|pageburst|pagespeed|parser|phantomjs|pingdom|playwright|powermarks|preview|productfinder|prospectingstudio|proxy|ptst[ /]\\d|radar|readable/|retriever|rexx;|rigor|rss\\b|scrape|securityheaders|selenium|server|silktide|sindup/|sogou|sparkler/|speedcurve|spider|splash|statuscake|supercleaner|synapse|synthetic|testlocally|tools|torrent|transcoder|url|validator|virtuoso|wappalyzer|watchtowr|webglance|webkit2png|whatcms/|xtate/",ge=/bot|crawl|http|lighthouse|scan|search|spider/i,z;function me(){if(z instanceof RegExp)return z;try{z=new RegExp(fe,"i")}catch{z=ge}return z}var ye=a=>typeof a=="string"&&a!=="";function ve(a){return ye(a)&&me().test(a)}var we=ve;class X{timestamp;constructor(){this.timestamp=new Date}}class be extends X{type;testId;hypothesisId;constructor(e,t,i){super(),this.type=3,this.testId=e,this.hypothesisId=t,this.timestamp=i}}class Se extends X{type;path;constructor(e){super(),this.type=4,this.path=e}}class Ce extends X{type;cart;constructor(e){super(),this.type=5,this.cart=e}}class ie extends Error{isBot;constructor(){super(),this.isBot=!0}}function Te(a,e,t){for(const i of e.selectors){const s=a.querySelectorAll(i.cssSelector);for(let r=0;r<s.length;r++)t(e.testId,e.hypothesisId)}re(a,e,(i,s,r,o,n)=>n(s,r),t)}function U(a,e,t){for(const i of e.selectors)ne(a,e.testId,e.hypothesisId,i,t??(()=>{}));re(a,e,ne,t??(()=>{}))}function se(a){return a.urlPatterns.reduce((e,t)=>{switch(t.operator){case"contains":return e+`.*${t}.*`;case"endsWith":return e+`.*${t}`;case"startsWith":return e+`${t}.*`}},"")}function re(a,e,t,i){new MutationObserver(()=>{for(const r of e.selectors)t(a,e.testId,e.hypothesisId,r,i)}).observe(a.documentElement,{childList:!0,subtree:!0})}function ne(a,e,t,i,s){const r=a.querySelectorAll(i.cssSelector);for(let o=0;o<r.length;o++){let n=r.item(o);if(n instanceof HTMLElement&&n.dataset.shoplift!==""){n.dataset.shoplift="";for(const l of i.actions.sort(Re))n=Ie(a,i.cssSelector,n,l)}}return r.length>0&&s?(s(e,t),!0):!1}function Ie(a,e,t,i){switch(i.type){case"innerHtml":t.innerHTML=i.value;break;case"attribute":Pe(t,i.scope,i.value);break;case"css":Ae(a,e,i.value);break;case"js":ke(a,t,i);break;case"copy":return Ee(t);case"remove":xe(t);break;case"move":_e(t,parseInt(i.value));break}return t}function Pe(a,e,t){a.setAttribute(e,t)}function Ae(a,e,t){const i=a.createElement("style");i.innerHTML=`${e} { ${t} }`,a.getElementsByTagName("head")[0]?.appendChild(i)}function ke(a,e,t){Function("document","element",`"use strict"; ${t.value}`)(a,e)}function Ee(a){const e=a.cloneNode(!0);if(!a.parentNode)throw"Can't copy node outside of DOM";return a.parentNode.insertBefore(e,a.nextSibling),e}function xe(a){a.remove()}function _e(a,e){if(e===0)return;const t=Array.prototype.slice.call(a.parentElement.children).indexOf(a),i=Math.min(Math.max(t+e,0),a.parentElement.children.length-1);a.parentElement.children.item(i).insertAdjacentElement(e>0?"afterend":"beforebegin",a)}function Re(a,e){return oe(a)-oe(e)}function oe(a){return a.type==="copy"||a.type==="remove"?0:1}
36const M={Template:0,UrlRedirect:2,Script:3,Price:5},De="data:image/svg+xml,%3csvg%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M9.96001%207.90004C9.86501%207.90004%209.77001%207.86504%209.69501%207.79004L6.43501%204.53004C6.19501%204.29004%205.80501%204.29004%205.56501%204.53004L2.30501%207.79004C2.16001%207.93504%201.92001%207.93504%201.77501%207.79004C1.63001%207.64504%201.63001%207.40504%201.77501%207.26004L5.03501%204.00004C5.56501%203.47004%206.43001%203.47004%206.96501%204.00004L10.225%207.26004C10.37%207.40504%2010.37%207.64504%2010.225%207.79004C10.15%207.86004%2010.055%207.90004%209.96001%207.90004Z'%20fill='white'/%3e%3c/svg%3e",Oe="data:image/svg+xml,%3csvg%20width='14'%20height='24'%20viewBox='0%200%2014%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M12.3976%2014.5255C12.2833%2013.8788%2012.0498%2013.3024%2011.6952%2012.7961C11.3416%2012.2898%2010.9209%2011.8353%2010.4353%2011.4317C9.94868%2011.0291%209.43546%2010.6488%208.89565%2010.292C8.48487%2010.049%208.09577%209.78565%207.72637%209.50402C7.35697%209.2224%207.08016%208.89503%206.89694%208.51987C6.71273%208.14471%206.67826%207.69533%206.79055%207.1697C6.86345%206.83216%206.97476%206.54647%207.12351%206.31162C7.27324%206.07778%207.47124%205.89986%207.7175%205.77684C7.96377%205.65483%208.21989%205.59383%208.48389%205.59383C8.88087%205.59383%209.17639%205.7016%209.3734%205.91714C9.56943%206.13268%209.68271%206.42345%209.71424%206.78946C9.74576%207.15547%209.72015%207.55401%209.63839%207.98509C9.55663%208.41617%209.43645%208.84724%209.27687%209.27934L13.5127%208.80149C13.9638%207.52656%2014.1017%206.42447%2013.9264%205.49725C13.751%204.56901%2013.2664%203.85122%2012.4724%203.34491C12.239%203.19648%2011.9779%203.07041%2011.6893%202.96569L12.0026%201.50979L9.86397%200L7.3875%201.50979L7.11169%202.78878C6.65166%202.8874%206.21724%203.01957%205.8114%203.19038C4.85292%203.594%204.06684%204.15115%203.45117%204.86385C2.83452%205.57655%202.42571%206.40108%202.22378%207.33847C2.06616%208.06947%202.04942%208.70796%202.17551%209.25087C2.30061%209.7948%202.52028%2010.2828%202.8355%2010.7139C3.14974%2011.145%203.51816%2011.5344%203.93977%2011.881C4.36039%2012.2288%204.782%2012.5521%205.20164%2012.851C5.68334%2013.1702%206.13844%2013.5169%206.56497%2013.8921C6.99052%2014.2672%207.31954%2014.7125%207.55004%2015.228C7.78055%2015.7445%207.81502%2016.3769%207.65347%2017.1262C7.56482%2017.5389%207.43676%2017.8765%207.27028%2018.1388C7.10381%2018.4011%206.89596%2018.5983%206.64772%2018.7295C6.3985%2018.8606%206.12071%2018.9267%205.8114%2018.9267C5.21641%2018.9267%204.79776%2018.6034%204.62833%2018.1632C4.4589%2017.7229%204.47367%2017.2583%204.60075%2016.5639C4.72782%2015.8705%205.05092%2015.1395%205.37107%2014.3699H1.17665C1.17665%2014.3699%200.207341%2016.1115%200.0310135%2017.6762C-0.0655232%2018.5302%200.0635208%2019.2653%200.41519%2019.8844C0.76686%2020.5036%201.33032%2020.9814%202.10655%2021.319C2.39222%2021.443%202.7104%2021.5447%203.05813%2021.623L2.54589%2024H7.17473L7.7047%2021.5386C8.08493%2021.442%208.43857%2021.3231%208.76562%2021.1787C9.73985%2020.7476%2010.52%2020.1427%2011.1071%2019.3649C11.6932%2018.5871%2012.0873%2017.7291%2012.2892%2016.7917C12.4744%2015.9295%2012.5099%2015.1741%2012.3966%2014.5275L12.3976%2014.5255Z'%20fill='white'/%3e%3c/svg%3e";async function Ve(a){let e=a.replace(/-/g,"+").replace(/_/g,"/");for(;e.length%4;)e+="=";const t=atob(e),i=Uint8Array.from(t,o=>
36o.charCodeAt(0)),s=new Blob([i]).stream().pipeThrough(new DecompressionStream("gzip")),r=await new Response(s).text();return JSON.parse(r)}function F(a,e){return typeof e=="string"&&/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+(?:Z|[+-]\d+)/.test(e)?new Date(e):e}function ee(a,e){return e}function q(a,e=!1,t=!1,i=","){const s=a/100;if(t){const o=Math.round(s).toLocaleString("en-US");return i!==","?o.replace(/,/g,i):o}else{const r=e?",":".",o=s.toFixed(2).split("."),n=parseInt(o[0],10),l=o[1]??"00",c=n.toLocaleString("en-US");return i!==","?`${c.replace(/,/g,i)}${r}${l}`:e?`${c.replace(/,/g,".")}${r}${l}`:`${c}${r}${l}`}}function H(a,e,t,i){const s=e.replace("{{amount}}",q(a,!1,!1)).replace("{{amount_no_decimals}}",q(a,!1,!0)).replace("{{amount_with_comma_separator}}",q(a,!0,!1)).replace("{{amount_no_decimals_with_comma_separator}}",q(a,!0,!0)).replace("{{amount_with_space_separator}}",q(a,!1,!1," ")).replace("{{amount_no_decimals_with_space_separator}}",q(a,!1,!0," ")).replace("{{amount_with_apostrophe_separator}}",q(a,!1,!1,"'")).replace("{{amount_no_decimals_with_apostrophe_separator}}",q(a,!1,!0,"'")).replace("{{amount_with_period_and_space_separator}}",q(a,!1,!1,". ")).replace("{{amount_no_decimals_with_period_and_space_separator}}",q(a,!1,!0,". "));return i?`${s} ${t}`:s}function ae(a){return a.replace(/[^\d.,\s-]/g,"").trim()}function j(a){const e=new Map;for(const[t,i,s]of a.variants)e.set(t,{priceInCents:i,compareAtPriceInCents:s});return e}function Le(a,e,t,i){const{priceInCents:s,compareAtPriceInCents:r}=t,{moneyFormat:o,currency:n,currencyCodeEnabled:l}=i;if(a.getAttribute("data-sl-attribute-p")===e)a.innerHTML=H(s,o,n,l);else if(a.getAttribute("data-sl-attribute-cap")===e)r<=0||r<=s?a.remove():a.innerHTML=H(r,o,n,l);else if(a.getAttribute("data-sl-attribute-discount")===e&&!(r<=0||r<=s)){const d=Math.round((r-s)/r*100),u=ae(H(r-s,o,n,!1)),h=a.getAttribute("data-sl-format")||"percent";h==="percent"?a.textContent=`-${d}%`:h==="amount"?a.textContent=`-${u}`:h==="both"&&(a.textContent=`-${d}% (-${u})`)}}function $e(a){const e=[],t={id:"url-pattern",operator:"contains",value:"/"};for(const[i,s,r]of a.variants){e.push({id:`p-${i}`,cssSelector:`[data-sl-attribute-p="${i}"]`,urlPatterns:[t],actions:[{id:`p-action-${i}`,type:"innerHtml",scope:"price",value:H(s,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]});const o=r<=0||r<=s;if(e.push({id:`cap-${i}`,cssSelector:`[data-sl-attribute-cap="${i}"]`,urlPatterns:[t],actions:[{id:`cap-action-${i}`,type:o?"remove":"innerHtml",scope:"compare-at-price",value:o?"":H(r,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]}),!o&&r>s){const n=Math.round((r-s)/r*100),l=ae(H(r-s,a.moneyFormat,a.currency,!1));e.push({id:`d-${i}`,cssSelector:`[data-sl-attribute-discount="${i}"]`,urlPatterns:[t],actions:[{id:`d-action-${i}`,type:"js",scope:null,value:`var format = element.getAttribute('data-sl-format') || 'percent'; if (format === 'percent') { element.textContent = '-${n}%'; } else if (format === 'amount') { element.textContent = '-${l}'; } else if (format === 'both') { element.textContent = '-${n}% (-${l})'; }`}]})}}return e}const Me=a=>{let e=5381;for(let t=0;t<a.length;t++)e=(e*33^a.charCodeAt(t))>>>0;return e.toString(36)},qe=()=>Math.random().toString(36).slice(2,10)+Date.now().toString(36).slice(-4),He=a=>btoa(JSON.stringify(a)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""),K=a=>a.replace(/#slr-[a-z0-9]+$/,""),tt="modulepreload",it=function(a){return"/"+a},st={},Ne=function(e,t,i){let s=Promise.resolve();function r(o){const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=o,window.dispatchEvent(n),!n.defaultPrevented)throw o}return s.then(o=>{for(const n of o||[])n.status==="rejected"&&r(n.reason);return e().catch(r)})};function le(a,e,t){const i=t?a.plans.filter(c=>!c.variantId||c.variantId===t):a.plans,s=[],r=[];for(const c of i)c.direction==="decrease"?(s.push(c.existingShopifyPlanId),r.push(c.createdShopifyPlanId)):(s.push(c.createdShopifyPlanId),r.push(c.existingShopifyPlanId));const o=e?s:r,n=e?r:s;if(t)for(const c of a.plans)for(const d of[c.existingShopifyPlanId,c.createdShopifyPlanId])d&&!o.includes(d)&&!n.includes(d)&&n.push(d);const l={};for(let c=0;c<n.length;c++){const d=n[c],u=o[c];d&&u&&(l[d]=u)}return{showPlanIds:o,hidePlanIds:n,swapMap:l}}function ce(a,e,t){const i=e?a.plans.find(r=>r.variantId===e):void 0;if(i)return i.direction;if(t){const r=a.plans.find(o=>o.productId===t);if(r)return r.direction}return a.plans.find(r=>!r.variantId)?.direction??null}function J(a,e){const t=e?a.plans.filter(r=>!r.productId||r.productId===e):a.plans,i={};for(const r of t)i[r.existingShopifyPlanId]=r.existingDiscountAmount,i[r.createdShopifyPlanId]=r.existingDiscountAmount;
36const s=Math.max(...Object.values(i),0);return{discountMap:i,maxDiscount:s}}function W(a){const e=document.querySelector('form[action*="/cart/add"] input[name="product-id"]')?.value;if(e)return e;if(a){for(const r of Array.from(document.querySelectorAll("[data-sl-attribute-p]"))){const o=r.getAttribute("data-sl-attribute-p");if(!o)continue;const n=a.variants.find(l=>l[0]===o);if(n?.[3])return n[3]}const s=document.querySelector('form[action*="/cart/add"] input[name="id"]')?.value;if(s){const r=a.variants.find(o=>o[0]===s);if(r?.[3])return r[3]}}const t=window,i=t.ShopifyAnalytics?.meta?.product?.id??t.meta?.product?.id;return i!=null?String(i):null}function D(a,e){return a.widget.selectors[e]??[]}function N(a,e){return a.replace(/[\d.]+%/,`${e}%`)}function $(a,e){const t=document.createTreeWalker(a,NodeFilter.SHOW_TEXT);let i=t.nextNode();for(;i;){if(i.nodeValue!==null){const s=e(i.nodeValue);if(s!==i.nodeValue){i.nodeValue=s;return}}i=t.nextNode()}}function de(a,e){return a===null?!1:a==="decrease"?!e:e}async function Ue(a){if(a.subscriptionSwapDone)return;const e=a.getActiveAssignment();if(!e)return;const t=a.getHypothesis(e.hypothesisId);if(!t?.subscriptionData)return;a.subscriptionSwapDone=!0;const i=t.subscriptionData,s=t.isControl,r=[...new Set(i.plans.map(d=>d.direction))].join(",");a.log(`[SUB-SWAP] ${s?"A":"B"} side, directions=${r}`);const o=i.plans.some(d=>d.variantId);let n=!1,l=!1;function c(){if(!l){l=!0;try{const d=o?document.querySelector("select[name='id'], input[name='id']")?.value:void 0,{showPlanIds:u,hidePlanIds:h,swapMap:p}=le(i,s,d);a.swapMap=p;const b=D(i,"widgetParent"),E=D(i,"subscriptionPlans"),S=D(i,"subscriptionInput");if(!b.length||!E.length||!S.length)return;const C=document.querySelector(b[0].selector);if(!C?.shadowRoot)return;const _=C.shadowRoot.querySelector(E[0].selector);if(!_?.shadowRoot)return;const T=S[0].selector;let m=null;if(i.widget.widgetType==="buttons"||i.widget.widgetType==="radio"){const y=Array.from(_.shadowRoot.querySelectorAll(T));if(!y.length)return;for(const v of y){const g=v.closest("label");g&&(u.includes(v.value)?g.style.display="":h.includes(v.value)&&(g.style.display="none"))}const w=y.some(v=>u.includes(v.value)&&v.checked),I=y.some(v=>h.includes(v.value)&&v.checked);if((w||I)&&(n=!1),!w&&!n){n=!0;for(const v of y)if(u.includes(v.value)){v.closest("label")?.click(),v.dispatchEvent(new Event("change",{bubbles:!0}));break}}const f=y.find(v=>v.checked);m=f&&u.includes(f.value)?f.value:u[0]??null}else if(i.widget.widgetType==="dropdown"){const y=_.shadowRoot.querySelector("select");if(!y)return;for(const w of Array.from(y.options))h.includes(w.value)&&(w.style.display="none",w.disabled=!0);if(h.includes(y.value)){const w=Array.from(y.options).find(I=>u.includes(I.value));w&&(y.value=w.value,y.dispatchEvent(new Event("change",{bubbles:!0})))}m=u.includes(y.value)?y.value:u[0]??null}if(m){const y=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const w of y)w.value!==m&&(w.value=m)}}finally{l=!1}}}if(a.subscriptionHideWrongPlans=c,a.swapMap=le(i,s).swapMap,c(),o){const d=document.querySelector("select[name='id'], input[name='id']");d&&d.addEventListener("change",c)}}function B(a){const e=D(a,"widgetParent");return e.length?document.querySelector(e[0].selector)?.shadowRoot??null:null}function Y(a,e){const t=D(a,"subscriptionPlans");return t.length?e.querySelector(t[0].selector)?.shadowRoot??null:null}function Z(a,e){const t=new URLSearchParams(window.location.search).get("variant");if(t)return t;{const i=document.querySelector('form[action*="/cart/add"] input[name="id"]')?.value;if(i)return i}return a.size>0?[...a.keys()][0]:void 0}function G(a,e){return H(a,e.moneyFormat,e.currency,e.currencyCodeEnabled)}function Fe({originalFetch:a,swapMap:e,slptValue:t,getSelectedPlanId:i,log:s}){if(window.fetch.__shoplift_intercepted)return s("[SUB-INTERCEPT] already installed â skipping"),()=>{};function r(n){if(i){const l=i();if(l)return e[l]??l}return e[n]??n}const o=function(n,l){if((typeof n=="string"?n:n instanceof URL?n.href:n.url).includes("/cart/add")&&l?.body)try{if(l.body instanceof FormData){const d=l.body.get("selling_plan");d?l.body.set("selling_plan",r(String(d))):(!d||d==="")&&t&&l.body.set("properties[_slpt]",t)}
36else if(typeof l.body=="string"){const d=JSON.parse(l.body);if(d.items)for(const u of d.items){const h=String(u.selling_plan??"");h?u.selling_plan=r(h):!u.selling_plan&&t&&(u.properties||(u.properties={}),u.properties._slpt=t)}else if(d.id){const u=String(d.selling_plan??"");u?d.selling_plan=r(u):!d.selling_plan&&t&&(d.properties||(d.properties={}),d.properties._slpt=t)}l.body=JSON.stringify(d)}}catch(d){s("[SUB-INTERCEPT] body parse failed; cart-add proceeds with un-swapped plan",d)}return a.call(window,n,l)};return o.__shoplift_intercepted=!0,window.fetch=o,function(){window.fetch===o&&(window.fetch=a)}}function Be({log:a}){if(window.fetch.__shoplift_intercepted)return a("[SUB-PREVIEW-BLOCK] already installed â skipping"),()=>{};const e=window.fetch,t=function(i,s){const r=typeof i=="string"?i:i instanceof URL?i.href:i.url;return r.includes("/cart/add")?(a("[SUB-PREVIEW-BLOCK] cart-add blocked in preview mode",{url:r}),Promise.resolve(new Response(JSON.stringify({id:0,properties:{},quantity:0,variant_id:0,key:"preview",title:"Preview â cart-add blocked",price:0,original_price:0,line_price:0,original_line_price:0,total_discount:0,discounts:[],preview:!0}),{status:200,headers:{"Content-Type":"application/json"}}))):e.call(window,i,s)};return t.__shoplift_intercepted=!0,window.fetch=t,function(){window.fetch===t&&(window.fetch=e)}}function pe({data:a,runUpdates:e,debounceMs:t=150}){let i=null;function s(){i&&clearTimeout(i),e(),i=setTimeout(e,t)}let r=null;const o=[],n={childList:!0,subtree:!0,characterData:!0,attributes:!0};function l(h){for(const p of o)p.disconnect();o.length=0;for(const p of Array.from(h.querySelectorAll("*")))if(p.shadowRoot){const b=new MutationObserver(s);b.observe(p.shadowRoot,n),o.push(b)}}function c(){const h=B(a);return h?(r&&r.disconnect(),l(h),r=new MutationObserver(p=>{p.some(b=>b.type==="childList"&&b.addedNodes.length>0)&&l(h),s()}),r.observe(h,n),!0):!1}const d=document.body||document.documentElement,u=new MutationObserver(()=>{c()&&s()});return u.observe(d,{childList:!0,subtree:!0}),c()&&s(),e(),function(){i&&(clearTimeout(i),i=null),u.disconnect(),r&&(r.disconnect(),r=null);for(const p of o)p.disconnect();o.length=0}}async function ze(a){if(a.subscriptionPriceDone)return;const e=a.getActiveAssignment(),t=e?a.getHypothesis(e.hypothesisId):void 0,i=t?.subscriptionData?null:a.findActiveSubscriptionTestControl(),s=t?.subscriptionData?t:i?.hypothesis;if(!s?.subscriptionData)return;const r=t?.subscriptionData?e.testId:i.testId;a.subscriptionPriceDone=!0;const o=s.subscriptionData,n=s.isControl,l=s.priceData,c=o.widget.widgetType;let d=W(l),u=J(o,d),h=u.discountMap,p=u.maxDiscount;function b(){const g=W(l);g!==d&&(d=g,u=J(o,d),h=u.discountMap,p=u.maxDiscount,a.log(`[SUB-PRICE] scope refreshed side=${n?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${p}`))}a.log(`[SUB-PRICE] side=${n?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${p}`),a.updatePriceTestHiddenInputs(r,n?"control":"variant",!1);function E(){if(!l)return null;const g=j(l),P=Z(g),A=ce(o,P,d);if(!de(A,n))return null;const k=P?g.get(P):void 0;return k?{formattedVariantPrice:G(k.priceInCents,l),formattedDiscounted:G(k.priceInCents*(1-p/100),l)}:null}Fe({originalFetch:a.fetch,swapMap:a.swapMap??{},slptValue:a.slptValue??void 0,log:a.log,getSelectedPlanId:()=>{const g=B(o);if(!g)return null;const P=Y(o,g);if(!P)return null;const A=D(o,"subscriptionInput"),k=A.length?A[0].selector:'input[name="rc_plan"]';return P.querySelector(`${k}:checked`)?.value??null}});function S(g){const P=D(o,"subscriptionDiscount");for(const A of P)if(A.selector.includes("badge")||A.selector.includes("__badge")){const k=g.querySelector(A.selector);k?.textContent&&!k.textContent.includes(`${p}%`)&&$(k,x=>N(x,p))}}function C(g){const P=E();if(!P)return;const A=D(o,"subscriptionCompareAt");for(const k of A){const x=g.querySelector(k.selector)||g.querySelector(`[part~="${k.selector}"]`);x?.textContent&&!x.textContent.includes(P.formattedVariantPrice)&&$(x,R=>/\d/.test(R)?P.formattedVariantPrice:R)}}function _(g,P){const A=D(o,"subscriptionCompareAt"),k=P===0?"none":"";for(const x of A){const R=g.querySelector(x.selector)||g.querySelector(`[part~="${x.selector}"]`);R&&(k==="none"?R.style.display!=="none"&&(R.style.display="none"):R.style.display==="none"&&(R.style.display=""))}}function T(g){const P=D(o,"subscriptionInput"),A=P.length?P[0].selector:'input[name="rc_plan"]',k=D(o,"subscriptionPlanDiscount"),x=k.length?k[0].selector:".rc-plans-button__discount";for(const R of Array.from(g.querySelectorAll("label"))){const V=R.querySelector(A),O=R.querySelector(x);if(V&&O){const L=h[V.value];if(L!==void 0){if(L===0)O.style.display!=="none"&&(O.style.display="none");else if(O.style.display==="none"&&(O.style.display=""),O.textContent){const Q=O.textContent.match(/[\d.]+%/)?.[0];Q&&Q!==`${L}%`&&$(O,et=>N(et,L))}}}}}function m(g){const P=g.querySelector("select");if(P)for(const A of Array.from(P.options)){const k=h[A.value];if(k!==void 0&&A.textContent){const x=A.textContent.match(/[\d.]+%/)?.[0];x&&x!==`${k}%`&&(A.textContent=N(A.textContent,k))}}}function y(g,P){const k=D(o,"subscriptionDiscount").filter(x=>x.selector.includes("benefit")||x.selector==="rc-benefits");for(const x of k){const R=g.querySelector(x.selector);if(R?.shadowRoot){for(const V of Array.from(R.shadowRoot.querySelectorAll("li")))if(V.textContent?.includes("Save")){const O=V;if(P===0)O.style.display!=="none"&&(O.style.display="none");else{O.style.display==="none"&&(O.style.display="");const L=V.textContent.match(/[\d.]+%/)?.[0];L&&L!==`${P}%`&&$(V,Q=>N(Q,P))}}}}}let w=!1;function I(){if(!w){w=!0;try{if(b(),d!==null&&Object.keys(h).length===0)return;const g=B(o);if(!g)return;S(g),l&&C(g);const P=Y(o,g);let A=p;if(P){const k=D(o,"subscriptionInput"),x=k.length?k[0].selector:'input[name="rc_plan"]',R=P.querySelector(`${x}:checked`);if(R){const V=h[R.value];V!==void 0&&(A=V)}c==="buttons"||c==="radio"?T(P):m(P)}_(g,A),y(g,A)}finally{w=!1}}}function f(){const g=E();if(!g)return;const P=B(o);if(!P)return;const A=D(o,"onetimeToggle"),k=A.length?A[0].selector:'input[value="onetime"]';if(!P.querySelector(k)?.checked)return;const R=D(o,"subscriptionPrice");for(const V of R){const O=P.querySelector(V.selector)||P.querySelector(`[part~="${V.selector}"]`);O?.textContent&&!O.textContent.includes(g.formattedDiscounted)&&$(O,L=>/\d/.test(L)?g.formattedDiscounted:L)}}function v(){a.subscriptionHideWrongPlans&&a.subscriptionHideWrongPlans(),I(),a.subscriptionUpdateOneTime&&a.subscriptionUpdateOneTime(),f()}pe({data:o,runUpdates:v})}async function We(a){if(a.subscriptionOneTimeDone)return;const e=a.getActiveAssignment(),t=e?a.getHypothesis(e.hypothesisId):void 0,i=!!(t?.subscriptionData&&t.priceData),s=i?null:a.findActiveSubscriptionTestControl(),r=i?t:s?.hy
36pothesis;if(!r?.subscriptionData||!r.priceData)return;const o=i?e.testId:s.testId;a.subscriptionOneTimeDone=!0;const n=r.subscriptionData,l=r.priceData,c=j(l),d=r.isControl,u=d?"control":"variant";a.slptValue=`${o}:${u}:f`,a.updatePriceTestHiddenInputs(o,u,!1);function h(){const p=B(n);if(!p)return;const b=Z(c);if(!b)return;const E=W(l),S=ce(n,b,E);if(!de(S,d))return;const C=c.get(b);if(!C)return;const _=H(C.priceInCents,l.moneyFormat,l.currency,l.currencyCodeEnabled),T=D(n,"onetimePrice");if(!T.length)return;const m=D(n,"onetimeContainer"),y=m.length?m[0].selector:'[part~="rc-purchase-option__onetime"]',I=p.querySelector(y)??p;for(const f of T){let v=null;try{v=I.querySelector(f.selector)}catch{v=null}v??=I.querySelector(`[part~="${f.selector}"]`),v&&v.textContent&&!v.textContent.includes(_)&&$(v,g=>/\d/.test(g)?_:g)}}a.subscriptionUpdateOneTime=h,h()}async function Ge(a,e){const{subscriptionPreviewRender:t}=await Ne(async()=>{const{subscriptionPreviewRender:i}=await Promise.resolve().then(()=>Xe);return{subscriptionPreviewRender:i}},void 0);return t(a.subscriptionData,a.priceData,a.isControl,e)}function je(a,e){const t=a.widget.selectors.widgetParent??[],i=a.widget.selectors.subscriptionPlans??[],s=a.widget.selectors.subscriptionInput??[];if(!t.length||!i.length||!s.length){e("[SUB-GLOBAL-HIDE] Missing required selectors â skipping");return}const r=t[0].selector,o=i[0].selector,n=s[0].selector;let l=!1,c=null,d=!1;function u(){if(!d){d=!0;try{h()}finally{d=!1}}}function h(){const C=document.querySelector(r);if(!C?.shadowRoot)return;const _=C.shadowRoot.querySelector(o);if(!_?.shadowRoot)return;_.shadowRoot!==c&&(c=_.shadowRoot,l=!1);let T=0;if(a.widget.widgetType==="buttons"||a.widget.widgetType==="radio"){const m=Array.from(_.shadowRoot.querySelectorAll(n));for(const f of m)if(a.planIds.includes(f.value)){f.disabled||(f.disabled=!0);const v=f.closest("label");v&&v.style.display!=="none"&&(v.style.display="none",T++)}const y=m.filter(f=>!a.planIds.includes(f.value));if(!y.some(f=>f.checked)&&!l&&y.length>0){l=!0;const f=y[0];f.closest("label")?.click(),f.dispatchEvent(new Event("change",{bubbles:!0})),e(`[SUB-GLOBAL-HIDE] Preselected first visible plan input=${f.value}`)}const I=y.find(f=>f.checked)??y[0];if(I){const f=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const v of f)v.value!==I.value&&(v.value=I.value,e(`[SUB-GLOBAL-HIDE] Mirrored plan id ${I.value} to form selling_plan input`))}}else if(a.widget.widgetType==="dropdown"){const m=_.shadowRoot.querySelector("select");if(!m)return;for(const I of Array.from(m.options))a.planIds.includes(I.value)&&(I.style.display!=="none"&&(I.style.display="none"),I.disabled||(I.disabled=!0),T++);const y=Array.from(m.options).filter(I=>!a.planIds.includes(I.value)),w=y.some(I=>I.value===m.value);y.length>0&&!w&&!l&&(l=!0,m.value=y[0].value,m.dispatchEvent(new Event("change",{bubbles:!0})),e(`[SUB-GLOBAL-HIDE] Preselected first visible option=${y[0].value}`))}T>0&&e(`[SUB-GLOBAL-HIDE] Hidden ${T} B-side plan buttons`)}const p={childList:!0,subtree:!0,characterData:!0};let b=null;function E(C){b?.disconnect(),b=new MutationObserver(()=>u()),b.observe(C,p)}function S(){const C=document.querySelector(r);if(!C?.shadowRoot)return!1;u(),new MutationObserver(()=>{u();const m=C.shadowRoot.querySelector(o);m?.shadowRoot&&E(m.shadowRoot)}).observe(C.shadowRoot,p);const T=C.shadowRoot.querySelector(o);return T?.shadowRoot&&E(T.shadowRoot),!0}if(!S()){e("[SUB-GLOBAL-HIDE] Widget not in DOM yet â waiting via MutationObserver");const C=new MutationObserver(()=>{S()&&C.disconnect()});C.observe(document.body??document.documentElement,{childList:!0,subtree:!0})}}const ue="Limited preview",Ke="Add-to-cart and checkout prices won't reflect this test until it launches â test selling plans are not created in your subscription app until after a test is launched.",Je=5e3;function Ye(){const a=document.createElement("div");a.id="shoplift-preview-subscription-warning";const e=document.createElement("span");e.id="shoplift-preview-subscription-warning__icon",e.setAttribute("aria-hidden","true"),e.textContent="!";const t=document.createElement("span");t.id="shoplift-preview-subscription-warning__label",t.textContent=ue;const i=document.createElement("div");i.id="shoplift-preview-subscription-warning__tooltip",i.setAttribute("role","tooltip"),i.textContent=Ke,a.appendChild(e),a.appendChild(t),a.appendChild(i),a.setAttribute("tabindex","0"),a.setAttribute("aria-describedby",i.id),a.setAttribute("aria-label",ue);let s=null;function r(){s!==null&&(clearTimeout(s),s=null)}function o(){i.classList.add("shoplift-preview-subscription-warning__tooltip--visible")}function n(){i.classList.remove("shoplift-preview-subscription-warning__tooltip--visible")}function l(){o(),r(),s=setTimeout(()=>{n(),s=null},Je)}function c(){r(),o()}function d(){s===null&&n()}a.addEventListener("mouseenter",c),a.addEventListener("mouseleave",d),a.addEventListener("focus",c),a.addEventListener("blur",d);function u(p){try{const b=p.target;if(!(b instanceof Element))return;(b.closest('form[action*="/cart/add"] button[type="submit"], form[action*="/cart/add"] input[type="submit"]')!==null||b.closest('[name="add"], button[name="add"], [data-add-to-cart], button[data-add-to-cart]')!==null)&&l()}catch{}}
36document.addEventListener("click",u,!0);function h(){r(),document.removeEventListener("click",u,!0),a.removeEventListener("mouseenter",c),a.removeEventListener("mouseleave",d),a.removeEventListener("focus",c),a.removeEventListener("blur",d),a.remove()}return{root:a,tooltip:i,cleanup:h}}let he=!1;class Ze{DATA_SL_ATTRIBUTE_P="data-sl-attribute-p";DATA_SL_TEST_ID="data-sl-test-id";VIEWPORT_TRACK_THRESHOLD=.5;temporarySessionKey="Shoplift_Session";essentialSessionKey="Shoplift_Essential";analyticsSessionKey="Shoplift_Analytics";priceSelectorsSessionKey="Shoplift_PriceSelectors_v2";shop;host;eventHost;disableReferrerOverride;legacySessionKey;cssHideClass;testConfigs;inactiveTestConfigs;hiddenSubscriptionPlans;testsFilteredByAudience;sendPageView;shopliftDebug;gaConfig;telemetryEnabled;getCountryTimeout;geoViaShopify;resolvedRegion=null;state;subscriptionPreviewWarningCleanup=null;shopifyAnalyticsId;cookie=document.cookie;isSyncing=!1;isSyncingGA=!1;fetch;localStorageSet;localStorageGet;sessionStorageSet=window.sessionStorage.setItem.bind(window.sessionStorage);sessionStorageGet=window.sessionStorage.getItem.bind(window.sessionStorage);urlParams=new URLSearchParams(window.location.search);device;logHistory;activeViewportObservers=new Map;clientIdRetryCount=0;constructor(e,t,i,s,r,o,n,l,c,d,u,h,p,b=!1){this.shop=e,this.host=t,this.eventHost=i,this.disableReferrerOverride=l,this.logHistory=[],this.legacySessionKey=`SHOPLIFT_SESSION_${this.shop}`,this.cssHideClass=s?"shoplift-hide":"",this.testConfigs=u.map(S=>({...S,startAt:new Date(S.startAt),statusHistory:S.statusHistory.map(C=>({...C,createdAt:new Date(C.createdAt)}))})),this.inactiveTestConfigs=h,this.hiddenSubscriptionPlans=p,this.sendPageView=!!r,this.shopliftDebug=o===!0,this.telemetryEnabled=c===!0,this.geoViaShopify=b===!0,this.gaConfig=n!=={"sendEvents":false,"mode":"gtag"}?n:{sendEvents:!1},this.fetch=window.fetch.bind(window),this.localStorageSet=window.localStorage.setItem.bind(window.localStorage),this.localStorageGet=window.localStorage.getItem.bind(window.localStorage);const E=this.getDeviceType();this.device=E!=="tablet"?E:"mobile",this.state=this.loadState(),this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.testsFilteredByAudience=u.filter(S=>
36S.status=="active"),this.getCountryTimeout=d===1000?1e3:d,window.__slReadCookie=S=>{const C=this.getCookie(S);if(C===null)return null;try{return decodeURIComponent(C)}catch{return C}},this.log("State Loaded",JSON.stringify(this.state))}deriveCategoryFromExistingTests(){if(!this.state.temporary.testCategory&&this.state.essential.visitorTests.length>0){const e=this.state.essential.visitorTests.some(t=>{if(!t.hypothesisId)return!1;const i=this.getHypothesis(t.hypothesisId);return i&&["theme","basicScript","price"].includes(i.type)});this.state.temporary.testCategory=e?"global":"conditional",this.persistTemporaryState(),this.log("Derived test category from existing visitorTests: %s",this.state.temporary.testCategory)}}async init(){try{if(this.log("Shoplift script initializing"),window.Shopify&&window.Shopify.designMode){this.log("Skipping script for design mode");return}if(window.location.href.includes("slScreenshot=true")){this.log("Skipping script for screenshot");return}if(window.location.hostname.endsWith(".edgemesh.com")){this.log("Skipping script for preview");return}if(window.location.href.includes("isShopliftMerchant")){const o=this.urlParams.get("isShopliftMerchant")==="true";this.log("Setting merchant session to %s",o),this.state.temporary.isMerchant=o,this.persistTemporaryState()}if(this.state.temporary.isMerchant){this.log("Setting up preview for merchant"),typeof window.shoplift!="object"&&this.setShopliftStub(),this.state.temporary.previewConfig||this.hidePage(),await this.initPreview(),document.querySelector("#sl-preview-bar-hide")?.remove();return}if(this.state.temporary.previewConfig=void 0,we(navigator.userAgent))return;const e=Date.now(),t=!this.state.temporary.lastSeen||e-this.state.temporary.lastSeen>1800*1e3;(!this.state.temporary.entryPage||t)&&(this.state.temporary.entryPage=K(window.location.href)),this.state.temporary.lastSeen=e,this.persistTemporaryState(),window.__slEntryPage=this.state.temporary.entryPage??"";const i=this.state.essential.visitorTests.filter(o=>o.hypothesisId&&+o.createdAt>Date.now()-6e4);if(i.length===0)this.sendDiagnosticTelemetry("page-landed",null);else for(const o of i)this.sendDiagnosticTelemetry("page-landed",o.testId,{hypothesisId:o.hypothesisId,isControl:o.assignedTo==="control",testType:o.testType??"unknown"});if(navigator.userAgent.includes("Chrome/118")){this.log("Random: %o",[Math.random(),Math.random(),Math.random()]);const o=await this.makeRequest({url:`${this.eventHost}/api/v0/events/ip`,method:"get"}).then(n=>n?.json());this.log(`IP: ${o}`),this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify(this.debugState(),ee)}).catch()}if(this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.monitorConsentChange(),this.checkForThemePreview())return;if(!this.disableReferrerOverride&&this.state.temporary.originalReferrer!=null){this.log(`Overriding referrer from '${document.referrer}' to '${this.state.temporary.originalReferrer}'`);const o=this.state.temporary.originalReferrer;delete this.state.temporary.originalReferrer,this.persistTemporaryState(),Object.defineProperty(document,"referrer",{get:()=>o,enumerable:!0,configurable:!0})}if(await this.refreshVisitor(this.shopifyAnalyticsId),await this.handleVisitorTest()){this.log("Redirecting for visitor test");return}this.setShoplift(),this.showPage(),this.ensureCartAttributesForExistingPriceTests(!1);const r=this.state.essential.visitorTests.some(o=>(o.hypothesisId?this.getHypothesis(o.hypothesisId):void 0)?.subscriptionData!=null)||Object.values(this.state.temporary.testReservations??{}).some(o=>this.getHypothesis(o.hypothesisId)?.subscriptionData!=null);this.hiddenSubscriptionPlans&&!r&&(this.log(`[SUB-GLOBAL] Visitor not in subscription test â hiding ${this.hiddenSubscriptionPlans.planIds.length} B-side plans`),je(this.hiddenSubscriptionPlans,o=>this.log(o))),await this.subscriptionSwap(),await this.subscriptionOneTimePrice(),await this.subscriptionPriceChange(),await this.finalize(),console.log("SHOPLIFT SCRIPT INITIALIZED!")}catch(e){if(e instanceof ie)return;throw e}finally{typeof window.shoplift!="object"&&this.setShopliftStub()}}getVariantColor(e){switch(e){case"a":return{text:"#141414",bg:"#E2E2E2"};case"b":return{text:"rgba(255, 255, 255, 1)",bg:"rgba(37, 99, 235, 1)"}}}getDefaultVariantTitle(e){return e.title?e.title:e.type==="price"?e.isControl?"Original prices":"Variant prices":e.isControl?"Original":"Untitled variant "+e.label.toUpperCase()}
36async initPreview(){const e=this.urlParams.get("previewConfig");if(e){this.state.temporary.previewConfig=void 0,this.log("Setting up the preview"),this.log("Found preview config, writing to temporary state");const t=await Ve(e);if(this.state.temporary.previewConfig=t,this.state.temporary.previewConfig.testTypeCategory===M.Price){this.hidePage(!0);const s=this.state.temporary.previewConfig;let r=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/${s.isDraft||!1}`;s.shopifyProductId&&(r+=`?productId=${s.shopifyProductId}`);const o=await this.makeJsonRequest({method:"get",url:r}).catch(n=>(this.log("Error getting domSelectors",n),null));if(s.variants.forEach(n=>n.domSelectors=o[n.id]?.domSelectors),s.isDraft){const n=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/subscription-preview`,l=await this.makeJsonRequest({method:"get",url:n}).catch(c=>(this.log("No subscription preview data for draft (test may not have a subscription widget)",c),null));l?.subscriptionData&&s.variants.forEach(c=>{c.subscriptionData=l.subscriptionData,c.priceData=l.priceData})}}this.persistTemporaryState();const i=new URL(window.location.toString());i.searchParams.delete("previewConfig"),this.queueRedirect(i)}else if(this.state.temporary.previewConfig){this.showPage();const t=this.state.temporary.previewConfig;if(t.testTypeCategory===M.Template&&this.handleTemplatePreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.UrlRedirect&&this.handleUrlPreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.Script&&this.handleScriptPreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.Price){const i=await this.handlePricePreview(t);t.isDraft?await this.handleSubscriptionPricePreview(t):await this.handleSubscriptionLivePreview(t),i&&this.initPreviewControls(t)}}}initPreviewControls(e){document.addEventListener("DOMContentLoaded",()=>{const t=e.variants.find(b=>b.id===e.currentVariant),i=t?.label||"a",s=e.variants,r=document.createElement("div");r.id="shoplift-preview-control";const o=document.createElement("div"),n=document.createElement("img");n.src=Oe,n.height=24,n.width=14,o.style.padding="0 16px",o.style.lineHeight="100%",o.appendChild(n),r.appendChild(o);const l=document.createElement("div");l.id="shoplift-preview-variant-selector";const c=document.createElement("button");c.id="shoplift-preview-variant-menu-trigger";const d=document.createElement("div");d.className="menu-variant-label",d.style.backgroundColor=this.getVariantColor(i).bg,d.style.color=this.getVariantColor(i).text,d.innerText=i.toUpperCase(),c.appendChild(d);const u=document.createElement("span");if(u.id="shoplift-preview-variant-title",u.innerText=t?this.getDefaultVariantTitle(t):"Untitled variant "+i.toUpperCase(),c.appendChild(u),s.length>1){const b=document.createElement("img");b.src=De,b.width=12,b.height=12,b.style.height="12px",b.style.width="12px",c.appendChild(b);const E=document.createElement("div");E.className="preview-variant-menu";for(const S of e.variants.filter(C=>C.id!==e.currentVariant)){const C=document.createElement("div");C.className="preview-variant-menu--item";const _=document.createElement("div");_.className="menu-variant-label",_.style.backgroundColor=this.getVariantColor(S.label).bg,_.style.color=this.getVariantColor(S.label).text,_.style.flexShrink="0",_.innerText=S.label.toUpperCase(),C.appendChild(_);const T=document.createElement("span");T.innerText=this.getDefaultVariantTitle(S),C.appendChild(T),C.addEventListener("click",()=>{this.pickVariant(S.id)}),E.appendChild(C)}l.appendChild(E),c.addEventListener("click",()=>{E.className!=="preview-variant-menu preview-variant-menu__visible"?E.classList.add("preview-variant-menu__visible"):E.classList.remove("preview-variant-menu__visible")}),document.addEventListener("click",S=>{S.target instanceof Element&&!c.contains(S.target)&&E.className==="preview-variant-menu preview-variant-menu__visible"&&E.classList.remove("preview-variant-menu__visible")})}else c.style.pointerEvents="none",d.style.margin="0";if(l.appendChild(c),r.appendChild(l),e.hasSubscription){this.subscriptionPreviewWarningCleanup?.();const b=Ye();r.appendChild(b.root),this.subscriptionPreviewWarningCleanup=b.cleanup}const h=document.createElement("div"),p=document.createElement("button");p.id="shoplift-exit-preview-button",p.innerText="Exit",h.appendChild(p),p.addEventListener("click",()=>{this.exitPreview()}),r.appendChild(h),document.body.appendChild(r),requestAnimationFrame(()=>{r.classList.add("visible")})}),this.ensureCartAttributesForExistingPriceTests(!0)}pickVariant(e){if(this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig,i=new URL(window.location.toString());if(t.testTypeCategory===M.UrlRedirect){const s=t.variants.find(r=>r.id===t.currentVariant)?.redirectUrl;if(i.pathname===s){const r=t.variants.find(o=>o.id===e)?.redirectUrl;r&&(i.pathname=r)}}if(t.testTypeCategory===M.Template){const s=t.variants.find(r=>r.id===t.currentVariant)?.pathName;if(s&&i.pathname===s){const r=t.variants.find(o=>o.id===e)?.pathName;r&&r!==s&&(i.pathname=r)}}t.currentVariant=e,this.persistTemporaryState(),this.queueRedirect(i)}}exitPreview(){const e=new URL(window.location.toString());if(this.state.temporary.previewConfig?.testTypeCategory===M.Template&&e.searchParams.delete("view"),this.state.temporary.previewConfig?.testTypeCategory===M.Script&&e.searchParams.delete("slVariant"),this.state.temporary.previewConfig?.testTypeCategory===M.UrlRedirect){const i=this.state.temporary.previewConfig.variants.filter(r=>!r.isControl&&r.redirectUrl!==null).map(r=>r.redirectUrl),s=this.state.temporary.previewConfig.variants.find(r=>r.label==="a")?.redirectUrl;i.includes(e.pathname)&&s&&(e.pathname=s)}this.state.temporary.isMerchant=!1,e.searchParams.delete("isShopliftMerchant"),this.state.temporary.previewConfig=void 0,this.persistTemporaryState(),this.subscriptionPreviewWarningCleanup?.(),this.subscriptionPreviewWarningCleanup=null,this.hidePage(),this.queueRedirect(e)}handleTemplatePreview(e){const t=e.currentVariant,i=e.variants.find(l=>l.id===t);if(!i)return!1;const s=e.variants.find(l=>l.isControl);if(!s)return!1;this.log("Setting up template preview for type",s.type);
36const r=new URL(window.location.toString()),o=r.searchParams.get("view"),n=i.type===s.type;return!n&&!i.isControl&&template.suffix===s.affix&&this.typeFromTemplate()===s.type&&i.pathName!==null?(this.log("Hit control template type, redirecting to the variant url"),this.hidePage(),r.pathname=i.pathName,this.queueRedirect(r),!0):(!i.isControl&&this.typeFromTemplate()==i.type&&template.suffix===s.affix&&n&&o!==(i.affix||"__DEFAULT__")&&(this.log("Template type and affix match control, updating the view param"),r.searchParams.delete("view"),this.log("Setting the new viewParam to",i.affix||"__DEFAULT__"),this.hidePage(),r.searchParams.set("view",i.affix||"__DEFAULT__"),this.queueRedirect(r)),o!==null&&o!==(i.affix||"__DEFAULT__")&&(r.searchParams.delete("view"),this.hidePage(),this.queueRedirect(r)),!0)}handleUrlPreview(e){const t=e.currentVariant,i=e.variants.find(o=>o.id===t),s=e.variants.find(o=>o.isControl)?.redirectUrl;if(!i)return!1;this.log("Setting up URL redirect preview");const r=new URL(window.location.toString());return r.pathname===s&&!i.isControl&&i.redirectUrl!==null&&(this.log("Url matches control, redirecting"),this.hidePage(),r.pathname=i.redirectUrl,this.queueRedirect(r)),!0}handleScriptPreview(e){const t=e.currentVariant,i=e.variants.find(o=>o.id===t);if(!i)return!1;this.log("Setting up script preview");const s=new URL(window.location.toString());return s.searchParams.get("slVariant")!==i.id&&(this.log("current id doesn't match the variant, redirecting"),s.searchParams.delete("slVariant"),this.log("Setting the new slVariantParam"),this.hidePage(),s.searchParams.set("slVariant",i.id),this.queueRedirect(s)),!0}async handlePricePreview(e){const t=e.currentVariant,i=e.variants.find(s=>s.id===t);return i?(this.log("Setting up price preview"),i.domSelectors&&i.domSelectors.length>0&&(U(document,{testId:e.testId,hypothesisId:i.id,selectors:i.domSelectors}),this.ensureCartAttributesForExistingPriceTests(!0)),!0):!1}async handleSubscriptionPricePreview(e){const t=e.variants.find(i=>i.id===e.currentVariant);t?.subscriptionData&&(this.log("Setting up subscription price preview"),await Ge({id:t.id,isControl:t.isControl,subscriptionData:t.subscriptionData,priceData:t.priceData},(i,...s)=>this.log(i,...s)))}async handleSubscriptionLivePreview(e){this.testConfigs.find(s=>s.id===e.testId)?.hypotheses.find(s=>s.id===e.currentVariant)?.subscriptionData&&(this.log("Setting up subscription live preview"),this.subscriptionSwapDone=!1,this.subscriptionOneTimeDone=!1,this.subscriptionPriceDone=!1,await this.subscriptionSwap(),await this.subscriptionOneTimePrice(),await this.subscriptionPriceChange())}async finalize(){const e=await this.getCartState();e!==null&&this.queueCartUpdate(e),this.pruneStateAndSave(),await this.syncAllEvents()}setShoplift(){this.log("Setting up public API");const t=this.urlParams.get("slVariant")==="true",i=t?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:async s=>{if(this.log("Script checking variant for hypothesis '%s'",s),t)return this.log("Forcing variant for hypothesis '%s'",s),!0;if(i!==null)return this.log("Forcing hypothesis '%s'",i),s===i;const r=this.testConfigs.find(n=>n.hypotheses.some(l=>l.id===s));if(!r)return this.log("No test found for hypothesis '%s'",s),!1;const o=this.state.essential.visitorTests.find(n=>n.testId===r.id);return o?(this.log("Active visitor test found",s),o.hypothesisId===s):(await this.manuallySplitVisitor(r),this.testConfigs.some(n=>n.hypotheses.some(l=>l.id===s&&this.state.essential.visitorTests.some(c=>c.hypothesisId===l.id))))},setAnalyticsConsent:async s=>{await this.onConsentChange(s,!0)},getVisitorData:()=>({visitor:this.state.analytics.visitor,visitorTests:this.state.essential.visitorTests.filter(s=>!s.isInvalid).map(s=>{const{shouldSendToGa:r,savedAt:o,...n}=s;return n})})}}setShopliftStub(){this.log("Setting up stubbed public API");const t=this.urlParams.get("slVariant")==="true",i=t?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:s=>Promise.resolve(t||s===i),setAnalyticsConsent:()=>Promise.resolve(),getVisitorData:()=>({visitor:null,visitorTests:[]})}}async manuallySplitVisitor(e){this.log("Starting manual split for test '%s'",e.id),await this.handleVisitorTest([e]);const t=this.getReservationForTest(e.id);t&&!t.isRealized&&t.entryCriteriaKey&&(this.log("Realizing manual API reservation for test '%s'",e.id),this.realizeReservationForCriteria(t.entryCriteriaKey)),this.saveState(),this.syncAllEvents()}async handleVisitorTest(e){await this.filterTestsByAudience(this.testConfigs,this.state.analytics.visitor??this.buildBaseVisitor(),this.state.essential.visitorTests),this.pruneStaleVisitorTests(),this.deriveC
36ategoryFromExistingTests(),this.clearStaleReservations();let t=e?e.filter(i=>this.testsFilteredByAudience.some(s=>s.id===i.id)):[...this.testsForUrl(this.testsFilteredByAudience),...this.domTestsForUrl(this.testsFilteredByAudience)];try{if(t.length===0)return this.log("No tests found"),!1;this.log("Checking for existing visitor test on page");const i=this.getCurrentVisitorHypothesis(t);if(i){this.log("Found current visitor test");const l=this.considerRedirect(i);return l&&(this.log("Redirecting for current visitor test"),this.redirect(i)),l}const s=this.getReservationForCurrentPage();if(s){this.log("Found matching reservation for current page: %s",s.testId);const l=this.getHypothesis(s.hypothesisId);if(l){l.type!=="price"&&this.realizeReservationForCriteria(s.entryCriteriaKey);const c=this.considerRedirect(l);return c&&this.redirect(l),c}}this.log("No active test relation for test page");const r=this.testsForUrl(this.inactiveTestConfigs.filter(l=>this.testIsPaused(l)&&l.hypotheses.some(c=>this.state.essential.visitorTests.some(d=>d.hypothesisId===c.id)))).map(l=>l.id);if(r.length>0)return this.log("Visitor has paused tests for test page, skipping test assignment: %o",r),!1;if(!this.state.temporary.testCategory){const l=this.testsFilteredByAudience.filter(d=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(d))),c=this.testsFilteredByAudience.filter(d=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(d)));if(this.log("Category dice roll - global tests: %o, conditional tests: %o",l.map(d=>({id:d.id,title:d.title,criteria:this.getEntryCriteriaKey(d)})),c.map(d=>({id:d.id,title:d.title,criteria:this.getEntryCriteriaKey(d)}))),l.length>0&&c.length>0){const d=l.length,u=c.length,h=d+u,p=Math.random()*h;this.state.temporary.testCategory=p<d?"global":"conditional",this.log("Category dice roll: rolled %.2f of %d (global weight: %d, conditional weight: %d), selected '%s'",p,h,d,u,this.state.temporary.testCategory)}else l.length>0?(this.state.temporary.testCategory="global",this.log("Only global tests available, setting category to global")):(this.state.temporary.testCategory="conditional",this.log("Only conditional tests available, setting category to conditional"));this.persistTemporaryState()}const o=this.state.temporary.testCategory;if(this.log("Visitor test category: %s",o),o==="global"){const l=this.testsFilteredByAudience.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)));for(const c of l)this.markTestAsBlocked(c,"category:global");t=t.filter(c=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)))}else{const l=this.testsFilteredByAudience.filter(c=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)));for(const c of l)this.markTestAsBlocked(c,"category:conditional");t=t.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)))}if(t.length===0)return this.log("No tests remaining after category filter"),!1;this.createReservations(t);const n=this.getReservationForCurrentPage();if(n&&!n.isRealized){const l=this.getHypothesis(n.hypothesisId);if(l){l.type!=="price"&&this.realizeReservationForCriteria(n.entryCriteriaKey);const c=this.considerRedirect(l);return c&&(this.log("Redirecting for new test"),this.redirect(l)),c}}return!1}finally{this.includeInDomTests(),this.saveState()}}includeInDomTests(){this.applyControlForAudienceFilteredPriceTests();const e=this.getDomTestsForCurrentUrl(),t=this.getVisitorDomHypothesis(e);for(const i of e){this.log("Evaluating dom test '%s'",i.id);const s=i.hypotheses.some(p=>p.type==="price");if(this.state.essential.visitorTests.find(p=>p.testId===i.id&&p.isInvalid&&!p.hypothesisId)){if(this.log("Visitor is blocked from test '%s', applying control prices if price test",i.id),s){const p=i.hypotheses.find(b=>b.isControl);p?.priceData&&(this.applyPriceTestWithMapLookup(i.id,p,[p],()=>{this.log("Control prices applied for blocked visitor, no metrics tracked")}),this.updatePriceTestHiddenInputs(i.id,"control",!1))}continue}const o=this.getReservationForTest(i.id);let n=null,l=!1;const c=t.find(p=>i.hypotheses.some(b=>p.id===b.id));if(o)n=this.getHypothesis(o.hypothesisId)??null,this.log("Using reserved hypothesis '%s' for test '%s'",o.hypothesisId,i.id);else if(c)n=c,this.log("Using existing hypothesis assignment for test '%s'",i.id);else if(s){const p=this.visitorActiveTestTypeWithReservations();p?(l=!0,this.log("Visitor already in test type '%s', treating as non-test for price test '%s'",p,i.id)):n=this.pickHypothesis(i)}else n=this.pickHypothesis(i);if(l&&s){const p=i.hypotheses.find(b=>b.isControl);p?.priceData&&(this.log("Applying control prices for non-test visitor on price test '%s' (Map-based)",i.id),this.applyPriceTestWithMapLookup(i.id,p,[p],()=>{this.log("Control prices applied for non-test visitor, no metrics tracked")}
36),this.updatePriceTestHiddenInputs(i.id,"control",!1));continue}if(!n){this.log("Failed to pick hypothesis for test");continue}this.sendDiagnosticTelemetry("assignment",i.id,{hypothesisId:n.id,isControl:n.isControl,testType:n.type});const d=i.bayesianRevision??4,u=n.type==="price",h=d>=5;if(u&&h){if(this.log(`Price test with Map-based lookup (v${d}): ${i.id}`),!n.priceData){this.log("No price data for hypothesis '%s', skipping",n.id);continue}const p=n.isControl?"control":"variant";this.log(`Setting up Map-based price test for ${p} (test: ${i.id})`),this.applyPriceTestWithMapLookup(i.id,n,i.hypotheses,b=>{const E=this.getReservationForTest(b);E&&!E.isRealized&&E.entryCriteriaKey?this.realizeReservationForCriteria(E.entryCriteriaKey):this.queueAddVisitorToTest(b,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(u&&!h){this.log(`Price test without viewport tracking (v${d}): ${i.id}`);const p=this.getDomSelectorsForHypothesis(n);if(p.length===0)continue;U(document,{testId:i.id,hypothesisId:n.id,selectors:p},b=>{this.queueAddVisitorToTest(b,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(!n.domSelectors||n.domSelectors.length===0){this.log("No selectors found, skipping hypothesis");continue}U(document,{testId:i.id,hypothesisId:n.id,selectors:n.domSelectors},p=>{this.queueAddVisitorToTest(p,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()})}}considerRedirect(e){if(this.log("Considering redirect for hypothesis '%s'",e.id),e.isControl)return this.log("Skipping redirect for control"),!1;if(e.type==="basicScript"||e.type==="manualScript")return this.log("Skipping redirect for script test"),!1;const t=this.state.essential.visitorTests.find(o=>o.hypothesisId===e.id),i=new URL(window.location.toString()),r=new URLSearchParams(window.location.search).get("view");if(e.type==="theme"){if(!(e.themeId===themeId)){if(this.log("Theme id '%s' is not hypothesis theme ID '%s'",e.themeId,themeId),this.isAppProxyPath())return this.log("On App Proxy path, skipping theme redirect to avoid infinite loop"),!1;if(t&&t.themeId!==e.themeId&&(t.themeId===themeId||!this.isThemePreview()))this.log("On old theme, redirecting and updating local visitor"),t.themeId=e.themeId;else if(this.isThemePreview())return this.log("On non-test theme, skipping redirect"),!1;return this.log("Hiding page to redirect for theme test"),this.hidePage(),!0}return!1}else if(e.type!=="dom"&&e.type!=="price"&&e.affix!==template.suffix&&e.affix!==r||e.redirectPath&&!i.pathname.endsWith(e.redirectPath))return this.log("Hiding page to redirect for template test"),this.hidePage(),!0;return this.log("Not redirecting"),!1}redirect(e){if(this.log("Redirecting to hypothesis '%s'",e.id),e.isControl)return;const t=new URL(window.location.toString());if(t.searchParams.delete("view"),e.redirectPath){const n=RegExp("^(/w{2}-w{2})/").exec(t.pathname);if(n&&n.length>1){const l=n[1];t.pathname=`${l}${e.redirectPath}`}else t.pathname=e.redirectPath}else e.type==="theme"?(t.searchParams.set("_ab","0"),t.searchParams.set("_fd","0"),t.searchParams.set("_sc","1"),t.searchParams.set("preview_theme_id",e.themeId.toString())):e.type!=="urlRedirect"&&t.searchParams.set("view",e.affix);const i=this.state.essential.visitorTests.find(n=>n.hypothesisId===e.id)?.testId,s=t.pathname+t.search,r=window.location.pathname+window.location.search,o=K(t.hash);if(i&&s!==r&&!o){const n=qe(),l=He({v:2,t:i,n,fh:Me(window.location.pathname+window.location.search)});t.hash=`slr-${n}`;const c=new Date(Date.now()+3e4).toUTCString();document.cookie=`shoplift_redirect=${l};domain=.${window.location.hostname};path=/;SameSite=Strict;expires=${c}`}s===r&&this.showPage(),this.queueRedirect(t)}async refreshVisitor(e){if(e===null||!this.state.essential.isFirstLoad||!this.testConfigs.some(i=>i.visitorOption!=="all"))return;this.log("Refreshing visitor"),this.hidePage();const t=await this.getVisitor(e);t&&t.id&&this.updateLocalVisitor(t)}buildBaseVisitor(){return{shopifyAnalyticsId:this.shopifyAnalyticsId,device:this.device,country:null,...this.state.essential.initialState}}getInitialState(){const e=this.getUTMValue("utm_source")??"",t=this.getUTMValue("utm_medium")??"",i=this.getUTMValue("utm_campaign")??"",s=this.getUTMValue("utm_content")??"",r=window.document.referrer,o=this.device;return{createdAt:new Date,utmSource:e,utmMedium:t,utmCampaign:i,utmContent:s,referrer:r,device:o}}checkForThemePreview(){return this.log("Checking for theme preview"),window.location.hostname.endsWith(".shopifypreview.com")?(this.log("on shopify preview domain"),this.clearThemeBar(!0,!1,this.state),document.querySelector("#sl-preview-bar-hide")?.remove(),!1):this.isThemePreview()?this.state.essential.visitorTests.some(e=>e.isThemeTest&&e.hypothesisId!=null&&this.getHypothesis(e.hypothesisId)&&e.themeId===themeId)?(this.log("On active theme test, remov
36ing theme bar"),this.clearThemeBar(!1,!0,this.state),!1):this.state.essential.visitorTests.some(e=>e.isThemeTest&&e.hypothesisId!=null&&!this.getHypothesis(e.hypothesisId)&&e.themeId===themeId)?(this.log("Visitor is on an inactive theme test, redirecting to main theme"),this.redirectToMainTheme(),!0):this.state.essential.isFirstLoad?(this.log("No visitor found on theme preview, redirecting to main theme"),this.redirectToMainTheme(),!0):this.inactiveTestConfigs.some(e=>e.hypotheses.some(t=>t.themeId===themeId))?(this.log("Current theme is an inactive theme test, redirecting to main theme"),this.redirectToMainTheme(),!0):this.testConfigs.some(e=>e.hypotheses.some(t=>t.themeId===themeId))?(this.log("Falling back to clearing theme bar"),this.clearThemeBar(!1,!0,this.state),!1):(this.log("No tests on current theme, skipping script"),this.clearThemeBar(!0,!1,this.state),document.querySelector("#sl-preview-bar-hide")?.remove(),!0):(this.log("Not on theme preview"),this.clearThemeBar(!0,!1,this.state),!1)}redirectToMainTheme(){this.hidePage();const e=new URL(window.location.toString());e.searchParams.set("preview_theme_id",""),this.queueRedirect(e)}testsForUrl(e){const t=new URL(window.location.href),i=this.typeFromTemplate();return e.filter(s=>s.hypotheses.some(r=>r.type!=="dom"&&r.type!=="price"&&(r.isControl&&r.type===i&&r.affix===template.suffix||r.type==="theme"||r.isControl&&r.type==="urlRedirect"&&r.redirectPath&&t.pathname.endsWith(r.redirectPath)||r.type==="basicScript"))&&(s.ignoreTestViewParameterEnforcement||!t.searchParams.has("view")||s.hypotheses.map(r=>r.affix).includes(t.searchParams.get("view")??"")))}domTestsForUrl(e){const t=new URL(window.location.href);return e.filter(i=>i.hypotheses.some(s=>s.type!=="dom"&&s.type!=="price"?!1:s.type==="price"&&s.priceData&&s.priceData.variants.length>0?!0:s.domSelectors&&s.domSelectors.some(r=>new RegExp(se(r)).test(K(t.toString())))))}async filterTestsByAudience(e,t,i){const s=[],r=e.some(n=>(n.requiresRegion||this.geoViaShopify&&n.requiresCountry)&&!i.some(l=>l.testId===n.id));this.resolvedRegion===null&&r&&(this.log("Hiding page to wait for Shopify region resolution"),this.hidePage(),await this.waitForResolvedRegion()),window.__slRegion=this.resolvedRegion??"";let o=t.country;this.geoViaShopify?o=this.resolvedRegion?this.resolvedRegion.slice(0,2):o:!o&&e.some(n=>n.requiresCountry&&!i.some(l=>l.testId===n.id))&&(this.log("Hiding page to check geoip"),this.hidePage(),o=await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/get-country`,signal:AbortSignal.timeout(this.getCountryTimeout)}).catch(n=>(this.log("Error getting country",n),null)));for(const n of e){if(this.log("Checking audience for test '%s'",n.id),this.state.essential.visitorTests.some(d=>d.testId===n.id&&d.hypothesisId==null)){console.log(`Skipping blocked test '${n.id}'`);continue}const l=this.visitorCreatedDuringTestActive(n.statusHistory);(i.some(d=>d.testId===n.id&&(n.device==="all"||n.device===t.device&&n.device===this.device))||this.isTargetAudience(n,t,l,o))&&(this.log("Visitor is in audience for test '%s'",n.id),s.push(n))}this.testsFilteredByAudience=s}async waitForResolvedRegion(e=1500,t=50){const i=Date.now();for(;this.resolvedRegion===null&&Date.now()-i<e;)await new Promise(s=>window.setTimeout(s,t))}isTargetAudience(e,t,i,s){const r=this.getChannel(t);return(e.device==="all"||e.device===t.device&&e.device===this.device)&&(e.visitorOption==="all"||e.visitorOption==="new"&&i||e.visitorOption==="returning"&&!i)&&(e.targetAudiences.length===0||e.targetAudiences.reduce((o,n)=>o||n.reduce((l,c)=>l&&c(t,i,r,s),!0),!1))}visitorCreatedDuringTestActive(e){let t="";for(const i of e){if(this.state.analytics.visitor!==null&&this.state.analytics.visitor.createdAt<i.createdAt||this.state.essential.initialState.createdAt<i.createdAt)break;t=i.status}return t==="active"}getDomTestsForCurrentUrl(){return this.domTestsForUrl(this.testsFilteredByAudience)}getCurrentVisitorHypothesis(e){return e.flatMap(t=>t.hypotheses).find(t=>t.type!=="dom"&&t.type!=="price"&&this.state.essential.visitorTests.some(i=>i.hypothesisId===t.id))}getVisitorDomHypothesis(e){return e.flatMap(t=>t.hypotheses).filter(t=>(t.type==="dom"||t.type==="price")&&this.state.essential.visitorTests.some(i=>i.hypothesisId===t.id))}getHypothesis(e){return this.testConfigs.filter(t=>t.hypotheses.some(i=>i.id===e)).map(t=>t.hypotheses.find(i=>i.id===e))[0]}getActiveAssignment(){if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig;return t.currentVariant&&t.testId?{testId:t.testId,hypothesisId:t.currentVariant}:null}const e=this.state.essential.visitorTests.find(t=>t.hypothesisId);return e?.hypothesisId?{testId:e.testId,hypothesisId:e.hypothesisId}:null}findActiveSubscriptionTestControl(){for(const e of this.testConfigs){const t=e.hypotheses.find(i=>i.isControl);if(t?.subscriptionData)return{testId:e.id,hypothesis:t}}return null}getDomSelectorsForHypothesis(e){if(!e)return[];if(e.domSelectors&&e.domSelectors.length>0)return e.domSelectors;if(e.priceData){const t=`${this.priceSelectorsSessionKey}_${e.id}`;try{const s=sessionStorage.getItem(t);if(s){const r=JSON.parse(s);return e.domSelectors=r,this.log("Loaded %d price selectors from cache for hypothesis '%s'",r.length,e.id),r}}catch{}const i=$e(e.priceData);e.domSelectors=i;try{sessionStorage.setItem(t,JSON.stringify(i)),this.log("Generated and cached %d price selectors for hypothesis '%s'",i.length,e.id)}catch{this.log("Generated %d price selectors for hypothesis '%s' (cache unavailable)",i.length,e.id)}return i}return[]}hasThemeTest(e){return e.some(t=>t.hypotheses.some(i=>i.type==="theme"))}hasTestThatIsNotThemeTest(e){return e.some(t=>t.hypotheses.some(i=>i.type!=="theme"&&i.type!=="dom"&&i.type!=="price"))}hasThemeAndOtherTestTypes(e){return this.hasThemeTest(e)&&this.hasTestThatIsNotThemeTest(e)}testIsPaused(e){return e.status==="paused"||e.status==="incompatible"||e.status==="suspended"}visitorActiveTestType(){const e=this.state.essential.visitorTests.filter(t=>this.testConfigs.some(i=>i.hypotheses.some(s=>s.id==t.hypothesisId)));return e.length===0?null:e.some(t=>t.isThemeTest)?"theme":"templateOrUrlRedirect"}getReservationType(e){return e==="price"||this.isTemplateTestType(e)?"deferred":"immediate"}isTemplateTestType(e){return["product","collection","landing","index","cart","search","blog","article","collectionList"].includes(e)}getEntryCriteriaKey(e){const t=e.hypotheses.find(i=>i.isControl);if(!t)return`unknown:${e.id}`;switch(t.type){case"theme":return"global:theme";case"basicScript":return"global:autoApi";case"price":return"global:price";case"manualScript":return`conditional:manualApi:${e.id}`;case"urlRedirect":return`conditional:url:${t.redirectPath||"unknown"}`;default:return`conditional:template:${t.type}`}}isGlobalEntryCriteria(e){return e.startsWith("global:")}groupTestsByEntryCriteria(e){const t=new Map;for(const i of e){const s=this.getEntryCriteriaKey(i),r=t.get(s)||[];r.push(i),t.set(s,r)}return t}doesCurrentPageMatchEntryCriteria(e){if(this.isGlobalEntryCriteria(e))return!0;
36if(e==="conditional:manualApi")return!1;if(e.startsWith("conditional:url:")){const t=e.replace("conditional:url:","");return window.location.pathname.endsWith(t)}if(e.startsWith("conditional:template:")){const t=e.replace("conditional:template:","");return this.typeFromTemplate()===t}return!1}hasActiveReservation(){const e=this.getActiveReservations();return Object.values(e).some(t=>!t.isRealized)}getActiveReservation(){const e=this.getActiveReservations();return Object.values(e).find(t=>!t.isRealized)??null}clearStaleReservations(){const e=this.state.temporary.testReservations;if(!e)return;let t=!1;for(const[i,s]of Object.entries(e)){const r=this.testConfigs.find(n=>n.id===s.testId);if(!r){this.log("Test '%s' no longer in config, clearing reservation for criteria '%s'",s.testId,i),delete e[i],t=!0;continue}if(r.status!=="active"){this.log("Test '%s' status is '%s', clearing reservation for criteria '%s'",s.testId,r.status,i),delete e[i],t=!0;continue}this.testsFilteredByAudience.some(n=>n.id===s.testId)||(this.log("Visitor no longer passes audience for test '%s', clearing reservation for criteria '%s'",s.testId,i),delete e[i],t=!0)}t&&this.persistTemporaryState()}createReservations(e){if(this.state.temporary.testReservations||(this.state.temporary.testReservations={}),this.state.temporary.rolledEntryCriteria||(this.state.temporary.rolledEntryCriteria=[]),this.state.temporary.testCategory==="global"){this.createSingleReservation(e,"global");return}const i=e.filter(n=>this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(n))),s=e.filter(n=>!this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(n)));this.log("Conditional tests split - matching current page: %d, not matching: %d",i.length,s.length),i.length>0&&this.log("Tests matching current page (same pool): %o",i.map(n=>({id:n.id,title:n.title,criteria:this.getEntryCriteriaKey(n)})));const r=`conditional:current-page:${this.typeFromTemplate()}`;if(i.length>0&&!this.state.temporary.rolledEntryCriteria.includes(r)){this.createSingleReservation(i,r);for(const n of i){const l=this.getEntryCriteriaKey(n);this.state.temporary.rolledEntryCriteria.includes(l)||this.state.temporary.rolledEntryCriteria.push(l)}}const o=this.groupTestsByEntryCriteria(s);for(const[n,l]of o){if(this.state.temporary.rolledEntryCriteria.includes(n)){this.log("Already rolled for criteria '%s', skipping",n);continue}if(l.some(S=>this.state.essential.visitorTests.some(C=>C.testId===S.id))){this.log("Visitor already has VT for criteria '%s', skipping",n),this.state.temporary.rolledEntryCriteria.push(n);continue}const d=[...l].sort((S,C)=>S.id.localeCompare(C.id));this.log("Test dice roll for criteria '%s' - available tests: %o",n,d.map(S=>({id:S.id,title:S.title})));const u=Math.floor(Math.random()*d.length),h=d[u];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",u+1,l.length,h.id,h.title);const p=this.pickHypothesis(h);if(!p){this.log("No hypothesis picked for test '%s'",h.id);continue}this.sendDiagnosticTelemetry("assignment",h.id,{hypothesisId:p.id,isControl:p.isControl,testType:p.type});const b=this.getReservationType(p.type),E={testId:h.id,hypothesisId:p.id,testType:p.type,reservationType:b,isThemeTest:p.type==="theme",themeId:p.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:n};this.state.temporary.testReservations[n]=E,this.state.temporary.rolledEntryCriteria.push(n),this.log("Created %s reservation for test '%s' (criteria: %s)",b,h.id,n);for(const S of l)S.id!==h.id&&this.markTestAsBlocked(S,n)}this.persistTemporaryState()}createSingleReservation(e,t){if(this.state.temporary.rolledEntryCriteria.includes(t)){this.log("Already rolled for pool '%s', skipping",t);return}if(e.some(u=>this.state.essential.visitorTests.some(h=>h.testId===u.id&&!h.isInvalid))){this.log("Visitor already has VT for pool '%s', skipping",t),this.state.temporary.rolledEntryCriteria.push(t);return}if(e.length===0){this.log("No tests in pool '%s'",t);return}const s=[...e].sort((u,h)=>u.id.localeCompare(h.id));this.log("Test dice roll for pool '%s' - available tests: %o",t,s.map(u=>({id:u.id,title:u.title,criteria:this.getEntryCriteriaKey(u)})));const r=Math.floor(Math.random()*s.length),o=s[r];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",r,e.length,o.id,o.title);const n=this.pickHypothesis(o);if(!n){this.log("No hypothesis picked for test '%s'",o.id);return}this.sendDiagnosticTelemetry("assignment",o.id,{hypothesisId:n.id,isControl:n.isControl,testType:n.type});const l=this.getReservationType(n.type),c=this.getEntryCriteriaKey(o),d={testId:o.id,hypothesisId:n.id,testType:n.type,reservationType:l,isThemeTest:n.type==="theme",themeId:n.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:c};this.state.temporary.testReservations[c]=d,this.state.temporary.rolledEntryCriteria.push(t),this.log("Created %s reservation for test '%s' from pool '%s' (criteria: %s)",l,o.id,t,c);for(const u of e)u.id!==o.id&&this.markTestAsBlocked(u,`pool:${t}`);this.persistTemporaryState()}markTestAsBlocked(e,t){this.state.essential.visitorTests.some(i=>i.testId===e.id)||(this.log("Blocking visitor from test '%s' (reason: %s)",e.id,t),this.state.essential.visitorTests.push({createdAt:new Date,testId:e.id,hypothesisId:null,isThemeTest:e.hypotheses.some(i=>
36i.type==="theme"),shouldSendToGa:!1,isSaved:!0,isInvalid:!0,themeId:void 0}))}realizeReservationForCriteria(e){const t=this.state.temporary.testReservations?.[e];if(!t)return this.log("No reservation found for criteria '%s'",e),!1;if(t.isRealized)return this.log("Reservation already realized for criteria '%s'",e),!1;if(this.state.essential.visitorTests.some(s=>s.testId===t.testId&&!s.isInvalid))return this.log("Visitor already assigned to test '%s'",t.testId),!1;const i=this.getHypothesis(t.hypothesisId);return i?(t.isRealized=!0,this.persistTemporaryState(),this.queueAddVisitorToTest(t.testId,i),this.saveState(),this.log("Realized reservation for test '%s' (criteria: %s)",t.testId,e),!0):(this.log("Hypothesis '%s' not found",t.hypothesisId),!1)}getActiveReservations(){return this.state.temporary.testReservations??{}}getReservationForCurrentPage(){const e=this.getActiveReservations();for(const[t,i]of Object.entries(e)){if(i.isRealized)continue;const s=this.testConfigs.find(r=>r.id===i.testId);if(!(!s||s.status!=="active")&&this.doesCurrentPageMatchEntryCriteria(t))return i}return null}getReservationForTest(e){const t=this.getActiveReservations();return Object.values(t).find(i=>i.testId===e)??null}getReservationTestType(){const e=this.getActiveReservations(),t=Object.values(e);if(t.length===0)return null;for(const i of t)if(i.isThemeTest)return"theme";for(const i of t)if(i.testType==="price")return"price";return t.some(i=>!i.isRealized)?"templateOrUrlRedirect":null}hasPriceTests(e){return e.some(t=>t.hypotheses.some(i=>i.type==="price"))}_priceTestProductIds=null;getPriceTestProductIds(){if(this._priceTestProductIds)return this._priceTestProductIds;const e=new Set;for(const t of this.testConfigs)for(const i of t.hypotheses)if(i.type==="price"){for(const s of i.domSelectors||[]){const r=s.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);r?.[1]&&e.add(r[1])}if(i.priceData?.variants)for(const[s]of i.priceData.variants)e.add(s)}return this._priceTestProductIds=e,this.log("Built price test product ID cache with %d products",e.size),e}isProductInAnyPriceTest(e){return this.getPriceTestProductIds().has(e)}visitorActiveTestTypeWithReservations(){const e=this.getActiveReservations();for(const r of Object.values(e)){if(r.isThemeTest)return"theme";if(r.testType==="price")return"price"}if(Object.values(e).some(r=>!r.isRealized)){if(this.state.temporary.testCategory==="global")for(const o of Object.values(e)){if(o.testType==="theme")return"theme";if(o.testType==="price")return"price";if(o.testType==="basicScript")return"theme"}return"templateOrUrlRedirect"}const i=this.state.essential.visitorTests.filter(r=>!r.isInvalid&&this.testConfigs.some(o=>o.hypotheses.some(n=>n.id===r.hypothesisId)));return i.length===0?null:i.some(r=>this.getHypothesis(r.hypothesisId)?.type==="price")?"price":i.some(r=>r.isThemeTest)?"theme":"templateOrUrlRedirect"}applyControlForAudienceFilteredPriceTests(){const e=this.testConfigs.filter(s=>s.status==="active"&&s.hypotheses.some(r=>r.type==="price"));if(e.length===0)return;const t=this.testsFilteredByAudience.filter(s=>s.hypotheses.some(r=>r.type==="price")),i=e.filter(s=>!t.some(r=>r.id===s.id));if(i.length!==0){this.log("Found %d price tests filtered by audience, applying control selectors",i.length);for(const s of i){const r=s.hypotheses.find(c=>c.isControl),o=this.getDomSelectorsForHypothesis(r);if(o.length===0){this.log("No control selectors for audience-filtered price test '%s'",s.id);continue}const n=new URL(window.location.href);o.some(c=>{try{return new RegExp(se(c)).test(K(n.toString()))}catch{return!1}})&&(this.log("Applying control selectors for audience-filtered price test '%s'",s.id),U(document,{testId:s.id,hypothesisId:r.id,selectors:o},()=>{}),this.updatePriceTestHiddenInputs(s.id,"control",!1))}}}pickHypothesis(e){let t=Math.random();const i=e.hypotheses.reduce((r,o)=>r+o.visitorCount,0);return e.hypotheses.sort((r,o)=>r.isControl?o.isControl?0:-1:o.isControl?1:0).reduce((r,o)=>{if(r!==null)return r;const l=e.hypotheses.reduce((c,d)=>c&&d.visitorCount>20,!0)?o.visitorCount/i-o.trafficPercentage:0;return t<=o.trafficPercentage-l?o:(t-=o.trafficPercentage-l,null)},null)}typeFromTemplate(){switch(template.type){case"list-collections":return"collectionList";case"page":return"landing";case"article":case"blog":case"cart":case"collection":case"index":case"product":case"search":return template.type;default:return null}}queueRedirect(e){this.saveState(),this.disableReferrerOverride||(this.log(`Saving temporary referrer override '${document.referrer}'`),this.state.temporary.originalReferrer=document.referrer,this.persistTemporaryState()),window.setTimeout(()=>window.location.assign(e),0),window.setTimeout(()=>{this.syncAllEvents()},2e3)}scheduleRetrySync(){this.clientIdRetryCount>=5||(this.clientIdRetryCount++,window.setTimeout(()=>{this.syncAllEvents()},500))}async syncAllEvents(){const e=async()=>
36{if(this.isSyncing){window.setTimeout(()=>{(async()=>await e())()},500);return}try{if(this.isSyncing=!0,this.syncGAEvents(),this.shopifyAnalyticsId||(this.shopifyAnalyticsId=this.getShopifyAnalyticsId()),!this.shopifyAnalyticsId){this.scheduleRetrySync();return}await this.syncEvents()}finally{this.isSyncing=!1}};await e()}async syncEvents(){if(!this.state.essential.consentApproved||!this.shopifyAnalyticsId||this.state.analytics.queue.length===0)return;const e=this.state.analytics.queue.length,t=this.state.analytics.queue.splice(0,e);this.log("Syncing %s events",e);try{const i={shop:this.shop,visitorDetails:{shopifyAnalyticsId:this.shopifyAnalyticsId,device:this.state.analytics.visitor?.device??this.device,country:this.state.analytics.visitor?.country??null,...this.state.essential.initialState},events:this.state.essential.visitorTests.filter(r=>!r.isInvalid&&!r.isSaved&&r.hypothesisId!=null).map(r=>new be(r.testId,r.hypothesisId,r.createdAt)).concat(t)};await this.sendEvents(i);for(const r of this.state.essential.visitorTests.filter(o=>!o.isInvalid&&!o.isSaved&&o.hypothesisId!=null))this.sendDiagnosticTelemetry("event-delivered",r.testId,{hypothesisId:r.hypothesisId,isControl:r.assignedTo==="control",testType:r.testType??"unknown"});const s=await this.getVisitor(this.shopifyAnalyticsId);s!==null&&this.updateLocalVisitor(s);for(const r of this.state.essential.visitorTests.filter(o=>!o.isInvalid&&!o.isSaved))r.isSaved=!0,r.savedAt=Date.now()}catch{this.state.analytics.queue.splice(0,0,...t)}finally{this.saveState()}}syncGAEvents(){if(!this.gaConfig.sendEvents){if(he)return;he=!0,this.log("UseGtag is false â skipping GA Events");return}if(this.isSyncingGA){this.log("Already syncing GA - skipping GA events");return}const e=this.state.essential.visitorTests.filter(t=>t.shouldSendToGa);e.length!==0&&(this.isSyncingGA=!0,this.log("Syncing %s GA Events",e.length),Promise.allSettled(e.map(t=>this.sendGAEvent(t))).then(()=>this.log("All gtag events sent")).finally(()=>this.isSyncingGA=!1))}sendGAEvent(e){return new Promise(t=>{this.log("Sending GA Event for test %s, hypothesis %s",e.testId,e.hypothesisId);const i=()=>{this.log("GA acknowledged event for hypothesis %s",e.hypothesisId),e.shouldSendToGa=!1,this.persistEssentialState(),t()},s={exp_variant_string:`SL-${e.testId}-${e.hypothesisId}`};
36this.shopliftDebug&&Object.assign(s,{debug_mode:!0});function r(o,n,l){window.dataLayer=window.dataLayer||[],window.dataLayer.push(arguments)}this.gaConfig.mode==="gtag"?r("event","experience_impression",{...s,event_callback:i}):(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"experience_impression",...s,eventCallback:i}))})}updateLocalVisitor(e){let t;({visitorTests:t,...this.state.analytics.visitor}=e),this.log("updateLocalVisitor - server returned %d tests: %o",t.length,t.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isInvalid:s.isInvalid}))),this.log("updateLocalVisitor - local has %d tests: %o",this.state.essential.visitorTests.length,this.state.essential.visitorTests.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isSaved:s.isSaved,isInvalid:s.isInvalid})));const i=300*1e3;for(const s of this.state.essential.visitorTests.filter(r=>r.isSaved&&(!r.savedAt||Date.now()-r.savedAt>i)&&!t.some(o=>o.testId===r.testId)))this.log("updateLocalVisitor - marking LOCAL test as INVALID (isSaved && not in server): testId=%s, hypothesisId=%s",s.testId,s.hypothesisId),s.isInvalid=!0;for(const s of t){const r=this.state.essential.visitorTests.findIndex(n=>n.testId===s.testId);if(!(r!==-1))this.log("updateLocalVisitor - ADDING server test (not found locally): testId=%s, hypothesisId=%s",s.testId,s.hypothesisId),this.state.essential.visitorTests.push(s);else{const n=this.state.essential.visitorTests.at(r);this.log("updateLocalVisitor - REPLACING local test with server test: testId=%s, local hypothesisId=%s -> server hypothesisId=%s, local isInvalid=%s -> false",s.testId,n?.hypothesisId,s.hypothesisId,n?.isInvalid),s.isInvalid=!1,s.shouldSendToGa=n?.shouldSe
36ndToGa??!1,s.testType=n?.testType,s.assignedTo=n?.assignedTo,s.testTitle=n?.testTitle,this.state.essential.visitorTests.splice(r,1,s)}}this.log("updateLocalVisitor - FINAL local tests: %o",this.state.essential.visitorTests.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isSaved:s.isSaved,isInvalid:s.isInvalid}))),this.state.analytics.visitor.storedAt=new Date}async getVisitor(e){try{return await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/by-key/${this.shop}/${e}`})}catch{return null}}async sendEvents(e){await this.makeRequest({method:"post",url:`${this.eventHost}/api/v0/events`,data:JSON.stringify(e)})}sendDiagnosticTelemetry(e,t,i){if(!this.telemetryEnabled||!navigator.sendBeacon)return;const s=this.state.essential.consentApproved,r=JSON.stringify({shop:this.shop,testId:t,checkpoint:e,device:this.device,...s?{visitorId:this.shopifyAnalyticsId??"unknown"}:{},clientTimestamp:Date.now(),consentApproved:s,hasConsentInteraction:this.state.essential.hasConsentInteraction,...i});navigator.sendBeacon(`${this.eventHost}/api/v0/telemetry`,new Blob([r],{type:"text/plain"}))}getUTMValue(e){return new URLSearchParams(window.location.search).get(e)||null}hidePage(e){this.log("Hiding page"),this.cssHideClass&&!window.document.documentElement.classList.contains(this.cssHideClass)&&(window.document.documentElement.classList.add(this.cssHideClass),e||setTimeout(this.removeAsyncHide(this.cssHideClass),2e3))}showPage(){this.cssHideClass&&this.removeAsyncHide(this.cssHideClass)()}getDeviceType(){function e(){let i=!1;return(function(s){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(s.substr(0,4)))&&(i=!0)})(navigator.userAgent||navigator.vendor),i}function t(){let i=!1;return(function(s){(/android|ipad|playbook|silk/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|
36sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(s.substr(0,4)))&&(i=!0)})(navigator.userAgent||navigator.vendor),i}return e()?"mobile":t()?"tablet":"desktop"}removeAsyncHide(e){return()=>{e&&window.document.documentElement.classList.remove(e)}}async getCartState(){try{let e=await this.makeJsonRequest({method:"get",url:`${window.location.origin}/cart.js`});return e===null||(e.note===null&&(e=await this.makeJsonRequest({method:"post",url:`${window.location.origin}/cart/update.js`,data:JSON.stringify({note:""})})),e==null)?null:{token:e.token,total_price:e.total_price,total_discount:e.total_discount,currency:e.currency,items_subtotal_price:e.items_subtotal_price,items:e.items.map(t=>({quantity:t.quantity,variant_id:t.variant_id,key:t.key,price:t.price,final_line_price:t.final_line_price,sku:t.sku,product_id:t.product_id}))}}catch(e){return this.log("Error sending cart info",e),null}}ensureCartAttributesForExistingPriceTests(e){try{if(this.log("Checking visitor assignments for active price tests"),e&&this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig;this.log("Using preview config for merchant:",t.testId);let i="variant";if(t.variants&&t.variants.length>0){const s=t.variants.find(r=>r.id===t.currentVariant);s&&s.isControl&&(i="control")}this.log("Merchant preview - updating hidden inputs:",t.testId,i),this.updatePriceTestHiddenInputs(t.testId,i,!0);return}for(const t of this.state.essential.visitorTests){const i=this.testConfigs.find(o=>o.id===t.testId);if(!i){this.log("Test config not found:",t.testId);continue}const s=i.hypotheses.find(o=>o.id===t.hypothesisId);if(!s||s.type!=="price")continue;const r=s.isControl?"control":"variant";this.log("Updating hidden inputs for price test:",t.testId,r),this.updatePriceTestHiddenInputs(t.testId,r,e)}}catch(t){this.log("Error ensuring cart attributes for existing price tests:",t)}}subscriptionSwapDone=!1;subscriptionHideWrongPlans=null;subscriptionPriceDone=!1;subscriptionUpdateOneTime=null;subscriptionOneTimeDone=!1;swapMap=null;slptValue=null;async subscriptionSwap(){await Ue(this)}async subscriptionPriceChange(){await ze(this)}async subscriptionOneTimePrice(){await We(this)}updatePriceTestHiddenInputs(e,t,i){try{this.cleanupPriceTestObservers();const s=`${e}:${t}:${i?"t":"f"}`,r=T=>{const m=T.getAttribute("data-sl-pid");if(!m)return!0;if(i&&this.state.temporary.previewConfig){const w=this.state.temporary.previewConfig,I=t==="control"?"a":"b",f=w.variants.find(v=>v.label===I);if(!f)return!1;for(const v of f.domSelectors||[]){const g=v.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);if(g){const P=g[1];if(this.log(`Extracted ID from selector: ${P}, comparing to: ${m}`),P===m)return this.log("Product ID match found in preview config:",m,"variant:",f.label),!0}else this.log(`Could not extract ID from selector: ${v.cssSelector}`)}return this.log("No product ID match in preview config for:",m,"variant:",I),!1}const y=this.testConfigs.find(w=>w.id===e);if(!y)return this.log("Test config not found for testId:",e),!1;for(const w of y.hypotheses||[]){for(const I of w.domSelectors||[]){const f=I.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);if(f&&f[1]===m)return this.log("Product ID match found in domSelectors:",m,"for test:",e),!0}if(w.priceData?.variants){for(const I of w.priceData.variants)if(I[0]===m)return this.log("Product ID match found in priceData:",m,"for test:",e),!0}}return this.log("No product ID match for:",m,"in test:",e),!1},o=new Set;let n=!1,l=null;const c=(T,m)=>{if(document.querySelectorAll("[data-sl-attribute-p]").forEach(w=>{if(w instanceof Element&&w.nodeType===Node.ELEMENT_NODE&&w.isConnected&&document.contains(w))try{T.observe(w,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0,attributes:!1})}catch(I){this.log(`Failed to observe element (${m}):`,I)}}),document.body&&document.body.isConnected)try{T.observe(document.body,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0,attributes:!1})}catch(w){this.log(`Failed to observe document.body (${m}):`,w)}},d=(T,m,y,w)=>{const I=T.filter(f=>{const v=f.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);return v&&v[1]===w});this.log(`Applying ${y} DOM selectors, total: ${T.length}, filtered: ${I.length}`),I.length>0&&U(document,{testId:e,hypothesisId:m,selectors:I})},u=(T,m)=>{this.log(`Applying DOM selector changes for product ID: ${T}`),m.disconnect(),n=!0;try{if(i&&this.state.temporary.previewConfig){const y=t==="control"?"a":"b",w=this.state.temporary.previewConfig.variants.find(I=>I.label===y);if(!w?.domSelectors){this.log(`No DOM selectors found for preview variant: ${y}`);return}d(w.domSelectors,w.id,"preview config",T)}else{const y=this.testConfigs.find(I=>I.id===e);if(!y){this.log(`No test config found for testId: ${e}`);return}const w=y.hypotheses.find(I=>t==="control"?I.isControl:!I.isControl);if(!w?.domSelectors){this.log(`No DOM selectors found for assignment: ${t}`);return}d(w.domSelectors,w.id,"live config",T)}}finally{l!==null&&clearTimeout(l),l=window.setTimeout(()=>{n=!1,l=null,c(m,"reconnection"),this.log("Re-established innerHTML observer after DOM changes")}
36,50)}},h=new MutationObserver(T=>{if(!n)for(const m of T){if(m.type!=="childList"&&m.type!=="characterData")continue;let y=m.target;m.type==="characterData"&&(y=m.target.parentElement||m.target.parentNode);let w=y,I=w.getAttribute("data-sl-attribute-p");for(;!I&&w.parentElement;)w=w.parentElement,I=w.getAttribute("data-sl-attribute-p");if(!I)continue;const f=w.innerHTML||w.textContent||"";let v="";m.type==="characterData"&&m.oldValue!==null&&(v=m.oldValue),this.log(`innerHTML changed on element with data-sl-attribute-p="${I}"`),v&&this.log(`Previous content: "${v}"`),this.log(`Current content: "${f}"`),u(I,h)}});c(h,"initial setup"),o.add(h);const p=new MutationObserver(T=>{T.forEach(m=>{m.addedNodes.forEach(y=>{if(y.nodeType===Node.ELEMENT_NODE){const w=y;E(w);const I=w.matches('input[name="properties[_slpt]"]')?[w]:w.querySelectorAll('input[name="properties[_slpt]"]');I.length>0&&this.log(`MutationObserver found ${I.length} new hidden input(s)`),I.forEach(f=>{const v=f.getAttribute("data-sl-pid");if(this.log(`MutationObserver checking new input with data-sl-pid="${v}"`),r(f))f.value!==s&&(f.value=s,this.log("Updated newly added hidden input:",s)),S(f);else{const g=f.getAttribute("data-sl-pid");g&&this.isProductInAnyPriceTest(g)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",g):(f.remove(),this.log("Removed newly added non-matching hidden input for product ID:",g))}})}})})});o.add(p);const b=new MutationObserver(T=>{T.forEach(m=>{if(m.type==="attributes"&&m.attributeName==="data-sl-pid"){const y=m.target;if(this.log("AttributeObserver detected data-sl-pid attribute change on:",y.tagName),y.matches('input[name="properties[_slpt]"]')){const w=y,I=m.oldValue,f=w.getAttribute("data-sl-pid");this.log(`data-sl-pid changed from "${I}" to "${f}" - triggering payment placement updates`),r(w)?(w.value!==s&&(w.value=s,this.log("Updated hidden input after data-sl-pid change:",s)),f&&u(f,h),this.log("Re-running payment placement updates after variant change"),E(document.body)):f&&this.isProductInAnyPriceTest(f)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",f):(w.remove(),this.log("Removed non-matching hidden input after data-sl-pid change:",f))}}})});o.add(b);const E=T=>{T.tagName==="SHOPIFY-PAYMENT-TERMS"&&(this.log("MutationObserver found new shopify-payment-terms element"),this.updateShopifyPaymentTerms(e,t));const m=T.querySelectorAll("shopify-payment-terms");m.length>0&&(this.log(`MutationObserver found ${m.length} shopify-payment-terms in added node`),this.updateShopifyPaymentTerms(e,t)),T.tagName==="AFTERPAY-PLACEMENT"&&(this.log("MutationObserver found new afterpay-placement element"),this.updateAfterpayPlacements(e,t,"afterpay"));const y=T.querySelectorAll("afterpay-placement");y.length>0&&(this.log(`MutationObserver found ${y.length} afterpay-placement in added node`),this.updateAfterpayPlacements(e,t,"afterpay")),T.tagName==="SQUARE-PLACEMENT"&&(this.log("MutationObserver found new square-placement element"),this.updateAfterpayPlacements(e,t,"square"));const w=T.querySelectorAll("square-placement");w.length>0&&(this.log(`MutationObserver found ${w.length} square-placement in added node`),this.updateAfterpayPlacements(e,t,"square")),T.tagName==="KLARNA-PLACEMENT"&&(this.log("MutationObserver found new klarna-placement element"),this.updateKlarnaPlacements(e,t));const I=T.querySelectorAll("klarna-placement");I.length>0&&(this.log(`MutationObserver found ${I.length} klarna-placement in added node`),this.updateKlarnaPlacements(e,t))},S=T=>{b.observe(T,{attributes:!0,attributeFilter:["data-sl-pid"],attributeOldValue:!0,subtree:!1});const m=T.getAttribute("data-sl-pid");this.log(`Started AttributeObserver on specific input with data-sl-pid="${m}"`)},C=()=>{const T=document.querySelectorAll('input[name="properties[_slpt]"]');this.log(`Found ${T.length} existing hidden inputs to check`),T.forEach(m=>{const y=m.getAttribute("data-sl-pid");this.log(`Checking existing input with data-sl-pid="${y}"`),r(m)?(m.value=s,this.log("Updated existing hidden input:",s),y&&(this.log("Applying initial DOM selector changes for existing product"),u(y,h)),S(m)):y&&this.isProductInAnyPriceTest(y)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",
36y):(m.remove(),this.log("Removed non-matching hidden input for product ID:",y))})},_=()=>{document.body?(p.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver on document.body"),C(),E(document.body)):document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{document.body&&(p.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver after DOMContentLoaded"),C(),E(document.body))}):(this.log("Set timeout on observer"),setTimeout(_,10))};_(),window.__shopliftPriceTestObservers=o,window.__shopliftPriceTestValue=s,this.log("Set up DOM observer for price test hidden inputs")}catch(s){this.log("Error updating price test hidden inputs:",s)}}updateKlarnaPlacements(e,t){this.updatePlacementElements(e,t,"klarna-placement",(i,s)=>{i.setAttribute("data-purchase-amount",s.toString())})}cleanupPriceTestObservers(){const e=window.__shopliftPriceTestObservers;e&&(e.forEach(t=>{t.disconnect()}),e.clear(),this.log("Cleaned up existing price test observers")),delete window.__shopliftPriceTestObservers,delete window.__shopliftPriceTestValue}updateAfterpayPlacements(e,t,i="afterpay"){const s=i==="square"?"square-placement":"afterpay-placement";if(document.querySelectorAll(s).length===0){this.log(`No ${s} elements found on page - early return`);return}this.updatePlacementElements(e,t,s,(o,n)=>{if(i==="afterpay"){const l=(n/100).toFixed(2);o.setAttribute("data-amount",l)}else o.setAttribute("data-amount",n.toString())}),this.log("updateAfterpayPlacements completed")}updatePlacementElements(e,t,i,s){const r=document.querySelectorAll(i);if(r.length===0){this.log(`No ${i} elements found - early return`);return}let o;if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const l=t==="control"?"a":"b",c=this.state.temporary.previewConfig.variants.find(d=>d.label===l);if(!c?.domSelectors){this.log(`No variant found for label ${l} in preview config for ${i}`);return}o=c.domSelectors,this.log(`Using preview config for ${i} in merchant mode, variant: ${l}`)}else{const l=this.testConfigs.find(d=>d.id===e);if(!l){this.log(`No testConfig found for id: ${e} - early return`);return}
36const c=l.hypotheses.find(d=>t==="control"?d.isControl:!d.isControl);if(!c?.domSelectors){this.log(`No hypothesis or domSelectors found for assignment: ${t} - early return`);return}o=c.domSelectors}const n=new RegExp(`${this.DATA_SL_ATTRIBUTE_P}=["'](\\d+)["']`);r.forEach(l=>{let c=null;const d=l.parentElement;if(d&&(c=d.querySelector('input[name="properties[_slpt]"]')),c||(c=l.querySelector('input[name="properties[_slpt]"]')),!c){this.log(`No hidden input found for ${i} element`);return}const u=c.getAttribute("data-sl-pid");if(!u){this.log("Hidden input has no data-sl-pid attribute - skipping");return}const h=o.find(S=>{const C=S.cssSelector.match(n);return C&&C[1]===u});if(!h){this.log(`No matching selector found for productId: ${u} - skipping element`);return}const p=h.actions.find(S=>S.scope==="price");if(!p?.value){this.log("No price action or value found - skipping element");return}const b=parseFloat(p.value.replace(/[^0-9.]/g,""));if(Number.isNaN(b)){this.log(`Invalid price "${p.value}" for product ${u} - skipping`);return}const E=Math.round(b*100);s(l,E)}),this.log(`updatePlacementElements completed for ${i}`)}updateShopifyPaymentTerms(e,t){const i=document.querySelectorAll("shopify-payment-terms");if(i.length===0)return;this.log("Store using shopify payments");let s;if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const o=t==="control"?"a":"b",n=this.state.temporary.previewConfig.variants.find(l=>l.label===o);if(!n||!n.domSelectors){this.log(`No variant found for label ${o} in preview config`);return}s=n.domSelectors,this.log(`Using preview config for shopify-payment-terms in merchant mode, variant: ${o}`)}else{const o=this.testConfigs.find(l=>l.id===e);if(!o)return;const n=o.hypotheses.find(l=>t==="control"?l.isControl===!0:l.isControl===!1);if(!n||!n.domSelectors)return;s=n.domSelectors}const r=new RegExp(`${this.DATA_SL_ATTRIBUTE_P}=["'](\\d+)["']`);i.forEach(o=>{const n=o.getAttribute("variant-id");if(!n)return;const l=s.find(c=>{const d=c.cssSelector.match(r);return d&&d[1]===n});if(l){const c=l.actions.find(d=>d.scope==="price");if(c&&c.value){const d=o.getAttribute("shopify-meta");if(d)try{const u=JSON.parse(d);if(u.variants&&Array.isArray(u.variants)){const h=u.variants.find(p=>p.id?.toString()===n);if(h){h.full_price=c.value;const p=parseFloat(c.value.replace(/[^0-9.]/g,""));if(h.number_of_payment_terms&&h.number_of_payment_terms>1){const b=p/h.number_of_payment_terms;h.price_per_term=`$${b.toFixed(2)}`}o.setAttribute("shopify-meta",JSON.stringify(u))}}}catch(u){this.log("Error parsing/updating shoplift-meta:",u)}}}})}async makeJsonRequest(e){const t=await this.makeRequest(e);return t===null?null:JSON.parse(await t.text(),F)}async makeRequest(e){const{url:t,method:i,headers:s,data:r,signal:o}=e,n=new Headers;if(s)for(const c in s)n.append(c,s[c]);(!s||!s.Accept)&&n.append("Accept","application/json"),(!s||!s["Content-Type"])&&n.append("Content-Type","application/json"),(this.eventHost.includes("ngrok.io")||this.eventHost.includes("ngrok-free.app"))&&n.append("ngrok-skip-browser-warning","1234");const l=await this.fetch(t,{method:i,headers:n,body:r,signal:o});if(!l.ok){if(l.status===204)return null;if(l.status===422){const c=await l.json();if(typeof c<"u"&&c.isBot)throw new ie}throw new Error(`Error sending shoplift request ${l.status}`)}return l}queueAddVisitorToTest(e,t){if(this.state.essential.visitorTests.some(s=>s.testId===e))return;const i=this.testConfigs.find(s=>s.id===e);if(this.state.essential.visitorTests.push({createdAt:new Date,testId:e,hypothesisId:t.id,isThemeTest:t.type==="theme",themeId:t.themeId,isSaved:!1,isInvalid:!1,shouldSendToGa:!0,testType:t.type,assignedTo:t.isControl?"control":"variant",testTitle:i?.title}),t.type==="price"){const s=t.isControl?"control":"variant";this.log("Price test assignment detected, updating cart attributes:",e,s),this.updatePriceTestHiddenInputs(e,s,!1)}}queueCartUpdate(e){this.queueEvent(new Ce(e))}queuePageView(e){this.queueEvent(new Se(e))}queueEvent(e){!this.state.essential.consentApproved&&this.state.essential.hasConsentInteraction||this.state.analytics.queue.length>10||this.state.analytics.queue.push(e)}legacyGetLocalStorageVisitor(){const e=this.localStorageGet(this.legacySessionKey);if(e)try{return JSON.parse(e,F)}catch{}return null}pruneStaleVisitorTests(){this.state.essential.visitorTests=this.state.essential.visitorTests.filter(e=>this.testConfigs.some(t=>t.id==e.testId)||this.inactiveTestConfigs.filter(t=>this.testIsPaused(t)).some(t=>t.id===e.testId))}pruneStateAndSave(){this.pruneStaleVisitorTests(),this.saveState()}saveState(){this.persistEssentialState(),this.persistAnalyticsState()}loadState(){const e=this.loadAnalyticsState(),t={analytics:e,essential:this.loadEssentialState(e),temporary:this.loadTemporaryState()},i=this.legacyGetLocalStorageVisitor(),s=this.legacyGetCookieVisitor(),r=[i,s].filter(o=>o!==null).sort((o,n)=>+n.storedAt-+o.storedAt)[0];return t.analytics.visitor===null&&r&&({visitorTests:t.essential.visitorTests,...t.analytics.visitor}=r,t.essential.isFirstLoad=!1,t.essential.initialState={createdAt:r.createdAt,referrer:r.referrer,utmCampaign:r.utmCampaign,utmContent:r.utmContent,utmMedium:r.utmMedium,utmSource:r.utmSource,device:r.device},this.deleteCookie("SHOPLIFT"),this.deleteLocalStorage(this.legacySessionKey)),!t.essential.consentApproved&&t.essential.hasConsentInteraction&&this.deleteLocalStorage(this.analyticsSessionKey),t}loadEssentialState(e){const t=this.loadLocalStorage(this.essentialSessionKey),i=this.loadCookie(this.essentialSessionKey),s=this.getInitialState();e.visitor?.device&&(s.device=e.visitor.device);const r={timestamp:new Date,consentApproved:!1,hasConsentInteraction:!1,debugMode:!1,initialState:s,visitorTests:[],isFirstLoad:!0},o=[t,i].filter(n=>n!==null).sort((n,l)=>+l.timestamp-+n.timestamp)[0]??r;return o.initialState||(e.visitor!==null?o.initialState=e.visitor:(o.initialState=s,o.initialState.createdAt=o.timestamp)),o}loadAnalyticsState(){const e=this.loadLocalStorage(this.analyticsSessionKey),t=this.loadCookie(this.analyticsSessionKey),i={timestamp:new Date,visitor:null,queue:[]},s=[e,t].filter(r=>r!==null).sort((r,o)=>+o.timestamp-+r.timestamp)[0]??i;return s.queue.length===0&&e&&e.queue.length>1&&(s.queue=e.queue),s}loadTemporaryState(){const e=this.sessionStorageGet(this.temporarySessionKey),t=e?JSON.parse(e,F):null,i=this.loadCookie(this.temporarySessionKey);return t??i??{isMerchant:!1,timestamp:new Date}}persistEssentialState(){this.log("Persisting essential state"),this.state.essential.isFirstLoad=!1,this.state.essential.timestamp=new Date,this.persistLocalStorageState(this.essentialSessionKey,this.state.essential),this.persist
36CookieState(this.essentialSessionKey,this.state.essential)}persistAnalyticsState(){this.log("Persisting analytics state"),this.state.essential.consentApproved&&(this.state.analytics.timestamp=new Date,this.persistLocalStorageState(this.analyticsSessionKey,this.state.analytics),this.persistCookieState(this.analyticsSessionKey,{...this.state.analytics,queue:[]}))}persistTemporaryState(){this.log("Setting temporary session state"),this.state.temporary.timestamp=new Date,this.sessionStorageSet(this.temporarySessionKey,JSON.stringify(this.state.temporary)),this.persistCookieState(this.temporarySessionKey,this.state.temporary,!0)}loadLocalStorage(e){const t=this.localStorageGet(e);if(t===null)return null;try{return JSON.parse(t,F)}catch{return null}}loadCookie(e){const t=this.getCookie(e);if(t===null)return null;try{return JSON.parse(t,F)}catch{return null}}persistLocalStorageState(e,t){this.localStorageSet(e,JSON.stringify(t))}persistCookieState(e,t,i=!1){const s=JSON.stringify(t),r=i?"":`expires=${new Date(new Date().getTime()+864e5*365).toUTCString()};`;document.cookie=`${e}=${s};domain=.${window.location.hostname};path=/;SameSite=Strict;${r}`}deleteCookie(e){const t=new Date(0).toUTCString();document.cookie=`${e}=;domain=.${window.location.hostname};path=/;expires=${t};`}deleteLocalStorage(e){window.localStorage.removeItem(e)}getChannel(e){return[{"name":"cross-network","test":(v) => new RegExp(".*cross-network.*", "i").test(v.utmCampaign)},{"name":"direct","test":(v) => v.utmSource === "" && v.utmMedium === ""},{"name":"paid-shopping","test":(v) => (new RegExp("^(?:Google|IGShopping|aax-us-east\.amazon-adsystem\.com|aax\.amazon-adsystem\.com|alibaba|alibaba\.com|amazon|amazon\.co\.uk|amazon\.com|apps\.shopify\.com|checkout\.shopify\.com|checkout\.stripe\.com|cr\.shopping\.naver\.com|cr2\.shopping\.naver\.com|ebay|ebay\.co\.uk|ebay\.com|ebay\.com\.au|ebay\.de|etsy|etsy\.com|m\.alibaba\.com|m\.shopping\.naver\.com|mercadolibre|mercadolibre\.com|mercadolibre\.com\.ar|mercadolibre\.com\.mx|message\.alibaba\.com|msearch\.shopping\.naver\.com|nl\.shopping\.net|no\.shopping\.net|offer\.alibaba\.com|one\.walmart\.com|order\.shopping\.yahoo\.co\.jp|partners\.shopify\.com|s3\.amazonaws\.com|se\.shopping\.net|shop\.app|shopify|shopify\.com|shopping\.naver\.com|shopping\.yahoo\.co\.jp|shopping\.yahoo\.com|shopzilla|shopzilla\.com|simplycodes\.com|store\.shopping\.yahoo\.co\.jp|stripe|stripe\.com|uk\.shopping\.net|walmart|walmart\.com)$", "i").test(v.utmSource) || new RegExp("^(.*(([^a-df-z]|^)shop|shopping).*)$", "i").test(v.utmCampaign)) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-search","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|y
36andex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-social","test":(v) => new RegExp("^(?:43things|43things\.com|51\.com|5ch\.net|Hatena|ImageShack|academia\.edu|activerain|activerain\.com|activeworlds|activeworlds\.com|addthis|addthis\.com|airg\.ca|allnurses\.com|allrecipes\.com|alumniclass|alumniclass\.com|ameba\.jp|ameblo\.jp|americantowns|americantowns\.com|amp\.reddit\.com|ancestry\.com|anobii|anobii\.com|answerbag|answerbag\.com|answers\.yahoo\.com|aolanswers|aolanswers\.com|apps\.facebook\.com|ar\.pinterest\.com|artstation\.com|askubuntu|askubuntu\.com|asmallworld\.com|athlinks|athlinks\.com|away\.vk\.com|awe\.sm|b\.hatena\.ne\.jp|baby-gaga|baby-gaga\.com|babyblog\.ru|badoo|badoo\.com|bebo|bebo\.com|beforeitsnews|beforeitsnews\.com|bharatstudent|bharatstudent\.com|biip\.no|biswap\.org|bit\.ly|blackcareernetwork\.com|blackplanet|blackplanet\.com|blip\.fm|blog\.com|blog\.feedspot\.com|blog\.goo\.ne\.jp|blog\.naver\.com|blog\.yahoo\.co\.jp|blogg\.no|bloggang\.com|blogger|blogger\.com|blogher|blogher\.com|bloglines|bloglines\.com|blogs\.com|blogsome|blogsome\.com|blogspot|blogspot\.com|blogster|blogster\.com|blurtit|blurtit\.com|bookmarks\.yahoo\.co\.jp|bookmarks\.yahoo\.com|br\.pinterest\.com|brightkite|brightkite\.com|brizzly|brizzly\.com|business\.facebook\.com|buzzfeed|buzzfeed\.com|buzznet|buzznet\.com|cafe\.naver\.com|cafemom|cafemom\.com|camospace|camospace\.com|canalblog\.com|care\.com|care2|care2\.com|caringbridge\.org|catster|catster\.com|cbnt\.io|cellufun|cellufun\.com|centerblog\.net|chat\.zalo\.me|chegg\.com|chicagonow|chicagonow\.com|chiebukuro\.yahoo\.co\.jp|classmates|classmates\.com|classquest|classquest\.com|co\.pinterest\.com|cocolog-nifty|cocolog-nifty\.com|copainsdavant\.linternaute\.com|couchsurfing\.org|cozycot|cozycot\.com|cross\.tv|crunchyroll|crunchyroll\.com|cyworld|cyworld\.com|cz\.pinterest\.com|d\.hatena\.ne\.jp|dailystrength\.org|deluxe\.com|deviantart|deviantart\.com|dianping|dianping\.com|digg|digg\.com|diigo|diigo\.com|discover\.hubpages\.com|disqus|disqus\.com|dogster|dogster\.com|dol2day|dol2day\.com|doostang|doostang\.com|dopplr|dopplr\.com|douban|douban\.com|draft\.blogger\.com|draugiem\.lv|drugs-forum|drugs-forum\.com|dzone|dzone\.com|edublogs\.org|elftown|elftown\.com|epicurious\.com|everforo\.com|exblog\.jp|extole|extole\.com|facebook|facebook\.com|faceparty|faceparty\.com|fandom\.com|fanpop|fanpop\.com|fark|fark\.com|fb|fb\.me|fc2|fc2\.com|feedspot|feministing|feministing\.com|filmaffinity|filmaffinity\.com|flickr|flickr\.com|flipboard|flipboard\.com|folkdirect|folkdirect\.com|foodservice|foodservice\.com|forums\.androidcentral\.com|forums\.crackberry\.com|forums\.imore\.com|forums\.nexopia\.com|forums\.webosnation\.com|forums\.wpcentral\.com|fotki|fotki\.com|fotolog|fotolog\.com|foursquare|foursquare\.com|free\.facebook\.com|friendfeed|friendfeed\.com|fruehstueckstreff\.org|fubar|fubar\.com|gaiaonline|gaiaonline\.com|gamerdna|gamerdna\.com|gather\.com|geni\.com|getpocket\.com|glassboard|glassboard\.com|glassdoor|glassdoor\.com|godtube|godtube\.com|goldenline\.pl|goldstar|goldstar\.com|goo\.gl|gooblog|goodreads|goodreads\.com|google\+|googlegroups\.com|googleplus|govloop|govloop\.com|gowalla|gowalla\.com|gree\.jp|groups\.google\.com|gulli\.com|gutefrage\.net|habbo|habbo\.com|hi5|hi5\.com|hootsuite|hootsuite\.com|houzz|houzz\.com|hoverspot|hoverspot\.com|hr\.com|hu\.pinterest\.com|hubculture|hubculture\.com|hubpages\.com|hyves\.net|hyves\.nl|ibibo|ibibo\.com|id\.pinterest\.com|identi\.ca|ig|imageshack\.com|imageshack\.us|imvu|imvu\.com|in\.pinterest\.com|insanejournal|insanejournal\.com|instagram|instagram\.com|instapaper|instapaper\.com|internations\.org|interpals\.net|intherooms|intherooms\.com|irc-galleria\.net|is\.gd|italki|italki\.com|jammerdirect|jammerdirect\.com|jappy\.com|jappy\.de|kaboodle\.com|kakao|kakao\.com|kakaocorp\.com|kaneva|kaneva\.com|kin\.naver\.com|l\.facebook\.com|l\.instagram\.com|l\.messenger\.com|last\.fm|librarything|librarything\.com|lifestream\.aol\.com|line|line\.me|linkedin|linkedin\.com|listal|listal\.com|listography|listography\.com|livedoor\.com|livedoorblog|livejournal|livejournal\.com|lm\.facebook\.com|lnkd\.in|m\.blog\.naver\.com|m\.cafe\.naver\.com|m\.facebook\.com|m\.kin\.naver\.com|m\.vk\.com|m\.yelp\.com|mbga\.jp|medium\.com|meetin\.org|meetup|meetup\.com|meinvz\.net|meneame\.net|menuism\.com|messages\.google\.com|messages\.yahoo\.co\.jp|messenger|messenger\.com|mix\.com|mixi\.jp|mobile\.facebook\.com|mocospace|mocospace\.com|mouthshut|mouthshut\.com|movabletype|movabletype\.com|mubi|mubi\.com|my\.o
36pera\.com|myanimelist\.net|myheritage|myheritage\.com|mylife|mylife\.com|mymodernmet|mymodernmet\.com|myspace|myspace\.com|netvibes|netvibes\.com|news\.ycombinator\.com|newsshowcase|nexopia|ngopost\.org|niconico|nicovideo\.jp|nightlifelink|nightlifelink\.com|ning|ning\.com|nl\.pinterest\.com|odnoklassniki\.ru|odnoklassniki\.ua|okwave\.jp|old\.reddit\.com|oneworldgroup\.org|onstartups|onstartups\.com|opendiary|opendiary\.com|oshiete\.goo\.ne\.jp|out\.reddit\.com|over-blog\.com|overblog\.com|paper\.li|partyflock\.nl|photobucket|photobucket\.com|pinboard|pinboard\.in|pingsta|pingsta\.com|pinterest|pinterest\.at|pinterest\.ca|pinterest\.ch|pinterest\.cl|pinterest\.co\.kr|pinterest\.co\.uk|pinterest\.com|pinterest\.com\.au|pinterest\.com\.mx|pinterest\.de|pinterest\.es|pinterest\.fr|pinterest\.it|pinterest\.jp|pinterest\.nz|pinterest\.ph|pinterest\.pt|pinterest\.ru|pinterest\.se|pixiv\.net|pl\.pinterest\.com|playahead\.se|plurk|plurk\.com|plus\.google\.com|plus\.url\.google\.com|pocket\.co|posterous|posterous\.com|pro\.homeadvisor\.com|pulse\.yahoo\.com|qapacity|qapacity\.com|quechup|quechup\.com|quora|quora\.com|qzone\.qq\.com|ravelry|ravelry\.com|reddit|reddit\.com|redux|redux\.com|renren|renren\.com|researchgate\.net|reunion|reunion\.com|reverbnation|reverbnation\.com|rtl\.de|ryze|ryze\.com|salespider|salespider\.com|scoop\.it|screenrant|screenrant\.com|scribd|scribd\.com|scvngr|scvngr\.com|secondlife|secondlife\.com|serverfault|serverfault\.com|shareit|sharethis|sharethis\.com|shvoong\.com|sites\.google\.com|skype|skyrock|skyrock\.com|slashdot\.org|slideshare\.net|smartnews\.com|snapchat|snapchat\.com|social|sociallife\.com\.br|socialvibe|socialvibe\.com|spaces\.live\.com|spoke|spoke\.com|spruz|spruz\.com|ssense\.com|stackapps|stackapps\.com|stackexchange|stackexchange\.com|stackoverflow|stackoverflow\.com|stardoll\.com|stickam|stickam\.com|studivz\.net|suomi24\.fi|superuser|superuser\.com|sweeva|sweeva\.com|t\.co|t\.me|tagged|tagged\.com|taggedmail|taggedmail\.com|talkbiznow|talkbiznow\.com|taringa\.net|techmeme|techmeme\.com|tencent|tencent\.com|tiktok|tiktok\.com|tinyurl|tinyurl\.com|toolbox|toolbox\.com|touch\.facebook\.com|tr\.pinterest\.com|travellerspoint|travellerspoint\.com|tripadvisor|tripadvisor\.com|trombi|trombi\.com|trustpilot|tudou|tudou\.com|tuenti|tuenti\.com|tumblr|tumblr\.com|tweetdeck|tweetdeck\.com|twitter|twitter\.com|twoo\.com|typepad|typepad\.com|unblog\.fr|urbanspoon\.com|ushareit\.com|ushi\.cn|vampirefreaks|vampirefreaks\.com|vampirerave|vampirerave\.com|vg\.no|video\.ibm\.com|vk\.com|vkontakte\.ru|wakoopa|wakoopa\.com|wattpad|wattpad\.com|web\.facebook\.com|web\.skype\.com|webshots|webshots\.com|wechat|wechat\.com|weebly|weebly\.com|weibo|weibo\.com|wer-weiss-was\.de|weread|weread\.com|whatsapp|whatsapp\.com|wiki\.answers\.com|wikihow\.com|wikitravel\.org|woot\.com|wordpress|wordpress\.com|wordpress\.org|xanga|xanga\.com|xing|xing\.com|yahoo-mbga\.jp|yammer|yammer\.com|yelp|yelp\.co\.uk|yelp\.com|youroom\.in|za\.pinterest\.com|zalo|zoo\.gr|zooppa|zooppa\.com)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-video","test":(v) => new RegExp("^(?:blog\.twitch\.tv|crackle|crackle\.com|curiositystream|curiositystream\.com|d\.tube|dailymotion|dailymotion\.com|dashboard\.twitch\.tv|disneyplus|disneyplus\.com|fast\.wistia\.net|help\.hulu\.com|help\.netflix\.com|hulu|hulu\.com|id\.twitch\.tv|iq\.com|iqiyi|iqiyi\.com|jobs\.netflix\.com|justin\.tv|m\.twitch\.tv|m\.youtube\.com|music\.youtube\.com|netflix|netflix\.com|player\.twitch\.tv|player\.vimeo\.com|ted|ted\.com|twitch|twitch\.tv|utreon|utreon\.com|veoh|veoh\.com|viadeo\.journaldunet\.com|vimeo|vimeo\.com|wistia|wistia\.com|youku|youku\.com|youtube|youtube\.com)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"display","test":(v) => new RegExp("^(?:display|banner|expandable|interstitial|cpm)$", "i").test(v.utmMedium)},{"name":"paid-other","test":(v) => new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)}
36,{"name":"organic-shopping","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|yandex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) || new RegExp("^(.*(([^a-df-z]|^)shop|shopping).*)$", "i").test(v.utmCampaign)},{"name":"organic-social","test":(v) => new RegExp("^(?:43things|43things\.com|51\.com|5ch\.net|Hatena|ImageShack|academia\.edu|activerain|activerain\.com|activeworlds|activeworlds\.com|addthis|addthis\.com|airg\.ca|allnurses\.com|allrecipes\.com|alumniclass|alumniclass\.com|ameba\.jp|ameblo\.jp|americantowns|americantowns\.com|amp\.reddit\.com|ancestry\.com|anobii|anobii\.com|answerbag|answerbag\.com|answers\.yahoo\.com|aolanswers|aolanswers\.com|apps\.facebook\.com|ar\.pinterest\.com|artstation\.com|askubuntu|askubuntu\.com|asmallworld\.com|athlinks|athlinks\.com|away\.vk\.com|awe\.sm|b\.hatena\.ne\.jp|baby-gaga|baby-gaga\.com|babyblog\.ru|badoo|badoo\.com|bebo|bebo\.com|beforeitsnews|beforeitsnews\.com|bharatstudent|bharatstudent\.com|biip\.no|biswap\.org|bit\.ly|blackcareernetwork\.com|blackplanet|blackplanet\.com|blip\.fm|blog\.com|blog\.feedspot\.com|blog\.goo\.ne\.jp|blog\.naver\.com|blog\.yahoo\.co\.jp|blogg\.no|bloggang\.com|blogger|blogger\.com|blogher|blogher\.com|bloglines|bloglines\.com|blogs\.com|blogsome|blogsome\.com|blogspot|blogspot\.com|blogster|blogster\.com|blurtit|blurtit\.com|bookmarks\.yahoo\.co\.jp|bookmarks\.yahoo\.com|br\.pinterest\.com|brightkite|brightkite\.com|brizzly|brizzly\.com|business\.facebook\.com|buzzfeed|buzzfeed\.com|buzznet|buzznet\.com|cafe\.naver\.com|cafemom|cafemom\.com|camospace|camospace\.com|canalblog\.com|care\.com|care2|care2\.com|caringbridge\.org|catster|catster\.com|cbnt\.io|cellufun|cellufun\.com|centerblog\.net|chat\.zalo\.me|chegg\.com|chicagonow|chicagonow\.com|chiebukuro\.yahoo\.co\.jp|classmates|classmates\.com|classquest|classquest\.com|co\.pinterest\.com|cocolog-nifty|cocolog-nifty\.com|copainsdavant\.linternaute\.com|couchsurfing\.org|cozycot|cozycot\.com|cross\.tv|crunchyroll|crunchyroll\.com|cyworld|cyworld\.com|cz\.pinterest\.com|d\.hatena\.ne\.jp|dailystrength\.org|deluxe\.com|deviantart|deviantart\.com|dianping|dianping\.com|digg|digg\.com|diigo|diigo\.com|discover\.hubpages\.com|disqus|disqus\.com|dogster|dogster\.com|dol2day|dol2day\.com|doostang|doostang\.com|dopplr|dopplr\.com|douban|douban\.com|draft\.blogger\.com|draugiem\.lv|drugs-forum|drugs-forum\.com|dzone|dzone\.com|edublogs\.org|elftown|elftown\.com|epicurious\.com|everforo\.com|exblog\.jp|extole|extole\.com|facebook|facebook\.com|faceparty|faceparty\.com|fandom\.com|fanpop|fanpop\.com|fark|fark\.com|fb|fb\.me|fc2|fc2\.com|feedspot|feministing|feministing\.com|filmaffinity|filmaffinity\.com|flickr|flickr\.com|flipboard|flipboard\.com|folkdirect|folkdirect\.com|foodservice|foodservice\.com|forums\.androidcentral\.com|forums\.crackberry\.com|forums\.imore\.com|forums\.nexopia\.com|forums\.webosnation\.com|forums\.wpcentral\.com|fotki|fotki\.com|fotolog|fotolog\.com|foursquare|foursquare\.com|free\.facebook\.com|friendfeed|friendfeed\.com|fruehstueckstreff\.org|fubar|fubar\.com|gaiaonline|gaiaonline\.com|gamerdna|gamerdna\.com|gather\.com|geni\.com|getpocket\.com|glassboard|glassboard\.com|glassdoor|glassdoor\.com|godtube|godtube\.com|goldenline\.pl|goldstar|goldstar\.com|goo\.gl|gooblog|goodreads|goodreads\.com|google\+|googlegroups\.com|googleplus|govloop|govloop\.com|gowalla|gowalla\.com|gree\.jp|groups\.google\.com|gulli\.com|gutefrage\.net|habbo|habbo\.com|hi5|hi5\.com|hootsuite|hootsuite\.com|houzz|houzz\.com|hoverspot|hoverspot\.com|hr\.com|hu\.pinterest\.com|hubculture|hubculture\.com|hubpages\.com|hyves\.net|hyves\.nl|ibibo|ibibo\.com|id\.pinterest\.com|identi\.ca|ig|imageshack\.com|imageshack\.us|imvu|imvu\.com|in\.pinterest\.com|insanejournal|insanejournal\.com|instagram|instagram\.com|instapaper|instapaper\.com|internations\.org|interpals\.net|intherooms|intherooms\.com|irc-galleria\.net|is\.gd|italki|italki\.com|jammerdirect|jammerdirect\.com|jappy\.com|jappy\.de|kaboodle\.com|k
36akao|kakao\.com|kakaocorp\.com|kaneva|kaneva\.com|kin\.naver\.com|l\.facebook\.com|l\.instagram\.com|l\.messenger\.com|last\.fm|librarything|librarything\.com|lifestream\.aol\.com|line|line\.me|linkedin|linkedin\.com|listal|listal\.com|listography|listography\.com|livedoor\.com|livedoorblog|livejournal|livejournal\.com|lm\.facebook\.com|lnkd\.in|m\.blog\.naver\.com|m\.cafe\.naver\.com|m\.facebook\.com|m\.kin\.naver\.com|m\.vk\.com|m\.yelp\.com|mbga\.jp|medium\.com|meetin\.org|meetup|meetup\.com|meinvz\.net|meneame\.net|menuism\.com|messages\.google\.com|messages\.yahoo\.co\.jp|messenger|messenger\.com|mix\.com|mixi\.jp|mobile\.facebook\.com|mocospace|mocospace\.com|mouthshut|mouthshut\.com|movabletype|movabletype\.com|mubi|mubi\.com|my\.opera\.com|myanimelist\.net|myheritage|myheritage\.com|mylife|mylife\.com|mymodernmet|mymodernmet\.com|myspace|myspace\.com|netvibes|netvibes\.com|news\.ycombinator\.com|newsshowcase|nexopia|ngopost\.org|niconico|nicovideo\.jp|nightlifelink|nightlifelink\.com|ning|ning\.com|nl\.pinterest\.com|odnoklassniki\.ru|odnoklassniki\.ua|okwave\.jp|old\.reddit\.com|oneworldgroup\.org|onstartups|onstartups\.com|opendiary|opendiary\.com|oshiete\.goo\.ne\.jp|out\.reddit\.com|over-blog\.com|overblog\.com|paper\.li|partyflock\.nl|photobucket|photobucket\.com|pinboard|pinboard\.in|pingsta|pingsta\.com|pinterest|pinterest\.at|pinterest\.ca|pinterest\.ch|pinterest\.cl|pinterest\.co\.kr|pinterest\.co\.uk|pinterest\.com|pinterest\.com\.au|pinterest\.com\.mx|pinterest\.de|pinterest\.es|pinterest\.fr|pinterest\.it|pinterest\.jp|pinterest\.nz|pinterest\.ph|pinterest\.pt|pinterest\.ru|pinterest\.se|pixiv\.net|pl\.pinterest\.com|playahead\.se|plurk|plurk\.com|plus\.google\.com|plus\.url\.google\.com|pocket\.co|posterous|posterous\.com|pro\.homeadvisor\.com|pulse\.yahoo\.com|qapacity|qapacity\.com|quechup|quechup\.com|quora|quora\.com|qzone\.qq\.com|ravelry|ravelry\.com|reddit|reddit\.com|redux|redux\.com|renren|renren\.com|researchgate\.net|reunion|reunion\.com|reverbnation|reverbnation\.com|rtl\.de|ryze|ryze\.com|salespider|salespider\.com|scoop\.it|screenrant|screenrant\.com|scribd|scribd\.com|scvngr|scvngr\.com|secondlife|secondlife\.com|serverfault|serverfault\.com|shareit|sharethis|sharethis\.com|shvoong\.com|sites\.google\.com|skype|skyrock|skyrock\.com|slashdot\.org|slideshare\.net|smartnews\.com|snapchat|snapchat\.com|social|sociallife\.com\.br|socialvibe|socialvibe\.com|spaces\.live\.com|spoke|spoke\.com|spruz|spruz\.com|ssense\.com|stackapps|stackapps\.com|stackexchange|stackexchange\.com|stackoverflow|stackoverflow\.com|stardoll\.com|stickam|stickam\.com|studivz\.net|suomi24\.fi|superuser|superuser\.com|sweeva|sweeva\.com|t\.co|t\.me|tagged|tagged\.com|taggedmail|taggedmail\.com|talkbiznow|talkbiznow\.com|taringa\.net|techmeme|techmeme\.com|tencent|tencent\.com|tiktok|tiktok\.com|tinyurl|tinyurl\.com|toolbox|toolbox\.com|touch\.facebook\.com|tr\.pinterest\.com|travellerspoint|travellerspoint\.com|tripadvisor|tripadvisor\.com|trombi|trombi\.com|trustpilot|tudou|tudou\.com|tuenti|tuenti\.com|tumblr|tumblr\.com|tweetdeck|tweetdeck\.com|twitter|twitter\.com|twoo\.com|typepad|typepad\.com|unblog\.fr|urbanspoon\.com|ushareit\.com|ushi\.cn|vampirefreaks|vampirefreaks\.com|vampirerave|vampirerave\.com|vg\.no|video\.ibm\.com|vk\.com|vkontakte\.ru|wakoopa|wakoopa\.com|wattpad|wattpad\.com|web\.facebook\.com|web\.skype\.com|webshots|webshots\.com|wechat|wechat\.com|weebly|weebly\.com|weibo|weibo\.com|wer-weiss-was\.de|weread|weread\.com|whatsapp|whatsapp\.com|wiki\.answers\.com|wikihow\.com|wikitravel\.org|woot\.com|wordpress|wordpress\.com|wordpress\.org|xanga|xanga\.com|xing|xing\.com|yahoo-mbga\.jp|yammer|yammer\.com|yelp|yelp\.co\.uk|yelp\.com|youroom\.in|za\.pinterest\.com|zalo|zoo\.gr|zooppa|zooppa\.com)$", "i").test(v.utmSource) || new RegExp("^(?:social|social-network|social-media|sm|social network|social media)$", "i").test(v.utmMedium)},{"name":"organic-video","test":(v) => new RegExp("^(?:blog\.twitch\.tv|crackle|crackle\.com|curiositystream|curiositystream\.com|d\.tube|dailymotion|dailymotion\.com|dashboard\.twitch\.tv|disneyplus|disneyplus\.com|fast\.wistia\.net|help\.hulu\.com|help\.netflix\.com|hulu|hulu\.com|id\.twitch\.tv|iq\.com|iqiyi|iqiyi\.com|jobs\.netflix\.com|justin\.tv|m\.twitch\.tv|m\.youtube\.com|music\.youtube\.com|netflix|netflix\.com|player\.twitch\.tv|player\.vimeo\.com|ted|ted\.com|twitch|twitch\.tv|utreon|utreon\.com|veoh|veoh\.com|viadeo\.journaldunet\.com|vimeo|vimeo\.com|wistia|wistia\.com|youku|youku\.com|youtube|youtube\.com)$", "i").test(v.utmSource) || new RegExp("^(.*video.*)$", "i").test(v.utmMedium)},{"name":"organic-search","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|y
36andex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) || v.utmMedium.toLowerCase() === "organic"},{"name":"referral","test":(v) => new RegExp("^(?:referral|app|link)$", "i").test(v.utmMedium)},{"name":"email","test":(v) => new RegExp("^(?:email|e-mail|e_mail|e mail)$", "i").test(v.utmMedium) || new RegExp("^(?:email|e-mail|e_mail|e mail)$", "i").test(v.utmSource)},{"name":"affiliate","test":(v) => v.utmMedium.toLowerCase() === "affiliate"},{"name":"audio","test":(v) => v.utmMedium.toLowerCase() === "audio"},{"name":"sms","test":(v) => v.utmSource.toLowerCase() === "sms" || v.utmMedium.toLowerCase() === "sms"},{"name":"mobile-push-notification","test":(v) => v.utmSource.toLowerCase() === "firebase" || new RegExp("(?:.*mobile.*|.*notification.*|push$)", "i").test(v.utmMedium)}].find(i=>i.test(e))?.name??"other"}getShopifyAnalyticsId(){const e=this.getCookie("_shopify_y");if(e)return e;try{const t=this.localStorageGet("Shoplift_ClientId");if(t)return t}catch{}return null}legacyGetCookieVisitor(){const e=this.getCookie("SHOPLIFT");return e===null?null:JSON.parse(e,F)}getCookie(e){const t=this.cookie.split("; ").filter(i=>i.split("=").at(0)===e).at(0);return t===void 0?null:t.split("=").slice(1).join("=")}monitorConsentChange(){document.addEventListener("visitorConsentCollected",e=>{(async()=>await this.onConsentChange(e.detail.analyticsAllowed,!0))()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>this.loadShopifyConsentApiWithRetry()):this.loadShopifyConsentApiWithRetry()}loadShopifyConsentApiWithRetry(){let e=0;const t=()=>{this.loadShopifyConsentApi()||e++<10&&window.setTimeout(t,100)};t()}loadShopifyConsentApi(){if(window.Shopify){this.log("Loading Shopify features");const e=async()=>{if(!window.Shopify){this.log("Shopify object missing... suddenly?");return}if(window.Shopify.customerPrivacy===void 0){this.log("Shopify CustomerPrivacy api still missing, trying again in 1000ms"),t=window.setTimeout(()=>{(async()=>await e())()},1e3);return}if(this.geoViaShopify){const s=window.Shopify.customerPrivacy.getRegion?.();this.resolvedRegion=typeof s=="string"?s.replace(/-/g,""):""}const i=window.Shopify.customerPrivacy.getTrackingConsent();await this.onConsentChange(window.Shopify.customerPrivacy.analyticsProcessingAllowed(),i==="yes")};let t=window.setTimeout(()=>{(async()=>await e())()},5e3);return window.Shopify.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],i=>{(async()=>{if(window.clearTimeout(t),i){this.log("Error loading consent tracking",i);return}await e()})()}),!0}return!1}async onConsentChange(e,t){try{if(this.log("Consent change detected",e,t),this.state.essential.consentApproved=e,this.state.essential.hasConsentInteraction=t,!this.state.essential.consentApproved){this.state.essential.hasConsentInteraction&&(this.state.analytics.queue.length=0),this.saveState();return}this.cookie=document.cookie,this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.saveState(),await this.syncAllEvents()}catch(i){this.log("Error syncing on consent change",i)}}isThemePreview(){return isThemePreview||themeRole!=="main"}isAppProxyPath(){const e=["/apps/","/tools/","/a/"],t=window.location.pathname;return e.some(i=>t.startsWith(i))}clearThemeBar(e,t,i){const s=structuredClone(i);this.log("Looking for theme bar"),this.waitForElement(null,"body").then(r=>this.waitForElement(r,"#preview-bar-iframe, #PBarNextFrameWrapper").then(o=>(this.log("Found theme bar"),t&&(this.log("Removing theme bar"),o.remove()),e?this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify({...this.debugState(),stateAtEvaluation:s},ee)}):Promise.resolve(null)))).catch(r=>console.error(r))}waitForElement(e,t){return new Promise(i=>{const s=document.querySelector(t);if(s){i(s);return}const r=new MutationObserver(o=>{const n=document.querySelector(t);if(n){r.disconnect(),i(n);return}});r.observe(e??document.documentElement,{childList:!0})})}setDebug(e){this.state.essential.debugMode=e,this.saveState()}log(e,...t){let i=0;const s=e.replace(/%[sdoOfF]/g,r=>{if(i>=t.length)return r;const o=t[i++];return r==="%o"||r==="%O"?JSON.stringify(o):String(o)});this.logHistory.push(`[${new Date().toISOString()}][SL] ${s}`),!(!this.state.essential.debugMode&&!this.shopliftDebug)&&console.debug(`[SL] ${e}`,...t)}debugState(){return{state:this.state,storage:{essential:this.loadLocalStorage(this.essentialSessionKey),analytics:this.loadLocalStorage(this.analyticsSessionKey)},params:{shop:this.shop,host:this.host,eventHost:this.eventHost,cssHideClass:this.cssHideClass,testConfigs:this.testConfigs,inactiveTestConfigs:this.inactiveTestConfigs,sendPageView:this.sendPageView,isShopifyMerchantCookie
36:this.getCookie("is_shopify_merchant"),themeId,url:window.location.href,isThemePreview,themeRole,gaConfig:this.gaConfig},logHistory:this.logHistory}}createViewportObserver(e,t={}){const{threshold:i=this.VIEWPORT_TRACK_THRESHOLD,triggerOnce:s=!0}=t,r=new Set;return new IntersectionObserver(o=>{o.forEach(n=>{if(n.isIntersecting&&!r.has(n.target)){const l=n.target,c=l.getAttribute(this.DATA_SL_TEST_ID);c&&(e(c,l),s&&r.add(l))}})},{threshold:i})}applyChangesWithViewport(e,t,i,s){const r=t.selectorsForViewportTracking??t.selectors,o=n=>{if(this.state.essential.visitorTests.some(h=>h.testId===n)||this.activeViewportObservers.has(n))return;const l=[];if(r.forEach(h=>{e.querySelectorAll(h.cssSelector).forEach(b=>l.push(b))}),l.length===0)return;let c=!1;const d=()=>{c||(c=!0,i(n),u.disconnect(),this.activeViewportObservers.delete(n))},u=this.createViewportObserver(()=>{d()},{triggerOnce:!0,...s});this.activeViewportObservers.set(n,u),this.log(`Created viewport observer for test ${n}, observing ${l.length} elements`),l.forEach(h=>{h.setAttribute(this.DATA_SL_TEST_ID,String(n)),u.observe(h)}),setTimeout(()=>{c||l.forEach(h=>{const p=h.getBoundingClientRect(),b=s?.threshold??this.VIEWPORT_TRACK_THRESHOLD,E=Math.min(p.bottom,window.innerHeight)-Math.max(p.top,0),S=Math.min(p.right,window.innerWidth)-Math.max(p.left,0);p.top<window.innerHeight&&p.bottom>0&&p.left<window.innerWidth&&p.right>0&&E>0&&S>0&&E>=p.height*b&&(this.log(`Price element already visible in viewport for test ${n}:`,h),d())})},100)};t.selectors.length>0&&U(e,t,()=>{}),Te(e,{testId:t.testId,hypothesisId:t.hypothesisId,selectors:r},n=>{o(n)})}applyPriceTestWithMapLookup(e,t,i,s){if(!t.priceData){this.log("No price data for hypothesis '%s'",t.id);return}this.log("Hypothesis '%s' isControl=%s, priceData has %d variants",t.id,t.isControl,t.priceData.variants.length);const r=t.priceData.variants.slice(0,3);for(const[S,C,_]of r)this.log(" Sample priceData: variant=%s, price=%d, compareAt=%d",S,C,_);const o=j(t.priceData),n=new Set;for(const S of i)if(S.priceData)for(const[C]of S.priceData.variants)n.add(C);this.log("Price test Map lookup: %d products in hypothesis, %d total products to track",o.size,n.size);const l=t.priceData,c=new WeakSet;let d=!1;const u="[data-sl-attribute-p], [data-sl-attribute-cap], [data-sl-attribute-discount]",h=S=>{if(c.has(S))return;const C=S.getAttribute("data-sl-attribute-p"),_=S.getAttribute("data-sl-attribute-cap"),T=S.getAttribute("data-sl-attribute-discount"),m=C||_||T;if(!m||!n.has(m))return;c.add(S);const y=o.get(m);y&&(this.log("Applying price for product %s: %d cents (compare at: %d cents)",m,y.priceInCents,y.compareAtPriceInCents),Le(S,m,y,l),this.log("Applied price to element for product %s",m)),!d&&!this.state.essential.visitorTests.some(w=>w.testId===e)&&(S.setAttribute(this.DATA_SL_TEST_ID,String(e)),this.setupElementViewportTracking(S,e,()=>{d||(d=!0,s(e))}))},p=()=>{const S=document.querySelectorAll(u);this.log("Scanning for price elements, found: %d",S.length),S.forEach(h)},b=new MutationObserver(S=>{for(const C of S)C.type==="childList"&&C.addedNodes.forEach(_=>{if(_.nodeType===Node.ELEMENT_NODE){const T=_;(T.hasAttribute("data-sl-attribute-p")||T.hasAttribute("data-sl-attribute-cap")||T.hasAttribute("data-sl-attribute-discount"))&&h(T),T.querySelectorAll(u).forEach(h)}}),C.type==="attributes"&&C.target instanceof Element&&h(C.target)}),E=document.body||document.documentElement;b.observe(E,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-sl-attribute-p","data-sl-attribute-cap","data-sl-attribute-discount"]}),this.log("MutationObserver started for price elements"),p(),document.readyState==="loading"&&document.addEventListener("DOMContentLoaded",()=>{this.log("DOMContentLoaded - rescanning for price elements"),p()}),setTimeout(()=>{this.log("Delayed rescan for price elements"),p()},100),setTimeout(()=>{this.log("Final rescan for price elements"),p()},500)}setupElementViewportTracking(e,t,i){const s=this.VIEWPORT_TRACK_THRESHOLD,r=e.getBoundingClientRect(),o=Math.min(r.bottom,window.innerHeight)-Math.max(r.top,0),n=Math.min(r.right,window.innerWidth)-Math.max(r.left,0);if(r.top<window.innerHeight&&r.bottom>0&&r.left<window.innerWidth&&r.right>0&&o>0&&n>0&&o>=r.height*s){this.log("Price element already visible for test %s",t),i();return}const c=new IntersectionObserver(d=>{for(const u of d)if(u.isIntersecting&&u.intersectionRatio>=s){this.log("Price element entered viewport for test %s",t),c.disconnect(),i();break}},{threshold:s});c.observe(e)}debug(){const e=this.debugState();console.log(JSON.stringify(e,ee,2))}}(async function(){window.shopliftInstance||(window.shopliftInstance=new Ze("two-blind-brothers.myshopify.com","https://app.shoplift.ai","https://events.shoplift.ai",false,false,false,{"sendEvents":false,"mode":"gtag"}
36,false,false,1000,[],[],null,false),await window.shopliftInstance.init())})();async function Qe(a,e,t,i){const s=Be({log:i});if(t)return i("[SUB-PREVIEW] A side â no overlay applied; widget renders naturally"),s;const r=a.widget.widgetType,o=e?j(e):null;let n=W(e),l=J(a,n),c=l.discountMap,d=l.maxDiscount;function u(){const f=W(e);f!==n&&(n=f,l=J(a,n),c=l.discountMap,d=l.maxDiscount,i(`[SUB-PREVIEW] scope refreshed currentProductId=${n??"n/a"}, maxDiscount=${d}`))}i(`[SUB-PREVIEW] side=B, currentProductId=${n??"n/a"}, maxDiscount=${d}`);function h(f){if(!e||!o)return null;const v=Z(o),g=v?o.get(v):void 0;return g?{formattedVariantPrice:G(g.priceInCents,e),formattedDiscounted:G(g.priceInCents*(1-f/100),e)}:null}function p(f){const v=Y(a,f);if(!v)return d;const g=D(a,"subscriptionInput"),P=g.length?g[0].selector:'input[name="rc_plan"]',A=v.querySelector(`${P}:checked`);if(A){const k=c[A.value];if(k!==void 0)return k}return d}function b(f){const v=D(a,"subscriptionDiscount");for(const g of v)if(g.selector.includes("badge")||g.selector.includes("__badge")){const P=f.querySelector(g.selector);P?.textContent&&!P.textContent.includes(`${d}%`)&&$(P,A=>N(A,d))}}function E(f,v){const g=h(v);if(!g)return;const P=D(a,"subscriptionCompareAt");for(const A of P){const k=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);k?.textContent&&!k.textContent.includes(g.formattedVariantPrice)&&$(k,x=>/\d/.test(x)?g.formattedVariantPrice:x)}}function S(f,v){const g=h(v);if(!g)return;const P=D(a,"subscriptionPrice");for(const A of P){const k=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);k?.textContent&&!k.textContent.includes(g.formattedDiscounted)&&$(k,x=>/\d/.test(x)?g.formattedDiscounted:x)}}function C(f){const v=D(a,"subscriptionInput"),g=v.length?v[0].selector:'input[name="rc_plan"]',P=D(a,"subscriptionPlanDiscount"),A=P.length?P[0].selector:".rc-plans-button__discount";for(const k of Array.from(f.querySelectorAll("label"))){const x=k.querySelector(g),R=k.querySelector(A);if(x&&R?.textContent){const V=c[x.value];if(V!==void 0){const O=R.textContent.match(/[\d.]+%/)?.[0];O&&O!==`${V}%`&&$(R,L=>N(L,V))}}}}function _(f){const v=f.querySelector("select");if(v)for(const g of Array.from(v.options)){const P=c[g.value];if(P!==void 0&&g.textContent){const A=g.textContent.match(/[\d.]+%/)?.[0];A&&A!==`${P}%`&&(g.textContent=N(g.textContent,P))}}}function T(f){const v=D(a,"onetimePrice");if(!v.length||!e||!o)return;const g=Z(o),P=g?o.get(g):void 0;if(!P)return;const A=G(P.priceInCents,e),k=D(a,"onetimeContainer"),x=k.length?k[0].selector:'[part~="rc-purchase-option__onetime"]',R=f.querySelector(x);if(R)for(const V of v){const O=R.querySelector(`[part~="${V.selector}"]`);O?.textContent&&!O.textContent.includes(A)&&$(O,L=>/\d/.test(L)?A:L)}}function m(f,v){const P=D(a,"subscriptionDiscount").filter(A=>A.selector.includes("benefit")||A.selector==="rc-benefits");for(const A of P){const k=f.querySelector(A.selector);if(k?.shadowRoot){for(const x of Array.from(k.shadowRoot.querySelectorAll("li")))if(x.textContent?.includes("Save")){const R=x.textContent.match(/[\d.]+%/)?.[0];R&&R!==`${v}%`&&$(x,V=>N(V,v))}}}}let y=!1;function w(){if(!y){y=!0;try{u();const f=B(a);if(!f)return;const v=p(f);b(f),E(f,v),S(f,v),T(f);const g=Y(a,f);g&&(r==="buttons"||r==="radio"?C(g):_(g)),m(f,v)}finally{y=!1}}}const I=pe({data:a,runUpdates:w});return function(){I(),s()}}const Xe=Object.freeze(Object.defineProperty({__proto__:null,subscriptionPreviewRender:Qe},Symbol.toStringTag,{value:"Module"}))})(); })("/", { suffix: "", type: "cart" }, "main", 122340769888, false)</script>
36 37<!-- End of Shoplift scripts --> 38 39 40<!-- Hotjar Tracking Code for https://www.twoblindbrothers.com -->
41<script>
vendor: 125 bytes, lines 41-44
41 42 (function(h,o,t,j,a,r){ 43 h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; 44 h._hjSettings={hjid:
443468127
vendor: 258 bytes, lines 44-49
44,hjsv:6}; 45 a=o.getElementsByTagName('head')[0]; 46 r=o.createElement('script');r.async=1; 47 r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; 48 a.appendChild(r); 49 })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
50</script>
50 51 52 <meta name="google-site-verification" content="ttZca2KoetOEPToVJiLZw0nT_jA3cZ4ixQY5RiTjmKY" /> 53 54 <!-- Basic page needs ================================================== --> 55 <meta charset="utf-8"> 56 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 57 58 59 60 61 62 63 64 65 66 67 68 69 <link rel="shortcut icon" href="//twoblindbrothers.com/cdn/shop/t/278/assets/favicon.png?v=129341062381478472471702066482" type="image/png" /> 70 71 <!-- Title and description ================================================== --> 72 <title> 73 Your Shopping Cart – Two Blind Brothers 74 </title> 75 76 77 78 <!-- Helpers ================================================== --> 79 <!-- /snippets/social-meta-tags.liquid --> 80 81 82 <meta property="og:type" content="website"> 83 <meta property="og:title" content="Your Shopping Cart"> 84 85 86<meta property="og:url" content="https://twoblindbrothers.com/cart"> 87<meta property="og:site_name" content="Two Blind Brothers"> 88 89 90 91 <meta name="twitter:site" content="@twoblindbros/"> 92 93 94 <meta name="twitter:card" content="summary"> 95 96 97 98 <link rel="canonical" href="https://twoblindbrothers.com/cart"> 99 <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"> 100 <meta name="theme-color" content="#0c0c0b"><style> 101 @font-face { 102 font-family: 'ABC Diatype'; 103 src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Bold.eot?v=142736); 104 src: local('ABC Diatype Bold'), local('ABCDiatype-Bold'), 105 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Bold.woff2?v=61621994078008140441702066482) format('woff2'), 106 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Bold.woff?v=118774794543504185321702066484) format('woff'); 107 font-weight: 700; 108 font-style: normal; 109 font-display: swap; 110 } 111 @font-face { 112 font-family: 'ABC Diatype'; 113 src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-BoldItalic.eot?v=142736); 114 src: local('ABC Diatype BoldItalic'), local('ABCDiatype-BoldItalic'), 115 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-BoldItalic.woff2?v=3446157521833915091702066489) format('woff2'), 116 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-BoldItalic.woff?v=126519971189529389871702066482) format('woff'); 117 font-weight: 700; 118 font-style: italic; 119 font-display: swap; 120 } 121 122 @font-face { 123 font-family: 'ABC Diatype'; 124 src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Medium.eot?v=142736); 125 src: local('ABC Diatype Medium'), local('ABCDiatype-Medium'), 126 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Medium.woff2?v=105160479550526472651702066490) format('woff2'), 127 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Medium.woff?v=14588951915142266711702066479) format('woff'); 128 font-weight: 500; 129 font-style: normal; 130 font-display: swap; 131 } 132 133 @font-face { 134 font-family: 'ABC Diatype'; 135 src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-MediumItalic.eot?v=142736); 136 src: local('ABC Diatype MediumItalic'), local('ABCDiatype-MediumItalic'), 137 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-MediumItalic.woff2?v=92103211414022689741702066485) format('woff2'), 138 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-MediumItalic.woff?v=116835433626418491251702066484) format('woff'); 139 font-weight: 500; 140 font-style: italic; 141 font-display: swap; 142 } 143 144 @font-face { 145 font-family: 'ABC Diatype'; 146 src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Regular.eot?v=142736); 147 src: local('ABC Diatype Regular'), local('ABCDiatype-Regular'), 148 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Regular.woff2?v=23638199471490003521702066479) format('woff2'), 149 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-Regular.woff?v=34498873463096933311702066485) format('woff'); 150 font-weight: 400; 151 font-style: normal; 152 font-display: swap; 153 } 154 155 @font-face { 156 font-family: 'ABC Diatype'; 157 src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-RegularItalic.eot?v=142736); 158 src: local('ABC Diatype RegularItalic'), local('ABCDiatype-RegularItalic'),
159 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-RegularItalic.woff2?v=119111936877245938531702066484) format('woff2'), 160 url(//twoblindbrothers.com/cdn/shop/t/278/assets/ABCDiatype-RegularItalic.woff?v=16655217921606239891702066484) format('woff'); 161 font-weight: 400; 162 font-style: italic; 163 font-display: swap; 164 } 165 166 @font-face { 167 font-family: 'helvetica_neuebold'; 168 src: url(//twoblindbrothers.com/cdn/shop/t/278/assets/helveticaneuebold-webfont.woff2?v=4078072587728333361713202500) format('woff2'), 169 url(//twoblindbrothers.com/cdn/shop/t/278/assets/helveticaneuebold-webfont.woff?v=153274710969038952061713202499) format('woff'); 170 font-weight: normal; 171 font-style: normal; 172 } 173 174 .abc-font { 175 font-family: 'ABC Diatype'; 176 } 177 178 .font-helvetica-bold { 179 font-family: 'helvetica_neuebold'; 180 font-weight: 700; 181 } 182</style> 183<!-- CSS ================================================== --> 184 <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/timber.scss.css?v=128086802768631726781773323265" rel="stylesheet" type="text/css" media="all" /> 185 <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/recharge.scss.css?v=162669795343502608011702066509" rel="stylesheet" type="text/css" media="all" /> 186 187 188 189 190 191 <!-- Header hook for plugins ================================================== -->
191<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
191<meta name="google-site-verification" content="6-QxAWRb8ofpk6AybdtJP7uZBN7HmAKI4QqszudEjsM"> 192<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/13308707/digital_wallets/dialog"> 193<meta id="in-context-paypal-metadata" data-shop-id="13308707" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 194<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
194<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=8192096"></script>
194 195<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
196<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=8192096&shop_id=13308707" crossorigin="anonymous"></script>
vendor: 1 bytes, line 196
196
197<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":13308707,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/13308707","merchantName":"Two Blind Brothers","requiredBillingContactFields":["postalAddress","email"],"requiredShippingContactFields":["postalAddress","email"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Two Blind Brothers","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 197
197
198<script id="shopify-features" type="application/json">{"accessToken":"481a568e74dddfde486227443a6b9500","betas":["rich-media-storefront-analytics"],"domain":"twoblindbrothers.com","predictiveSearch":true,"shopId":13308707,"locale":"en"}</script>
vendor: 1 bytes, line 198
198
199<script>var Shopify = Shopify || {}; 200Shopify.shop = "two-blind-brothers.myshopify.com"; 201Shopify.locale = "en"; 202Shopify.currency = {"active":"USD","rate":"1.0"}; 203Shopify.country = "US"; 204Shopify.theme = {"name":"Live theme","id":122340769888,"schema_name":null,"schema_version":null,"theme_store_id":null,"role":"main"}; 205Shopify.theme.handle = "null"; 206Shopify.theme.style = {"id":null,"handle":null}; 207Shopify.cdnHost = "twoblindbrothers.com/cdn"; 208Shopify.routes = Shopify.routes || {}; 209Shopify.routes.root = "/"; 210Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 211Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 212Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 213Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 213
213
214<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 214
214
215<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 215
215
216<script> 217 window.ShopifyPay = window.ShopifyPay || {}; 218 window.ShopifyPay.apiHost = "shop.app\/pay"; 219 window.ShopifyPay.redirectState = null; 220</script>
vendor: 1 bytes, line 220
220
221<script> 222 window.Shopify = window.Shopify || {}; 223 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 224 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 225 window.Shopify.SignInWithShop.eligible = true; 226</script>
vendor: 1 bytes, line 226
226
227<script id="shop-js-analytics" type="application/json">{"pageType":"cart"}</script>
vendor: 1 bytes, line 227
227
228<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 228
228
229<script type="module"> 230 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 231 232 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 233 234</script>
vendor: 1 bytes, line 234
234
235<script> 236 window.Shopify = window.Shopify || {}; 237 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 238 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 239</script>
vendor: 1 bytes, line 239
239
240<script>window.shopifyAppUrls = ["https:\/\/files.getpaloma.com\/shopify-production.js?shop=two-blind-brothers.myshopify.com","https:\/\/static.rechargecdn.com\/assets\/js\/widget.min.js?shop=two-blind-brothers.myshopify.com","https:\/\/config.gorgias.chat\/bundle-loader\/01H2DX32D7RHVBGVWR3EG2HXDS?source=shopify1click\u0026shop=two-blind-brothers.myshopify.com","https:\/\/media.9gtb.com\/loader.js?g_cvt_id=a0d70923-fcdb-4a11-97b9-324294ad9419\u0026shop=two-blind-brothers.myshopify.com",];</script>
240 241
242<script id="__st">var __st={"a":13308707,"offset":-14400,"reqid":"9139c51a-606b-4b3b-af02-ba4be761bda6-1790919106","pageurl":"twoblindbrothers.com\/cart","u":"7f935158330a","p":"cart"};</script>
vendor: 1 bytes, line 242
242
243<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 243
243
244<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!1,!0)}();</script>
vendor: 1 bytes, line 244
244
245<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//twoblindbrothers.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 245
245
246<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//twoblindbrothers.com/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
246<script crossorigin="anonymous" defer="defer" src="//twoblindbrothers.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 246
246
247<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 247
247
248<script> 249 window.Shopify = window.Shopify || {}; 250 window.Shopify.MCP = window.Shopify.MCP || {}; 251 window.Shopify.MCP.enabled = true; 252 window.Shopify.MCP.shop = "two-blind-brothers.myshopify.com"; 253 window.Shopify.MCP.mcpEndpoint = "https:\/\/twoblindbrothers.com\/api\/mcp"; 254 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 255</script>
vendor: 1 bytes, line 255
255
256<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/twoblindbrothers.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 257</script>
vendor: 1 bytes, line 257
257
258<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://twoblindbrothers.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 259</script>
vendor: 1 bytes, line 259
259
260<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 261 function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent); 262</script>
vendor: 1 bytes, line 262
262
263<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}})); 264</script>
264 265<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://twoblindbrothers.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 266<style id="shopify-accelerated-checkout-cart"> 267 #shopify-buyer-consent { 268 margin-top: 1em; 269 display: inline-block; 270 width: 100%; 271} 272 273#shopify-buyer-consent.hidden { 274 display: none; 275} 276 277#shopify-subscription-policy-button { 278 background: none; 279 border: none; 280 padding: 0; 281 text-decoration: underline; 282 font-size: inherit; 283 cursor: pointer; 284} 285 286#shopify-subscription-policy-button::before { 287 box-shadow: none; 288} 289 290 </style> 291
292<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
vendor: 1 bytes, line 292
292
293<script> 294 (function() {function createScript(url) { 295 var s = document.createElement('script'); 296 s.type = 'text/javascript'; 297 s.async = true; 298 s.src = url; 299 var x = document.getElementsByTagName('script')[0]; 300 x.parentNode.insertBefore(s, x); 301 }; 302 303 var urls = [].concat(window.shopifyAppUrls || []); 304 305 // We want to load rebuy immediately 306 var rebuyUrl = window.shopifyAppUrls.find(url => url.includes('cdn.rebuyengine.com')); 307 308 if ( rebuyUrl ) { 309 createScript(rebuyUrl); 310 } 311 312 urls = urls.filter(function(url) { 313 return !url.includes('cdn.rebuyengine.com'); 314 }); 315 316 function delayLoad(event) { 317 if (event && !event.isTrusted) { 318 return; 319 } 320 setTimeout(function() { 321 for (var i = 0; i < urls.length; i++) { 322 createScript(urls[i]); 323 };},0); 324 events.forEach(function(event) { 325 window.removeEventListener(event, delayLoad); 326 }); 327 }; 328 var events = ['keydown', 'mousemove', 'touchmove', 'touchstart', 'touchend', 'wheel']; 329 events.forEach(function(event) { 330 window.addEventListener(event, delayLoad); 331 });}()); 332</script>
vendor: 1 bytes, line 332
332
333<script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
333 334
334<script async src="//use.fontawesome.com/3802097393.js"></script>
334 335 336 337 338 339
339<script src="https://use.typekit.net/ugw7ksw.js"></script>
339 340
340<script> try{Typekit.load({ async: true }); }catch(e){} </script>
340 341 342 343 344 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.css" /> 345
345<script defer src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js"></script>
345 346 347
347<script type="text/javascript" src="https://addevent.com/libs/atc/1.6.1/atc.min.js" async defer></script>
347 348 349 <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/jquery.fancybox.min.css?v=32046022409454516561702066480" rel="stylesheet" type="text/css" media="all" /> 350
350<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/jquery.fancybox.min.js?v=102984942719613846721702066489"></script>
350 351
351<script async src="https://unpkg.com/infinite-scroll@4/dist/infinite-scroll.pkgd.min.js"></script>
351 352 353 <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 353-354
353 354 <script async src="https://www.googletagmanager.com/gtag/js?id=
354AW-881678315
vendor: 16 bytes, lines 354-355
354"></script> 355
355<script> 356
vendor: 152 bytes, lines 356-360
356window.dataLayer = window.dataLayer || []; 357 function gtag(){dataLayer.push(arguments);} 358 gtag('js', new Date()); 359 360 gtag('config', '
360AW-881678315
vendor: 8 bytes, lines 360-361
360'); 361
361</script>
361 362 363 <!-- Google Adwords Tags implemented by Brad ================================================== --> 364 365
365<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/jquery.infinitescroll.2.1.0.min.js?v=154868730476094579131702066480"></script>
365 366 367 <!-- Start WKND tag. Deploy at the beginning of document head. --> 368
368<script> 369 (function(d) { 370 var e = d.createElement('script'); 371 e.src = d.location.protocol + '//tag.wknd.ai/5456/i.js'; 372 e.async = true; 373 d.getElementsByTagName("head")[0].appendChild(e); 374 }(document)); 375 </script>
375 376 <!-- End WKND tag --> 377 378 379 <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/custom-40999080.css" rel="stylesheet" type="text/css" media="all" /> 380 381 382 383 384
384<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/reserve-3cb4ad76.js" type="module" crossorigin="anonymous"></script>
384 385 <link rel="modulepreload" href="//twoblindbrothers.com/cdn/shop/t/278/assets/_commonjsHelpers-725317a4.js" crossorigin="anonymous"> 386 387 388 389 390 <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/global-navigation-11299834.css" rel="stylesheet" type="text/css" media="all" /> 391 392<!-- Begin: Northbeam pixel --> 393
393<script>(function(){var r;(e=r=r||{}).A="identify",e.B="trackPageView",e.C="fireEmailCaptureEvent",e.D="fireCustomGoal",e.E="firePurchaseEvent";var e="//j.northbeam.io/ota-sp/ae689b81-77f1-468c-bb7e-d7ad823f43fb.js";function t(e){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];a.push({fnName:e,args:n})}var a=[],n=((n={_q:a})[r.A]=function(e,n){return t(r.A,e,n)},n[r.B]=function(){return t(r.B)},n[r.C]=function(e,n){return t(r.C,e,n)},n[r.D]=function(e,n){return t(r.D,e,n)},n[r.E]=function(e){return t(r.E,e)},window.Northbeam=n,document.createElement("script"));n.async=!0,n.src=e,document.head.appendChild(n);})()</script>
393 394 <!-- End: Northbeam pixel --> 395<!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/gdpr_cookie_consent/4fbe573f-a377-4fea-9801-3ee0858cae41 --> 396<link rel="preconnect" href="https://app.consentmo.com" crossorigin data-csm-preconnect="app"> 397<link rel="dns-prefetch" href="https://workers.consentmo.com" data-csm-preconnect="workers"> 398<link rel="dns-prefetch" href="https://storage.consentmo.com" data-csm-preconnect="storage"> 399<link rel="preconnect" href="https://cdn.consentmo.com" crossorigin data-csm-preconnect="cdn"><link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="banner"> 400 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-dialog.consentmo.js" crossorigin data-csm-layout-prefetch="dialog"> 401 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-box.consentmo.js" crossorigin data-csm-layout-prefetch="box"> 402 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-cookie-smart-banner.consentmo.js" crossorigin data-csm-layout-prefetch="smart"> 403 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/layout-mobile-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="mobile">
403<script> 404(function () { 405 try { 406 document.documentElement.classList.add('csm-cookie-embed'); 407 } catch (e) {} 408})(); 409</script>
409<script data-consentmo-data-src-bootstrap> 410(function () { 411 'use strict'; 412 if (window.__consentmoDataSrcBootstrapInit) return; 413 window.__consentmoDataSrcBootstrapInit = true; 414 415 var DATA_SRC_SELECTOR = [ 416 'script[data-src*="consentmo_cookie_consent"]', 417 'script[data-src*="gdpr_cookie_consent.min"]', 418 'script[data-src*="gdrp_cookie_consent_unlimited"]' 419 ].join(','); 420 421 function activateConsentmoDataSrcScripts() { 422 if (!window.Shopify || !window.Shopify.shop) return; 423 document.querySelectorAll(DATA_SRC_SELECTOR).forEach(function (scriptEl) { 424 // getAttribute: src="" must not count as "already has src" (.src === page URL). 425 if (scriptEl.getAttribute('src')) return; 426 var url = scriptEl.getAttribute('data-src'); 427 if (!url) return; 428 if (scriptEl.getAttribute('type') === 'text/plain') { 429 scriptEl.removeAttribute('type'); 430 } 431 scriptEl.src = url; 432 }); 433 } 434 function scheduleActivation() { 435 activateConsentmoDataSrcScripts(); 436 // Retry on next task so other DCL handlers (lazy-loaders) can finish setting Shopify.shop / data-src first. 437 setTimeout(activateConsentmoDataSrcScripts, 0); 438 } 439 if (document.readyState === 'loading') { 440 document.addEventListener('DOMContentLoaded', scheduleActivation, { once: true }); 441 } else { 442 scheduleActivation(); 443 } 444})(); 445</script>
445 446 447 448<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 449 450 451 452 453 454 455 456 457 458 459 460 461
461<script async src="https://static.klaviyo.com/onsite/js/HMZ6Wk/klaviyo.js?company_id=HMZ6Wk"></script>
461 462
462<script>!function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();</script>
462 463 464 465 466 467 468 469
469<script> 470 window.klaviyoReviewsProductDesignMode = false 471 </script>
471 472 473 474 475 476 477 478 479 480 481<!-- END app block --><!-- BEGIN app block: shopify://apps/okendo/blocks/theme-settings/bb689e69-ea70-4661-8fb7-ad24a2e23c29 --><!-- BEGIN app snippet: header-metafields --> 482 483 484 485 486 487 488 489 490 491 492 493 494 495 <style data-oke-reviews-version="0.81.8" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/okendo-reviews-styles.9d163ae1.css"></style><style data-oke-reviews-version="0.81.8" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/modules/okendo-star-rating.4cb378a8.css"></style><style data-oke-reviews-version="0.81.8" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/modules/okendo-reviews-summary.a0c9d7d6.css"></style><style type="text/css">.okeReviews[data-oke-container],div.okeReviews{font-size:14px;font-size:var(--oke-text-regular);font-weight:400;font-family:var(--oke-text-fontFamily);line-height:1.6}.okeReviews[data-oke-container] *,.okeReviews[data-oke-container] :after,.okeReviews[data-oke-container] :before,div.okeReviews *,div.okeReviews :after,div.okeReviews :before{box-sizing:border-box}.okeReviews[data-oke-container] h1,.okeReviews[data-oke-container] h2,.okeReviews[data-oke-container] h3,.okeReviews[data-oke-container] h4,.okeReviews[data-oke-container] h5,.okeReviews[data-oke-container] h6,div.okeReviews h1,div.okeReviews h2,div.okeReviews h3,div.okeReviews h4,div.okeReviews h5,div.okeReviews h6{font-size:1em;font-weight:400;line-height:1.4;margin:0}.okeReviews[data-oke-container] ul,div.okeReviews ul{padding:0;margin:0}.okeReviews[data-oke-container] li,div.okeReviews li{list-style-type:none;padding:0}.okeReviews[data-oke-container] p,div.okeReviews p{line-height:1.8;margin:0 0 4px}.okeReviews[data-oke-container] p:last-child,div.okeReviews p:last-child{margin-bottom:0}.okeReviews[data-oke-container] a,div.okeReviews a{text-decoration:none;color:inherit}.okeReviews[data-oke-container] button,div.okeReviews button{border-radius:0;border:0;box-shadow:none;margin:0;width:auto;min-width:auto;padding:0;background-color:transparent;min-height:auto}.okeReviews[data-oke-container] button,.okeReviews[data-oke-container] input,.okeReviews[data-oke-container] select,.okeReviews[data-oke-container] textarea,div.okeReviews button,div.okeReviews input,div.okeReviews select,div.okeReviews textarea{font-family:inherit;font-size:1em}.okeReviews[data-oke-container] label,.okeReviews[data-oke-container] select,div.okeReviews label,div.okeReviews select{display:inline}.okeReviews[data-oke-container] select,div.okeReviews select{width:auto}.okeReviews[data-oke-container] article,.okeReviews[data-oke-container] aside,div.okeReviews article,div.okeReviews aside{margin:0}.okeReviews[data-oke-container] table,div.okeReviews table{background:transparent;border:0;border-collapse:collapse;border-spacing:0;font-family:inherit;font-size:1em;table-layout:auto}.okeReviews[data-oke-container] table td,.okeReviews[data-oke-container] table th,.okeReviews[data-oke-container] table tr,div.okeReviews table td,div.okeReviews table th,div.okeReviews table tr{border:0;font-family:inherit;font-size:1em}.okeReviews[data-oke-container] table td,.okeReviews[data-oke-container] table th,div.okeReviews table td,div.okeReviews table th{background:transparent;font-weight:400;letter-spacing:normal;padding:0;text-align:left;text-transform:none;vertical-align:middle}.okeReviews[data-oke-container] table tr:hover td,.okeReviews[data-oke-container] table tr:hover th,div.okeReviews table tr:hover td,div.okeReviews table tr:hover th{background:transparent}.okeReviews[data-oke-container] fieldset,div.okeReviews fieldset{border:0;padding:0;margin:0;min-width:0}.okeReviews[data-oke-container] img,.okeReviews[data-oke-container] svg,div.okeReviews img,div.okeReviews svg{max-width:none}.okeReviews[data-oke-container] div:empty,div.okeReviews div:empty{display:block}.okeReviews[data-oke-container] .oke-icon:before,div.okeReviews .oke-icon:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:inherit}.okeReviews[data-oke-container] .oke-icon--select-arrow:before,div.okeReviews .oke-icon--select-arrow:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--loading:before,div.okeReviews .oke-icon--loading:before{content:"î¤"}
495.okeReviews[data-oke-container] .oke-icon--pencil:before,div.okeReviews .oke-icon--pencil:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--filter:before,div.okeReviews .oke-icon--filter:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--play:before,div.okeReviews .oke-icon--play:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--tick-circle:before,div.okeReviews .oke-icon--tick-circle:before{content:"î¤
"}.okeReviews[data-oke-container] .oke-icon--chevron-left:before,div.okeReviews .oke-icon--chevron-left:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-right:before,div.okeReviews .oke-icon--chevron-right:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--thumbs-down:before,div.okeReviews .oke-icon--thumbs-down:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--thumbs-up:before,div.okeReviews .oke-icon--thumbs-up:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--close:before,div.okeReviews .oke-icon--close:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-up:before,div.okeReviews .oke-icon--chevron-up:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-down:before,div.okeReviews .oke-icon--chevron-down:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--star:before,div.okeReviews .oke-icon--star:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--magnifying-glass:before,div.okeReviews .oke-icon--magnifying-glass:before{content:"î¤"}@font-face{font-family:oke-widget-icons;src:url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/fonts/oke-widget-icons.ttf) format("truetype"),url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/fonts/oke-widget-icons.woff) format("woff"),url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/img/oke-widget-icons.bc0d6b0a.svg) format("svg");font-weight:400;font-style:normal;font-display:block}.okeReviews[data-oke-container] .oke-button,div.okeReviews .oke-button{display:inline-block;border-style:solid;border-color:var(--oke-button-borderColor);border-width:var(--oke-button-borderWidth);background-color:var(--oke-button-backgroundColor);line-height:1;padding:12px 24px;margin:0;border-radius:var(--oke-button-borderRadius);color:var(--oke-button-textColor);text-align:center;position:relative;font-weight:var(--oke-button-fontWeight);font-size:var(--oke-button-fontSize);font-family:var(--oke-button-fontFamily);outline:0}.okeReviews[data-oke-container] .oke-button-text,.okeReviews[data-oke-container] .oke-button .oke-icon,div.okeReviews .oke-button-text,div.okeReviews .oke-button .oke-icon{line-height:1}.okeReviews[data-oke-container] .oke-button.oke-is-loading,div.okeReviews .oke-button.oke-is-loading{position:relative}.okeReviews[data-oke-container] .oke-button.oke-is-loading:before,div.okeReviews .oke-button.oke-is-loading:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:undefined;font-size:12px;display:inline-block;animation:oke-spin 1s linear infinite;position:absolute;width:12px;height:12px;top:0;left:0;bottom:0;right:0;margin:auto}.okeReviews[data-oke-container] .oke-button.oke-is-loading>*,div.okeReviews .oke-button.oke-is-loading>*{opacity:0}.okeReviews[data-oke-container] .oke-button.oke-is-active,div.okeReviews .oke-button.oke-is-active{background-color:var(--oke-button-backgroundColorActive);color:var(--oke-button-textColorActive);border-color:var(--oke-button-borderColorActive)}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading),div.okeReviews .oke-button:not(.oke-is-loading){cursor:pointer}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):hover,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover{background-color:var(--oke-button-backgroundColorHover);color:var(--oke-button-textColorHover);border-color:var(--oke-button-borderColorHover);box-shadow:0 0 0 2px var(--oke-button-backgroundColorHover)}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):active,.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):hover:active,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):active,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover:active{background-color:var(--oke-button-backgroundColorActive);color:var(--oke-button-textColorActive);border-color:var(--oke-button-borderColorActive)}.okeReviews[data-oke-container] .oke-title,div.okeReviews .oke-title{font-weight:var(--oke-title-fontWeight);font-size:var(--oke-title-fontSize);font-family:var(--oke-title-fontFamily)}.okeReviews[data-oke-container] .oke-bodyText,div.okeReviews .oke-bodyText{font-weight:var(--oke-bodyText-fontWeight);font-size:var(--oke-bodyText-fontSize);font-family:var(--oke-bodyText-fontFamily)}.okeReviews[data-oke-container] .oke-linkButton,div.okeReviews .oke-linkButton{curs
495or:pointer;font-weight:700;pointer-events:auto;text-decoration:underline}.okeReviews[data-oke-container] .oke-linkButton:hover,div.okeReviews .oke-linkButton:hover{text-decoration:none}.okeReviews[data-oke-container] .oke-readMore,div.okeReviews .oke-readMore{cursor:pointer;color:inherit;text-decoration:underline}.okeReviews[data-oke-container] .oke-select,div.okeReviews .oke-select{cursor:pointer;background-repeat:no-repeat;background-position-x:100%;background-position-y:50%;border:none;padding:0 24px 0 12px;-moz-appearance:none;appearance:none;color:inherit;-webkit-appearance:none;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg fill='currentColor' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");outline-offset:4px}.okeReviews[data-oke-container] .oke-select:disabled,div.okeReviews .oke-select:disabled{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg fill='%239a9db1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.okeReviews[data-oke-container] .oke-loader,div.okeReviews .oke-loader{position:relative}.okeReviews[data-oke-container] .oke-loader:before,div.okeReviews .oke-loader:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:var(--oke-text-secondaryColor);font-size:12px;display:inline-block;animation:oke-spin 1s linear infinite;position:absolute;width:12px;height:12px;top:0;left:0;bottom:0;right:0;margin:auto}.okeReviews[data-oke-container] .oke-a11yText,div.okeReviews .oke-a11yText{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.okeReviews[data-oke-container] .oke-hidden,div.okeReviews .oke-hidden{display:none}.okeReviews[data-oke-container] .oke-modal,div.okeReviews .oke-modal{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2147483647;max-height:100%;background-color:rgba(0,0,0,.5);padding:40px 0 32px}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal,div.okeReviews .oke-modal{display:flex;align-items:center;padding:48px 0}}.okeReviews[data-oke-container] .oke-modal ::-moz-selection,div.okeReviews .oke-modal ::-moz-selection{background-color:rgba(39,45,69,.2)}.okeReviews[data-oke-container] .oke-modal ::selection,div.okeReviews .oke-modal ::selection{background-color:rgba(39,45,69,.2)}.okeReviews[data-oke-container] .oke-modal,.okeReviews[data-oke-container] .oke-modal p,div.okeReviews .oke-modal,div.okeReviews .oke-modal p{color:#272d45}.okeReviews[data-oke-container] .oke-modal-content,div.okeReviews .oke-modal-content{background-color:#fff;margin:auto;position:relative;will-change:transform,opacity;width:calc(100% - 64px)}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal-content,div.okeReviews .oke-modal-content{max-width:1000px}}.okeReviews[data-oke-container] .oke-modal-close,div.okeReviews .oke-modal-close{cursor:pointer;position:absolute;width:32px;height:32px;top:-32px;padding:4px;right:-4px;line-height:1}.okeReviews[data-oke-container] .oke-modal-close:before,div.okeReviews .oke-modal-close:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:#fff;font-size:24px;display:inline-block;width:24px;height:24px}.okeReviews[data-oke-container] .oke-modal-overlay,div.okeReviews .oke-modal-overlay{background-color:rgba(43,46,56,.9)}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal--large .oke-modal-content,div.okeReviews .oke-modal--large .oke-modal-content{max-width:1200px}}.okeReviews[data-oke-container] .oke-modal .oke-helpful,.okeReviews[data-oke-container] .oke-modal .oke-helpful-vote-button,.okeReviews[data-oke-container] .oke-modal .oke-reviewContent-date,div.okeReviews .oke-modal .oke-helpful,div.okeReviews .oke-modal .oke-helpful-vote-button,div.okeReviews .oke-modal .oke-reviewContent-date{color:#676986}.oke-modal .okeReviews[data-oke-container].oke-w,.oke-modal div.okeReviews.oke-w{color:#272d45}.okeReviews[data-oke-container] .oke-tag,div.okeReviews .oke-tag{align-items:center;color:#272d45;display:flex;font-size:var(--oke-text-small);font-weight:600;text-align:left;position:relative;z-index:2;background-color:#f4f4f6;padding:4px 6px;border:none;border-radius:4px;gap:6px;line-height:1}.okeReviews[data-oke-container] .oke-tag svg,div.okeReviews .oke-tag svg{fill:currentColor;height:1rem}.okeReviews[data-oke-container] .hooper,div.okeReviews .hooper{height:auto}.okeReviews--left{text-align:left}.okeReviews--right{text-align:right}.okeReviews--center{text-align:center}.okeReviews :not([tabindex="-1"]):focus-visible{outline:5px auto highlight;outline:5px auto -webkit-focus-ring-color}.is-oke-modalOpen{overflow:hidden!important}img.oke-is-error{background-color:var(--oke-shadingColor);background-size:cover;background-position:50% 50%;box-shadow:inset 0 0 0 1px var(--oke-border-color)}@keyframes oke-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes oke-fade-in{0%{opacity:0}
495to{opacity:1}} 496.oke-stars{line-height:1;position:relative;display:inline-block}.oke-stars-background svg{overflow:visible}.oke-stars-foreground{overflow:hidden;position:absolute;top:0;left:0}.oke-sr{display:inline-block;padding-top:var(--oke-starRating-spaceAbove);padding-bottom:var(--oke-starRating-spaceBelow)}.oke-sr .oke-is-clickable{cursor:pointer}.oke-sr--hidden{display:none}.oke-sr-count,.oke-sr-rating,.oke-sr-stars{display:inline-block;vertical-align:middle}.oke-sr-stars{line-height:1;margin-right:8px}.oke-sr-rating{display:none}.oke-sr-count--brackets:before{content:"("}.oke-sr-count--brackets:after{content:")"} 497.oke-rs{display:block}.oke-rs .oke-reviewsSummary.oke-is-preRender .oke-reviewsSummary-summary{-webkit-mask:linear-gradient(180deg,#000 0,#000 40%,transparent 95%,transparent 0) 100% 50%/100% 100% repeat-x;mask:linear-gradient(180deg,#000 0,#000 40%,transparent 95%,transparent 0) 100% 50%/100% 100% repeat-x;max-height:150px}.okeReviews[data-oke-container] .oke-reviewsSummary .oke-tooltip,div.okeReviews .oke-reviewsSummary .oke-tooltip{display:inline-block;font-weight:400}.okeReviews[data-oke-container] .oke-reviewsSummary .oke-tooltip-trigger,div.okeReviews .oke-reviewsSummary .oke-tooltip-trigger{height:15px;width:15px;overflow:hidden;transform:translateY(-10%)}.okeReviews[data-oke-container] .oke-reviewsSummary-heading,div.okeReviews .oke-reviewsSummary-heading{align-items:center;-moz-column-gap:4px;column-gap:4px;display:inline-flex;font-weight:700;margin-bottom:8px}.okeReviews[data-oke-container] .oke-reviewsSummary-heading-skeleton,div.okeReviews .oke-reviewsSummary-heading-skeleton{height:calc(var(--oke-button-fontSize) + 4px);width:150px}.okeReviews[data-oke-container] .oke-reviewsSummary-icon,div.okeReviews .oke-reviewsSummary-icon{fill:currentColor;font-size:14px}.okeReviews[data-oke-container] .oke-reviewsSummary-icon svg,div.okeReviews .oke-reviewsSummary-icon svg{vertical-align:baseline}.okeReviews[data-oke-container] .oke-reviewsSummary-summary.oke-is-truncated,div.okeReviews .oke-reviewsSummary-summary.oke-is-truncated{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}</style> 498 499
499<script type="application/json" id="oke-reviews-settings">{"subscriberId":"17dfac7f-7c7e-496b-862c-a9fabb64d465","analyticsSettings":{"isWidgetOnScreenTrackingEnabled":true,"provider":"gtag"},"locale":"en","localeAndVariant":{"code":"en"},"matchCustomerLocale":false,"widgetSettings":{"global":{"dateSettings":{"format":{"type":"relative"}},"hideOkendoBranding":true,"stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#000000","interspace":2,"shape":{"type":"default"},"showBorder":false},"showIncentiveIndicator":false,"searchEnginePaginationEnabled":false,"font":{"fontType":"inherit-from-page"}},"homepageCarousel":{"slidesPerPage":{"large":3,"medium":2},"totalSlides":12,"scrollBehaviour":"slide","style":{"showDates":true,"border":{"color":"#E5E5EB","width":{"value":1,"unit":"px"}},"headingFont":{"hasCustomFontSettings":false},"bodyFont":{"hasCustomFontSettings":false},"arrows":{"color":"#676986","size":{"value":24,"unit":"px"},"enabled":true},"avatar":{"backgroundColor":"#E5E5EB","placeholderTextColor":"#2C3E50","size":{"value":48,"unit":"px"},"enabled":true},"media":{"size":{"value":80,"unit":"px"},"imageGap":{"value":4,"unit":"px"},"enabled":true},"stars":{"height":{"value":18,"unit":"px"}},"productImageSize":{"value":48,"unit":"px"},"layout":{"name":"default","reviewDetailsPosition":"below","showProductName":false,"showAttributeBars":false,"showProductVariantName":false,"showProductDetails":"only-when-grouped"},"highlightColor":"#0E7A82","spaceAbove":{"value":20,"unit":"px"},"text":{"primaryColor":"#2C3E50","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeSmall":{"value":12,"unit":"px"},"secondaryColor":"#676986"},"spaceBelow":{"value":20,"unit":"px"}},"defaultSort":"rating desc","autoPlay":false,"truncation":{"bodyMaxLines":4,"enabled":true,"truncateAll":false}},"mediaCarousel":{"minimumImages":1,"linkText":"Read More","autoPlay":false,"slideSize":"medium","arrowPosition":"outside"},"mediaGrid":{"gridStyleDesktop":{"layout":"default-desktop"},"gridStyleMobile":{"layout":"default-mobile"},"showMoreArrow":{"arrowColor":"#676986","enabled":true,"backgroundColor":"#f4f4f6"},"linkText":"Read More","infiniteScroll":false,"gapSize":{"value":10,"unit":"px"}},"questions":{"initialPageSize":6,"loadMorePageSize":6},"reviewsBadge":{"layout":"minimal","stars":{"height":{"value":16,"unit":"px"}}},"reviewsTab":{"enabled":false},"reviewsWidget":{"tabs":{"reviews":true,"questions":false},"header":{"columnDistribution":"space-between","verticalAlignment":"top","blocks":[{"columnWidth":"half","modules":[{"name":"attributes","layout":"stacked","stretchMode":"stretch"}],"textAlignment":"left"},{"columnWidth":"half","modules":[{"name":"rating-average","layout":"one-line"},{"name":"rating-breakdown","backgroundColor":"#EAEAEA","shadingColor":"#000000","stretchMode":"stretch"}],"textAlignment":"left"}]},"style":{"showDates":false,"border":{"color":"#000000","width":{"value":0,"unit":"px"}},"bodyFont":{"hasCustomFontSettings":false},"headingFont":{"hasCustomFontSettings":false},"filters":{"backgroundColorActive":"#676986","backgroundColor":"#FFFFFF","borderColor":"#000000","borderRadius":{"value":100,"unit":"px"},"borderColorActive":"#676986","textColorActive":"#FFFFFF","textColor":"#000000","searchHighlightColor":"#999999"},"avatar":{"enabled":false},"stars":{"height":{"value":16,"unit":"px"}},"shadingColor":"#FFFFFF","productImageSize":{"value":48,"unit":"px"},"button":{"backgroundColorActive":"#000000","borderColorHover":"#DBDDE4","backgroundColor":"#000000","borderColor":"#DBDDE4","backgroundColorHover":"#000000","textColorHover":"#FFFFFF","borderRadius":{"value":4,"unit":"px"},"borderWidth":{"value":1,"unit":"px"},"borderColorActive":"#000000","textColorActive":"#FFFFFF","textColor":"#FFFFFF","font":{"hasCustomFontSettings":false}},"highlightColor":"#000000","spaceAbove":{"value":20,"unit":"px"},"text":{"primaryColor":"#000000","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeLarge":{"value":20,"unit":"px"},"fontSizeSmall":{"value":12,"unit":"px"},"secondaryColor":"#000000"},"spaceBelow":{"value":20,"unit":"px"},"attributeBar":{"style":"default","backgroundColor":"#D3D4DD","shadingColor":"#9A9DB1","markerColor":"#000000"}},"showWhenEmpty":true,"reviews":{"list":{"layout":{"collapseReviewerDetails":false,"columnAmount":4,"
499name":"default","showAttributeBars":false,"borderStyle":"full","showProductVariantName":false,"showProductDetails":"only-when-grouped"},"initialPageSize":5,"media":{"layout":"hidden"},"truncation":{"bodyMaxLines":3,"truncateAll":false,"enabled":true},"loadMorePageSize":5},"controls":{"filterMode":"off","defaultSort":"date desc","writeReviewButtonEnabled":true,"freeTextSearchEnabled":false}}},"starRatings":{"showWhenEmpty":false,"style":{"spaceAbove":{"value":0,"unit":"px"},"text":{"content":"review-count","style":"number-only","brackets":false},"singleStar":false,"height":{"value":16,"unit":"px"},"spaceBelow":{"value":0,"unit":"px"}},"clickBehavior":"scroll-to-widget"}},"features":{"recorderPlusEnabled":true,"recorderQandaPlusEnabled":true}}</script>
499 500 <style id="oke-css-vars">:root{--oke-widget-spaceAbove:20px;--oke-widget-spaceBelow:20px;--oke-starRating-spaceAbove:0;--oke-starRating-spaceBelow:0;--oke-button-backgroundColor:#000;--oke-button-backgroundColorHover:#000;--oke-button-backgroundColorActive:#000;--oke-button-textColor:#fff;--oke-button-textColorHover:#fff;--oke-button-textColorActive:#fff;--oke-button-borderColor:#dbdde4;--oke-button-borderColorHover:#dbdde4;--oke-button-borderColorActive:#000;--oke-button-borderRadius:4px;--oke-button-borderWidth:1px;--oke-button-fontWeight:700;--oke-button-fontSize:var(--oke-text-regular,14px);--oke-button-fontFamily:inherit;--oke-border-color:#000;--oke-border-width:0;--oke-text-primaryColor:#000;--oke-text-secondaryColor:#000;--oke-text-small:12px;--oke-text-regular:14px;--oke-text-large:20px;--oke-text-fontFamily:inherit;--oke-avatar-size:undefined;--oke-avatar-backgroundColor:undefined;--oke-avatar-placeholderTextColor:undefined;--oke-highlightColor:#000;--oke-shadingColor:#fff;--oke-productImageSize:48px;--oke-attributeBar-shadingColor:#9a9db1;--oke-attributeBar-borderColor:undefined;--oke-attributeBar-backgroundColor:#d3d4dd;--oke-attributeBar-markerColor:#000;--oke-filter-backgroundColor:#fff;--oke-filter-backgroundColorActive:#676986;--oke-filter-borderColor:#000;--oke-filter-borderColorActive:#676986;--oke-filter-textColor:#000;--oke-filter-textColorActive:#fff;--oke-filter-borderRadius:100px;--oke-filter-searchHighlightColor:#999;--oke-mediaGrid-chevronColor:#676986;--oke-stars-foregroundColor:#000;--oke-stars-backgroundColor:#e5e5e5;--oke-stars-borderWidth:0}.oke-w,oke-modal{--oke-title-fontWeight:600;--oke-title-fontSize:var(--oke-text-regular,14px);--oke-title-fontFamily:inherit;--oke-bodyText-fontWeight:400;--oke-bodyText-fontSize:var(--oke-text-regular,14px);--oke-bodyText-fontFamily:inherit}</style> 501 <style id="oke-reviews-custom-css">div.okeReviews[data-oke-container] p{font-size:14px}div.okeReviews[data-oke-container] .oke-helpful-vote-button{line-height:1}div.okeReviews[data-oke-container] .oke-helpful-vote-counter{line-height:normal}</style> 502 <template id="oke-reviews-body-template"><svg id="oke-star-symbols" style="display:none!important" data-oke-id="oke-star-symbols"><symbol id="oke-star-empty" style="overflow:visible;"><path id="star-default--empty" fill="var(--oke-stars-backgroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M3.34 13.86c-.48.3-.76.1-.63-.44l1.08-4.56L.26 5.82c-.42-.36-.32-.7.24-.74l4.63-.37L6.92.39c.2-.52.55-.52.76 0l1.8 4.32 4.62.37c.56.05.67.37.24.74l-3.53 3.04 1.08 4.56c.13.54-.14.74-.63.44L7.3 11.43l-3.96 2.43z"/></symbol><symbol id="oke-star-filled" style="overflow:visible;"><path id="star-default--filled" fill="var(--oke-stars-foregroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M3.34 13.86c-.48.3-.76.1-.63-.44l1.08-4.56L.26 5.82c-.42-.36-.32-.7.24-.74l4.63-.37L6.92.39c.2-.52.55-.52.76 0l1.8 4.32 4.62.37c.56.05.67.37.24.74l-3.53 3.04 1.08 4.56c.13.54-.14.74-.63.44L7.3 11.43l-3.96 2.43z"/></symbol></svg></template>
502<script>document.addEventListener('readystatechange',() =>{Array.from(document.getElementById('oke-reviews-body-template')?.content.children)?.forEach(function(child){if(!Array.from(document.body.querySelectorAll('[data-oke-id='.concat(child.getAttribute('data-oke-id'),']'))).length){document.body.prepend(child)}})},{once:true});</script>
502 503 504 505 506 507 508 509 510 511 512 513 514 515 516<!-- END app snippet --> 517 518 <!-- BEGIN app snippet: okendo-reviews-json-ld --> 519<!-- END app snippet --> 520 521<!-- BEGIN app snippet: widget-plus-initialisation-script --> 522 523 524 525 526
526<script async id="okendo-reviews-script" src="https://cdn-static.okendo.io/reviews-widget-plus/js/okendo-reviews.js"></script>
526 527 528<!-- END app snippet --> 529 530 531<!-- END app block --><!-- BEGIN app block: shopify://apps/rebuy-personalization-engine/blocks/rebuy-global-embed/a26ae9b9-933b-40bf-bbc6-bf1220bbc4dc -->
532<script> 533 window.Rebuy = window.Rebuy || {}; 534 window.Rebuy.customer = window.Rebuy.customer || {}; 535 536 window.Rebuy.market = window.Rebuy.market || {}; 537 538 window.Rebuy.market.country = "US"; 539 540 541 window.Rebuy.market.locale = "en"; 542 543</script>
543 544 545 546<link rel="preconnect" href="https://cdn.rebuyengine.com"> 547 <link rel="preconnect" href="https://rebuyengine.com" crossorigin> 548 <link rel="preconnect" href="https://cached.rebuyengine.com" crossorigin> 549
549<script async src="https://cdn.rebuyengine.com/onsite/js/rebuy.js?shop=two-blind-brothers.myshopify.com"></script>
549 550 551 552<!-- END app block --><!-- BEGIN app block: shopify://apps/tolstoy-ads-image-video/blocks/widget-block/06fa8282-42ff-403e-b67c-1936776aed11 --> 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573
574<script 575 type="module" 576 async 577 src="https://widget.gotolstoy.com/we/widget.js" 578 data-shop=two-blind-brothers.myshopify.com 579 data-app-key=700d386d-5abe-4e24-886d-969b2ede5a54 580 data-should-use-cache=true 581 data-cache-version=19f2c1e0263 582 data-product-gallery-projects="[]" 583 data-collection-gallery-projects="[]" 584 data-product-id="" 585 data-template-name="cart" 586 data-ot-ignore 587 data-cookieconsent="ignore" 588> 589</script>
vendor: 1 bytes, line 589
589
590<script 591 type="module" 592 async 593 src="https://play.gotolstoy.com/widget-v2/widget.js" 594 id="tolstoy-widget-script" 595 data-shop=two-blind-brothers.myshopify.com 596 data-app-key=700d386d-5abe-4e24-886d-969b2ede5a54 597 data-should-use-cache=true 598 data-cache-version=19f2c1e0263 599 data-product-gallery-projects="[]" 600 data-collection-gallery-projects="[]" 601 data-product-id="" 602 data-collection-id="" 603 data-shop-assistant-enabled="false" 604 data-search-bar-widget-enabled="false" 605 data-template-name="cart" 606 data-customer-id="" 607 data-ot-ignore 608 data-cookieconsent="ignore" 609></script>
vendor: 1 bytes, line 609
609
610<script 611 type="module" 612 async 613 src="https://play.gotolstoy.com/widget-v2/widget.brand-mcp.js" 614 data-app-key=700d386d-5abe-4e24-886d-969b2ede5a54 615 data-ot-ignore 616 data-cookieconsent="ignore" 617></script>
vendor: 1 bytes, line 617
617
618<script> 619 window.tolstoyCurrencySymbol = "$"; 620 window.tolstoyMoneyFormat = "${{amount_no_decimals}}"; 621</script>
vendor: 1 bytes, line 621
621
622<script> 623 (function(){ 624 function hideOrphanedTiles(){ 625 var els = document.querySelectorAll('.tolstoy-collection-page-tile,tolstoy-collection-tile'); 626 for(var i=0;i<els.length;i++){ 627 if(els[i].children.length>0) continue; 628 els[i].style.setProperty('display','none','important'); 629 var w=els[i].closest('[class*="tolstoy-grid"]')||els[i].closest('.tolstoy-collection-page-tile-wrapper'); 630 if(w) w.style.setProperty('display','none','important'); 631 } 632 } 633 if(document.readyState==='loading'){ 634 document.addEventListener('DOMContentLoaded',hideOrphanedTiles); 635 }else{ 636 hideOrphanedTiles(); 637 } 638 })(); 639</script>
vendor: 1 bytes, line 639
639
640<script> 641 window.tolstoyDebug = { 642 enable: () => { 643 fetch('/cart/update.js', { 644 method: 'POST', 645 headers: { 'Content-Type': 'application/json' }, 646 body: JSON.stringify({ attributes: { TolstoyDebugEnabled: 'true' } }) 647 }) 648 .then(response => response.json()) 649 .then(() => window.location.reload()); 650 }, 651 disable: () => { 652 fetch('/cart/update.js', { 653 method: 'POST', 654 headers: { 'Content-Type': 'application/json' }, 655 body: JSON.stringify({ attributes: { TolstoyDebugEnabled: null } }) 656 }) 657 .then(response => response.json()) 658 .then(() => window.location.reload()) 659 }, 660 status: async () => { 661 const response = await fetch('/cart.js'); 662 const json = await response.json(); 663 console.log(json.attributes); 664 } 665 } 666</script>
666 667 668<!-- END app block -->
668<script src="https://cdn.shopify.com/extensions/01a0f6b0-fab4-746e-94a3-645abf621cd0/gdpr-backpack-901/assets/consentmo_cookie_consent.js" type="text/javascript" defer="defer"></script>
668 669<meta property="og:image" content="https://cdn.shopify.com/s/files/1/1330/8707/files/Social_Share_Image.jpg?v=1714672345" /> 670<meta property="og:image:secure_url" content="https://cdn.shopify.com/s/files/1/1330/8707/files/Social_Share_Image.jpg?v=1714672345" /> 671<meta property="og:image:width" content="1200" /> 672<meta property="og:image:height" content="628" /> 673<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
674<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 13308707,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "cart"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 674
674
675<script> 676 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 677</script>
vendor: 1 bytes, line 677
677
678<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
678).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 13308707,storefrontBaseUrl: "https://twoblindbrothers.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://twoblindbrothers.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2705227872","configuration":"{\"myshopifyDomain\":\"two-blind-brothers.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"23b97d18e2aa74363140dc29c9284e87","type":"APP","apiClientId":2775569,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"}
678,{"id":"1510342752","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"9bce1c0cdfc09538057898e4ff134fa2","type":"APP","apiClientId":30400643073,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1499037792","configuration":"{\"tenantId\":\"a428e91e-2b11-4ea4-b2a3-f860d7ccfa66\", \"shop\":\"two-blind-brothers.myshopify.com\", \"datasourceId\":\"e860cf2c-31d8-4d12-aab2-7437c6e642c6\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"480ec4c467668a19b56bc858d759ef88","type":"APP","apiClientId":4294333,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1262387296","configuration":"{\"accountID\":\"two-blind-brothers.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c036f20e16986dd29d452a2b9058704e","type":"APP","apiClientId":316241608705,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1075249248","configuration":"{\"vibePixelId\":\"hZ7kV0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"72859894ec8aa8d5e0246c40aaed9466","type":"APP","apiClientId":132266098689,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":[],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1067712608","configuration":"{\"pixelCode\":\"CL4LFBBC77UD34TA49B0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"22e92c2ad45662f435e4801458fb78cc","type":"APP","apiClientId":4383523,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1031962720","configuration":"{\"accountID\":\"HMZ6Wk\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"617939040","configuration":"{\"debug\":\"false\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"a9a83cf44fb282052ff936f7ab101058","type":"APP","apiClientId":4539653,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"329646176","configuration":"{\"token\":\"cb9ac6bd-94a3-4340-bfa8-d789a7e4793f\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"a11948d157c1c71bab368db7465b61ce","type":"APP","apiClientId":149080899585,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"269254752","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"AW-881678315\\\",\\\"GT-TB654X7\\\"],\\\"target_country\\\":\\\"US\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/FSD6CNrs64gBEOuvtaQD\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/SHYtCN3s64gBEOuvtaQD\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-Q8VCXXLR00\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/g5sMCNTs64gBEOuvtaQD\\\",\\\"MC-R96CCKGP1P\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-Q8VCXXLR00\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/hm0bCNHs64gBEOuvtaQD\\\",\\\"MC-R96CCKGP1P\\\",\\\"AW-881678315\\\/lioxCOzw64gBEOuvtaQD\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/PvlbCM7s64gBEOuvtaQD\\\",\\\"MC-R96CCKGP1P\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-Q8VCXXLR00\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/3YDiCODs64gBEOuvtaQD\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-Q8VCXXLR00\\\",\\\"AW-881678315\\\/yzGYCNfs64gBEOuvtaQD\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-Q8VCXXLR00\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"98828384","configuration":"{\"pixel_id\":\"982280505227025\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"29261920","configuration":"{\"tagID\":\"2612506441653\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7ae565e198624b39e0856d352b9a6b4c","type":"APP","apiClientId":3009811,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"21987424","configuration":"{\"northbeamId\": \"ae689b81-77f1-468c-bb7e-d7ad823f43fb\", \"collectorDomain\": \"i.twoblindbrothers.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"e46c2d6352a678fc6581f4bd0bc772e1","type":"APP","apiClientId":3188721,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"7143520","configuration":"{\"shop\":\"two-blind-brothers.myshopify.com\", \"shopliftUrl\":\"https:\/\/events.shoplift.ai\/api\/events\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"dabcda9558be25394b12ce3ce899568b","type":"APP","apiClientId":7521861633,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
678,"dataSharingState":"unrestricted"},{"id":"60293216","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"4","type":"CUSTOM","privacyPurposes":[],"name":"Reddit Pixel"},{"id":"60325984","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"2","type":"CUSTOM","privacyPurposes":[],"name":"Bing UET"},{"id":"60391520","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"3","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"],"name":"Twitter UWT"},{"id":"60522592","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"ATTN Pixel"},{"id":"83951712","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"],"name":"Northbeam Event 2025"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Two Blind Brothers","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"two-blind-brothers.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/twoblindbrothers.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://twoblindbrothers.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"122340769888","themePublished":"true","eventMetadataId":"2484df84-9e44-4c99-8014-a692b340ff35","pageType":"cart","shopId":"13308707","storefrontBaseUrl":"https:\/\/twoblindbrothers.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
678<script> 679 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 680 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 681 window.ShopifyAnalytics.meta.currency = 'USD'; 682 var meta = {"page":{"pageType":"cart","requestId":"9139c51a-606b-4b3b-af02-ba4be761bda6-1790919106"}}; 683 for (var attr in meta) { 684 window.ShopifyAnalytics.meta[attr] = meta[attr]; 685 } 686</script>
vendor: 1 bytes, line 686
686
687<script class="analytics"> 688 (function () { 689 var customDocumentWrite = function(content) { 690 var jquery = null; 691 692 if (window.jQuery) { 693 jquery = window.jQuery; 694 } else if (window.Checkout && window.Checkout.$) { 695 jquery = window.Checkout.$; 696 } 697 698 if (jquery) { 699 jquery('body').append(content); 700 } 701 }; 702 703 var hasLoggedConversion = function(token) { 704 if (token) { 705 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 706 } 707 return false; 708 } 709 710 var setCookieIfConversion = function(token) { 711 if (token) { 712 var twoMonthsFromNow = new Date(Date.now()); 713 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 714 715 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 716 } 717 } 718 719 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 720 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 721 if (trekkie.integrations) { 722 return; 723 } 724 trekkie.methods = [ 725 'identify', 726 'page', 727 'ready', 728 'track', 729 'trackForm', 730 'trackLink' 731 ]; 732 trekkie.factory = function(method) { 733 return function() { 734 var args = Array.prototype.slice.call(arguments); 735 args.unshift(method); 736 trekkie.push(args); 737 if (method == 'track' || method == 'page') { 738 var pageUrl; 739 try { 740 pageUrl = window.location.href; 741 } catch (e) {} 742 var pageReferrer; 743 try { 744 pageReferrer = document.referrer; 745 } catch (e) {} 746 try { 747 if (window.__TREKKIE_SHIM_QUEUE == null) { 748 window.__TREKKIE_SHIM_QUEUE = []; 749 } 750 window.__TREKKIE_SHIM_QUEUE.push({ 751 from: 'trekkie-stub', 752 method: method, 753 args: args.slice(1), 754 pageContext: { 755 url: pageUrl, 756 referrer: pageReferrer 757 } 758 }); 759 } catch (e) { 760 // no-op 761 } 762 } 763 return trekkie; 764 }; 765 }; 766 for (var i = 0; i < trekkie.methods.length; i++) { 767 var key = trekkie.methods[i]; 768 trekkie[key] = trekkie.factory(key); 769 } 770 trekkie.load = function(config) { 771 trekkie.config = config || {}; 772 trekkie.config.initialDocumentCookie = document.cookie; 773 var first = document.getElementsByTagName('script')[0]; 774var script = document.createElement('script'); 775script.type = 'text/javascript'; 776script.onerror = function(e) { 777 var scriptFallback = document.createElement('script'); 778 scriptFallback.type = 'text/javascript'; 779 scriptFallback.onerror = function(error) { 780 var Monorail = { 781 produce: function produce(monorailDomain, schemaId, payload) { 782 var currentMs = new Date().getTime(); 783 var event = { 784 schema_id: schemaId, 785 payload: payload, 786 metadata: { 787 event_created_at_ms: currentMs, 788 event_sent_at_ms: currentMs 789 } 790 }; 791 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 792 }, 793 sendRequest: function sendRequest(endpointUrl, payload) { 794 // Try the sendBeacon API 795 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 796 var blobData = new window.Blob([payload], { 797 type: 'text/plain' 798 }); 799 800 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 801 return true; 802 } // sendBeacon was not successful 803 804 } // XHR beacon 805 806 var xhr = new XMLHttpRequest(); 807 808 try { 809 xhr.open('POST', endpointUrl); 810 xhr.setRequestHeader('Content-Type', 'text/plain'); 811 xhr.send(payload); 812 } catch (e) { 813 console.log(e); 814 } 815 816 return false; 817 }, 818 isIos12: function isIos12() { 819 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 820 } 821 }; 822 Monorail.produce('monorail-edge.shopifysvc.com', 823 'trekkie_storefront_load_errors/1.1', 824 {shop_id: 13308707, 825 theme_id: 122340769888, 826 app_name: "storefront", 827 context_url: window.location.href, 828 source_url: "//twoblindbrothers.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 829 830 }; 831 scriptFallback.async = true; 832 scriptFallback.src = '//twoblindbrothers.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 833 first.parentNode.insertBefore(scriptFallback, first); 834}; 835script.async = true; 836script.src = '//twoblindbrothers.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 837first.parentNode.insertBefore(script, first); 838 839 }; 840 trekkie.load( 841 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":13308707,"isMerchantRequest":null,"themeId":122340769888,"themeCityHash":"14711308733596041529","contentLanguage":"en","currency":"USD","eventMetadataId":"2484df84-9e44-4c99-8014-a692b340ff35"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 842 ); 843 844 var loaded = false;
845 trekkie.ready(function() { 846 if (loaded) return; 847 loaded = true; 848 849 window.ShopifyAnalytics.lib = window.trekkie; 850 851 var originalDocumentWrite = document.write; 852 document.write = customDocumentWrite; 853 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 854 document.write = originalDocumentWrite; 855 856 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 857 var token = match? match[1]: undefined; 858 if (!hasLoggedConversion(token)) { 859 setCookieIfConversion(token); 860 861 } 862 }); 863 864 window.ShopifyAnalytics.lib.page(null,{"pageType":"cart","requestId":"9139c51a-606b-4b3b-af02-ba4be761bda6-1790919106","shopifyEmitted":true}); 865 866 var eventsListenerScript = document.createElement('script'); 867 eventsListenerScript.async = true; 868 eventsListenerScript.src = "//twoblindbrothers.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 869 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 870})();</script>
870 871
871<script> 872 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 873 window.ga = function ga() { 874 (window.ga.q = window.ga.q || []).push(arguments); 875 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 876 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 877 } 878 console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information."); 879 }; 880 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 881 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 882 } 883 } 884</script>
vendor: 1 bytes, line 884
884
885<script 886 defer 887 src="https://twoblindbrothers.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 888 data-application="storefront-renderer" 889 data-shop-id="13308707" 890 data-render-region="gcp-us-central1" 891 data-page-type="cart" 892 data-theme-instance-id="122340769888" 893 data-theme-name="" 894 data-theme-version="" 895 data-monorail-region="shop_domain" 896 data-resource-timing-sampling-rate="10" 897 data-shs="true" 898 data-shs-beacon="true" 899 data-shs-export-with-fetch="true" 900 data-shs-logs-sample-rate="1" 901 data-shs-beacon-endpoint="https://twoblindbrothers.com/api/collect" 902></script>
902 903<meta name="shopify-y" content="1b0e9251-a7ba-4e27-90a7-043ee3acdf07" data-expiration="1822476706000"><meta name="shopify-s" content="eed2af9c-7c50-4a86-8dbc-899cab237b1a" data-expiration="1790920906000"><meta name="new-cookie-storage-activated" content="t"> 904</head> 905 906 907<body id="your-shopping-cart" class="template-cart"> 908 909 <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 909-910
909 910<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
910GTM-WRF9GG7G
vendor: 83 bytes, lines 910-911
910" 911height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
912<!-- End Google Tag Manager (noscript) --> 913 914 915 916 <!-- Conversion Pixel for [lead]- DO NOT MODIFY --> 917 918 <!-- End of Conversion Pixel --> 919 920 <div class="sr-only"> 921 922 </div> 923 <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 923-924
923 924 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
924GTM-NJTDWKD
vendor: 87 bytes, lines 924-925
924" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 925
925<!-- End Google Tag Manager (noscript) --> 926 927 <div id="PageContainer"> 928 929 <div id="custom-reserve-announcement-bar"> 930 <div id="shopify-section-reserve-announcement-bar" class="shopify-section"> 931 932 933 934 935</div> 936 </div> 937 938 <div id="shopify-section-global-navigation" class="shopify-section"><style> 939 .header-reserve__menu-item-icon-lock > svg > path { 940 transition-duration: .25s; 941 } 942 943 .js-header-reserve-navigation:hover .header-reserve__menu-item-icon-lock > svg > path { 944 fill: #3d3d3d; 945 } 946 947 .hover:hover .header-reserve__menu-item-icon-lock > svg > path { 948 fill: #3d3d3d; 949 } 950 951 .js-header-reserve-navigation:hover .text-grey { 952 color: #3d3d3d; 953 } 954 955 .hover:hover { 956 color: #3d3d3d; 957 } 958 959 .none { 960 display: none; 961 } 962 963 .love-tag-icon { 964 margin-top: -6px; 965 display: inline-block; 966 } 967 968 .love-tag-fix { 969 position: absolute; 970 left: -50px; 971 top: -50px; 972 } 973 974 #rebuy-widget-175048 { 975 padding: 0px; 976 } 977</style> 978 <header-reserve class="block bg-white header-reserve" id="headerReserve"> 979 <div class="fixed inset-0 opacity-0 z-10 w-full h-full bg-black/40 invisible transition-all duration-300 ease-in-out [.is-active_&]:opacity-100 [.is-active_&]:visible" data-menu-overlay></div> 980 981 <span class="love-tag-fix"> 982 983<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="26" zoomAndPan="magnify" viewBox="0 0 75 74.999997" height="26" preserveAspectRatio="xMidYMid meet" version="1.0"><defs><clipPath id="4bd791745a"><path d="M 4 5 L 62 5 L 62 70 L 4 70 Z M 4 5" clip-rule="nonzero"/></clipPath><clipPath id="0b881fa5f7"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="5e6f85307e"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="7cf9d2691d"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="771b14f9a0"><path d="M 23 24 L 49 24 L 49 48 L 23 48 Z M 23 24" clip-rule="nonzero"/></clipPath><clipPath id="0d9462095f"><path d="M 28.203125 21.335938 L 50.808594 33.777344 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.203125 21.335938" clip-rule="nonzero"/></clipPath><clipPath id="5b02e7e0d8"><path d="M 27.320312 25.0625 C 23.828125 27.070312 23.503906 30.714844 24.269531 33.164062 L 28.742188 47.464844 L 43 43.511719 C 45.429688 42.667969 46.984375 41.207031 47.753906 39.050781 C 48.816406 36.070312 47.726562 32.703125 45.109375 30.867188 C 43.5 29.742188 41.582031 29.316406 39.703125 29.679688 C 39.199219 29.777344 38.710938 29.925781 38.25 30.128906 C 38.148438 29.554688 37.972656 28.980469 37.726562 28.425781 C 36.863281 26.484375 35.222656 24.996094 33.21875 24.347656 C 31.320312 23.734375 29.171875 23.996094 27.320312 25.0625 Z M 27.320312 25.0625" clip-rule="nonzero"/></clipPath></defs><g clip-path="url(#4bd791745a)"><g clip-path="url(#0b881fa5f7)"><g clip-path="url(#5e6f85307e)"><g clip-path="url(#7cf9d2691d)"><path fill="#000000" d="M 40.742188 69.582031 L 4.113281 50.609375 L 24.753906 10.753906 L 41.050781 5.5625 L 56.222656 13.421875 L 61.382812 29.726562 Z M 5.203125 50.261719 L 40.394531 68.492188 L 60.511719 29.652344 L 55.550781 13.988281 L 40.972656 6.4375 L 25.320312 11.425781 Z M 44.753906 16.988281 C 44.449219 16.832031 44.183594 16.621094 43.964844 16.359375 C 43.742188 16.09375 43.578125 15.800781 43.476562 15.472656 C 43.371094 15.144531 43.335938 14.808594 43.363281 14.464844 C 43.394531 14.121094 43.488281 13.796875 43.644531 13.492188 C 43.804688 13.1875 44.015625 12.921875 44.277344 12.699219 C 44.539062 12.476562 44.835938 12.316406 45.164062 12.210938 C 45.492188 12.105469 45.828125 12.066406 46.167969 12.097656 C 46.511719 12.125 46.835938 12.21875 47.140625 12.378906 C 47.445312 12.535156 47.710938 12.746094 47.929688 13.011719 C 48.152344 13.273438 48.316406 13.570312 48.417969 13.894531 C 48.523438 14.222656 48.558594 14.558594 48.53125 14.902344 C 48.5 15.246094 48.40625 15.570312 48.25 15.875 C 48.089844 16.179688 47.878906 16.445312 47.617188 16.667969 C 47.351562 16.886719 47.058594 17.050781 46.730469 17.15625 C 46.402344 17.261719 46.066406 17.296875 45.722656 17.269531 C 45.382812 17.238281 45.058594 17.148438 44.753906 16.988281 Z M 46.769531 13.097656 C 46.558594 12.988281 46.335938 12.925781 46.101562 12.90625 C 45.863281 12.882812 45.632812 12.910156 45.410156 12.980469 C 45.183594 13.054688 44.980469 13.167969 44.796875 13.320312 C 44.617188 13.472656 44.472656 13.652344 44.363281 13.863281 C 44.253906 14.074219 44.191406 14.296875 44.167969 14.53125 C 44.148438 14.769531 44.175781 15 44.246094 15.226562 C 44.316406 15.449219 44.429688 15.652344 44.582031 15.835938 C 44.734375 16.015625 44.914062 16.160156 45.125 16.269531 C 45.335938 16.378906 45.558594 16.441406 45.792969 16.460938 C 46.03125 16.484375 46.261719 16.457031 46.484375 16.386719 C 46.710938 16.3125 46.914062 16.199219 47.09375 16.046875 C 47.277344 15.894531 47.421875 15.714844 47.53125 15.503906 C 47.640625 15.292969 47.703125 15.070312 47.722656 14.835938 C 47.742188 14.597656 47.71875 14.367188 47.648438 14.140625 C 47.574219 13.917969 47.464844 13.714844 47.3125 13.53125 C 47.160156 13.351562 46.976562 13.207031 46.769531 13.097656 Z M 46.769531 13.097656" fill-opacity="1" fill-rule="nonzero"/></g></g></g></g><g clip-path="url(#771b14f9a0)"><g clip-path="url(#0d9462095f)"><g clip-path="url(#5b02e7e0d8)"><path fill="#ff3131" d="M 28.160156 21.414062 L 50.765625 33.855469 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.160156 21.414062" fill-opacity="1" fill-rule="nonzero"/></g></g></g></svg></span> 984 <div class="header-reserve__wrapper relative flex justify-center w-full items-center max-w-[1440px] mx-auto pt-4 pb-[12px] px-4 bg-white z-[99] md:px-10 lg:justify-between lg:py-[26px] lg:px-[56px]"> 985 <nav class="absolute header-reserve__nav-mobile left-4 sm:left-8 md:left-10 lg:hidden"> 986 <button class="hamburger--spring header-reserve__hamburger" type="button" data-btn-menu-trigger id="headerReserveButton" aria-label="Hamburger Menu">
987 <span class="header-reserve__hamburger-box"> 988 <span class="header-reserve__hamburger-inner"></span> 989 </span> 990 </button> 991 </nav> 992 993 994 995 996 997 998 <a class="header-reserve__logo-wrapper flex flex-col justify-center items-center gap-[6px] lg:gap-[7px]" href="/pages/reveal" itemprop="url"> 999 <img loading="eager" src="//twoblindbrothers.com/cdn/shop/t/278/assets/2bb-logo.png?v=50054669825176451691730151967" width="124" height="auto" alt="logo"/> 1000 1001 <h1 class="visually-hidden">Two Blind Brothers</h1></a> 1002 <nav class="hidden header-reserve__nav-desktop lg:block lg:relative lg:z-10"> 1003 <ul class="flex flex-row gap-10" style="gap: 4rem"><li class="m-0"> 1004 <div class="js-header-reserve-navigation"> 1005 <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop> 1006 1007<a class="font-medium tracking-normal text-black text-p2 font-base" href="/pages/thereserve">Apparel </a> 1008 <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon"> 1009 1010<svg class="w-full h-full" fill="none" viewBox="0 0 7 13"> 1011 <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/> 1012 </svg></span> 1013 </div> 1014 1015<div class="absolute top-5 w-full h-auto opacity-0 pt-8 invisible transition-all duration-300 ease-in-out header-reserve__menu-item-content" style="left: 75%; transform: translateX(-50%); min-width: 700px;"> 1016 <div class="flex flex-row gap-10 bg-white px-6 py-4 lg:rounded-[0_0_16px_16px]" style="box-shadow: 0px 12px 20px -10px rgba(0,0,0,0.4);"> 1017 <ul class="grid w-full grid-cols-2 m-0 bg-white gap-x-10 gap-y-8 after:content-none"><li class="m-0"> 1018 1019 <a href="/collections/womens" 1020 1021 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Women's 1022 </a> 1023 1024<ul class="m-0 flex flex-col gap-[6px]"><li class="m-0"> 1025 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens">Shop All</a> 1026 </li><li class="m-0"> 1027 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-graphic-tees">Graphic Tees</a> 1028 </li><li class="m-0"> 1029 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-long-sleeve-henley">Long Sleeve Tops</a> 1030 </li><li class="m-0"> 1031 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-short-sleeve-relaxed-fit-henley">Short Sleeve Tops</a> 1032 </li><li class="m-0"> 1033 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-bottoms">Bottoms</a> 1034 </li><li class="m-0"> 1035 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/womens-sale">Sale</a> 1036 </li></ul></li><li class="m-0"> 1037 1038 <a href="/collections/mens" 1039 1040 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Men's 1041 </a> 1042 1043<ul class="m-0 flex flex-col gap-[6px]"><li class="m-0"> 1044 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens">Shop All</a> 1045 </li><li class="m-0"> 1046 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens-graphic-tees">Graphic Tees</a> 1047 </li><li class="m-0"> 1048 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens-long-sleeve-henley">Long Sleeve Tops</a> 1049 </li><li class="m-0"> 1050 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens-short-sleeve-henley">Short Sleeve Tops</a> 1051 </li><li class="m-0"> 1052 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens-bottoms-1">Bottoms</a> 1053 </li><li class="m-0"> 1054 <a class="font-normal tracking-normal text-p3 font-base text-grey-400 hover:underline hover:text-grey" href="/collections/mens-sale">Sale</a> 1055 </li></ul></li><li class="m-0"> 1056 1057 <a href="/collections/kids" 1058 1059 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Kid's 1060 </a> 1061 1062</li></ul></div> 1063 </div> 1064 1065 </div> 1066 </li><li class="m-0"> 1067 <div class="js-header-reserve-navigation"> 1068 <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop> 1069 1070<a class="font-medium tracking-normal text-black text-p2 font-base" href="/collections/gifts">Accessories</a>
1071 <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon"> 1072 1073<svg class="w-full h-full" fill="none" viewBox="0 0 7 13"> 1074 <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/> 1075 </svg></span> 1076 </div> 1077 1078<div class="absolute top-5 w-full h-auto opacity-0 pt-8 invisible transition-all duration-300 ease-in-out header-reserve__menu-item-content" style="left: 75%; transform: translateX(-50%); min-width: 700px;"> 1079 <div class="flex flex-row gap-10 bg-white px-6 py-4 lg:rounded-[0_0_16px_16px]" style="box-shadow: 0px 12px 20px -10px rgba(0,0,0,0.4);"> 1080 <ul class="grid w-full grid-cols-2 m-0 bg-white gap-x-10 gap-y-8 after:content-none"><li class="m-0"> 1081 1082 <a href="/collections/gifts" 1083 1084 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Shop All 1085 </a> 1086 1087</li><li class="m-0"> 1088 1089 <a href="/collections/the-2bb-sock-collection" 1090 1091 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Socks 1092 </a> 1093 1094</li><li class="m-0"> 1095 1096 <a href="/pages/sunglasses" 1097 1098 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Sunglasses 1099 </a> 1100 1101</li><li class="m-0"> 1102 1103 <a href="/collections/guide-dog-collection" 1104 1105 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Guide Dogs 1106 </a> 1107 1108</li></ul></div> 1109 </div> 1110 1111 </div> 1112 </li><li class="m-0"> 1113 <div class="js-header-reserve-navigation"> 1114 <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop> 1115 1116<a class="font-medium tracking-normal text-black text-p2 font-base" href="/pages/no-barriers-x-2bb-collab">Collaborations</a> 1117 <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon"> 1118 1119<svg class="w-full h-full" fill="none" viewBox="0 0 7 13"> 1120 <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/> 1121 </svg></span> 1122 </div> 1123 1124<div class="absolute top-5 w-full h-auto opacity-0 pt-8 invisible transition-all duration-300 ease-in-out header-reserve__menu-item-content" style="left: 75%; transform: translateX(-50%); min-width: 700px;"> 1125 <div class="flex flex-row gap-10 bg-white px-6 py-4 lg:rounded-[0_0_16px_16px]" style="box-shadow: 0px 12px 20px -10px rgba(0,0,0,0.4);"> 1126 <ul class="grid w-full grid-cols-2 m-0 bg-white gap-x-10 gap-y-8 after:content-none"><li class="m-0"> 1127 1128 <a href="/pages/no-barriers-x-2bb-collab" 1129 1130 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">No Barriers Hiking Socks 1131 </a> 1132 1133</li><li class="m-0"> 1134 1135 <a href="/pages/dogs-inc-shop-blind" 1136 1137 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Dogs Inc Shop Blind 1138 </a> 1139 1140</li></ul></div> 1141 </div> 1142 1143 </div> 1144 </li><li class="m-0"> 1145 <div class="js-header-reserve-navigation"> 1146 <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item"> 1147 1148<a class="font-medium tracking-normal text-black text-p2 font-base flex" href="/pages/gift-tag">LoveTags<span class="love-tag-icon"> 1149 1150<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="26" zoomAndPan="magnify" viewBox="0 0 75 74.999997" height="26" preserveAspectRatio="xMidYMid meet" version="1.0"><defs><clipPath id="4bd791745a"><path d="M 4 5 L 62 5 L 62 70 L 4 70 Z M 4 5" clip-rule="nonzero"/></clipPath><clipPath id="0b881fa5f7"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="5e6f85307e"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="7cf9d2691d"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="771b14f9a0"><path d="M 23 24 L 49 24 L 49 48 L 23 48 Z M 23 24" clip-rule="nonzero"/></clipPath><clipPath id="0d9462095f"><path d="M 28.203125 21.335938 L 50.808594 33.777344 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.203125 21.335938" clip-rule="nonzero"/></clipPath><clipPath id="5b02e7e0d8"><path d="M 27.320312 25.0625 C 23.828125 27.070312 23.503906 30.714844 24.269531 33.164062 L 28.742188 47.464844 L 43 43.511719 C 45.429688 42.667969 46.984375 41.207031 47.753906 39.050781 C 48.816406 36.070312 47.726562 32.703125 45.109375 30.867188 C 43.5 29.742188 41.582031 29.316406 39.703125 29.679688 C 39.199219 29.777344 38.710938 29.925781 38.25 30.128906 C 38.148438 29.554688 37.972656 28.980469 37.726562 28.425781 C 36.863281 26.484375 35.222656 24.996094 33.21875 24.347656 C 31.320312 23.734375 29.171875 23.996094 27.320312 25.0625 Z M 27.320312 25.0625" clip-rule="nonzero"/></clipPath></defs><g clip-path="url(#4bd791745a)"><g clip-path="url(#0b881fa5f7)"><g clip-path="url(#5e6f85307e)"><g clip-path="url(#7cf9d2691d)"><path fill="#000000" d="M 40.742188 69.582031 L 4.113281 50.609375 L 24.753906 10.753906 L 41.050781 5.5625 L 56.222656 13.421875 L 61.382812 29.726562 Z M 5.203125 50.261719 L 40.394531 68.492188 L 60.511719 29.652344 L 55.550781 13.988281 L 40.972656 6.4375 L 25.320312 11.425781 Z M 44.753906 16.988281 C 44.449219 16.832031 44.183594 16.621094 43.964844 16.359375 C 43.742188 16.09375 43.578125 15.800781 43.476562 15.472656 C 43.371094 15.144531 43.335938 14.808594 43.363281 14.464844 C 43.394531 14.121094 43.488281 13.796875 43.644531 13.492188 C 43.804688 13.1875 44.015625 12.921875 44.277344 12.699219 C 44.539062 12.476562 44.835938 12.316406 45.164062 12.210938 C 45.492188 12.105469 45.828125 12.066406 46.167969 12.097656 C 46.511719 12.125 46.835938 12.21875 47.140625 12.378906 C 47.445312 12.535156 47.710938 12.746094 47.929688 13.011719 C 48.152344 13.273438 48.316406 13.570312 48.417969 13.894531 C 48.523438 14.222656 48.558594 14.5
115058594 48.53125 14.902344 C 48.5 15.246094 48.40625 15.570312 48.25 15.875 C 48.089844 16.179688 47.878906 16.445312 47.617188 16.667969 C 47.351562 16.886719 47.058594 17.050781 46.730469 17.15625 C 46.402344 17.261719 46.066406 17.296875 45.722656 17.269531 C 45.382812 17.238281 45.058594 17.148438 44.753906 16.988281 Z M 46.769531 13.097656 C 46.558594 12.988281 46.335938 12.925781 46.101562 12.90625 C 45.863281 12.882812 45.632812 12.910156 45.410156 12.980469 C 45.183594 13.054688 44.980469 13.167969 44.796875 13.320312 C 44.617188 13.472656 44.472656 13.652344 44.363281 13.863281 C 44.253906 14.074219 44.191406 14.296875 44.167969 14.53125 C 44.148438 14.769531 44.175781 15 44.246094 15.226562 C 44.316406 15.449219 44.429688 15.652344 44.582031 15.835938 C 44.734375 16.015625 44.914062 16.160156 45.125 16.269531 C 45.335938 16.378906 45.558594 16.441406 45.792969 16.460938 C 46.03125 16.484375 46.261719 16.457031 46.484375 16.386719 C 46.710938 16.3125 46.914062 16.199219 47.09375 16.046875 C 47.277344 15.894531 47.421875 15.714844 47.53125 15.503906 C 47.640625 15.292969 47.703125 15.070312 47.722656 14.835938 C 47.742188 14.597656 47.71875 14.367188 47.648438 14.140625 C 47.574219 13.917969 47.464844 13.714844 47.3125 13.53125 C 47.160156 13.351562 46.976562 13.207031 46.769531 13.097656 Z M 46.769531 13.097656" fill-opacity="1" fill-rule="nonzero"/></g></g></g></g><g clip-path="url(#771b14f9a0)"><g clip-path="url(#0d9462095f)"><g clip-path="url(#5b02e7e0d8)"><path fill="#ff3131" d="M 28.160156 21.414062 L 50.765625 33.855469 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.160156 21.414062" fill-opacity="1" fill-rule="nonzero"/></g></g></g></svg></span> 1151 </a> 1152 </div> 1153 1154 1155 1156 </div> 1157 </li><li class="m-0"> 1158 <div class="js-header-reserve-navigation"> 1159 <div class="flex flex-row items-center gap-[5px] cursor-pointer header-reserve__menu-item" data-btn-submenu-desktop> 1160 1161<a class="font-medium tracking-normal text-black text-p2 font-base" href="/pages/about-us">About Us </a> 1162 <span class="block w-[5px] h-[11px] rotate-90 transition-transform duration-300 ease-in-out header-reserve__menu-item-icon"> 1163 1164<svg class="w-full h-full" fill="none" viewBox="0 0 7 13"> 1165 <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/> 1166 </svg></span> 1167 </div> 1168 1169<div class="absolute top-5 w-full h-auto opacity-0 pt-8 invisible transition-all duration-300 ease-in-out header-reserve__menu-item-content" style="left: 75%; transform: translateX(-50%); min-width: 700px;"> 1170 <div class="flex flex-row gap-10 bg-white px-6 py-4 lg:rounded-[0_0_16px_16px]" style="box-shadow: 0px 12px 20px -10px rgba(0,0,0,0.4);"> 1171 <ul class="grid w-full grid-cols-2 m-0 bg-white gap-x-10 gap-y-8 after:content-none"><li class="m-0"> 1172 1173 <a href="/pages/about-us" 1174 1175 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Our Mission 1176 </a> 1177 1178</li><li class="m-0"> 1179 1180 <a href="https://www.twoblindbrothers.org" 1181 1182 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Programs 1183 </a> 1184 1185</li><li class="m-0"> 1186 1187 <a href="/pages/donations" 1188 1189 class="block mb-4 font-medium tracking-normal text-black text-p2 font-base">Donate 1190 </a> 1191 1192</li></ul></div> 1193 </div> 1194 1195 </div> 1196 </li></ul> 1197 </nav> 1198 <div class="absolute flex flex-row items-center justify-end gap-4 right-4 sm:right-8 md:right-10 lg:relative lg:inset-0 lg:gap-[13px] header-reserve__icons"> 1199 <a href="https://twoblindbrothers.com/" class="hidden hover:bg-yellow-30 lg:flex justify-center items-center gap-[10px] w-fit mr-[11px] px-6 py-[11px] font-medium text-black border border-yellow bg-yellow text-p2 tracking-normal font-base rounded-[30px]">
1200 <span class="block w-5 h-auto"> 1201 1202<svg xmlns="http://www.w3.org/2000/svg" width="21" height="10" viewBox="0 0 21 10" fill="none"> 1203 <path d="M17.9695 0.332764C17.2599 1.69214 16.1953 2.83385 14.8888 3.63653C13.5823 4.43922 12.0826 4.87288 10.5493 4.89141C9.01158 4.91175 7.49732 4.51284 6.16917 3.73751C4.84102 2.96217 3.74915 1.8397 3.0108 0.490639" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1204 <path d="M2.8924 3.03638L0.30719 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1205 <path d="M5.35921 5.26636L3.54364 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1206 <path d="M8.81272 6.4502L8.27989 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1207 <path d="M12.5425 6.4502L13.0556 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1208 <path d="M15.6606 5.26636L17.4761 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1209 <path d="M18.0879 3.03638L20.6928 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1210 </svg></span> 1211 <span>Shop Blind</span> 1212 </a> 1213 <a class="hidden lg:block" aria-controls="searchFormDesktop" href="javascript:void(0)" aria-expanded="false" data-btn-search-desktop> 1214 <span class="w-5 h-auto"> 1215 1216<svg xmlns="http://www.w3.org/2000/svg" width="21" height="22" viewBox="0 0 21 22" fill="none"> 1217 <circle cx="9.47607" cy="10.3987" r="5.95059" transform="rotate(-45 9.47607 10.3987)" stroke="black" stroke-width="1.5"/> 1218 <path d="M14.0458 14.9692L19.7778 20.7013" stroke="black" stroke-width="1.5"/> 1219 </svg></span> 1220 </a> 1221 <status-saved-link 1222 class="block w-[22px] h-5 indent-0.5 header-reserve__icons-wishlist status-save-link hidden" 1223 aria-label="View saved items" 1224 style="--indicator-position-vertical: -7%; --indicator-position-horizontal: 120%;" 1225 ></status-saved-link> 1226 <a href="/account" class="hidden lg:block"> 1227 <span class="block w-5 h-auto"> 1228 1229<svg class="w-full h-full" xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16" fill="none"> 1230 <circle cx="6.94263" cy="5.36182" r="2.76355" transform="rotate(-45 6.94263 5.36182)" stroke="black"/> 1231 <path d="M12.511 15.5455C12.511 12.4701 10.0179 9.97705 6.94251 9.97705C3.86712 9.97705 1.37402 12.4701 1.37402 15.5455" stroke="black"/> 1232 </svg></span> 1233 </a> 1234 <a onclick="return false" href="/cart" class="w-5 h-5 relative js-drawer-open-right header-reserve__icons-cart" aria-controls="CartDrawer" aria-expanded="false"> 1235 1236 1237<svg class="w-full h-full" fill="none" viewBox="0 0 20 20"> 1238 <path fill="#000" d="M6.354 19.945c-.495 0-.916-.177-1.265-.529a1.74 1.74 0 0 1-.522-1.269c0-.494.176-.916.528-1.264a1.74 1.74 0 0 1 1.27-.523c.494 0 .915.176 1.263.528.349.352.523.775.523 1.27 0 .494-.176.915-.528 1.264a1.74 1.74 0 0 1-1.27.523Zm9.957 0c-.495 0-.916-.177-1.265-.529a1.74 1.74 0 0 1-.522-1.269c0-.494.176-.916.528-1.264a1.74 1.74 0 0 1 1.27-.523c.493 0 .915.176 1.263.528.349.352.523.775.523 1.27 0 .494-.176.915-.528 1.264a1.74 1.74 0 0 1-1.27.523ZM5.065 3.515l2.738 5.676h7.169l3.111-5.675H5.065Zm-.747-1.493H18.98c.381 0 .671.174.87.523a.99.99 0 0 1 0 1.045l-3.36 6.05c-.182.314-.42.567-.71.758a1.715 1.715 0 0 1-.958.287H7.28l-1.394 2.588h12.222v1.494H6.11c-.697 0-1.199-.232-1.506-.697-.307-.465-.303-.987.012-1.568L6.21 9.564 2.426 1.55H.484V.056h2.913l.92 1.966Z"/> 1239 </svg> 1240 <span class="cart__item-count absolute left-auto -right-[15px] top-[2px] font-bold text-white bg-yellow text-black p3 flex justify-center items-center w-5 h-5 rounded-full js-item-count hidden">0</span> 1241 </a> 1242 1243 </div> 1244 </div> 1245 <nav class="fixed none left-[-100%] w-full h-full z-[100] bg-white transition-[left] duration-300 ease-in-out md:max-w-[396px] [.is-active_&]:left-0 lg:absolute lg:h-auto lg:bg-transparent lg:max-w-none lg:left-0 lg:right-0 lg:hidden lg:transition-none [&.is-active]:lg:block" 1246 aria-hidden 1247 aria-modal="true" 1248 aria-labelledby="menu-overlay-title" 1249 role="dialog" 1250 aria-hidden="true" 1251 data-search-form-desktop 1252 > 1253 <predictive-search> 1254 <form 1255 action="/search" 1256 method="get" 1257 role="search" 1258 class="predictive-search " 1259 id="searchForm" 1260 1261 > 1262 <div class="predictive-search__wrapper"> 1263 <div class="predictive-search__inner"> 1264 <div class="flex items-center"> 1265 <button type="submit" class="predictive-search__submit" aria-label="Search" title="Search"> 1266 1267 1268<svg xmlns="http://www.w3.org/2000/svg" width="21" height="22" viewBox="0 0 21 22" fill="none"> 1269 <circle cx="9.47607" cy="10.3987" r="5.95059" transform="rotate(-45 9.47607 10.3987)" stroke="black" stroke-width="1.5"/> 1270 <path d="M14.0458 14.9692L19.7778 20.7013" stroke="black" stroke-width="1.5"/> 1271 </svg> 1272 </button> 1273 <label for="formSearchField" class="hidden-label hidden">Search for keywords, style, etcâ¦</label> 1274 <input 1275 class="predictive-search__input" 1276 placeholder="Search for keywords, style, etcâ¦" 1277 id="formSearchField" 1278 type="search" 1279 name="q" 1280 value="" 1281 role="combobox" 1282 aria-expanded="false" 1283 aria-owns="predictive-search-results" 1284 aria-controls="predictive-search-results" 1285 aria-haspopup="listbox"
1286 aria-autocomplete="list" 1287 aria-label="Search for keywords, style, etcâ¦" 1288 onkeydown="return event.key != 'Enter'" 1289 /> 1290 <input name="options[prefix]" type="hidden" value="last"> 1291 <button type="button" class="predictive-search__close" aria-label="Close Search" title="Close Search" data-btn-close-search> 1292 1293 1294<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 1295 <path d="M2.66 1.34 2 .68.68 2l.66.66 1.32-1.32zm18.68 21.32.66.66L23.32 22l-.66-.66-1.32 1.32zm1.32-20 .66-.66L22 .68l-.66.66 1.32 1.32zM1.34 21.34.68 22 2 23.32l.66-.66-1.32-1.32zm0-18.68 10 10 1.32-1.32-10-10-1.32 1.32zm11.32 10 10-10-1.32-1.32-10 10 1.32 1.32zm-1.32-1.32-10 10 1.32 1.32 10-10-1.32-1.32zm0 1.32 10 10 1.32-1.32-10-10-1.32 1.32z" fill="currentColor"/> 1296 </svg> 1297 </button> 1298 </div> 1299 <div id="predictive-search" class="hidden [.predictive-search.is-open_&]:block" tabindex="-1"></div> 1300 </div> 1301 </div> 1302 </form> 1303</predictive-search> 1304 1305 <div class="js-mobile-nav-container [&.open]:overflow-hidden overflow-x-hidden relative h-[calc(100%-165px)] px-4 overflow-auto sm:h-[calc(100%-120px)] sm:px-8 md:h-[calc(100%-150px)] md:px-10 lg:hidden"> 1306 <ul class="flex flex-col gap-6 pt-8 m-0"> 1307 1308<li class="m-0"> 1309 <div> 1310 <div class="flex flex-row items-center gap-4 cursor-pointer"> 1311 1312<a class="font-normal text-black text-h2 font-base tracking-normal" href="/pages/thereserve">Apparel </a><span class="block w-[5px] h-[11px]" data-btn-submenu> 1313 1314<svg class="w-full h-full" fill="none" viewBox="0 0 7 13"> 1315 <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/> 1316 </svg></span> 1317 </div><div class="absolute right-[-100%] top-0 w-full h-auto px-4 pt-[18px] pb-5 bg-white transition-[right] duration-300 ease-in-out sm:px-8 md:px-10 [&.is-active]:right-0 [&.is-active]:h-full [&.is-active]:overflow-y-auto" data-submenu-0> 1318 <div class="flex flex-row items-center gap-[9px] mb-[33px] cursor-pointer" data-btn-back-menu> 1319 <span class="block w-[10px] h-[10px]"> 1320 1321<svg class="w-full h-full" fill="none" viewBox="0 0 12 12"> 1322 <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/> 1323 </svg></span> 1324 <p class="font-medium tracking-normal text-black font-base text-label">Back</p> 1325 </div> 1326 <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0"> 1327 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="javascript:void(0)">Women's</a><ul class="m-0"><li class="m-0"> 1328 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens">Shop All</a> 1329 </li><li class="m-0"> 1330 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-graphic-tees">Graphic Tees</a> 1331 </li><li class="m-0"> 1332 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-long-sleeve-henley">Long Sleeve Tops</a> 1333 </li><li class="m-0"> 1334 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-short-sleeve-relaxed-fit-henley">Short Sleeve Tops</a> 1335 </li><li class="m-0"> 1336 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-bottoms">Bottoms</a> 1337 </li><li class="m-0"> 1338 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/womens-sale">Sale</a> 1339 </li></ul></li><li class="m-0"> 1340 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="javascript:void(0)">Men's</a><ul class="m-0"><li class="m-0"> 1341 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens">Shop All</a> 1342 </li><li class="m-0"> 1343 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-graphic-tees">Graphic Tees</a> 1344 </li><li class="m-0"> 1345 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-long-sleeve-henley">Long Sleeve Tops</a> 1346 </li><li class="m-0"> 1347 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-short-sleeve-henley">Short Sleeve Tops</a> 1348 </li><li class="m-0"> 1349 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-bottoms-1">Bottoms</a> 1350 </li><li class="m-0"> 1351 <a class="font-normal tracking-normal text-p1 font-base text-grey-400" href="/collections/mens-sale">Sale</a> 1352 </li></ul></li><li class="m-0"> 1353 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/collections/kids">Kid's</a></li></ul></div> 1354 1355</div> 1356 </li><li class="m-0"> 1357 <div> 1358 <div class="flex flex-row items-center gap-4 cursor-pointer"> 1359 1360<a class="font-normal text-black text-h2 font-base tracking-normal" href="/collections/gifts">Accessories</a><span class="block w-[5px] h-[11px]" data-btn-submenu> 1361 1362<svg class="w-full h-full" fill="none" viewBox="0 0 7 13"> 1363 <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/> 1364 </svg></span> 1365 </div><div class="absolute right-[-100%] top-0 w-full h-auto px-4 pt-[18px] pb-5 bg-white transition-[right] duration-300 ease-in-out sm:px-8 md:px-10 [&.is-active]:right-0 [&.is-active]:h-full [&.is-active]:overflow-y-auto" data-submenu-1> 1366 <div class="flex flex-row items-center gap-[9px] mb-[33px] curs
1366or-pointer" data-btn-back-menu> 1367 <span class="block w-[10px] h-[10px]"> 1368 1369<svg class="w-full h-full" fill="none" viewBox="0 0 12 12"> 1370 <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/> 1371 </svg></span> 1372 <p class="font-medium tracking-normal text-black font-base text-label">Back</p> 1373 </div> 1374 <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0"> 1375 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/collections/gifts">Shop All</a></li><li class="m-0"> 1376 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/collections/the-2bb-sock-collection">Socks</a></li><li class="m-0"> 1377 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/pages/sunglasses">Sunglasses</a></li><li class="m-0"> 1378 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/collections/guide-dog-collection">Guide Dogs</a></li></ul></div> 1379 1380</div> 1381 </li><li class="m-0"> 1382 <div> 1383 <div class="flex flex-row items-center gap-4 cursor-pointer"> 1384 1385<a class="font-normal text-black text-h2 font-base tracking-normal" href="/pages/no-barriers-x-2bb-collab">Collaborations</a><span class="block w-[5px] h-[11px]" data-btn-submenu> 1386 1387<svg class="w-full h-full" fill="none" viewBox="0 0 7 13"> 1388 <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/> 1389 </svg></span> 1390 </div><div class="absolute right-[-100%] top-0 w-full h-auto px-4 pt-[18px] pb-5 bg-white transition-[right] duration-300 ease-in-out sm:px-8 md:px-10 [&.is-active]:right-0 [&.is-active]:h-full [&.is-active]:overflow-y-auto" data-submenu-2> 1391 <div class="flex flex-row items-center gap-[9px] mb-[33px] cursor-pointer" data-btn-back-menu> 1392 <span class="block w-[10px] h-[10px]"> 1393 1394<svg class="w-full h-full" fill="none" viewBox="0 0 12 12"> 1395 <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/> 1396 </svg></span> 1397 <p class="font-medium tracking-normal text-black font-base text-label">Back</p> 1398 </div> 1399 <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0"> 1400 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/pages/no-barriers-x-2bb-collab">No Barriers Hiking Socks </a></li><li class="m-0"> 1401 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/pages/dogs-inc-shop-blind">Dogs Inc Shop Blind </a></li></ul></div> 1402 1403</div> 1404 </li><li class="m-0"> 1405 <div> 1406 <div class="flex flex-row items-center gap-4 cursor-pointer"> 1407 1408<a class="font-normal text-black text-h2 font-base tracking-normal" href="/pages/gift-tag">LoveTags<span class="love-tag-icon"> 1409 1410<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="26" zoomAndPan="magnify" viewBox="0 0 75 74.999997" height="26" preserveAspectRatio="xMidYMid meet" version="1.0"><defs><clipPath id="4bd791745a"><path d="M 4 5 L 62 5 L 62 70 L 4 70 Z M 4 5" clip-rule="nonzero"/></clipPath><clipPath id="0b881fa5f7"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="5e6f85307e"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="7cf9d2691d"><path d="M 30.324219 0 L 66.953125 18.972656 L 40.738281 69.585938 L 4.109375 50.617188 Z M 30.324219 0" clip-rule="nonzero"/></clipPath><clipPath id="771b14f9a0"><path d="M 23 24 L 49 24 L 49 48 L 23 48 Z M 23 24" clip-rule="nonzero"/></clipPath><clipPath id="0d9462095f"><path d="M 28.203125 21.335938 L 50.808594 33.777344 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.203125 21.335938" clip-rule="nonzero"/></clipPath><clipPath id="5b02e7e0d8"><path d="M 27.320312 25.0625 C 23.828125 27.070312 23.503906 30.714844 24.269531 33.164062 L 28.742188 47.464844 L 43 43.511719 C 45.429688 42.667969 46.984375 41.207031 47.753906 39.050781 C 48.816406 36.070312 47.726562 32.703125 45.109375 30.867188 C 43.5 29.742188 41.582031 29.316406 39.703125 29.679688 C 39.199219 29.777344 38.710938 29.925781 38.25 30.128906 C 38.148438 29.554688 37.972656 28.980469 37.726562 28.425781 C 36.863281 26.484375 35.222656 24.996094 33.21875 24.347656 C 31.320312 23.734375 29.171875 23.996094 27.320312 25.0625 Z M 27.320312 25.0625" clip-rule="nonzero"/></clipPath></defs><g clip-path="url(#4bd791745a)"><g clip-path="url(#0b881fa5f7)"><g clip-path="url(#5e6f85307e)"><g clip-path="url(#7cf9d2691d)"><path fill="#000000" d="M 40.742188 69.582031 L 4.113281 50.609375 L 24.753906 10.753906 L 41.050781 5.5625 L 56.222656 13.421875 L 61.382812 29.726562 Z M 5.203125 50.261719 L 40.394531 68.492188 L 60.511719 29.652344 L 55.550781 13.988281 L 40.972656 6.4375 L 25.320312 11.425781 Z M 44.753906 16.988281 C 44.449219 16.832031 44.183594 16.621094 43.964844 16.359375 C 43.742188 16.09375 43.578125 15.800781 43.476562 15.472656 C 43.371094 15.144531 43.335938 14.808594 43.363281 14.464844 C 43.394531 14.121094 43.488281 13.796875 43.644531 13.492188 C 43.804688 13.1875 44.015625 12.921875 44.277344 12.699219 C 44.539062 12.476562 44.835938 12.316406 45.164062 12.210938 C 45.492188 12.105469 45.828125 12.066406 46.167969 12.097656 C 46.511719 12.125 46.835938 12.21875 47.140625 12.378906 C 47.445312 12.535156 47.710938 12.746094 47.929688 13.011719 C 48.152344 13.273438 48.316406 13.570312 48.417969 13.894531 C 48.523438 14.222656 48.558594 14.5
141058594 48.53125 14.902344 C 48.5 15.246094 48.40625 15.570312 48.25 15.875 C 48.089844 16.179688 47.878906 16.445312 47.617188 16.667969 C 47.351562 16.886719 47.058594 17.050781 46.730469 17.15625 C 46.402344 17.261719 46.066406 17.296875 45.722656 17.269531 C 45.382812 17.238281 45.058594 17.148438 44.753906 16.988281 Z M 46.769531 13.097656 C 46.558594 12.988281 46.335938 12.925781 46.101562 12.90625 C 45.863281 12.882812 45.632812 12.910156 45.410156 12.980469 C 45.183594 13.054688 44.980469 13.167969 44.796875 13.320312 C 44.617188 13.472656 44.472656 13.652344 44.363281 13.863281 C 44.253906 14.074219 44.191406 14.296875 44.167969 14.53125 C 44.148438 14.769531 44.175781 15 44.246094 15.226562 C 44.316406 15.449219 44.429688 15.652344 44.582031 15.835938 C 44.734375 16.015625 44.914062 16.160156 45.125 16.269531 C 45.335938 16.378906 45.558594 16.441406 45.792969 16.460938 C 46.03125 16.484375 46.261719 16.457031 46.484375 16.386719 C 46.710938 16.3125 46.914062 16.199219 47.09375 16.046875 C 47.277344 15.894531 47.421875 15.714844 47.53125 15.503906 C 47.640625 15.292969 47.703125 15.070312 47.722656 14.835938 C 47.742188 14.597656 47.71875 14.367188 47.648438 14.140625 C 47.574219 13.917969 47.464844 13.714844 47.3125 13.53125 C 47.160156 13.351562 46.976562 13.207031 46.769531 13.097656 Z M 46.769531 13.097656" fill-opacity="1" fill-rule="nonzero"/></g></g></g></g><g clip-path="url(#771b14f9a0)"><g clip-path="url(#0d9462095f)"><g clip-path="url(#5b02e7e0d8)"><path fill="#ff3131" d="M 28.160156 21.414062 L 50.765625 33.855469 L 39.898438 53.605469 L 17.292969 41.167969 Z M 28.160156 21.414062" fill-opacity="1" fill-rule="nonzero"/></g></g></g></svg></span> 1411 </a> 1412 </div></div> 1413 </li><li class="m-0"> 1414 <div> 1415 <div class="flex flex-row items-center gap-4 cursor-pointer"> 1416 1417<a class="font-normal text-black text-h2 font-base tracking-normal" href="/pages/about-us">About Us </a><span class="block w-[5px] h-[11px]" data-btn-submenu> 1418 1419<svg class="w-full h-full" fill="none" viewBox="0 0 7 13"> 1420 <path stroke="#000" stroke-width="1.5" d="M1 11.884 5.786 6.35 1 1.116"/> 1421 </svg></span> 1422 </div><div class="absolute right-[-100%] top-0 w-full h-auto px-4 pt-[18px] pb-5 bg-white transition-[right] duration-300 ease-in-out sm:px-8 md:px-10 [&.is-active]:right-0 [&.is-active]:h-full [&.is-active]:overflow-y-auto" data-submenu-3> 1423 <div class="flex flex-row items-center gap-[9px] mb-[33px] cursor-pointer" data-btn-back-menu> 1424 <span class="block w-[10px] h-[10px]"> 1425 1426<svg class="w-full h-full" fill="none" viewBox="0 0 12 12"> 1427 <path stroke="#000" d="M5.786 11.384 1 5.85 5.786.616M1.587 5.898h9.863"/> 1428 </svg></span> 1429 <p class="font-medium tracking-normal text-black font-base text-label">Back</p> 1430 </div> 1431 <ul class="grid grid-cols-1 m-0 gap-x-4 gap-y-8"><li class="m-0"> 1432 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/pages/about-us">Our Mission </a></li><li class="m-0"> 1433 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="https://www.twoblindbrothers.org">Programs</a></li><li class="m-0"> 1434 <a class="block mb-4 font-medium tracking-normal text-black text-label font-base !text-[15px]" href="/pages/donations">Donate</a></li></ul></div> 1435 1436</div> 1437 </li></ul> 1438 <ul class="flex flex-col gap-4 mt-8"></ul> 1439 <div class="flex flex-col gap-3 py-4 border-solid border-y border-grey-200"><p class="font-medium tracking-normal text-black font-base text-p2">Take the Shop Blind Challenge</p><p class="font-normal tracking-normal text-grey-400 font-base text-p2">Would you buy something you canât see? We promise youâll receive something youâll love â no tricks, just treats. And if itâs not perfect, you can return it, no questions asked. Trust us: every purchase supports the blind community directly through Two Blind Brothers, a 501c3 charity built around awareness, education, and connection.</p><a href="https://twoblindbrothers.com/" class="flex justify-center items-center gap-[10px] px-8 py-2 font-medium text-black bg-yellow text-p2 tracking-normal font-base rounded-[30px] md:py-[10px]">
1440 <span class="block w-5 h-auto"> 1441 1442<svg xmlns="http://www.w3.org/2000/svg" width="21" height="10" viewBox="0 0 21 10" fill="none"> 1443 <path d="M17.9695 0.332764C17.2599 1.69214 16.1953 2.83385 14.8888 3.63653C13.5823 4.43922 12.0826 4.87288 10.5493 4.89141C9.01158 4.91175 7.49732 4.51284 6.16917 3.73751C4.84102 2.96217 3.74915 1.8397 3.0108 0.490639" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1444 <path d="M2.8924 3.03638L0.30719 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1445 <path d="M5.35921 5.26636L3.54364 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1446 <path d="M8.81272 6.4502L8.27989 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1447 <path d="M12.5425 6.4502L13.0556 9.6669" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1448 <path d="M15.6606 5.26636L17.4761 7.96997" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1449 <path d="M18.0879 3.03638L20.6928 5.00982" stroke="black" stroke-width="0.98672" stroke-miterlimit="10"/> 1450 </svg></span> 1451 <span>Shop Blind</span> 1452 </a> 1453 </div> 1454 <ul class="flex flex-wrap justify-between items-center gap-4 mt-8 mb-6"> 1455 1456 <li class="m-0"> 1457 <a href="/account" class="flex flex-row items-center gap-2"> 1458 <span class="block w-4 h-4"> 1459 1460<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"> 1461 <circle cx="9.5" cy="5.5" r="3" fill="#F0D83D"/> 1462 <circle cx="3.36376" cy="3.36376" r="2.73876" transform="matrix(0.718673 -0.695349 0.718673 0.695349 2.99841 4.67773)" stroke="black" stroke-width="1.25"/> 1463 <path d="M13.6667 15C13.6667 11.8829 11.055 9.35596 7.83333 9.35596C4.61167 9.35596 2 11.8829 2 15" stroke="black" stroke-width="1.25"/> 1464 </svg></span> 1465 <span class="font-medium tracking-normal text-black text-label font-base"> 1466 1467 Account 1468 1469 </span> 1470 </a> 1471 </li> 1472 </ul><ul class="flex flex-row items-center justify-center gap-6 mt-6 mb-5"><li class="flex max-w-[26px]"> 1473 <a href="https://instagram.com/twoblindbrothers/" target="_blank" rel="noopener" title="Two Blind Brothers on Instagram"> 1474 1475<svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewBox="0 0 24 25" fill="none"> 1476 <path fill-rule="evenodd" clip-rule="evenodd" d="M23.2532 12.3219C23.2532 10.0107 23.228 8.41107 23.1775 7.52292C23.0766 5.42366 22.4509 3.79878 21.3003 2.64822C20.1498 1.49766 18.5249 0.871933 16.4256 0.771007C15.5375 0.720544 13.9378 0.695312 11.6266 0.695312C9.31541 0.695312 7.71575 0.720544 6.82761 0.771007C4.72835 0.871933 3.10346 1.49766 1.95291 2.64822C0.802351 3.79878 0.17662 5.42366 0.0756941 7.52292C0.0252311 8.41107 0 10.0107 0 12.3219C0 14.6331 0.0252311 16.2328 0.0756941 17.1209C0.17662 19.2202 0.802351 20.8451 1.95291 21.9956C3.10346 23.1462 4.72835 23.7719 6.82761 23.8728C7.71575 23.9233 9.31541 23.9485 11.6266 23.9485C13.9378 23.9485 15.5375 23.9233 16.4256 23.8728C18.5249 23.7719 20.1498 23.1462 21.3003 21.9956C22.4509 20.8451 23.0766 19.2202 23.1775 17.1209C23.228 16.2328 23.2532 14.6331 23.2532 12.3219ZM12.7772 2.78447H11.6266C11.556 2.78447 11.1699 2.78195 10.4685 2.7769C9.76706 2.77185 9.23468 2.77185 8.87135 2.7769C8.50801 2.78195 8.02105 2.79708 7.41045 2.82232C6.79985 2.84755 6.28009 2.89801 5.85115 2.9737C5.42222 3.0494 5.06141 3.14275 4.76873 3.25377C4.2641 3.45562 3.82003 3.7483 3.43651 4.13182C3.05299 4.51534 2.76031 4.95941 2.55846 5.46404C2.44744 5.75672 2.35409 6.11753 2.27839 6.54646C2.2027 6.9754 2.15224 7.49516 2.127 8.10576C2.10177 8.71636 2.08663 9.20332 2.08159 9.56666C2.07654 9.92999 2.07654 10.4624 2.08159 11.1638C2.08663 11.8652 2.08916 12.2513 2.08916 12.3219C2.08916 12.3926 2.08663 12.7786 2.08159 13.48C2.07654 14.1815 2.07654 14.7139 2.08159 15.0772C2.08663 15.4405 2.10177 15.9275 2.127 16.5381C2.15224 17.1487 2.2027 17.6684 2.27839 18.0974C2.35409 18.5263 2.44744 18.8871 2.55846 19.1798C2.76031 19.6844 3.05299 20.1285 3.43651 20.512C3.82003 20.8955 4.2641 21.1882 4.76873 21.3901C5.06141 21.5011 5.42222 21.5944 5.85115 21.6701C6.28009 21.7458 6.79985 21.7963 7.41045 21.8215C8.02105 21.8468 8.50801 21.8619 8.87135 21.8669C9.23468 21.872 9.76706 21.872 10.4685 21.8669C11.1699 21.8619 11.556 21.8594 11.6266 21.8594C11.6973 21.8594 12.0833 21.8619 12.7847 21.8669C13.4862 21.872 14.0185 21.872 14.3819 21.8669C14.7452 21.8619 15.2322 21.8468 15.8428 21.8215C16.4534 21.7963 16.9731 21.7458 17.4021 21.6701C17.831 21.5944 18.1918 21.5011 18.4845 21.3901C18.9891 21.1882 19.4332 20.8955 19.8167 20.512C20.2002 20.1285 20.4929 19.6844 20.6948 19.1798C20.8058 18.8871 20.8991 18.5263 20.9748 18.0974C21.0505 17.6684 21.101 17.1487 21.1262 16.5381C21.1514 15.927
14765 21.1666 15.4405 21.1716 15.0772C21.1767 14.7139 21.1767 14.1815 21.1716 13.48C21.1666 12.7786 21.1641 12.3926 21.1641 12.3219C21.1641 12.2513 21.1666 11.8652 21.1716 11.1638C21.1767 10.4624 21.1767 9.92999 21.1716 9.56666C21.1666 9.20332 21.1514 8.71636 21.1262 8.10576C21.101 7.49516 21.0505 6.9754 20.9748 6.54646C20.8991 6.11753 20.8058 5.75672 20.6948 5.46404C20.4929 4.95941 20.2002 4.51534 19.8167 4.13182C19.4332 3.7483 18.9891 3.45562 18.4845 3.25377C18.1918 3.14275 17.831 3.0494 17.4021 2.9737C16.9731 2.89801 16.4534 2.84755 15.8428 2.82232C15.2322 2.79708 14.7452 2.78195 14.3819 2.7769C14.0185 2.77185 13.4836 2.77438 12.7772 2.78447ZM19.2263 6.11501C19.2263 5.73149 19.09 5.40349 18.8175 5.13099C18.545 4.85849 18.217 4.72224 17.8335 4.72224C17.45 4.72224 17.122 4.85849 16.8495 5.13099C16.577 5.40349 16.4408 5.73149 16.4408 6.11501C16.4408 6.49853 16.577 6.82653 16.8495 7.09903C17.122 7.37153 17.45 7.50778 17.8335 7.50778C18.217 7.50778 18.545 7.37153 18.8175 7.09903C19.09 6.82653 19.2263 6.49853 19.2263 6.11501ZM15.8503 8.09819C17.011 9.25884 17.5913 10.6667 17.5913 12.3219C17.5913 13.9771 17.011 15.385 15.8503 16.5457C14.6897 17.7063 13.2818 18.2866 11.6266 18.2866C9.97142 18.2866 8.56353 17.7063 7.40288 16.5457C6.24223 15.385 5.66192 13.9771 5.66192 12.3219C5.66192 10.6667 6.24223 9.25884 7.40288 8.09819C8.56353 6.93754 9.97142 6.35723 11.6266 6.35723C13.2818 6.35723 14.6897 6.93754 15.8503 8.09819ZM14.3667 15.062C15.1237 14.3051 15.5021 13.3917 15.5021 12.3219C15.5021 11.2521 15.1237 10.3387 14.3
1476667 9.5818C13.6098 8.82485 12.6964 8.44639 11.6266 8.44639C10.5568 8.44639 9.64343 8.82485 8.88649 9.5818C8.12954 10.3387 7.75107 11.2521 7.75107 12.3219C7.75107 13.3917 8.12954 14.3051 8.88649 15.062C9.64343 15.819 10.5568 16.1975 11.6266 16.1975C12.6964 16.1975 13.6098 15.819 14.3667 15.062Z" fill="black"/> 1477 </svg></a> 1478 </li><li class="flex max-w-[26px]"> 1479 <a href="https://twitter.com/twoblindbros/" target="_blank" rel="noopener" title="Two Blind Brothers on Twitter"> 1480 1481<svg class="w-full h-auto" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 1482 <path d="m2.367 3 7.096 10.14L2.74 21h2.64l5.265-6.17L14.96 21h6.91L14.45 10.375 20.74 3h-2.6l-4.869 5.688L9.3 3H2.367zm3.84 2h2.049l9.777 14h-2.031L6.207 5z"/> 1483 </svg></a> 1484 </li><li class="flex max-w-[26px]"> 1485 <a href="https://www.facebook.com/twoblindbros/" target="_blank" rel="noopener" title="Two Blind Brothers on Facebook"> 1486 1487<svg width="26" height="22" viewbox="0 0 37 24" fill="white" xmlns="http://www.w3.org/2000/svg"> 1488 <g clip-path="url(#clip0_133_73)"> 1489 <path d="M3.99645 15.8325C3.99645 17.2147 4.30655 18.2714 4.71185 18.9123C4.92784 19.2771 5.23887 19.5796 5.61333 19.789C5.9878 19.9985 6.41237 20.1074 6.84389 20.1047C7.88611 20.1047 8.83955 19.8534 10.6769 17.3705C12.1489 15.3814 13.8834 12.5956 15.0517 10.8364L17.028 7.87099C18.4009 5.81152 19.9874 3.52209 21.8119 1.96524C23.2981 0.703665 24.9026 0 26.5174 0C29.2284 0 31.8108 1.53424 33.7871 4.41173C35.9501 7.56314 37.0039 11.5326 37.0039 15.6289C37.0039 18.0641 36.5123 19.8534 35.676 21.267C34.8692 22.6341 33.2892 24 30.6399 24V20.1047C32.9083 20.1047 33.4706 18.0691 33.4706 15.7395C33.4706 12.4197 32.678 8.7355 30.932 6.10304C29.6929 4.23581 28.0871 3.09487 26.3205 3.09487C24.4098 3.09487 22.8722 4.5022 21.1441 7.01152C20.2255 8.34471 19.2823 9.96942 18.2234 11.8027L17.0576 13.8132C14.7159 17.8681 14.1227 18.7916 12.9518 20.3158C10.9034 22.9948 9.15093 24 6.84389 24C4.10711 24 2.37651 22.8427 1.31114 21.0986C0.429754 19.6775 0 17.8128 0 15.688L3.99645 15.8325Z" fill="black"></path> 1490 <path d="M3.15112 4.68691C4.98337 1.9288 7.62751 0 10.6602 0C12.4166 0 14.1626 0.502618 15.9858 1.96147C17.9802 3.55099 20.1032 6.16838 22.7577 10.4821L23.7085 12.0302C26.004 15.7646 27.3113 17.6846 28.0743 18.5918C29.0573 19.7554 29.747 20.0997 30.6399 20.0997C32.9084 20.0997 33.4706 18.0641 33.4706 15.7344L36.9962 15.6264C36.9962 18.0616 36.5046 19.8509 35.6683 21.2645C34.8693 22.6341 33.2892 24 30.6399 24C28.993 24 27.5339 23.6507 25.9204 22.1642C24.68 21.0232 23.2299 18.9964 22.1143 17.1744L18.796 11.7613C17.131 9.04461 15.6037 7.01906 14.7197 6.10681C13.7676 5.11539 12.5465 3.92419 10.5959 3.92419C9.01713 3.92419 7.6764 5.00607 6.55441 6.66094L3.15112 4.68691Z" fill="black"></path> 1491 <path d="M10.5959 3.92419C9.01711 3.92419 7.67638 5.00607 6.55439 6.66094C4.9679 8.99937 3.99645 12.4825 3.99645 15.8325C3.99645 17.2147 4.30655 18.2714 4.71185 18.9123L1.3047 21.0986C0.429754 19.6775 0 17.8128 0 15.688C0 11.8241 1.08596 7.79686 3.1511 4.68691C4.98334 1.9288 7.62749 0 10.6602 0L10.5959 3.92419Z" fill="black"></path> 1492 </g> 1493 <defs> 1494 <lineargradient id="paint0_linear_133_73" x1="8.02124" y1="11.378" x2="33.4945" y2="12.6954" gradientunits="userSpaceOnUse"> 1495 <stop></stop> 1496 <stop offset="0.4" stop-opacity="0.88"></stop> 1497 <stop offset="0.83" stop-opacity="0.83"></stop> 1498 <stop offset="1"></stop> 1499 </lineargradient> 1500 <lineargradient id="paint1_linear_133_73" x1="5.32946" y1="17.466" x2="5.32946" y2="8.29319" gradientunits="userSpaceOnUse"> 1501 <stop stop-opacity="0.99"></stop> 1502 <stop offset="1"></stop> 1503 </lineargradient> 1504 <clippath id="clip0_133_73"> 1505 <rect width="37" height="24" fill="white"></rect> 1506 </clippath> 1507 </defs> 1508 </svg></a> 1509 </li></ul> 1510</div> 1511 </nav> 1512 </header-reserve> 1513 1514
1515<script> 1516 window.addEventListener("DOMContentLoaded", () => { 1517 const aboutUsButton = document.getElementById('aboutUs') 1518 const headerReserve = document.getElementById('headerReserve') 1519 const headerReserveButton = document.getElementById('headerReserveButton') 1520 1521 if (aboutUsButton) { 1522 aboutUsButton.addEventListener('click', () => { 1523 headerReserve.classList.remove("is-active"); 1524 headerReserve.setAttribute('aria-expanded', false); 1525 headerReserveButton.classList.remove("is-active"); 1526 document.documentElement.classList.remove('mega-menu-active'); 1527 }) 1528 } 1529 }); 1530</script>
1530 1531 1532 1533</div> 1534 <main class="main-content" role="main" id="main-content"> 1535 1536 <div id="twobbloader" class="loading"> 1537 <div class="blobs"> 1538 <div class="blob blob-0"></div> 1539 <div class="blob blob-1"></div> 1540 <div class="blob blob-2"></div> 1541 <div class="blob blob-3"></div> 1542 <div class="blob blob-4"></div> 1543 <div class="blob blob-5"></div> 1544 </div> 1545</div> 1546
1547<script type="text/javascript"> 1548 document.addEventListener('DOMContentLoaded', () => { 1549 if ( $('#braille-translator').length ) { 1550 $("#twobbloader").fadeOut(); 1551 } else { 1552 $("#twobbloader").fadeOut(); 1553 } 1554 }) 1555</script>
1555 1556 1557 1558 <!-- /templates/cart.liquid --> 1559 1560
1561<script src="https://cdn.tailwindcss.com/3.3.3"></script>
vendor: 1 bytes, line 1561
1561
1562<script data-cfasync="false" type="text/javascript"> 1563 if (typeof Shopify === "undefined") var Shopify = {}; 1564 Shopify.money_format = "${{amount}}"; 1565 Shopify.cart = {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"USD","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}; 1566 1567 function updateQuantity(button, change) { 1568 const container = button.closest("div"); 1569 // Replacement = 1 pair max: block qty increase. 1570 const stepper = button.closest("[data-qty-stepper]"); 1571 if (change > 0 && stepper && stepper.getAttribute("data-replacement") === "true") { 1572 return; 1573 } 1574 const input = container.querySelector("input[name='updates[]']"); 1575 let value = parseInt(input.value) || 1; 1576 value = Math.max(1, value + change); 1577 input.value = value; 1578 1579 const form = button.closest("form"); 1580 if (form) { 1581 form.submit(); 1582 } 1583 } 1584 1585 function removeCartItem(button) { 1586 const itemRow = button.closest(".grid"); 1587 const input = itemRow.querySelector("input[name='updates[]']"); 1588 let itemKey = input ? input.getAttribute("data-id") : null; 1589 1590 if (!itemKey) { 1591 itemKey = itemRow.getAttribute("data-key"); 1592 } 1593 1594 const cartObj = (typeof window !== "undefined" && window.cart) ? window.cart : (typeof cart !== "undefined" ? cart : null); 1595 1596 if (itemKey && cartObj && typeof cartObj.updateItem === "function") { 1597 cartObj.updateItem(itemKey, 0).then(function() { 1598 window.location.reload(); 1599 }).catch(function() { 1600 if (input) { 1601 input.value = 0; 1602 const form = button.closest("form"); 1603 if (form) { 1604 form.submit(); 1605 } 1606 } 1607 }); 1608 } else { 1609 if (input) { 1610 input.value = 0; 1611 const form = button.closest("form"); 1612 if (form) { 1613 form.submit(); 1614 } 1615 } 1616 } 1617 } 1618 1619 document.addEventListener('DOMContentLoaded', function () { 1620 var format = Shopify.money_format || "${{amount_no_decimals}}"; 1621 function reformatEl(el) { 1622 var cents = parseInt(el.getAttribute('data-original-cents'), 10); 1623 if (!isNaN(cents)) { 1624 if (Shopify && typeof Shopify.formatMoney === 'function') { 1625 el.textContent = Shopify.formatMoney(cents, format); 1626 } else if (typeof formatMoney === 'function') { 1627 el.textContent = formatMoney(cents, format); 1628 } else { 1629 el.textContent = (cents / 100).toFixed(2); 1630 } 1631 } 1632 } 1633 var priceEls = document.querySelectorAll('.auto-cart-item-line-price[data-original-cents], .auto-cart-original-total[data-original-cents]'); 1634 priceEls.forEach(function (el) { 1635 reformatEl(el); 1636 var observer = new MutationObserver(function () { reformatEl(el); }); 1637 observer.observe(el, { childList: true, characterData: true, subtree: true }); 1638 }); 1639 }); 1640</script>
1640 1641<div id="sca_fg_cart"> 1642 <div class="wrapper cart-wrapper"> 1643 1644 1645 <div class="cart-empty"> 1646 <h2 class="cart-empty-header">Shopping Cart</h2> 1647 <div class="cart-empty-description"> 1648 <p>Your cart is currently empty.</p> 1649 <p>Continue browsing <a href="/collections/all">here</a>.</p> 1650 </div> 1651 </div> 1652 1653 </div> 1654 <div id="cbb-also-bought-box"></div> 1655</div> 1656 1657<div id="shopify-section-cart-recommendations" class="shopify-section"> 1658 1659 1660</div> 1661 1662<div data-rebuy-id="114311"></div> 1663 1664 1665 1666 1667 <link href="//twoblindbrothers.com/cdn/shop/t/278/assets/left-side-buttons-25c6a995.css" rel="stylesheet" type="text/css" media="all" /> 1668 1669 1670 1671 1672
1672<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/left-side-buttons-f2532d56.js" type="module" crossorigin="anonymous"></script>
1672 1673 1674<div id="left-side-buttons__wrapper"> 1675 <!-- Toggle --> 1676 <button 1677 id="left-side-buttons__toggle" 1678 aria-controls="left-side-panel" 1679 aria-expanded="false" 1680 aria-label="Open accessibility menu" 1681 class="toggle-btn" 1682 > 1683 <span class="svg"> 1684 1685<svg width="469" height="447" viewBox="0 0 469 447" fill="none" xmlns="http://www.w3.org/2000/svg"> 1686 <path d="M398.854 334.516C437.141 334.516 468.474 303.188 468.474 264.901V69.6198C468.474 31.3334 437.141 0 398.854 0H234.237H69.6198C31.3229 0 0 31.3334 0 69.6198V264.901C0 303.188 31.3229 334.516 69.6198 334.516H243.01L373.839 446.297L398.854 334.516Z" fill="#100F0D"/> 1687 <path d="M233 212.969C255.474 212.969 273.76 194.578 273.76 171.974C273.76 149.37 255.474 130.979 233 130.979C210.521 130.979 192.239 149.37 192.239 171.974C192.239 194.578 210.521 212.969 233 212.969Z" fill="white"/> 1688 <path d="M133.859 213.969C156.333 213.969 174.62 195.578 174.62 172.974C174.62 150.37 156.333 131.979 133.859 131.979C111.38 131.979 93.0938 150.37 93.0938 172.974C93.0938 195.578 111.38 213.969 133.859 213.969Z" fill="white"/> 1689 <path d="M332.141 213.969C354.615 213.969 372.906 195.578 372.906 172.974C372.906 150.37 354.615 131.979 332.141 131.979C309.661 131.979 291.375 150.37 291.375 172.974C291.375 195.578 309.661 213.969 332.141 213.969Z" fill="white"/> 1690 </svg></span> 1691 </button> 1692 1693 <!-- Panel (hidden by default) --> 1694 <div 1695 id="left-side-panel" 1696 class="side-panel" 1697 role="dialog" 1698 aria-modal="true" 1699 aria-labelledby="left-side-buttons__toggle" 1700 > 1701 1702 <ul class="side-panel-list"> 1703 <li class="side-panel-item" style="--delay:.1s"> 1704 <button id="eyeball" class="left-side-button"> 1705 <span class="label">See How We See</span> 1706 1707 <span class="svg"> 1708 1709<svg class="[.active-blind-mission_&]:!pointer-events-none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 106.3 48.9"> 1710 <g class="[.active-blind-mission_&]:!pointer-events-none" id="Art"> 1711 <path class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" d="M91,1.2A43,43,0,0,1,53.4,24.3,42.9,42.9,0,0,1,15.2,2"/> 1712 <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="14.6" y1="14.9" x2="1.5" y2="24.9"/> 1713 <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="27.1" y1="26.2" x2="17.9" y2="39.9"/> 1714 <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="44.6" y1="32.2" x2="41.9" y2="48.5"/> 1715 <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="63.5" y1="32.2" x2="66.1" y2="48.5"/> 1716 <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="79.3" y1="26.2" x2="88.5" y2="39.9"/> 1717 <line class="cls-1 [.active-blind-mission_&]:!pointer-events-none" fill="none" stroke="#231f20" stroke-miterlimit="10" stroke-width="5px" x1="91.6" y1="14.9" x2="104.8" y2="24.9"/> 1718 </g> 1719 </svg></span> 1720 </button> 1721 </li> 1722 <li class="side-panel-item" style="--delay:.2s"> 1723 <button id="get-support-button" class="left-side-button" aria-label="Get help"> 1724 <span class="label">Chat Support</span> 1725 <span class="svg"> 1726 1727<svg width="469" height="447" viewBox="0 0 469 447" fill="none" xmlns="http://www.w3.org/2000/svg"> 1728 <path d="M398.854 334.516C437.141 334.516 468.474 303.188 468.474 264.901V69.6198C468.474 31.3334 437.141 0 398.854 0H234.237H69.6198C31.3229 0 0 31.3334 0 69.6198V264.901C0 303.188 31.3229 334.516 69.6198 334.516H243.01L373.839 446.297L398.854 334.516Z" fill="#100F0D"/> 1729 <path d="M233 212.969C255.474 212.969 273.76 194.578 273.76 171.974C273.76 149.37 255.474 130.979 233 130.979C210.521 130.979 192.239 149.37 192.239 171.974C192.239 194.578 210.521 212.969 233 212.969Z" fill="white"/> 1730 <path d="M133.859 213.969C156.333 213.969 174.62 195.578 174.62 172.974C1
173074.62 150.37 156.333 131.979 133.859 131.979C111.38 131.979 93.0938 150.37 93.0938 172.974C93.0938 195.578 111.38 213.969 133.859 213.969Z" fill="white"/> 1731 <path d="M332.141 213.969C354.615 213.969 372.906 195.578 372.906 172.974C372.906 150.37 354.615 131.979 332.141 131.979C309.661 131.979 291.375 150.37 291.375 172.974C291.375 195.578 309.661 213.969 332.141 213.969Z" fill="white"/> 1732 </svg></span> 1733 1734 </button> 1735 </li> 1736 </ul> 1737 </div> 1738</div> 1739 1740 </main> 1741 1742 <!-- begin site-footer --><div id="shopify-section-footer-reserve" class="shopify-section"><style> 1743 .footer-reserve__item-header { 1744 font-weight: 500; 1745 font-size: 20px; 1746 } 1747 1748 .footer-reserve__item--newsletter { 1749 display: flex; 1750 flex-direction: column; 1751 } 1752 1753 .newsletter-email { 1754 margin-top: 14px; 1755 } 1756 1757 .newsletter-email button { 1758 background: #F0D83D !important; 1759 } 1760</style> 1761 <footer class="footer-reserve bg-black text-white" role="contentinfo"> 1762 <div class="wrapper max-w-[1440px] px-[15px] pt-[32px] pb-[20px] mx-auto sm:px-[32px] sm:pt-[32px] md:px-[40px] md:pt-[40px] lg:px-[56px] lg:pt-[56px]"> 1763 <div class="footer-reserve__top flex flex-col-reverse sm:flex-row sm:justify-between gap-[80px]"> 1764 <div class="footer-reserve__item-links flex gap-[15px] sm:gap-[24px] md:gap-[48px] lg:gap-[61px]"> 1765 1766 <div class="footer-reserve__item w-1/2 sm:w-[165px] md:w-[180px] shrink-0"> 1767 <h2 class="label font-normal mb-[18px] md:mb-[20px] capitalize footer-reserve__item-header">Shop</h2> 1768 <nav aria-labelledby="footer-menu" class="footer-menu-container"> 1769 <ul class="no-bullets p1"> 1770 1771 <li class="mb-2" > 1772 <a class="hover:text-yellow hover:underline" href="/pages/donations">Donations </a> 1773 </li> 1774 1775 <li class="mb-2" > 1776 <a class="hover:text-yellow hover:underline" href="/pages/thereserve">Apparel</a> 1777 </li> 1778 1779 <li class="mb-2" > 1780 <a class="hover:text-yellow hover:underline" href="/pages/sunglasses">Sunglasses</a> 1781 </li> 1782 1783 <li class="mb-2" > 1784 <a class="hover:text-yellow hover:underline" href="/collections/guide-dog-collection">My Guide Dog</a> 1785 </li> 1786 1787 <li class="mb-2" > 1788 <a class="hover:text-yellow hover:underline" href="/collections/gifts">Accessories</a> 1789 </li> 1790 1791 <li class="mb-2" > 1792 <a class="hover:text-yellow hover:underline" href="https://twoblindbrothers.com/pages/sitemap">Site Map</a> 1793 </li> 1794 1795 </ul> 1796 </nav> 1797 </div> 1798 1799 1800 <div class="footer-reserve__item w-1/2 sm:w-[165px] md:w-[180px] shrink-0"> 1801 <h2 class="label font-normal mb-[18px] md:mb-[20px] capitalize footer-reserve__item-header">Company</h2> 1802 <nav aria-labelledby="footer-menu" class="footer-menu-container"> 1803 <ul class="no-bullets p1"> 1804 1805 <li class="mb-2" > 1806 <a class="hover:text-yellow hover:underline" href="/pages/about-us">About Us</a> 1807 </li> 1808 1809 <li class="mb-2" > 1810 <a class="hover:text-yellow hover:underline" href="/blogs/the-blind-spot">The Blind Spot</a> 1811 </li> 1812 1813 <li class="mb-2" > 1814 <a class="hover:text-yellow hover:underline" href="/pages/braille">Braille Translator</a> 1815 </li> 1816 1817 <li class="mb-2" > 1818 <a class="hover:text-yellow hover:underline" href="https://two-blind-brothers-rxaedbshu7o.gorgias.help/en-US/contact">Contact Us</a> 1819 </li> 1820 1821 <li class="mb-2" > 1822 <a class="hover:text-yellow hover:underline" href="https://twoblindbrothers.loopreturns.com/#/">Returns & Exchanges </a> 1823 </li> 1824 1825 <li class="mb-2" > 1826 <a class="hover:text-yellow hover:underline" href="https://two-blind-brothers-rxaedbshu7o.gorgias.help/en-US">FAQ</a> 1827 </li> 1828 1829 <li class="mb-2" > 1830 <a class="hover:text-yellow hover:underline" href="/account">Account</a> 1831 </li> 1832 1833 </ul> 1834 </nav> 1835 </div> 1836 1837</div> 1838 1839 <div class="footer-reserve__item--newsletter w-full sm:w-[321px] md:w-[380px] lg:w-[495px] lg:mr-[153px]"> 1840 <h2 class="label font-normal mb-[18px] md:mb-[20px] capitalize footer-reserve__item-header">Newsletter</h2> 1841 <div class="footer-reserve__newsletter-form"> 1842 <p class="p1">Subscribe to get notified about any and all brand updates and special offers.</p><div class="klaviyo-form-RNp37i newsletter-email"></div></div> 1843 <div class="footer-reserve__socials"> 1844 <ul class="inline-list flex items-end gap-[18px] mt-[26px] lg:mt-[32px]"> 1845 1846 <li> 1847 <a class="social-icon flex items-center justify-center w-10 h-10 text-[#3df0aa] p-0 border-none transition duration-200 ease-in-out" href="https://www.instagram.com/twoblindbrothers/" target="_blank" rel="noopener" title="" aria-label="Instagram"> 1848 <img class="lazy" src="//twoblindbrothers.com/cdn/shop/files/Instagram.png?v=1696586169" alt="" width="auto" height="26"> 1849 </a> 1850 </li> 1851 1852 1853 <li> 1854 <a class="social-icon flex items-center justify-center w-10 h-10 text-[#3df0aa] p-0 border-none transition duration-200 ease-in-out" href="https://twitter.com/i/flow/login?redirect_after_login=%2Ftwoblindbros%2F" target="_blank" rel="noopener" title="" aria-label="Twitter"> 1855 <img class="lazy" src="//twoblindbrothers.com/cdn/shop/files/twitter.png?v=1696586174" alt="" width="auto" height="26"> 1856 </a> 1857 </li> 1858 1859 1860 <li> 1861 <a class="social-icon flex items-center justify-center w-10 h-10 text-[#3df0aa] p-0 border-none transition duration-200 ease-in-out" href="https://www.facebook.com/twoblindbros/" target="_blank" rel="noopener" title="" aria-label="Facebook"> 1862 1863<svg width="26" height="22" viewbox="0 0 37 24" fill="white" xmlns="http://www.w3.org/2000/svg"> 1864 <g clip-path="url(#clip0_133_73)"> 1865 <path d="M3.99645 15.8325C3.99645 17.2147 4.30655 18.2714 4.71185 18.9123C4.92784 19.2771 5.23887 19.5796 5.61333 19.789C5.9878 19.9985 6.41237 20.1074 6.84389 20.1047C7.88611 20.1047 8.83955 19.8534 10.6769 17.3705C12.1489 15.3814 13.8834 12.5956 15.0517 10.8364L17.028 7.87099C18.4009 5.81152 19.9874 3.52209 21.8119 1.96524C23.2981 0.703665 24.9026 0 26.5174 0C29.2284 0 31.8108 1.53424 33.7871 4.41173C35.9501 7.56314 37.0039 11.5326 37.0039 15.6289C37.0039 18.0641 36.5123 19.8534 35.676 21.267C34.8692 22.6341 33.2892 24 30.6399 24V20.1047C32.9083 20.1047 33.4706 18.0691 33.4706 15.7395C33.4706 12.4197 32.678 8.7355 30.932 6.10304C29.6929 4.23581 28.0871 3.09487 26.3205 3.09487C24.4098 3.09487 22.8722 4.5022 21.1441 7.01152C20.2255 8.34471 19.2823 9.96942 18.2234 11.8027L17.0576 13.8132C14.7159 17.8681 14.1227 18.7916 12.9518 20.3158C10.9034 22.9948 9.15093 24 6.84389 24C4.10711 24 2.37651 22.8427 1.31114 21.0986C0.429754 19.6775 0 17.8128 0 15.688L3.99645 15.8325Z" fill="white"></path> 1866 <path d="M3.15112 4.68691C4.98337 1.9288 7.62751 0 10.6602 0C12.4166 0 14.1626 0.502618 15.9858 1.96147C17.9802 3.55099 20.1032 6.16838 22.7577 10.4821L23.7085 12.0302C26.004 15.7646 27.3113 17.6846 28.0743 18.5918C29.0573 19.7554 29.747 20.0997 30.6399 20.0997C32.9084 20.0997 33.4706 18.0641 33.4706 15.7344L36.9962 15.6264C36.9962 18.0616 36.5046 19.8509 35.6683 21.2645C34.8693 22.6341 33.2892 24 30.6399 24C28.993 24 27.5339 23.6507 25.9204 22.1642C24.68 21.0232 23.2299 18.9964 22.1143 17.1744L18.796 11.7613C17.131 9.04461 15.6037 7.01906 14.7197 6.10681C13.7676 5.11539 12.5465 3.92419 10.5959 3.92419C9.01713 3.92419 7.6764 5.00607 6.55441 6.66094L3.15112 4.68691Z" fill="white"></path> 1867 <path d="M10.5959 3.92419C9.01711 3.92419 7.67638 5.00607 6.55439 6.66094C4.9679 8.99937 3.99645 12.4825 3.99
1867645 15.8325C3.99645 17.2147 4.30655 18.2714 4.71185 18.9123L1.3047 21.0986C0.429754 19.6775 0 17.8128 0 15.688C0 11.8241 1.08596 7.79686 3.1511 4.68691C4.98334 1.9288 7.62749 0 10.6602 0L10.5959 3.92419Z" fill="white"></path> 1868 </g> 1869 <defs> 1870 <lineargradient id="paint0_linear_133_73" x1="8.02124" y1="11.378" x2="33.4945" y2="12.6954" gradientunits="userSpaceOnUse"> 1871 <stop></stop> 1872 <stop offset="0.4" stop-opacity="0.88"></stop> 1873 <stop offset="0.83" stop-opacity="0.83"></stop> 1874 <stop offset="1"></stop> 1875 </lineargradient> 1876 <lineargradient id="paint1_linear_133_73" x1="5.32946" y1="17.466" x2="5.32946" y2="8.29319" gradientunits="userSpaceOnUse"> 1877 <stop stop-opacity="0.99"></stop> 1878 <stop offset="1"></stop> 1879 </lineargradient> 1880 <clippath id="clip0_133_73"> 1881 <rect width="37" height="24" fill="white"></rect> 1882 </clippath> 1883 </defs> 1884 </svg> 1885 </a> 1886 </li> 1887 1888 1889 <li style="margin-left: 6px;"> 1890 <a class="social-icon flex items-center justify-center w-10 h-10 text-[#3df0aa] p-0 border-none transition duration-200 ease-in-out" href="https://www.tiktok.com/@twoblindbrothers" target="_blank" rel="noopener" title="" aria-label="Tiktok"> 1891 <img class="lazy" src="//twoblindbrothers.com/cdn/shop/files/tiktok.png?v=1696586171" alt="" width="auto" height="26"> 1892 </a> 1893 </li> 1894 1895 </ul> 1896 </div> 1897 </div> 1898 </div><div class="footer-reserve__middle mb-[32px] mt-[72px] sm:mb-[47px] sm:mt-[90px] md:mb-[56px] md:mt-[96px] lg:mb-[76px] lg:mt-[125px]"> 1899 <picture class="w-full"> 1900 <source data-srcset="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752" media="(min-width: 769px)" /> 1901 <source data-srcset="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752&width=1024" media="(min-width: 500px)" /> 1902 <source data-srcset="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752&width=500" media="(min-width: 320px)" /> 1903 <img width="auto" height="auto" src="//twoblindbrothers.com/cdn/shop/files/footer_bg.png?v=1696579752&width=500" alt="" loading="lazy"/> 1904 </picture> 1905 </div><div class="footer-reserve__bottom pt-[24px] border-t border-grey flex flex-col-reverse sm:flex-row sm:justify-between"> 1906 <p class="p1 mt-[14px] sm:mt-0"> 1907 © 2026 Two Blind Brothers | A registered 501(c)(3) nonprofit organization | EIN 47-5511564 1908 1909 </p> 1910 <nav> 1911 <ul class="no-bullets p1 flex gap-[12px] md:gap-[32px]"> 1912 1913 <li> 1914 <a class="hover:text-yellow hover:underline" href="/pages/terms-of-service">Terms & Conditions</a> 1915 </li> 1916 1917 <li> 1918 <a class="hover:text-yellow hover:underline" href="/pages/privacy-policy">Privacy Policy</a> 1919 </li> 1920 1921 <li> 1922 <a class="hover:text-yellow hover:underline" href="/pages/accessibility">Accessibility </a> 1923 </li> 1924 1925 </ul> 1926 </nav> 1927 </div> 1928 </div> 1929 </footer> 1930 1931 1932 1933</div><!-- //site-footer --> 1934 1935 <div id="heatmap-banner" class=""> 1936 <p>There are lots of types of blindness. We have Stargardt's, a type of macular degeneration that means we lose vision in the center of the retina. This simulator gives you peek at what its like to peep with our peepers.</p><a class="heatmap-close" href="#" title="close banner">X</a> 1937 </div> 1938 1939 <svg xmlns="http://www.w3.org/2000/svg" width="80%" height="80%" viewBox="10 0 50 75" id="heatmap-display"> 1940 <filter id="blurMe"> 1941 <feGaussianBlur in="SourceGraphic" stdDeviation="1"></feGaussianBlur> 1942 </filter> 1943 <path d="M10,59l9,6,10,3a18,18,0,0,0,10-3h1l9-5,10-4,5-5a15,15,0,0,0,2-7h0a20,20,0,0,0-1-6l-4-6-6-5-9-5L37,14l-3-2L27,9a14,14,0,0,0-9,1,20,20,0,0,0-7,6L6,24a49,49,0,0,0-3,9,45,45,0,0,0-1,9H2a20,20,0,0,0,2,9Z" fill="rgba(0,0,0,.7)" filter="url(#blurMe)"></path> 1944 <path d="M9,48l5,7,7,5h9l8-2,9-2h5a5,5,0,0,0,3-3h0l2-6a42,42,0,0,0,0-9c0-3-1-6-2-7s-4-3-7-3l-8-2-2-2-5-4-7-2-7,2-5,4-4,6L7,34H7a14,14,0,0,0,0,7A22,22,0,0,0,9,48Z" fill="#666" filter="url
1944(#blurMe)"></path> 1945 <path d="M14,52l7,4,8,2,8-2h1l7-3,7-3,3-3a10,10,0,0,0,2-5h0a13,13,0,0,0-1-4l-3-4-4-3-7-4-8-4H32l-5-2H20l-5,4-3,6L9,34a29,29,0,0,0-1,6H9a14,14,0,0,0,2,6Z" filter="url(#blurMe)"></path> 1946 </svg> 1947 1948 </div> 1949 1950 <div id="shopify-section-collection-nav-images" class="shopify-section"> 1951</div> 1952 1953 <reserve-collapsible-cart class="reserve-collapsible-cart collapsible js-reserve-cart-collapsible" hidden> 1954 <button type="button" class="collapsible-trigger" id="collapsible-trigger" aria-expanded="false" aria-controls="collapsible-content"> 1955 <span class="collapsible-title">Thanks to you, weâve donated +$2.5m to fight blindness.</span> 1956 <span class="collapsible-icon"> 1957 <svg xmlns="http://www.w3.org/2000/svg" width="13" height="8" fill="none" viewBox="0 0 13 8"><path stroke="#000" stroke-width="1.5" d="m1 1 5.5 5L12 1"/></svg> 1958 </span> 1959 </button> 1960 <div class="collapsible-content" id="collapsible-content" role="region" aria-labelledby="collapsible-trigger"> 1961 <div class="collapsible-content__inner"> 1962 We started Two Blind Brothers to make the softest clothing and gifts in the world and to help the blind community by donating 100% of our profits back to research for eye disease through Foundation Fighting Blindness. 1963 </div> 1964 </div> 1965 </reserve-collapsible-cart> 1966 1967 1968
1968<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/reserve-collapsible-cart-4546fed9.js" type="module" crossorigin="anonymous"></script>
1968 1969 1970
1971<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/timber.js?v=31070900647156016061761863562"></script>
1971 1972
1972<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/scripts.js?v=87841220958860870631781797004"></script>
1972 1973
1973<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/nav.js?v=152844729932761356901718126068"></script>
1973 1974
1974<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/aria-modal.js?v=267549560295848651752613227"></script>
1974 1975
1975<script src="//twoblindbrothers.com/cdn/shop/t/278/assets/js.cookie.js?v=55157327875759164121702066481"></script>
1975 1976
1976<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/simpleheat.js?v=156388220822006659271702066480"></script>
1976 1977
1977<script async src="//twoblindbrothers.com/cdn/shop/t/278/assets/data.js?v=90591694455426389211702066488"></script>
1977 1978 1979 <!-- <div class="options"> 1980 <label>Radius </label><input type="range" id="radius" value="25" min="10" max="50" /><br /> 1981 <label>Blur </label><input type="range" id="blur" value="15" min="10" max="50" /> 1982</div> 1983 1984<canvas id="canvas" width="1000" height="600"></canvas> --> 1985 1986<div id="canvas"></div> 1987
1988<script> 1989 window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; 1990 1991 // function get(id) { 1992 // return document.getElementById(id); 1993 // } 1994 1995 // var heat = simpleheat('canvas').data(data).max(18), 1996 // frame; 1997 // 1998 // function draw() { 1999 // console.time('draw'); 2000 // heat.draw(); 2001 // console.timeEnd('draw'); 2002 // frame = null; 2003 // } 2004 // 2005 // draw(); 2006 2007 // get('canvas').onmousemove = function (e) { 2008 // heat.add([e.layerX, e.layerY, 1]); 2009 // frame = frame || window.requestAnimationFrame(draw); 2010 // }; 2011 // 2012 // var radius = get('radius'), 2013 // blur = get('blur'), 2014 // changeType = 'oninput' in radius ? 'oninput' : 'onchange'; 2015 // 2016 // radius[changeType] = blur[changeType] = function (e) { 2017 // heat.radius(+radius.value, +blur.value); 2018 // frame = frame || window.requestAnimationFrame(draw); 2019 // }; 2020 2021 function handler1() { 2022 document.body.classList.add('active-eyeball-blind') 2023 $('#eyeball svg title#eyeball-title').html('Remove'); 2024 $('#eyeball').attr('aria-label', 'Remove'); 2025 2026 $('.blink').addClass('blinked'); 2027 // $('#stargardt').addClass('content-grow2'); 2028 $('#heatmap-banner').addClass('nav-down'); 2029 $(this).one("click", handler2); 2030 2031 $("#canvas").fadeIn(); 2032 2033 $("#canvas").addClass("growing"); 2034 2035 // setInterval(function(){ 2036 // if (v > 1) { 2037 // v = parseInt(v) - 1; 2038 // $("#canvas").css("filter", "blur(" + v + "em)"); 2039 // } 2040 // }, 1000); 2041 } 2042 2043 function handler2() { 2044 document.body.classList.remove('active-eyeball-blind') 2045 $('.blink').removeClass('blinked'); 2046 $('#eyeball svg title#eyeball-title').html('Select this button to see how the Two Blind Brothers see that Page'); 2047 $('#eyeball').attr('aria-label', 'Select this button to see how the Two Blind Brothers see that Page'); 2048 // $('#stargardt').removeClass('content-grow2'); 2049 $("#canvas").fadeOut(); 2050 $("#canvas").removeClass("growing"); 2051 $('#heatmap-banner').removeClass('nav-down'); 2052 $(this).one("click", handler1); 2053 } 2054 2055 $("#eyeball").one("click", handler1); 2056 $( ".heatmap-close" ).click(function(e) { 2057 e.preventDefault(); 2058 $('#heatmap-banner').removeClass('nav-down') 2059 $("#canvas").fadeOut(); 2060 $("#canvas").removeClass("growing"); 2061 }); 2062</script>
2062 2063 2064 2065
2065<script> 2066 //lazy bgs 2067 document.addEventListener('lazybeforeunveil', function(e){ 2068 var bg = e.target.getAttribute('data-bg'); 2069 if(bg){ e.target.style.backgroundImage = 'url(' + bg + ')'; } 2070 }); 2071 </script>
2071 2072 2073
2073<script> 2074 // Video modals 2075 jQuery(function() { 2076 $('iframe[src*="https://www.youtube.com/embed/"]').addClass("remodal-video"); 2077 $(document).on('closing', '.remodal', function (e) { 2078 $('.remodal-video').each(function(index) { 2079 $(this).attr('src', $(this).attr('src')); 2080 return false; 2081 }); 2082 }); 2083 jQuery('.swatch :radio').change(function() { 2084 var optionIndex = jQuery(this).closest('.swatch').attr('data-option-index'); 2085 var optionValue = jQuery(this).val(); 2086 jQuery(this) 2087 .closest('form') 2088 .find('.single-option-selector') 2089 .eq(optionIndex) 2090 .val(optionValue) 2091 .trigger('change'); 2092 }); 2093 }); 2094 </script>
2094 2095 2096
2096<script> 2097 // Smooth Scroll 2098 $('a[href*="#"]') 2099 .not('[href="#"]') 2100 .not('[href="#0"]') 2101 .click(function(event) { 2102 if ( 2103 location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') 2104 && 2105 location.hostname == this.hostname 2106 ) { 2107 var target = $(this.hash); 2108 target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); 2109 if (target.length) { 2110 event.preventDefault(); 2111 $('html, body').animate({ 2112 scrollTop: target.offset().top - 120 2113 }, 1000, function() { 2114 var $target = $(target); 2115 $target.focus(); 2116 if ($target.is(":focus")) { 2117 return false; 2118 } else { 2119 $target.attr('tabindex','-1'); 2120 $target.focus(); 2121 }; 2122 }); 2123 } 2124 } 2125 }); 2126 </script>
2126 2127 2128
2128<script> 2129 2130 </script>
2130 2131 2132 2133 2134 2135 2136
2136<script type="text/javascript"> 2137 (function () { 2138 var b = document.createElement('script'); b.type = 'text/javascript'; b.async = true; 2139 b.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'a.klaviyo.com/media/js/analytics/analytics.js'; 2140 var a = document.getElementsByTagName('script')[0]; a.parentNode.insertBefore(b, a); 2141 })(); 2142 </script>
2142 2143 2144 2145 2146
2146<script type="text/javascript"> 2147 !function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}(); 2148 2149 klaviyo.push(['account', 'HMZ6Wk']); 2150 </script>
2150 2151 2152 <div id="shopify-section-product-names" class="shopify-section product-names"> 2153</div> 2154 2155 <input type="hidden" name="aaaformbuilder_customer_logged_id" value="" id="aaaformbuilder_customer_logged_id"> 2156
2157<script id="back-in-stock-helper"> 2158 var _BISConfig = _BISConfig || {}; 2159 2160 2161 2162 2163</script>
2163 2164 2165 2166 2167 2168 <!-- Twitter universal website tag code --> 2169
2169<script> 2170 !function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments); 2171 },s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='//static.ads-twitter.com/uwt.js', 2172 a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script'); 2173 // Insert Twitter Pixel ID and Standard Event data below 2174 twq('init','nzf97'); 2175 twq('track','PageView'); 2176 </script>
2176 2177 <!-- End Twitter universal website tag code --> 2178 2179 <!-- Outbrain Pixel implemented by Brad --> 2180
2181<script data-obct type="text/javascript"> 2182 /** DO NOT MODIFY THIS CODE**/ 2183 !function(_window, _document) { 2184 var OB_ADV_ID='00dfab9c8bb5ecb00218393d5a60382924'; 2185 if (_window.obApi) {var toArray = function(object) { 2186 return Object.prototype.toString.call(object) === '[object Array]' ? object : [object]; 2187 } 2188 _window.obApi.marketerId = toArray(_window.obApi.marketerId).concat(toArray(OB_ADV_ID));return;} 2189 var api = _window.obApi = function() { 2190 api.dispatch 2191 ? api.dispatch.apply(api, arguments) 2192 : api.queue.push(arguments); 2193 } 2194 api.version = '1.1'; 2195 api.loaded = true; 2196 api.marketerId = OB_ADV_ID; 2197 api.queue = []; 2198 var tag = _document.createElement('script'); 2199 tag.async = true; 2200 tag.src = '//amplify.outbrain.com/cp/obtp.js'; 2201 tag.type = 'text/javascript'; 2202 var script = _document.getElementsByTagName('script')[0]; 2203 script.parentNode.insertBefore(tag, script); 2204 }(window, document); 2205 obApi('track', 'PAGE_VIEW'); 2206</script>
2206 2207 2208 <!-- Outbrain Pixel End --> 2209 2210 <!-- LinkedIn website tag code --> 2211 2212
2212<script type="text/javascript"> 2213 _linkedin_data_partner_id = "397714"; 2214 </script>
2214 2215 2216
2216<script type="text/javascript"> 2217 (function(){var s = document.getElementsByTagName("script")[0]; 2218 var b = document.createElement("script"); 2219 b.type = "text/javascript";b.async = true; 2220 b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; 2221 s.parentNode.insertBefore(b, s);})(); 2222 </script>
2222 2223 <noscript> 2224 <img height="1" width="1" style="display:none;" alt="" src="https://dc.ads.linkedin.com/collect/?pid=397714&fmt=gif" /> 2225 </noscript> 2226 2227 <!-- This line added automatically by JSON-LD for SEO. --> 2228 2229 2230
2231<script type="application/ld+json"> 2232{ 2233 "@context": "https://schema.org", 2234 "@type": "Organization", 2235 "@id": "https:\/\/twoblindbrothers.com\/#org", 2236 "name": "Two Blind Brothers", 2237 "url": "https://twoblindbrothers.com", 2238 "description": "Two Blind Brothers is a nonprofit creating awareness, education, and opportunities that help people thrive with blindness and low vision. Every purchase and donation helps support our programs.", 2239 "telephone": "9177226284", 2240 "logo": "https:\/\/twoblindbrothers.com\/cdn\/shop\/t\/278\/assets\/logo_small.png?v=142736", 2241 "image": "https:\/\/twoblindbrothers.com\/cdn\/shop\/t\/278\/assets\/logo_small.png?v=142736", 2242 "sameAs": [], 2243 "address": { 2244 "@type": "PostalAddress", 2245 "streetAddress": "379 West Broadway, 2nd Floor", 2246 "addressLocality": "New York", 2247 "addressRegion": "New York", 2248 "postalCode": "10012", 2249 "addressCountry": "United States" 2250 } 2251} 2252</script>
2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263<div data-rebuy-id="120361"></div>
2264<script async src="https://cdn.rebuyengine.com/onsite/js/rebuy.js?shop=two-blind-brothers.myshopify.com"></script>
2264 2265
2265<script> (function(){ var s = document.createElement('script'); var h = document.querySelector('head') || document.body; s.src = 'https://acsbapp.com/apps/app/dist/js/app.js'; s.async = true; s.onload = function(){ acsbJS.init({ statementLink : '', footerHtml : '', hideMobile : false, hideTrigger : false, disableBgProcess : false, language : 'en', position : 'left', leadColor : '#000205', triggerColor : '#000205', triggerRadius : '50%', triggerPositionX : 'right', triggerPositionY : 'bottom', triggerIcon : 'people', triggerSize : 'small', triggerOffsetX : 20, triggerOffsetY : 20, mobile : { triggerSize : 'small', triggerPositionX : 'right', triggerPositionY : 'bottom', triggerOffsetX : 10, triggerOffsetY : 10, triggerRadius : '50%' } }); }; h.appendChild(s); })(); </script>
vendor: 1 bytes, line 2265
2265
2266<script async src="https://cdn.attn.tv/2bb/dtag.js"></script>
2266 2267 2268<!-- Widget : Free GWP Gift Tags --> 2269<div data-rebuy-id="175048"></div> 2270<!-- End Widget : Free GWP Gift Tags --> 2271 2272<!-- Widget : Gift with Purchase - Gift Card --> 2273 <div data-rebuy-id="184713"></div> 2274<!-- End Widget : Gift with Purchase - Gift Card --> 2275<style> body > .additional-checkout-buttons {display: none !important;} </style> 2276<div id="shopify-block-AVElYbHJnemxjbVVrN__10840395464443086010" class="shopify-block shopify-app-block"> 2277 2278
2279<script> 2280 console.log("[Alia app extension] v1.0.5"); 2281 2282 const BACKEND_URL = "https://backend.alia-prod.com"; 2283 2284 window.ALIA_SHOPIFY_EXTENSION_INFO = { 2285 customerID: "", 2286 country: "US", 2287 market: "us", 2288 language: "en" 2289 } 2290 2291 if (document.readyState !== "loading") { 2292 initAlia(); 2293 } else { 2294 document.addEventListener("DOMContentLoaded", () => initAlia(), { once: true }); 2295 } 2296 2297 async function initAlia() { 2298 const url = BACKEND_URL + "/public/launcher.js?shopifyUrl=two-blind-brothers.myshopify.com"; 2299 const script = document.createElement("script"); 2300 script.src = url; 2301 script.async = true; 2302 document.head.appendChild(script); 2303 } 2304</script>
2304 2305 2306</div>
2306<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
2306 2307</body> 2308</html> 2309<!-- Widget : Free Cream Gloves w/ Apparel Purchase Dec/Jan --> 2310<div data-rebuy-id="263839"></div> 2311<!-- End Widget : Free Cream Gloves w/ Apparel Purchase Dec/Jan -->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.