1<!DOCTYPE html> 2<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]--> 3<!--[if IE 7 ]><html class="ie ie7" lang="en"> <![endif]--> 4<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]--> 5<!--[if IE 9 ]><html class="ie ie9" lang="en"> <![endif]--> 6<!--[if (gte IE 10)|!(IE)]><!--><html lang="en"> <!--<![endif]--> 7 <head> 8
8<script type="application/vnd.locksmith+json" data-locksmith>{"version":"v320","locked":false,"initialized":true,"scope":"page","access_granted":true,"access_denied":false,"requires_customer":false,"manual_lock":false,"remote_lock":false,"has_timeout":false,"remote_rendered":null,"hide_resource":false,"hide_links_to_resource":false,"transparent":true,"locks":{"all":[],"opened":[]},"keys":[],"keys_signature":"b3161c01ed4c5a586263774a0f5b4f6e5d118018eac8f5b63ef850c115597974","state":{"template":"page","theme":179687194922,"product":null,"collection":null,"page":"store-locator","blog":null,"article":null,"app":null},"now":1790431202,"path":"\/pages\/store-locator","locale_root_url":"\/","canonical_url":"https:\/\/tabanerocigars.com\/pages\/store-locator","customer_id":null,"customer_id_signature":"b3161c01ed4c5a586263774a0f5b4f6e5d118018eac8f5b63ef850c115597974","cart":null}</script>
8<script data-locksmith>!function(){undefined;!function(){var s=window.Locksmith={},e=document.querySelector('script[type="application/vnd.locksmith+json"]'),n=e&&e.innerHTML;if(s.state={},s.util={},s.loading=!1,n)try{s.state=JSON.parse(n)}catch(d){}if(document.addEventListener&&document.querySelector){var o,i,a,t=[76,79,67,75,83,77,73,84,72,49,49],c=function(){i=t.slice(0)},l="style",r=function(e){e&&27!==e.keyCode&&"click"!==e.type||(document.removeEventListener("keydown",r),document.removeEventListener("click",r),o&&document.body.removeChild(o),o=null)};c(),document.addEventListener("keyup",function(e){if(e.keyCode===i[0]){if(clearTimeout(a),i.shift(),0<i.length)return void(a=setTimeout(c,1e3));c(),r(),(o=document.createElement("div"))[l].width="50%",o[l].maxWidth="1000px",o[l].height="85%",o[l].border="1px rgba(0, 0, 0, 0.2) solid",o[l].background="rgba(255, 255, 255, 0.99)",o[l].borderRadius="4px",o[l].position="fixed",o[l].top="50%",o[l].left="50%",o[l].transform="translateY(-50%) translateX(-50%)",o[l].boxShadow="0 2px 5px rgba(0, 0, 0, 0.3), 0 0 100vh 100vw rgba(0, 0, 0, 0.5)",o[l].zIndex="2147483645";var t=document.createElement("textarea");t.value=JSON.stringify(JSON.parse(n),null,2),t[l].border="none",t[l].display="block",t[l].boxSizing="border-box",t[l].width="100%",t[l].height="100%",t[l].background="transparent",t[l].padding="22px",t[l].fontFamily="monospace",t[l].fontSize="14px",t[l].color="#333",t[l].resize="none",t[l].outline="none",t.readOnly=!0,o.appendChild(t),document.body.appendChild(o),t.addEventListener("click",function(e){e.stopImmediatePropagation()}),t.select(),document.addEventListener("keydown",r),document.addEventListener("click",r)}})}s.isEmbedded=-1!==window.location.search.indexOf("_ab=0&_fd=0&_sc=1"),s.path=s.state.path||window.location.pathname,s.basePath=s.state.locale_root_url.concat("/apps/locksmith").replace(/^\/\//,"/"),s.reloading=!1,s.util.console=window.console||{log:function(){},error:function(){}},s.util.makeUrl=function(e,t){var n,o=s.basePath+e,i=[],a=s.cache();for(n in a)i.push(n+"="+encodeURIComponent(a[n]));for(n in t)i.push(n+"="+encodeURIComponent(t[n]));return s.state.customer_id&&(i.push("customer_id="+encodeURIComponent(s.state.customer_id)),i.push("customer_id_signature="+encodeURIComponent(s.state.customer_id_signature))),o+=(-1===o.indexOf("?")?"?":"&")+i.join("&")},s._initializeCallbacks=[],s.on=function(e,t){if("initialize"!==e)throw'Locksmith.on() currently only supports the "initialize" event';s._initializeCallbacks.push(t)},s.initializeSession=function(e){if(!s.isEmbedded){var t=!1,n=!0,o=!0;(e=e||{}).silent&&(o=n=!(t=!0)),s.ping({silent:t,spinner:n,reload:o,callback:function(){s._initializeCallbacks.forEach(function(e){e()})}})}},s.cache=function(e){var t={};try{var n=function i(e){return(document.cookie.match("(^|; )"+e+"=([^;]*)")||0)[2]};t=JSON.parse(decodeURIComponent(n("locksmith-params")||"{}"))}catch(d){}if(e){for(var o in e)t[o]=e[o];document.cookie="locksmith-params=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/",document.cookie="locksmith-params="+encodeURIComponent(JSON.stringify(t))+"; path=/"}return t},s.cache.cart=s.state.cart,s.cache.cartLastSaved=null,s.params=s.cache(),s.util.reload=function(){s.reloading=!0;try{window.location.href=window.location.href.replace(/#.*/,"")}catch(d){s.util.console.error("Preferred reload method failed",d),window.location.reload()}},s.cache.saveCart=function(e){if(!s.cache.cart||s.cache.cart===s.cache.cartLastSaved)return e?e():null;var t=s.cache.cartLastSaved;s.cache.cartLastSaved=s.cache.cart,fetch("/cart/update.js",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({attributes:{locksmith:s.cache.cart}})}).then(function(e){if(!e.ok)throw new Error("Cart update failed: "+e.status);return e.json()}).then(function(){e&&e()})["catch"](function(e){if(s.cache.cartLastSaved=t,!s.reloading)throw e})},s.util.spinnerHTML='<style>body{background:#FFF}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#loading{display:flex;width:100%;height:50vh;
8color:#777;align-items:center;justify-content:center}#loading .spinner{display:block;animation:spin 600ms linear infinite;position:relative;width:50px;height:50px}#loading .spinner-ring{stroke:currentColor;stroke-dasharray:100%;stroke-width:2px;stroke-linecap:round;fill:none}</style><div id="loading"><div class="spinner"><svg width="100%" height="100%"><svg preserveAspectRatio="xMinYMin"><circle class="spinner-ring" cx="50%" cy="50%" r="45%"></circle></svg></svg></div></div>',s.util.clobberBody=function(e){document.body.innerHTML=e},s.util.clobberDocument=function(e){e.responseText&&(e=e.responseText),document.documentElement&&document.removeChild(document.documentElement);var t=document.open("text/html","replace");t.writeln(e),t.close(),setTimeout(function(){var e=t.querySelector("[autofocus]");e&&e.focus()},100)},s.util.serializeForm=function(e){if(e&&"FORM"===e.nodeName){var t,n,o={};for(t=e.elements.length-1;0<=t;t-=1)if(""!==e.elements[t].name)switch(e.elements[t].nodeName){case"INPUT":switch(e.elements[t].type){default:case"text":case"hidden":case"password":case"button":case"reset":case"submit":o[e.elements[t].name]=e.elements[t].value;break;case"checkbox":case"radio":e.elements[t].checked&&(o[e.elements[t].name]=e.elements[t].value);break;case"file":}break;case"TEXTAREA":o[e.elements[t].name]=e.elements[t].value;break;case"SELECT":switch(e.elements[t].type){case"select-one":o[e.elements[t].name]=e.elements[t].value;break;case"select-multiple":for(n=e.elements[t].options.length-1;0<=n;n-=1)e.elements[t].options[n].selected&&(o[e.elements[t].name]=e.elements[t].options[n].value)}break;case"BUTTON":switch(e.elements[t].type){case"reset":case"submit":case"button":o[e.elements[t].name]=e.elements[t].value}}return o}},s.util.on=function(e,a,s,t){t=t||document;var c="locksmith-"+e+a,n=function(e){var t=e.target,n=e.target.parentElement,o=t&&t.className&&(t.className.baseVal||t.className)||"",i=n&&n.className&&(n.className.baseVal||n.className)||"";("string"==typeof o&&-1!==o.split(/\s+/).indexOf(a)||"string"==typeof i&&-1!==i.split(/\s+/).indexOf(a))&&!e[c]&&(e[c]=!0,s(e))};t.attachEvent?t.attachEvent(e,n):t.addEventListener(e,n,!1)},s.util.enableActions=function(e){s.util.on("click","locksmith-action",function(e){e.preventDefault();var t=e.target;t.dataset.confirmWith&&!confirm(t.dataset.confirmWith)||(t.disabled=!0,t.innerText=t.dataset.disableWith,s.post("/action",t.dataset.locksmithParams,{spinner:!1,type:"text",success:function(e){(e=JSON.parse(e.responseText)).message&&alert(e.message),s.util.reload()}}))},e)},s.util.inject=function(e,t){var n=["data","locksmith","append"];if(-1!==t.indexOf(n.join("-"))){var o=document.createElement("div");o.innerHTML=t,e.appendChild(o)}else e.innerHTML=t;var i,a,s=e.querySelectorAll("script");for(a=0;a<s.length;++a){i=s[a];var c=document.createElement("script");if(i.type&&(c.type=i.type),i.src)c.src=i.src;else{var l=document.createTextNode(i.innerHTML);c.appendChild(l)}e.appendChild(c)}var r=e.querySelector("[autofocus]");r&&r.focus()},s.post=function(e,t,n){!1!==(n=n||{}).spinner&&s.util.clobberBody(s.util.spinnerHTML);var o={};n.container===document?(o.layout=1,n.success=function(e){s.util.clobberDocument(e)}):n.container&&(o.layout=0,n.success=function(e){var t=document.getElementById(n.container);s.util.inject(t,e),t.id===t.firstChild.id&&t.parentElement.replaceChild(t.firstChild,t)}),n.form_type&&(t.form_type=n.form_type),n.include_layout_classes!==undefined&&(t.include_layout_classes=n.include_layout_classes),n.lock_id!==undefined&&(t.lock_id=n.lock_id),s.loading=!0;var i=s.util.makeUrl(e,o),a="json"===n.type||"text"===n.type;fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Accept:a?"application/json":"text/html"},body:JSON.stringify(t)}).then(function(e){if(!e.ok)throw new Error("Request failed: "+e.status);return e.text()}).then(function(e){var t=n.success||s.util.clobberDocument;t(a?{responseText:e}:e)})["catch"](function(e){if(!s.reloading)if("dashboard.weglot.com"!==window.location.host){if(!n.silent)throw alert("Something went wrong! Please refresh and try again."),e;console.error(e)}else console.error(e)})["finally"](function(){s.loading=!1})},s.postResource=function(e,t){e.path=s.path,e.search=window.location.search,e.state=s.state,e.passcode&&(e.passcode=e.passcode.trim()),e.email&&(e.email=e.email.trim()),e.state.cart=s.cache.cart,e.locksmith_json=s.jsonTag,e.locksmith_json_signature=s.jsonTagSignature,s.post("/resource",e,t)},s.ping=function(e){if(!s.isEmbedded){e=e||{};s.post("/ping",{path:s.path,search:window.location.search,state:s.state},{spinner:!!e.spinner,silent:"undefined"==typeof e.silent||e.silent,type:"text",success:function(e){e&&e.responseText?(e=JSON.parse(e.responseText)).messages&&0<e.messages.length&&s.showMessages(e.messages):console.error("[Locksmith] Invalid result in ping callback:",e)}})}},s.timeoutMonitor=function(){var e=s.cache.cart;s.ping({callback:function(){e!==s.cache.cart||setTimeout(function(){s.timeoutMonitor()},6e4)}})},s.showMessages=function(e){var t=document.createElement("div");t.style.position="fixed",t.style.left=0,t.style.right=0,t.style.bottom="-50px",t.style.opacity=0,t.style.background="#191919",t.style.color="#ddd",t.style.transition="bottom 0.2s, opacity 0.2s",t.style.zIndex=999999,t.innerHTML=["<style>"," .locksmith-ab .locksmith-b { display: none; }"," .locksmith-ab.toggled .locksmith-b { display: flex; }"," .locksmith-ab.toggled .locksmith-a { display: none; }"," .locksmith-flex { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; padding: 10px 20px; }"," .locksmith-message + .locksmith-message { border-top: 1px #555 solid; }"," .locksmith-message a { color: inherit; font-weight: bold; }"," .locksmith-message a:hover { color: inherit; opacity: 0.8; }"," a.locksmith-ab-toggle { font-weight: inherit; text-decoration: underline; }"," .locksmith-text { flex-grow: 1; }"," .locksmith-cta { flex-grow: 0; text-align: right; }"," .locksmith-cta button { transform: scale(0.8); transform-origin: left; }"," .locksmith-cta > * { display: block; }"," .locksmith-cta > * + * { margin-top: 10px; }"," .locksmith-message a.locksmith-close { flex-grow: 0; text-decoration: none; margin-left: 15px; font-size: 30px; font-family: monospace; display: block; padding: 2px 10px; }"," @media screen and (max-width: 600px) {"," .locksmith-wide-only { display: none !important; }"," .locksmith-flex { padding: 0 15px; }"," .locksmith-flex > * { margin-top: 5px; margin-bottom: 5px; }"," .locksmith-cta { text-align: left; }"," }"," @media screen and (min-width: 601px) {"," .locksmith-narrow-only { display: none !important; }"," }","</style>"].join("")+e.map(function(e){return'<div class="locksmith-message">'+e+"</div>"}).join(""),document.body.appendChild(t),document.body.style.position="relative",document.body.parentElement.style.paddingBottom=t.offsetHeight+"px",setTimeout(function(){t.style.bottom=0,t.style.opacity=1},50),s.util.on("click","locksmith-ab-toggle",function(e){e.preventDefault();for(var t=e.target.parentElement;-1===t.className.split(" ").indexOf("locksmith-ab");)t=t.parentElement;-1!==t.className.split(" ").indexOf("toggled")?t.className=t.className.replace("toggled",""):t.className=t.className+" toggled"}),s.util.enableActions(t)}}()}();</script>
8 9
9<script data-locksmith>Locksmith.cache.cart=null</script>
9 10 11
11<script data-locksmith>Locksmith.jsonTag="{\"version\":\"v320\",\"locked\":false,\"initialized\":true,\"scope\":\"page\",\"access_granted\":true,\"access_denied\":false,\"requires_customer\":false,\"manual_lock\":false,\"remote_lock\":false,\"has_timeout\":false,\"remote_rendered\":null,\"hide_resource\":false,\"hide_links_to_resource\":false,\"transparent\":true,\"locks\":{\"all\":[],\"opened\":[]},\"keys\":[],\"keys_signature\":\"b3161c01ed4c5a586263774a0f5b4f6e5d118018eac8f5b63ef850c115597974\",\"state\":{\"template\":\"page\",\"theme\":179687194922,\"product\":null,\"collection\":null,\"page\":\"store-locator\",\"blog\":null,\"article\":null,\"app\":null},\"now\":1790431202,\"path\":\"\\\/pages\\\/store-locator\",\"locale_root_url\":\"\\\/\",\"canonical_url\":\"https:\\\/\\\/tabanerocigars.com\\\/pages\\\/store-locator\",\"customer_id\":null,\"customer_id_signature\":\"b3161c01ed4c5a586263774a0f5b4f6e5d118018eac8f5b63ef850c115597974\",\"cart\":null}";Locksmith.jsonTagSignature="ff77c7313075d9b4289f10fd09395fc649f30bc533951bdf2c372191b1d805b8"</script>
11 12 <meta charset="utf-8"> 13 <meta http-equiv="cleartype" content="on"> 14 <meta name="robots" content="index,follow"> 15 <meta name="google-site-verification" content="4aXLU_p515CZGjWrDXOqbQKzUtqRu9DNOSIYTWGEIjg" />
16<script type="text/javascript"> 17 (function(c,l,a,r,i,t,y){ 18 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 19 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 20 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 21 })(window, document, "clarity", "script", "ef782qeipl"); 22</script>
22 23 24 <!-- Google Tag Manager -->
25<script>
vendor: 327 bytes, lines 25-29
25(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 26new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 27j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 28'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 29})(window,document,'script','dataLayer','
29GTM-KXGJRLQW
vendor: 3 bytes, line 29
29');
29</script>
29 30<!-- End Google Tag Manager --> 31 32
32<script type="text/javascript"> 33 (function e(){var e=document.createElement("script");e.type="text/javascript",e.async=true,e.src="//staticw2.yotpo.com/u7HZf07asMX45HGHCWKPMR9SrvMWFfoOwnhFzqc2/widget.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})(); 34 </script>
34 35 36 <title>Online Cuban Cigars | Store Finder - Tabanero Cigars</title> 37 38 39<meta name="description" content="Find the best Cuban cigars in your area with our online store finder. Find the store closest to you or put in an online order and get your cigars today." /> 40 41 42 43 44 <noscript><meta http-equiv="refresh" content="0;url=https://agechecker.net/noscript"></noscript> 45
45<script> 46 (function(w,d) { 47 try{if (localStorage.getItem('ac_verified')) return console.log('[AgeChecker.Net] Already verified');}catch(e){} 48 var config = { 49 element: "input[name='checkout']", 50 key: "KCzwJvxzxdPsXZLkjvOQiqno6lVUaT4o", 51 platform_features: { shopify: { checkout_redirect: true }}, 52 path: "/cart", 53 onclosed: function () { 54 try{localStorage.setItem('ac_verified', 'true');}catch(e){} 55 } 56 }; 57 58 w.AgeCheckerConfig=config;if(config.path&&(w.location.pathname+w.location.search).indexOf(config.path)) return; 59 var h=d.getElementsByTagName("head")[0];var a=d.createElement("script");a.src="https://cdn.agechecker.net/static/popup/v1/popup.js";a.crossOrigin="anonymous"; 60 a.onerror=function(a){w.location.href="https://agechecker.net/loaderror";};h.insertBefore(a,h.firstChild); 61 })(window, document); 62 </script>
62 63 64 65 <!-- Script used to keep people from going to checkout after signing up, as this would bypass AgeChecker on the cart page --> 66
66<script> 67 if(window.location.pathname.indexOf("/challenge") != -1) { 68 var find = function() { 69 if(document.getElementById("g-recaptcha")){//if captcha, make redirect to cart page 70 function insertBefore(el, referenceNode) { 71 referenceNode.parentNode.insertBefore(el, referenceNode); 72 } 73 var redirect = document.createElement('input'); 74 redirect.type = "hidden"; 75 redirect.name = "return_to"; 76 redirect.value = "/cart"; 77 78 insertBefore(redirect, document.querySelector('.shopify-challenge__container input[type="submit"]')); 79 } 80 else 81 setTimeout(find, 1000); 82 } 83 setTimeout(find, 1000); 84 } else if(window.location.pathname.indexOf("/register") != -1) { 85 var find = function() { 86 if(document.getElementById("create_customer")){//if captcha, make redirect to cart page 87 function insertBefore(el, referenceNode) { 88 referenceNode.parentNode.insertBefore(el, referenceNode); 89 } 90 var redirect = document.createElement('input'); 91 redirect.type = "hidden"; 92 redirect.name = "return_to"; 93 redirect.value = "/cart"; 94 95 document.querySelector('form[id="create_customer"]').append(redirect); 96 } 97 else 98 setTimeout(find, 1000); 99 } 100 setTimeout(find, 1000); 101 } 102 </script>
102 103 104 <!-- Custom Fonts --> 105 <link href="//fonts.googleapis.com/css?family=.|Asap:light,normal,bold|Kreon:light,normal,bold|Arvo:light,normal,bold|Merriweather:light,normal,bold" rel="stylesheet" type="text/css" /> 106 107 108<meta name="google-site-verification" content="4aXLU_p515CZGjWrDXOqbQKzUtqRu9DNOSIYTWGEIjg" /> 109<meta name="author" content="Tabanero Cigars"> 110<meta property="og:url" content="https://tabanerocigars.com/pages/store-locator"> 111<meta property="og:site_name" content="Tabanero Cigars"> 112 113 114<meta property="og:type" content="website"> 115<meta property="og:title" content="Online Cuban Cigars | Store Finder"> 116 117<meta property="og:image" content="http://tabanerocigars.com/cdn/shop/t/14/assets/logo.png?v=18277959418408221561755142115"> 118<meta property="og:image:secure_url" content="https://tabanerocigars.com/cdn/shop/t/14/assets/logo.png?v=18277959418408221561755142115"> 119 120 121 122<meta property="og:description" content="Find the best Cuban cigars in your area with our online store finder. Find the store closest to you or put in an online order and get your cigars today."> 123 124 125 126 127 <meta name="twitter:site" content="@shopify"> 128 129<meta name="twitter:card" content="summary"> 130 131 132 133 134 135 <!-- Mobile Specific Metas --> 136 137 <meta name="HandheldFriendly" content="True"> 138 <meta name="MobileOptimized" content="320"> 139 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 140 141 <!-- Stylesheets for Retina 3.1 --> 142 <link href="//tabanerocigars.com/cdn/shop/t/14/assets/styles.scss.css?v=161895242601679321191789366446" rel="stylesheet" type="text/css" media="all" /> 143 <!--[if lte IE 9]> 144 <link href="//tabanerocigars.com/cdn/shop/t/14/assets/ie.css?v=16370617434440559491755142115" rel="stylesheet" type="text/css" media="all" /> 145 <![endif]--> 146 <!--[if lte IE 7]> 147
147<script src="//tabanerocigars.com/cdn/shop/t/14/assets/lte-ie7.js?v=163036231798125265921755142115" type="text/javascript"></script>
147 148 <![endif]--> 149 150 <link rel="shortcut icon" type="image/x-icon" href="//tabanerocigars.com/cdn/shop/t/14/assets/favicon.png?v=53453841180494327051755142115"> 151 <link rel="canonical" href="https://tabanerocigars.com/pages/store-locator" /> 152 153 154 155 <!-- jQuery and jQuery fallback --> 156
156<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
156 157 <!--
157<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
157 --> 158 <!--
158<script>window.jQuery || document.write("
158<script src='//tabanerocigars.com/cdn/shop/t/14/assets/jquery.min.js?v=171470576117159292311755142115'>\x3C/script>")</script>
158 --> 159
159<script src="//tabanerocigars.com/cdn/shop/t/14/assets/app.js?v=156217830188393735351755142115" type="text/javascript"></script>
159 160
160<script src="//tabanerocigars.com/cdn/shop/t/14/assets/cloudzoom.js?v=143460180462419703841755142115" type="text/javascript"></script>
160 161
161<script src="//tabanerocigars.com/cdn/shopifycloud/storefront/assets/themes_support/option_selection-b017cd28.js" type="text/javascript"></script>
161 162
162<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
162<meta name="google-site-verification" content="4OM2u09gTn7wQQuUZTqDH1dtZQoD3kxFzoLiDjJS-SA"> 163<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/10873052/digital_wallets/dialog"> 164<meta id="in-context-paypal-metadata" data-shop-id="10873052" data-venmo-supported="true" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 165<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
165<script async="async" src="/checkouts/internal/preloads.js?locale=en-US"></script>
vendor: 1 bytes, line 165
165
166<script id="shopify-features" type="application/json">{"accessToken":"b66fc4340e67a3958529f02075dad526","betas":["rich-media-storefront-analytics"],"domain":"tabanerocigars.com","predictiveSearch":true,"shopId":10873052,"locale":"en"}</script>
vendor: 1 bytes, line 166
166
167<script>var Shopify = Shopify || {}; 168Shopify.shop = "tabanero-cigars.myshopify.com"; 169Shopify.locale = "en"; 170Shopify.currency = {"active":"USD","rate":"1.0"}; 171Shopify.country = "US"; 172Shopify.theme = {"name":"[Stoq] Copy of Bold Retina RO KG[14-08-2025]","id":179687194922,"schema_name":null,"schema_version":null,"theme_store_id":null,"role":"main"}; 173Shopify.theme.handle = "null"; 174Shopify.theme.style = {"id":null,"handle":null}; 175Shopify.cdnHost = "tabanerocigars.com/cdn"; 176Shopify.routes = Shopify.routes || {}; 177Shopify.routes.root = "/"; 178Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 179Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 180Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 181Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 181
181
182<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 182
182
183<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 183
183
184<script> 185 window.Shopify = window.Shopify || {}; 186 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 187 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 188 window.Shopify.SignInWithShop.eligible = true; 189</script>
vendor: 1 bytes, line 189
189
190<script id="shop-js-analytics" type="application/json">{"pageType":"page"}</script>
vendor: 1 bytes, line 190
190
191<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 191
191
192<script type="module"> 193 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 194 195 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 196 197</script>
vendor: 1 bytes, line 197
197
198<script> 199 window.Shopify = window.Shopify || {}; 200 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 201 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"]}; 202</script>
vendor: 1 bytes, line 202
202
203<script>(function() { 204 var isLoaded = false; 205 function asyncLoad() { 206 if (isLoaded) return; 207 isLoaded = true; 208 var urls = ["\/\/www.powr.io\/powr.js?powr-token=tabanero-cigars.myshopify.com\u0026external-type=shopify\u0026shop=tabanero-cigars.myshopify.com","https:\/\/cdn.hextom.com\/js\/freeshippingbar.js?shop=tabanero-cigars.myshopify.com","\/\/cdn.shopify.com\/proxy\/f16ac8c9f791c95837627a792bd88f164d424279b104fee55ab5f1e9823b8774\/d1639lhkj5l89m.cloudfront.net\/js\/storefront\/uppromote.js?shop=tabanero-cigars.myshopify.com\u0026sp-cache-control=cHVibGljLCBtYXgtYWdlPTkwMA"]; 209 for (var i = 0; i < urls.length; i++) { 210 var s = document.createElement('script'); 211 s.type = 'text/javascript'; 212 s.async = true; 213 s.src = urls[i]; 214 var x = document.getElementsByTagName('script')[0]; 215 x.parentNode.insertBefore(s, x); 216 } 217 }; 218 if(window.attachEvent) { 219 window.attachEvent('onload', asyncLoad); 220 } else { 221 window.addEventListener('load', asyncLoad, false); 222 } 223})();</script>
vendor: 1 bytes, line 223
223
224<script id="__st">var __st={"a":10873052,"offset":-14400,"reqid":"11700b42-27ee-4341-a4ab-6492bc81ec87-1790431202","pageurl":"tabanerocigars.com\/pages\/store-locator","s":"pages-83114885222","u":"36e6f5c7ee83","p":"page","rtyp":"page","rid":83114885222};</script>
vendor: 1 bytes, line 224
224
225<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 225
225
226<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 226
226
227<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//tabanerocigars.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 227
227
228<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 = "//tabanerocigars.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>
228<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 228
228
229<script> 230 window.Shopify = window.Shopify || {}; 231 window.Shopify.MCP = window.Shopify.MCP || {}; 232 window.Shopify.MCP.enabled = true; 233 window.Shopify.MCP.shop = "tabanero-cigars.myshopify.com"; 234 window.Shopify.MCP.mcpEndpoint = "https:\/\/tabanerocigars.com\/api\/mcp"; 235 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"]}}]; 236</script>
vendor: 1 bytes, line 236
236
237<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("\/\/tabanerocigars.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 238</script>
vendor: 1 bytes, line 238
238
239<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://tabanerocigars.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 240</script>
vendor: 1 bytes, line 240
240
241<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 242 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); 243</script>
vendor: 1 bytes, line 243
243
244<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})}})); 245</script>
245 246<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://tabanerocigars.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 247<style id="shopify-accelerated-checkout-cart"> 248 #shopify-buyer-consent { 249 margin-top: 1em; 250 display: inline-block; 251 width: 100%; 252} 253 254#shopify-buyer-consent.hidden { 255 display: none; 256} 257 258#shopify-subscription-policy-button { 259 background: none; 260 border: none; 261 padding: 0; 262 text-decoration: underline; 263 font-size: inherit; 264 cursor: pointer; 265} 266 267#shopify-subscription-policy-button::before { 268 box-shadow: none; 269} 270 271 </style> 272
273<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
273 274
274<script type="text/javascript" src="https://s3.amazonaws.com/lastsecondcoupon/js/freeshippingbar.js?shop=tabanero-cigars.myshopify.com"></script>
274 275 <meta name="msvalidate.01" content="09562E3AB5B7D32A03B04E412EF0C3D6" /> 276
276<script type="text/javascript"> 277(function e(){var e=document.createElement("script");e.type="text/javascript",e.async=true,e.src="//staticw2.yotpo.com/u7HZf07asMX45HGHCWKPMR9SrvMWFfoOwnhFzqc2/widget.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})(); 278</script>
278 279 280 281 282 283
283<script type="application/ld+json"> 284{ 285 "@context": "http://schema.org", 286 "@type": "Organization", 287 "name": "Tabanero Cigars", 288 "url": "https://tabanerocigars.com/", 289 "logo": "https://cdn.shopify.com/s/files/1/1087/3052/t/9/assets/logo.png?v=1827795941840822156", 290 "contactPoint": [ 291 { 292 "@type": "ContactPoint", 293 "contactType": "customer service", 294 "telephone":"+18134026316", 295 "email":"[email protected]", 296 "areaServed": [ 297 "United States" 298 ], 299 "availableLanguage": [ 300 "English" 301 ] 302 } 303 ] 304} 305</script>
vendor: 1 bytes, line 305
305
306<script type="application/ld+json"> 307{ 308 "@context": "http:\/\/schema.org", 309 "@type": "LocalBusiness", 310 "name": "Tabanero Cigars", 311 "url": "https://tabanerocigars.com/", 312 "description":"WHETHER YOU ARE A NEWBIE, WANT TO BUY IT FOR A FRIEND, OR COMING WITH A PREDETERMINED LIST OF CIGARS, AT TABANERO CIGARS, WE HAVE SIMPLY THE BEST OPTIONS FOR YOU!", 313 "logo": "https://callremedyplumbing.com/wp-content/uploads/2021/06/cropped-remedy-plumbing-header-208x114.png", 314 "image": [ 315 { 316 "@type": "imageObject", 317 "url": "https://cdn.shopify.com/s/files/1/1087/3052/files/AboutBanner_1fc95ada-4d78-4bd2-89cf-ee2f20f6ffca.png?5559584682953571036" 318 } 319 ], 320 "telephone":"+18134026316", 321 "email":"[email protected]", 322 "address": { 323 "@type": "PostalAddress", 324 "streetAddress": "1601 E 7th Ave", 325 "addressLocality": "Tampa, FL", 326 "postalCode": "33605", 327 "addressCountry": "United States" 328 }, 329 "geo": { 330 "@type": "GeoCoordinates", 331 "latitude": "27.960149", 332 "longitude": "-82.441591" 333 }, 334"openingHoursSpecification": [{ 335 "@type": "OpeningHoursSpecification", 336 "dayOfWeek": [ 337 "Monday", 338 "Tuesday", 339 "Wednesday", 340 "Thursday" 341 ], 342 "opens": "10:00", 343 "closes": "18:00" 344 },{ 345 "@type": "OpeningHoursSpecification", 346 "dayOfWeek": [ 347 "Friday", 348 "Saturday", 349 "Sunday" 350 ], 351 "opens": "10:00", 352 "closes": "20:00" 353 }], 354 "priceRange": "$$-$$$" 355} 356} 357</script>
357 358 <style> 359 360 361 @media screen and (max-width: 767px){ 362 .evm-wiser-owl-carousel .ws-box-wrapper .evm-ws-card { 363 padding-right: 15px; 364} 365.evm-wiser-owl-carousel#presets2 .ws-box-wrapper .evm-ws-card .ws-card__header h3.ws-card__title { 366 font-size: 12px !important; 367} 368} 369@media screen and (max-width: 590px){ 370.evm_visible_text .evm-wiser-owl-carousel .owl-nav button { 371 top: -20px; 372} 373} 374@media screen and (max-width: 479px){ 375.one-third.column .info .yotpo-reviews-star-ratings-widget .yotpo-widget-clear button.yotpo-sr-bottom-line-summary span.yotpo-sr-bottom-line-text { 376 font-size: 14px !important; 377} 378.one-third.column .info .yotpo-reviews-star-ratings-widget .yotpo-widget-clear button.yotpo-sr-bottom-line-summary svg { 379 width: 10px; 380 height: 10px; 381} 382.one-third.column .info span.title { 383 font-size: 14px; 384 line-height: 20px; 385} 386} 387.container .four.columns iframe { 388 width: 100%; 389} 390 391 392 393 394 </style> 395<!--
395<script async src="https://cdn-widgetsrepository.yotpo.com/v1/loader/u7HZf07asMX45HGHCWKPMR9SrvMWFfoOwnhFzqc2" type="text/javascript"></script>
395 --> 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422<div class="evm-wiser-popup-mainsection"></div> 423 424<!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 425 426 427 428 429 430 431 432 433 434 435 436 437
437<script async src="https://static.klaviyo.com/onsite/js/Smy9AK/klaviyo.js?company_id=Smy9AK"></script>
437 438
438<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>
438 439 440 441 442 443 444 445
445<script> 446 window.klaviyoReviewsProductDesignMode = false 447 </script>
447 448 449 450 451 <!-- BEGIN app snippet: customer-hub-data -->
451<script> 452 if (!window.customerHub) { 453 window.customerHub = {}; 454 } 455 window.customerHub.storefrontRoutes = { 456 login: "/account/login?return_url=%2F%23k-hub", 457 register: "/account/register?return_url=%2F%23k-hub", 458 logout: "/account/logout", 459 profile: "/account", 460 addresses: "/account/addresses", 461 }; 462 463 window.customerHub.userId = null; 464 465 window.customerHub.storeDomain = "tabanero-cigars.myshopify.com"; 466 467 468 469 470 window.customerHub.storeLocale = { 471 currentLanguage: 'en', 472 currentCountry: 'US', 473 availableLanguages: [ 474 475 { 476 iso_code: 'en', 477 endonym_name: 'English' 478 } 479 480 ], 481 availableCountries: [ 482 483 { 484 iso_code: 'US', 485 name: 'United States', 486 currency_code: 'USD' 487 } 488 489 ] 490 }; 491 492</script>
492 493<!-- END app snippet --> 494 495 496 497 498 499 500 501<!-- END app block --><!-- BEGIN app block: shopify://apps/pagefly-ai-page-builder/blocks/app-embed/83e179f7-59a0-4589-8c66-c0dddf959200 --> 502 503<!-- BEGIN app snippet: pagefly-cro-ab-testing-main --> 504 505 506 507 508 509 510
511<script> 512 ;(function () { 513 const url = new URL(window.location) 514 const viewParam = url.searchParams.get('view') 515 if (viewParam && viewParam.includes('variant-pf-')) { 516 url.searchParams.set('pf_v', viewParam) 517 url.searchParams.delete('view') 518 window.history.replaceState({}, '', url) 519 } 520 })() 521</script>
521 522 523 524
525<script type='module'> 526 527 window.PAGEFLY_CRO = window.PAGEFLY_CRO || {} 528 529 window.PAGEFLY_CRO['data_debug'] = { 530 original_template_suffix: "", 531 allow_ab_test: false, 532 ab_test_start_time: 0, 533 ab_test_end_time: 0, 534 today_date_time: 1790431202000, 535 } 536 window.PAGEFLY_CRO['GA4'] = { enabled: false} 537</script>
537 538 539<!-- END app snippet --> 540 541 542 543 544 545 546 547 548
548<script src='https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-helper.js' defer='defer'></script>
548 549 550
550<script src='https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-general-helper.js' defer='defer'></script>
550 551 552
552<script src='https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-snap-slider.js' defer='defer'></script>
552 553 554
554<script src='https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-slideshow-v3.js' defer='defer'></script>
554 555 556
556<script src='https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-slideshow-v4.js' defer='defer'></script>
556 557 558
558<script src='https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-glider.js' defer='defer'></script>
558 559 560
560<script src='https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-slideshow-v1-v2.js' defer='defer'></script>
560 561 562
562<script src='https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-product-media.js' defer='defer'></script>
562 563 564
564<script src='https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-product.js' defer='defer'></script>
564 565 566
567<script id='pagefly-helper-data' type='application/json'> 568 { 569 "page_optimization": { 570 "assets_prefetching": false 571 }, 572 "elements_asset_mapper": { 573 "Accordion": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-accordion.js", 574 "Accordion3": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-accordion3.js", 575 "CountDown": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-countdown.js", 576 "GMap1": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-gmap.js", 577 "GMap2": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-gmap.js", 578 "GMapBasicV2": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-gmap.js", 579 "GMapAdvancedV2": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-gmap.js", 580 "HTML.Video": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-htmlvideo.js", 581 "HTML.Video2": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-htmlvideo2.js", 582 "HTML.Video3": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-htmlvideo2.js", 583 "BackgroundVideo": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-htmlvideo2.js", 584 "Instagram": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-instagram.js", 585 "Instagram2": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-instagram.js", 586 "Insta3": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-instagram3.js", 587 "Tabs": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-tab.js", 588 "Tabs3": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-tab3.js", 589 "ProductBox": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-cart.js", 590 "FBPageBox2": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-facebook.js", 591 "FBLikeButton2": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-facebook.js", 592 "TwitterFeed2": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-twitter.js", 593 "Paragraph4": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-paragraph4.js", 594 595 "AliReviews": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 596 "BackInStock": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 597 "GloboBackInStock": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 598 "GrowaveWishlist": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 599 "InfiniteOptionsShopPad": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 600 "InkybayProductPersonalizer": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder
600-359/assets/pagefly-3rd-elements.js", 601 "LimeSpot": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 602 "Loox": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 603 "Opinew": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 604 "Powr": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 605 "ProductReviews": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 606 "PushOwl": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 607 "ReCharge": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 608 "Rivyo": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 609 "TrackingMore": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 610 "Vitals": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js", 611 "Wiser": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-3rd-elements.js" 612 }, 613 "custom_elements_mapper": { 614 "pf-click-action-element": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-click-action-element.js", 615 "pf-dialog-element": "https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-dialog-element.js" 616 } 617 } 618</script>
618 619
620<script id='pagefly-heatmap-config' type='application/json'> 621 {} 622</script>
vendor: 1 bytes, line 622
622
623<script> 624 (function () { 625 var el = document.getElementById('pagefly-heatmap-config') 626 if (!el) { window.__pagefly_heatmap_config__ = {}; return } 627 try { 628 window.__pagefly_heatmap_config__ = JSON.parse(el.textContent || '{}') || {} 629 } catch (e) { 630 window.__pagefly_heatmap_config__ = {} 631 } 632 })() 633</script>
vendor: 1 bytes, line 633
633
634<script> 635 // Heatmap overlay loader. Three gates, all of them cheap, none of them trusting the URL: 636 // the visitor must have arrived on a pf_heatmap link, the SERVER must have published an 637 // overlay path in the metafield, and this page must already be one the merchant enabled 638 // tracking for. The last gate is what stops a crafted link pulling the asset onto an 639 // arbitrary storefront page. Everything else is decided inside the asset, and by the server. 640 (function () { 641 var cfg = window.__pagefly_heatmap_config__ || {} 642 var id = (window.__pagefly_page_setting__ || {}).pageId 643 if (!/[#&]pf_heatmap=/.test(window.location.hash || '')) return 644 if (!cfg.overlay_data_path || !Array.isArray(cfg.enabled_page_ids)) return 645 if (!id || cfg.enabled_page_ids.indexOf(id) === -1) return 646 var s = document.createElement('script') 647 s.src = 'https://cdn.shopify.com/extensions/01a0d61e-3051-7383-be09-dc10c7351f79/pagefly-ai-page-builder-359/assets/pagefly-heatmap-overlay.js' 648 s.defer = true 649 document.head.appendChild(s) 650 })() 651</script>
651 652 653<!-- BEGIN app snippet: pf-ai-schema --> 654<!-- END app snippet --> 655 656 657<!-- END app block --><!-- BEGIN app block: shopify://apps/gift-box/blocks/head/f53ea332-e066-453a-9116-800349284dfb -->
657<script> 658const isProductPage = window.location.pathname.includes("/products/"); 659 660// Allow redirect only on product pages. 661if (isProductPage) { 662 const GHOST_PRODUCT_TYPE = "giftbox_ghost_product"; 663 // Use product handle to check the type of the product. 664 const product_type = ""; 665 if (product_type == GHOST_PRODUCT_TYPE) { 666 // Redirect to the GP parent URL stored in the GP's metafields. 667 const parent_product_url = ''; 668 if (parent_product_url === null || parent_product_url === '') { 669 window.location.replace("/"); 670 } else { 671 window.location.replace(parent_product_url); 672 } 673 } 674} 675</script>
675 676
677<script 678 src="https://giftbox.ds-cdn.com/static/main.js?shop=tabanero-cigars.myshopify.com" 679 680></script>
680 681 682 683<!-- END app block -->
683<script src="https://cdn.shopify.com/extensions/01a0ca4b-28c5-7732-959d-2591e6d4564f/free-shipping-bar-268/assets/freeshippingbar.js" type="text/javascript" defer="defer"></script>
683 684<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
685<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: 10873052,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "page"};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 685
685
686<script> 687 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 688</script>
vendor: 1 bytes, line 688
688
689<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}
689).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: 10873052,storefrontBaseUrl: "https://tabanerocigars.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://tabanerocigars.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2773516586","configuration":"{\"shopId\":\"40974\",\"env\":\"production\",\"metaData\":\"[]\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"de1f24f7dbc015cb4d3a1ef53d018b51","type":"APP","apiClientId":2773553,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
689,"dataSharingState":"unrestricted"},{"id":"2661777706","configuration":"{\"appProxyPath\":\"\/apps\/pagefly\",\"analyticsEndpoint\":\"undefined\/analytics-v2\/events\",\"focusDuration\":\"3\",\"enableAdvancedTracking\":\"true\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"1e023fb0c721518c0dce4129e4d87a86","type":"APP","apiClientId":1743893,"privacyPurposes":["ANALYTICS","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1843167530","configuration":"{\"accountID\":\"Smy9AK\",\"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":"1275461930","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"AW-966561769\\\",\\\"GT-TQK47HDT\\\"],\\\"target_country\\\":\\\"US\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":\\\"AW-966561769\\\/exQZCPnlvcYaEOmf8swD\\\"},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":\\\"AW-966561769\\\/XfkECLTxvcYaEOmf8swD\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"AW-966561769\\\/sX4nCLHxvcYaEOmf8swD\\\",\\\"MC-PF8MZTWV8G\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"AW-966561769\\\/l8zUCPblvcYaEOmf8swD\\\",\\\"MC-PF8MZTWV8G\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"AW-966561769\\\/UdG4CK7xvcYaEOmf8swD\\\",\\\"MC-PF8MZTWV8G\\\"]},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":\\\"AW-966561769\\\/WyBXCLfxvcYaEOmf8swD\\\"},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":\\\"AW-966561769\\\/HIlDCKvxvcYaEOmf8swD\\\"}],\\\"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":"138150186","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["MARKETING"],"name":"Meta pixel (migrated)"}
689,{"id":"177668394","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":[],"name":"custom pixel"},{"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":"Tabanero Cigars","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"tabanero-cigars.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/tabanerocigars.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://tabanerocigars.com/cdn","c8540278we853e1abpb62b2c4amde256306",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"false","themeId":"179687194922","themePublished":"true","eventMetadataId":"b66197e1-f720-4add-8575-72a99b4dcc77","pageType":"page","resourceId":"83114885222","shopId":"10873052","storefrontBaseUrl":"https:\/\/tabanerocigars.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"c8540278we853e1abpb62b2c4amde256306","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
689<script> 690 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 691 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 692 window.ShopifyAnalytics.meta.currency = 'USD'; 693 var meta = {"page":{"pageType":"page","resourceType":"page","resourceId":83114885222,"requestId":"11700b42-27ee-4341-a4ab-6492bc81ec87-1790431202"}}; 694 for (var attr in meta) { 695 window.ShopifyAnalytics.meta[attr] = meta[attr]; 696 } 697</script>
vendor: 1 bytes, line 697
697
698<script class="analytics"> 699 (function () { 700 var customDocumentWrite = function(content) { 701 var jquery = null; 702 703 if (window.jQuery) { 704 jquery = window.jQuery; 705 } else if (window.Checkout && window.Checkout.$) { 706 jquery = window.Checkout.$; 707 } 708 709 if (jquery) { 710 jquery('body').append(content); 711 } 712 }; 713 714 var hasLoggedConversion = function(token) { 715 if (token) { 716 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 717 } 718 return false; 719 } 720 721 var setCookieIfConversion = function(token) { 722 if (token) { 723 var twoMonthsFromNow = new Date(Date.now()); 724 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 725 726 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 727 } 728 } 729 730 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 731 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 732 if (trekkie.integrations) { 733 return; 734 } 735 trekkie.methods = [ 736 'identify', 737 'page', 738 'ready', 739 'track', 740 'trackForm', 741 'trackLink' 742 ]; 743 trekkie.factory = function(method) { 744 return function() { 745 var args = Array.prototype.slice.call(arguments); 746 args.unshift(method); 747 trekkie.push(args); 748 if (method == 'track' || method == 'page') { 749 var pageUrl; 750 try { 751 pageUrl = window.location.href; 752 } catch (e) {} 753 var pageReferrer; 754 try { 755 pageReferrer = document.referrer; 756 } catch (e) {} 757 try { 758 if (window.__TREKKIE_SHIM_QUEUE == null) { 759 window.__TREKKIE_SHIM_QUEUE = []; 760 } 761 window.__TREKKIE_SHIM_QUEUE.push({ 762 from: 'trekkie-stub', 763 method: method, 764 args: args.slice(1), 765 pageContext: { 766 url: pageUrl, 767 referrer: pageReferrer 768 } 769 }); 770 } catch (e) { 771 // no-op 772 } 773 } 774 return trekkie; 775 }; 776 }; 777 for (var i = 0; i < trekkie.methods.length; i++) { 778 var key = trekkie.methods[i]; 779 trekkie[key] = trekkie.factory(key); 780 } 781 trekkie.load = function(config) { 782 trekkie.config = config || {}; 783 trekkie.config.initialDocumentCookie = document.cookie; 784 var first = document.getElementsByTagName('script')[0]; 785var script = document.createElement('script'); 786script.type = 'text/javascript'; 787script.onerror = function(e) { 788 var scriptFallback = document.createElement('script'); 789 scriptFallback.type = 'text/javascript'; 790 scriptFallback.onerror = function(error) { 791 var Monorail = { 792 produce: function produce(monorailDomain, schemaId, payload) { 793 var currentMs = new Date().getTime(); 794 var event = { 795 schema_id: schemaId, 796 payload: payload, 797 metadata: { 798 event_created_at_ms: currentMs, 799 event_sent_at_ms: currentMs 800 } 801 }; 802 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 803 }, 804 sendRequest: function sendRequest(endpointUrl, payload) { 805 // Try the sendBeacon API 806 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 807 var blobData = new window.Blob([payload], { 808 type: 'text/plain' 809 }); 810 811 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 812 return true; 813 } // sendBeacon was not successful 814 815 } // XHR beacon 816 817 var xhr = new XMLHttpRequest(); 818 819 try { 820 xhr.open('POST', endpointUrl); 821 xhr.setRequestHeader('Content-Type', 'text/plain'); 822 xhr.send(payload); 823 } catch (e) { 824 console.log(e); 825 } 826 827 return false; 828 }, 829 isIos12: function isIos12() { 830 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 831 } 832 }; 833 Monorail.produce('monorail-edge.shopifysvc.com', 834 'trekkie_storefront_load_errors/1.1', 835 {shop_id: 10873052, 836 theme_id: 179687194922, 837 app_name: "storefront", 838 context_url: window.location.href, 839 source_url: "//tabanerocigars.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js"}); 840 841 }; 842 scriptFallback.async = true; 843 scriptFallback.src = '//tabanerocigars.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 844 first.parentNode.insertBefore(scriptFallback, first); 845}; 846script.async = true; 847script.src = '//tabanerocigars.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 848first.parentNode.insertBefore(script, first); 849 850 }; 851 trekkie.load( 852 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":10873052,"isMerchantRequest":null,"themeId":179687194922,"themeCityHash":"14344237971095911656","contentLanguage":"en","currency":"USD","eventMetadataId":"b66197e1-f720-4add-8575-72a99b4dcc77"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":false,"source":"trekkie-storefront-renderer","apiClientId":580111}} 853 ); 854 855 var loaded = false;
856 trekkie.ready(function() { 857 if (loaded) return; 858 loaded = true; 859 860 window.ShopifyAnalytics.lib = window.trekkie; 861 862 var originalDocumentWrite = document.write; 863 document.write = customDocumentWrite; 864 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 865 document.write = originalDocumentWrite; 866 867 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 868 var token = match? match[1]: undefined; 869 if (!hasLoggedConversion(token)) { 870 setCookieIfConversion(token); 871 872 } 873 }); 874 875 window.ShopifyAnalytics.lib.page(null,{"pageType":"page","resourceType":"page","resourceId":83114885222,"requestId":"11700b42-27ee-4341-a4ab-6492bc81ec87-1790431202","shopifyEmitted":true}); 876 877 var eventsListenerScript = document.createElement('script'); 878 eventsListenerScript.async = true; 879 eventsListenerScript.src = "//tabanerocigars.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 880 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 881})();</script>
881 882
882<script> 883 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 884 window.ga = function ga() { 885 (window.ga.q = window.ga.q || []).push(arguments); 886 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 887 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 888 } 889 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."); 890 }; 891 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 892 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 893 } 894 } 895</script>
vendor: 1 bytes, line 895
895
896<script 897 defer 898 src="https://tabanerocigars.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 899 data-application="storefront-renderer" 900 data-shop-id="10873052" 901 data-render-region="gcp-us-central1" 902 data-page-type="page" 903 data-theme-instance-id="179687194922" 904 data-theme-name="" 905 data-theme-version="" 906 data-monorail-region="shop_domain" 907 data-resource-timing-sampling-rate="10" 908 data-shs="true" 909 data-shs-beacon="true" 910 data-shs-export-with-fetch="true" 911 data-shs-logs-sample-rate="1" 912 data-shs-beacon-endpoint="https://tabanerocigars.com/api/collect" 913></script>
913 914<meta name="shopify-y" content="d563ed5d-adba-413a-9860-3b168426e49b" data-expiration="1821988802000"><meta name="shopify-s" content="2258b10a-dcb2-455e-b4c2-0ae494097f3f" data-expiration="1790433002000"><meta name="new-cookie-storage-activated" content="t"> 915</head> 916 <body class="page"> 917 <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 917-918
917 918<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
918GTM-KXGJRLQW
vendor: 83 bytes, lines 918-919
918" 919height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
920<!-- End Google Tag Manager (noscript) --> 921 <div> 922 <div id="header" class="mm-fixed-top"> 923 <a href="#nav" class="icon-menu"> <span>Menu</span></a> 924 <a href="https://tabanerocigars.com" title="Tabanero Cigars" class="logo-header"> 925 926 <img class="mobile-logo" src="//tabanerocigars.com/cdn/shop/t/14/assets/logo.png?v=18277959418408221561755142115" alt="Tabanero Cigars" data-src="//tabanerocigars.com/cdn/shop/t/14/assets/logo.png?v=18277959418408221561755142115" /> 927 928 </a> 929 <a href="#cart" class="icon-cart right"> <span>Cart</span></a> 930 </div> 931 932 <div class="hidden"> 933 <div id="nav" style="z-index:100000"> 934 <ul> 935 936 937 <li ><a href="/collections/cigars">Cigars</a> 938 <ul> 939 940 941 <li ><a href="/collections/mild">Mild</a></li> 942 943 944 945 <li ><a href="/collections/medium">Medium</a></li> 946 947 948 949 <li ><a href="/collections/medium-to-full">Medium to Full</a></li> 950 951 952 953 <li ><a href="/collections/full">Full</a></li> 954 955 956 957 <li ><a href="/collections/sun-grown">Sun-Grown</a></li> 958 959 960 961 <li ><a href="/collections/maduro">Maduro</a></li> 962 963 964 965 <li ><a href="/collections/connecticut">Connecticut</a></li> 966 967 968 969 <li ><a href="/collections/cigar-bundles/BUNDLE-CIGARS">Cigar Bundles</a></li> 970 971 972 </ul> 973 </li> 974 975 976 977 <li ><a href="/collections/accessories">Lifestyle</a> 978 <ul> 979 980 981 <li ><a href="/collections/accessories">Accessories</a></li> 982 983 984 985 <li ><a href="/collections/coffee-1">Coffee</a></li> 986 987 988 989 <li ><a href="/collections/apparel">Apparel</a></li> 990 991 992 993 <li ><a href="/collections/gifts">Gifts</a></li> 994 995 996 997 <li ><a href="https://tabanerocigars.com/pages/tabanero-social-reserve">Social Reserve and Tours</a></li> 998 999 1000 </ul> 1001 </li> 1002 1003 1004 1005 <li ><a href="/pages/about-us">About Us</a> 1006 <ul> 1007 1008 1009 <li ><a href="/pages/about-us">About Us</a></li> 1010 1011 1012 1013 <li ><a href="/blogs/tabanero-blog">Our Blog</a></li> 1014 1015 1016 1017 <li class="Selected"><a href="/pages/store-locator">Our Retailers</a></li> 1018 1019 1020 </ul> 1021 </li> 1022 1023 1024 1025 <li ><a href="/pages/contact">Contact</a></li> 1026 1027 1028 1029 1030 <li> 1031 <a href="/account/login" id="customer_login_link">My Account</a> 1032 </li> 1033 1034 1035 </ul> 1036 </div> 1037 1038 <form action="/cart" method="post" id="cart" style="z-index:100000"> 1039 <ul data-money-format="$ {{amount}}" data-shop-currency="USD" data-shop-name="Tabanero Cigars"> 1040 <li class="mm-subtitle"><a class="mm-subclose continue" href="#cart">Continue Shopping</a></li> 1041 1042 1043 <li class="mm-label empty_cart"><a href="/cart">Your Cart is Empty</a></li> 1044 1045 </ul> 1046 </form> 1047 </div> 1048 1049 <div class="header mm-fixed-top header_bar"> 1050 <div id="fsb_placeholder"></div> 1051 1052 1053 <div class="container"> 1054 <div class="four columns logo desktop-only"> 1055 <a href="https://tabanerocigars.com" title="Tabanero Cigars"> 1056 1057 <img src="//tabanerocigars.com/cdn/shop/t/14/assets/logo.png?v=18277959418408221561755142115" alt="Tabanero Cigars" data-src="//tabanerocigars.com/cdn/shop/t/14/assets/logo.png?v=18277959418408221561755142115" /> 1058 1059 </a> 1060 </div> 1061 1062 <div class="twelve columns nav mobile_hidden"> 1063 <ul class="menu"> 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 <li><a href="/collections/cigars" class="sub-menu menu-Cigars ">Cigars
1097 <span class="arrow">â¾</span></a> 1098 <div class="dropdown "> 1099 <ul> 1100 1101 1102 1103 1104 <li><a href="/collections/mild">Mild</a></li> 1105 1106 1107 1108 1109 1110 <li><a href="/collections/medium">Medium</a></li> 1111 1112 1113 1114 1115 1116 <li><a href="/collections/medium-to-full">Medium to Full</a></li> 1117 1118 1119 1120 1121 1122 <li><a href="/collections/full">Full</a></li> 1123 1124 1125 1126 1127 1128 <li><a href="/collections/sun-grown">Sun-Grown</a></li> 1129 1130 1131 1132 1133 1134 <li><a href="/collections/maduro">Maduro</a></li> 1135 1136 1137 1138 1139 1140 <li><a href="/collections/connecticut">Connecticut</a></li> 1141 1142 1143 1144 1145 1146 <li><a href="/collections/cigar-bundles/BUNDLE-CIGARS">Cigar Bundles</a></li> 1147 1148 1149 1150 1151 </ul> 1152 </div> 1153 </li> 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 <li><a href="/collections/accessories" class="sub-menu menu-Lifestyle ">Lifestyle 1179 <span class="arrow">â¾</span></a> 1180 <div class="dropdown "> 1181 <ul> 1182 1183 1184 1185 1186 <li><a href="/collections/accessories">Accessories</a></li> 1187 1188 1189 1190 1191 1192 <li><a href="/collections/coffee-1">Coffee</a></li> 1193 1194 1195 1196 1197 1198 <li><a href="/collections/apparel">Apparel</a></li> 1199 1200 1201 1202 1203 1204 <li><a href="/collections/gifts">Gifts</a></li> 1205 1206 1207 1208 1209 1210 <li><a href="https://tabanerocigars.com/pages/tabanero-social-reserve">Social Reserve and Tours</a></li> 1211 1212 1213 1214 1215 </ul> 1216 </div> 1217 </li> 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 <li><a href="/pages/about-us" class="sub-menu menu-About Us active">About Us 1237 <span class="arrow">â¾</span></a> 1238 <div class="dropdown "> 1239 <ul> 1240 1241 1242 1243 1244 <li><a href="/pages/about-us">About Us</a></li> 1245 1246 1247 1248 1249 1250 <li><a href="/blogs/tabanero-blog">Our Blog</a></li> 1251 1252 1253 1254 1255 1256 <li><a href="/pages/store-locator">Our Retailers</a></li> 1257 1258 1259 1260 1261 </ul> 1262 </div> 1263 </li> 1264 1265 1266 1267 <li><a href="/pages/contact" class="top-link ">Contact</a></li> 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 <li> 1296 <a href="/account" title="My Account " class="icon-user"></a> 1297 </li> 1298 1299 1300 <li> 1301 <a href="/search" title="Search" class="icon-search" id="search-toggle"></a> 1302 </li> 1303 1304 1305 <li> 1306 <a href="#cart" class="icon-cart cart-button"> <span>
1306Cart</span></a> 1307 </li> 1308 </ul> 1309 </div> 1310 </div> 1311 </div> 1312 1313 1314 1315 <div class="container main content "> 1316 1317 1318 1319 1320 1321 <div class="sixteen columns clearfix collection_nav"> 1322 <h1 class="collection_title"> 1323 Store Locator 1324 </h1> 1325</div> 1326 1327<div class="sixteen columns page"> 1328 <!-- Start Stockist.co widget --> 1329<div data-stockist-widget-tag="u13286">Loading store locator 1330from <a href="https://stockist.co">Stockist store locator</a>...</div>
1331<script> 1332 (function(s,t,o,c,k){c=s.createElement(t);c.src=o;c.async=1; 1333 k=s.getElementsByTagName(t)[0];k.parentNode.insertBefore(c,k); 1334 })(document,'script','//stockist.co/embed/v1/widget.min.js'); 1335</script>
1335 1336<!-- End Stockist.co widget --> 1337</div>
1337<script data-locksmith> 1338 var load = function () { 1339 1340 if (document.querySelectorAll('.locksmith-manual-trigger').length > 0) { 1341 Locksmith.ping(); 1342 } 1343 1344 1345 Locksmith.util.on('submit', 'locksmith-resource-form', function (event) { 1346 event.preventDefault(); 1347 var data = Locksmith.util.serializeForm(event.target); 1348 Locksmith.postResource(data, { spinner: false, container: 'locksmith-content' }); 1349 }); 1350 1351 Locksmith.util.on('click', 'locksmith-manual-trigger', function (event) { 1352 event.preventDefault(); 1353 Locksmith.postResource({}, { spinner: true, container: document }); 1354 }); 1355 1356 Locksmith.submitPasscode = function (passcode) { 1357 Locksmith.postResource( 1358 { passcode: passcode }, 1359 { spinner: false, container: 'locksmith-content' } 1360 ); 1361 }; 1362 }; 1363 1364 if (typeof Locksmith !== 'undefined') { 1365 load(); 1366 } else { 1367 window.addEventListener('load', load); 1368 } 1369 </script>
1369 1370 1371 1372 </div> 1373 1374 <div class="sub-footer"> 1375 <div class="container"> 1376 1377 <div class="four columns"> 1378 1379 <h6 class="title">Tabanero Customer Links</h6> 1380 <ul class="footer_menu"> 1381 1382<li><a href="https://www.tabanerocigars.com/account" title="My Account">My Account</a></li> 1383 1384<li><a href="/pages/store-locator" title="Our Retailers">Our Retailers</a></li> 1385 1386<li><a href="https://tabanerocigars.com/pages/tabanero-social-reserve" title="Social Reserve and Tours">Social Reserve and Tours</a></li> 1387 1388<li><a href="/pages/cigar-show" title="Cigar Show">Cigar Show</a></li> 1389 1390<li><a href="http://ipcpr.informz.net/z/cjUucD9taT00MTM5NTExJnA9MSZ1PTQzNzIzMzY4MCZsaT00NTYyMTc3MA/index.html" title="Latest Cigar Laws">Latest Cigar Laws</a></li> 1391 1392<li><a href="/pages/terms-and-conditions" title="Terms and Conditions">Terms and Conditions</a></li> 1393 1394 </ul> 1395 1396 1397 <ul class="social_icons"> 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 </ul> 1420 1421 </div> 1422 1423 <div class="four columns"> 1424 <h6 class="title">Customer Reviews</h6> 1425
1425<script type="text/javascript"> var yotpo_app_key = "u7HZf07asMX45HGHCWKPMR9SrvMWFfoOwnhFzqc2"; 1426 1427 (function e(){var e=document.createElement("script");e.type="text/javascript",e.async=true,e.src="//staticw2.yotpo.com/u7HZf07asMX45HGHCWKPMR9SrvMWFfoOwnhFzqc2/widget.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})(); 1428 1429 </script>
1429 1430 <div id="y-badges" class="yotpo yotpo-badge badge-init"> </div> 1431 </div> 1432 1433 <div class="four columns"> 1434 1435 <h6 class="title">Our Location</h6> 1436 <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3524.1046790144737!2d-82.44374508454288!3d27.960080220945724!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x88c2c450e780a34b%3A0x8abef724564e12f9!2sTabanero+Cigars!5e0!3m2!1sen!2sus!4v1464263860881" width="270" height="200" frameborder="0" style="border: 0;" allowfullscreen=""></iframe> 1437 1438 1439 </div> 1440 1441 <div class="four columns"> 1442 1443 <h6 class="title">News & Updates</h6> 1444 <p>Sign up to get the latest on sales, new releases and more â¦</p> 1445 <div class="newsletter "> 1446 <p class="message"></p> 1447 1448 <form method="post" action="/contact#contact_form" id="contact_form" accept-charset="UTF-8" class="contact-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /> 1449 1450 1451 <input type="hidden" name="contact[tags]" value="prospect,newsletter"/> 1452 <input type="hidden" name="contact[first_name]" value="Newsletter" /> 1453 <input type="hidden" name="contact[last_name]" value="Subscriber" /> 1454 1455 <input type="email" class="contact_email" name="contact[email]" required pattern="[^ @]*@[^ @]*" placeholder="Enter your email address..." /> 1456 <input type='submit' class="action_button sign_up" value="Sign Up" /> 1457 </form> 1458 1459</div> 1460 1461 </div> 1462 </div> 1463 </div> 1464 1465 <div class="footer"> 1466 <div class="container"> 1467 <div class="sixteen columns"> 1468 <img alt="PCA Member Logo" src="https://cdn.shopify.com/s/files/1/1087/3052/files/PCA-logo-green.png?v=1711388333" style="width: 200px;" /> 1469 <p class="credits"> 1470 © 2026 <a href="/" title="">Tabanero Cigars</a>. 1471 <br>WARNING: We do not sell tobacco or tobacco related products to anyone under the age of 21 1472 1473 <!-- (c) 2005, 2020. Authorize.Net is a registered trademark of CyberSource Corporation --><div class="AuthorizeNetSeal" style="text-align: center; margin: 0 auto;"> 1474
1474<script type="text/javascript" language="javascript">var ANS_customer_id="8db14d70-ec06-4b93-a8e1-78628b26c293";</script>
1474 1475
1475<script type="text/javascript" language="javascript" src="https://verify.authorize.net/anetseal/seal.js" ></script>
1475 1476 </div> 1477 <img alt="Bitpay Logo" src="https://cdn.shopify.com/s/files/1/1087/3052/files/bitpay-logo.png?v=1587602945" style="width: 100px;" /> 1478 </p> 1479 <div class="payment_methods "> 1480 1481 1482 1483 <img src="//tabanerocigars.com/cdn/shop/t/14/assets/cc-visa-light.png?v=19225777317410655261755142115" alt="Visa" /> 1484 1485 <img src="//tabanerocigars.com/cdn/shop/t/14/assets/cc-mastercard-light.png?v=171771086014895870891755142115" alt="Mastercard" /> 1486 <img src="//tabanerocigars.com/cdn/shop/t/14/assets/cc-amex-light.png?v=148644655313158965311755142115" alt="American Express" /> 1487 1488 <img src="//tabanerocigars.com/cdn/shop/t/14/assets/cc-discover-light.png?v=128465476576667876611755142115" alt="Discover" /> 1489 1490 </div> 1491 </div> 1492 </div> 1493 1494 <div id="search"> 1495 <div class="container"> 1496 <div class="ten columns offset-by-three center"> 1497 <div class="right search-close"> 1498 X 1499 </div> 1500 <form action="/search"> 1501 1502 <input type="hidden" name="type" value="product" /> 1503 1504 <span class="icon-search search-submit"></span> 1505 <input type="text" name="q" placeholder="Search Tabanero Cigars..." value="" autocapitalize="off" autocomplete="off" autocorrect="off" /> 1506 </form> 1507 </div> 1508 </div> 1509 </div> 1510 </div> 1511 1512 1513 1514 1515 1516
1516<script src="//tabanerocigars.com/cdn/shop/t/14/assets/custom.js?v=112944275039670846521755142115" type="text/javascript"></script>
1516 1517 1518
1518<script type="text/javascript" src="https://birdeye.com/embed/v6/151846822555444/1/3631175232/a460d66a2f189511d558f50884fc54aee094b02900844d15"></script>
1518<div id="bf-revz-widget-3631175232"></div> 1519<style type="text/css"> 1520 #mc_embed_signup{background:#ffffff; clear:left; font:14px Helvetica,Arial,sans-serif; } 1521 </style> 1522 1523 1524<!-- **BEGIN** Hextom FSB Integration // Main Include - DO NOT MODIFY --> 1525 <!-- **BEGIN** Hextom FSB Integration // Main - DO NOT MODIFY -->
1526<script type="application/javascript"> 1527 window.hextom_fsb_meta = { 1528 p1: [ 1529 1530 ], 1531 p2: { 1532 1533 }, 1534 p3: [ 1535 1536 ] 1537 }; 1538</script>
1538 1539<!-- **END** Hextom FSB Integration // Main - DO NOT MODIFY --> 1540 <!-- **END** Hextom FSB Integration // Main Include - DO NOT MODIFY --> 1541
1541<script type="text/javascript" src="https://cdn.hextom.com/js/freeshippingbar.js?shop=tabanero-cigars.myshopify.com"></script>
1541 1542 <!-- "snippets/smile-initializer.liquid" was not rendered, the associated app was uninstalled --> 1543 1544<!--
1544<script src="https://chat.tabanerocigars.com/reco.js" defer></script>
1544 --> 1545 1546
1547<script src="https://chat.tabanerocigars.com/upsell.js" async></script>
1547 1548<style> .homepage-icons {max-width: 1200px; margin: 0 auto;} div#lz_popup_btn-AL2JMRm1mT1BvTDJRM__6964546933209456638 {min-width: auto !important; font-size: 30px !important; padding: 6px 16px 10px !important; max-width: 50px !important;} button#lz_close-AL2JMRm1mT1BvTDJRM__6964546933209456638 {background: #000000 !important;} button#lz_refresh-AL2JMRm1mT1BvTDJRM__6964546933209456638 {color: #333 !important;} .homepage-cta-band-top {padding: 50px 0; text-align: center;} .homepage-cta-band-button {max-width: 300px;} .homepage-cta-band-h1 {font-size: 32px; color: #572108;} .tab-cigar-lounge {display: flex; align-items: center; gap: 48px; max-width: 1200px; margin: 0 auto; padding: 60px 20px;} .tab-cigar-lounge__image,.tab-cigar-lounge__content {flex: 1 1 50%;} .tab-cigar-lounge__image img {width: 100%; height: auto; display: block; border-radius: 4px;} .tab-cigar-lounge__content h2 {margin-top: 0; margin-bottom: 20px;} .tab-cigar-lounge__content p {margin-bottom: 16px; line-height: 1.6;} .tab-cigar-lounge__content p:last-child {margin-bottom: 0;} @media screen and (max-width: 749px) {.tab-cigar-lounge {flex-direction: column; gap: 24px; padding: 40px 20px; }} </style> 1549<div id="shopify-block-AU0lvN0R5Rm4rWm1uS__16015553545834452532" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: app_init --> 1550<!-- END app snippet --> 1551
1551<script src="https://cdn.shopify.com/extensions/01a0d8c7-fe84-7de9-849c-cd3a4648eb12/simple-on-time-delivery-495/assets/bird-pickup-script.js" defer></script>
1551 1552</div><div id="shopify-block-AL1NiTER3L3E1RmJoQ__9094328589753815681" class="shopify-block shopify-app-block">
1552<script type="application/javascript"> 1553 window.hextom_fsb_meta = { 1554 p1: [ 1555 1556 ], 1557 p2: { 1558 1559 }, 1560 p3: [ 1561 1562 ], 1563 p4:null, 1564 p5:[], 1565 p6:null, 1566 }; 1567 1568 1569 window.hextom_fsb_config = {"shop_active":"yes","record":false,"bars":[{"bar_id":410076,"updated_on":"2026-09-10T13:44:58.726798+00:00","position":"top_push_v1","adjacent_placement_query":"","adjacent_placement_position":"beforebegin","opacity":1.0,"background_color":"#FFF0A5","bar_border_radius":0,"text_color_one":"#8f640d","text_color_two":"#468966","font":"Montserrat","font_size":16.0,"bar_height":30,"bar_padding":12.0,"message_one":"Free shipping for orders over {{currency_symbol}}{{goal}}","message_two":"Only {{currency_symbol}}{{remainder}} away from free shipping!","message_two_2":"You got free shipping, Only {{currency_symbol}}{{remainder_2}} away from 2-day free shipping","message_three":"Congratulations! You've earned free shipping","message_four":"This item does not count toward achieving free shipping","message_five":"This item does not qualify for free shipping. Shipping fees will apply.","message_six":"At least one item in your cart does not qualify for free shipping:","show_time":0.0,"interval_time":0.0,"display_page":"{\"products\":{\"isTargeting\":false,\"all\":true,\"tags\":\"\",\"productIds\":\"\",\"collectionIds\":\"\"},\"collections\":{\"isTargeting\":false,\"all\":true,\"collectionIds\":\"\"},\"all\":false,\"home\":false,\"urls\":\"/cart\",\"keywords\":\"\"}","exclude_page":"{\"products\":{\"isTargeting\":false,\"all\":true,\"tags\":\"\",\"productIds\":\"\",\"collectionIds\":\"\"},\"collections\":{\"isTargeting\":false,\"all\":true,\"collectionIds\":\"\"},\"noPages\":true,\"home\":false,\"urls\":\"\",\"keywords\":\"\"}","schedule_enabled":false,"start_on":"2021-10-25T12:35:57.041487+00:00","end_on":"","new_tab":false,"entire_bar_clickable":false,"bar_link":"https://apps.shopify.com/partners/hextom","countries":"","exclude_countries":"","auto_currency":false,"round_goal_up":false,"currency_code":"USD","currency_exchange_rate":1.0,"currency_symbol":"$","goal":200.0,"goal_2":0.0,"goal_type":"spend_amount","animation_time":0.0,"background_type":"color","background_pic":"","frame_preset":"","frame_color":"","text_shadow_enabled":false,"text_shadow_color":"#000000","text_shadow_offset_x":1,"text_shadow_offset_y":1,"text_shadow_blur":2,"text_outline_enabled":false,"text_outline_color":"#000000","text_outline_width":1,"gradient_color_1":"","gradient_color_2":"","gradient_color_3":"","gradient_degree":90,"motion_code":"","background_moving_speed":0,"target_device":"all","visitor_currency_code":"","close_option":false,"custom_code":"","translation":"","locales":[],"selected_customers_types":"{\"tag\":false,\"spent\":false,\"loggedIn\":false,\"b2b\":false,\"b2bCompanyName\":false,\"b2bCompanyLocation\":false,\"b2bCompanyExternalId\":false,\"b2bCompanyLocationExternalId\":false}","selected_customers_tag":"","selected_customers_spent_object":"{\"comparisonOperator\":\">=\",\"value\":0}","excluded_customers_types":"{\"tag\":false,\"spent\":false,\"loggedIn\":false,\"b2b\":false,\"b2bCompanyName\":false,\"b2bCompanyLocation\":false,\"b2bCompanyExternalId\":false,\"b2bCompanyLocationExternalId\":false}","excluded_customers_tag":"","excluded_customers_spent_object":"{\"comparisonOperator\":\"<=\",\"value\":100}","selected_customers_b2b_company_name":"","selected_customers_b2b_company_location":"","excluded_customers_b2b_company_name":"","excluded_customers_b2b_company_location":"","selected_customers_b2b_company_external_id":"","selected_customers_b2b_company_location_external_id":"","excluded_customers_b2b_company_external_id":"","excluded_customers_b2b_company_location_external_id":"","target_products_type":"all","currency_symbol_position":"before","currency_formatting":"manual","progress_bar_display":false,"progress_bar_color_1":"#ffd030","progress_bar_color_2":"#ffc300","progress_bar_color_bg":"#ebebeb","progress_bar_gradient":false,"progress_bar_border_radius":3,"progress_bar_height":10,"progress_bar_margin_top":7,"progress_bar_margin_bottom":10,"progress_bar_width_percentage":60,"excluded_products":"","excluded_product_collections":"","incurred_fee_products":"","incurred_fee_product_collections":"","excluded_message_type":"special","incurred_message_type":"special","incurred_fee_products_list_in_message":true,"button_link_insert_language_code":true,"targeted_markets_region_codes":"","storefront_api_access_token":"36f1ad4addc3b0db19cfeeb84caf7e6f","hideOnEmptyCart":false,"show_initial_message_until_goal":false,"factor_in_discounts":true,"preview_targeting":"none"}],"theme":{"theme_id":"179687194922","is_xhr":true}}; 1570 1571</script>
1571 1572 1573 1574</div><div id="shopify-block-AMlcvejVwckRBZjdic__2118589882331710876" class="shopify-block shopify-app-block"> 1575<div data-banners style="display:none"> 1576 1577</div> 1578 1579<style> 1580 #cta:hover { 1581 opacity: 0.8; 1582 } 1583 1584 @media(max-width: 400px) { 1585 #cta-button { 1586 padding: 10px 12px; 1587 } 1588 } 1589</style> 1590
1591<script> 1592 window.essentialBannersConfigs = [] 1593 window.essentialProductTags = null 1594 window.essentialCustomerTags = null 1595 window.essentialCurrentProductId = null; 1596 window.essentialStoreDomain = "tabanerocigars.com"; 1597 1598 if (!window.essentialBannersConfigs) { 1599 window.essentialBannersConfigs = []; 1600 } 1601 1602 1603</script>
1603 1604
1605<script src="https://cdn.shopify.com/extensions/01a0a41d-dfa3-7da1-b782-5645acdc094b/essential-icon-badge-banners-1-99/assets/banners-essential-apps.js" defer></script>
1605 1606 1607 1608 1609</div><div id="shopify-block-AL2JMRm1mT1BvTDJRM__6964546933209456638" class="shopify-block shopify-app-block"> 1610<!-- Backdrop --> 1611<div 1612 id="lz_backdrop-AL2JMRm1mT1BvTDJRM__6964546933209456638" 1613 aria-hidden="true" 1614 style=" 1615 position:fixed;inset:0;background:rgba(0,0,0,.4);opacity:0;visibility:hidden;transition:opacity .2s ease; 1616 z-index:3000; 1617 " 1618></div> 1619 1620<!-- Drawer --> 1621<aside 1622 id="lz_drawer-AL2JMRm1mT1BvTDJRM__6964546933209456638" 1623 role="dialog" 1624 aria-modal="true" 1625 aria-label="Loyalty program" 1626 style=" 1627 position:fixed;top:0;right:0;height:100vh;width:420px;max-width:100%; 1628 transform:translateX(100%);transition:transform .25s ease; 1629 background:#fff;color:#111827; 1630 border-left:1px solid #e5e7eb; 1631 border-top-left-radius:12px;border-bottom-left-radius:12px; 1632 box-shadow:-12px 0 24px rgba(0,0,0,.12); 1633 z-index:3001;display:flex;flex-direction:column;overflow:hidden; 1634 " 1635> 1636 <!-- Header --> 1637 <header style="display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #e5e7eb;"> 1638 <strong style="font:600 15px system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;" 1639 >Loyalty program</strong 1640 > 1641 <div style="display:flex;gap:8px;align-items:center;"> 1642 <button 1643 type="button" 1644 id="lz_refresh-AL2JMRm1mT1BvTDJRM__6964546933209456638" 1645 style="border:1px solid #e5e7eb;background:#fafafa;border-radius:999px;padding:6px 12px;cursor:pointer;font-size:13px;" 1646 > 1647 Refresh 1648 </button> 1649 <button 1650 type="button" 1651 id="lz_close-AL2JMRm1mT1BvTDJRM__6964546933209456638" 1652 style="border:0;background:transparent;cursor:pointer;font-size:18px;line-height:1;padding:4px 2px;" 1653 aria-label="Close" 1654 > 1655 â 1656 </button> 1657 </div> 1658 </header> 1659 1660 <!-- Scrollable content --> 1661 <div id="lz_content-AL2JMRm1mT1BvTDJRM__6964546933209456638" style="flex:1;min-height:0;overflow:auto;padding:14px;"> 1662 <div 1663 id="lz_status-AL2JMRm1mT1BvTDJRM__6964546933209456638" 1664 style="font:14px system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;opacity:.7;margin-bottom:8px;" 1665 > 1666 Loading⦠1667 </div> 1668 <div id="lz_cards-AL2JMRm1mT1BvTDJRM__6964546933209456638" style="display:grid;grid-template-columns:1fr;gap:10px;"></div> 1669 </div> 1670 1671 <div 1672 id="lz_modal_backdrop" 1673 style=" 1674 position:fixed;inset:0;background:rgba(0,0,0,.45); 1675 display:none;align-items:center;justify-content:center; 1676 z-index:999999; 1677 " 1678 > 1679 <div 1680 id="lz_modal_box" 1681 style=" 1682 width:90%;max-width:360px;background:#fff;border-radius:12px; 1683 box-shadow:0 10px 30px rgba(0,0,0,.2);padding:20px; 1684 font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif; 1685 " 1686 > 1687 <div 1688 id="lz_modal_title" 1689 style="font-size:18px;font-weight:600;margin-bottom:8px;" 1690 > 1691 Confirm redemption 1692 </div> 1693 1694 <div 1695 id="lz_modal_body" 1696 style="font-size:14px;opacity:.85;margin-bottom:20px;" 1697 > 1698 <!-- dynamic text goes here --> 1699 </div> 1700 1701 <div style="display:flex;gap:10px;"> 1702 <button 1703 id="lz_modal_cancel" 1704 style=" 1705 flex:1;padding:10px;border-radius:8px;border:1px solid #ddd; 1706 font-size:14px;background:#fff;cursor:pointer; 1707 " 1708 > 1709 Cancel 1710 </button> 1711 1712 <button 1713 id="lz_modal_confirm" 1714 style=" 1715 flex:1;padding:10px;border-radius:8px;font-size:14px; 1716 background:#334bf4;color:#fff;border:0;cursor:pointer; 1717 " 1718 > 1719 Confirm 1720 </button> 1721 </div> 1722 </div> 1723 </div> 1724 1725 <div 1726 id="lz_toast" 1727 style=" 1728 position:fixed;top:20px;right:20px;left:20px;z-index:999999; 1729 background:#16a34a;color:#fff;padding:12px 16px;border-radius:8px; 1730 box-shadow:0 4px 10px rgba(0,0,0,.15);font-size:14px;display:none; 1731 text-align:center; 1732 " 1733 > 1734 Success! 1735 </div> 1736 1737 <!-- Footer CTA --> 1738 <footer id="lz_footer-AL2JMRm1mT1BvTDJRM__6964546933209456638" style="padding:20px 14px;border-top:1px solid #e5e7eb;display:none;"> 1739 <button 1740 type="button" 1741 id="lz_view_account-AL2JMRm1mT1BvTDJRM__6964546933209456638" 1742 style=" 1743 width:100%; 1744 max-width:360px; 1745 margin:0 auto; 1746 display:block; 1747 padding:14px 18px; 1748 border-radius:6px; 1749 border:0; 1750 background:#3f6f7e; 1751 color:#ffffff; 1752 font:600 15px system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif; 1753 text-align:center; 1754 cursor:pointer; 1755 " 1756 > 1757 View My Loyalty Account 1758 </button> 1759 </footer> 1760</aside> 1761 1762<!-- Floating Button --> 1763<div 1764 id="lz_popup_btn-AL2JMRm1mT1BvTDJRM__6964546933209456638" 1765 role="button" 1766 tabindex="0" 1767 data-align="right" 1768 data-offx="16" 1769 data-offb="15" 1770 data-bg="#572108" 1771 data-fg="#FFFFFF" 1772 data-r="12" 1773 data-z="3000" 1774 data-label="ð" 1775 style=" 1776 position:fixed;right:16px;bottom:15px; 1777 z-index:3002;padding:10px 16px;background:#572108;color:#FFFFFF; 1778 border:0;border-radius:12px; 1779 box-shadow:0 10px 20px rgba(0,0,0,.19), 0 6px 6px rgba(0,0,0,.23); 1780 font:14px/1.2 system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif; 1781 cursor:pointer; width:160px; height:44px; display:inline-flex; align-items:center; justify-content:center; 1782 " 1783> 1784 ð 1785</div> 1786 1787<style> 1788 /* Force clean light styling for everything inside the drawer */ 1789 #lz_drawer-AL2JMRm1mT1BvTDJRM__6964546933209456638 { 1790 font-family: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; 1791 } 1792 1793 #lz_drawer-AL2JMRm1mT1BvTDJRM__6964546933209456638 input, 1794 #lz_drawer-AL2JMRm1mT1BvTDJRM__6964546933209456638 select, 1795 #lz_drawer-AL2JMRm1mT1BvTDJRM__6964546933209456638 textarea { 1796 background: #ffffff !important; 1797 color: #111827 !important; 1798 border: 1px solid #d1d5db !important; 1799 border-radius: 8px !important; 1800 } 1801
1802 #lz_drawer-AL2JMRm1mT1BvTDJRM__6964546933209456638 input::placeholder { 1803 color: #9ca3af !important; 1804 } 1805 1806 #lz_drawer-AL2JMRm1mT1BvTDJRM__6964546933209456638 button { 1807 font-family: inherit; 1808 } 1809</style> 1810
1811<script> 1812 1813 1814(function(){ 1815 var UID = "AL2JMRm1mT1BvTDJRM__6964546933209456638"; 1816 var SHOP = "tabanero-cigars.myshopify.com"; 1817 var CUSTOMER_EMAIL = null; 1818 var CUSTOMER_NAME = null; 1819 var FLAG = '__lz_drawer_rewards_strict_' + UID; 1820 if (window[FLAG]) return; window[FLAG] = true; 1821 1822 // ----------------------------- 1823 // COUNTRY DATA (sample set; you can extend) 1824 // ----------------------------- 1825 var COUNTRY_DATA = { 1826 codes: [ 1827 { iso: "US", label: "US (+1)", dial: "+1" }, 1828 { iso: "GB", label: "GB (+44)", dial: "+44" }, 1829 { iso: "HR", label: "HR (+385)", dial: "+385" }, 1830 { iso: "CA", label: "CA (+1)", dial: "+1" }, 1831 { iso: "AU", label: "AU (+61)", dial: "+61" }, 1832 { iso: "DE", label: "DE (+49)", dial: "+49" }, 1833 { iso: "FR", label: "FR (+33)", dial: "+33" }, 1834 { iso: "ES", label: "ES (+34)", dial: "+34" }, 1835 { iso: "IT", label: "IT (+39)", dial: "+39" }, 1836 { iso: "NL", label: "NL (+31)", dial: "+31" }, 1837 { iso: "BE", label: "BE (+32)", dial: "+32" }, 1838 { iso: "IE", label: "IE (+353)", dial: "+353" }, 1839 { iso: "PL", label: "PL (+48)", dial: "+48" }, 1840 { iso: "PT", label: "PT (+351)", dial: "+351" }, 1841 { iso: "SE", label: "SE (+46)", dial: "+46" }, 1842 { iso: "NO", label: "NO (+47)", dial: "+47" }, 1843 { iso: "DK", label: "DK (+45)", dial: "+45" }, 1844 { iso: "FI", label: "FI (+358)", dial: "+358" }, 1845 { iso: "AT", label: "AT (+43)", dial: "+43" }, 1846 { iso: "CH", label: "CH (+41)", dial: "+41" }, 1847 { iso: "GR", label: "GR (+30)", dial: "+30" }, 1848 { iso: "CZ", label: "CZ (+420)", dial: "+420" }, 1849 { iso: "SK", label: "SK (+421)", dial: "+421" }, 1850 { iso: "SI", label: "SI (+386)", dial: "+386" }, 1851 { iso: "RO", label: "RO (+40)", dial: "+40" }, 1852 { iso: "BG", label: "BG (+359)", dial: "+359" }, 1853 1854 { iso: "HU", label: "HU (+36)", dial: "+36" }, 1855 { iso: "RS", label: "RS (+381)", dial: "+381" }, 1856 { iso: "BA", label: "BA (+387)", dial: "+387" }, 1857 { iso: "MK", label: "MK (+389)", dial: "+389" }, 1858 { iso: "AL", label: "AL (+355)", dial: "+355" }, 1859 { iso: "ME", label: "ME (+382)", dial: "+382" }, 1860 { iso: "LT", label: "LT (+370)", dial: "+370" }, 1861 { iso: "LV", label: "LV (+371)", dial: "+371" }, 1862 { iso: "EE", label: "EE (+372)", dial: "+372" }, 1863 { iso: "LU", label: "LU (+352)", dial: "+352" }, 1864 { iso: "CY", label: "CY (+357)", dial: "+357" }, 1865 { iso: "MT", label: "MT (+356)", dial: "+356" }, 1866 { iso: "IS", label: "IS (+354)", dial: "+354" }, 1867 { iso: "TR", label: "TR (+90)", dial: "+90" }, 1868 { iso: "IL", label: "IL (+972)", dial: "+972" }, 1869 { iso: "BR", label: "BR (+55)", dial: "+55" }, 1870 { iso: "MX", label: "MX (+52)", dial: "+52" }, 1871 { iso: "AR", label: "AR (+54)", dial: "+54" }, 1872 { iso: "CL", label: "CL (+56)", dial: "+56" }, 1873 { iso: "NZ", label: "NZ (+64)", dial: "+64" }, 1874 { iso: "JP", label: "JP (+81)", dial: "+81" }, 1875 { iso: "CN", label: "CN (+86)", dial: "+86" }, 1876 { iso: "KR", label: "KR (+82)", dial: "+82" }, 1877 { iso: "IN", label: "IN (+91)", dial: "+91" }, 1878 { iso: "ZA", label: "ZA (+27)", dial: "+27" } 1879 ] 1880 }; 1881 1882 // --- Loyalzoo API consts --- 1883 var API_TOKEN = '666b0e23ca'; 1884 // will be filled from /v2/merchant/shopify/login 1885 var PLACE_ID = null; 1886 1887 var BASE_URL = 'https://api-v2.loyalzoo.com/v2/customer'; 1888 var currentSessionId = null; 1889 1890 // use SHOP so each store has its own key 1891 var SESSION_KEY = 'lz_session_' + SHOP; 1892 1893// NEW: try to restore a previous session 1894try { 1895 var savedSession = window.localStorage && localStorage.getItem(SESSION_KEY); 1896 if (savedSession) { 1897 currentSessionId = savedSession; 1898 } 1899} catch (e) { 1900 console.warn('[LZ] Could not read stored session:', e); 1901} 1902 1903// NEW: simple in-memory cache to avoid refetching every open 1904var lastPlaceData = null; 1905var lastCustData = null; 1906var lastFetchAt = 0; // timestamp in ms 1907var CACHE_MS = 2 * 60 * 1000; // 2 minutes 1908 1909// --- Merchant login (resolve PLACE_ID from Shopify shop) --- 1910// --- Resolve merchant/place from Shopify shop domain --- 1911var merchantReadyPromise = null; 1912 1913function initMerchant() { 1914 if (merchantReadyPromise) return merchantReadyPromise; 1915 1916 merchantReadyPromise = (async function () { 1917 try { 1918 var res = await fetch('https://api-v2.loyalzoo.com/v2/merchant/shopify/login', { 1919 method: 'POST', 1920 headers: { 1921 'Content-Type': 'application/json', 1922 'Authorization': 'Token Loyh2tP9a3' 1923 }, 1924 body: JSON.stringify({
1925 shop: SHOP // example: myhummusfit.myshopify.com 1926 }) 1927 }); 1928 1929 if (!res.ok) { 1930 console.error('[LZ] merchant/shopify/login failed:', res.status); 1931 return; 1932 } 1933 1934 var json = await res.json(); 1935 var merchant = json.merchant; 1936 1937 if (merchant && Array.isArray(merchant.places) && merchant.places.length > 0) { 1938 PLACE_ID = merchant.places[0].id; 1939 console.log('[LZ] PLACE_ID resolved:', PLACE_ID); 1940 } else { 1941 console.error('[LZ] No places returned for shop:', SHOP, json); 1942 } 1943 1944 } catch (err) { 1945 console.error('[LZ] initMerchant error:', err); 1946 } 1947 })(); 1948 1949 return merchantReadyPromise; 1950} 1951 1952 var headers = { 1953 'Authorization': 'Token ' + API_TOKEN, 1954 'Accept': 'application/json' 1955 }; 1956 1957 // --------------------------------------------- 1958 // UTILITIES 1959 // --------------------------------------------- 1960 function escapeHtml(s){ 1961 return String(s || '').replace(/[&<>"']/g, function(m){ 1962 return ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[m]); 1963 }); 1964 } 1965 1966 // Show confirmation modal 1967function lzShowConfirm(message, onConfirm) { 1968 var backdrop = document.getElementById('lz_modal_backdrop'); 1969 var body = document.getElementById('lz_modal_body'); 1970 var btnOK = document.getElementById('lz_modal_confirm'); 1971 var btnCancel= document.getElementById('lz_modal_cancel'); 1972 1973 body.innerHTML = message; 1974 backdrop.style.display = 'flex'; 1975 1976 btnCancel.onclick = function () { 1977 backdrop.style.display = 'none'; 1978 }; 1979 1980 btnOK.onclick = function () { 1981 backdrop.style.display = 'none'; 1982 if (onConfirm) onConfirm(); 1983 }; 1984} 1985 1986// Show toast message for 2 seconds 1987function lzToast(msg, color) { 1988 var toast = document.getElementById('lz_toast'); 1989 toast.textContent = msg; 1990 toast.style.background = color || '#16a34a'; 1991 toast.style.display = 'block'; 1992 toast.style.opacity = '1'; 1993 1994 setTimeout(function () { 1995 toast.style.transition = 'opacity .4s ease'; 1996 toast.style.opacity = '0'; 1997 setTimeout(() => { 1998 toast.style.display = 'none'; 1999 toast.style.transition = ''; 2000 }, 400); 2001 }, 2000); 2002} 2003 2004 function codePointToEmoji(cp){ 2005 var n = Number(cp); 2006 if (!n || n < 0) return 'ð'; 2007 try { return String.fromCodePoint(n); } catch(e){ return 'ð'; } 2008 } 2009 2010 function cardStyle(){ 2011 return ( 2012 'border:1px solid #e5e7eb;' + 2013 'border-radius:12px;' + 2014 'padding:12px 14px;' + 2015 'box-shadow:0 1px 2px rgba(0,0,0,.05);' + 2016 'background:#fff;' 2017 ); 2018 } 2019 2020 function el(tag, attrs, html){ 2021 var n = document.createElement(tag); 2022 if (attrs){ 2023 for (var k in attrs){ 2024 if (Object.prototype.hasOwnProperty.call(attrs, k)){ 2025 n.setAttribute(k, attrs[k]); 2026 } 2027 } 2028 } 2029 if (html !== undefined) n.innerHTML = html; 2030 return n; 2031 } 2032 2033 // DOM refs 2034 var $btn = document.getElementById('lz_popup_btn-' + UID); 2035 var $drawer = document.getElementById('lz_drawer-' + UID); 2036 var $close = document.getElementById('lz_close-' + UID); 2037 var $refresh = document.getElementById('lz_refresh-' + UID); 2038 var $back = document.getElementById('lz_backdrop-' + UID); 2039 var $status = document.getElementById('lz_status-' + UID); 2040 var $cards = document.getElementById('lz_cards-' + UID); 2041 var $view = document.getElementById('lz_view_account-' + UID); 2042 var $footer = document.getElementById('lz_footer-' + UID); 2043 2044 // --------------------------------------------- 2045 // Loyalzoo helpers (checkins, points, stamps) 2046 // --------------------------------------------- 2047 function findCheckinForPlace(customer, place){ 2048 if (!customer || !Array.isArray(customer.checkins)) return null; 2049 var pid = (place && place.id) || PLACE_ID; 2050 var match = customer.checkins.find(function(ch){ 2051 return ch.place_id === pid || ch.place_id === PLACE_ID; 2052 }); 2053 return match || null; 2054 } 2055 2056 async function checkInToPlace(sessionId) { 2057 if (!sessionId) return; 2058 2059 try { 2060 await fetch( 2061 BASE_URL + '/places/' + encodeURIComponent(PLACE_ID) + '/checkin', 2062 { 2063 method: 'POST', 2064 headers: Object.assign({}, headers, { 'Content-Type': 'application/json' }), 2065 body: JSON.stringify({ session_id: sessionId }) 2066 } 2067 ); 2068 } catch (e) { 2069 console.warn('[LZ] Check-in failed (non-fatal):', e); 2070 } 2071} 2072 2073window.lzConfirmRedeem = function (rewardId, rewardName) { 2074 lzShowConfirm( 2075 "Do you want to redeem: <b>" + rewardName + "</b>?", 2076 function () { 2077 window.lz_doRedeem(rewardId); 2078 } 2079 ); 2080}; 2081 2082window.lz_doRedeem = async function (rewardId) { 2083 try { 2084 if (!currentSessionId) { 2085 lzToast("Missing session ID", "#dc2626"); 2086 return; 2087 } 2088 2089 var url = BASE_URL + 2090 '/places/' + encodeURIComponent(PLACE_ID) + 2091 '/rewards/' + encodeURIComponent(rewardId) + 2092 '/redeem'; 2093 2094 var res = await fetch(url, { 2095 method: 'POST', 2096 headers: Object.assign({}, headers, { 'Content-Type': 'application/json' }), 2097 body: JSON.stringify({ session_id: currentSessionId }) 2098 }); 2099 2100 var json = await res.json(); 2101 2102 if (!res.ok || !json.discount || !json.discount.code) { 2103 lzToast("Redeem failed", "#dc2626"); 2104 return; 2105 } 2106 2107 var code = json.discount.code; 2108 2109 // Show toast (may only flash briefly before redirect) 2110 lzToast("Reward redeemed: " + code, "#16a34a"); 2111 2112 // Redirect to cart with discount 2113 window.location.href = 2114 "/discount/" + encodeURIComponent(code) + "?redirect=/cart"; 2115 2116 } catch (e) { 2117 console.error("Redeem error:", e); 2118 lzToast("Something went wrong", "#dc2626"); 2119 } 2120}; 2121 2122 function findPointsForPlace(customer, place){ 2123 var chk = findCheckinForPlace(customer, place); 2124 var pts = chk && chk.rewards && chk.rewards.points; 2125 var num = Number(pts); 2126 return Number.isFinite(num) ? num : 0; 2127 } 2128 2129 function getStampsForReward(customer, place, reward){ 2130 var chk = findCheckinForPlace(customer, place); 2131 if (!chk || !chk.rewards) return 0;
2132 var rid = reward && reward.reward_id; 2133 if (rid === undefined || rid === null) return 0; 2134 var key = 'stampcard_' + String(rid); 2135 var raw = chk.rewards[key]; 2136 var n = Number(raw); 2137 return Number.isFinite(n) && n > 0 ? n : 0; 2138 } 2139 2140 function buildLoyaltyUrl(){ 2141 if (!currentSessionId) { 2142 return 'https://me.loyalzoo.com'; 2143 } 2144 return 'https://mylty.co' + 2145 '?session_id=' + encodeURIComponent(currentSessionId) + 2146 '&place_id=' + encodeURIComponent(PLACE_ID) 2147 2148 } 2149 2150 function storeSessionId(sessionId) { 2151 currentSessionId = sessionId; 2152 try { 2153 if (window.localStorage) { 2154 localStorage.setItem(SESSION_KEY, sessionId); 2155 } 2156 } catch (e) { 2157 console.warn('[LZ] Could not store session:', e); 2158 } 2159} 2160 2161 // --------------------------------------------- 2162 // API pipeline for normal Shopify (email) flow 2163 // --------------------------------------------- 2164 async function ensureCustomerSession(email, firstName){ 2165 if (!email) { 2166 throw new Error('CUSTOMER_EMAIL is not defined'); 2167 } 2168 2169 // 1) search by email 2170 var searchUrl = BASE_URL + '/search?email=' + encodeURIComponent(email); 2171 var searchRes = await fetch(searchUrl, { headers: headers }); 2172 if (!searchRes.ok) throw new Error('Customer search failed: ' + searchRes.status); 2173 var searchData = await searchRes.json(); 2174 var customer = searchData.customer || null; 2175 2176 // 2) if no customer, create 2177 if (!customer) { 2178 var body = JSON.stringify({ 2179 email: email, 2180 first_name: firstName || '', 2181 comms: 1 2182 }); 2183 var createRes = await fetch(BASE_URL, { 2184 method: 'POST', 2185 headers: Object.assign({}, headers, { 'Content-Type': 'application/json' }), 2186 body: body 2187 }); 2188 if (!createRes.ok) throw new Error('Create customer failed: ' + createRes.status); 2189 var createData = await createRes.json(); 2190 customer = createData.customer; 2191 } 2192 2193 // 3) session_id 2194 var sessionId = customer.session_id; 2195 if (!sessionId && Array.isArray(customer.checkins) && customer.checkins.length) { 2196 sessionId = customer.checkins[0].session_id; 2197 } 2198 if (!sessionId) throw new Error('No session_id found for customer'); 2199 2200 storeSessionId(sessionId); 2201 2202 // 4) check in to place (fire & forget) 2203 try { 2204 await fetch(BASE_URL + '/places/' + encodeURIComponent(PLACE_ID) + '/checkin', { 2205 method: 'POST', 2206 headers: Object.assign({}, headers, { 'Content-Type': 'application/json' }), 2207 body: JSON.stringify({ session_id: sessionId }) 2208 }); 2209 } catch (e) { 2210 console.warn('[LZ] Checkin failed (non-fatal):', e); 2211 } 2212 2213 return { customer: customer, sessionId: sessionId }; 2214 } 2215 2216 async function fetchPlaceAndCustomer(sessionId){ 2217 await initMerchant(); 2218 if (!PLACE_ID) { 2219 throw new Error('No place configured for this Shopify shop.'); 2220 } 2221 2222 var placeUrl = BASE_URL + '/places/' + encodeURIComponent(PLACE_ID) + 2223 '?session_id=' + encodeURIComponent(sessionId) + 2224 '&expand=' + encodeURIComponent('rewards,loyalty_scheme,promotions,auto_promotions,passkit,taxes,subscription_events,session_id,payment_gateways,locales,features,powerapi'); 2225 2226 var custUrl = BASE_URL + '/?session_id=' + encodeURIComponent(sessionId) + 2227 '&expand=' + encodeURIComponent('rewards,loyalty_scheme,promotions,auto_promotions,passkit,taxes,subscription_events'); 2228 2229 var results = await Promise.all([ 2230 fetch(placeUrl, { headers: headers }), 2231 fetch(custUrl, { headers: headers }) 2232 ]); 2233 2234 var placeRes = results[0], custRes = results[1]; 2235 if (!placeRes.ok) throw new Error('Place fetch failed: ' + placeRes.status); 2236 if (!custRes.ok) throw new Error('Customer fetch failed: ' + custRes.status); 2237 2238 var placeData = await placeRes.json(); 2239 var custData = await custRes.json(); 2240 return { placeData: placeData, custData: custData }; 2241 } 2242 2243async function redeemRewardPoints(rewardId) { 2244 if (!currentSessionId) { 2245 alert('Please sign in first to redeem a reward.'); 2246 return; 2247 } 2248 2249 try { 2250 var url = 2251 BASE_URL + 2252 '/places/' + encodeURIComponent(PLACE_ID) + 2253 '/rewards/' + encodeURIComponent(rewardId) + 2254 '/redeem'; 2255 2256 var res = await fetch(url, { 2257 method: 'POST', 2258 headers: Object.assign({}, headers, { 'Content-Type': 'application/json' }), 2259 body: JSON.stringify({ session_id: currentSessionId }) 2260 }); 2261 2262 var json = {}; 2263 try { 2264 json = await res.json(); 2265 } catch (_) { 2266 json = {}; 2267 } 2268 2269 console.log('[LZ] Redeem response', res.status, json); 2270 2271 if (!res.ok || (json && json.success === false)) {
2272 alert('Could not redeem reward. Please try again.'); 2273 return; 2274 } 2275 2276 // Refresh loyalty data so you can see updated points/progress 2277 var pc = await fetchPlaceAndCustomer(currentSessionId); 2278 lastPlaceData = pc.placeData; 2279 lastCustData = pc.custData; 2280 lastFetchAt = Date.now(); 2281 render(pc.placeData, pc.custData); 2282 2283 } catch (e) { 2284 console.error('[LZ] Redeem error:', e); 2285 alert('Something went wrong while redeeming. Please try again.'); 2286 } 2287} 2288 2289 2290 2291 // ---------------------------------------------------------------- 2292 // RENDER SWITCH: logged-in vs login UI 2293 // ---------------------------------------------------------------- 2294 function render(placeData, customerData){ 2295 $cards.innerHTML = ''; 2296 2297 var place = (placeData && placeData.place) || {}; 2298 var customer = (customerData && customerData.customer) || {}; 2299 var points = findPointsForPlace(customer, place); 2300 2301 var fullName = [customer.first_name, customer.last_name].filter(Boolean).join(' ') || '(Anonymous)'; 2302 var email = CUSTOMER_EMAIL || customer.email || null; 2303 var logo = place.card_image || null; 2304 2305 var schemeType = place.loyalty_scheme && place.loyalty_scheme.type || 'points'; 2306 var isStampScheme = (schemeType === 'stamps' || schemeType === 'punchcard' || schemeType === 'stampcard'); 2307 2308 // If NOT logged in (no email + no session) â show login UI 2309 if (!email && !currentSessionId) { 2310 renderLoginUI(); 2311 return; 2312 } 2313 2314 // Logged-in 2315 renderLoggedInUI(place, customer, points, logo, isStampScheme); 2316 } 2317 2318 // ---------------------------------------------------------------- 2319 // LOGIN UI 2320 // ---------------------------------------------------------------- 2321// ---------------------------------------------------------------- 2322// LOGIN UI 2323// prevCtx is optional: { mode: 'email'|'phone', email, phone, country } 2324// ---------------------------------------------------------------- 2325function renderLoginUI(prevCtx) { 2326 if ($footer) $footer.style.display = 'none'; 2327 if ($view) $view.style.display = 'none'; 2328 $cards.innerHTML = ''; 2329 2330 var wrapper = el('div', { 2331 style: cardStyle() + 'padding:24px;text-align:center;' 2332 }); 2333 2334 wrapper.innerHTML = ` 2335 <div style="font-size:18px;font-weight:600;margin-bottom:12px;"> 2336 Sign in to access your loyalty rewards 2337 </div> 2338 2339 <!-- Single field mode --> 2340 <div id="lz_login_single_${UID}" style="margin-bottom:16px;"> 2341 <input id="lz_login_input_${UID}" 2342 placeholder="Email or phone number" 2343 style="width:100%;padding:12px;font-size:15px;border:1px solid #ddd;border-radius:8px;" /> 2344 </div> 2345 2346 <!-- Phone mode (hidden by default) --> 2347 <div id="lz_login_phone_row_${UID}" 2348 style="margin-bottom:16px;display:none;gap:8px;"> 2349 <select id="lz_country_${UID}" 2350 style="flex:0 0 110px;padding:10px;border:1px solid #ddd;border-radius:8px;font-size:14px;"> 2351 </select> 2352 2353 <input id="lz_phone_${UID}" 2354 placeholder="Phone number" 2355 style="flex:1;padding:12px;font-size:15px;border:1px solid #ddd;border-radius:8px;" /> 2356 </div> 2357 2358 <button id="lz_login_btn_${UID}" 2359 style="background:#334bf4;color:#fff;border:0;border-radius:8px;padding:12px 16px;font-size:15px;cursor:pointer;width:100%;"> 2360 Continue 2361 </button> 2362 `; 2363 2364 $cards.appendChild(wrapper); 2365 2366 populateCountries('lz_country_' + UID); 2367 2368 var singleRow = document.getElementById('lz_login_single_' + UID); 2369 var phoneRow = document.getElementById('lz_login_phone_row_' + UID); 2370 var loginInput = document.getElementById('lz_login_input_' + UID); 2371 var phoneInput = document.getElementById('lz_phone_' + UID); 2372 2373 function switchToSingle() { 2374 if (singleRow) singleRow.style.display = 'block'; 2375 if (phoneRow) phoneRow.style.display = 'none'; 2376 } 2377 2378 function switchToPhone(prefill) { 2379 if (singleRow) singleRow.style.display = 'none'; 2380 if (phoneRow) phoneRow.style.display = 'flex'; 2381 if (phoneInput && prefill) { 2382 phoneInput.value = prefill; 2383 } 2384 } 2385 2386 if (loginInput) { 2387 loginInput.addEventListener('input', function () { 2388 var v = loginInput.value.trim(); 2389 2390 // if contains any letter or '@' (email-ish) OR empty â single field 2391 if (/[@a-zA-Z]/.test(v) || v.length === 0) { 2392 switchToSingle(); 2393 return; 2394 } 2395 2396 // digits only, 6 or more â phone mode 2397 if (/^[0-9]{6,}$/.test(v)) { 2398 switchToPhone(v); 2399 } else { 2400 // digits but < 6 â back to single field 2401 switchToSingle(); 2402 } 2403 }); 2404 } 2405 2406 // If we came from "Back" with previous context, restore it 2407 if (prevCtx && prevCtx.mode === 'email' && loginInput) { 2408 loginInput.value = prevCtx.email || ''; 2409 } 2410 if (prevCtx && prevCtx.mode === 'phone') { 2411 switchToPhone(prevCtx.phone || ''); 2412 var countrySel = document.getElementById('lz_country_' + UID); 2413 if (countrySel && prevCtx.country) { 2414 countrySel.value = prevCtx.country; 2415 } 2416 } 2417 2418 var btn = document.getElementById('lz_login_btn_' + UID); 2419 if (btn) { 2420 btn.onclick = function () { 2421 startLoginFlow(); 2422 }; 2423 } 2424} 2425 2426 // Fill countries dropdown 2427 function populateCountries(elementId) { 2428 var select = document.getElementById(elementId); 2429 if (!select) return; 2430
2431 COUNTRY_DATA.codes.forEach(function (c) { 2432 var opt = document.createElement('option'); 2433 opt.value = c.iso; // store ISO code 2434 opt.dataset.dial = c.dial; // store dial prefix separately 2435 opt.textContent = c.label; 2436 select.appendChild(opt); 2437 }); 2438 } 2439 2440 // ---------------------------------------------------------------- 2441 // LOGIN FLOW: search â send OTP â verify â fetch data 2442 // ---------------------------------------------------------------- 2443async function startLoginFlow() { 2444 try { 2445 var phoneRow = document.getElementById('lz_login_phone_row_' + UID); 2446 var usingPhoneMode = phoneRow && phoneRow.style.display !== 'none'; 2447 2448 var emailOrText = ''; 2449 var phone = ''; 2450 var ccode = ''; 2451 var mode = 'email'; // 'email' | 'phone' 2452 2453 if (usingPhoneMode) { 2454 // PHONE FLOW 2455 phone = (document.getElementById('lz_phone_' + UID).value || '').trim(); 2456 ccode = (document.getElementById('lz_country_' + UID).value || '').trim(); 2457 2458 if (!phone || !ccode) { 2459 alert('Please enter your phone number and select country.'); 2460 return; 2461 } 2462 mode = 'phone'; 2463 } else { 2464 // SINGLE FIELD FLOW â treat as EMAIL 2465 emailOrText = (document.getElementById('lz_login_input_' + UID).value || '').trim(); 2466 2467 if (!emailOrText || !/@/.test(emailOrText)) { 2468 alert('Please enter a valid email, or type at least 6 digits to switch to phone mode.'); 2469 return; 2470 } 2471 mode = 'email'; 2472 } 2473 2474 var ctx = { 2475 mode: mode, 2476 email: mode === 'email' ? emailOrText : '', 2477 phone: mode === 'phone' ? phone : '', 2478 country: mode === 'phone' ? ccode : '' 2479 }; 2480 2481 // -------- Step 1: SEARCH -------- 2482 var searchUrl; 2483 if (mode === 'email') { 2484 searchUrl = BASE_URL + '/search?email=' + encodeURIComponent(emailOrText); 2485 } else { 2486 searchUrl = 2487 BASE_URL + 2488 '/search?phone_number=' + encodeURIComponent(phone) + 2489 '&country=' + encodeURIComponent(ccode); 2490 } 2491 2492 var searchRes = await fetch(searchUrl, { headers: headers }); 2493 var searchJson = await searchRes.json(); 2494 var customer = searchJson && searchJson.customer ? searchJson.customer : null; 2495 2496 if (customer) { 2497 // Found â send OTP 2498 await sendOTP(customer.session_id, mode === 'email' ? 'email' : 'sms'); 2499 showOtpUI(customer.id, mode === 'email' ? 'email' : 'phone_number'); 2500 return; 2501 } 2502 2503 // -------- Step 2: NOT FOUND â ask for name (with Back) -------- 2504 renderNameCapture(ctx); 2505 2506 } catch (err) { 2507 console.error('[LZ] startLoginFlow error:', err); 2508 alert('Sorry, something went wrong while starting login.'); 2509 } 2510} 2511 2512// Ask for name when account is not found 2513function renderNameCapture(ctx) { 2514 // ctx = { mode, email, phone, country } 2515 2516 if ($footer) $footer.style.display = 'none'; 2517 if ($view) $view.style.display = 'none'; 2518 $cards.innerHTML = ''; 2519 2520 var card = el('div', { style: cardStyle() + 'padding:24px;text-align:left;' }); 2521 2522 var summaryLine; 2523 2524 if (ctx.mode === 'email') { 2525 summaryLine = 'Email: ' + escapeHtml(ctx.email); 2526 } else { 2527 // Look up dial code from COUNTRY_DATA 2528 var entry = COUNTRY_DATA.codes.find(function (c) { 2529 return c.iso === ctx.country; 2530 }); 2531 2532 var dial = entry ? entry.dial : ''; 2533 summaryLine = 2534 'Phone: ' + 2535 escapeHtml(ctx.country + ' (' + dial + ') ' + ctx.phone); 2536 } 2537 2538 card.innerHTML = '' 2539 + '<div style="font-size:18px;font-weight:600;margin-bottom:8px;">' 2540 + 'Create your loyalty account' 2541 + '</div>' 2542 + '<div style="font-size:14px;opacity:.8;margin-bottom:12px;">' 2543 + "We couldn\'t find an existing account. Enter your name to create one." 2544 + '</div>' 2545 + '<div style="font-size:13px;margin-bottom:12px;">' 2546 + escapeHtml(summaryLine) 2547 + '</div>' 2548 + '<div style="margin-bottom:16px;">' 2549 + '<label style="display:block;font-size:13px;margin-bottom:4px;">First name</label>' 2550 + '<input id="lz_new_name_' + UID + '"' 2551 + ' placeholder="Your name"' 2552 + ' style="width:100%;padding:10px;font-size:14px;' 2553 + 'border:1px solid #ddd;border-radius:8px;" />' 2554 + '</div>' 2555 + '<div style="display:flex;gap:8px;">' 2556 + '<button id="lz_back_to_login_' + UID + '"' 2557 + ' style="flex:1;border:1px solid #ddd;background:#fff;' 2558 + 'border-radius:8px;padding:10px;font-size:14px;cursor:pointer;">' 2559 + 'Back' 2560 + '</button>' 2561 + '<button id="lz_create_' + UID + '"' 2562 + ' style="flex:1;background:#334bf4;color:#fff;border:0;' 2563 + 'border-radius:8px;padding:10px;font-size:14px;cursor:pointer;">' 2564 + 'Create account' 2565 + '</button>' 2566 + '</div>'; 2567 2568 $cards.appendChild(card); 2569 2570 var backBtn = document.getElementById('lz_back_to_login_' + UID); 2571 if (backBtn) { 2572 backBtn.onclick = function () { 2573 // Go back to login screen with previous values 2574 renderLoginUI(ctx); 2575 }; 2576 } 2577 2578 var createBtn = document.getElementById('lz_create_' + UID); 2579 if (createBtn) { 2580 createBtn.onclick = function () { 2581 createCustomerAndLogin(ctx); 2582 }; 2583 } 2584} 2585 2586// Create customer WITHOUT OTP (for new accounts) and log them in immediately 2587async function createCustomerAndLogin(ctx) { 2588 try { 2589 var nameEl = document.getElementById('lz_new_name_' + UID); 2590 var firstName = nameEl ? nameEl.value.trim() : ''; 2591 2592 if (!firstName) { 2593 alert('Please enter your name.'); 2594 return; 2595 } 2596 2597 // Build body exactly as the API expects 2598 var body = { 2599 first_name: firstName, 2600 comms: 1 2601 }; 2602 2603 if (ctx.mode === 'email') { 2604 // EMAIL FLOW: only send email, no phone/country 2605 body.email = ctx.email; 2606 } else { 2607 // PHONE FLOW: send phone_number + ISO country only 2608 body.phone_number = ctx.phone; // e.g. "123456" 2609 body.country = ctx.country; // e.g. "HR" 2610 } 2611 2612 var createRes = await fetch(BASE_URL, { 2613 method: 'POST', 2614 headers: Object.assign({}, headers, { 'Content-Type': 'application/json' }), 2615 body: JSON.stringify(body) 2616 }); 2617 2618 var json = await createRes.json(); 2619 if (!createRes.ok || !json.customer) { 2620 var msg = json && (json.response || json.message); 2621 throw new Error(msg || 'Could not create customer'); 2622 } 2623 2624 var customer = json.customer; 2625 storeSessionId(customer.session_id); 2626 2627 await checkInToPlace(currentSessionId); 2628 2629 var pc = await fetchPlaceAndCustomer(currentSessionId); 2630 lastPlaceData = pc.placeData; 2631 lastCustData = pc.custData; 2632 lastFetchAt = Date.now(); 2633 render(pc.placeData, pc.custData); 2634 2635 } catch (err) { 2636 console.error('[LZ] createCustomerAndLogin error:', err); 2637 alert('Error creating account: ' + (err && err.message ? err.message :
2637String(err))); 2638 } 2639} 2640 2641async function createCustomerAndSendOtp(ctx) { 2642 try { 2643 var nameEl = document.getElementById('lz_new_name_' + UID); 2644 var firstName = nameEl ? nameEl.value.trim() : ''; 2645 2646 if (!firstName) { 2647 alert('Please enter your name.'); 2648 return; 2649 } 2650 2651 // Build body depending on mode â THIS is the key fix: 2652 // - email flow: DO NOT send phone/country at all 2653 // - phone flow: DO send phone_number + country 2654 var body = { 2655 first_name: firstName, 2656 comms: 1 2657 }; 2658 2659 if (ctx.mode === 'email') { 2660 body.email = ctx.email; 2661 } else { 2662 body.phone_number = ctx.phone; 2663 body.country = ctx.country; 2664 } 2665 2666 var createRes = await fetch(BASE_URL, { 2667 method: 'POST', 2668 headers: Object.assign({}, headers, { 'Content-Type': 'application/json' }), 2669 body: JSON.stringify(body) 2670 }); 2671 2672 var json = await createRes.json(); 2673 if (!createRes.ok || !json.customer) { 2674 // Loyalzoo error typically has .response 2675 var msg = json && (json.response || json.message); 2676 throw new Error(msg || 'Could not create customer'); 2677 } 2678 2679 var customer = json.customer; 2680 2681 await sendOTP(customer.session_id, ctx.mode === 'email' ? 'email' : 'sms'); 2682 showOtpUI(customer.id, ctx.mode === 'email' ? 'email' : 'phone_number'); 2683 2684 } catch (err) { 2685 console.error('[LZ] createCustomerAndSendOtp error:', err); 2686 alert('Error creating account: ' + (err && err.message ? err.message : String(err))); 2687 } 2688} 2689 2690 // Send OTP 2691 async function sendOTP(sessionId, channel) { 2692 await fetch(BASE_URL + '/verification_codes', { 2693 method: 'POST', 2694 headers: Object.assign({}, headers, { 'Content-Type': 'application/json' }), 2695 body: JSON.stringify({ 2696 comms_channel: channel, 2697 session_id: sessionId 2698 }) 2699 }); 2700 } 2701 2702 // Show OTP input UI 2703function showOtpUI(customerId, method) { 2704 2705 if ($footer) $footer.style.display = 'none'; 2706 if ($view) $view.style.display = 'none'; 2707 $cards.innerHTML = ''; 2708 2709 var card = el('div', { style: cardStyle() + 'padding:24px;text-align:center;' }); 2710 2711 card.innerHTML = '' 2712 + '<div style="font-size:18px;font-weight:600;margin-bottom:12px;">' 2713 + 'Enter verification code' 2714 + '</div>' 2715 + '<input id="lz_otp_' + UID + '"' 2716 + ' maxlength="4"' 2717 + ' style="width:120px;text-align:center;padding:12px;font-size:22px;' 2718 + 'border:1px solid #ddd;border-radius:8px;letter-spacing:6px;' 2719 + 'margin-bottom:8px;" />' 2720 // ð´ error text area (initially empty) 2721 + '<div id="lz_otp_error_' + UID + '"' 2722 + ' style="font-size:13px;color:#b91c1c;min-height:18px;margin-bottom:8px;"></div>' 2723 + '<button id="lz_verify_' + UID + '"' 2724 + ' style="background:#334bf4;color:#fff;border:0;border-radius:8px;' 2725 + 'padding:12px 16px;font-size:15px;cursor:pointer;width:100%;">' 2726 + 'Verify' 2727 + '</button>'; 2728 2729 $cards.appendChild(card); 2730 2731 var btn = document.getElementById('lz_verify_' + UID); 2732 if (btn) { 2733 btn.onclick = function () { 2734 verifyOtp(customerId, method); 2735 }; 2736 } 2737} 2738 2739 // Verify OTP â login â fetch loyalty data 2740async function verifyOtp(customerId, method) { 2741 var otpEl = document.getElementById('lz_otp_' + UID); 2742 var errorEl = document.getElementById('lz_otp_error_' + UID); 2743 2744 if (!otpEl) return; 2745 2746 var code = (otpEl.value || '').trim(); 2747 2748 // reset visual state 2749 otpEl.style.borderColor = '#ddd'; 2750 if (errorEl) errorEl.textContent = ''; 2751 2752 // basic client-side validation 2753 if (!/^[0-9]{4}$/.test(code)) { 2754 otpEl.style.borderColor = '#b91c1c'; 2755 if (errorEl) errorEl.textContent = 'Please enter the 4-digit code.'; 2756 return; 2757 } 2758 2759 try { 2760 var loginRes = await fetch( 2761 BASE_URL + '/login?expand=' + 2762 encodeURIComponent('rewards,loyalty_scheme,promotions,auto_promotions,passkit,taxes,subscription_events'), 2763 { 2764 method: 'POST', 2765 headers: Object.assign({}, headers, { 'Content-Type': 'application/json' }), 2766 body: JSON.stringify({ 2767 verification_code: code, 2768 customer_id: customerId, 2769 verification_method: method 2770 }) 2771 } 2772 ); 2773 2774 var loginJson = {}; 2775 try { 2776 loginJson = await loginRes.json(); 2777 } catch (_) {
2778 // no body / invalid JSON 2779 loginJson = {}; 2780 } 2781 2782 var hasCustomer = loginJson && loginJson.customer && loginJson.customer.session_id; 2783 var isSuccessFlag = (loginJson.success !== false); // Loyalzoo often uses success:false 2784 2785 if (!loginRes.ok || !hasCustomer || !isSuccessFlag) { 2786 // â wrong code (or any login error) 2787 otpEl.style.borderColor = '#b91c1c'; 2788 if (errorEl) errorEl.textContent = 'Incorrect code. Please try again.'; 2789 return; 2790 } 2791 2792 // â success 2793 var customer = loginJson.customer; 2794 storeSessionId(customer.session_id); 2795 2796 // If you already added check-in helper, this will work. 2797 // If not, you can comment this out or add the helper I sent earlier. 2798 if (typeof checkInToPlace === 'function') { 2799 await checkInToPlace(currentSessionId); 2800 } 2801 2802 var pc = await fetchPlaceAndCustomer(currentSessionId); 2803 lastPlaceData = pc.placeData; 2804 lastCustData = pc.custData; 2805 lastFetchAt = Date.now(); 2806 render(pc.placeData, pc.custData); 2807 2808 } catch (err) { 2809 console.error('[LZ] verify OTP error:', err); 2810 otpEl.style.borderColor = '#b91c1c'; 2811 if (errorEl) errorEl.textContent = 'Something went wrong. Please try again.'; 2812 } 2813} 2814 2815 // ---------------------------------------------------------------- 2816 // FULL LOGGED-IN UI (points or stamps) 2817 // ---------------------------------------------------------------- 2818// ---------------------------------------------------------------- 2819// FULL LOGGED-IN UI (points or stamps) 2820// ---------------------------------------------------------------- 2821// ---------------------------------------------------------------- 2822// FULL LOGGED-IN UI (points or stamps) 2823// ---------------------------------------------------------------- 2824function renderLoggedInUI(place, customer, points, logo, isStampScheme) { 2825 $cards.innerHTML = ''; 2826 2827 var fullName = [customer.first_name, customer.last_name].filter(Boolean).join(' ') || '(Anonymous)'; 2828 var email = CUSTOMER_EMAIL || customer.email || '(none)'; 2829 2830 // Top summary card 2831 var topCard = el('div', { 2832 style: 2833 cardStyle() + 2834 'padding:18px 16px;text-align:center;' + 2835 'background:linear-gradient(135deg,#f9fafb,#e5ecff);' 2836 }); 2837 2838 topCard.innerHTML = 2839 '<div style="display:flex;flex-direction:column;align-items:center;gap:10px;">' + 2840 (logo 2841 ? '<div style="width:96px;height:96px;border-radius:20px;background:#fff;' + 2842 'display:flex;align-items:center;justify-content:center;' + 2843 'box-shadow:0 8px 20px rgba(0,0,0,.12);overflow:hidden;">' + 2844 '<img src="' + escapeHtml(logo) + '" alt="" ' + 2845 'style="max-width:70%;max-height:70%;object-fit:contain;" />' + 2846 '</div>' 2847 : '<div style="width:96px;height:96px;border-radius:999px;background:#fff;' + 2848 'display:flex;align-items:center;justify-content:center;font-size:40px;' + 2849 'box-shadow:0 8px 20px rgba(0,0,0,.12);">ðª</div>') + 2850 '<div style="font-weight:600;font-size:15px;">' + 2851 escapeHtml(place.name || 'Loyalty program') + 2852 '</div>' + 2853 (place.loyalty_scheme 2854 ? '<div style="font-size:13px;opacity:.85;">' + 2855 escapeHtml(place.loyalty_scheme.points_explanation || '') + 2856 '</div>' 2857 : (isStampScheme 2858 ? '<div style="font-size:13px;opacity:.85;">Collect stamps to earn rewards.</div>' 2859 : '')) + 2860 (!isStampScheme 2861 ? '<div style="font-size:13px;margin-top:4px;">' + 2862 '<span style="font-weight:600;">' + 2863 escapeHtml(String(points)) + ' points' + 2864 '</span>' + 2865 '</div>' 2866 : '') + 2867 '</div>'; 2868 2869 $cards.appendChild(topCard); 2870 2871 // Customer card 2872 var custCard = el('div', { style: cardStyle() }); 2873 custCard.innerHTML = 2874 '<div style="display:flex;align-items:center;gap:8px;margin-bottom:8px;">' + 2875 '<span style="font-size:18px;">ð¤</span>' + 2876 '<span style="font-weight:600;">' + escapeHtml(fullName) + '</span>' + 2877 '</div>' + 2878 '<div style="font-size:13px;margin-top:4px;"><b>Email:</b> ' + 2879 escapeHtml(email) + 2880 '</div>'; 2881 $cards.appendChild(custCard); 2882 2883 // Rewards card 2884 var rewards = Array.isArray(place.rewards) ? place.rewards : []; 2885 var rewardsCard = el('div', { style: cardStyle() }); 2886 2887 var rewardsHeaderHtml = 2888 '<div style="display:flex;align-items:center;gap:6px;margin-bottom:8px;">' + 2889 '<span style="font-size:18px;">ð</span>' + 2890 '<span style="font-weight:600;">Rewards</span>' + 2891 '</div>'; 2892 2893 var rewardsBodyHtml = ''; 2894 2895 if (!rewards.length) { 2896 rewardsBodyHtml = 2897 '<div style="font-size:13px;opacity:.8;"><i>No rewards configured.</i></div>'; 2898 } else if (isStampScheme) { 2899 // -------- STAMPS UI -------- 2900 rewardsBodyHtml = rewards.map(function (r, idx) { 2901 var emoji = codePointToEmoji(r.icon); 2902 var target = Number(r.target) || 0; 2903 if (target <= 0) target = 1; 2904 2905 var maxSlots = 14; 2906 var totalSlots = Math.min(target, maxSlots); 2907 2908 var have = getStampsForReward(customer, place, r); 2909 if (!isFinite(have) || have < 0) have = 0; 2910 2911 var effectiveHave = Math.min(have, totalSlots); 2912 var full = have >= target; 2913 2914 var filledColor = full ? '#16a34a' : '#eab308'; 2915 var emptyBorderColor = full ? '#16a34a' : '#eab308'; 2916 var checkColor = '#ffffff'; 2917 2918 var stampsHtml = 2919 '<div style="display:flex;justify-content:space-between;align-items:center;width:100%;">'; 2920 2921 for (var i = 0; i < totalSlots; i++) { 2922 var isFilled = i < effectiveHave; 2923 2924 if (isFilled) { 2925 stampsHtml += 2926 '<div style="width:18px;height:18px;border-radius:999px;' + 2927 'background:' + filledColor + ';' + 2928 'display:inline-flex;align-items:center;justify-content:center;' + 2929 'font-size:11px;color:' + checkColor + ';font-weight:700;">â</div>'; 2930 } else { 2931 stampsHtml += 2932 '<div style="width:18px;height:18px;border-radius:999px;' + 2933 'border:2px solid ' + emptyBorderColor + ';' + 2934 'background:#ffffff;display:inline-flex;"></div>'; 2935 } 2936 } 2937 2938 stampsHtml += '</div>'; 2939 2940 var btnStyleBase = 2941 'display:inline-flex;align-items:center;justify-content:center;' + 2942 'min-width:86px;padding:6px 16px;border-radius:999px;font-size:13px;'; 2943 2944 // Only show Redeem when full, otherwise no button 2945 var actionBtn = full 2946 ? '<button type="button" onclick="lzConfirmRedeem(' + r.reward_id + ', \'' + escapeHtml(r.name) + '\')" ' + 2947 'style="' + btnStyleBase + 2948 'border:0;background:#a855f7;color:#fff;' + 2949 'box-shadow:0 2px 6px rgba(0,0,0,.18);cursor:pointer;">Redeem</button>' 2950 : ''; 2951 2952 return ( 2953 '<div style="padding:' + 2954 (idx === 0 ? '6px 0 14px 0' : '14px 0 14px 0') + ';' + 2955 (idx > 0 ? 'border-top:1px solid #f1f5f9;' : '') + 2956 '">' + 2957 '<div style="display:flex;align-items:flex-start;gap:12px;padding-right:8px;">' + 2958 // 40x40 emoji box with fixed offset 2959 '<div style="width:40px;height:40px;
2959display:flex;align-items:center;justify-content:center;' + 2960 'font-size:32px;line-height:1;margin-top:6px;">' + 2961 emoji + 2962 '</div>' + 2963 '<div style="flex:1;">' + 2964 '<div style="font-weight:600;">' + 2965 escapeHtml(r.name || 'Reward') + 2966 '</div>' + 2967 '<div style="font-size:13px;opacity:.9;">' + 2968 escapeHtml(r.description || '') + 2969 '</div>' + 2970 '</div>' + 2971 '<div>' + actionBtn + '</div>' + 2972 '</div>' + 2973 '<div style="margin-top:10px;">' + 2974 stampsHtml + 2975 '</div>' + 2976 '</div>' 2977 ); 2978 }).join(''); 2979 } else { 2980 // -------- POINTS UI -------- 2981 rewardsBodyHtml = rewards.map(function (r, idx) { 2982 var emoji = codePointToEmoji(r.icon); 2983 var target = Number(r.target) || 0; 2984 2985 var pctRaw = target > 0 ? (Number(points) / target) * 100 : 0; 2986 if (!isFinite(pctRaw)) pctRaw = 0; 2987 var pct = Math.max(0, Math.min(100, pctRaw)); 2988 2989 var available = target > 0 && Number(points) >= target; 2990 2991 var btnStyleBase = 2992 'display:inline-flex;align-items:center;justify-content:center;' + 2993 'min-width:86px;padding:6px 16px;border-radius:999px;font-size:13px;'; 2994 2995 // we need a stable id for redeem calls 2996 var rewardId = (r.reward_id != null && r.reward_id !== undefined) ? r.reward_id : r.id; 2997 2998 // Only show Redeem when points >= target AND we have a reward id 2999 var actionBtn = available 3000 ? '<button type="button" onclick="lzConfirmRedeem(' + r.reward_id + ', \'' + escapeHtml(r.name) + '\')" ' + 3001 'style="' + btnStyleBase + 3002 'border:0;background:#a855f7;color:#fff;' + 3003 'box-shadow:0 2px 6px rgba(0,0,0,.18);cursor:pointer;">Redeem</button>' 3004 : ''; 3005 3006 var trackCSS = 3007 'position:relative;height:10px;background:#e5e7eb;border-radius:999px;overflow:hidden;'; 3008 var fillBaseCSS = 3009 'position:absolute;left:0;top:0;height:100%;border-radius:999px;' + 3010 'transition:width .25s ease;z-index:1;display:block;'; 3011 var fillColor = available ? '#16a34a' : '#eab308'; 3012 3013 var barTrack = 3014 '<div style="' + trackCSS + '">' + 3015 '<div style="' + fillBaseCSS + 'width:' + pct + '%;background:' + fillColor + ';"></div>' + 3016 '</div>'; 3017 3018 return ( 3019 '<div style="padding:' + 3020 (idx === 0 ? '6px 0 14px 0' : '14px 0 14px 0') + ';' + 3021 (idx > 0 ? 'border-top:1px solid #f1f5f9;' : '') + 3022 '">' + 3023 '<div style="display:flex;align-items:flex-start;gap:12px;padding-right:8px;">' + 3024 // 40x40 emoji box with fixed offset (unchanged) 3025 '<div style="width:40px;height:40px;display:flex;align-items:center;justify-content:center;' + 3026 'font-size:32px;line-height:1;margin-top:6px;">' + 3027 emoji + 3028 '</div>' + 3029 '<div style="flex:1;">' + 3030 '<div style="font-weight:600;">' + 3031 escapeHtml(r.name || 'Reward') + 3032 '</div>' + 3033 '<div style="font-size:13px;opacity:.9;">' + 3034 escapeHtml(r.description || '') + 3035 '</div>' + 3036 '</div>' + 3037 '<div>' + actionBtn + '</div>' + 3038 '</div>' + 3039 '<div style="margin-top:10px;">' + 3040 barTrack + 3041 '<div style="display:flex;justify-content:space-between;font-size:12px;opacity:.8;margin-top:6px;">' + 3042 '<span>' + escapeHtml(String(points)) + ' pts</span>' + 3043 '<span>Target: ' + escapeHtml(String(target)) + ' pts</span>' + 3044 '</div>' + 3045 '</div>' + 3046 '</div>' 3047 ); 3048 }).join(''); 3049 } 3050 3051 var scrollWrapperStyle = 3052 rewards.length > 3 3053 ? 'max-height:480px;overflow-y:auto;padding-right:4px;margin-right:-4px;' 3054 : ''; 3055 3056 rewardsCard.innerHTML = 3057 rewardsHeaderHtml + 3058 '<div style="' + scrollWrapperStyle + '">' + 3059 rewardsBodyHtml + 3060 '</div>'; 3061 3062 $cards.appendChild(rewardsCard); 3063 3064 // Wire up Redeem buttons for points rewards (test call only for now) 3065 var redeemButtons = rewardsCard.querySelectorAll('button[data-lz-reward-id]'); 3066 redeemButtons.forEach(function (btn) { 3067 btn.addEventListener('click', function (e) { 3068 e.preventDefault();
3069 var rid = btn.getAttribute('data-lz-reward-id'); 3070 if (!rid) return; 3071 redeemRewardPoints(rid); 3072 }); 3073 }); 3074 3075 // Promotions card 3076 var promos = Array.isArray(place.promotions) ? place.promotions : []; 3077 var promoCard = el('div', { style: cardStyle() }); 3078 3079 var promoHtml = 3080 '<div style="display:flex;align-items:center;gap:6px;margin-bottom:8px;">' + 3081 '<span style="font-size:18px;">ð£</span>' + 3082 '<span style="font-weight:600;">Promotions</span>' + 3083 '</div>'; 3084 3085 if (!promos.length) { 3086 promoHtml += 3087 '<div style="font-size:13px;opacity:.8;"><i>No active promotions.</i></div>'; 3088 } else { 3089 var p = promos[0]; 3090 var expires = p.valid_until ? new Date(p.valid_until).toLocaleDateString() : null; 3091 3092 promoHtml += 3093 '<div style="border-radius:10px;background:#f9fafb;border:1px solid #e5e7eb;' + 3094 'padding:10px 12px;font-size:13px;">' + 3095 '<div style="font-weight:500;margin-bottom:4px;">' + 3096 escapeHtml(p.description || 'Promotion') + 3097 '</div>' + 3098 (expires 3099 ? '<div style="font-size:12px;opacity:.8;">Expires: ' + 3100 escapeHtml(expires) + 3101 '</div>' 3102 : '') + 3103 '</div>'; 3104 } 3105 3106 promoCard.innerHTML = promoHtml; 3107 $cards.appendChild(promoCard); 3108 3109 // status + footer CTA visibility 3110 // status + footer CTA visibility 3111$status.textContent = ''; 3112 3113if (currentSessionId || CUSTOMER_EMAIL) { 3114 if ($footer) $footer.style.display = 'block'; 3115 if ($view) $view.style.display = 'block'; 3116} else { 3117 if ($footer) $footer.style.display = 'none'; 3118 if ($view) $view.style.display = 'none'; 3119} 3120} 3121 3122 // ---------------------------------------------------------------- 3123 // FETCH DATA (entry point when drawer opens) 3124 // ---------------------------------------------------------------- 3125// ---------------------------------------------------------------- 3126// FETCH DATA (entry point when drawer opens) 3127// ---------------------------------------------------------------- 3128async function fetchData(forceNetwork) { 3129 $status.textContent = 'Loading loyalty dataâ¦'; 3130 $cards.innerHTML = ''; 3131 3132 try { 3133 3134 3135 await initMerchant(); 3136 if (!PLACE_ID) { 3137 throw new Error('No place configured for this Shopify shop.'); 3138 } 3139 // If no Shopify customer and no stored session â show login 3140 if (!CUSTOMER_EMAIL && !currentSessionId) { 3141 renderLoginUI(); 3142 $status.textContent = ''; 3143 if ($footer) $footer.style.display = 'none'; 3144 if ($view) $view.style.display = 'none'; 3145 return; 3146 } 3147 3148 // Use cache if: 3149 // - caller didn't force network 3150 // - we already have place/customer 3151 // - data is younger than CACHE_MS 3152 if (!forceNetwork) { 3153 var now = Date.now(); 3154 if (lastPlaceData && lastCustData && (now - lastFetchAt) < CACHE_MS) { 3155 $status.textContent = ''; 3156 render(lastPlaceData, lastCustData); 3157 return; 3158 } 3159 } 3160 3161 // Decide which session to use 3162 var sessionId; 3163 if (CUSTOMER_EMAIL) { 3164 // Normal Shopify email flow 3165 var cs = await ensureCustomerSession(CUSTOMER_EMAIL, CUSTOMER_NAME); 3166 sessionId = cs.sessionId; 3167 } else { 3168 // Logged in via our own login (OTP / phone) 3169 sessionId = currentSessionId; 3170 } 3171 3172 var pc = await fetchPlaceAndCustomer(sessionId); 3173 3174 // ð¹ update cache here 3175 lastPlaceData = pc.placeData; 3176 lastCustData = pc.custData; 3177 lastFetchAt = Date.now(); 3178 3179 render(pc.placeData, pc.custData); 3180 $status.textContent = ''; 3181 } catch (e) { 3182 console.error('[LZ] Error:', e); 3183 $status.textContent = 'Error fetching data (see console)'; 3184 $cards.innerHTML = ''; 3185 $cards.appendChild( 3186 el('div', { style: cardStyle() }, escapeHtml(e.message || String(e))) 3187 ); 3188 if ($view) $view.style.display = 'none'; 3189 } 3190} 3191 3192 // ---------------------------------------------------------------- 3193 // Drawer + button behaviour 3194 // ---------------------------------------------------------------- 3195 var lastFocused = null; 3196 3197 function lockBody(lock){ 3198 if (lock){ 3199 document.documentElement.style.overflow = 'hidden'; 3200 document.body.style.overflow = 'hidden'; 3201 } else { 3202 document.documentElement.style.overflow = ''; 3203 document.body.style.overflow = ''; 3204 } 3205 } 3206 3207function openDrawer(){ 3208 lastFocused = document.activeElement; 3209 if ($btn) $btn.style.display = 'none'; 3210 $drawer.style.transform = 'translateX(0)'; 3211 $back.style.opacity = '1'; 3212 $back.style.visibility = 'visible'; 3213 lockBody(true); 3214 setTimeout(function(){ $refresh && $refresh.focus(); }, 50); 3215 3216 // Let fetchData() handle cache vs. network 3217 fetchData(false); 3218} 3219 3220 function closeDrawer(){ 3221 $drawer.style.transform = 'translateX(100%)'; 3222 $back.style.opacity = '0'; 3223 $back.style.visibility = 'hidden'; 3224 lockBody(false); 3225 if ($btn) $btn.style.display = 'inline-flex'; 3226 if (lastFocused && lastFocused.focus) lastFocused.focus(); 3227 } 3228 3229 // Floating button styles (for theme editor) 3230 function applyBtnStyles(){ 3231 var d = $btn.dataset; 3232 $btn.style.setProperty('bottom', (parseInt(d.offb || '0', 10)) + 'px', 'important'); 3233 if ((d.align || 'right') === 'left'){ 3234 $btn.style.setProperty('left', (parseInt(d.offx || '0', 10)) + 'px', 'important'); 3235 $btn.style.removeProperty('right'); 3236 } else { 3237 $btn.style.setProperty('right', (parseInt(d.offx || '0', 10)) + 'px', 'important'); 3238 $btn.style.removeProperty('left'); 3239 } 3240 $btn.style.setProperty('border-radius', (parseInt(d.r || '12', 10)) + 'px', 'important'); 3241 $btn.style.setProperty('background', d.bg || '#334BF4', 'important'); 3242 $btn.style.setProperty('color', d.fg || '#FFFFFF', 'important'); 3243 $btn.style.setProperty( 3244 'z-index', 3245 String((parseInt(d.z || '3000', 10) + 2)), 3246 'important' 3247 ); 3248 if (d.label && $btn.textContent.trim() !== d.label) $btn.textContent = d.label; 3249 } 3250 3251 // Events 3252 if ($btn) { 3253 $btn.addEventListener('click', function(e){ 3254 e.preventDefault(); 3255 openDrawer(); 3256 }); 3257 } 3258 if ($close) { 3259 $close.addEventListener('click', function(e){ 3260 e.preventDefault(); 3261 closeDrawer(); 3262 }); 3263 } 3264 if ($back) { 3265 $back.addEventListener('click', function(){ 3266 closeDrawer(); 3267 }); 3268 } 3269 if ($refresh) { 3270 $refresh.addEventListener('click', function(){ 3271 fetchData(); 3272 }); 3273 } 3274 if ($view) { 3275 $view.addEventListener('click', function(e){ 3276 e.preventDefault(); 3277 var url = buildLoyaltyUrl(); 3278 window.open(url, '_blank'); 3279 }); 3280 } 3281 3282 document.addEventListener('keydown', function(e){ 3283 if (e.key === 'Escape') closeDrawer(); 3284 }); 3285 3286 // Theme editor live preview 3287 if ($btn){ 3288 applyBtnStyles(); 3289 if (window.Shopify && Shopify.designMode){ 3290 setInterval(applyBtnStyles, 700); 3291 document.addEventListener('shopify:inspector:change', applyBtnStyles); 3292 document.addEventListener('shopify:section:load', applyBtnStyles); 3293 document.addEventListener('shopify:section:select', applyBtnStyles); 3294 document.addEventListener('shopify:section:deselect', applyBtnStyles); 3295 } 3296 } 3297 3298})(); 3299 3300 3301</script>
3301 3302</div><div id="shopify-block-AUldkYklma0JiZVNkN__9388344762370057067" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: vite-tag --> 3303 3304 3305
3305<script src="https://cdn.shopify.com/extensions/01a0d7d8-75e2-79a1-a526-53a12a13b737/essential-cart-drawer-1026/assets/app-embed-Dc9OfDDi.js" type="module" crossorigin="anonymous"></script>
3305 3306 <link href="//cdn.shopify.com/extensions/01a0d7d8-75e2-79a1-a526-53a12a13b737/essential-cart-drawer-1026/assets/app-embed-C5CTjIUA.css" rel="stylesheet" type="text/css" media="all" /> 3307 3308<!-- END app snippet --> 3309 3310<essential-cart-app-embed 3311 upsell-app-data="{"carts":[{"id":"ce7ac25c-9489-4fa1-a791-002f5042c30c","isPublished":true,"cartType":"STICKY_ADD_TO_CART","content":{"isHideForOutOfStock":true,"isShowDropShadow":true,"isShowOnDesktop":true,"isShowOnMobile":true,"stickyCartVisibility":"WHEN_ADD_TO_CART_NOT_IN_SCREEN","stickyCartPosition":"BOTTOM","stickyCartHorizontalPosition":"RIGHT","stickyCartWidth":"CONDENSED","isProductImage":true,"isProductName":true,"isProductPrice":true,"isComparedAtPrice":true,"isProductVariantSelection":true,"isProductQuantitySelection":true,"buttonBodyHtml":"Add to cart","disabledButtonBodyHtml":"Sold out","buttonAction":"STAY_ON_PAGE","isHideForOutOfStockMobile":true,"isShowDropShadowMobile":true,"stickyCartVisibilityMobile":"WHEN_ADD_TO_CART_NOT_IN_SCREEN","stickyCartPositionMobile":"BOTTOM","isProductImageMobile":true,"isProductNameMobile":true,"isProductPriceMobile":true,"isComparedAtPriceMobile":true,"isProductVariantSelectionMobile":true,"isProductQuantitySelectionMobile":true,"buttonBodyHtmlMobile":"Add to cart","disabledButtonBodyHtmlMobile":"Sold out","buttonActionMobile":"STAY_ON_PAGE"},"design":{"template":"WHITE","backgroundType":"MONOCHROME","monochromeBackgroundColor":"#ffffff","gradientBackgroundStartColor":null,"gradientBackgroundEndColor":null,"gradientBackgroundAngle":null,"font":"INHERIT","borderSize":0,"borderColor":"#1a1a1a","productTitleSize":16,"productTitleFontWeight":"normal","productTitleColor":"#303030","productPriceSize":16,"productPriceFontWeight":"normal","productPriceColor":"#303030","compareAtPriceSize":16,"compareAtPriceFontWeight":"normal","compareAtPriceColor":"#616161","productVariantSelectionFontWeight":"normal","productVariantSelectionTextSize":14,"productVariantSelectionTextColor":"#303030","productVariantSelectionIconColor":"#303030","productVariantSelectionBackgroundColor":"#ffffff","productVariantSelectionBorderSize":0,"productVariantSelectionBorderColor":"#303030","productVariantSelectionBorderRadius":2,"buttonTextSize":16,"buttonTextColor":"#ffffff","buttonBackgroundColor":"#425735","buttonBorderSize":0,"buttonBorderColor":"#e3e3e3","buttonBorderRadius":2,"disabledButtonBackgroundColor":"#e3e3e3","disabledButtonBorderSize":0,"disabledButtonBorderColor":"#e3e3e3","disabledBorderRadius":2,"disabledButtonTextSize":16,"disabledButtonTextColor":"#303030","topOffsetPosition":4,"bottomOffsetPosition":4,"leftOffsetPosition":2,"rightOffsetPosition":16,"maxWidth":800,"templateMobile":"DARK","backgroundTypeMobile":"MONOCHROME","monochromeBackgroundColorMobile":"#ffffff","gradientBackgroundStartColorMobile":null,"gradientBackgroundEndColorMobile":null,"
3311gradientBackgroundAngleMobile":null,"fontMobile":"INHERIT","borderSizeMobile":0,"borderColorMobile":"#1a1a1a","productTitleSizeMobile":16,"productTitleFontWeightMobile":"normal","productTitleColorMobile":"#303030","productPriceSizeMobile":16,"productPriceFontWeightMobile":"normal","productPriceColorMobile":"#ffffff","compareAtPriceSizeMobile":16,"compareAtPriceFontWeightMobile":"normal","compareAtPriceColorMobile":"#ffffff","productVariantSelectionFontWeightMobile":"normal","productVariantSelectionTextSizeMobile":14,"productVariantSelectionTextColorMobile":"#303030","productVariantSelectionIconColorMobile":"#303030","productVariantSelectionBackgroundColorMobile":"#ffffff","productVariantSelectionBorderSizeMobile":0,"productVariantSelectionBorderColorMobile":"#303030","productVariantSelectionBorderRadiusMobile":2,"buttonTextSizeMobile":16,"buttonTextColorMobile":"#ffffff","buttonBackgroundColorMobile":"#425735","buttonBorderSizeMobile":0,"buttonBorderColorMobile":"#e3e3e3","buttonBorderRadiusMobile":2,"disabledButtonTextSizeMobile":16,"disabledButtonTextColorMobile":"#303030","disabledButtonBackgroundColorMobile":"#e3e3e3","disabledButtonBorderSizeMobile":0,"disabledButtonBorderColorMobile":"#e3e3e3","disabledBorderRadiusMobile":2,"topOffsetPositionMobile":0,"bottomOffsetPositionMobile":0,"leftOffsetPositionMobile":0,"rightOffsetPositionMobile":0},"announcements":[{"id":"cfee8d74-96e5-422a-9627-c717e3953c60","updatedAt":"2025-07-25T19:41:18.435Z","timerType":"TO_DATE","timerEndType":"HIDE","minutes":120,"startDate":"2025-07-25T19:32:58.642Z","endDate":"2025-07-26T19:32:58.642Z","bodyHtml":"<p><span style=\"white-space: pre-wrap;\">ð¥ </span><b><strong style=\"white-space: pre-wrap;\">Get it while it lasts!</strong></b></p>","backgroundColor":"#efd77b","textSize":14,"textColor":"#635F5F","isEnabled":true,"endMessage":"","daysLabel":"d","hoursLabel":"h","minutesLabel":"m","secondsLabel":"s","bodyHtmlMobile":"<p><span style=\"white-space: pre-wrap;\">ð¥ </span><b><strong style=\"white-space: pre-wrap;\">Get it while it lasts!</strong></b></p>","backgroundColorMobile":"#efd77b","textSizeMobile":14,"textColorMobile":"#635F5F","isEnabledMobile":true}],"placement":{"productPageProductsType":"ALL","specificProducts":[],"specificCollections":[],"homePageProducts":[]}}]}" 3312 cart-app-config-data="" 3313 product-page-product="null" 3314 product-page-collection-ids="[]" 3315 cart-product-ids="[]" 3316 shop-money-format="$ {{amount}}" 3317 shop-money-with-currency-format="$ {{amount}} USD" 3318 market-id="266502246" 3319 cart-data="{"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}" 3320 cart-items=' 3321[]' 3322></essential-cart-app-embed> 3323 3324 3325 3326 3327</div><div id="shopify-block-AY3pVa3ZJR0E3aHF6e__10436698916776057164" class="shopify-block shopify-app-block">
3327<script id="subscription-helper"> 3328 3329 if (!window.AppstleIncluded) { 3330 window.AppstleIncluded = true; 3331 window.RS = Window.RS || {}; 3332 3333 RS.Config = { 3334 "selectors": { 3335 "payment_button_selectors": "form[action$='/cart/add'] .shopify-payment-button", 3336 "subscriptionLinkSelector": "#customer_detail > div > p:nth-child(6) > a", 3337 "atcButtonPlacement": "BEFORE", 3338 "subscriptionLinkPlacement": "BEFORE", 3339 "cartRowSelector": "", 3340 "cartLineItemSelector": "", 3341 "cartLineItemPerQuantityPriceSelector": "", 3342 "cartLineItemTotalPriceSelector": "", 3343 "cartLineItemSellingPlanNameSelector": "", 3344 "cartSubTotalSelector" : "", 3345 "cartLineItemPriceSelector": "", 3346 "cartLineItemPlacement": "BEFORE", 3347 "cartHiddenAttributesSelector": "", 3348 "buildABoxDiscountSelector": "", 3349 }, 3350 "baseUrl": "https://subscription-admin.appstle.com", 3351 "usedTranslation": "true", 3352 "enableCartWidgetFeature": "false", 3353 "storefrontAnalyticsForwardingEnabled": false, 3354 "appstleStorefrontAnalyticsPath": "https://subscription-admin.appstle.com/assets/js/appstle-storefront-analytics.min.js?shop=tabanero-cigars.myshopify.com&v=1789149464677", 3355 "useUrlWithCustomerId": "false", 3356 "atcButtonSelector": ".product_section form.product_form .purchase.clearfix", 3357 "moneyFormat": "$ {{amount}}", 3358 "oneTimePurchaseText": "One Time Purchase", 3359 "minimumQuantityMessage": "", 3360 "tapToSelectText": "", 3361 "bundleDiscountTextV2": "bundle discount extra: {{bundleDiscount}} off", 3362 "productPageUnitPriceSelectorV2": "", 3363 "monthsFrequencyTextV2": "Months", 3364 "monthlyLabelTextV2": "Monthly", 3365 "monthFrequencyTextV2": "Month", 3366 "weeksFrequencyTextV2": "Weeks", 3367 "weeklyLabelTextV2": "Weekly", 3368 "weekFrequencyTextV2": "Week", 3369 "daysFrequencyTextV2": "Days", 3370 "dayFrequencyTextV2": "day", 3371 "yearsFrequencyTextV2": "Years", 3372 "yearlyLabelTextV2": "Yearly", 3373 "yearFrequencyTextV2": "Year", 3374 "offFrequencyTextV2": "Off", 3375 "prepayLabelTextV2": "Prepay", 3376 "prepaidLabelTextV2": "Prepaid", 3377 "prepaidSaveBadgeTextV2": "SAVE {{selectedDiscountPercentage}}", 3378 "onetimeDescriptionTextV2": "", 3379 "atcButtonTextV2": "", 3380 "oneTimeFrequencyTextV2": "One Time", 3381 "cancelAnytimeLabelTextV2": "Cancel Anytime", 3382 "noSubscriptionLabelTextV2": "No Subscription", 3383 "addToShipmentButtonTextV2": "Add to Shipment", 3384 "addToShipmentProcessingV2": "Processing...", 3385 "addToShipmentSuccessTextV2": "Success", 3386 "addToShipmentErrorTextV2": "Error", 3387 "addToShipmentTooltipTextV2": "Please avoid double delivery charges! Login to add this product to an upcoming delivery.", 3388 "frequencyCombinedWidgetTextV2": "Frequency", 3389 "selectDeliverOptionV2": "Select Delivery Option", 3390 "subscribeAndSaveSuccessV2": "Subscribe success", 3391 "unsubscribeFrequencyTextV2": "Unsubscribe", 3392 "deliveryEveryFrequencyTextV2": "Delivery Every", 3393 "sellingPlanTitleTextNonPrepaid": "{{sellingPlanName}}", 3394 "subscribeAndSaveInitalV2": "Subscribe & save", 3395 "subscriptionDescriptionTextV2": "", 3396 "atcButtonTextSelector": "", 3397 "disableCartWidgetOnVariants": "", 3398 "shop": "tabanero-cigars.myshopify.com", 3399 "deliveryText": "delivery", 3400 "purchaseOptionsText": "Purchase Options", 3401 "manageSubscriptionButtonText": "", 3402 "subscriptionOptionText": "Subscribe", 3403 "sellingPlanSelectTitle": "DELIVERY FREQUENCY", 3404 "subscriptionPriceDisplayText": "", 3405 "tooltipTitle": "Subscription details", 3406 "showTooltipOnClick": "false", 3407 "tooltipDesctiption": `A monthly premium subscription that is mailed directly to your door. You can manage your subscription in the customer portal.`, 3408 "tooltipDescriptionOnPrepaidPlan": "", 3409 "tooltipDescriptionOnMultipleDiscount": "", 3410 "manualTranslation": "false", 3411 "tooltipDescriptionCustomization": "", 3412 "orderStatusManageSubscriptionTitle": "Subscription", 3413 "orderStatusManageSubscriptionDescription": "Continue to your account to view and manage your subscriptions. Please use the same email address that you used to buy the subscription.", 3414 "orderStatusManageSubscriptionButtonText": "Manage your subscription", 3415 "subscriptionOptionSelectedByDefault" : false, 3416 "totalPricePerDeliveryText" : "{{prepaidPerDeliveryPrice}}\/delivery", 3417 "memberOnlySellingPlansJson": {}, 3418 "nonMemberOnlySellingPlansJson": {}, 3419 "sellingPlansJson": [{"frequencyCount":1,"frequencyInterval":"MONTH","billingFrequencyCount":1,"billingFrequencyInterval":"MONTH","frequencyName":"Monthly Subscription","frequencyDescription":"\u003cp\u003e\n\n\n\u003cmeta http-equiv\u003d\"Content-Type\" content\u003d\"text/html; charset\u003dUTF-8\"\u003e\n\u003cmeta http-equiv\u003d\"Content-Style-Type\" content\u003d\"text/css\"\u003e\n\u003ctitle\u003e\u003c/title\u003e\n\u003cmeta name\u003d\"Generator\" content\u003d\"Cocoa HTML Writer\"\u003e\n\u003cmeta name\u003d\"CocoaVersion\" content\u003d\"2575.6\"\u003e\n\u003cstyle type\u003d\"text/css\"\u003e\np.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px \u0027Helvetica Neue\u0027}\n\u003c/style\u003e\n\n\n\u003cp class\u003d\"p1\"\u003e\u003cstrong\u003eHave complete control of your subscriptions\u003c/strong\u003e\u003c/p\u003e\u003cp class\u003d\"p1\"\u003eReceive a 5% discount starting on Order 2. Then you get a 10% discount starting at Order 4, for the life of your subscription.\u003cspan class\u003d\"Apple-converted-s
3419pace\"\u003e\u0026nbsp;\u003c/span\u003e\u003c/p\u003e\n\n\n\u003c/p\u003e","discountOffer":0.0,"discountOffer2":5.0,"afterCycle1":0,"afterCycle2":1,"discountType":"PERCENTAGE","discountType2":"PERCENTAGE","discountEnabled":true,"discountEnabled2":true,"discountEnabledMasked":true,"discountEnabled2Masked":true,"id":"gid://shopify/SellingPlan/9941418282","frequencyType":"ON_PURCHASE_DAY","specificDayEnabled":false,"cutOff":0,"prepaidFlag":"false","idNew":"gid://shopify/SellingPlan/9941418282","planType":"PAY_AS_YOU_GO","deliveryPolicyPreAnchorBehavior":"ASAP","freeTrialEnabled":false,"memberOnly":false,"nonMemberOnly":false,"formFieldJson":"null","frequencySequence":0,"groupName":"Cigars Subscribe and Save","groupId":6146261290,"repeatingCycle":false,"inventoryPolicyReserve":"ON_SALE","appstleCycles":[{"afterCycle":2,"discountType":"PERCENTAGE","value":5.0,"repeatingCycle":false,"preventDuplicationFreeProduct":false},{"afterCycle":3,"discountType":"PERCENTAGE","value":10.0,"repeatingCycle":false,"preventDuplicationFreeProduct":false},{"afterCycle":4,"discountType":"PERCENTAGE","value":10.0,"repeatingCycle":false,"preventDuplicationFreeProduct":false},{"afterCycle":5,"discountType":"FREE_PRODUCT","value":0.0,"freeVariantId":50294355394858,"freeProductHandle":"free-gift-surprise","repeatingCycle":false,"preventDuplicationFreeProduct":true}]},{"frequencyCount":1,"frequencyInterval":"MONTH","billingFrequencyCount":1,"billingFrequencyInterval":"MONTH","frequencyName":"Monthly Club Subscription","frequencyDescription":"\u003cp\u003eFor both of our tiers, the cigars auto-ship each month to your door! You can cancel after 3 months if you wish, via your customer portal.\u0026nbsp;\u003c/p\u003e","afterCycle1":0,"afterCycle2":0,"discountEnabled":false,"discountEnabled2":false,"discountEnabledMasked":false,"discountEnabled2Masked":false,"id":"gid://shopify/SellingPlan/9956917546","frequencyType":"ON_PURCHASE_DAY","specificDayEnabled":false,"minCycles":4,"cutOff":0,"prepaidFlag":"false","idNew":"gid://shopify/SellingPlan/9956917546","planType":"PAY_AS_YOU_GO","deliveryPolicyPreAnchorBehavior":"ASAP","freeTrialEnabled":false,"memberOnly":false,"nonMemberOnly":false,"formFieldJson":"[]","upcomingOrderEmailBuffer":3,"frequencySequence":0,"groupName":"Bespoke Cigar Club","groupId":6157140266,"repeatingCycle":false,"inventoryPolicyReserve":"ON_SALE","appstleCycles":[]}], 3420 "widgetEnabled": true, 3421 "showFreeGiftPrice" : true, 3422 "showFreeGiftComparePrice" : true, 3423 "enableFreeGiftLayout" : false, 3424 "freeGiftLabelText": "+ Free {{productName}}", 3425 "freeGiftBadgeText": "", 3426 "showTooltip" : true, 3427 "showCartWidgetOnBundleItems" : false, 3428 "prepaidOptionSelectedByDefault" : false, 3429 "disablePassingSellingPlanAsLineProperties" : false, 3430 "updateThemePrice" : false, 3431 "sortByDefaultSequence": false, 3432 "showSubOptionBeforeOneTime": false, 3433 "detectVariantFromURLParams": false, 3434 "disableQueryParamsUpdate": false, 3435 "showStaticTooltip": false, 3436 "showAppstleLink": false, 3437 "sellingPlanTitleText" : "{{sellingPlanName}} ({{sellingPlanPrice}}\/delivery)", 3438 "oneTimePriceText" : "{{price}}", 3439 "selectedPayAsYouGoSellingPlanPriceText" : "{{price}}", 3440 "selectedPrepaidSellingPlanPriceText" : "{{pricePerDelivery}}", 3441 "selectedDiscountFormat" : "SAVE {{selectedDiscountPercentage}}", 3442 "manageSubscriptionBtnFormat" : "<a class=\"appstle_manageSubBtn\" href=\"apps\/subscriptions\"><button style=\"padding: 15px 20px\" class=\"btn\">Manage Subscription<\/button><\/a><a><br><br><\/a>", 3443 "manageSubscriptionUrl" : "https:\/\/tabanerocigars.com\/apps\/subscriptions", 3444 "appstlePlanId": 2, 3445 "showCheckoutSubscriptionBtn": true, 3446 "priceSelector": "", 3447 "reloadPriceSelector": "", 3448 "landingPagePriceSelector": "", 3449 "quickViewClickSelector": "", 3450 "badgeTop": "", 3451 "pricePlacement": "BEFORE", 3452 "disableLoadingJquery": false, 3453 "widgetEnabledOnSoldVariant": "false", 3454 "switchRadioButtonWidget": true, 3455 "appstlePlanName": "STARTER1", 3456 "appstlePlanFeatures": {"analytics": true, "webhookAccess": false, "accessBundling": true, "enableAutoSync": false, "enableBundling": false, "enableSmsAlert": false, "accessBuildABox": false, "enableCampaigns": false, "enablePriceSync": false, "enableAutomation": false, "enableCartWidget": false, "accessAppstleMenu": false, "accessResendEmail": true, "enableAddressSync": false, "enableExternalApi": false, "enablePhasedRetry": false, "subscriptionCount": 1000, "enableIntegrations": true, "accessQuickCheckout": true, "accessSplitContract": true, "enableSummaryReports": true, "enableCustomEmailHtml": false, "enableWidgetPlacement": false, "enableCancellationFlow": false, "enableShippingProfiles": false, "enableCustomEmailDomain": false, "enableDunningManagement": true, "accessKlaviyoContactSync": true, "enableOrderConsolidation": false, "accessWidgetDe
3456signOptions": true, "enableImmediatePlaceOrder": true, "enableInventoryManagement": true, "enableAdvancedSellingPlans": true, "accessCustomWidgetLocations": true, "accessOneTimeProductUpsells": true, "enableBillingIntervalChange": true, "enableProductSwapAutomation": false, "enableCancellationManagement": false, "enableCustomerPortalSettings": false, "enableSubscriptionManagement": true, "accessSubscriptionActivityLogs": true, "enableBackupPaymentMethodRetry": false, "accessSubscriberLoyaltyFeatures": true, "enableContractPriceModification": true, "accessManualSubscriptionCreation": true, "enableNextBillingDateModification": true, "accessCustomerPortalProductUpsells": false, "enableServerSideConversionTracking": false, "accessDiscountOnCancellationAttempt": true, "enableStorefrontAnalyticsForwarding": false, "accessAdvanceSubscriptionPlanOptions": true}, 3457 "formMappingAttributeName": "", 3458 "formMappingAttributeSelector": "", 3459 "quickViewModalPollingSelector": "", 3460 "scriptLoadDelay": "0", 3461 "formatMoneyOverride": "false", 3462 "enableAddToExistingSubscriptionFeature": "false", 3463 "displayAddToExistingSubscriptionButtonForNotLoggedInV2": "", 3464 "showAddToSubscriptionButtonOnlyOnSubscriptionProducts": "false", 3465 "appstle_app_proxy_path_prefix": "apps\/subscriptions", 3466 "updatePriceOnQuantityChange": "", 3467 "widgetParentSelector": "", 3468 "quantitySelector": "", 3469 "enableAddJSInterceptor": "false", 3470 "isDevEnabled": false, 3471 "forceReloadWidgetSelector": "", 3472 "forceReloadOnFreqChange": false, 3473 "showPrepaidPlanSeparately": false, 3474 "debugLogsEnabled": false, 3475 "isUseStorefrontAPI": false, 3476 "reBuyEnabled": "false", 3477 "loyaltyDetailsLabelText": "", 3478 "loyaltyPerkDescriptionTextV2": "{{#isDiscountTypeFreeProduct}}<div style='display: flex;'><div style='height: 60px; width: 60px; flex-shrink: 0; margin-right: 10px;'><img style='width: 100%' src={{{featured_image}}}><\/img><\/div><div>After {{{billingCycleBlock}}} orders,<span style='color: #ffc000;font-weight: 700;';> get a FREE {{freeProductName}} <\/span><\/div><div>{{\/isDiscountTypeFreeProduct}}{{#isDiscountTypePercentage}}After <span class='appstle-loyalty-billing-cycle'><span class='appstle-loyalty-billing-cycle-count'>{{{billingCycleBlock}}}<\/span> order<\/span>, <span class='appstle-loyalty-discount'>get <span style='color: #ffc000;font-weight: 700;';>{{{discount}}}% OFF your entire order<\/span><\/span>.{{\/isDiscountTypePercentage}}{{#isDiscountTypeShipping}}After <span class='appstle-loyalty-billing-cycle'><span class='appstle-loyalty-billing-cycle-count'>{{{billingCycleBlock}}}<\/span> order<\/span>, <span class='appstle-loyalty-discount'>get <span style='color: #ffc000;font-weight: 700;';>shipping at {{{formatDiscountedPrice}}}<\/span><\/span>.{{\/isDiscountTypeShipping}}{{#isDiscountTypeFixed}}After <span class='appstle-loyalty-billing-cycle'><span class='appstle-loyalty-billing-cycle-count'>{{{billingCycleBlock}}}<\/span> order<\/span>, <span class='appstle-loyalty-discount'>get <span style='color: #ffc000;font-weight: 700;';>{{{formatDiscountedPrice}}} OFF your entire order<\/span><\/span>.{{\/isDiscountTypeFixed}}", 3479 "widgetType": "WIDGET_TYPE_7", 3480 "collectionWidgetType": "LEGACY", 3481 "enableCompactProductPageWidget": false, 3482 "enableCartDrawerWidget": false, 3483 "cartDrawerWidgetStyle": false, 3484 "cartDrawerWidgetInlineStyle": "false", 3485 "cartDrawerWidgetPanelStyle": "false", 3486 "cartDrawerWidgetSegmentedStyle": "false", 3487 "showOneTimeComparePrice": false, 3488 "showCombinedSellingPlanCartWidget": false, 3489 "combinedCartWidgetSelector": "", 3490 "removeUnsubscribeOption": false, 3491 "widgetTemplateHtml": `{% raw %}{% endraw %}`, 3492 3493 "allWidgetTemplateHtml": "{\"WIDGET_TYPE_1\":\"{% raw %}{% endraw %}\",\"WIDGET_TYPE_6\":\"{% raw %}
3493<div id=\\\"appstle-widget-template\\\">\\n <div class=\\\"appstle_sub_widget\\\" id=\\\"appstle_subscription_widget{{widgetId}}\\\">\\n<div class=\\\"appstle_widget_title\\\">{{{purchaseOptionsText}}}</div>\\n <div class=\\\"widgetSellingPlanWrapper\\\">\\n{{^requires_selling_plan}}\\n{{^showSubOptionBeforeOneTime}}\\n <div class=\\\"appstle_input_wrapper appstle_onetime_block\\\">\\n <input type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{/subscriptionOptionSelectedDefault}}>\\n <label for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\">\\n<div class=\\\"appstle-selling-plan-name-wrapper\\\">\\n {{oneTimePuchaseText}}\\n<div class=\\\"appstle-cancel-text\\\">{{{noSubscriptionLabelTextV2}}}</div>\\n</div>\\n <div class=\\\"appstle-selling-plan-detail-wrapper\\\">\\n<div class=\\\"appstle_span_wrapper\\\">\\n{{#showOneTimeComparePrice}}\\n<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount_compare\\\">\\n {{{oneTimePuchaseComparePriceAmount}}}\\n</span>\\n{{/showOneTimeComparePrice}}\\n\\n<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount\\\">{{{oneTimePuchaseAmount}}}</span></div>\\n</div>\\n </label>\\n \\n </div>\\n{{/showSubOptionBeforeOneTime}}\\n{{/requires_selling_plan}}\\n {{#sellingPlanVariants}}\\n <div class=\\\"appstle_input_wrapper\\\">\\n \\n <input type=\\\"radio\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" id=\\\"{{sellingPlanId}}\\\" value=\\\"{{sellingPlanId}}\\\" name=\\\"selling_plan\\\" {{#isChecked}}checked{{/isChecked}}>\\n{{^prepaidFlag}}\\n <label for=\\\"{{sellingPlanId}}\\\">\\n<div class=\\\"appstle-selling-plan-name-wrapper appstle-selling-plan-label-name\\\">\\n {{{name}}}\\n<div class=\\\"appstle-cancel-text\\\">{{{cancelAnytimeLabelTextV2}}}</div>\\n</div>\\n<div class=\\\"appstle-selling-plan-detail-wrapper\\\">\\n<div class=\\\"appstle_span_wrapper\\\">\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_formattedCompareAtPrice appstle_price_block\\\">{{{formattedCompareAtPrice}}}</span>\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\">{{{formattedPrice}}}</span>\\n\\n\\n</div> \\n<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_formattext_block\\\"></span>\\n{{#showPricePerDay}}<div class=\\\"appstle-perday-price\\\">{{{pricePerDay}}}</div>{{/showPricePerDay}}\\n<div class=\\\"appstle-frequency-description\\\">\\n{{{frequencyDescription}}} \\n</div>\\n </div>\\n </label>\\n{{#showFormattedDiscountText}}\\n <span class=\\\"appstle_sellingPlan_discountText\\\">{{{formattedDiscountText}}}</span>\\n{{/showFormattedDiscountText}}\\n<div class=\\\"appstle-sm-hide appstle-frequency-description\\\">{{{frequencyDescription}}} </div> \\n{{/prepaidFlag}}\\n{{#prepaidFlag}}\\n<label for=\\\"{{sellingPlanId}}\\\">\\n<div class=\\\"appstle-selling-plan-name-wrapper appstle-selling-plan-label-name\\\">\\n {{{name}}}\\n<div class=\\\"appstle-cancel-text\\\">{{{cancelAnytimeLabelTextV2}}}</div>\\n</div>\\n<div class=\\\"appstle-selling-plan-detail-wrapper\\\">\\n<div class=\\\"appstle_span_wrapper\\\">\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_formattedCompareAtPrice appstle_price_block\\\">{{{formattedCompareAtPrice}}}</span>\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\">{{{totalPrice}}}</span>\\n\\n</div> \\n<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block appstle_formattedPrepaidPerDeliveryPriceText\\\">{{{formattedPrepaidPerDeliveryPriceText}}}</span>\\n {{#showPricePerDay}}<div class=\\\"appstle-perday-price\\\">{{{pricePerDay}}}</div>{{/showPricePerDay}}\\n<div class=\\\"\\\">\\n<div class=\\\"appstle-frequency-description\\\">\\n{{{frequencyDescription}}} \\n</div>\\n</div>\\n</div>\\n</label>\\n{{#showFormattedDiscountText}}\\n <span class=\\\"appstle_sellingPlan_discountText\\\">{{{formattedDiscountText}}}</span>\\n{{/showFormattedDiscountText}}\\n<div class=\\\"appstle-sm-hide appstle-frequency-description\\\">{{{frequencyDescription}}} </div> \\n\\n{{/prepaidFlag}}\\n \\n </div>\\n {{/sellingPlanVariants}}\\n{{^requires_selling_plan}}\\n{{#showSubOptionBeforeOneTime}}\\n <div class=\\\"appstle_input_wrapper appstle_onetime_block\\\">
3493\\n <input type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{/subscriptionOptionSelectedDefault}}>\\n <label for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\">\\n<div class=\\\"appstle-selling-plan-name-wrapper\\\">\\n {{oneTimePuchaseText}}\\n<div class=\\\"appstle-cancel-text\\\">{{{noSubscriptionLabelTextV2}}}</div>\\n</div>\\n<div class=\\\"appstle-selling-plan-detail-wrapper\\\">\\n<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount_compare\\\">{{{oneTimePuchaseComparePriceAmount}}}</span>\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount\\\">{{{oneTimePuchaseAmount}}}</span>\\n\\n</div>\\n </label>\\n \\n </div>\\n{{/showSubOptionBeforeOneTime}}\\n{{/requires_selling_plan}}\\n </div>\\n{{#showStaticTooltip}}\\n<div class=\\\"appstle_tooltip_wrapper_static\\\"> {{{toolTipDescription}}}</div>\\n{{/showStaticTooltip}}\\n{{#showTooltip}}\\n<div class=\\\"appstle-tootltip-parent\\\">\\n <div data-appstle-icon=\\\"\\\" class=\\\"appstle_tooltip_wrapper\\\">\\n <svg width=\\\"90\\\" height=\\\"90\\\" viewBox=\\\"0 0 90 90\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"tooltip_subscription_svg\\\">\\n <path\\n d=\\\"M45 0C20.1827 0 0 20.1827 0 45C0 69.8173 20.1827 90 45 90C69.8173 90 90 69.8174 90 45C90.0056 44.6025 89.9322 44.2078 89.7839 43.8389C89.6357 43.47 89.4156 43.1342 89.1365 42.8511C88.8573 42.568 88.5247 42.3432 88.158 42.1897C87.7912 42.0363 87.3976 41.9573 87 41.9573C86.6024 41.9573 86.2088 42.0363 85.842 42.1897C85.4753 42.3432 85.1427 42.568 84.8635 42.8511C84.5844 43.1342 84.3643 43.47 84.2161 43.8389C84.0678 44.2078 83.9944 44.6025 84 45C84 66.5748 66.5747 84 45 84C23.4253 84 6 66.5747 6 45C6 23.4254 23.4253 6 45 6C56.1538 6 66.3012 10.5882 73.4375 18H65.4062C65.0087 17.9944 64.614 18.0678 64.2451 18.2161C63.8762 18.3643 63.5405 18.5844 63.2573 18.8635C62.9742 19.1427 62.7494 19.4753 62.596 19.842C62.4425 20.2088 62.3635 20.6024 62.3635 21C62.3635 21.3976 62.4425 21.7912 62.596 22.158C62.7494 22.5247 62.9742 22.8573 63.2573 23.1365C63.5405 23.4156 63.8762 23.6357 64.2451 23.7839C64.614 23.9322 65.0087 24.0056 65.4062 24H79.8125C80.6081 23.9999 81.3711 23.6838 81.9337 23.1212C82.4963 22.5586 82.8124 21.7956 82.8125 21V6.59375C82.821 6.18925 82.7476 5.78722 82.5966 5.41183C82.4457 5.03644 82.2205 4.69545 81.9344 4.40936C81.6483 4.12327 81.3073 3.898 80.9319 3.7471C80.5565 3.5962 80.1545 3.52277 79.75 3.53125C79.356 3.53941 78.9675 3.62511 78.6067 3.78344C78.2458 3.94177 77.9197 4.16963 77.6469 4.45402C77.3741 4.73841 77.16 5.07375 77.0168 5.44089C76.8737 5.80803 76.8042 6.19977 76.8125 6.59375V12.875C68.6156 4.86282 57.3081 0 45 0ZM43.75 20.75C43.356 20.7582 42.9675 20.8439 42.6067 21.0022C42.2458 21.1605 41.9197 21.3884 41.6469 21.6728C41.3741 21.9572 41.16 22.2925 41.0168 22.6596C40.8737 23.0268 40.8042 23.4185 40.8125 23.8125V47.375C40.8116 47.7693 40.8883 48.16 41.0385 48.5246C41.1886 48.8892 41.4092 49.2207 41.6875 49.5L54.0938 61.9375C54.6573 62.5011 55.4217 62.8177 56.2188 62.8177C57.0158 62.8177 57.7802 62.5011 58.3438 61.9375C58.9073 61.3739 59.224 60.6095 59.224 59.8125C59.224 59.0155 58.9073 58.2511 58.3438 57.6875L46.8125 46.1875V23.8125C46.821 23.408 46.7476 23.006 46.5966 22.6306C46.4457 22.2552 46.2205 21.9142 45.9344 21.6281C45.6483 21.342 45.3073 21.1168 44.9319 20.9658C44.5565 20.8149 44.1545 20.7415 43.75 20.75Z\\\"\\n ></path>\\n </svg>\\n <span class=\\\"appstle_tooltip_title\\\">{{{tooltipTitle}}}</span>\\n </div>\\n<div class=\\\"appstle_tooltip\\\">\\n <div class=\\\"appstle_tooltip_content\\\">\\n {{{toolTipDescription}}}\\n </div>\\n {{#showAppstleLink}}\\n <div class=\\\"appstle_tooltip_appstle\\\">\\n <a href=\\\"https://appstle.com\\\" class=\\\"appstle_link\\\" target=\\\"_blank\\\">\\n POWERED BY APPSTLE </a>\\n </div>\\n {{/showAppstleLink}}\\n </div>\\n</div>\\n{{/showTooltip}}\\n<style>\\n.widgetSellingPlanWrapper {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n gap: 1.5rem;\\n grid-auto-rows: 1fr;\\n margin-bottom: 6px;\\nmargin-top: 10px;\\n}\\n\\n.widgetSellingPlanWrapper input {\\n display: none;\\n}\\n\\n.widgetSellingPlanWrapper label {\\n border-radius: 10px;\\n border: 1px solid rgba(var(--color-foreground));\\n padding: 0.5rem;\\n display: flex;\\n justify-content: center;
3493\\n align-items: center;\\n display: block;\\n height: 100%;\\n width: 100%;\\n text-align: center;\\ncursor: pointer;\\n}\\n\\n.widgetSellingPlanWrapper input:checked+label {\\n background-color: rgba(var(--color-foreground)) !important;\\ncolor: rgba(var(--color-background)) !important;\\n}\\n.appstle_lowercase {\\n text-transform: lowercase;\\n}\\n\\n\\n.appstle_input_wrapper {\\n position: relative;\\n}\\n\\nspan.appstle_sellingPlan_discountText {\\n position: absolute;\\n background: rgba(var(--color-foreground));\\n color: rgba(var(--color-background));\\n border-radius: 3px;\\n padding: 1px 18px;\\n left: 50%;\\n display: block;\\n transform: translate(-50%, -50%);\\n white-space: nowrap;\\n}\\n\\nspan.appstle_sellingPlan_discountText:empty {\\n display: none !important;\\n}\\ndiv.appstle_span_wrapper{\\n\\tdisplay: flex;\\n\\tjustify-content: center;\\n}\\n</style>\\n<style>\\n.widgetSellingPlanWrapper {\\n grid-template-columns: repeat(3, minmax(0, 1fr)) !important;\\n gap: 0.8rem !important;\\n}\\n\\n.appstle_sub_widget {\\n max-width: 100%!important;\\n} \\n\\n.widgetSellingPlanWrapper label {\\n height: auto !important;\\n border: none !important;\\n padding: 14px 5px !important;\\n display: flex !important;\\n justify-content: center !important;\\n align-items: center !important;\\n flex-direction: column;\\n max-width: 100% !important;\\n width: unset !important;\\nline-height: 20px;\\n}\\n\\n.appstle_how_does_it_work {\\n line-height: 16px !important;\\n margin: 6px 0px;\\n color: rgba(var(--color-background));\\n}\\n@media screen and (max-width: 800px) {\\n .appstle_how_does_it_work {\\n text-align: right;\\n }\\n}\\n\\nspan.appstle_lowercase.appstle_sellingPlan_price.appstle_formattext_block {\\ntext-align: right !important;\\n display: block;\\n}\\n\\n.appstle_span_wrapper {\\n align-items: baseline;\\n}\\n\\nspan.appstle_lowercase.appstle_sellingPlan_price.appstle_discount_block.appstle_formattedPrepaidPerDeliveryPriceText {\\n display: block;\\n text-align: right;\\n}\\n\\n.appstle_input_wrapper {\\n display: flex;\\n height: 100% !important;\\nflex-direction: column;\\n}\\n\\n.appstle_sub_widget input[type=radio]+label:before {\\n content: \\\"\\\";\\n position: absolute;\\n inset: 0;\\n border-radius: 12px;\\n padding: 2px;\\n background: #121212;\\n -webkit-mask: linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);\\n -webkit-mask-composite: xor;\\n mask-composite: exclude;\\n pointer-events: none;\\n z-index: 0;\\n transition: all 0.2s;\\n}\\n\\n.appstle_sub_widget input[type=radio]:checked+label:before {\\n content: \\\"\\\";\\n position: absolute;\\n inset: 0;\\n border-radius: 12px;\\n // padding: 4px;\\n// background: linear-gradient(to right,#Fef58f,#7A3900);\\n//background: #E53D29;\\n border: 2px transparent;\\n -webkit-mask: linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);\\n -webkit-mask-composite: xor;\\n mask-composite: exclude;\\n pointer-events: none;\\n z-index: 0;\\n}\\n\\nspan.appstle_sellingPlan_discountText {\\n background: rgba(var(--color-foreground));\\n border-radius: 100px !important;\\n padding: 0px 8px !important;\\n height: 20px;\\n display: flex !important;\\n justify-content: center;\\n align-items: center;\\n letter-spacing: 1px;\\nz-index: 2;\\n}\\nspan.appstle_lowercase.appstle_sellingPlan_price.appstle_onetime_amount_compare {\\ntext-decoration: line-through;\\n}\\n\\n\\nspan.appstle-popular {\\n position: absolute;\\n top: -40px;\\n background: black;\\n color: rgba(var(--color-background));\\n z-index: -3;\\n border-radius: 10px;\\n padding: 0px 10px 29px 10px;\\nleft: 0;\\n}\\n\\n.widgetSellingPlanWrapper label {\\n border-radius: 14px;\\n}\\n\\n.widgetSellingPlanWrapper input:checked+label {\\n overflow: hidden;\\n}\\n\\n\\n.appstle-perday-price {\\ndisplay: none;\\n}\\n\\n .widgetSellingPlanWrapper {\\n grid-template-columns: repeat(1, minmax(0, 1fr)) !important;\\n}\\n\\n.widgetSellingPlanWrapper label {\\n flex-direction: row;\\n justify-content: space-between !important;
3493\\n align-items: flex-start !important;\\nwidth: 100% !important;\\n}\\n\\n.widgetSellingPlanWrapper label {\\n text-align: left;\\n padding: 16px !important;\\nflex-basis: unset;\\n}\\n\\n.appstle_span_wrapper {\\n justify-content: flex-end !important;\\n}\\n\\n.appstle-perday-price {\\n text-align: right;\\n}\\n\\n.widgetSellingPlanWrapper {\\n gap: 15px !important;\\n}\\n\\nspan.appstle-popular {\\n width: calc(100% - 20px);\\n text-align: center;\\n letter-spacing: 2px;\\n top: -30px;\\nleft: 0;\\n}\\n\\nspan.appstle_sellingPlan_discountText { \\nleft: unset !important;\\n right: 15px;\\n transform: translate(0, -50%) !important;\\n}\\n.appstle-cancel-text {\\n text-align: left;\\n}\\n\\n.appstle_input_wrapper label {\\n text-align: left !important;\\n}\\n\\n.widgetSellingPlanWrapper input:checked+label {\\n width: 100% !important;\\n margin: 0 !important;\\n}\\n.appstle_input_wrapper {\\n width: 100% !important;\\nflex-direction: row;\\n}\\n.widgetSellingPlanWrapper input:checked+label+span {\\n background: rgba(var(--color-background)) !important;\\n color:rgba(var(--color-foreground)) !important;\\n border: 2px solid rgba(var(--color-foreground));\\n}\\n.appstle_onetime_block .appstle_span_wrapper {\\n grid-column: 2;\\n}\\n.appstle-frequency-description {\\n text-align: right !important;\\n}\\n\\n\\n.appstle-sm-hide {\\n display: none;\\n}\\n\\n@media screen and (min-width: 800px) {\\n.appstle-lg-show {\\n display: block;\\n}\\n.appstle-lg-hide {\\n display: none;\\n}\\n\\n}\\n\\nspan.appstle_lowercase.appstle_sellingPlan_formattedCompareAtPrice.appstle_price_block {\\n text-decoration: line-through;\\n display: block;\\n margin-right: 3px;\\n color: rgba(var(--color-foreground));\\n}\\n.widgetSellingPlanWrapper input:checked+label .appstle_sellingPlan_formattedCompareAtPrice {\\ncolor:rgba(var(--color-background));\\n} \\n\\n.appstle_span_wrapper > * {\\nflex-shrink: 0\\n}\\n.appstle-selling-plan-detail-wrapper{\\ncolor: rgba(var(--color-foreground));\\n}\\n.widgetSellingPlanWrapper input:checked+label .appstle-selling-plan-detail-wrapper{\\ncolor: rgba(var(--color-background)) !important;\\n}\\n\\n</style>\\n</div>{% endraw %}\",\"WIDGET_TYPE_7\":\"{% raw %}{% endraw %}\",\"WIDGET_TYPE_8\":\"{% raw %}{% endraw %}\",\"WIDGET_TYPE_2\":\"{% raw %}{% endraw %}\",\"WIDGET_TYPE_3\":\"{% raw %}<div id=\\\"appstle-widget-template\\\">\\n <div class=\\\"appstle_sub_widget\\\" id=\\\"appstle_subscription_widget{{widgetId}}\\\">\\n<div class=\\\"appstle_widget_title\\\">{{{purchaseOptionsText}}}</div>\\n <div class=\\\"widgetSellingPlanWrapper appstle_subscription_wrapper\\\">\\n{{#showSubOptionBeforeOneTime}}\\n {{#sellingPlanVariants}}\\n <div class=\\\"appstle_input_wrapper appstle_subscription_option\\\">\\n <input type=\\\"radio\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" id=\\\"{{sellingPlanId}}\\\" value=\\\"{{sellingPlanId}}\\\" name=\\\"selling_plan\\\" {{#isChecked}}checked{{/isChecked}}>\\n {{^prepaidFlag}}\\n <label for=\\\"{{sellingPlanId}}\\\" class=\\\"appstle_widget_three\\\">\\n {{{name}}}\\n<div class=\\\"appstle_span_wrapper\\\">\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\">{{{formattedPrice}}}</span>\\n{{#showSecondFormattedDiscountText}}{{^isFixedPrice}}<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block\\\"> ({{{secondFormattedDiscountText}}})</span> {{/isFixedPrice}}{{/showSecondFormattedDiscountText}}\\n</div>\\n \\n </label>\\n {{/prepaidFlag}}\\n {{#prepaidFlag}}\\n <label for=\\\"{{sellingPlanId}}\\\" class=\\\"appstle_widget_three\\\">\\n {{{name}}}\\n<div class=\\\"appstle_span_wrapper\\\">\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\">{{{totalPrice}}}</span>\\n {{#showSecondFormattedDiscountText}}{{^isFixedPrice}}<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block\\\"> ({{{secondFormattedDiscountText}}})</span>{{/isFixedPrice}}{{/showSecondFormattedDiscountText}}\\n {{#formattedPrepaidPerDeliveryPriceText}}<span class=\\\"appstle_formattedPrepaidPerDeliveryPriceText\\\"> ({{{formattedPrepaidPerDeliveryPriceText}}})</span>{{/formattedPrepaidPerDeliveryPriceText}}\\n </div>\\n \\n </label>\\n {{/prepaidFlag}}\\n \\n </div>\\n {{/sellingPlanVariants}}\\n{{/showSubOptionBeforeOneTime}}\\n {{^requires_selling_plan}}\\n <div class=\\\"appstle_input_wrapper appstle_onetime\\\">
3493\\n <input type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"{{sellingPlanId}}\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{/subscriptionOptionSelectedDefault}}>\\n <label for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" class=\\\"appstle_widget_three\\\">\\n {{oneTimePuchaseText}}\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount\\\">\\n{{#showOneTimeComparePrice}}\\n<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount_compare\\\">\\n {{{oneTimePuchaseComparePriceAmount}}}\\n</span>\\n{{/showOneTimeComparePrice}}\\n{{{oneTimePuchaseAmount}}}</span>\\n </label>\\n \\n </div>\\n {{/requires_selling_plan}}\\n{{^showSubOptionBeforeOneTime}}\\n {{#sellingPlanVariants}}\\n <div class=\\\"appstle_input_wrapper appstle_subscription_option\\\">\\n <input type=\\\"radio\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" id=\\\"{{sellingPlanId}}\\\" value=\\\"{{sellingPlanId}}\\\" name=\\\"selling_plan\\\" {{#isChecked}}checked{{/isChecked}}>\\n {{^prepaidFlag}}\\n <label for=\\\"{{sellingPlanId}}\\\" class=\\\"appstle_widget_three\\\">\\n {{{name}}}\\n<div class=\\\"appstle_span_wrapper\\\">\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\">{{{formattedPrice}}}</span>\\n{{#showSecondFormattedDiscountText}}{{^isFixedPrice}}<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block\\\"> ({{{secondFormattedDiscountText}}})</span> {{/isFixedPrice}}{{/showSecondFormattedDiscountText}}\\n</div>\\n \\n </label>\\n {{/prepaidFlag}}\\n {{#prepaidFlag}}\\n <label for=\\\"{{sellingPlanId}}\\\" class=\\\"appstle_widget_three\\\">\\n {{{name}}}\\n<div class=\\\"appstle_span_wrapper\\\">\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\">{{{totalPrice}}}</span>\\n {{#showSecondFormattedDiscountText}}{{^isFixedPrice}}<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block\\\"> ({{{secondFormattedDiscountText}}})</span>{{/isFixedPrice}}{{/showSecondFormattedDiscountText}}\\n {{#formattedPrepaidPerDeliveryPriceText}}<span class=\\\"appstle_formattedPrepaidPerDeliveryPriceText\\\"> ({{{formattedPrepaidPerDeliveryPriceText}}})</span>{{/formattedPrepaidPerDeliveryPriceText}}\\n </div>\\n \\n </label>\\n {{/prepaidFlag}}\\n \\n </div>\\n {{/sellingPlanVariants}}\\n{{/showSubOptionBeforeOneTime}}\\n </div>\\n{{#showStaticTooltip}}\\n<div class=\\\"appstle_tooltip_wrapper_static\\\">{{{toolTipDescription}}}</div>\\n{{/showStaticTooltip}}\\n{{#showTooltip}}\\n <div data-appstle-icon=\\\"\\\" class=\\\"appstle_tooltip_wrapper\\\">\\n <svg width=\\\"90\\\" height=\\\"90\\\" viewBox=\\\"0 0 90 90\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"tooltip_subscription_svg\\\">\\n <path\\n d=\\\"M45 0C20.1827 0 0 20.1827 0 45C0 69.8173 20.1827 90 45 90C69.8173 90 90 69.8174 90 45C90.0056 44.6025 89.9322 44.2078 89.7839 43.8389C89.6357 43.47 89.4156 43.1342 89.1365 42.8511C88.8573 42.568 88.5247 42.3432 88.158 42.1897C87.7912 42.0363 87.3976 41.9573 87 41.9573C86.6024 41.9573 86.2088 42.0363 85.842 42.1897C85.4753 42.3432 85.1427 42.568 84.8635 42.8511C84.5844 43.1342 84.3643 43.47 84.2161 43.8389C84.0678 44.2078 83.9944 44.6025 84 45C84 66.5748 66.5747 84 45 84C23.4253 84 6 66.5747 6 45C6 23.4254 23.4253 6 45 6C56.1538 6 66.3012 10.5882 73.4375 18H65.4062C65.0087 17.9944 64.614 18.0678 64.2451 18.2161C63.8762 18.3643 63.5405 18.5844 63.2573 18.8635C62.9742 19.1427 62.7494 19.4753 62.596 19.842C62.4425 20.2088 62.3635 20.6024 62.3635 21C62.3635 21.3976 62.4425 21.7912 62.596 22.158C62.7494 22.5247 62.9742 22.8573 63.2573 23.1365C63.5405 23.4156 63.8762 23.6357 64.2451 23.7839C64.614 23.9322 65.0087 24.0056 65.4062 24H79.8125C80.6081 23.9999 81.3711 23.6838 81.9337 23.1212C82.4963 22.5586 82.8124 21.7956 82.8125 21V6.59375C82.821 6.18925 82.7476 5.78722 82.5966 5.41183C82.4457 5.03644 82.2205 4.69545 81.9344 4.40936C81.6483 4.12327 81.3073 3.898 80.9319 3.7471C80.5565 3.5962 80.1545 3.52277 79.75 3.53125C79.356 3.53941 78.9675 3.62511 78.6067 3.78344C78.2458 3.94177 77.9197 4.16963 77.6469 4.45402C77.3741 4.73841 77.16 5.07375 77.0168 5.44089C76.8737 5.80803 76.8042 6.19977 76.8125 6.59375V12.875C68.6156 4.86282 57.3081 0 45 0ZM43.75 20.75C43.356 20.7582 42.9675 20.8439 42.6067 21.0022C42.2458 21.1605 41.9197 21.3884 41.6469 21.6728C41.3741 21.9572 41.16 22.2925 41.0168 22.6596C40.8737 23.0268 40.8042 23.4185 40.8125 23.8125V47.375C40.8116 47.7693 40.8883 48.16 41.0385 48.5246C41.1886 48.8892 41.4092 49.2207 41.6875 49.5L54.0938 61.9375C54.6573 62.5011 55.4217 62.8177 56.2188 62.8177C57.0158 62.8177 57.7802 62.5011 58.3438 61.9375C58.9073 61.3739 59.224 60.6095 59.224 59.8125C59.224 59.0155 58.9073 58.2511 58.3438 57.6875L46.8125 46.1875V23.8125C46.821 23.408 46.7476 23.006 46.5966 22.6306C46.4457 22.2552 46.2205 21.9142 45.9344 21.6281C45.6483 21.342 45.3073 21.1168 44.9319 20.9658C44.5565 20.8149 44.1545 20.7415 43.75 20.75Z\\\"\\n ></path>\\n </svg>\\n <span class=\\\"appstle_tooltip_title\\\">{{{tooltipTitle}}}</span>\\n </div>\\n<div class=\\\"appstle_tooltip appstle_tooltip_hover\\\">\\n <div class=\\\"appstle_tooltip_content\\\">\\n {{{toolTipDescription}}}\\n </div>\\n {{#showAppstleLink}}\\n <div class=\\\"appstle_tooltip_appstle\\\">\\n <a href=\\\"https://appstle.com\\\" class=\\\"appstle_link\\\" target=\\\"_blank\\\">\\n POWERED BY APPSTLE\\n </a>\\n </div>\\n{{/showAppstleLink}}\\n </div>\\n{{/showTooltip}}\\n<style>.widgetSellingPlanWrapper {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n gap: 0.5rem;\\n grid-auto-rows: 1fr;\\n margin-bottom: 6px;\\n}\\n.widgetSellingPlanWrapper input {\\n display: none;\\n}\\n.widgetSellingPlanWrapper label {\\n border-radius: 8px;\\n border: 1px solid rgba(var(--color-foreground));\\n padding: 0.5rem;\\n display: flex;\\n justify-content: center;
3493\\n align-items: center;\\n display: block;\\n height: 100%;\\n width: 100%;\\n text-align: center;\\ncursor: pointer;\\ncolor: rgba(var(--color-foreground));\\n}\\n.widgetSellingPlanWrapper input:checked+label {\\n background-color: rgba(var(--color-foreground));\\n color: rgba(var(--color-background));\\n border: 1px solid rgba(var(--color-background)) !important;\\n}\\n.appstle_lowercase {\\n text-transform: lowercase;\\n}\\n.appstle_input_wrapper {\\n position: relative;\\n}\\nspan.appstle_sellingPlan_discountText {\\n position: absolute;\\n background-color: color: rgba(var(--color-foreground));\\n color: rgba(var(--color-background));\\n border-radius: 3px;\\n padding: 1px 18px;\\n left: 50%;\\n display: block;\\n transform: translate(-50%, -50%);\\n white-space: nowrap;\\n}\\nspan.appstle_sellingPlan_discountText:empty {\\n display: none !important;\\n}\\nspan.appstle_lowercase.appstle_sellingPlan_price {\\n color: rgba(var(--color-foreground));\\n}\\nspan.appstle_lowercase.appstle_sellingPlan_price.appstle_onetime_amount_compare {\\n color: rgba(var(--color-foreground));\\n text-decoration: line-through;\\n padding: 0 3px;\\n}\\n#appstle_subscription_widget0 .appstle_tooltip_wrapper {\\n margin-top: 8px;\\n margin-bottom: 16px;\\n}\\n.appstle_subscription_wrapper {\\n border: none !important;\\n}\\nlabel.appstle_widget_three {\\n display: flex;\\n flex-direction: column;\\n}\\n.widgetSellingPlanWrapper input:checked+label span {\\n color: rgba(var(--color-background)) !important;\\n}\\n.appstle_sub_widget .appstle_subscription_wrapper{\\n border-radius:unset !important;\\n}\\nspan.appstle_second_price_block:empty {\\n display: none !important;\\n}\\n</style>\\n</div>{% endraw %}\",\"WIDGET_TYPE_4\":\"{% raw %}<div id=\\\"appstle-widget-template\\\">\\n <div class=\\\"appstle_sub_widget\\\" id=\\\"appstle_subscription_widget{{widgetId}}\\\">\\n<div class=\\\"appstle_widget_title\\\">{{{purchaseOptionsText}}}</div>\\n <div class=\\\"widgetSellingPlanWrapper\\\">\\n{{^requires_selling_plan}}\\n{{^showSubOptionBeforeOneTime}}\\n <div class=\\\"appstle_input_wrapper\\\">\\n <input type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{/subscriptionOptionSelectedDefault}}>\\n <label for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\">\\n {{oneTimePuchaseText}}\\n{{#showOneTimeComparePrice}}\\n<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount_compare\\\">\\n {{{oneTimePuchaseComparePriceAmount}}}\\n</span>\\n{{/showOneTimeComparePrice}}\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount\\\">{{{oneTimePuchaseAmount}}}/{{{oneTimeFrequencyText}}}</span>\\n </label>\\n </div>\\n{{/showSubOptionBeforeOneTime}}\\n{{/requires_selling_plan}}\\n {{#sellingPlanVariants}}\\n <div class=\\\"appstle_input_wrapper\\\">\\n <span class=\\\"appstle_sellingPlan_discountText\\\">{{{formattedDiscountText}}}</span>\\n <input type=\\\"radio\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" id=\\\"{{sellingPlanId}}\\\" value=\\\"{{sellingPlanId}}\\\" name=\\\"selling_plan\\\" {{#isChecked}}checked{{/isChecked}}>\\n{{^prepaidFlag}}\\n <label for=\\\"{{sellingPlanId}}\\\">\\n {{{name}}}\\n<div class=\\\"appstle_span_wrapper\\\">\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\">{{{formattedPrice}}}<span>\\n<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_formattext_block\\\">/{{{sellingPlanFrequencyText}}}{{#isFrequencySubsequent}}{{/isFrequencySubsequent}}</span>\\n</div>\\n </label>\\n{{/prepaidFlag}}\\n{{#prepaidFlag}}\\n<label for=\\\"{{sellingPlanId}}\\\">\\n {{{name}}}\\n<div class=\\\"appstle_span_wrapper\\\">\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_price_block\\\">{{{totalPrice}}}</span>\\n<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_discount_block appstle_formattedPrepaidPerDeliveryPriceText\\\"> {{{formattedPrepaidPerDeliveryPriceText}}}</span>\\n</div>\\n</label>\\n{{/prepaidFlag}}\\n </div>\\n {{/sellingPlanVariants}}\\n{{^requires_selling_plan}}\\n{{#showSubOptionBeforeOneTime}}\\n <div class=\\\"appstle_input_wrapper\\\">
3493\\n <input type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{/subscriptionOptionSelectedDefault}}>\\n <label for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\">\\n {{oneTimePuchaseText}}\\n{{#showOneTimeComparePrice}}\\n<span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount_compare\\\">\\n {{{oneTimePuchaseComparePriceAmount}}}\\n</span>\\n{{/showOneTimeComparePrice}}\\n <span class=\\\"appstle_lowercase appstle_sellingPlan_price appstle_onetime_amount\\\">{{{oneTimePuchaseAmount}}}/{{{oneTimeFrequencyText}}}</span>\\n </label>\\n </div>\\n{{/showSubOptionBeforeOneTime}}\\n{{/requires_selling_plan}}\\n </div>\\n{{#showStaticTooltip}}\\n<div class=\\\"appstle_tooltip_wrapper_static\\\"> {{{toolTipDescription}}}</div>\\n{{/showStaticTooltip}}\\n{{#showTooltip}}\\n <div data-appstle-icon=\\\"\\\" class=\\\"appstle_tooltip_wrapper\\\">\\n <svg width=\\\"90\\\" height=\\\"90\\\" viewBox=\\\"0 0 90 90\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"tooltip_subscription_svg\\\">\\n <path\\n d=\\\"M45 0C20.1827 0 0 20.1827 0 45C0 69.8173 20.1827 90 45 90C69.8173 90 90 69.8174 90 45C90.0056 44.6025 89.9322 44.2078 89.7839 43.8389C89.6357 43.47 89.4156 43.1342 89.1365 42.8511C88.8573 42.568 88.5247 42.3432 88.158 42.1897C87.7912 42.0363 87.3976 41.9573 87 41.9573C86.6024 41.9573 86.2088 42.0363 85.842 42.1897C85.4753 42.3432 85.1427 42.568 84.8635 42.8511C84.5844 43.1342 84.3643 43.47 84.2161 43.8389C84.0678 44.2078 83.9944 44.6025 84 45C84 66.5748 66.5747 84 45 84C23.4253 84 6 66.5747 6 45C6 23.4254 23.4253 6 45 6C56.1538 6 66.3012 10.5882 73.4375 18H65.4062C65.0087 17.9944 64.614 18.0678 64.2451 18.2161C63.8762 18.3643 63.5405 18.5844 63.2573 18.8635C62.9742 19.1427 62.7494 19.4753 62.596 19.842C62.4425 20.2088 62.3635 20.6024 62.3635 21C62.3635 21.3976 62.4425 21.7912 62.596 22.158C62.7494 22.5247 62.9742 22.8573 63.2573 23.1365C63.5405 23.4156 63.8762 23.6357 64.2451 23.7839C64.614 23.9322 65.0087 24.0056 65.4062 24H79.8125C80.6081 23.9999 81.3711 23.6838 81.9337 23.1212C82.4963 22.5586 82.8124 21.7956 82.8125 21V6.59375C82.821 6.18925 82.7476 5.78722 82.5966 5.41183C82.4457 5.03644 82.2205 4.69545 81.9344 4.40936C81.6483 4.12327 81.3073 3.898 80.9319 3.7471C80.5565 3.5962 80.1545 3.52277 79.75 3.53125C79.356 3.53941 78.9675 3.62511 78.6067 3.78344C78.2458 3.94177 77.9197 4.16963 77.6469 4.45402C77.3741 4.73841 77.16 5.07375 77.0168 5.44089C76.8737 5.80803 76.8042 6.19977 76.8125 6.59375V12.875C68.6156 4.86282 57.3081 0 45 0ZM43.75 20.75C43.356 20.7582 42.9675 20.8439 42.6067 21.0022C42.2458 21.1605 41.9197 21.3884 41.6469 21.6728C41.3741 21.9572 41.16 22.2925 41.0168 22.6596C40.8737 23.0268 40.8042 23.4185 40.8125 23.8125V47.375C40.8116 47.7693 40.8883 48.16 41.0385 48.5246C41.1886 48.8892 41.4092 49.2207 41.6875 49.5L54.0938 61.9375C54.6573 62.5011 55.4217 62.8177 56.2188 62.8177C57.0158 62.8177 57.7802 62.5011 58.3438 61.9375C58.9073 61.3739 59.224 60.6095 59.224 59.8125C59.224 59.0155 58.9073 58.2511 58.3438 57.6875L46.8125 46.1875V23.8125C46.821 23.408 46.7476 23.006 46.5966 22.6306C46.4457 22.2552 46.2205 21.9142 45.9344 21.6281C45.6483 21.342 45.3073 21.1168 44.9319 20.9658C44.5565 20.8149 44.1545 20.7415 43.75 20.75Z\\\"\\n ></path>\\n </svg>\\n <span class=\\\"appstle_tooltip_title\\\">{{{tooltipTitle}}}</span>\\n </div>\\n <div class=\\\"appstle_tooltip\\\">\\n <div class=\\\"appstle_tooltip_content\\\">\\n {{{toolTipDescription}}}\\n </div>\\n{{#showAppstleLink}}\\n <div class=\\\"appstle_tooltip_appstle\\\">\\n <a href=\\\"https://appstle.com\\\" class=\\\"appstle_link\\\" target=\\\"_blank\\\">\\n POWERED BY APPSTLE\\n </a>\\n </div>\\n{{/showAppstleLink}}\\n </div>\\n{{/showTooltip}}\\n<style>\\n.widgetSellingPlanWrapper {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n gap: 16px;\\n grid-auto-rows: 1fr;\\n margin-bottom: 6px;\\nmargin-top: 10px\\n}\\n.widgetSellingPlanWrapper input {\\n display: none;\\n}\\n.widgetSellingPlanWrapper label {\\n border-radius: 10px;\\n border: 1px solid rgba(var(--color-foreground, 0, 0, 0));\\n padding: 0.5rem;\\n display: flex !important;\\n flex-direction: column;\\n justify-content: center;
3493\\n align-items: center;\\n display: block;\\n height: 100%;\\n width: 100%;\\n text-align: center;\\ncursor: pointer;\\n}\\n.widgetSellingPlanWrapper input:checked+label {\\n background-color: rgba(var(--color-foreground, 0, 0, 0));\\n}\\n.appstle_lowercase {\\n text-transform: lowercase;\\n}\\n.appstle_input_wrapper {\\n position: relative;\\n}\\nspan.appstle_sellingPlan_discountText {\\n position: absolute;\\n font-size: 1.2rem;\\n background-color: rgba(var(--color-foreground, 0, 0, 0));\\n color: rgba(var(--color-background, 255, 255, 255));\\n border-radius: 3px;\\n border: 2px solid rgba(var(--color-background, 255, 255, 255));\\n padding: 1px 18px;\\n left: 50%;\\n display: block;\\n transform: translate(-50%, -50%);\\n white-space: nowrap;\\n}\\nspan.appstle_sellingPlan_discountText:empty {\\n display: none !important;\\n}\\nspan.appstle_lowercase.appstle_sellingPlan_price.appstle_onetime_amount_compare {\\ntext-decoration: line-through;\\n}\\n.appstle_tooltip_wrapper {\\n margin-bottom:10px;\\n}\\n.widgetSellingPlanWrapper input:checked+label {\\n background-color: rgba(var(--color-foreground, 0, 0, 0));\\n color: rgba(var(--color-background, 255, 255, 255));\\n border: 2px solid rgba(var(--color-background, 255, 255, 255)) !important;\\n}\\n</style>\\n</div>{% endraw %}\",\"WIDGET_TYPE_5\":\"{% raw %}<div id=\\\"appstle-widget-template\\\">\\n <div class=\\\"appstle_sub_widget\\\" id=\\\"appstle_subscription_widget{{widgetId}}\\\">\\n<div class=\\\"appstle_widget_title\\\">{{{purchaseOptionsText}}}</div>\\n <div class=\\\"widgetSellingPlanWrapper\\\">\\n{{^showSubOptionBeforeOneTime}}\\n{{^requires_selling_plan}}\\n <div class=\\\"appstle_input_wrapper\\\">\\n <input type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{/subscriptionOptionSelectedDefault}}/>\\n <label for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\">\\n {{{oneTimePuchaseText}}}\\n </label>\\n \\n </div>\\n{{/requires_selling_plan}}\\n{{/showSubOptionBeforeOneTime}}\\n {{#sellingPlanVariants}}\\n <div class=\\\"appstle_input_wrapper\\\">\\n <input type=\\\"radio\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" id=\\\"{{sellingPlanId}}\\\" value=\\\"{{sellingPlanId}}\\\" name=\\\"selling_plan\\\" {{#isChecked}}checked{{/isChecked}} />\\n <label for=\\\"{{sellingPlanId}}\\\">\\n {{{name}}}\\n </label>\\n \\n </div>\\n {{/sellingPlanVariants}}\\n{{#showSubOptionBeforeOneTime}}\\n{{^requires_selling_plan}}\\n <div class=\\\"appstle_input_wrapper\\\">\\n <input type=\\\"radio\\\" id=\\\"appstle_selling_plan_label_1{{widgetId}}\\\" name=\\\"selling_plan\\\" value=\\\"\\\" class=\\\"appstleSellingPlan{{widgetId}}\\\" {{^subscriptionOptionSelectedDefault}}checked{{/subscriptionOptionSelectedDefault}}/>\\n <label for=\\\"appstle_selling_plan_label_1{{widgetId}}\\\">\\n {{{oneTimePuchaseText}}}\\n </label>\\n \\n </div>\\n{{/requires_selling_plan}}\\n{{/showSubOptionBeforeOneTime}}\\n </div>\\n{{#showStaticTooltip}}\\n<div class=\\\"appstle_tooltip_wrapper_static\\\">{{{toolTipDescription}}}</div>\\n{{/showStaticTooltip}}\\n{{#showTooltip}}\\n <div data-appstle-icon=\\\"\\\" class=\\\"appstle_tooltip_wrapper\\\">\\n <svg width=\\\"90\\\" height=\\\"90\\\" viewBox=\\\"0 0 90 90\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"tooltip_subscription_svg\\\">\\n <path\\n d=\\\"M45 0C20.1827 0 0 20.1827 0 45C0 69.8173 20.1827 90 45 90C69.8173 90 90 69.8174 90 45C90.0056 44.6025 89.9322 44.2078 89.7839 43.8389C89.6357 43.47 89.4156 43.1342 89.1365 42.8511C88.8573 42.568 88.5247 42.3432 88.158 42.1897C87.7912 42.0363 87.3976 41.9573 87 41.9573C86.6024 41.9573 86.2088 42.0363 85.842 42.1897C85.4753 42.3432 85.1427 42.568 84.8
3493635 42.8511C84.5844 43.1342 84.3643 43.47 84.2161 43.8389C84.0678 44.2078 83.9944 44.6025 84 45C84 66.5748 66.5747 84 45 84C23.4253 84 6 66.5747 6 45C6 23.4254 23.4253 6 45 6C56.1538 6 66.3012 10.5882 73.4375 18H65.4062C65.0087 17.9944 64.614 18.0678 64.2451 18.2161C63.8762 18.3643 63.5405 18.5844 63.2573 18.8635C62.9742 19.1427 62.7494 19.4753 62.596 19.842C62.4425 20.2088 62.3635 20.6024 62.3635 21C62.3635 21.3976 62.4425 21.7912 62.596 22.158C62.7494 22.5247 62.9742 22.8573 63.2573 23.1365C63.5405 23.4156 63.8762 23.6357 64.2451 23.7839C64.614 23.9322 65.0087 24.0056 65.4062 24H79.8125C80.6081 23.9999 81.3711 23.6838 81.9337 23.1212C82.4963 22.5586 82.8124 21.7956 82.8125 21V6.59375C82.821 6.18925 82.7476 5.78722 82.5966 5.41183C82.4457 5.03644 82.2205 4.69545 81.9344 4.40936C81.6483 4.12327 81.3073 3.898 80.9319 3.7471C80.5565 3.5962 80.1545 3.52277 79.75 3.53125C79.356 3.53941 78.9675 3.62511 78.6067 3.78344C78.2458 3.94177 77.9197 4.16963 77.6469 4.45402C77.3741 4.73841 77.16 5.07375 77.0168 5.44089C76.8737 5.80803 76.8042 6.19977 76.8125 6.59375V12.875C68.6156 4.86282 57.3081 0 45 0ZM43.75 20.75C43.356 20.7582 42.9675 20.8439 42.6067 21.0022C42.2458 21.1605 41.9197 21.3884 41.6469 21.6728C41.3741 21.9572 41.16 22.2925 41.0168 22.6596C40.8737 23.0268 40.8042 23.4185 40.8125 23.8125V47.375C40.8116 47.7693 40.8883 48.16 41.0385 48.5246C41.1886 48.8892 41.4092 49.2207 41.6875 49.5L54.0938 61.9375C54.6573 62.5011 55.4217 62.8177 56.2188 62.8177C57.0158 62.8177 57.7802 62.5011 58.3438 61.9375C58.9073 61.3739 59.224 60.6095 59.224 59.8125C59.224 59.0155 58.9073 58.2511 58.3438 57.6875L46.8125 46.1875V23.8125C46.821 23.408 46.7476 23.006 46.5966 22.6306C46.4457 22.2552 46.2205 21.9142 45.9344 21.6281C45.6483 21.342 45.3073 21.1168 44.9319 20.9658C44.5565 20.8149 44.1545 20.7415 43.75 20.75Z\\\"\\n ></path>\\n </svg>\\n <span class=\\\"appstle_tooltip_title\\\">{{{tooltipTitle}}}</span>\\n </div>\\n<div class=\\\"appstle_tooltip appstle_tooltip_hover\\\">\\n <div class=\\\"appstle_tooltip_content\\\">\\n {{{toolTipDescription}}}\\n </div>\\n {{#showAppstleLink}}\\n <div class=\\\"appstle_tooltip_appstle\\\">\\n <a href=\\\"https://appstle.com\\\" class=\\\"appstle_link\\\" target=\\\"_blank\\\">\\n POWERED BY APPSTLE\\n </a>\\n </div>\\n {{/showAppstleLink}}\\n </div>\\n{{/showTooltip}}\\n <style>\\n .widgetSellingPlanWrapper {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n gap: 8px;\\n grid-auto-rows: 1fr;\\n margin-bottom: 6px;\\n margin-top: 10px;\\n }\\n \\n .widgetSellingPlanWrapper input {\\n display: none;\\n }\\n \\n .widgetSellingPlanWrapper label {\\n border-radius: 4px;\\n border: 1px solid rgba(var(--color-foreground));\\n padding: 0.5rem;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n display: block;\\n height: 100%;\\n width: 100%;\\n text-align: center;\\n \\t color: rgba(var(--color-foreground));\\ncursor: pointer;\\n }\\n \\n .widgetSellingPlanWrapper input:checked+label {\\n background-color: rgba(var(--color-foreground));\\n \\t color: rgba(var(--color-background));\\n }\\n .appstle_lowercase {\\n text-transform: lowercase;\\n }\\n \\n \\n .appstle_input_wrapper {\\n position: relative;\\n }\\n \\n span.appstle_sellingPlan_discountText {\\n position: absolute;\\n background-color: rgba(var(--color-foreground));\\n color: rgba(var(--color-background));\\n border-radius: 3px;\\n padding: 1px 18px;\\n left: 50%;\\n display: block;\\n transform: translate(-50%, -50%);\\n white-space: nowrap;\\n }\\n span.appstle_sellingPlan_discountText:empty {\\n display: none !important;\\n }\\n </style>\\n </div>{% endraw %}\"}", 3494 3495 3496 "bundle": {}, 3497 3498 3499 "labels": `{\"appstle.subscription.wg.noSubscriptionLabelTextV2\":\"No Subscription\",\"appstle.subscription.wg.cancelAnytimeLabelTextV2\":\"Cancel Anytime\",\"appstle.subscription.wg.addToShipmentErrorTextV2\":\"Error\",\"appstle.subscription.wg.weeksFrequencyTextV2\":\"Weeks\",\"appstle.subscription.wg.weeklyLabelTextV2\":\"Weekly\",\"appstle.subscription.wg.displayAddToExistingSubscriptionButtonForNotLoggedInV2\":\"false\",\"appstle.subscription.wg.addToShipmentProcessingV2\":\"Processing...\",\"appstle.subscription.wg.showWidgetStaticV2\":\"false\",\"appstle.subscription.wg.subscribeAndSaveInitalV2\":\"Subscribe & save\",\"appstle.subscription.wg.deliveryEveryFrequencyTextV2\":\"Delivery Every\",\"appstle.subscription.wg.allowRefreshOnCartPageV2\":\"false\",\"appstle.subscription.wg.prepaidLabelTextV2\":\"Prepaid\",\"appstle.subscription.wg.daysFrequencyTextV2\":\"Days\",\"appstle.subscription.wg.monthlyLabelTextV2\":\"Monthly\",\"appstle.subscription.wg.subscribeAndSaveSuccessV2\":\"Subscribe success\",\"appstle.subscription.wg.addToShipmentSuccessTextV2\":\"Success\",\"appstle.subscription.wg.monthFrequencyTextV2\":\"Month\",\"appstle.subscription.wg.addToShipmentButtonTextV2\":\"Add to Shipment\",\"appstle.subscription.wg.displayAddToExistingSubscriptionButtonToSubscribersOnlyV2\":\"false\",\"appstle.subscription.wg.yearsFrequencyTextV2\":\"Years\",\"appstle.subscription.wg.addToShipmentTooltipTextV2\":\"Please avoid double delivery charges! Login to add this product to an upcoming delivery.\",\"appstle.subscription.wg.weekFrequencyTextV2\":\"Week\",\"appstle.subscription.wg.oneTimePurchaseTextV2\":\"One Time Purchase\",\"appstle.subscription.wg.loyaltyPerkDescriptionTextV2\":\"{{#isDiscountTypeFreeProduct}}<div style='display: flex;'><div style='height: 60px; width: 60px; flex-shrink: 0; margin-right: 10px;'><img style='width: 100%' src={{{featured_image}}}><\/img><\/div><div>After {{{billingCycleBlock}}} orders,<span style='color: #ffc000;font-weight: 700;';> get a FREE {{freeProductName}} <\/span><\/div><div>{{\/isDiscountTypeFreeProduct}}{{#isDiscountTypePercentage}}After <span class='appstle-loyalty-billing-cycle'><span class='appstle-loyalty-billing-cycle-count'>{{{billingCycleBlock}}}<\/span> order<\/span>, <span class='appstle-loyalty-discount'>
3499get <span style='color: #ffc000;font-weight: 700;';>{{{discount}}}% OFF your entire order<\/span><\/span>.{{\/isDiscountTypePercentage}}{{#isDiscountTypeShipping}}After <span class='appstle-loyalty-billing-cycle'><span class='appstle-loyalty-billing-cycle-count'>{{{billingCycleBlock}}}<\/span> order<\/span>, <span class='appstle-loyalty-discount'>get <span style='color: #ffc000;font-weight: 700;';>shipping at {{{formatDiscountedPrice}}}<\/span><\/span>.{{\/isDiscountTypeShipping}}{{#isDiscountTypeFixed}}After <span class='appstle-loyalty-billing-cycle'><span class='appstle-loyalty-billing-cycle-count'>{{{billingCycleBlock}}}<\/span> order<\/span>, <span class='appstle-loyalty-discount'>get <span style='color: #ffc000;font-weight: 700;';>{{{formatDiscountedPrice}}} OFF your entire order<\/span><\/span>.{{\/isDiscountTypeFixed}}\",\"appstle.subscription.wg.unsubscribeFrequencyTextV2\":\"Unsubscribe\",\"appstle.subscription.wg.bundleDiscountTextV2\":\"bundle discount extra: {{bundleDiscount}} off\",\"appstle.subscription.wg.oneTimeFrequencyTextV2\":\"One Time\",\"appstle.subscription.wg.dayFrequencyTextV2\":\"day\",\"appstle.subscription.wg.allowFulfilmentCountViaPropertiesV2\":\"true\",\"appstle.subscription.wg.monthsFrequencyTextV2\":\"Months\",\"appstle.subscription.wg.prepaidSaveBadgeTextV2\":\"SAVE {{selectedDiscountPercentage}}\",\"appstle.subscription.wg.showPrepidPerDeliveryProductPriceV2\":\"false\",\"appstle.subscription.wg.manageSubscriptionButtonTextV2\":\"Manage Subscription\",\"appstle.subscription.wg.offFrequencyTextV2\":\"Off\",\"appstle.subscription.wg.yearFrequencyTextV2\":\"Year\",\"appstle.subscription.wg.prepayLabelTextV2\":\"Prepay\",\"appstle.subscription.wg.frequencyCombinedWidgetTextV2\":\"Frequency\",\"appstle.subscription.wg.showNewLoyaltyUI\":\"false\",\"appstle.subscription.wg.sellingPlanTitleTextNonPrepaid\":\"{{sellingPlanName}}\",\"appstle.subscription.wg.selectDeliverOptionV2\":\"Select Delivery Option\",\"appstle.subscription.wg.yearlyLabelTextV2\":\"Yearly\"}`, 3500 3501 "css": { 3502 "appstle_subscription_widget": { 3503 "margin-top": "" , 3504 "margin-bottom": "", 3505 }, 3506 3507 "appstle_subscription_wrapper": { 3508 "border-width": "", 3509 "border-color": "", 3510 }, 3511 3512 "appstle_circle": { 3513 "border-color": "", 3514 }, 3515 3516 "appstle_dot": { 3517 "background-color": "", 3518 }, 3519 3520 "appstle_select": { 3521 "padding-top": "", 3522 "padding-bottom": "", 3523 "padding-left": "", 3524 "padding-right": "", 3525 "border-width": "", 3526 "border-style": "", 3527 "border-color": "", 3528 "border-radius": "", 3529 }, 3530 3531 "tooltip_subscription_svg": { 3532 "fill": "", 3533 }, 3534 3535 "appstle_tooltip": { 3536 "color": "", 3537 "background-color": "", 3538 }, 3539 3540 "appstle_tooltip_border_top_color": { 3541 "border-top-color": "", 3542 }, 3543 3544 "appstle_subscription_final_price": { 3545 "color": "", 3546 }, 3547 "appstle_widget_text_color": { 3548 "color": "", 3549 }, 3550 "appstle_selected_background": { 3551 "background": "transparent", 3552 }, 3553 "elementCSS": "[\".appstle_sub_widget, .appstle_subscription_wrapper_option, div.appstle_subscription_wrapper, .widgetSellingPlanWrapper label,.appstle_sub_widget input[type\\u003dradio]+label:before { border-radius: 10px !important;}\\n.WIDGET_TYPE_2 .appstle_subscription_wrapper_option{ border-radius: 0px !important;}\\n\",\".appstle_subscription_amount, .appstle_onetime_amount, .appstle_sellingPlan_price { color: #425735 !important; }\"]", 3554 "customCSS": ".text-link.giftbox-checkout{\r\n display: none !important;\r\n}\r\nbutton.btn.evm-ws__cart-submit.ws_ls_lang{\r\npadding: 17px !important;\r\n}", 3555 "customerPortalCss": "", 3556 "externalStyleTag": "button.btn.evm-ws__cart-submit.ws_ls_lang{padding: 17px !important;}", 3557 "themeCss": "", 3558 } 3559 }; 3560 3561 3562 window.AppstleSubscription = window.AppstleSubscription || JSON.parse(JSON.stringify(RS)); 3563 3564 sessionStorage['appstleSubscriptionConfig'] = JSON.stringify(RS.Config); 3565 3566 3567 try { 3568 3569 window.appstle_build_a_box_labels = {"perDeliveryLabelTextV2":"\\/delivery","variantNotAvailable":"Not Available","saveDiscountText":"{{discount}}","bundleSummaryTextV2":"Your bundle is empty. Please add products to your bundles to see bundle summary here.","freeProductLabelTextV2":"Free","bundleDescriptionTextV2":"Our bundle of all bundles, The Ultimate Superfood Bundle delivers exactly what it promises - a complete superfood solution. With 7 superfood blends each created to empower every aspect of your health and wellbeing - from immunity and gut health to energy & better focus.","productDetails":"Product Details","failedToAddMsgText":"Cart can't have more than {{maxProduct}}
3569 products","cart":"Cart","reviewBundleTextV2":"Review Bundle","addButtonText":"Add","minimumQuantityToCheckoutV2":"Minimum {{quantity}} quantity to checkout","buildBoxErrormsgV2":"Build a Box token is Invalid, Please reach out to support.","continueShopping":"Continue shopping","failedToAddTitleText":"Failed to add","spendAmountGetDiscount":"Spend {{amount}} get {{percent}}% discount","maxiumQuantityToCheckoutV2":"Minimum {{quantity}} quantity to checkout","contentsOnModalTextV2":"Contents","nextStepButtonTextV2":"Next Step","choosePlanLifeStyleTextV2":"Choose a plan to match your lifestyle","selectMinimumProductButtonText":"Please select {{minProduct}} minimum product","subtotal":"Subtotal","buyQuantityGetDiscount":"Buy {{quantity}} get {{percent}}% discount","loyaltyTablePercentageTextV2":"After <span class='appstle-loyalty-billing-cycle'><span class=''>{{billingCycle}}<\\/span> order<\\/span>, <span class='appstle-loyalty-discount'>get <span class='appstle-loyalty-discount-amount'>{{discount}}% off<\\/span><\\/span>.","loyaltyTablePriceTextV2":"After <span class='appstle-loyalty-billing-cycle'><span class=''>{{billingCycle}}<\\/span> order<\\/span>, <span class='appstle-loyalty-discount'>get at <span class='appstle-loyalty-discount-amount'>{{price}}<\\/span><\\/span>.","myDeliveryText":"My {{selectedSellingPlanDisplayName}} delivery","removeItem":null,"productsToProceedText":"Please select products to proceed","previousStepButtonTextV2":"Previous step","loadMoreTextV2":"Load more","selectedFrequencyLabelText":"Selected Frequency","addToCartButtonTextV2":"Add To Cart ","basePriceFormatFieldV2":"{{unitPrice}}\\/{{quantityUnit}}","title":"Build a box","productPriceFormatField":"{{price}}","reviewOrdeDescriptionTextV2":"Check your items and select your required frequency plan","quantityLabelV2":"Quantity","minimumOrderAmountLabelTextV2":"Minimum order amount {{minOrderAmount}}.","subscriptionNotAvailableButtonV2":"Subscription not available","shoppingCart":"Shopping Cart","checkoutMessage":"Shipping and taxes calculated at checkout.","selectedButtonTextV2":"Selected","congratsMessageText":null,"okBtnText":"Ok","tieredDiscount":"Tiered Discount","choosePlanLifeStyleDescriptionTextV2":"Cutoff each week to amend your meals is midnight on Thursday's. (Delivery Schedule is as follows: Gold Coast - Mondays | Brisbane & Sunshine Coast - Wednesdays)","orderNoteLabelTextV2":"Order Note","minimumToCheckoutV2":"Minimum {{quantity}} to checkout","loyaltyTableFixedTextV2":"After <span class='appstle-loyalty-billing-cycle'><span class=''>{{billingCycle}}<\\/span> order<\\/span>, <span class='appstle-loyalty-discount'>get <span class='appstle-loyalty-discount-amount'>{{price}} off<\\/span><\\/span>.","editQuantity":"Edit Quantity","chooseProductsTextV2":"Choose Products","loyaltyTableFreeProductTextV2":"After <span class='appstle-loyalty-billing-cycle'><span class=''>{{billingCycle}}<\\/span> order<\\/span>, <span class='appstle-loyalty-discount'>get <span class='appstle-loyalty-discount-amount'>FREE PRODUCT ({{productName}})<\\/span><\\/span>.","loyaltyTableShippingTextV2":"After <span class='appstle-loyalty-billing-cycle'><span class=''>{{billingCycle}}<\\/span> order<\\/span>, <span class='appstle-loyalty-discount'>get <span class='appstle-loyalty-discount-amount'>shipping at {{price}}<\\/span><\\/span>.","spentText":null,"quantityLabel":null,"addButtonV2":"Add","loyaltyTableFreeTrailTextV2":"Get <span class='appstle-loyalty-free-trial-discount'>{{discount}} <span class='appstle-loyalty-free-trial-discount-count' style='text-transform: lowercase;'>{{discountType}} <\\/span><\\/span> <span class='appstle-loyalty-free-trial-text'>free trial.<\\/span>","bundleCheckoutTextV2":"Checkout","reviewOrderTextV2":"Review Order","goBackButtonText":"Go Back","selectPlanTextV2":"Select Plan","viewProduct":"View Product","bundleOnModalTextV2":"Bundle","proceedToCheckoutButtonText":"Proceed to checkout","pleaseWaitLabelTextV2":"Please wait...","typeToSearchPlaceholderTextV2":"Type to search","selectedProgressLabelTextV2":"Selected","outOfStockTextV2":"Out of stock"}; 3570 3571 } catch (e) { 3572 console.error("Error parsing build a box labels:", e); 3573 } 3574 3575 3576 var _RSConfig = _RSConfig || {}; 3577 3578 _RSConfig.shop = 'tabanero-cigars.myshopify.com'; 3579 3580 3581 3582 3583 3584 3585 _RSConfig.shopMoneyFormat = '$ {{amount}}'; 3586 _RSConfig.shopMoneyFormatWithCurrencyFormat = '$ {{amount}} USD'; 3587 3588 3589 3590 3591 } 3592 3593 3594 3595 _RSConfig.assetRev = "a726c91178427ad41a3882c36f751d6d"; 3596 3597 3598</script>
3598 3599 3600<style id="appstle-payment-button-override"> 3601 .shopify-payment-button {display: none;} 3602</style>
3603<script> 3604 let appstleCount = 0 3605 function isAppstleJSInitiated() { 3606 appstleCount++; 3607 if (window?.["RSConfig"] || appstleCount > 20) { 3608 let appstleStyleElement = document.querySelector('#appstle-payment-button-override'); 3609 if (appstleStyleElement) { 3610 appstleStyleElement.remove(); 3611 } 3612 } else { 3613 setTimeout(isAppstleJSInitiated, 500) 3614 } 3615 } 3616 isAppstleJSInitiated(); 3617</script>
3617 3618 3619<style> 3620button.btn.evm-ws__cart-submit.ws_ls_lang{padding: 17px !important;} 3621</style>
3622<script> 3623 function pollAppstleInit() { 3624 if (window?.appstleInit) { 3625 window?.appstleInit() 3626 } else { 3627 setTimeout(pollAppstleInit, 30); 3628 } 3629 } 3630</script>
3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648
3648<script src="https://subscription-admin.appstle.com/assets/js/appstle-subscription.min.js?shop=tabanero-cigars.myshopify.com&v=1789149464677" defer ></script>
3648 3649 3650 3651 3652 3653 3654 3655 3656 3657</div>
3657<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
3657 3658</body> 3659</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.