1<!doctype html> 2 <html class="js" lang="en"> 3 <head> 4
4<script> 5 (function() { 6 // Tráfico que no queremos registrar en analÃtica: entra, no interactúa 7 // y no compra. Cloudflare nos dice el paÃs y cortamos la carga ahà mismo. 8 // Añadir o quitar paÃses es tocar solo esta lista (códigos ISO de dos letras). 9 var PAISES_BLOQUEADOS = ['CN', 'HK', 'SG', 'VN']; 10 11 fetch('/cdn-cgi/trace') 12 .then(function(res) { return res.text(); }) 13 .then(function(data) { 14 var locMatch = data.match(/loc=([A-Z]+)/); 15 if (locMatch && locMatch.length > 1) { 16 if (PAISES_BLOQUEADOS.indexOf(locMatch[1]) !== -1) { 17 if (window.stop) { window.stop(); } 18 } 19 } 20 }) 21 .catch(function(err) { /* Ignorar errores */ }); 22 })(); 23 </script>
23 24 <meta charset="utf-8"> 25 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 26 <meta name="viewport" content="width=device-width,initial-scale=1"> 27 <meta name="theme-color" content=""> 28 <link rel="canonical" href="https://epic-cycles.com/pages/blog"><link rel="icon" type="image/png" href="//epic-cycles.com/cdn/shop/files/favicon-epic.jpg?crop=center&height=32&v=1689348559&width=32"><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin><link rel="preconnect" href="https://fonts.googleapis.com"> 29 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 30 <link 31 rel="stylesheet" 32 href="https://fonts.googleapis.com/css2?family=Nunito+Sans:ital,opsz,wght@0,6..12,200..1000;1,6..12,200..1000&family=Syncopate:wght@400;700&display=swap" 33 media="print" 34 onload="this.media='all'" 35 > 36 <noscript> 37 <link 38 rel="stylesheet" 39 href="https://fonts.googleapis.com/css2?family=Nunito+Sans:ital,opsz,wght@0,6..12,200..1000;1,6..12,200..1000&family=Syncopate:wght@400;700&display=swap" 40 > 41 </noscript> 42 43 <title> 44 Blog 45 – Epic Cycles</title> 46 47 48 49 50 51<meta property="og:site_name" content="Epic Cycles"> 52<meta property="og:url" content="https://epic-cycles.com/pages/blog"> 53<meta property="og:title" content="Blog"> 54<meta property="og:type" content="website"> 55<meta property="og:description" content="Get the best specialty road, mountain, electric and triathlon bikes on USA. Our Epic Pros are ready to help you finding the best product"><meta property="og:image" content="http://epic-cycles.com/cdn/shop/files/epic_logo_black_1.png?v=1740669210"> 56 <meta property="og:image:secure_url" content="https://epic-cycles.com/cdn/shop/files/epic_logo_black_1.png?v=1740669210"> 57 <meta property="og:image:width" content="5022"> 58 <meta property="og:image:height" content="2658"><meta name="twitter:card" content="summary_large_image"> 59<meta name="twitter:title" content="Blog"> 60<meta name="twitter:description" content="Get the best specialty road, mountain, electric and triathlon bikes on USA. Our Epic Pros are ready to help you finding the best product"> 61 62 63
63<script src="//epic-cycles.com/cdn/shop/t/42/assets/constants.js?v=132983761750457495441760957016" defer="defer"></script>
63 64
64<script src="//epic-cycles.com/cdn/shop/t/42/assets/pubsub.js?v=158357773527763999511760957019" defer="defer"></script>
64 65
65<script src="//epic-cycles.com/cdn/shop/t/42/assets/global.js?v=84974950447748309671771493793" defer="defer"></script>
65 66
66<script src="//epic-cycles.com/cdn/shop/t/42/assets/accessibility.js?v=130998558157462495391779454277" defer="defer"></script>
66 67
67<script src="//epic-cycles.com/cdn/shop/t/42/assets/details-disclosure.js?v=13653116266235556501760957018" defer="defer"></script>
67 68
68<script src="//epic-cycles.com/cdn/shop/t/42/assets/details-modal.js?v=93410046925572498041760957018" defer="defer"></script>
68 69
69<script src="//epic-cycles.com/cdn/shop/t/42/assets/search-form.js?v=27069097398074089421760957017" defer="defer"></script>
69<script src="//epic-cycles.com/cdn/shop/t/42/assets/animations.js?v=88693664871331136111760957017" defer="defer"></script>
69<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
69<meta name="facebook-domain-verification" content="05rwpc59gwc113i4wegglayyajcex5"> 70<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/55566532655/digital_wallets/dialog"> 71<meta id="in-context-paypal-metadata" data-shop-id="55566532655" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 72<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
72<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=2825257007"></script>
72 73<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
74<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=2825257007&shop_id=55566532655" crossorigin="anonymous"></script>
vendor: 1 bytes, line 74
74
75<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":55566532655,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/55566532655","merchantName":"Epic Cycles","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Epic Cycles","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 75
75
76<script id="shopify-features" type="application/json">{"accessToken":"bf900e29da5ee336263ed640721c3a3d","betas":["rich-media-storefront-analytics"],"domain":"epic-cycles.com","predictiveSearch":true,"shopId":55566532655,"locale":"en"}</script>
vendor: 1 bytes, line 76
76
77<script>var Shopify = Shopify || {}; 78Shopify.shop = "epic-cycles2018.myshopify.com"; 79Shopify.locale = "en"; 80Shopify.currency = {"active":"USD","rate":"1.0"}; 81Shopify.country = "US"; 82Shopify.theme = {"name":"epic-b","id":149535981615,"schema_name":"Dawn","schema_version":"15.2.0","theme_store_id":null,"role":"main"}; 83Shopify.theme.handle = "null"; 84Shopify.theme.style = {"id":null,"handle":null}; 85Shopify.cdnHost = "epic-cycles.com/cdn"; 86Shopify.routes = Shopify.routes || {}; 87Shopify.routes.root = "/"; 88Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 89Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 90Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 91Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 91
91
92<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 92
92
93<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 93
93
94<script> 95 window.ShopifyPay = window.ShopifyPay || {}; 96 window.ShopifyPay.apiHost = "shop.app\/pay"; 97 window.ShopifyPay.redirectState = null; 98</script>
vendor: 1 bytes, line 98
98
99<script> 100 window.Shopify = window.Shopify || {}; 101 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 102 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 103 window.Shopify.SignInWithShop.eligible = true; 104</script>
vendor: 1 bytes, line 104
104
105<script id="shop-js-analytics" type="application/json">{"pageType":"page"}</script>
vendor: 1 bytes, line 105
105
106<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 106
106
107<script type="module"> 108 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 109 110 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 111 112</script>
vendor: 1 bytes, line 112
112
113<script> 114 window.Shopify = window.Shopify || {}; 115 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 116 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"]}; 117</script>
vendor: 1 bytes, line 117
117
118<script>(function() { 119 var isLoaded = false; 120 function asyncLoad() { 121 if (isLoaded) return; 122 isLoaded = true; 123 var urls = ["https:\/\/shy.elfsight.com\/p\/platform.js?shop=epic-cycles2018.myshopify.com","\/\/d1liekpayvooaz.cloudfront.net\/apps\/customizery\/customizery.js?shop=epic-cycles2018.myshopify.com"]; 124 for (var i = 0; i < urls.length; i++) { 125 var s = document.createElement('script'); 126 s.type = 'text/javascript'; 127 s.async = true; 128 s.src = urls[i]; 129 var x = document.getElementsByTagName('script')[0]; 130 x.parentNode.insertBefore(s, x); 131 } 132 }; 133 if(window.attachEvent) { 134 window.attachEvent('onload', asyncLoad); 135 } else { 136 window.addEventListener('load', asyncLoad, false); 137 } 138})();</script>
vendor: 1 bytes, line 138
138
139<script id="__st">var __st={"a":55566532655,"offset":-21600,"reqid":"720586d5-99ea-465c-b065-53415c920a20-1791147271","pageurl":"epic-cycles.com\/pages\/blog","s":"pages-115855360047","u":"a1e5d777105e","p":"page","rtyp":"page","rid":115855360047};</script>
vendor: 1 bytes, line 139
139
140<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 140
140
141<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 141
141
142<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//epic-cycles.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 142
142
143<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 = "//epic-cycles.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>
143<script crossorigin="anonymous" defer="defer" src="//epic-cycles.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 143
143
144<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 144
144
145<script> 146 window.Shopify = window.Shopify || {}; 147 window.Shopify.MCP = window.Shopify.MCP || {}; 148 window.Shopify.MCP.enabled = true; 149 window.Shopify.MCP.shop = "epic-cycles2018.myshopify.com"; 150 window.Shopify.MCP.mcpEndpoint = "https:\/\/epic-cycles.com\/api\/mcp"; 151 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"]}}]; 152</script>
vendor: 1 bytes, line 152
152
153<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("\/\/epic-cycles.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 154</script>
vendor: 1 bytes, line 154
154
155<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://epic-cycles.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 156</script>
vendor: 1 bytes, line 156
156
157<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 158 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); 159</script>
vendor: 1 bytes, line 159
159
160<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})}})); 161</script>
161 162<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://epic-cycles.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 163<style id="shopify-accelerated-checkout-cart"> 164 #shopify-buyer-consent { 165 margin-top: 1em; 166 display: inline-block; 167 width: 100%; 168} 169 170#shopify-buyer-consent.hidden { 171 display: none; 172} 173 174#shopify-subscription-policy-button { 175 background: none; 176 border: none; 177 padding: 0; 178 text-decoration: underline; 179 font-size: inherit; 180 cursor: pointer; 181} 182 183#shopify-subscription-policy-button::before { 184 box-shadow: none; 185} 186 187 </style>
188<script id="sections-script" data-sections="featured-blog,header" defer="defer" src="//epic-cycles.com/cdn/shop/t/42/compiled_assets/scripts.js?v=54249736632300152211761732427"></script>
vendor: 1 bytes, line 188
188
189<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
189 190 191 192 <style data-shopify> 193 @font-face { 194 font-family: Assistant; 195 font-weight: 400; 196 font-style: normal; 197 font-display: swap; 198 src: url("//epic-cycles.com/cdn/fonts/assistant/assistant_n4.9120912a469cad1cc292572851508ca49d12e768.woff2") format("woff2"), 199 url("//epic-cycles.com/cdn/fonts/assistant/assistant_n4.6e9875ce64e0fefcd3f4446b7ec9036b3ddd2985.woff") format("woff"); 200} 201 202 @font-face { 203 font-family: Assistant; 204 font-weight: 700; 205 font-style: normal; 206 font-display: swap; 207 src: url("//epic-cycles.com/cdn/fonts/assistant/assistant_n7.bf44452348ec8b8efa3aa3068825305886b1c83c.woff2") format("woff2"), 208 url("//epic-cycles.com/cdn/fonts/assistant/assistant_n7.0c887fee83f6b3bda822f1150b912c72da0f7b64.woff") format("woff"); 209} 210 211 212 213 @font-face { 214 font-family: Assistant; 215 font-weight: 400; 216 font-style: normal; 217 font-display: swap; 218 src: url("//epic-cycles.com/cdn/fonts/assistant/assistant_n4.9120912a469cad1cc292572851508ca49d12e768.woff2") format("woff2"), 219 url("//epic-cycles.com/cdn/fonts/assistant/assistant_n4.6e9875ce64e0fefcd3f4446b7ec9036b3ddd2985.woff") format("woff"); 220} 221 222 223 224 :root, 225 .color-scheme-1 { 226 --color-background: 255,255,255; 227 228 --gradient-background: #ffffff; 229 230 231 232 233 --color-foreground: 18,18,18; 234 --color-background-contrast: 191,191,191; 235 --color-shadow: 18,18,18; 236 --color-button: 18,18,18; 237 --color-button-text: 255,255,255; 238 --color-secondary-button: 255,255,255; 239 --color-secondary-button-text: 18,18,18; 240 --color-link: 18,18,18; 241 --color-badge-foreground: 18,18,18; 242 --color-badge-background: 255,255,255; 243 --color-badge-border: 18,18,18; 244 --payment-terms-background-color: rgb(255 255 255); 245 } 246 247 248 .color-scheme-2 { 249 --color-background: 243,243,243; 250 251 --gradient-background: #f3f3f3; 252 253 254 255 256 --color-foreground: 18,18,18; 257 --color-background-contrast: 179,179,179; 258 --color-shadow: 18,18,18; 259 --color-button: 18,18,18; 260 --color-button-text: 243,243,243; 261 --color-secondary-button: 243,243,243; 262 --color-secondary-button-text: 18,18,18; 263 --color-link: 18,18,18; 264 --color-badge-foreground: 18,18,18; 265 --color-badge-background: 243,243,243; 266 --color-badge-border: 18,18,18; 267 --payment-terms-background-color: rgb(243 243 243); 268 } 269 270 271 .color-scheme-3 { 272 --color-background: 36,40,51; 273 274 --gradient-background: #242833; 275 276 277 278 279 --color-foreground: 255,255,255; 280 --color-background-contrast: 47,52,66; 281 --color-shadow: 18,18,18; 282 --color-button: 255,255,255; 283 --color-button-text: 0,0,0; 284 --color-secondary-button: 36,40,51; 285 --color-secondary-button-text: 255,255,255; 286 --color-link: 255,255,255; 287 --color-badge-foreground: 255,255,255; 288 --color-badge-background: 36,40,51; 289 --color-badge-border: 255,255,255; 290 --payment-terms-background-color: rgb(36 40 51); 291 } 292 293 294 .color-scheme-4 { 295 --color-background: 18,18,18; 296 297 --gradient-background: #121212; 298 299 300 301 302 --color-foreground: 255,255,255; 303 --color-background-contrast: 146,146,146; 304 --color-shadow: 18,18,18; 305 --color-button: 255,255,255; 306 --color-button-text: 18,18,18; 307 --color-secondary-button: 18,18,18; 308 --color-secondary-button-text: 255,255,255; 309 --color-link: 255,255,255; 310 --color-badge-foreground: 255,255,255; 311 --color-badge-background: 18,18,18; 312 --color-badge-border: 255,255,255; 313 --payment-terms-background-color: rgb(18 18 18); 314 } 315 316 317 .color-scheme-5 { 318 --color-background: 51,79,180; 319 320 --gradient-background: #334fb4; 321 322 323 324 325 --color-foreground: 255,255,255; 326 --color-background-contrast: 23,35,81; 327 --color-shadow: 18,18,18; 328 --color-button: 255,255,255; 329 --color-button-text: 51,79,180; 330 --color-secondary-button: 51,79,180; 331 --color-secondary-button-text: 255,255,255; 332 --color-link: 255,255,255; 333 --color-badge-foreground: 255,255,255; 334 --color-badge-background: 51,79,180; 335 --color-badge-border: 255,255,255; 336 --payment-terms-background-color: rgb(51 79 180); 337 } 338 339 340 .color-scheme-0bb9a0c8-723c-4022-ad59-98d02041403c { 341 --color-background: 18,18,18; 342 343 --gradient-background: #121212; 344 345 346 347 348 --color-foreground: 255,255,255; 349 --color-background-contrast: 146,146,146; 350 --color-shadow: 18,18,18; 351 --color-button: 158,229,202; 352 --color-button-text: 255,255,255; 353 --color-secondary-button: 18,18,18; 354 --color-secondary-button-text: 18,18,18; 355 --color-link: 18,18,18; 356 --color-badge-foreground: 255,255,255; 357 --color-badge-background: 18,18,18; 358 --color-badge-border: 255,255,255; 359 --payment-terms-background-color: rgb(18 18 18); 360 } 361 362 363 body, .color-scheme-1, .color-scheme-2, .color-scheme-3, .color-scheme-4, .color-scheme-5, .color-scheme-0bb9a0c8-723c-4022-ad59-98d02041403c { 364 color: rgba(var(--color-foreground), 0.75); 365 background-color: rgb(var(--color-background)); 366 } 367 368 :root { 369 --font-body-family: Assistant, sans-serif; 370 --font-body-style: normal; 371 --font-body-weight: 400; 372 --font-body-weight-bold: 700; 373 374 --font-heading-family: Assistant, sans-serif; 375 --font-heading-style: normal; 376 --font-heading-weight: 400; 377 378 --font-body-scale: 1.0; 379 --font-heading-scale: 1.0; 380 381 --media-padding: px; 382 --media-border-opacity: 0.05; 383 --media-border-width: 1px; 384 --media-radius: 0px;
385 --media-shadow-opacity: 0.0; 386 --media-shadow-horizontal-offset: 0px; 387 --media-shadow-vertical-offset: 4px; 388 --media-shadow-blur-radius: 5px; 389 --media-shadow-visible: 0; 390 391 --page-width: 120rem; 392 --page-width-margin: 0rem; 393 394 --product-card-image-padding: 0.0rem; 395 --product-card-corner-radius: 0.0rem; 396 --product-card-text-alignment: left; 397 --product-card-border-width: 0.0rem; 398 --product-card-border-opacity: 0.1; 399 --product-card-shadow-opacity: 0.0; 400 --product-card-shadow-visible: 0; 401 --product-card-shadow-horizontal-offset: 0.0rem; 402 --product-card-shadow-vertical-offset: 0.4rem; 403 --product-card-shadow-blur-radius: 0.5rem; 404 405 --collection-card-image-padding: 0.0rem; 406 --collection-card-corner-radius: 0.0rem; 407 --collection-card-text-alignment: left; 408 --collection-card-border-width: 0.0rem; 409 --collection-card-border-opacity: 0.1; 410 --collection-card-shadow-opacity: 0.0; 411 --collection-card-shadow-visible: 0; 412 --collection-card-shadow-horizontal-offset: 0.0rem; 413 --collection-card-shadow-vertical-offset: 0.4rem; 414 --collection-card-shadow-blur-radius: 0.5rem; 415 416 --blog-card-image-padding: 0.0rem; 417 --blog-card-corner-radius: 0.0rem; 418 --blog-card-text-alignment: left; 419 --blog-card-border-width: 0.0rem; 420 --blog-card-border-opacity: 0.1; 421 --blog-card-shadow-opacity: 0.0; 422 --blog-card-shadow-visible: 0; 423 --blog-card-shadow-horizontal-offset: 0.0rem; 424 --blog-card-shadow-vertical-offset: 0.4rem; 425 --blog-card-shadow-blur-radius: 0.5rem; 426 427 --badge-corner-radius: 4.0rem; 428 429 --popup-border-width: 1px; 430 --popup-border-opacity: 0.1; 431 --popup-corner-radius: 0px; 432 --popup-shadow-opacity: 0.05; 433 --popup-shadow-horizontal-offset: 0px; 434 --popup-shadow-vertical-offset: 4px; 435 --popup-shadow-blur-radius: 5px; 436 437 --drawer-border-width: 1px; 438 --drawer-border-opacity: 0.1; 439 --drawer-shadow-opacity: 0.0; 440 --drawer-shadow-horizontal-offset: 0px; 441 --drawer-shadow-vertical-offset: 4px; 442 --drawer-shadow-blur-radius: 5px; 443 444 --spacing-sections-desktop: 0px; 445 --spacing-sections-mobile: 0px; 446 447 --grid-desktop-vertical-spacing: 8px; 448 --grid-desktop-horizontal-spacing: 8px; 449 --grid-mobile-vertical-spacing: 4px; 450 --grid-mobile-horizontal-spacing: 4px; 451 452 --text-boxes-border-opacity: 0.1; 453 --text-boxes-border-width: 0px; 454 --text-boxes-radius: 0px; 455 --text-boxes-shadow-opacity: 0.0; 456 --text-boxes-shadow-visible: 0; 457 --text-boxes-shadow-horizontal-offset: 0px; 458 --text-boxes-shadow-vertical-offset: 4px; 459 --text-boxes-shadow-blur-radius: 5px; 460 461 --buttons-radius: 0px; 462 --buttons-radius-outset: 0px; 463 --buttons-border-width: 1px; 464 --buttons-border-opacity: 1.0; 465 --buttons-shadow-opacity: 0.0; 466 --buttons-shadow-visible: 0; 467 --buttons-shadow-horizontal-offset: 0px; 468 --buttons-shadow-vertical-offset: 4px; 469 --buttons-shadow-blur-radius: 5px; 470 --buttons-border-offset: 0px; 471 472 --inputs-radius: 0px; 473 --inputs-border-width: 1px; 474 --inputs-border-opacity: 0.55; 475 --inputs-shadow-opacity: 0.0; 476 --inputs-shadow-horizontal-offset: 0px; 477 --inputs-margin-offset: 0px; 478 --inputs-shadow-vertical-offset: 4px; 479 --inputs-shadow-blur-radius: 5px; 480 --inputs-radius-outset: 0px; 481 482 --variant-pills-radius: 40px; 483 --variant-pills-border-width: 1px; 484 --variant-pills-border-opacity: 0.55; 485 --variant-pills-shadow-opacity: 0.0; 486 --variant-pills-shadow-horizontal-offset: 0px; 487 --variant-pills-shadow-vertical-offset: 4px; 488 --variant-pills-shadow-blur-radius: 5px; 489 } 490 491 *, 492 *::before, 493 *::after { 494 box-sizing: inherit; 495 } 496 497 html { 498 box-sizing: border-box; 499 font-size: calc(var(--font-body-scale) * 62.5%); 500 height: 100%; 501 } 502 503 body { 504 display: grid; 505 grid-template-rows: auto auto 1fr auto; 506 grid-template-columns: 100%; 507 min-height: 100%; 508 margin: 0; 509 font-size: 1.5rem; 510 letter-spacing: 0.06rem; 511 line-height: calc(1 + 0.8 / var(--font-body-scale)); 512 font-family: var(--font-body-family); 513 font-style: var(--font-body-style); 514 font-weight: var(--font-body-weight); 515 } 516 517 @media screen and (min-width: 750px) { 518 body { 519 font-size: 1.6rem; 520 } 521 } 522 523 /* 524 Evergage (Salesforce Personalization) inyecta su "flicker defense": 525 #content, body, [id*="custom_featured_title_..."], product-form > ... { visibility: hidden !important } 526 Como la configuración incluye 'body' y '#content', apagaba la web ENTERA unos 527 300 ms mientras consultaba qué personalizar. Y la API responde 528 campaignResponses: [] â no hay ninguna campaña que proteger. 529 530 Aquà se anulan sólo 'body' y '#content', ganando por especificidad 531 (html body = 0,0,2 frente a body = 0,0,1). Las zonas concretas que Evergage 532 también oculta se dejan intactas, para no romper la protección si algún dÃa 533 se activa una campaña en ellas. 534 535 El arreglo de fondo es quitar body/#content de la lista de selectores en el 536 panel de Evergage; esto es la red de seguridad desde el tema. 537 */ 538 html body, 539 html #content { 540 visibility: visible !important; 541 } 542 </style> 543 544 545 546 547 <link href="//epic-cycles.com/cdn/shop/t/42/assets/styles.css?v=95947216877940590601788980557" rel="stylesheet" type="text/css" media="all" /> 548 549 550 551 552 <link rel="stylesheet" href="//epic-cycles.com/cdn/shop/t/42/assets/slick.css?v=98340474046176884051760957016"> 553 <link rel="stylesheet" href="//epic-cycles.com/cdn/shop/t/42/assets/slick-theme.css?v=40022998386997376211760957017"> 554 <link href="//epic-cycles.com/cdn/shop/t/42/assets/product-card-hover.css?v=7717534201602650591766432609" rel="stylesheet" type="text/css" media="all" /> 555 <link href="//epic-cycles.com/cdn/shop/t/42/assets/accessibility.css?v=73980125719279480551779454277" rel="stylesheet" type="text/css" media="all" /> 556<link rel="stylesheet" href="//epic-cycles.com/cdn/shop/t/42/assets/fontawesome.css?v=158814722062757834901760957018" media="print" onload="this.media='all'"> 557 <link rel="stylesheet" href="//epic-cycles.com/cdn/shop/t/42/assets/product-compare.css?v=154009279676060313521771419820" media="print" onload="this.media='all'"> 558 <link rel="stylesheet" href="//epic-cycles.com/cdn/shop/t/42/assets/quick-add-modal.css?v=121793008526601680011760957019" media="print" onload="this.media='all'"> 559 <link 560 rel="stylesheet" 561 href="https://cdn.jsdelivr.net/npm/[email protected]/dist/nouislider.min.css" 562 media="print" 563 onload="this.media='all'" 564 ><noscript> 565 <link rel="stylesheet" href="//epic-cycles.com/cdn/shop/t/42/assets/fontawesome.css?v=158814722062757834901760957018"> 566 <link rel="stylesheet" href="//epic-cycles.com/cdn/shop/t/42/assets/product-compare.css?v=154009279676060313521771419820"> 567 <link rel="stylesheet" href="//epic-cycles.com/cdn/shop/t/42/assets/quick-add-modal.css?v=121793008526601680011760957019"> 568 <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/nouislider.min.css" rel="stylesheet"> 569 </noscript> 570 <link rel="preload" as="font" href="//epic-cycles.com/cdn/fonts/assistant/assistant_n4.9120912a469cad1cc292572851508ca49d12e768.woff2" type="font/woff2" crossorigin> 571 572 573 <link rel="preload" as="font" href="//epic-cycles.com/cdn/fonts/assistant/assistant_n4.9120912a469cad1cc292572851508ca49d12e768.woff2" type="font/woff2" crossorigin> 574 575<link href="//epic-cycles.com/cdn/shop/t/42/assets/component-localization-form.css?v=170315343355214948141760957018" rel="stylesheet" type="text/css" media="all" /> 576
576<script src="//epic-cycles.com/cdn/shop/t/42/assets/localization-form.js?v=144176611646395275351760957017" defer="defer"></script>
576<link 577 rel="stylesheet" 578 href="//epic-cycles.com/cdn/shop/t/42/assets/component-predictive-search.css?v=108248513670363226071775555007" 579 media="print" 580 onload="this.media='all'" 581 >
581<script> 582 if (Shopify.designMode) { 583 document.documentElement.classList.add('shopify-design-mode'); 584 } 585 </script>
585 586 587
587<script> 588 window.Shopify = window.Shopify || {}; 589 window.Shopify.money_format = "${{amount}}"; 590 591 // Productos comparados desde cookies (server-side accessible) 592 593 window.compareProductsFromCookie = ""; 594 </script>
594<script> 595 (function () { 596 var EVENTS = ['pointerdown', 'keydown', 'touchstart', 'wheel', 'scroll']; 597 var loaded = false; 598 var mapsLoaded = false; 599 600 function addScript(src) { 601 var s = document.createElement('script'); 602 s.async = true; 603 s.src = src; 604 document.head.appendChild(s); 605 } 606 607 // stores-modal.liquid y custom-our-stores-map.liquid ya esperan a window.google 608 // con waitForGoogleMaps(), asà que da igual cuándo llegue la API. 609 function loadMaps() { 610 if (mapsLoaded) return; 611 mapsLoaded = true; 612 addScript('https://maps.googleapis.com/maps/api/js?key=AIzaSyCyMOYxxIzOMOvhll4hx7ZqcbkH0NBDnVI'); 613 } 614 window.epicLoadMaps = loadMaps; 615 616 // Cualquier vÃa de apertura del selector de tiendas dispara la carga. 617 document.addEventListener( 618 'click', 619 function (e) { 620 if (!e.target || !e.target.closest) return; 621 if (e.target.closest('.content-store, .stores-modal, [aria-haspopup="dialog"]')) loadMaps(); 622 }, 623 { passive: true, capture: true } 624 ); 625 document.addEventListener( 626 'keydown', 627 function (e) { 628 if (e.key !== 'Enter' && e.key !== ' ') return; 629 var a = document.activeElement; 630 if (a && a.closest && a.closest('.content-store, .stores-modal')) loadMaps(); 631 }, 632 { passive: true } 633 ); 634 635 function loadThirdParty() { 636 if (loaded) return; 637 loaded = true; 638 639 // Hotjar 640 window.hj = 641 window.hj || 642 function () { 643 (window.hj.q = window.hj.q || []).push(arguments); 644 }; 645 window._hjSettings = { hjid: 5305034, hjsv: 6 }; 646 addScript( 647 'https://static.hotjar.com/c/hotjar-' + window._hjSettings.hjid + '.js?sv=' + window._hjSettings.hjsv 648 ); 649 650 651 addScript('https://cdn.evgnet.com/beacon/epiccycles/engage/scripts/evergage.min.js'); 652 } 653 654 EVENTS.forEach(function (evt) { 655 window.addEventListener(evt, loadThirdParty, { passive: true, once: true }); 656 }); 657 658 window.addEventListener('load', function () { 659 // Sólo la página que lleva el mapa incrustado necesita la API sin interacción. 660 if (document.getElementById('mapStores')) loadMaps(); 661 setTimeout(loadThirdParty, 3000); 662 }); 663 })(); 664 </script>
664 665 666 667 <!-- Google Tag Manager --> 668
668<script>
vendor: 368 bytes, lines 668-673
668 669 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 670 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 671 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 672 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 673 })(window,document,'script','dataLayer','
673GTM-TJ8D29Q
vendor: 10 bytes, lines 673-674
673'); 674
674</script>
674 675 <!-- End Google Tag Manager --> 676 677 <!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/gdpr_cookie_consent/4fbe573f-a377-4fea-9801-3ee0858cae41 --> 678<link rel="preconnect" href="https://app.consentmo.com" crossorigin data-csm-preconnect="app"> 679<link rel="dns-prefetch" href="https://workers.consentmo.com" data-csm-preconnect="workers"> 680<link rel="dns-prefetch" href="https://storage.consentmo.com" data-csm-preconnect="storage"> 681<link rel="preconnect" href="https://cdn.consentmo.com" crossorigin data-csm-preconnect="cdn"><link rel="prefetch" href="https://cdn.shopify.com/extensions/01a1089c-8f46-7356-a6fb-4fc10fbc27d3/gdpr-backpack-904/assets/layout-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="banner"> 682 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a1089c-8f46-7356-a6fb-4fc10fbc27d3/gdpr-backpack-904/assets/layout-cookie-dialog.consentmo.js" crossorigin data-csm-layout-prefetch="dialog"> 683 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a1089c-8f46-7356-a6fb-4fc10fbc27d3/gdpr-backpack-904/assets/layout-cookie-box.consentmo.js" crossorigin data-csm-layout-prefetch="box"> 684 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a1089c-8f46-7356-a6fb-4fc10fbc27d3/gdpr-backpack-904/assets/layout-cookie-smart-banner.consentmo.js" crossorigin data-csm-layout-prefetch="smart"> 685 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a1089c-8f46-7356-a6fb-4fc10fbc27d3/gdpr-backpack-904/assets/layout-mobile-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="mobile">
685<script> 686(function () { 687 try { 688 document.documentElement.classList.add('csm-cookie-embed'); 689 } catch (e) {} 690})(); 691</script>
691<script data-consentmo-data-src-bootstrap> 692(function () { 693 'use strict'; 694 if (window.__consentmoDataSrcBootstrapInit) return; 695 window.__consentmoDataSrcBootstrapInit = true; 696 697 var DATA_SRC_SELECTOR = [ 698 'script[data-src*="consentmo_cookie_consent"]', 699 'script[data-src*="gdpr_cookie_consent.min"]', 700 'script[data-src*="gdrp_cookie_consent_unlimited"]' 701 ].join(','); 702 703 function activateConsentmoDataSrcScripts() { 704 if (!window.Shopify || !window.Shopify.shop) return; 705 document.querySelectorAll(DATA_SRC_SELECTOR).forEach(function (scriptEl) { 706 // getAttribute: src="" must not count as "already has src" (.src === page URL). 707 if (scriptEl.getAttribute('src')) return; 708 var url = scriptEl.getAttribute('data-src'); 709 if (!url) return; 710 if (scriptEl.getAttribute('type') === 'text/plain') { 711 scriptEl.removeAttribute('type'); 712 } 713 scriptEl.src = url; 714 }); 715 } 716 function scheduleActivation() { 717 activateConsentmoDataSrcScripts(); 718 // Retry on next task so other DCL handlers (lazy-loaders) can finish setting Shopify.shop / data-src first. 719 setTimeout(activateConsentmoDataSrcScripts, 0); 720 } 721 if (document.readyState === 'loading') { 722 document.addEventListener('DOMContentLoaded', scheduleActivation, { once: true }); 723 } else { 724 scheduleActivation(); 725 } 726})(); 727</script>
727 728 729 730<!-- END app block --><!-- BEGIN app block: shopify://apps/microsoft-clarity/blocks/clarity_js/31c3d126-8116-4b4a-8ba1-baeda7c4aeea -->
731<script type="text/javascript"> 732 (function (c, l, a, r, i, t, y) { 733 c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); }; 734 t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i + "?ref=shopify"; 735 y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); 736 737 c.Shopify.loadFeatures([{ name: "consent-tracking-api", version: "0.1" }], error => { 738 if (error) { 739 console.error("Error loading Shopify features:", error); 740 return; 741 } 742 743 c[a]('consentv2', { 744 ad_Storage: c.Shopify.customerPrivacy.marketingAllowed() ? "granted" : "denied", 745 analytics_Storage: c.Shopify.customerPrivacy.analyticsProcessingAllowed() ? "granted" : "denied", 746 source: 101, 747 }); 748 }); 749 750 l.addEventListener("visitorConsentCollected", function (e) { 751 c[a]('consentv2', { 752 ad_Storage: e.detail.marketingAllowed ? "granted" : "denied", 753 analytics_Storage: e.detail.analyticsAllowed ? "granted" : "denied", 754 source: 101, 755 }); 756 }); 757 })(window, document, "clarity", "script", "v5hdzaac18"); 758</script>
758 759 760 761 762<!-- END app block --><!-- BEGIN app block: shopify://apps/judge-me-reviews/blocks/judgeme_core/61ccd3b1-a9f2-4160-9fe9-4fec8413e5d8 --><!-- Start of Judge.me Core --> 763 764 765 766 767 768 769 770<link rel="dns-prefetch" href="https://cdn.judge.me"> 771<link rel="dns-prefetch" href="https://cdn1.judge.me"> 772<link rel="dns-prefetch" href="https://api.judge.me"> 773
774<script data-cfasync='false' class='jdgm-settings-script'>window.jdgmSettings={"pagination":5,"disable_web_reviews":false,"coupon_receiving_condition":"any_review","coupon_value_type":"percentage","coupon_value_percentage":10,"coupon_value_fixed_amount":0,"coupon_discount_type":"single","coupon_tier_text_enabled":false,"coupon_tier_text_percentage":10,"coupon_tier_text_fixed_amount":0,"coupon_tier_photo_enabled":false,"coupon_tier_photo_percentage":10,"coupon_tier_photo_fixed_amount":0,"coupon_tier_video_enabled":false,"coupon_tier_video_percentage":10,"coupon_tier_video_fixed_amount":0,"enable_coupons":false,"badge_no_review_text":"No reviews","badge_n_reviews_text":"{{ n }} review/reviews","badge_star_color":"#9EE5CA","hide_badge_preview_if_no_reviews":true,"badge_hide_text":false,"enforce_center_preview_badge":false,"widget_title":"Customer Reviews","widget_open_form_text":"Write a review","widget_close_form_text":"Cancel review","widget_refresh_page_text":"Refresh page","widget_summary_text":"Based on {{ number_of_reviews }} review/reviews","widget_no_review_text":"Be the first to write a review","widget_name_field_text":"Display name","widget_verified_name_field_text":"Verified Name (public)","widget_name_placeholder_text":"Display name","widget_required_field_error_text":"This field is required.","widget_email_field_text":"Email address","widget_verified_email_field_text":"Verified Email (private, can not be edited)","widget_email_placeholder_text":"Your email address","widget_email_field_error_text":"Please enter a valid email address.","widget_rating_field_text":"Rating","widget_review_title_field_text":"Review Title","widget_review_title_placeholder_text":"Give your review a title","widget_review_body_field_text":"Review content","widget_review_body_placeholder_text":"Start writing here...","widget_pictures_field_text":"Picture/Video (optional)","widget_submit_review_text":"Submit Review","widget_submit_verified_review_text":"Submit Verified Review","widget_submit_success_msg_with_auto_publish":"Thank y
774ou! Please refresh the page in a few moments to see your review. You can remove or edit your review by logging into \u003ca href='https://judge.me/login' target='_blank' rel='nofollow noopener'\u003eJudge.me\u003c/a\u003e","widget_submit_success_msg_no_auto_publish":"Thank you! Your review will be published as soon as it is approved by the shop admin. You can remove or edit your review by logging into \u003ca href='https://judge.me/login' target='_blank' rel='nofollow noopener'\u003eJudge.me\u003c/a\u003e","widget_show_default_reviews_out_of_total_text":"Showing {{ n_reviews_shown }} out of {{ n_reviews }} reviews.","widget_show_all_link_text":"Show all","widget_show_less_link_text":"Show less","widget_author_said_text":"{{ reviewer_name }} said:","widget_days_text":"{{ n }} days ago","widget_weeks_text":"{{ n }} week/weeks ago","widget_months_text":"{{ n }} month/months ago","widget_years_text":"{{ n }} year/years ago","widget_yesterday_text":"Yesterday","widget_today_text":"Today","widget_replied_text":"\u003e\u003e {{ shop_name }} replied:","widget_read_more_text":"Read more","widget_reviewer_name_as_initial":"","widget_rating_filter_color":"#fbcd0a","widget_rating_filter_see_all_text":"See all reviews","widget_sorting_most_recent_text":"Most Recent","widget_sorting_highest_rating_text":"Highest Rating","widget_sorting_lowest_rating_text":"Lowest Rating","widget_sorting_with_pictures_text":"Only Pictures","widget_sorting_most_helpful_text":"Most Helpful","widget_open_question_form_text":"Ask a question","widget_reviews_subtab_text":"Reviews","widget_questions_subtab_text":"Questions","widget_question_label_text":"Question","widget_answer_label_text":"Answer","widget_question_placeholder_text":"Write your question here","widget_submit_question_text":"Submit Question","widget_question_submit_success_text":"Thank you for your question! We will notify you once it gets answered.","widget_star_color":"#9EE5CA","verified_badge_text":"Verified","verified_badge_bg_color":"","verified_badge_text_color":"","verified_badge_placement":"left-of-reviewer-name","widget_review_max_height":"","widget_hide_border":false,"widget_social_share":false,"widget_thumb":false,"widget_review_location_show":false,"widget_location_format":"","all_reviews_include_out_of_store_products":true,"all_reviews_out_of_store_text":"(out of store)","all_reviews_pagination":100,"all_reviews_product_name_prefix_text":"about","enable_review_pictures":true,"enable_question_anwser":false,"widget_theme":"default","review_date_format":"mm/dd/yyyy","default_sort_method":"most-recent","enable_ai_review_visibility":true,"widget_product_reviews_subtab_text":"Product Reviews","widget_shop_reviews_subtab_text":"Shop Reviews","widget_other_products_reviews_text":"Reviews for other products","widget_store_reviews_subtab_text":"Store reviews","widget_product_variant_reference_text":"Review for","widget_no_store_reviews_text":"This store hasn't received any reviews yet","widget_web_restriction_product_reviews_text":"This product hasn't received any reviews yet","widget_no_items_text":"No items found","widget_show_more_text":"Show more","widget_write_a_store_review_text":"Write a Store Review","widget_product_and_store_reviews_text":"Product and store reviews","widget_reviews_in_collection_text":"Reviews in this collection","widget_other_languages_heading":"Reviews in Other Languages","widget_translate_review_text":"Translate review to {{ language }}","widget_translating_review_text":"Translating...","widget_show_original_translation_text":"Show original ({{ language }})","widget_translate_review_failed_text":"Review couldn't be translated.","widget_translate_review_retry_text":"Retry","widget_translate_review_try_again_later_text":"Try again later","show_product_url_for_grouped_product":false,"widget_sorting_pictures_first_text":"Pictures First","show_pictures_on_all_rev_page_mobile":false,"show_pictures_on_all_rev_page_desktop":false,"floating_tab_hide_mobile_install_preference":false,"floating_tab_button_name":"â
Reviews","floating_tab_title":"Let customers speak for us","floating_tab_button_color":"","floating_tab_button_background_color":"","floating_tab_url":"","floating_tab_url_enabled":false,"floating_tab_tab_style":"text","all_reviews_text_badge_text":"Customers rate us {{ shop.metafields.judgeme.all_reviews_rating | round: 1 }}/5 based on {{ shop.metafields.judgeme.all_reviews_count }} reviews.","all_reviews_text_badge_text_branded_style":"{{ shop.metafields.judgeme.all_reviews_rating | round: 1 }} out of 5 stars based on {{ shop.metafields.judgeme.all_reviews_count }} reviews","is_all_reviews_text_badge_a_link":false,"show_stars_for_all_reviews_text_badge":false,"all_reviews_text_badge_url":"","all_reviews_text_style":"branded","all_reviews_text_color_style":"judgeme_brand_color","all_reviews_text_color":"#108474","all_reviews_text_show_jm_brand":false,"featured_carousel_show_header":true,"featured_carousel_title":"Let customers speak for us","testimonials_carousel_title":"Customers are saying","videos_carousel_title":"Real customer stories","cards_carousel_title":"Customers are saying","featured_carousel_count_text":"from {{ n }} reviews","featured_carousel_add_link_to_all_reviews_page":false,"featured_carousel_url":"","featured_carousel_show_images":true,"featured_carousel_autoslide_interval":5,"featured_carousel_arrows_on_the_sides":false,"featured_carousel_height":250,"featured_carousel_width":80,"featured_carousel_image_size":0,"featured_carousel_image_height":250,"featured_carousel_arrow_color":"#eeeeee","verified_count_badge_style":"branded","verified_count_badge_orientation":"horizontal","verified_count_badge_color_style":"judgeme_brand_color","verified_count_badge_color":"#108474","is_verified_count_badge_a_link":false,"verified_count_badge_url":"","verified_count_badge_show_jm_brand":true,"widget_rating_preset_default":5,"widget_first_sub_tab":"product-reviews","widget_show_histogram":true,"widget_histogram_use_custom_color":false,"widget_pagination_use_custom_color":false,"widget_star_use_custom_color":false,"widget_verified_badge_use_custom_color":false,"widget_write_review_use_custom_color":false,"picture_reminder_submit_button":"Upload Pictures","enable_review_videos":true,"mute_video_by_default":false,"widget_sorting_videos_first_text":"Videos First","widget_review_pending_text":"Pending","featured_carousel_items_for_large_screen":3,"social_share_options_order":"Facebook,Twitter","remove_microdata_snippet":true,"disable_json_ld":false,"enable_json_ld_products":false,"preview_badge_show_question_text":false,"preview_badge_no_question_text":"No questions","preview_badge_n_question_text":"{{ number_of_questions }} question/questions","qa_badge_show_icon":false,"qa_badge_position":"same-row","remove_judgeme_branding":false,"widget_add_search_bar":false,"widget_search_bar_placeholder":"Search","widget_sorting_verified_only_text":"Verified only","widget_sorting_most_relevant_text":"Most Relevant","featured_carousel_theme":"default","featured_carousel_show_rating":true,"featured_carousel_show_title":true,"featured_carousel_show_body":true,"featured_carousel_show_date":false,"featured_carousel_show_reviewer":true,"featured_carousel_show_product":false,"featured_carousel_header_background_color":"#108474","featured_carousel_header_text_color":"#ffffff","featured_carousel_name_product_separator":"reviewed","featured_carousel_full_star_background":"#108474","featured_carousel_empty_star_background":"#dadada","featured_carousel_vertical_theme_background":"#f9fafb","featured_carousel_verified_badge_enable":true,"featured_carousel_verified_badge_color":"#108474","featured_carousel_border_style":"round","featured_carousel_review_line_length_limit":3,"featured_carousel_more_reviews_button_text":"Read more reviews","featured_carousel_view_product_button_text":"View product","all_reviews_page_load_reviews_on":"scroll","all_reviews_page_load_more_text":"Load More Reviews","disable_fb_tab_reviews":false,"enable_ajax_cdn_cache":false,"widget_advanced_speed_features":5,"widget_public_name_text":"displayed publicly like","default_reviewer_name":"John Smith","default_reviewer_name_has_non_latin":true,"widget_reviewer_anonymous":"Anonymous","medals_widget_title":"Judge.me Review Medals","medals_widget_background_color":"#f9fafb","medals_widget_position":"footer_all_pages","medals_widget_border_color":"#f9fafb","medals_widget_verified_text_position":"left","medals_widget_use_monochromatic_version":false,"medals_widget_elements_color":"#108474","show_reviewer_avatar":true,"widget_invalid_yt_video_url_error_text":"Not a YouTube video URL","widget_max_length_field_error_text":"Please enter no more than {0} characters.","widget_show_country_flag":false,"widget_show_collected_via_shop_app":true,"widget_verified_by_shop_badge_style":"light","widget_verified_by_shop_text":"Verified by Shop","widget_show_photo_gallery":true,"widget_load_with_code_splitting":true,"widget_ugc_install_preference":false,"widget_ugc_title":"Made by us, Shared by you","widget_ugc_subt
774itle":"Tag us to see your picture featured in our page","widget_ugc_arrows_color":"#ffffff","widget_ugc_primary_button_text":"Buy Now","widget_ugc_primary_button_background_color":"#108474","widget_ugc_primary_button_text_color":"#ffffff","widget_ugc_primary_button_border_width":"0","widget_ugc_primary_button_border_style":"none","widget_ugc_primary_button_border_color":"#108474","widget_ugc_primary_button_border_radius":"25","widget_ugc_secondary_button_text":"Load More","widget_ugc_secondary_button_background_color":"#ffffff","widget_ugc_secondary_button_text_color":"#108474","widget_ugc_secondary_button_border_width":"2","widget_ugc_secondary_button_border_style":"solid","widget_ugc_secondary_button_border_color":"#108474","widget_ugc_secondary_button_border_radius":"25","widget_ugc_reviews_button_text":"View Reviews","widget_ugc_reviews_button_background_color":"#ffffff","widget_ugc_reviews_button_text_color":"#108474","widget_ugc_reviews_button_border_width":"2","widget_ugc_reviews_button_border_style":"solid","widget_ugc_reviews_button_border_color":"#108474","widget_ugc_reviews_button_border_radius":"25","widget_ugc_reviews_button_link_to":"judgeme-reviews-page","widget_ugc_show_post_date":true,"widget_ugc_max_width":"800","widget_rating_metafield_value_type":true,"widget_primary_color":"#AA4B22","widget_enable_secondary_color":false,"widget_secondary_color":"#edf5f5","widget_summary_average_rating_text":"{{ average_rating }} out of 5","widget_media_grid_title":"Customer photos \u0026 videos","widget_media_grid_see_more_text":"See more","widget_round_style":false,"widget_show_product_medals":true,"widget_verified_by_judgeme_text":"Verified by Judge.me","widget_show_store_medals":true,"widget_verified_by_judgeme_text_in_store_medals":"Verified by Judge.me","widget_media_field_exceed_quantity_message":"Sorry, we can only accept {{ max_media }} for one review.","widget_media_field_exceed_limit_message":"{{ file_name }} is too large, please select a {{ media_type }} less than {{ size_limit }}MB.","widget_review_submitted_text":"Review Submitted!","widget_question_submitted_text":"Question Submitted!","widget_close_form_text_question":"Cancel","widget_write_your_answer_here_text":"Write your answer here","widget_enabled_branded_link":true,"widget_show_collected_by_judgeme":false,"widget_reviewer_name_color":"","widget_write_review_text_color":"","widget_write_review_bg_color":"","widget_collected_by_judgeme_text":"collected by Judge.me","widget_pagination_type":"standard","widget_load_more_text":"Load More","widget_load_more_color":"#108474","widget_full_review_text":"Full Review","widget_read_more_reviews_text":"Read More Reviews","widget_read_questions_text":"Read Questions","widget_questions_and_answers_text":"Questions \u0026 Answers","widget_verified_by_text":"Verified by","widget_verified_text":"Verified","widget_number_of_reviews_text":"{{ number_of_reviews }} reviews","widget_back_button_text":"Back","widget_next_button_text":"Next","widget_custom_forms_filter_button":"Filters","custom_forms_style":"horizontal","widget_show_review_information":false,"how_reviews_are_collected":"How reviews are collected?","widget_show_review_keywords":false,"widget_gdpr_statement":"How we use your data: We'll only contact you about the review you left, and only if necessary. By submitting your review, you agree to Judge.me's \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms\u003c/a\u003e, \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy\u003c/a\u003e and \u003ca href='https://judge.me/content-policy' target='_blank' rel='nofollow noopener'\u003econtent\u003c/a\u003e policies.","widget_multilingual_sorting_enabled":false,"widget_translate_review_content_enabled":false,"widget_translate_review_content_method":"manual","popup_widget_review_selection":"automatically_with_pictures","popup_widget_round_border_style":true,"popup_widget_show_title":true,"popup_widget_show_body":true,"popup_widget_show_reviewer":false,"popup_widget_show_product":true,"popup_widget_show_pictures":true,"popup_widget_use_review_picture":true,"popup_widget_show_on_home_page":true,"popup_widget_show_on_product_page":true,"popup_widget_show_on_collection_page":true,"popup_widget_show_on_cart_page":true,"popup_widget_position":"bottom_left","popup_widget_first_review_delay":5,"popup_widget_duration":5,"popup_widget_interval":5,"popup_widget_review_count":5,"popup_widget_hide_on_mobile":true,"review_snippet_widget_round_border_style":true,"review_snippet_widget_card_color":"#FFFFFF","review_snippet_widget_text_color":"#000000","review_snippet_widget_lighter_text_color":"#7B7B7B","review_snippet_widget_slider_arrows_background_color":"#FFFFFF","review_snippet_widget_slider_arrows_color":"#000000","review_snippet_widget_star_color":"#AA4B22","show_product_variant":false,"all_reviews_product_variant_label_text":"Variant: ","widget_show_verified_branding":true,"widget_ai_summary_title":"Customers say","widget_ai_summary_disclaimer":"AI-powered review summary based on recent customer reviews","widget_show_ai_summary":false,"widget_show_ai_summary_bg":false,"write_review_button_visibility":"everyone","store_summary_widget_heading":"Customers rate this store","store_summary_widget_button_text":"View customer reviews","store_summary_widget_button_theme_text":"See AI reviews summary","widget_show_review_title_input":false,"widget_autofill_review_title":true,"redirect_reviewers_invited_via_email":"external_form","request_store_review_after_product_review":true,"request_review_other_products_in_order":true,"review_form_color_scheme":"custom","review_form_corner_style":"square","review_form_star_color":"#9EE5CA","review_form_text_color":"#333333","review_form_background_color":"#ffffff","review_form_field_background_color":"#fafafa","review_form_button_color":"#AA4B22","review_form_button_text_color":"#ffffff","review_form_modal_overlay_color":"#000000","review_form_theme":"multi_step","review_form_location":"in_store_popup","review_form_external_page_background_color":"#C5F7F0","review_content_screen_title_text":"How would you rate this product?","review_content_introduction_text":"We would love it if you would share a bit about your experience.","store_review_form_title_text":"How would you rate this store?","store_review_form_introduction_text":"We would love it if you would share a bit about your experience.","show_review_guidance_text":true,"one_star_review_guidance_text":"Poor","five_star_review_guidance_text":"Great","customer_information_screen_title_text":"About you","customer_information_introduction_text":"Please tell us more about you.","custom_questions_screen_title_text":"Your experience in more detail","custom_questions_introduction_text":"Here are a few questions to help us understand more about your experience.","review_submitted_screen_title_text":"Thanks for your review!","review_submitted_screen_thank_you_text":"We are processing it and it will appear on the store soon.","review_submitted_screen_email_verification_text":"Please confirm your email by clicking the link we just sent you. This helps us keep reviews authentic.","confirm_email_screen_title_text":"Confirm your email","confirm_email_screen_message_text":"To help keep reviews authentic, we'll send you a secure link to continue writing your review. It only takes a moment.","check_email_screen_title_text":"Check your email","check_email_screen_message_text":"We sent you an email to {{ email }}. Click the button on the email to continue.","check_email_screen_resend_message_text":"Email resent!","check_email_resend_hint_text":"Didn't get the email? Check your spam folder or [resend the email].","verification_email_rate_limit_error_text":"You've reached the limit for review attempts on this product. Please check your inbox or try again later.","review_submitted_request_store_review_text":"Would you like to share your experience of shopping with us?","review_submitted_review_other_products_text":"Would you like to review these products?","store_review_screen_title_text":"Would you like to share your experience of shopping with us?","store_review_introduction_text":"We value your feedback and use it to improve. Please share any thoughts or suggestions you have.","reviewer_media_screen_title_picture_text":"Share a picture","reviewer_media_introduction_picture_text":"Upload a photo to support your review.","reviewer_media_screen_title_video_text":"Share a video","reviewer_media_introduction_video_text":"Upload a video to support your review.","reviewer_media_screen_title_picture_or_video_text":"Share a picture or video","reviewer_media_introduction_picture_or_video_text":"Upload a photo or video to support your review.","reviewer_media_
774youtube_url_text":"Paste your Youtube URL here","advanced_settings_next_step_button_text":"Next","advanced_settings_close_review_button_text":"Close","modal_write_review_flow":true,"write_review_flow_required_text":"Required","write_review_flow_privacy_message_text":"We respect your privacy.","write_review_flow_anonymous_text":"Post review as anonymous","write_review_flow_visibility_text":"This won't be visible to other customers.","write_review_flow_multiple_selection_help_text":"Select as many as you like","write_review_flow_single_selection_help_text":"Select one option","write_review_flow_required_field_error_text":"This field is required","write_review_flow_invalid_email_error_text":"Please enter a valid email address","write_review_flow_max_length_error_text":"Max. {{ max_length }} characters.","write_review_flow_media_upload_text":"\u003cb\u003eClick to upload\u003c/b\u003e or drag and drop","write_review_flow_gdpr_statement":"We'll only contact you about your review if necessary. By submitting your review, you agree to our \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms and conditions\u003c/a\u003e and \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy policy\u003c/a\u003e.","rating_only_reviews_enabled":false,"show_negative_reviews_help_screen":false,"new_review_flow_help_screen_rating_threshold":3,"negative_review_resolution_screen_title_text":"Tell us more","negative_review_resolution_text":"Your experience matters to us. If there were issues with your purchase, we're here to help. Feel free to reach out to us, we'd love the opportunity to make things right.","negative_review_resolution_button_text":"Contact us","negative_review_resolution_proceed_with_review_text":"Leave a review","negative_review_resolution_subject":"Issue with purchase from {{ shop_name }}.{{ order_name }}","coupon_promo_intro_any_review_text":"Write a review and get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_with_photo_text":"Write a review and add a photo or video to get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_with_video_text":"Write a review and add a video to get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_up_to_any_review_text":"Write a review and get a coupon for up to {{ amount }} off your next purchase","coupon_promo_intro_up_to_with_photo_text":"Write a review and add a photo or video to get a coupon for up to {{ amount }} off your next purchase","coupon_promo_intro_external_text":"Write a review and get a reward for your next purchase","coupon_promo_intro_external_with_photo_text":"Write a review and add a photo or video to get a reward for your next purchase","coupon_promo_intro_external_with_video_text":"Write a review and add a video to get a reward for your next purchase","coupon_promo_media_photo_text":"Add a photo or video and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_photo_only_text":"Add a photo and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_video_text":"Add a video and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_external_photo_text":"Add a photo or video and get a reward for your next purchase","coupon_promo_media_external_photo_only_text":"Add a photo and get a reward for your next purchase","coupon_promo_media_external_video_text":"Add a video and get a reward for your next purchase","coupon_promo_success_text":"You've got a coupon for your next purchase at {{ shop_name }}!","coupon_promo_success_subtext":"You'll receive your coupon email within the hour.","preview_badge_collection_page_install_status":false,"widget_review_custom_css":"","preview_badge_custom_css":"","preview_badge_stars_count":"5-stars","featured_carousel_custom_css":"","floating_tab_custom_css":"","all_reviews_widget_custom_css":"","medals_widget_custom_css":"","verified_badge_custom_css":"","all_reviews_text_custom_css":"","transparency_badges_collected_via_store_invite":false,"transparency_badges_from_another_provider":false,"transparency_badges_collected_from_store_visitor":false,"transparency_badges_collected_by_verified_review_provider":true,"transparency_badges_earned_reward":false,"transparency_badges_collected_via_store_invite_text":"Review collected via store invitation","transparency_badges_from_another_provider_text":"Review collected from another provider","transparency_badges_collected_from_store_visitor_text":"Review collected from a store visitor","transparency_badges_written_in_google_text":"Review written in Google","transparency_badges_written_in_etsy_text":"Review written in Etsy","transparency_badges_written_in_shop_app_text":"Review written in Shop App","transparency_badges_earned_reward_text":"Review earned a reward for future purchase","product_review_widget_per_page":10,"widget_other_languages_reviews_per_page":3,"widget_store_review_label_text":"Review about the store","widget_cart_mode_aggregate_heading_text":"Customers rate this store","checkout_comment_extension_title_on_product_page":"Customer Comments","checkout_comment_extension_num_latest_comment_show":5,"checkout_comment_extension_format":"name_and_timestamp","checkout_comment_customer_name":"last_initial","checkout_comment_comment_notification":true,"preview_badge_collection_page_install_preference":false,"preview_badge_home_page_install_preference":false,"preview_badge_product_page_install_preference":false,"review_widget_install_preference":"","review_carousel_install_preference":false,"floating_reviews_tab_install_preference":"none","verified_reviews_count_badge_install_preference":false,"all_reviews_text_install_preference":false,"review_widget_best_location":false,"judgeme_medals_install_preference":false,"review_widget_revamp_enabled":true,"review_widget_qna_enabled":false,"review_widget_revamp_dual_publish_end_date":"2026-07-02T10:22:53.000+00:00","review_widget_header_theme":"minimal","review_widget_widget_title_enabled":true,"review_widget_header_text_size":"medium","review_widget_header_text_weight":"regular","review_widget_average_rating_style":"compact","review_widget_bar_chart_enabled":true,"review_widget_bar_chart_type":"numbers","review_widget_bar_chart_style":"standard","review_widget_expanded_media_gallery_enabled":false,"review_widget_show_review_highlights":false,"review_widget_show_review_keywords_in_gray":false,"review_widget_reviews_section_theme":"standard","review_widget_image_style":"thumbnails","review_widget_review_image_ratio":"square","review_widget_stars_size":"medium","review_widget_verified_badge":"standard_text","review_widget_review_title_text_size":"medium","review_widget_review_text_size":"medium","review_widget_review_text_length":"medium","review_widget_number_of_columns_desktop":3,"review_widget_carousel_transition_speed":5,"review_widget_custom_questions_answers_display":"always","review_widget_card_section_size":"small","review_widget_star_and_histogram_color":"#9EE5CA","review_widget_button_color":"#9EE5CA","review_widget_button_text_color":"#FFFFFF","review_widget_text_color":"#000000","review_widget_lighter_text_color":"#7B7B7B","review_widget_corner_styling":"soft","review_widget_review_word_singular":"review","review_widget_review_word_plural"
774:"reviews","review_widget_voting_label":"Helpful?","review_widget_shop_reply_label":"Reply from {{ shop_name }}:","review_widget_filters_title":"Filters","review_widget_filter_rating_title":"Rating","review_widget_filter_keyword_title":"Keyword","review_widget_clear_filters_text":"Clear filters","review_widget_expand_more_text":"More","review_widget_review_highlights_title":"Review highlights","qna_widget_question_word_singular":"Question","qna_widget_question_word_plural":"Questions","qna_widget_answer_reply_label":"Answer from {{ answerer_name }}:","qna_content_screen_title_text":"Ask a question about this product","qna_widget_question_required_field_error_text":"Please enter your question.","qna_widget_flow_gdpr_statement":"We'll only contact you about your question if necessary. By submitting your question, you agree to our \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms and conditions\u003c/a\u003e and \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy policy\u003c/a\u003e.","qna_widget_question_submitted_text":"Thanks for your question!","qna_widget_close_form_text_question":"Close","qna_widget_question_submit_success_text":"Weâll notify you by email when your question is answered.","all_reviews_widget_v2025_enabled":false,"all_reviews_widget_v2025_header_theme":"default","all_reviews_widget_v2025_widget_title_enabled":true,"all_reviews_widget_v2025_header_text_size":"medium","all_reviews_widget_v2025_header_text_weight":"regular","all_reviews_widget_v2025_average_rating_style":"compact","all_reviews_widget_v2025_bar_chart_enabled":true,"all_reviews_widget_v2025_bar_chart_type":"numbers","all_reviews_widget_v2025_bar_chart_style":"standard","all_reviews_widget_v2025_expanded_media_gallery_enabled":false,"all_reviews_widget_v2025_show_store_medals":true,"all_reviews_widget_v2025_show_photo_gallery":true,"all_reviews_widget_v2025_show_review_keywords":false,"all_reviews_widget_v2025_show_ai_summary":false,"all_reviews_widget_v2025_show_ai_summary_bg":false,"all_reviews_widget_v2025_show_review_highlights":false,"all_reviews_widget_v2025_show_review_keywords_in_gray":false,"all_reviews_widget_v2025_add_search_bar":false,"all_reviews_widget_v2025_default_sort_method":"most-recent","all_reviews_widget_v2025_reviews_per_page":10,"all_reviews_widget_v2025_reviews_section_theme":"default","all_reviews_widget_v2025_image_style":"thumbnails","all_reviews_widget_v2025_review_image_ratio":"square","all_reviews_widget_v2025_stars_size":"medium","all_reviews_widget_v2025_verified_badge":"standard_text","all_reviews_widget_v2025_review_title_text_size":"medium","all_reviews_widget_v2025_review_text_size":"medium","all_reviews_widget_v2025_review_text_length":"medium","all_reviews_widget_v2025_number_of_columns_desktop":3,"all_reviews_widget_v2025_carousel_transition_speed":5,"all_reviews_widget_v2025_custom_questions_answers_display":"always","all_reviews_widget_v2025_review_dates":false,"all_reviews_widget_v2025_card_section_size":"small","all_reviews_widget_v2025_show_product_variant":false,"all_reviews_widget_v2025_show_reviewer_avatar":true,"all_reviews_widget_v2025_reviewer_name_as_initial":"","all_reviews_widget_v2025_review_location_show":false,"all_reviews_widget_v2025_location_format":"","all_reviews_widget_v2025_show_country_flag":false,"all_reviews_widget_v2025_widget_thumb":false,"all_reviews_widget_v2025_verified_by_shop_badge_style":"light","all_reviews_widget_v2025_social_share":false,"all_reviews_widget_v2025_social_share_options_order":"Facebook,Twitter,LinkedIn,Pinterest","all_reviews_widget_v2025_pagination_type":"standard","all_reviews_widget_v2025_button_text_color":"#FFFFFF","all_reviews_widget_v2025_text_color":"#000000","all_reviews_widget_v2025_lighter_text_color":"#7B7B7B","all_reviews_widget_v2025_corner_styling":"soft","all_reviews_widget_v2025_title":"Customer reviews","all_reviews_widget_v2025_ai_summary_title":"Customers say about this store","all_reviews_widget_v2025_no_review_text":"Be the first to write a review","all_reviews_widget_v2025_review_highlights_title":"Review highlights","reviews_grid_widget_show_sample_reviews":false,"reviews_grid_widget_review_selection":"all","reviews_grid_widget_select_products":[],"reviews_grid_widget_show_media_only":false,"reviews_grid_widget_display_order":"media_first","reviews_grid_widget_card_grouping":"per_media","reviews_grid_widget_columns_desktop":3,"reviews_grid_widget_rows_desktop":3,"reviews_grid_widget_columns_mobile":2,"reviews_grid_widget_rows_mobile":6,"reviews_grid_widget_show_stars":true,"reviews_grid_widget_show_reviewer_name":true,"reviews_grid_widget_show_review_title_on_hover_desktop":true,"reviews_grid_widget_corner_styling":"soft","reviews_grid_widget_card_spacing":"medium","reviews_grid_widget_header_text_color":"#000000","reviews_grid_widget_star_and_reviewer_name_color":"#F9F9F9","reviews_grid_widget_overlay_and_background_color":"#000000","reviews_grid_widget_content_color":"#F9F9F9","reviews_grid_widget_header_text":"From our customers","reviews_grid_widget_show_average_rating":true,"trust_badge_enabled":false,"trust_badge_structure":"outline","trust_badge_color":"black","trust_badge_star":"black","trust_badge_rating_display_default":"show_avg_text","platform":"shopify","branding_url":"https://app.judge.me/reviews","branding_text":"Powered by Judge.me","locale":"en","reply_name":"Epic Cycles","shop_currency":"USD","widget_version":"3.0","footer":true,"autopublish":false,"review_dates":true,"enable_custom_form":false,"shop_locale":"en","enable_multi_locales_translations":false,"show_review_title_input":false,"autofill_review_title":true,"review_verification_email_status":"always","require_verification_before_submit":false,"sign_in_with_
774shop_enabled":false,"customer_account_validation_enabled":true,"most_relevant_sort_enabled":false,"coupon_promo_invited_eligible":true,"coupon_promo_web_eligible":false,"uses_coupon_integration":false,"uses_external_coupon":false,"can_be_branded":true,"rtl_stars_enabled_ar":true,"rtl_stars_enabled_he":true,"reply_name_text":"Epic Cycles"};</script>
774 <style class='jdgm-settings-style'>.jdgm-xx{left:0}:root{--jdgm-primary-color: #AA4B22;--jdgm-secondary-color: rgba(170,75,34,0.1);--jdgm-star-color: #9EE5CA;--jdgm-write-review-text-color: white;--jdgm-write-review-bg-color: #AA4B22;--jdgm-paginate-color: #AA4B22;--jdgm-border-radius: 0;--jdgm-reviewer-name-color: #AA4B22}.jdgm-histogram__bar-content{background-color:#AA4B22}.jdgm-rev[data-verified-buyer=true] .jdgm-rev__icon.jdgm-rev__icon:after,.jdgm-rev__buyer-badge.jdgm-rev__buyer-badge{color:white;background-color:#AA4B22}.jdgm-review-widget--small .jdgm-gallery.jdgm-gallery .jdgm-gallery__thumbnail-link:nth-child(8) .jdgm-gallery__thumbnail-wrapper.jdgm-gallery__thumbnail-wrapper:before{content:"See more"}@media only screen and (min-width: 768px){.jdgm-gallery.jdgm-gallery .jdgm-gallery__thumbnail-link:nth-child(8) .jdgm-gallery__thumbnail-wrapper.jdgm-gallery__thumbnail-wrapper:before{content:"See more"}}.jdgm-preview-badge .jdgm-star.jdgm-star{color:#9EE5CA}.jdgm-prev-badge[data-average-rating='0.00']{display:none !important}.jdgm-author-all-initials{display:none !important}.jdgm-author-last-initial{display:none !important}.jdgm-rev-widg__title{visibility:hidden}.jdgm-rev-widg__summary-text{visibility:hidden}.jdgm-prev-badge__text{visibility:hidden}.jdgm-rev__prod-link-prefix:before{content:'about'}.jdgm-rev__variant-label:before{content:'Variant: '}.jdgm-rev__out-of-store-text:before{content:'(out of store)'}@media only screen and (min-width: 768px){.jdgm-rev__pics .jdgm-rev_all-rev-page-picture-separator,.jdgm-rev__pics .jdgm-rev__product-picture{display:none}}@media only screen and (max-width: 768px){.jdgm-rev__pics .jdgm-rev_all-rev-page-picture-separator,.jdgm-rev__pics .jdgm-rev__product-picture{display:none}}.jdgm-preview-badge[data-template="product"]{display:none !important}.jdgm-preview-badge[data-template="collection"]{display:none !important}.jdgm-preview-badge[data-template="index"]{display:none !important}.jdgm-review-widget[data-from-snippet="true"]{display:none !important}.jdgm-verified-count-badget[data-from-snippet="true"]{display:none !important}.jdgm-carousel-wrapper[data-from-snippet="true"]{display:none !important}.jdgm-all-reviews-text[data-from-snippet="true"]{display:none !important}.jdgm-medals-section[data-from-snippet="true"]{display:none !important}.jdgm-ugc-media-wrapper[data-from-snippet="true"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_via_store_invitation"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_from_another_provider"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_from_store_visitor"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_earned_for_future_purchase"]{display:none !important}.jdgm-review-snippet-widget{--jdgm-snippet-card-color: #fff;--jdgm-snippet-text-color: #000;--jdgm-snippet-lighter-text-color: #7B7B7B;--jdgm-snippet-star-color: #AA4B22;--jdgm-snippet-border-radius: 8px;--jdgm-snippet-arrows-bg-color: #fff;--jdgm-snippet-arrows-color: #000}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__cards-container .jdgm-rev-snippet-card{border-radius:8px;background:#fff}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__cards-container .jdgm-rev-snippet-card__rev-rating .jdgm-star{color:#AA4B22}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__prev-btn,.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__next-btn{border-radius:50%;background:#fff}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__prev-btn>svg,.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__next-btn>svg{fill:#000}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jm-mfp-content,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__icon,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__pic-img,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__reply{border-radius:8px}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev[data-verified-buyer="true"] .jdgm-full-rev__icon::after{border-radius:8px}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-rev__buyer-badge{border-radius:calc( 8px / 2 )}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-full-rev__replier::before{content:'Epic Cycles'}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-full-rev__product-button{border-radius:calc( 8px * 6 )} 775</style> <style class='jdgm-settings-style'></style> 776 777 778 779 780 <style class='jdgm-miracle-styles'> 781 @-webkit-keyframes jdgm-spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes jdgm-spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}@font-face{font-family:'JudgemeStar';src:url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAScAA0AAAAABrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAEgAAAABoAAAAcbyQ+3kdERUYAAARgAAAAHgAAACAAMwAGT1MvMgAAAZgAAABGAAAAVi+vS9xjbWFwAAAB8AAAAEAAAAFKwBMjvmdhc3AAAARYAAAACAAAAAj//wADZ2x5ZgAAAkAAAAEJAAABdH33LXtoZWFkAAABMAAAAC0AAAA2BroQKWhoZWEAAAFgAAAAHAAAACQD5QHQaG10eAAAAeAAAAAPAAAAFAYAAABsb2NhAAACMAAAAA4AAAAOAO4AeG1heHAAAAF8AAAAHAAAACAASgAvbmFtZQAAA0wAAADeAAABkorWfVZwb3N0AAAELAAAACkAAABEp3ubLXgBY2BkYADhPPP4OfH8Nl8ZuJkYQODS2fRrCPr/aSYGxq1ALgcDWBoAO60LkwAAAHgBY2BkYGDc+v80gx4TAwgASaAICmABAFB+Arl4AWNgZGBgYGPQYWBiAAIwyQgWc2AAAwAHVQB6eAFjYGRiYJzAwMrAwejDmMbAwOAOpb8ySDK0MDAwMbByMsCBAAMCBKS5pjA4PGB4wMR44P8BBj3GrQymQGFGkBwAjtgK
781/gAAeAFjYoAAEA1jAwAAZAAHAHgB3crBCcAwDEPRZydkih567CDdf4ZskmLwFBV8xBfCaC4BXkOUmx4sU0h2ngNb9V0vQCxaRKIAevT7fGWuBrEAAAAAAAAAAAA0AHgAugAAeAF9z79Kw1AUx/FzTm7un6QmJtwmQ5Bg1abgEGr/BAqlU6Gju+Cgg1MkQ/sA7Vj7BOnmO/gUvo2Lo14NqIO6/IazfD8HEODtmQCfoANwNsyp2/GJt3WKQrd1NLiYYWx2PBqOsmJMEOznPOTzfSCrhAtbbLdmeFLJV9eKd63WLrZcIcuaEVdssWCKM6pLCfTVOYbz/0pNSMSZKLIZpvh78sAUH6PlMrreTCabP9r+Z/puPZ2ur/RqpQHgh+MIegCnXeM4MRAPjYN//5tj4ZtTjkFqEdmeMShlEJ7tVAly2TAkx6R68Fl4E/aVvn8JqHFQ4JS1434gXKcuL31dDhzs3YbsEOAd/IU88gAAAHgBfY4xTgMxEEVfkk0AgRCioKFxQYd2ZRtpixxgRU2RfhU5q5VWseQ4JdfgAJyBlmNwAM7ABRhZQ0ORwp7nr+eZAa54YwYg9zm3ynPOeFRe8MCrciXOh/KSS76UV5L/iDmrLiS5AeU519wrL3jmSbkS5115yR2fyivJv9kx0ZMZ2RLZw27q87iNQi8EBo5FSPIMw3HqBboi5lKTGAGDp8FKXWP+t9TU01Lj5His1Ba6uM9dTEMwvrFmbf5GC/q2drW3ruXUhhsCiQOjznFlCzYhHUZp4xp76vsvQh89CQAAeAFjYGJABowM6IANLMrEyMTIzMjCXpyRWJBqZshWXJJYBKOMAFHFBucAAAAAAAAB//8AAngBY2BkYGDgA2IJBhBgAvKZGViBJAuYxwAABJsAOgAAeAFjYGBgZACCk535hiD60tn0azAaAEqpB6wAAA==") format("woff");font-weight:normal;font-style:normal}.jdgm-star{font-family:'JudgemeStar';display:inline !important;text-decoration:none !important;padding:0 4px 0 0 !important;margin:0 !important;font-weight:bold;opacity:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.jdgm-star:hover{opacity:1}.jdgm-star:last-of-type{padding:0 !important}.jdgm-star.jdgm--on:before{content:"\e000"}.jdgm-star.jdgm--off:before{content:"\e001"}.jdgm-star.jdgm--half:before{content:"\e002"}.jdgm-widget *{margin:0;line-height:1.4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-overflow-scrolling:touch}.jdgm-hidden{display:none !important;visibility:hidden !important}.jdgm-temp-hidden{display:none}.jdgm-spinner{width:40px;height:40px;margin:auto;border-radius:50%;border-top:2px solid #eee;border-right:2px solid #eee;border-bottom:2px solid #eee;border-left:2px solid #ccc;-webkit-animation:jdgm-spin 0.8s infinite linear;animation:jdgm-spin 0.8s infinite linear}.jdgm-spinner:empty{display:block}.jdgm-prev-badge{display:block !important} 782 783</style> 784 785 786 787 788 789 790 791 792
793<script data-cfasync='false' class='jdgm-script'> 794!function(e){window.jdgm=window.jdgm||{}; 795/* INF-1976 */ 796var _jdgmBlocked=function(){var raw=(window.jdgmSettings||{}).hostname_allowlist;var list=(raw==null?"":""+raw).split(/[\s,]+/).map(function(h){return h.trim().toLowerCase().replace(/\.$/,"");}).filter(function(h){return h;});if(!list.length)return false;var host=(e.location.hostname||"").toLowerCase().replace(/\.$/,"");if(/(^|\.)shopifypreview\.com$/.test(host))return false;var bare=host.replace(/^www\./,"");for(var i=0;i<list.length;i++){var en=list[i];if(en.indexOf("*.")===0){var b=en.slice(2);if(host===b||host.slice(-(b.length+1))==="."+b)return false;}else if(bare===en.replace(/^www\./,""))return false;}return true;}(); 797if(_jdgmBlocked){jdgm._loaderExecuted=true;jdgm._blocked=true;var _jdgmS=e.createElement("style");_jdgmS.textContent='[class^="jdgm-"],[class*=" jdgm-"]{display:none !important}';(e.head||e.documentElement).appendChild(_jdgmS);return;} 798jdgm.CDN_HOST="https://cdnwidget.judge.me/",jdgm.CDN_HOST_ALT="https://cdn2.judge.me/cdn/widget_frontend/",jdgm.API_HOST="https://api.judge.me/",jdgm.CDN_BASE_URL="https://cdn.shopify.com/extensions/01a0fd03-c455-7b82-9766-74101e55572c/judgeme-771/assets/",jdgm.CDN_API_HOST="https://cdn.judge.me/", 799jdgm.docReady=function(d){(e.attachEvent?"complete"===e.readyState:"loading"!==e.readyState)? 800setTimeout(d,0):e.addEventListener("DOMContentLoaded",d)},jdgm.loadCSS=function(d,t,o,a){ 801!o&&jdgm.loadCSS.requestedUrls.indexOf(d)>=0||(jdgm.loadCSS.requestedUrls.push(d), 802(a=e.createElement("link")).rel="stylesheet",a.class="jdgm-stylesheet",a.media="nope!", 803a.href=d,a.onload=function(){this.media="all",t&&setTimeout(t)},e.body.appendChild(a))}, 804jdgm.loadCSS.requestedUrls=[],jdgm.loadJS=function(e,d){var t=new XMLHttpRequest; 805t.onreadystatechange=function(){4===t.readyState&&t.status>=200&&t.status<300&&(Function(t.response)(),d&&d(t.response))}, 806t.open("GET",e),t.onerror=function(){if(e.indexOf(jdgm.CDN_HOST)===0&&jdgm.CDN_HOST_ALT!==jdgm.CDN_HOST){var f=e.replace(jdgm.CDN_HOST,jdgm.CDN_HOST_ALT);jdgm.loadJS(f,d)}},t.send()},jdgm.docReady((function(){(window.jdgmLoadCSS||e.querySelectorAll( 807".jdgm-widget, .jdgm-all-reviews-page").length>0)&&(jdgmSettings.widget_load_with_code_splitting? 808parseFloat(jdgmSettings.widget_version)>=3?jdgm.loadCSS(jdgm.CDN_BASE_URL+"widget_v3_base.css"): 809jdgm.loadCSS(jdgm.CDN_BASE_URL+"widget_base.css"):jdgm.loadCSS(jdgm.CDN_BASE_URL+"shopify_v2.css") 810)}))}(document); 811</script>
811 812<noscript><link rel="stylesheet" type="text/css" media="all" href="https://cdn.shopify.com/extensions/01a0fd03-c455-7b82-9766-74101e55572c/judgeme-771/assets/shopify_v2.css"></noscript> 813 814<!-- BEGIN app snippet: theme_fix_tags -->
814<script> 815 (function() { 816 var jdgmThemeFixes = null; 817 if (!jdgmThemeFixes) return; 818 819 // "All themes" fix: CSS and JS applied on every theme. CSS is injected 820 // before the per-theme fix so the theme-specific CSS wins the cascade. 821 // HTML is never applied globally (too risky). 822 var allThemesFix = jdgmThemeFixes['all']; 823 if (allThemesFix && allThemesFix.css) { 824 var allStyleTag = document.createElement('style'); 825 allStyleTag.classList.add('jdgm-theme-fix-style-all'); 826 allStyleTag.innerHTML = allThemesFix.css; 827 document.head.append(allStyleTag); 828 }; 829 830 if (allThemesFix && allThemesFix.js) { 831 var allScriptTag = document.createElement('script'); 832 allScriptTag.classList.add('jdgm-theme-fix-script-all'); 833 allScriptTag.innerHTML = allThemesFix.js; 834 document.head.append(allScriptTag); 835 }; 836 837 var thisThemeFix = jdgmThemeFixes[Shopify.theme.id]; 838 if (!thisThemeFix) return; 839 840 if (thisThemeFix.html) { 841 document.addEventListener("DOMContentLoaded", function() { 842 var htmlDiv = document.createElement('div'); 843 htmlDiv.classList.add('jdgm-theme-fix-html'); 844 htmlDiv.innerHTML = thisThemeFix.html; 845 document.body.append(htmlDiv); 846 }); 847 }; 848 849 if (thisThemeFix.css) { 850 var styleTag = document.createElement('style'); 851 styleTag.classList.add('jdgm-theme-fix-style'); 852 styleTag.innerHTML = thisThemeFix.css; 853 document.head.append(styleTag); 854 }; 855 856 if (thisThemeFix.js) { 857 var scriptTag = document.createElement('script'); 858 scriptTag.classList.add('jdgm-theme-fix-script'); 859 scriptTag.innerHTML = thisThemeFix.js; 860 document.head.append(scriptTag); 861 }; 862 })(); 863</script>
863 864<!-- END app snippet --> 865<!-- End of Judge.me Core --> 866 867 868 869<!-- END app block -->
869<script src="https://cdn.shopify.com/extensions/01a1089c-8f46-7356-a6fb-4fc10fbc27d3/gdpr-backpack-904/assets/consentmo_cookie_consent.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 869
869
870<script src="https://cdn.shopify.com/extensions/01a08d12-a50f-75bf-b4af-76fa0f2e317e/page-speed-optimizer-6/assets/shopify-speed.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 870
870
871<script src="https://cdn.shopify.com/extensions/01a0fd03-c455-7b82-9766-74101e55572c/judgeme-771/assets/loader.js" type="text/javascript" defer="defer"></script>
871 872<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
873<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: 55566532655,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 873
873
874<script> 875 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 876</script>
vendor: 1 bytes, line 876
876
877<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}
877).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: 55566532655,storefrontBaseUrl: "https://epic-cycles.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://epic-cycles.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2540863535","configuration":"{\"shopId\":\"55566532655\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"83adcaf06c5deacff41ffdf8f92d9129","type":"APP","apiClientId":246667608065,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2478735407","configuration":"{\"webPixelName\":\"Judge.me\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"8acc938b1a30dc7624e304493ca567d7","type":"APP","apiClientId":683015,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
877,"dataSharingState":"unrestricted"},{"id":"2117894191","configuration":"{\"accountID\":\"BLOCKIFY_TRACKING-123\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"b35abd85befe01ff41cd41df4ff83ae0","type":"APP","apiClientId":2309454,"privacyPurposes":["ANALYTICS","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1952645167","configuration":"{\"projectId\":\"v5hdzaac18\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"d8a2bb2ccbb513dc8e8b6937f4b8033e","type":"APP","apiClientId":240074326017,"privacyPurposes":[],"capabilities":["advanced_dom_events"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1948614703","configuration":"{\"shop\":\"epic-cycles2018.myshopify.com\",\"url\":\"https:\\\/\\\/sortwise.mezereon.net\\\/t\",\"customEvents\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"858af8c77a364ea5bdaaa6d4998682cb","type":"APP","apiClientId":216838471681,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1610743855","configuration":"{\"shopID\": \"74611\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"d22b5691c62682d22357c5bcbea63a2b","type":"APP","apiClientId":3780451,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1610711087","configuration":"{\"accountID\":\"38229\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"676191265fe7076edccb22bdd9c852fd","type":"APP","apiClientId":2503405,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"422641711","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"AW-10777960705\\\",\\\"GT-PZMTGVDN\\\",\\\"G-PZJF1BQMZJ\\\"],\\\"target_country\\\":\\\"US\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"AW-10777960705\\\/Yr-hCN_M5scDEIHCqpMo\\\",\\\"G-PZJF1BQMZJ\\\"]},{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"AW-10777960705\\\/7D3oCNzM5scDEIHCqpMo\\\",\\\"AW-10777960705\\\/qXeKCMXLgb8ZEIHCqpMo\\\",\\\"G-PZJF1BQMZJ\\\"]},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"AW-10777960705\\\/PtRCCNbM5scDEIHCqpMo\\\",\\\"MC-5MZ3F91XN2\\\",\\\"G-PZJF1BQMZJ\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"AW-10777960705\\\/W6KcCNPM5scDEIHCqpMo\\\",\\\"MC-5MZ3F91XN2\\\",\\\"G-PZJF1BQMZJ\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"AW-10777960705\\\/_MwICNDM5scDEIHCqpMo\\\",\\\"MC-5MZ3F91XN2\\\",\\\"G-PZJF1BQMZJ\\\"]},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"AW-10777960705\\\/nwSnCOLM5scDEIHCqpMo\\\",\\\"G-PZJF1BQMZJ\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"AW-10777960705\\\/vmtHCNnM5scDEIHCqpMo\\\",\\\"G-PZJF1BQMZJ\\\"]}],\\\"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"]}
877,{"id":"175276079","configuration":"{\"pixel_id\":\"1075311583378303\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2129967","configuration":"{\"global__consentEnabled\": \"false\", \"global__serverSideUrl\": \"APP_PROXY\", \"audiohook__live\": \"false\", \"audiohook__pixelId\": \"__EMPTY__\", \"audiohook__enabledWebEvents__pageView\": \"false\", \"audiohook__enabledWebEvents__purchase\": \"false\", \"audiohook__consent__enabled\": \"false\", \"audiohook__consent__ad_storage\": \"false\", \"audiohook__consent__analytics_storage\": \"false\", \"audiohook__consent__functionality_storage\": \"false\", \"audiohook__consent__personalization_storage\": \"false\", \"audiohook__consent__security_storage\": \"false\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0.3.0-848288a207b3814c857e6bdd215ce429","type":"APP","apiClientId":2509311,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"26574895","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"5","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Enhanced Ecommerce DataLayer"},{"id":"27361327","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"7","type":"CUSTOM","privacyPurposes":["SALE_OF_DATA"],"name":"Google Customer Reviews"},{"id":"42303535","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"10","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Shopify \u003c\u003e MCP"},{"id":"141000751","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"19","type":"CUSTOM","privacyPurposes":["SALE_OF_DATA"],"name":"Salesforce_Personalization"},{"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":"Epic Cycles","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"epic-cycles2018.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/epic-cycles.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://epic-cycles.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"149535981615","themePublished":"true","eventMetadataId":"43c8643c-0a8a-4c3f-a747-6fc7f2a440ed","pageType":"page","resourceId":"115855360047","shopId":"55566532655","storefrontBaseUrl":"https:\/\/epic-cycles.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
877<script> 878 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 879 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 880 window.ShopifyAnalytics.meta.currency = 'USD'; 881 var meta = {"page":{"pageType":"page","resourceType":"page","resourceId":115855360047,"requestId":"720586d5-99ea-465c-b065-53415c920a20-1791147271"}}; 882 for (var attr in meta) { 883 window.ShopifyAnalytics.meta[attr] = meta[attr]; 884 } 885</script>
vendor: 1 bytes, line 885
885
886<script class="analytics"> 887 (function () { 888 var customDocumentWrite = function(content) { 889 var jquery = null; 890 891 if (window.jQuery) { 892 jquery = window.jQuery; 893 } else if (window.Checkout && window.Checkout.$) { 894 jquery = window.Checkout.$; 895 } 896 897 if (jquery) { 898 jquery('body').append(content); 899 } 900 }; 901 902 var hasLoggedConversion = function(token) { 903 if (token) { 904 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 905 } 906 return false; 907 } 908 909 var setCookieIfConversion = function(token) { 910 if (token) { 911 var twoMonthsFromNow = new Date(Date.now()); 912 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 913 914 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 915 } 916 } 917 918 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 919 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 920 if (trekkie.integrations) { 921 return; 922 } 923 trekkie.methods = [ 924 'identify', 925 'page', 926 'ready', 927 'track', 928 'trackForm', 929 'trackLink' 930 ]; 931 trekkie.factory = function(method) { 932 return function() { 933 var args = Array.prototype.slice.call(arguments); 934 args.unshift(method); 935 trekkie.push(args); 936 if (method == 'track' || method == 'page') { 937 var pageUrl; 938 try { 939 pageUrl = window.location.href; 940 } catch (e) {} 941 var pageReferrer; 942 try { 943 pageReferrer = document.referrer; 944 } catch (e) {} 945 try { 946 if (window.__TREKKIE_SHIM_QUEUE == null) { 947 window.__TREKKIE_SHIM_QUEUE = []; 948 } 949 window.__TREKKIE_SHIM_QUEUE.push({ 950 from: 'trekkie-stub', 951 method: method, 952 args: args.slice(1), 953 pageContext: { 954 url: pageUrl, 955 referrer: pageReferrer 956 } 957 }); 958 } catch (e) { 959 // no-op 960 } 961 } 962 return trekkie; 963 }; 964 }; 965 for (var i = 0; i < trekkie.methods.length; i++) { 966 var key = trekkie.methods[i]; 967 trekkie[key] = trekkie.factory(key); 968 } 969 trekkie.load = function(config) { 970 trekkie.config = config || {}; 971 trekkie.config.initialDocumentCookie = document.cookie; 972 var first = document.getElementsByTagName('script')[0]; 973var script = document.createElement('script'); 974script.type = 'text/javascript'; 975script.onerror = function(e) { 976 var scriptFallback = document.createElement('script'); 977 scriptFallback.type = 'text/javascript'; 978 scriptFallback.onerror = function(error) { 979 var Monorail = { 980 produce: function produce(monorailDomain, schemaId, payload) { 981 var currentMs = new Date().getTime(); 982 var event = { 983 schema_id: schemaId, 984 payload: payload, 985 metadata: { 986 event_created_at_ms: currentMs, 987 event_sent_at_ms: currentMs 988 } 989 }; 990 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 991 }, 992 sendRequest: function sendRequest(endpointUrl, payload) { 993 // Try the sendBeacon API 994 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 995 var blobData = new window.Blob([payload], { 996 type: 'text/plain' 997 }); 998 999 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 1000 return true; 1001 } // sendBeacon was not successful 1002 1003 } // XHR beacon 1004 1005 var xhr = new XMLHttpRequest(); 1006 1007 try { 1008 xhr.open('POST', endpointUrl); 1009 xhr.setRequestHeader('Content-Type', 'text/plain'); 1010 xhr.send(payload); 1011 } catch (e) { 1012 console.log(e); 1013 } 1014 1015 return false; 1016 }, 1017 isIos12: function isIos12() { 1018 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 1019 } 1020 }; 1021 Monorail.produce('monorail-edge.shopifysvc.com', 1022 'trekkie_storefront_load_errors/1.1', 1023 {shop_id: 55566532655, 1024 theme_id: 149535981615, 1025 app_name: "storefront", 1026 context_url: window.location.href, 1027 source_url: "//epic-cycles.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 1028 1029 }; 1030 scriptFallback.async = true; 1031 scriptFallback.src = '//epic-cycles.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1032 first.parentNode.insertBefore(scriptFallback, first); 1033}; 1034script.async = true; 1035script.src = '//epic-cycles.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1036first.parentNode.insertBefore(script, first); 1037 1038 }; 1039 trekkie.load( 1040 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":55566532655,"isMerchantRequest":null,"themeId":149535981615,"themeCityHash":"14743997699056537351","contentLanguage":"en","currency":"USD","eventMetadataId":"43c8643c-0a8a-4c3f-a747-6fc7f2a440ed"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 1041 ); 1042 1043 var loaded = false;
1044 trekkie.ready(function() { 1045 if (loaded) return; 1046 loaded = true; 1047 1048 window.ShopifyAnalytics.lib = window.trekkie; 1049 1050 var originalDocumentWrite = document.write; 1051 document.write = customDocumentWrite; 1052 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 1053 document.write = originalDocumentWrite; 1054 1055 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 1056 var token = match? match[1]: undefined; 1057 if (!hasLoggedConversion(token)) { 1058 setCookieIfConversion(token); 1059 1060 } 1061 }); 1062 1063 window.ShopifyAnalytics.lib.page(null,{"pageType":"page","resourceType":"page","resourceId":115855360047,"requestId":"720586d5-99ea-465c-b065-53415c920a20-1791147271","shopifyEmitted":true}); 1064 1065 var eventsListenerScript = document.createElement('script'); 1066 eventsListenerScript.async = true; 1067 eventsListenerScript.src = "//epic-cycles.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 1068 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 1069})();</script>
vendor: 1 bytes, line 1069
1069
1070<script 1071 defer 1072 src="https://epic-cycles.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 1073 data-application="storefront-renderer" 1074 data-shop-id="55566532655" 1075 data-render-region="gcp-us-central1" 1076 data-page-type="page" 1077 data-theme-instance-id="149535981615" 1078 data-theme-name="Dawn" 1079 data-theme-version="15.2.0" 1080 data-monorail-region="shop_domain" 1081 data-resource-timing-sampling-rate="10" 1082 data-shs="true" 1083 data-shs-beacon="true" 1084 data-shs-export-with-fetch="true" 1085 data-shs-logs-sample-rate="1" 1086 data-shs-beacon-endpoint="https://epic-cycles.com/api/collect" 1087></script>
1087 1088<meta name="shopify-y" content="5ae1dc5f-3f70-4d79-b6ff-342b42924fbc" data-expiration="1822704871000"><meta name="shopify-s" content="9bc299b7-2474-4f59-a7e8-ebfcdffe8d3e" data-expiration="1791149071000"><meta name="new-cookie-storage-activated" content="t"> 1089</head> 1090 1091 <body class="gradient" data-acsb-skip> 1092
1092<script> 1093 window.CartConfig = { 1094 moneyFormat: "${{amount}}", 1095 locale: "en", 1096 currency: "USD" 1097 }; 1098 </script>
1098<script> 1099 (function() { 1100 // Verificar si estamos en la URL del forum 1101 var currentPath = window.location.pathname; 1102 var isForumPage = currentPath.includes('/community/epic-forum') || 1103 currentPath.includes('/pages/community/epic-forum'); 1104 1105 // Usuario tiene acceso al forum 1106 var hasForumAccess = false; 1107 1108 // Si estamos en la página del forum y el usuario NO tiene acceso, redirigir a home 1109 if (isForumPage && !hasForumAccess) { 1110 window.location.replace('/'); 1111 } 1112 })(); 1113 </script>
1113<!-- BEGIN sections: header-group --> 1114<div id="shopify-section-sections--19720077672495__announcement_bar_dWi7DP" class="shopify-section shopify-section-group-header-group announcement-bar-section"><link href="//epic-cycles.com/cdn/shop/t/42/assets/component-slideshow.css?v=17933591812325749411760957018" rel="stylesheet" type="text/css" media="all" /> 1115<link href="//epic-cycles.com/cdn/shop/t/42/assets/component-slider.css?v=55465871833945631921775555589" rel="stylesheet" type="text/css" media="all" /> 1116 1117 <link href="//epic-cycles.com/cdn/shop/t/42/assets/component-list-social.css?v=35792976012981934991760957017" rel="stylesheet" type="text/css" media="all" /> 1118 1119 1120<div 1121 class="utility-bar color-scheme-1 gradient utility-bar--bottom-border" 1122 1123> 1124 <div class="page-width utility-bar__grid"><div 1125 class="announcement-bar" 1126 role="region" 1127 aria-label="Announcement" 1128 1129 ><p class="announcement-bar__message h5"> 1130 <span>Call us for onlines sales: (888) 350-9045 or Text:Â (858) 345-2034</span></p></div><div class="localization-wrapper"> 1131</div> 1132 </div> 1133</div> 1134 1135 1136</div><div id="shopify-section-sections--19720077672495__header" class="shopify-section shopify-section-group-header-group section-header"><link 1137 rel="stylesheet" 1138 href="//epic-cycles.com/cdn/shop/t/42/assets/component-list-menu.css?v=151968516119678728991760957018" 1139 media="print" 1140 onload="this.media='all'"> 1141<link 1142 rel="stylesheet" 1143 href="//epic-cycles.com/cdn/shop/t/42/assets/component-search.css?v=165164710990765432851760957017" 1144 media="print" 1145 onload="this.media='all'"> 1146<link 1147 rel="stylesheet" 1148 href="//epic-cycles.com/cdn/shop/t/42/assets/component-menu-drawer.css?v=147478906057189667651760957017" 1149 media="print" 1150 onload="this.media='all'"> 1151<link 1152 rel="stylesheet" 1153 href="//epic-cycles.com/cdn/shop/t/42/assets/component-cart-notification.css?v=54116361853792938221760957016" 1154 media="print" 1155 onload="this.media='all'"><link 1156 rel="stylesheet" 1157 href="//epic-cycles.com/cdn/shop/t/42/assets/component-price.css?v=70172745017360139101760957017" 1158 media="print" 1159 onload="this.media='all'"><style> 1160 header-drawer { 1161 justify-self: start; 1162 margin-left: -1.2rem; 1163 }@media screen and (min-width: 990px) { 1164 header-drawer { 1165 display: none; 1166 } 1167 }.menu-drawer-container { 1168 display: flex; 1169 } 1170 1171 .list-menu { 1172 list-style: none; 1173 padding: 0; 1174 margin: 0; 1175 } 1176 1177 .list-menu--inline { 1178 display: inline-flex; 1179 flex-wrap: wrap; 1180 } 1181 1182 summary.list-menu__item { 1183 padding-right: 2.7rem; 1184 } 1185 1186 .list-menu__item { 1187 display: flex; 1188 align-items: center; 1189 line-height: calc(1 + 0.3 / var(--font-body-scale)); 1190 } 1191 1192 .list-menu__item--link { 1193 text-decoration: none; 1194 padding-bottom: 1rem; 1195 padding-top: 1rem; 1196 line-height: calc(1 + 0.8 / var(--font-body-scale)); 1197 } 1198 1199 @media screen and (min-width: 750px) { 1200 .list-menu__item--link { 1201 padding-bottom: 0.5rem; 1202 padding-top: 0.5rem; 1203 } 1204 } 1205</style><style data-shopify>.header { 1206 padding: 10 1207 px 3rem10 1208 px 3rem; 1209 } 1210 1211 .section-header { 1212 position: sticky; 1213 /* This is for fixing a Safari z-index issue. PR #2147 */ 1214 margin-bottom: 0px; 1215 } 1216 1217 @media screen and (min-width: 750px) { 1218 .section-header { 1219 margin-bottom: 0px; 1220 } 1221 } 1222 1223 @media screen and (min-width: 990px) { 1224 .header { 1225 padding-top: 20px; 1226 padding-bottom: 20px; 1227 } 1228 }</style>
1228<script src="//epic-cycles.com/cdn/shop/t/42/assets/cart-notification.js?v=133508293167896966491760957017" defer="defer"></script>
1228<sticky-header data-sticky-type="on-scroll-up" class="header-wrapper color-scheme-1 gradient header-wrapper--border-bottom"></sticky-header> 1229 1230<cart-notification> 1231 <div class="cart-notification-wrapper page-width"> 1232 <div 1233 id="cart-notification" 1234 class="cart-notification focus-inset color-scheme-1 gradient" 1235 aria-modal="true" 1236 aria-label="Item added to your cart" 1237 role="dialog" 1238 tabindex="-1" 1239 > 1240 <div class="cart-notification__header"> 1241 <h2 class="cart-notification__heading caption-large text-body"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-checkmark" viewBox="0 0 12 9"><path fill="currentColor" fill-rule="evenodd" d="M11.35.643a.5.5 0 0 1 .006.707l-6.77 6.886a.5.5 0 0 1-.719-.006L.638 4.845a.5.5 0 1 1 .724-.69l2.872 3.011 6.41-6.517a.5.5 0 0 1 .707-.006z" clip-rule="evenodd"/></svg> 1242Item added to your cart 1243 </h2> 1244 <button 1245 type="button" 1246 class="cart-notification__close modal__close-button link link--text focus-inset" 1247 aria-label="Close" 1248 > 1249 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-close" viewBox="0 0 18 17"><path fill="currentColor" d="M.865 15.978a.5.5 0 0 0 .707.707l7.433-7.431 7.579 7.282a.501.501 0 0 0 .846-.37.5.5 0 0 0-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 1 0-.707-.708L8.991 7.853 1.413.573a.5.5 0 1 0-.693.72l7.563 7.268z"/></svg> 1250</span> 1251 </button> 1252 </div> 1253 <div id="cart-notification-product" class="cart-notification-product"></div> 1254 <div class="cart-notification__links"> 1255 <a 1256 href="/cart" 1257 id="cart-notification-button" 1258 class="button button--secondary button--full-width" 1259 >View cart</a> 1260 <form action="/cart" method="post" id="cart-notification-form"> 1261 <button class="button button--primary button--full-width" name="checkout"> 1262 Check out 1263 </button> 1264 </form> 1265 <button type="button" class="link button-label">Continue shopping</button> 1266 </div> 1267 </div> 1268 </div> 1269</cart-notification> 1270<style data-shopify> 1271 .cart-notification { 1272 display: none; 1273 } 1274</style> 1275 1276 1277
1278<script type="application/ld+json"> 1279 { 1280 "@context": "http://schema.org", 1281 "@type": "Organization", 1282 "name": "Epic Cycles", 1283 1284 1285 "sameAs": [ 1286 "https:\/\/www.facebook.com\/Epic.Cycles1\/","https:\/\/www.instagram.com\/epic.cycles\/?hl=en","https:\/\/www.tiktok.com\/@epic.cycles","https:\/\/www.youtube.com\/@Epic-Cycles" 1287 ], 1288 "url": "https:\/\/epic-cycles.com\/pages\/blog" 1289 } 1290</script>
1290<header class="" role="banner"> 1291 1292 <div class="row top"> 1293 <div class="content-logo"> 1294 <a href="/" aria-label="Epic Cycles - Home"> 1295 <img 1296 src="//epic-cycles.com/cdn/shop/t/42/assets/front-epiccycles-logo.svg?v=76365125842519182391760957018" 1297 alt="" 1298 class="logo-desktop"> 1299 <img 1300 src="//epic-cycles.com/cdn/shop/t/42/assets/front-epiccycles-logo-mobile.svg?v=93721849152296194671760957019" 1301 alt="" 1302 class="logo-mobile"> 1303 </a> 1304 </div> 1305 <div class="content-elements"> 1306 <div class="content-search"> 1307 1308 1309 1310<details-modal class="header__search"> 1311 <details open="true"> 1312 <summary 1313 class="header__icon header__icon--search header__icon--summary link focus-inset modal__toggle" 1314 aria-haspopup="dialog" 1315 aria-label="Search product" 1316 > 1317 </summary> 1318 <div 1319 class="search-modal modal__content gradient" 1320 role="dialog" 1321 aria-modal="true" 1322 aria-label="Search product" 1323 > 1324 <div class="modal-overlay"></div> 1325 <div 1326 class="search-modal__content search-modal__content-bottom" 1327 tabindex="-1" 1328 ><predictive-search class="search-modal__form" data-loading-text="Loading..."><form action="/search" method="get" role="search" class="search search-modal__form"> 1329 <div class="field"> 1330 <input 1331 class="search__input field__input" 1332 id="Search-In-Modal-1" 1333 type="search" 1334 name="q" 1335 value="" 1336 placeholder="Search product"role="combobox" 1337 aria-expanded="false" 1338 aria-owns="predictive-search-results" 1339 aria-controls="predictive-search-results" 1340 aria-haspopup="listbox" 1341 aria-autocomplete="list" 1342 autocorrect="off" 1343 autocomplete="off" 1344 autocapitalize="off" 1345 spellcheck="false"> 1346 <label class="field__label" for="Search-In-Modal-1">Search product</label> 1347 <input type="hidden" name="options[prefix]" value="last"> 1348 <button 1349 type="reset" 1350 class="reset__button field__button hidden" 1351 aria-label="Clear search term" 1352 > 1353 <span class="svg-wrapper" aria-hidden="true"> 1354 <iconify-icon icon="ei:close" aria-hidden="true"></iconify-icon> 1355 </span> 1356 </button> 1357 <button class="search__button field__button" aria-label="Search product"> 1358 <span class="svg-wrapper" aria-hidden="true"> 1359 <i class="fa-regular fa-magnifying-glass" aria-hidden="true"></i> 1360 </span> 1361 </button> 1362 </div><div class="predictive-search predictive-search--header" tabindex="-1" data-predictive-search> 1363 1364<div class="predictive-search__loading-state"> 1365 <svg xmlns="http://www.w3.org/2000/svg" class="spinner" viewBox="0 0 66 66"><circle stroke-width="6" cx="33" cy="33" r="30" fill="none" class="path"/></svg> 1366 1367</div> 1368</div> 1369 1370 <span class="predictive-search-status visually-hidden hidden" role="status" aria-hidden="true"></span></form></predictive-search><button 1371 type="button" 1372 class="search-modal__close-button modal__close-button link link--text focus-inset" 1373 aria-label="Close" 1374 > 1375 <span class="svg-wrapper" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-close" viewBox="0 0 18 17"><path fill="currentColor" d="M.865 15.978a.5.5 0 0 0 .707.707l7.433-7.431 7.579 7.282a.501.501 0 0 0 .846-.37.5.5 0 0 0-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 1 0-.707-.708L8.991 7.853 1.413.573a.5.5 0 1 0-.693.72l7.563 7.268z"/></svg> 1376</span> 1377 </button> 1378 </div> 1379 </div> 1380 </details> 1381</details-modal> 1382 1383 1384 </div> 1385 <div class="content-store"> 1386 <div role="button" tabindex="0" aria-label="Select your store" aria-haspopup="dialog"> 1387 <p class="title" aria-hidden="true">My store:</p> 1388 <div class="select"> 1389 <p class="select-text select-store-menu" aria-hidden="true">Select your store</p> 1390 <p class="select-number select-number-store" aria-hidden="true">
1391 <span class="select-number-character">5</span> 1392 <span class="select-number-bg"></span> 1393 </p> 1394 </div> 1395 <p class="store"></p> 1396 <iconify-icon icon="majesticons:chevron-down-line" aria-hidden="true"></iconify-icon> 1397 </div> 1398 </div> 1399 <div class="content-user"> 1400 1401 <a href="/account/login" aria-label="Sign in to your account"> 1402 <iconify-icon icon="solar:user-outline" aria-hidden="true"></iconify-icon> 1403 </a> 1404 1405 </div> 1406 1407 <button type="button" class="content-shopping-cart mini-cart__trigger" aria-label="Open shopping cart" aria-haspopup="dialog" style="background:none;border:0;padding:0;font:inherit;color:inherit;cursor:pointer;"> 1408 <div class="cart-icon-wrapper"> 1409 <iconify-icon icon="iconoir:cart" aria-hidden="true"></iconify-icon> 1410 <span class="cart-count-badge" style="display: none;" aria-hidden="true">0</span> 1411 <span style="position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);border:0;white-space:nowrap;" data-cart-count-a11y>0 items in cart</span> 1412 </div> 1413 </button> 1414 1415 </div> 1416 <div class="content-menu-mobile" role="button" tabindex="0" aria-label="Toggle navigation menu" aria-expanded="false" aria-controls="main-mobile-menu"> 1417 <iconify-icon icon="fe:app-menu" class="menu-open" aria-hidden="true"></iconify-icon> 1418 <iconify-icon icon="ei:close" class="menu-close" aria-hidden="true"></iconify-icon> 1419 </div> 1420 </div> 1421
1421<script> 1422 window.CartWithProduct = [ 1423 1424 ]; 1425</script>
1425 1426 1427 1428<!-- Fondo oscuro que no cubre header --> 1429<div class="overlay" aria-hidden="true"></div> 1430 1431<!-- Mini Cart --> 1432 1433 1434<div class="mini-cart" role="dialog" aria-modal="true" aria-label="Shopping cart" aria-hidden="true" tabindex="-1"> 1435 <div class="mini-cart__header"> 1436 <h2 class="mini-cart__title hidden" id="mini-cart-title">CART</h2> 1437 <button class="mini-cart__remove-all">Remove all</button> 1438 <button type="button" class="mini-cart__close" aria-label="Close cart" style="background:none;border:0;padding:8px;margin-left:auto;cursor:pointer;font-size:24px;line-height:1;color:inherit;"> 1439 <span aria-hidden="true">×</span> 1440 </button> 1441 </div> 1442 <div class="mini-cart__items" role="list" aria-label="Items in cart"></div><div class="mini-cart__assembly-note" hidden> 1443 <iconify-icon icon="hugeicons:tools" aria-hidden="true"></iconify-icon> 1444 <div><p><strong>Epic Pro Assembly</strong> is added at checkout when your bike is shipped ($124.99 non-electric / $149.99 electric). Free with In-Store Pickup or Local Delivery within 20 miles.</p></div> 1445 </div><div class="mini-cart__total" role="text" aria-label="Total price: $0.00" aria-live="polite"> 1446 <span aria-hidden="true">Total Price</span> 1447 <strong class="mini-cart__total-value" aria-hidden="true">$0.00</strong> 1448 </div> 1449 <a href="/cart" class="button btn btn-view-cart" aria-label="View full cart page">VIEW CART</a> 1450</div> 1451 1452<style data-shopify> 1453.content-shopping-cart { 1454 display: inline-block; 1455 cursor: pointer; 1456} 1457.cart-icon-wrapper { 1458 position: relative; 1459 /* display: inline-block; */ 1460} 1461.cart-count-badge { 1462 position: absolute; 1463 top: -9px; 1464 right: -9px; 1465 background: #aa4b22; 1466 color: white; 1467 font-size: 12px; 1468 font-weight: bold; 1469 line-height: 1; 1470 padding: 2px 4.5px; 1471 border-radius: 50%; 1472 z-index: 10; 1473 display: none; 1474} 1475.overlay { 1476 position: fixed; 1477 inset: 0; 1478 background: rgba(0, 0, 0, 0.4); 1479 display: none; 1480 z-index: 999; 1481} 1482.overlay--show { 1483 display: block; 1484} 1485/* El overlay lleva z-index:999 y el panel z-index:3 (styles.css). Mientras el overlay 1486 estuvo forzado a display:none ese choque no se notaba; al devolverlo a la vida el 1487 fondo oscuro tapaba el minicart y parecia que no abria. El selector va con `body` 1488 delante para ganar por especificidad sin depender del orden de las hojas ni de las 1489 reglas !important que inyecta quick-add-modal.js. */ 1490body .mini-cart { 1491 z-index: 1000; 1492} 1493.mini-cart__assembly-note { 1494 display: flex; 1495 align-items: flex-start; 1496 gap: 6px; 1497 margin: 0 16px 12px; 1498 padding: 10px 12px; 1499 background: #f5f5f5; 1500 border-radius: 4px; 1501 font-size: 0.75rem; 1502 line-height: 1.45; 1503 color: #4a4a4a; 1504} 1505.mini-cart__assembly-note[hidden] { 1506 display: none; 1507} 1508.mini-cart__assembly-note iconify-icon { 1509 flex-shrink: 0; 1510 margin-top: 2px; 1511} 1512.mini-cart__assembly-note p { 1513 margin: 0; 1514} 1515 1516/* Loading spinner animation */ 1517@keyframes spin { 1518 0% { transform: rotate(0deg); } 1519 100% { transform: rotate(360deg); } 1520} 1521</style> 1522 <div class="row nav" id="main-mobile-menu"> 1523 <div class="content-company-menu"> 1524 <div class="content-company-menu-title" role="button" tabindex="0" aria-label="Company menu" aria-haspopup="true" aria-expanded="false"> 1525 <iconify-icon icon="ei:close" class="menu-close" aria-hidden="true"></iconify-icon> 1526 <iconify-icon icon="fe:app-menu" class="menu-open" aria-hidden="true"></iconify-icon> 1527 <p>Menu</p> 1528 </div> 1529 </div> 1530 <div class="content-labels" role="group" aria-label="Menu categories"> 1531 <div class="label active" data-label="shop" role="button" tabindex="0" aria-pressed="true" aria-label="Show Shop menu"> 1532 <p>Shop</p> 1533 </div> 1534 <div class="label" data-label="epicSections" role="button" tabindex="0" aria-pressed="false" aria-label="Show Epic sections menu"> 1535 <p>Epic sections</p> 1536 </div> 1537 </div> 1538 <div class="content-store"> 1539 <div role="button" tabindex="0" aria-label="Select your store" aria-haspopup="dialog"> 1540 <p class="title" aria-hidden="true">My store:</p> 1541 <div class="select"> 1542 <p class="select-text select-store-menu" aria-hidden="true">Select your store</p> 1543 <p class="select-number select-number-store" aria-hidden="true">
1544 <span class="select-number-character">5</span> 1545 <span class="select-number-bg"></span> 1546 </p> 1547 </div> 1548 <p class="store"></p> 1549 <iconify-icon icon="majesticons:chevron-down-line" aria-hidden="true"></iconify-icon> 1550 </div> 1551 </div> 1552 1553 <div class="content-back-menu hidden"> 1554 <iconify-icon class="content-back-menu-icon" icon="majesticons:chevron-left"></iconify-icon> 1555 <p class="content-back-menu-text" >Back to Menu</p> 1556</div> 1557 1558 1559 <div class="content-nav label-menu active" data-label="shop"> 1560 <nav aria-label="Shop main navigation"> 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 <div class="nav-section" role="button" tabindex="0" aria-haspopup="true" aria-expanded="false" aria-label="Bikes menu"> 1575 <div class="nav-section-title"> 1576 1577 <p>Bikes</p> 1578 </div> 1579 <div class="nav-category"> 1580 <div class="nav-category-view-all-mobile"> 1581 <div class="nav-category-view-all-mobile-bg"> 1582 1583 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="Bikes" loading="lazy" decoding="async"> 1584 1585 </div> 1586 <p>Bikes</p> 1587 <p><a href="/collections/bikes">View all</a></p> 1588 </div> 1589 <div class="nav-category-container"> 1590 <div class="nav-category-bg"> 1591 1592 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="Bikes" loading="lazy" decoding="async"> 1593 1594 </div> 1595 1596 1597 <div class="nav-category-column"> 1598 <div class="nav-category-title"> 1599 <p>Road</p> 1600 </div> 1601 <div class="nav-subcategory"> 1602 <div class="nav-subcategory-view-all-mobile"> 1603 <div class="nav-subcategory-view-all-mobile-bg"> 1604 1605 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="Bikes" loading="lazy" decoding="async"> 1606 1607 </div> 1608 <p>Road</p> 1609 <p>View all</p> 1610 </div> 1611 1612 1613 <div class="nav-subcategory-column"> 1614 1615 <a href="/collections/road-race-bikes">Race</a> 1616 1617 <a href="/collections/endurance-road-bikes">Endurance</a> 1618 1619 <a href="/collections/triathlon-bikes">Triathlon</a> 1620 1621 <a href="/collections/electric-road-bikes">E-Road</a> 1622 1623 <a href="/collections/city-bikes">City Bikes</a> 1624 1625 <a href="/collections/road-bikes" class="view-all">View all</a> 1626 </div> 1627 1628 1629 </div> 1630 </div> 1631 1632 1633 <div class="nav-category-column"> 1634 <div class="nav-category-title"> 1635 <p>Mountain</p> 1636 </div> 1637 <div class="nav-subcategory"> 1638 <div class="nav-subcategory-view-all-mobile"> 1639 <div class="nav-subcategory-view-all-mobile-bg"> 1640 1641 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100v
1641w, 400px" alt="Bikes" loading="lazy" decoding="async"> 1642 1643 </div> 1644 <p>Mountain</p> 1645 <p>View all</p> 1646 </div> 1647 1648 1649 <div class="nav-subcategory-column"> 1650 1651 <a href="/collections/cross-country-mountain-bikes">Cross-country</a> 1652 1653 <a href="/collections/trail-mountain-bikes">Trail Bikes</a> 1654 1655 <a href="/collections/electric-mountain-bikes">E-Mountain (MTB)</a> 1656 1657 <a href="/collections/mountain-bikes" class="view-all">View all</a> 1658 </div> 1659 1660 1661 </div> 1662 </div> 1663 1664 1665 <div class="nav-category-column"> 1666 <div class="nav-category-title"> 1667 <p>Gravel</p> 1668 </div> 1669 <div class="nav-subcategory"> 1670 <div class="nav-subcategory-view-all-mobile"> 1671 <div class="nav-subcategory-view-all-mobile-bg"> 1672 1673 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="Bikes" loading="lazy" decoding="async"> 1674 1675 </div> 1676 <p>Gravel</p> 1677 <p>View all</p> 1678 </div> 1679 1680 1681 <div class="nav-subcategory-column"> 1682 1683 <a href="/collections/gravel-adventure-bikes">Adventure</a> 1684 1685 <a href="/collections/gravel-race-bikes">Performance</a> 1686 1687 <a href="/collections/electric-gravel-bikes">E-Gravel</a> 1688 1689 <a href="/collections/gravel-bikes" class="view-all">View all</a> 1690 </div> 1691 1692 1693 </div> 1694 </div> 1695 1696 1697 <div class="nav-category-column"> 1698 <div class="nav-category-title"> 1699 <p>E-Bike</p> 1700 </div> 1701 <div class="nav-subcategory"> 1702 <div class="nav-subcategory-view-all-mobile"> 1703 <div class="nav-subcategory-view-all-mobile-bg"> 1704 1705 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="Bikes" loading="lazy" decoding="async"> 1706 1707 </div> 1708 <p>E-Bike</p> 1709 <p>View all</p> 1710 </div> 1711 1712 1713 <div class="nav-subcategory-column"> 1714 1715 <a href="/collections/electric-road-bikes">E-Road</a> 1716 1717 <a href="/collections/electric-mountain-bikes">E-mountain (MTB)</a> 1718 1719 <a href="/collections/electric-gravel-bikes">E-Gravel</a> 1720 1721 <a href="/collections/electric-city-bikes">E-Urban</a> 1722 1723 <a href="/collections/electric-bikes" class="view-all">View all</a> 1724 </div> 1725 1726 1727 </div> 1728 </div> 1729 1730 1731 <div class="nav-category-column"> 1732 <div class="nav-category-title"> 1733 <p>Frames</p> 1734 </div> 1735 <div class="nav-subcategory"> 1736 <div class="nav-subcategory-view-all-mobile"> 1737 <div class="nav-subcategory-view-all-mobile-bg"> 1738 1739 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100v
1739w, 400px" alt="Bikes" loading="lazy" decoding="async"> 1740 1741 </div> 1742 <p>Frames</p> 1743 <p>View all</p> 1744 </div> 1745 1746 1747 <div class="nav-subcategory-column"> 1748 1749 <a href="/collections/road-frameset">Road</a> 1750 1751 <a href="/collections/mtb-frameset">Mountain</a> 1752 1753 <a href="/collections/gravel-frames">Gravel</a> 1754 1755 <a href="/collections/triathlon-frameset">Triathlon</a> 1756 1757 <a href="/collections/framesets" class="view-all">View all</a> 1758 </div> 1759 1760 1761 </div> 1762 </div> 1763 1764 </div> 1765 <div class="nav-category-cta-view-all"> 1766 <a href="/collections/bikes">All Bikes</a> 1767 </div> 1768 </div> 1769 </div> 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 <div class="nav-section" role="button" tabindex="0" aria-haspopup="true" aria-expanded="false" aria-label="For the Bike menu"> 1786 <div class="nav-section-title"> 1787 1788 <p>For the Bike</p> 1789 </div> 1790 <div class="nav-category"> 1791 <div class="nav-category-view-all-mobile"> 1792 <div class="nav-category-view-all-mobile-bg"> 1793 1794 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="For the Bike" loading="lazy" decoding="async"> 1795 1796 </div> 1797 <p>For the Bike</p> 1798 <p><a href="/collections/for-the-bike">View all</a></p> 1799 </div> 1800 <div class="nav-category-container"> 1801 <div class="nav-category-bg"> 1802 1803 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="For the Bike" loading="lazy" decoding="async"> 1804 1805 </div> 1806 1807 1808 <div class="nav-category-column"> 1809 <div class="nav-category-title"> 1810 <p>Wheels & Tires</p> 1811 </div> 1812 <div class="nav-subcategory"> 1813 <div class="nav-subcategory-view-all-mobile"> 1814 <div class="nav-subcategory-view-all-mobile-bg"> 1815 1816 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="For the Bike" loading="lazy" decoding="async"> 1817 1818 </div> 1819 <p>Wheels & Tires</p> 1820 <p>View all</p> 1821 </div> 1822 1823 1824 <div class="nav-subcategory-column"> 1825 1826 <a href="/collections/road-tires">
1826Road Tires</a> 1827 1828 <a href="/collections/road-bike-wheels">Road Wheels</a> 1829 1830 <a href="/collections/mtb-tires">MTB Tires</a> 1831 1832 <a href="/collections/mtb-wheels">MTB Wheels</a> 1833 1834 <a href="/collections/gravel-tires">Gravel Tires</a> 1835 1836 <a href="/collections/gravel-wheels">Gravel Wheels</a> 1837 1838 <a href="/collections/wheels-tires" class="view-all">View all</a> 1839 </div> 1840 1841 1842 </div> 1843 </div> 1844 1845 1846 <div class="nav-category-column"> 1847 <div class="nav-category-title"> 1848 <p>Components</p> 1849 </div> 1850 <div class="nav-subcategory"> 1851 <div class="nav-subcategory-view-all-mobile"> 1852 <div class="nav-subcategory-view-all-mobile-bg"> 1853 1854 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="For the Bike" loading="lazy" decoding="async"> 1855 1856 </div> 1857 <p>Components</p> 1858 <p>View all</p> 1859 </div> 1860 1861 1862 <div class="nav-subcategory-column"> 1863 1864 <a href="/collections/cranksets-power-meters">Cranksets & Power Meters</a> 1865 1866 <a href="/collections/pedals-cleats">Pedals & Cleats</a> 1867 1868 <a href="/collections/chains-cranksets">Chains & Cassettes</a> 1869 1870 <a href="/collections/handlebars">Handlebars</a> 1871 1872 <a href="/collections/saddles">Saddles</a> 1873 1874 <a href="/collections/lights-safety">Lights & Safety</a> 1875 1876 <a href="https://epic-cycles.com/collections/components" class="view-all">View all</a> 1877 </div> 1878 1879 1880 </div> 1881 </div> 1882 1883 1884 <div class="nav-category-column"> 1885 <div class="nav-category-title"> 1886 <p>Essentials</p> 1887 </div> 1888 <div class="nav-subcategory"> 1889 <div class="nav-subcategory-view-all-mobile"> 1890 <div class="nav-subcategory-view-all-mobile-bg"> 1891 1892 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39_cf42a3a2-7b7b-40d9-bff0-2041fc931c93.png?v=1773065174&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="For the Bike" loading="lazy" decoding="async"> 1893 1894 </div> 1895 <p>Essentials</p> 1896 <p>View all</p> 1897 </div> 1898 1899 1900 <div class="nav-subcategory-column"> 1901 1902 <a href="/collections/water-bottles-cages">Water Bottles & Cages</a> 1903 1904 <a href="/collections/pumps-co2">Pumps & Inflation</a> 1905 1906 <a href="/collections/maintenance-products">Tools & Maintenance</a> 1907 1908 <a href="/collections/locks-1">Locks</a> 1909 1910 <a href="/collections/gps">Navigation</a> 1911 1912 <a href="/collections/for-the-bike" class="view-all">View all</a> 1913 </div> 1914 1915 1916 </div> 1917 </div> 1918 1919 </div> 1920 <div class="nav-category-cta-view-all"> 1921 <a href="/collections/for-the-bike">All For the Bike</a> 1922 </div> 1923 </div> 1924 </div> 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 <div class="nav-section" role="button" tabindex="0" aria-haspopup="true" aria-expanded="false" aria-label="For the Cyclist menu"> 1941 <div class="nav-section-title"> 1942 1943 <p>For the Cyclist</p> 1944 </div> 1945 <div class="nav-category"> 1946 <div class="nav-category-view-all-mobile"> 1947 <div class="nav-category-view-all-mobile-bg"> 1948 1949 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100v
1949w, 400px" alt="For the Cyclist" loading="lazy" decoding="async"> 1950 1951 </div> 1952 <p>For the Cyclist</p> 1953 <p><a href="/collections/for-the-cyclist">View all</a></p> 1954 </div> 1955 <div class="nav-category-container"> 1956 <div class="nav-category-bg"> 1957 1958 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="For the Cyclist" loading="lazy" decoding="async"> 1959 1960 </div> 1961 1962 1963 <div class="nav-category-column"> 1964 <div class="nav-category-title"> 1965 <p>Helmets</p> 1966 </div> 1967 <div class="nav-subcategory"> 1968 <div class="nav-subcategory-view-all-mobile"> 1969 <div class="nav-subcategory-view-all-mobile-bg"> 1970 1971 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="For the Cyclist" loading="lazy" decoding="async"> 1972 1973 </div> 1974 <p>Helmets</p> 1975 <p>View all</p> 1976 </div> 1977 1978 1979 <div class="nav-subcategory-column"> 1980 1981 <a href="/collections/road-helmets">Road Helmets</a> 1982 1983 <a href="/collections/mountain-helmets">Mountain Helmets</a> 1984 1985 <a href="/collections/city-urban-helmets">City Helmets</a> 1986 1987 <a href="/collections/helmets" class="view-all">View all</a> 1988 </div> 1989 1990 1991 </div> 1992 </div> 1993 1994 1995 <div class="nav-category-column"> 1996 <div class="nav-category-title"> 1997 <p>Clothes</p> 1998 </div> 1999 <div class="nav-subcategory"> 2000 <div class="nav-subcategory-view-all-mobile"> 2001 <div class="nav-subcategory-view-all-mobile-bg"> 2002 2003 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="For the Cyclist" loading="lazy" decoding="async"> 2004 2005 </div> 2006 <p>Clothes</p> 2007 <p>View all</p> 2008 </div> 2009 2010 2011 <div class="nav-subcategory-column"> 2012 2013 <a href="/collections/base-layers">Base Layers</a> 2014 2015 <a href="/collections/jerseys">Jerseys</a> 2016 2017 <a href="/collections/jackets">Jackets & Vests</a> 2018 2019 <a href="/collections/bibs-shorts">Bibs & Shorts</a> 2020 2021 <a href="/collections/warmers">Warmers</a> 2022 2023 <a href="/collections/socks">Socks</a> 2024 2025 <a href="/collections/gloves">Gloves</a> 2026 2027 <a href="/collections/clothes" class="view-all">View all</a> 2028 </div> 2029 2030 2031 </div> 2032 </div> 2033 2034 2035 <div class="nav-category-column"> 2036 <div class="nav-category-title"> 2037 <p>Shoes</p> 2038 </div> 2039 <div class="nav-subcategory"> 2040 <div class="nav-subcategory-view-all-mobile"> 2041 <div class="nav-subcategory-view-all-mobile-bg"> 2042 2043 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100v
2043w, 400px" alt="For the Cyclist" loading="lazy" decoding="async"> 2044 2045 </div> 2046 <p>Shoes</p> 2047 <p>View all</p> 2048 </div> 2049 2050 2051 <div class="nav-subcategory-column"> 2052 2053 <a href="/collections/mountain-shoes">Mountain Shoes</a> 2054 2055 <a href="/collections/road-shoes">Road Shoes</a> 2056 2057 <a href="/collections/shoes" class="view-all">View all</a> 2058 </div> 2059 2060 2061 </div> 2062 </div> 2063 2064 2065 <div class="nav-category-column"> 2066 <div class="nav-category-title"> 2067 <p>Accessories for the cyclist</p> 2068 </div> 2069 <div class="nav-subcategory"> 2070 <div class="nav-subcategory-view-all-mobile"> 2071 <div class="nav-subcategory-view-all-mobile-bg"> 2072 2073 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="For the Cyclist" loading="lazy" decoding="async"> 2074 2075 </div> 2076 <p>Accessories for the cyclist</p> 2077 <p>View all</p> 2078 </div> 2079 2080 2081 <div class="nav-subcategory-column"> 2082 2083 <a href="/collections/sunglasses-1">Sunglasses</a> 2084 2085 <a href="/collections/smartwatch">Smartwatch</a> 2086 2087 <a href="/collections/bicycle-trainers">Indoor Trainers</a> 2088 2089 <a href="/collections/car-racks-1">Car Racks</a> 2090 2091 <a href="/collections/other-accesories">Other accessories</a> 2092 2093 <a href="/collections/apparel-accessories" class="view-all">View all</a> 2094 </div> 2095 2096 2097 </div> 2098 </div> 2099 2100 </div> 2101 <div class="nav-category-cta-view-all"> 2102 <a href="/collections/for-the-cyclist">All For the Cyclist</a> 2103 </div> 2104 </div> 2105 </div> 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 <div class="nav-section" role="button" tabindex="0" aria-haspopup="true" aria-expanded="false" aria-label="Outlet menu"> 2122 <div class="nav-section-title"> 2123 2124 <p>Outlet</p> 2125 </div> 2126 <div class="nav-category"> 2127 <div class="nav-category-view-all-mobile"> 2128 <div class="nav-category-view-all-mobile-bg"> 2129 2130 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="Outlet" loading="lazy" decoding="async"> 2131 2132 </div> 2133 <p>Outlet</p> 2134 <p><a href="/collections/outlet-discounts">View all</a></p> 2135 </div> 2136 <div class="nav-category-container"> 2137 <div class="nav-category-bg"> 2138 2139 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100v
2139w, 400px" alt="Outlet" loading="lazy" decoding="async"> 2140 2141 </div> 2142 2143 2144 <div class="nav-category-column"> 2145 <div class="nav-category-title"> 2146 <p>Bikes</p> 2147 </div> 2148 <div class="nav-subcategory"> 2149 <div class="nav-subcategory-view-all-mobile"> 2150 <div class="nav-subcategory-view-all-mobile-bg"> 2151 2152 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="Outlet" loading="lazy" decoding="async"> 2153 2154 </div> 2155 <p>Bikes</p> 2156 <p>View all</p> 2157 </div> 2158 2159 2160 2161 2162 2163 2164 <div class="nav-subcategory-column"> 2165 2166 <a href="/collections/pre-owned-bikes">Pre-Owned Bikes</a> 2167 2168 <a href="/collections/road-bikes-on-sale">Road on Sale</a> 2169 2170 </div> 2171 <div class="nav-subcategory-column"> 2172 2173 <a href="/collections/mtb-on-sale">Mountain on Sale</a> 2174 2175 <a href="/collections/e-bikes-on-sale">E-Ride on Sale</a> 2176 2177 <a href="/collections/demo-bikes-1">Demo Bikes</a> 2178 2179 <a href="/collections/sale-bikes" class="view-all">View all</a> 2180 </div> 2181 2182 2183 2184 2185 </div> 2186 </div> 2187 2188 2189 <div class="nav-category-column"> 2190 <div class="nav-category-title"> 2191 <p>Accessories</p> 2192 </div> 2193 <div class="nav-subcategory"> 2194 <div class="nav-subcategory-view-all-mobile"> 2195 <div class="nav-subcategory-view-all-mobile-bg"> 2196 2197 <img src="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600" srcset="//epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=400 400w, //epic-cycles.com/cdn/shop/files/black-screen_39.png?v=1765399084&width=600 600w" sizes="(max-width: 767px) 100vw, 400px" alt="Outlet" loading="lazy" decoding="async"> 2198 2199 </div> 2200 <p>Accessories</p> 2201 <p>View all</p> 2202 </div> 2203 2204 2205 2206 2207 2208 2209 <div class="nav-subcategory-column"> 2210 2211 <a href="/collections/apparel-on-sale">Apparel on sale</a> 2212 2213 <a href="/collections/helmets-on-sale">Helmets on Sale</a> 2214 2215 </div> 2216 <div class="nav-subcategory-column"> 2217 2218 <a href="/collections/sale-shoes">Shoes on Sale</a> 2219 2220 <a href="/collections/sale-accessories">Accessories on Sale</a> 2221 2222 <a href="/collections/components-on-sale">Components on Sale</a> 2223 2224 <a href="/collections/sale-accessories" class="view-all">View all</a> 2225 </div> 2226 2227 2228 2229 2230 </div> 2231 </div> 2232 2233 </div> 2234 <div class="nav-category-cta-view-all"> 2235 <a href="/collections/outlet-discounts">All Outlet</a> 2236 </div> 2237 </div> 2238 </div> 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253
2254 <a href="/pages/special-edition-bikes" class="nav-section"> 2255 <div class="nav-section-title"> 2256 2257 <p>Special Edition Bikes</p> 2258 </div> 2259 </a> 2260 2261 2262 2263 2264 </nav> 2265 </div><style> 2266 /* Shop menu (.content-nav): submenu sale absoluto bajo el header (replicar :hover) */ 2267 header .content-nav .nav-section[role="button"]:focus-within > .nav-category, 2268 header .content-nav .nav-section[role="button"][aria-expanded="true"] > .nav-category { 2269 display: block; 2270 width: 100%; 2271 position: absolute; 2272 top: 100%; 2273 left: 0; 2274 } 2275 header .content-nav .nav-section[role="button"]:focus-within > .nav-category.open, 2276 header .content-nav .nav-section[role="button"][aria-expanded="true"] > .nav-category.open { 2277 display: flex; 2278 position: initial; 2279 } 2280 header .content-nav .nav-section[role="button"]:focus-within > .nav-subcategory, 2281 header .content-nav .nav-section[role="button"][aria-expanded="true"] > .nav-subcategory { 2282 display: block; 2283 } 2284 2285 /* Company menu (.content-company-menu-container): SASS ya define position: absolute, solo anulamos display:none */ 2286 header .content-company-menu-container .nav-section[role="button"]:focus-within .nav-category, 2287 header .content-company-menu-container .nav-section[role="button"][aria-expanded="true"] .nav-category { 2288 display: block; 2289 } 2290 2291 @media screen and (max-width: 1199px) { 2292 /* En mobile el submenu se gestiona por JS, no abrir por focus */ 2293 header .content-nav .nav-section[role="button"]:focus-within > .nav-category, 2294 header .content-nav .nav-section[role="button"]:focus-within > .nav-subcategory, 2295 header .content-company-menu-container .nav-section[role="button"]:focus-within .nav-category { 2296 display: none; 2297 } 2298 } 2299 </style> 2300
2300<script> 2301 (function () { 2302 // Cubrir TODOS los .nav-section[role="button"] del header (Shop + Company) 2303 document.querySelectorAll('header .nav-section[role="button"]').forEach(function (section) { 2304 function firstFocusableInSubmenu() { 2305 return section.querySelector('.nav-category a, .nav-category [role="button"], .nav-subcategory a, .nav-subcategory [role="button"]'); 2306 } 2307 // Activar con Enter o Espacio 2308 section.addEventListener('keydown', function (e) { 2309 if (e.target !== section) return; // solo si el wrapper tiene el foco 2310 if (e.key === 'Enter' || e.key === ' ' || e.key === 'Spacebar') { 2311 e.preventDefault(); 2312 var expanded = section.getAttribute('aria-expanded') === 'true'; 2313 section.setAttribute('aria-expanded', expanded ? 'false' : 'true'); 2314 if (!expanded) { 2315 var firstLink = firstFocusableInSubmenu(); 2316 if (firstLink) setTimeout(function () { firstLink.focus(); }, 50); 2317 } 2318 } else if (e.key === 'Escape') { 2319 section.setAttribute('aria-expanded', 'false'); 2320 section.focus(); 2321 } else if (e.key === 'ArrowDown') { 2322 e.preventDefault(); 2323 section.setAttribute('aria-expanded', 'true'); 2324 var firstLink = firstFocusableInSubmenu(); 2325 if (firstLink) firstLink.focus(); 2326 } 2327 }); 2328 // Cerrar al perder el foco completamente 2329 section.addEventListener('focusout', function () { 2330 setTimeout(function () { 2331 if (!section.contains(document.activeElement)) { 2332 section.setAttribute('aria-expanded', 'false'); 2333 } 2334 }, 0); 2335 }); 2336 // Sincronizar aria-expanded al abrir por hover (ratón) 2337 section.addEventListener('mouseenter', function () { 2338 section.setAttribute('aria-expanded', 'true'); 2339 }); 2340 section.addEventListener('mouseleave', function () { 2341 if (!section.contains(document.activeElement)) { 2342 section.setAttribute('aria-expanded', 'false'); 2343 } 2344 }); 2345 // Sincronizar aria-expanded al recibir foco directo con Tab (CSS :focus-within abre visualmente) 2346 // y añadir la clase .active que el JS original solo añade en mouseenter (paridad teclado/ratón) 2347 section.addEventListener('focus', function () { 2348 section.setAttribute('aria-expanded', 'true'); 2349 // Replicar el comportamiento de hover: marcar como activo y desactivar otros hermanos 2350 var siblings = section.parentElement ? section.parentElement.querySelectorAll('.nav-section') : []; 2351 siblings.forEach(function (s) { if (s !== section) s.classList.remove('active'); }); 2352 section.classList.add('active'); 2353 }); 2354 section.addEventListener('focusout', function () { 2355 setTimeout(function () { 2356 if (!section.contains(document.activeElement)) { 2357 section.classList.remove('active'); 2358 } 2359 }, 0); 2360 }); 2361 // Escape global desde dentro del submenu 2362 section.addEventListener('keydown', function (e) { 2363 if (e.key === 'Escape' && e.target !== section) { 2364 e.preventDefault(); 2365 section.setAttribute('aria-expanded', 'false'); 2366 section.focus(); 2367 } 2368 }, true); 2369 }); 2370 })(); 2371 </script>
2371 2372 2373 2374 <div class="content-company-menu-container label-menu" data-label="epicSections"> 2375 2376 2377 2378<div class="nav-section" role="button" tabindex="0" aria-haspopup="true" aria-expanded="false" aria-label="Community menu"> 2379 <!-- TÃtulo de sección --> 2380 <div class="nav-section-title"> 2381 2382 <p>Community</p> 2383 <iconify-icon icon="majesticons:chevron-right" aria-hidden="true"></iconify-icon> 2384 2385 </div> 2386 2387 <!-- Submenú (si tiene hijos) --> 2388 2389 <div class="nav-category"> 2390 <!-- Vista móvil âVer todoâ --> 2391 <div class="nav-category-view-all-mobile"> 2392 <div class="nav-category-view-all-mobile-bg"> 2393 2394 <img src="//epic-cycles.com/cdn/shop/t/42/assets/front-nav2_600x.jpg?v=61702585291409855911760957848" alt="Community" loading="lazy" decoding="async"> 2395 2396 </div> 2397 <p>Community</p> 2398 <p><a href="/pages/community/epic-club">View all</a></p> 2399 </div> 2400 2401 <!-- Contenedor de subcategorÃas --> 2402 <div class="nav-category-container"> 2403 <div class="nav-category-bg"> 2404 2405 <img src="//epic-cycles.com/cdn/shop/t/42/assets/front-nav2_900x.jpg?v=61702585291409855911760957848" alt="Community" loading="lazy" decoding="async"> 2406 2407 </div> 2408 2409 <a href="/pages/community/epic-club" class="nav-category-title"> 2410 <p>Epic Club</p> 2411 </a> 2412 2413 <a href="/pages/community/epic-trip" class="nav-category-title"> 2414 <p>Epic Trip</p> 2415 </a> 2416 2417 <a href="/pages/community/epic-strava" class="nav-category-title"> 2418 <p>Epic Strava</p> 2419 </a> 2420 2421 </div> 2422 </div> 2423 2424</div> 2425 2426<div class="nav-section" role="button" tabindex="0" aria-haspopup="true" aria-expanded="false" aria-label="Stores menu"> 2427 <!-- TÃtulo de sección --> 2428 <div class="nav-section-title"> 2429 2430 <p>Stores</p> 2431 <iconify-icon icon="majesticons:chevron-right" aria-hidden="true"></iconify-icon> 2432 2433 </div> 2434 2435 <!-- Submenú (si tiene hijos) --> 2436 2437 <div class="nav-category"> 2438 <!-- Vista móvil âVer todoâ --> 2439 <div class="nav-category-view-all-mobile"> 2440 <div class="nav-category-view-all-mobile-bg"> 2441 2442 <img src="//epic-cycles.com/cdn/shop/t/42/assets/front-nav2_600x.jpg?v=61702585291409855911760957848" alt="Stores" loading="lazy" decoding="async"> 2443 2444 </div> 2445 <p>Stores</p> 2446 <p><a href="/pages/our-stores">View all</a></p> 2447 </div> 2448 2449 <!-- Contenedor de subcategorÃas --> 2450 <div class="nav-category-container"> 2451 <div class="nav-category-bg"> 2452 2453 <img src="//epic-cycles.com/cdn/shop/t/42/assets/front-nav2_900x.jpg?v=61702585291409855911760957848" alt="Stores" loading="lazy" decoding="async"> 2454 2455 </div> 2456 2457 <a href="/pages/stores/epic-cycles-fort-lauderdale-store" class="nav-category-title"> 2458 <p>Fort Lauderdale</p> 2459 </a> 2460 2461 <a href="/pages/stores/epic-cycles-denver-store" class="nav-category-title"> 2462 <p>Denver</p> 2463 </a> 2464 2465 <a href="/pages/stores/epic-cycles-houston-store" class="nav-category-title"> 2466 <p>Houston Town & Country</p> 2467 </a> 2468 2469 <a href="/pages/stores/houston-west-university" class="nav-category-title"> 2470 <p>Houston West University</p> 2471 </a> 2472 2473 <a href="/pages/stores/epic-cycles-solana-beach-store" class="nav-category-title"> 2474 <p>Solana Beach</p> 2475 </a> 2476 2477 <a href="/pages/stores/epic-cycles-weston" class="nav-category-title"> 2478 <p>Weston</p> 2479 </a> 2480 2481 <a href="/pages/stores/folsom-ca" class="nav-category-title"> 2482 <p>Folsom</p> 2483 </a> 2484 2485 </div> 2486 </div> 2487 2488</div> 2489 2490<div class="nav-section"> 2491 <!-- TÃtulo de sección --> 2492 <div class="nav-section-title"> 2493 2494 <a href="/pages/services"> 2495 <p>Services</p> 2496 </a> 2497 2498 </div> 2499 2500 <!-- Submenú (si tiene hijos) --> 2501 2502</div> 2503 2504<div class="nav-section"> 2505 <!-- TÃtulo de sección --> 2506 <div class="nav-section-title"> 2507 2508 <a href="/pages/custom-bikes"> 2509 <p>Custom Bikes</p> 2510 </a> 2511 2512 </div> 2513 2514 <!-- Submenú (si tiene hijos) --> 2515 2516</div> 2517 2518<div class="nav-section"> 2519 <!-- TÃtulo de sección --> 2520 <div class="nav-section-title"> 2521 2522 <a href="/pages/about"> 2523 <p>About us</p> 2524 </a> 2525 2526 </div> 2527 2528 <!-- Submenú (si tiene hijos) --> 2529 2530</div> 2531 2532<div class="nav-section"> 2533 <!-- TÃtulo de sección --> 2534 <div class="nav-section-title"> 2535 2536 <a href="/pages/blog"> 2537 <p>
2537Blog</p> 2538 </a> 2539 2540 </div> 2541 2542 <!-- Submenú (si tiene hijos) --> 2543 2544</div> 2545 2546<div class="nav-section"> 2547 <!-- TÃtulo de sección --> 2548 <div class="nav-section-title"> 2549 2550 <a href="/pages/financing"> 2551 <p>Financing</p> 2552 </a> 2553 2554 </div> 2555 2556 <!-- Submenú (si tiene hijos) --> 2557 2558</div> 2559 2560 2561 2562 2563<div class="content-company-menu-container-bottom"> 2564 2565 <div class="nav-section"> 2566 <a href="/pages/gift-cards" class="nav-section-title"> 2567 <p>Gift cards</p> 2568 </a> 2569 </div> 2570 2571 <div class="nav-section"> 2572 <a href="/pages/trade-in-program" class="nav-section-title"> 2573 <p>Trade In Program</p> 2574 </a> 2575 </div> 2576 2577 <div class="nav-section"> 2578 <a href="https://epic-cycles.com/apps/epic-return" class="nav-section-title"> 2579 <p>Returns</p> 2580 </a> 2581 </div> 2582 2583 <div class="nav-section"> 2584 <a href="/pages/frequency-questions" class="nav-section-title"> 2585 <p>FAQs</p> 2586 </a> 2587 </div> 2588 2589 <div class="nav-section"> 2590 <a href="/pages/contact" class="nav-section-title"> 2591 <p>Contact</p> 2592 </a> 2593 </div> 2594 2595</div> 2596 2597 </div> 2598
2598<script> 2599 window.ShopifyCustomer = { 2600 isLoggedIn: false, 2601 id: null, 2602 email: null, 2603 accessToken: "" 2604 }; 2605</script>
2605 2606 2607 2608<div class="stores-modal" role="dialog" aria-modal="true" aria-labelledby="stores-modal-title" aria-hidden="true" tabindex="-1"> 2609 <div class="container"> 2610 <div class="stores-modal-title"> 2611 <h2 id="stores-modal-title">Select your store</h2> 2612 <button type="button" class="close-stores-modal" aria-label="Close stores modal" style="background:none;border:0;padding:8px;cursor:pointer;color:inherit;"> 2613 <iconify-icon icon="ei:close" class="menu-close" aria-hidden="true"></iconify-icon> 2614 </button> 2615 </div> 2616 <div class="stores-modal-map"> 2617 <div class="stores-modal-map-iframe"><div id="map" style="width: 100%; height: 100%;" role="img" aria-label="Map showing store locations. A full accessible list is provided below."></div> 2618 2619 </div> 2620 <div class="stores-modal-map-location" id="use-my-location" role="button" tabindex="0" aria-label="Use my current location to find nearest store"> 2621 <iconify-icon icon="tabler:current-location" aria-hidden="true"></iconify-icon> 2622 <p aria-hidden="true">Use my location</p> 2623 </div> 2624 </div> 2625 <div class="stores-modal-items" role="list" aria-label="Available stores"> 2626 2627 <div class="item" role="listitem" data-lat="39.7992626" data-lng="-104.8872448" data-title="Denver"> 2628 <div class="item-info"> 2629 <h3>Denver</h3> 2630 <p>5665 Beeler St, Suite 100, Denver, CO 80238</p> 2631 </div> 2632 <div class="item-ctas"> 2633 <a href="/pages/stores/epic-cycles-denver-store" class="cta" aria-label="View details for Denver"> 2634 <iconify-icon icon="majesticons:eye-line" aria-hidden="true"></iconify-icon> 2635 <p aria-hidden="true">View details</p> 2636 </a> 2637 <div class="cta" role="button" tabindex="0" aria-label="Select Denver as favorite store" aria-pressed="false"> 2638 <iconify-icon icon="mdi:heart" class="icon-heart" aria-hidden="true"></iconify-icon> 2639 <p class="title-store" aria-hidden="true">Select as favorite</p> 2640 </div> 2641 </div> 2642 </div> 2643 2644 <div class="item" role="listitem" data-lat="26.4557896" data-lng="-80.1917393" data-title="Fort Lauderdale "> 2645 <div class="item-info"> 2646 <h3>Fort Lauderdale </h3> 2647 <p>2051 E Oakland Park Blvd., Oakland Park, FL 33306</p> 2648 </div> 2649 <div class="item-ctas"> 2650 <a href="/pages/stores/epic-cycles-fort-lauderdale-store" class="cta" aria-label="View details for Fort Lauderdale "> 2651 <iconify-icon icon="majesticons:eye-line" aria-hidden="true"></iconify-icon> 2652 <p aria-hidden="true">View details</p> 2653 </a> 2654 <div class="cta" role="button" tabindex="0" aria-label="Select Fort Lauderdale as favorite store" aria-pressed="false"> 2655 <iconify-icon icon="mdi:heart" class="icon-heart" aria-hidden="true"></iconify-icon> 2656 <p class="title-store" aria-hidden="true">Select as favorite</p> 2657 </div> 2658 </div> 2659 </div> 2660 2661 <div class="item" role="listitem" data-lat="29.7793754" data-lng="-95.5634044" data-title="Houston Town & Country"> 2662 <div class="item-info"> 2663 <h3>Houston Town & Country</h3> 2664 <p>799 Town & Country Blvd, Suite 143, Houston, TX 77024 - 4589</p> 2665 </div> 2666 <div class="item-ctas"> 2667 <a href="/pages/stores/epic-cycles-houston-store" class="cta" aria-label="View details for Houston Town & Country"> 2668 <iconify-icon icon="majesticons:eye-line" aria-hidden="true"></iconify-icon> 2669 <p aria-hidden="true">View details</p> 2670 </a> 2671 <div class="cta" role="button" tabindex="0" aria-label="Select Houston Town & Country as favorite store" aria-pressed="false"> 2672 <iconify-icon icon="mdi:heart" class="icon-heart" aria-hidden="true"></iconify-icon> 2673 <p class="title-store" aria-hidden="true">Select as favorite</p> 2674 </div> 2675 </div> 2676 </div> 2677 2678 <div class="item" role="listitem" data-lat="32.9925211" data-lng="-117.2746643" data-title="Solana Beach"> 2679 <div class="item-info"> 2680 <h3>Solana Beach</h3> 2681 <p>115 N Hwy 101, Solana Beach, CA 92075-1128</p> 2682 </div> 2683 <div class="item-ctas"> 2684 <a href="/pages/stores/epic-cycles-solana-beach-store" class="cta" aria-label="View details for Solana Beach"> 2685 <iconify-icon icon="majesticons:eye-line" aria-hidden="true"></iconify-icon> 2686 <p aria-hidden="true">View details</p> 2687 </a> 2688 <div class="cta" role="button" tabindex="0" aria-label="Select Solana Beach as favorite store" aria-pressed="false"> 2689 <iconify-icon icon="mdi:heart" class="icon-heart" aria-hidden="true"></iconify-icon> 2690 <p class="title-store" aria-hidden="true">Select as favorite</p> 2691 </div> 2692 </div> 2693 </div> 2694 2695 <div class="item" role="listitem" data-lat="" data-lng="" data-title="Epic Cycles Weston"> 2696 <div class="item-info"> 2697 <h3>Epic Cycles Weston</h3> 2698 <p>1390 SW 160th Ave, Sunrise, FL 33326, United States</p> 2699 </div> 2700 <div class="item-ctas"> 2701 <a href="/pages/stores/epic-cycles-weston" class="cta" aria-label="View details for Epic Cycles Weston"> 2702 <iconify-icon icon="majesticons:eye-line" aria-hidden="true"></iconify-icon> 2703 <p aria-hidden="true">View details</p> 2704 </a> 2705 <div class="cta" role="button" tabindex="0" aria-label="Select Epic Cycles Weston as favorite store" aria-pressed="false"> 2706 <iconify-icon icon="mdi:heart" class="icon-heart" aria-hidden="true"></iconify-icon> 2707 <p class="title-store" aria-hidden="true">Select as favorite</p> 2708 </div> 2709 </div> 2710 </div> 2711 2712 <div class="item" role="listitem" data-lat="26.4557896" data-lng="-80.1917393" data-title="Folsom"> 2713 <div class="item-info"> 2714 <h3>Folsom</h3> 2715 <p>13389 Folsom Blvd #100, Folsom, CA 95630, United States</p> 2716 </div> 2717 <div class="item-ctas"> 2718 <a href="/pages/stores/folsom-ca" class="cta" aria-label="View details for Folsom"> 2719 <iconify-icon icon="majesticons:eye-line" aria-hidden="true"></iconify-icon> 2720 <p aria-hidden="true">View details</p> 2721 </a> 2722 <div class="cta" role="button" tabindex="0" aria-label="Select Folsom as favorite store" aria-pressed="false"> 2723 <iconify-icon icon="mdi:heart" class="icon-heart" aria-hidden="true"></iconify-icon> 2724 <p class="title-store" aria-hidden="true">Select as favorite</p> 2725 </div> 2726 </div> 2727 </div> 2728 2729 <div class="item" role="listitem" data-lat="29.7268823" data-lng="-95.4314087" data-title="Houston West University"> 2730 <div class="item-info"> 2731 <h3>Houston West University</h3> 2732 <p>5182 Buffalo Speedway, Houston</p> 2733 </div> 2734 <div class="item-ctas"> 2735 <a href="/pages/stores/houston-west-university" class="cta" aria-label="View details for Houston West University"> 2736 <iconify-icon icon="majesticons:eye-line" aria-hidden="true"></iconify-icon> 2737 <p aria-hidden="true">View details</p> 2738 </a> 2739 <div class="cta" role="button" tabindex="0" aria-label="Select Houston West University as favorite store" aria-pressed="false"> 2740 <iconify-icon icon="mdi:heart" class="icon-heart" aria-hidden="true"></iconify-icon> 2741 <p class="title-store" aria-hidden="true">Select as favorite</p> 2742 </div> 2743 </div> 2744 </div> 2745 2746 </div> 2747 </div> 2748</div> 2749 2750
2751<script> 2752 2753function deg2rad(deg) { 2754 return deg * (Math.PI / 180); 2755} 2756 2757function haversineDistance(lat1, lon1, lat2, lon2) { 2758 const R = 6371; // Earth radius in km 2759 const dLat = deg2rad(lat2 - lat1); 2760 const dLon = deg2rad(lon2 - lon1); 2761 const a = 2762 Math.sin(dLat / 2) ** 2 + 2763 Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 2764 Math.sin(dLon / 2) ** 2; 2765 const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 2766 return R * c; 2767} 2768 2769function cleanSelection(favoriteStore) { 2770 $('.select-store-menu').text('Select your store'); 2771 var countStores = document.querySelectorAll(".stores-modal-items .item").length; 2772 $('.select-number-store').html('<p class="select-number select-number-store"> <span class="select-number-character">'+countStores+'</span><span class="select-number-bg"></span></p>'); 2773 $( ".select-store-menu" ).each(function( index ) { 2774 $(this).removeClass('select-store-menu-selected'); 2775 }); 2776 document.querySelectorAll(".stores-modal-items .item").forEach(item => { 2777 item.querySelector(".mystore-selected")?.remove(); 2778 2779 const heartIcon = item.querySelector(".icon-heart"); 2780 if (heartIcon) { 2781 heartIcon.setAttribute("icon", "mdi:heart-outline"); 2782 heartIcon.classList.remove("filled"); 2783 } 2784 2785 const titleLabel = item.querySelector(".title-store"); 2786 if (titleLabel) { 2787 titleLabel.textContent = "Select as favorite"; 2788 } 2789 2790 // A11y: resetear estado del botón corazón 2791 const title = item.querySelector("h3")?.innerText?.trim(); 2792 const heartButton = item.querySelector('.cta[role="button"]'); 2793 if (heartButton && title) { 2794 heartButton.setAttribute("aria-pressed", "false"); 2795 heartButton.setAttribute("aria-label", "Select " + title + " as favorite store"); 2796 } 2797 2798 // Marcar como favorita si coincide 2799 if (favoriteStore && title === favoriteStore) { 2800 heartIcon?.setAttribute("icon", "mdi:heart"); 2801 heartIcon?.classList.add("filled"); 2802 2803 if (titleLabel) { 2804 titleLabel.textContent = "Favorite store"; 2805 } 2806 2807 // A11y: marcar el botón corazón como pressed con nuevo aria-label 2808 if (heartButton) { 2809 heartButton.setAttribute("aria-pressed", "true"); 2810 heartButton.setAttribute("aria-label", title + " is your favorite store"); 2811 } 2812 2813 $('.select-store-menu').text(title); 2814 2815 $( ".select-store-menu" ).each(function( index ) { 2816 $(this).addClass('select-store-menu-selected'); 2817 }); 2818 2819 2820 $('.select-number-store').html(''); 2821 const div = document.createElement("div"); 2822 div.className = "mystore-selected"; 2823 div.textContent = "MY STORE"; 2824 item.insertBefore(div, item.firstChild); 2825 } 2826 }); 2827 2828 let storeWrapper = ''; 2829 const storeEl = document.querySelector(".select-favorite-store-wrapper"); 2830 if (storeEl && storeEl.dataset.name) { 2831 storeWrapper = storeEl.dataset.name.trim(); 2832 } 2833 2834 2835 if (storeWrapper == favoriteStore) { 2836 const heartIcon = document.querySelector(".select-favorite-store-wrapper .icon-heart"); 2837 const titleLabel = document.querySelector(".select-favorite-store-wrapper .title-store"); 2838 2839 if (heartIcon) { 2840 heartIcon.setAttribute("icon", "mdi:heart"); 2841 heartIcon.classList.add("filled"); 2842 } 2843 2844 if (titleLabel) { 2845 titleLabel.textContent = "Favorite store"; 2846 } 2847 2848 }else{ 2849 const heartIcon = document.querySelector(".select-favorite-store-wrapper .icon-heart"); 2850 const titleLabel = document.querySelector(".select-favorite-store-wrapper .title-store"); 2851 2852 if (heartIcon) { 2853 heartIcon.setAttribute("icon", "mdi:heart-outline"); 2854 heartIcon.classList.remove("filled"); 2855 } 2856 2857 if (titleLabel) { 2858 titleLabel.textContent = "Select as favorite"; 2859 } 2860 } 2861} 2862 2863function saveFavoriteStore(storeName, storeEl) { 2864 const customer = window.ShopifyCustomer || {}; 2865 2866 if (!storeName || typeof storeName !== "string") { 2867 console.warn("â ï¸ Invalid store name"); 2868 return; 2869 } 2870 2871 cleanSelection(storeName); 2872 // console.log("ð Saving favorite store:", storeName); 2873 2874 // Emit custom event for other components to listen 2875 document.dispatchEvent(new CustomEvent('store:changed', { 2876 detail: { storeName: storeName, element: storeEl } 2877 })); 2878 2879 // Also emit on window for broader compatibility 2880 window.dispatchEvent(new CustomEvent('favoriteStoreUpdated', { 2881 detail: { storeName: storeName, element: storeEl } 2882 })); 2883 2884 if (customer.isLoggedIn && customer.id) { 2885 localStorage.setItem("favorite_store", storeName); 2886 2887 fetch("https://api-epic.bluecell.tech/client/favorite-store", { 2888 method: "POST", 2889 headers: { "Content-Type": "application/json" }, 2890 body: JSON.stringify({ 2891 customer_id: customer.id, 2892 favorite_store: storeName 2893 }) 2894 }) 2895 .then(async res => { 2896 let data = {};
2897 try { 2898 data = await res.json(); 2899 } catch (jsonErr) { 2900 console.error("â Failed to parse response:", jsonErr); 2901 return; 2902 } 2903 2904 if (!res.ok) { 2905 console.error("â Server error:", data.error || res.statusText); 2906 return; 2907 } 2908 2909 if (data.success) { 2910 // console.log("â Favorite store saved:", data.metafield); 2911 // Emit success event 2912 document.dispatchEvent(new CustomEvent('store:saved', { 2913 detail: { storeName: storeName, success: true } 2914 })); 2915 } else { 2916 console.warn("â ï¸ API responded without success:", data.error); 2917 // Emit error event 2918 document.dispatchEvent(new CustomEvent('store:saved', { 2919 detail: { storeName: storeName, success: false, error: data.error } 2920 })); 2921 } 2922 }) 2923 .catch(err => { 2924 console.error("â Network error:", err); 2925 // Emit error event 2926 document.dispatchEvent(new CustomEvent('store:saved', { 2927 detail: { storeName: storeName, success: false, error: err.message } 2928 })); 2929 }); 2930 2931 } else { 2932 try { 2933 localStorage.setItem("favorite_store", storeName); 2934 // console.log("ð¦ Saved to localStorage:", storeName); 2935 // Emit success event 2936 document.dispatchEvent(new CustomEvent('store:saved', { 2937 detail: { storeName: storeName, success: true } 2938 })); 2939 } catch (err) { 2940 console.error("â Failed to save to sessionStorage:", err); 2941 // Emit error event 2942 document.dispatchEvent(new CustomEvent('store:saved', { 2943 detail: { storeName: storeName, success: false, error: err.message } 2944 })); 2945 } 2946 } 2947} 2948 2949async function SearchActualStore() { 2950 const customer = window.ShopifyCustomer || {}; 2951 let favoriteStore = null; 2952 2953 if (customer.isLoggedIn && customer.id) { 2954 try { 2955 const res = await fetch(`https://api-epic.bluecell.tech/client/favorite-store?customer_id=${customer.id}`); 2956 const data = await res.json(); 2957 if (data.favorite_store) { 2958 favoriteStore = data.favorite_store; 2959 } 2960 } catch (e) { 2961 console.error("â Failed to load favorite store:", e); 2962 } 2963 } else { 2964 favoriteStore = localStorage.getItem("favorite_store"); 2965 } 2966 2967 2968 cleanSelection(favoriteStore); 2969 2970 return favoriteStore; 2971} 2972 2973document.addEventListener("DOMContentLoaded", async () => { 2974 SearchActualStore(); 2975 2976 // Click on a store 2977 document.querySelectorAll(".stores-modal-items .item").forEach(itemEl => { 2978 itemEl.addEventListener("click", (e) => { 2979 if (e.target.closest("a")) return; 2980 2981 const storeName = itemEl.querySelector("h3")?.innerText?.trim(); 2982 if (storeName) { 2983 saveFavoriteStore(storeName, itemEl); 2984 2985 // Auto-close modal after selection 2986 setTimeout(() => { 2987 document.querySelector('.stores-modal')?.classList.remove('active'); 2988 }, 500); 2989 } 2990 }); 2991 }); 2992 2993 // Use my location 2994 document.getElementById("use-my-location")?.addEventListener("click", () => { 2995 if (!navigator.geolocation) { 2996 alert("Your browser does not support geolocation."); 2997 return; 2998 } 2999 3000 navigator.geolocation.getCurrentPosition(success, error); 3001 3002 function success(position) { 3003 const userLat = position.coords.latitude; 3004 const userLng = position.coords.longitude; 3005 3006 let closestStore = null; 3007 let closestDistance = Infinity; 3008 3009 document.querySelectorAll(".stores-modal-items .item").forEach(storeEl => { 3010 const storeLat = parseFloat(storeEl.dataset.lat); 3011 const storeLng = parseFloat(storeEl.dataset.lng); 3012 if (isNaN(storeLat) || isNaN(storeLng)) return; 3013 3014 const distance = haversineDistance(userLat, userLng, storeLat, storeLng); 3015 storeEl.dataset.distance = distance.toFixed(2); 3016 3017 if (distance < closestDistance) { 3018 closestDistance = distance; 3019 closestStore = storeEl; 3020 } 3021 }); 3022 3023 if (closestStore) { 3024 document.querySelectorAll(".highlighted-store").forEach(el => { 3025 el.classList.remove("highlighted-store"); 3026 }); 3027 3028 closestStore.scrollIntoView({ behavior: "smooth", block: "center" }); 3029 closestStore.classList.add("highlighted-store"); 3030 3031 const title = closestStore.querySelector("h3")?.innerText || "Untitled"; 3032 saveFavoriteStore(title, closestStore); 3033 // console.log(`ð Approx. distance: ${closestDistance.toFixed(2)} km`); 3034 } else { 3035 alert("No store with valid coordinates found."); 3036 } 3037 } 3038 3039 function error(err) { 3040 console.error("Geolocation error:", err); 3041 alert("We couldn't get your location."); 3042 } 3043 }); 3044}); 3045 3046// â Function to update pickup availability reactively 3047// Delega en la implementacion de assets/pickup-availability.js, que es la unica que 3048// normaliza el nombre de la tienda y sabe pintar el aviso cuando no hay recogida. 3049// Antes habia dos copias de esta logica compitiendo por el mismo evento. 3050function updatePickupAvailability(newStoreNickname) { 3051 if (typeof window.updatePickupAvailabilityDisplay === 'function') { 3052 window.updatePickupAvailabilityDisplay(newStoreNickname); 3053 } 3054} 3055 3056// â Listen for store change events to update pickup availability 3057document.addEventListener('store:changed', function(event) { 3058 const storeName = event.detail.storeName; 3059 if (storeName) { 3060 updatePickupAvailability(storeName); 3061 } 3062}); 3063 3064// â Expose globally for access in other scripts 3065window.saveFavoriteStore = saveFavoriteStore; 3066window.cleanSelection = cleanSelection;
3067window.SearchActualStore = SearchActualStore; 3068window.updatePickupAvailability = updatePickupAvailability; 3069 3070 3071 function waitForGoogleMaps(callback) { 3072 if (window.google && google.maps) { 3073 callback(); 3074 } else { 3075 setTimeout(() => waitForGoogleMaps(callback), 100); 3076 } 3077 } 3078 3079 3080 window.initEpicMapHeader = function () { 3081 3082 const stores = [ 3083 3084 { 3085 name: "Denver", 3086 lat: parseFloat("39.7992626"), 3087 lng: parseFloat("-104.8872448"), 3088 address: "5665 Beeler St, Suite 100, Denver, CO 80238", 3089 link: "\/pages\/stores\/epic-cycles-denver-store" 3090 }, 3091 3092 { 3093 name: "Fort Lauderdale ", 3094 lat: parseFloat("26.4557896"), 3095 lng: parseFloat("-80.1917393"), 3096 address: "2051 E Oakland Park Blvd., Oakland Park, FL 33306", 3097 link: "\/pages\/stores\/epic-cycles-fort-lauderdale-store" 3098 }, 3099 3100 { 3101 name: "Houston Town \u0026 Country", 3102 lat: parseFloat("29.7793754"), 3103 lng: parseFloat("-95.5634044"), 3104 address: "799 Town \u0026 Country Blvd, Suite 143, Houston, TX 77024 - 4589", 3105 link: "\/pages\/stores\/epic-cycles-houston-store" 3106 }, 3107 3108 { 3109 name: "Solana Beach", 3110 lat: parseFloat("32.9925211"), 3111 lng: parseFloat("-117.2746643"), 3112 address: "115 N Hwy 101, Solana Beach, CA 92075-1128", 3113 link: "\/pages\/stores\/epic-cycles-solana-beach-store" 3114 }, 3115 3116 { 3117 name: "Epic Cycles Weston", 3118 lat: parseFloat(null), 3119 lng: parseFloat(null), 3120 address: "1390 SW 160th Ave, Sunrise, FL 33326, United States", 3121 link: "\/pages\/stores\/epic-cycles-weston" 3122 }, 3123 3124 { 3125 name: "Folsom", 3126 lat: parseFloat("26.4557896"), 3127 lng: parseFloat("-80.1917393"), 3128 address: "13389 Folsom Blvd #100, Folsom, CA 95630, United States", 3129 link: "\/pages\/stores\/folsom-ca" 3130 }, 3131 3132 { 3133 name: "Houston West University", 3134 lat: parseFloat("29.7268823"), 3135 lng: parseFloat("-95.4314087"), 3136 address: "5182 Buffalo Speedway, Houston", 3137 link: "\/pages\/stores\/houston-west-university" 3138 } 3139 3140 ]; 3141 3142 3143 3144 const centerUSA = { lat: 39.8283, lng: -98.5795 }; 3145 const map = new google.maps.Map(document.getElementById("map"), { 3146 zoom: 4, 3147 center: centerUSA, 3148 mapTypeId: 'roadmap', 3149 }); 3150 3151 const iconUrl = "//epic-cycles.com/cdn/shop/t/42/assets/icon-map.png?v=183219013167956906931760957018"; // Cambia si tienes un marcador personalizado 3152 const infoWindow = new google.maps.InfoWindow(); 3153 const markers = []; 3154 3155 stores.forEach((store, index) => { 3156 const position = { lat: store.lat, lng: store.lng }; 3157 const marker = new google.maps.Marker({ 3158 map, 3159 position, 3160 title: store.name, 3161 icon: iconUrl || undefined, 3162 }); 3163 3164 markers[index] = marker; 3165 3166 marker.addListener("click", () => { 3167 infoWindow.setContent(` 3168 <div class="map-popup"> 3169 <strong>${store.name}</strong><br/> 3170 <span>${store.address}</span><br/> 3171 <a href="${store.link}" target="_blank" class="popup-button">HOW TO GET THERE</a> 3172 </div> 3173 `); 3174 infoWindow.open(map, marker); 3175 }); 3176 3177 // Evento para mover el mapa al hacer clic en un enlace 3178 document.querySelectorAll(".store-link")[index]?.addEventListener("click", () => { 3179 map.setZoom(14); 3180 map.setCenter(position); 3181 google.maps.event.trigger(marker, 'click'); 3182 }); 3183 }); 3184 }; 3185 3186 waitForGoogleMaps(() => { 3187 if (document.getElementById("map")) { 3188 3189 initEpicMapHeader(); 3190 } 3191 3192}); 3193 3194</script>
3194 3195 3196 3197 </div> 3198 <div class="row search"> 3199 3200 3201<details-modal class="header__search"> 3202 <details open="true"> 3203 <summary 3204 class="header__icon header__icon--search header__icon--summary link focus-inset modal__toggle" 3205 aria-haspopup="dialog" 3206 aria-label="Search product" 3207 > 3208 </summary> 3209 <div 3210 class="search-modal modal__content gradient" 3211 role="dialog" 3212 aria-modal="true" 3213 aria-label="Search product" 3214 > 3215 <div class="modal-overlay"></div> 3216 <div 3217 class="search-modal__content search-modal__content-bottom" 3218 tabindex="-1" 3219 ><predictive-search class="search-modal__form" data-loading-text="Loading..."><form action="/search" method="get" role="search" class="search search-modal__form"> 3220 <div class="field"> 3221 <input 3222 class="search__input field__input" 3223 id="Search-In-Modal-2" 3224 type="search" 3225 name="q" 3226 value="" 3227 placeholder="Search product"role="combobox" 3228 aria-expanded="false" 3229 aria-owns="predictive-search-results" 3230 aria-controls="predictive-search-results" 3231 aria-haspopup="listbox" 3232 aria-autocomplete="list" 3233 autocorrect="off" 3234 autocomplete="off" 3235 autocapitalize="off" 3236 spellcheck="false"> 3237 <label class="field__label" for="Search-In-Modal-2">Search product</label> 3238 <input type="hidden" name="options[prefix]" value="last"> 3239 <button 3240 type="reset" 3241 class="reset__button field__button hidden" 3242 aria-label="Clear search term" 3243 > 3244 <span class="svg-wrapper" aria-hidden="true"> 3245 <iconify-icon icon="ei:close" aria-hidden="true"></iconify-icon> 3246 </span> 3247 </button> 3248 <button class="search__button field__button" aria-label="Search product"> 3249 <span class="svg-wrapper" aria-hidden="true"> 3250 <i class="fa-regular fa-magnifying-glass" aria-hidden="true"></i> 3251 </span> 3252 </button> 3253 </div><div class="predictive-search predictive-search--header" tabindex="-1" data-predictive-search> 3254 3255<div class="predictive-search__loading-state"> 3256 <svg xmlns="http://www.w3.org/2000/svg" class="spinner" viewBox="0 0 66 66"><circle stroke-width="6" cx="33" cy="33" r="30" fill="none" class="path"/></svg> 3257 3258</div> 3259</div> 3260 3261 <span class="predictive-search-status visually-hidden hidden" role="status" aria-hidden="true"></span></form></predictive-search><button 3262 type="button" 3263 class="search-modal__close-button modal__close-button link link--text focus-inset" 3264 aria-label="Close" 3265 > 3266 <span class="svg-wrapper" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-close" viewBox="0 0 18 17"><path fill="currentColor" d="M.865 15.978a.5.5 0 0 0 .707.707l7.433-7.431 7.579 7.282a.501.501 0 0 0 .846-.37.5.5 0 0 0-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 1 0-.707-.708L8.991 7.853 1.413.573a.5.5 0 1 0-.693.72l7.563 7.268z"/></svg> 3267</span> 3268 </button> 3269 </div> 3270 </div> 3271 </details> 3272</details-modal> 3273 3274 </div> 3275 3276 3277</header>
3277<script> 3278 (function () { 3279 function bindKeyboardClick(selector) { 3280 document.querySelectorAll(selector).forEach(function (el) { 3281 el.addEventListener('keydown', function (e) { 3282 if (e.target !== el) return; 3283 if (e.key === 'Enter' || e.key === ' ' || e.key === 'Spacebar') { 3284 e.preventDefault(); 3285 el.click(); 3286 } 3287 }); 3288 }); 3289 } 3290 // Hacer clickeables con Enter/Espacio todos los div con role=button del header 3291 bindKeyboardClick('header .content-menu-mobile[role="button"]'); 3292 bindKeyboardClick('header .content-company-menu-title[role="button"]'); 3293 bindKeyboardClick('header .content-labels .label[role="button"]'); 3294 bindKeyboardClick('header .content-store > div[role="button"]'); 3295 3296 // Sincronizar aria-expanded del botón hamburguesa con la clase del header 3297 var hamburger = document.querySelector('header .content-menu-mobile[role="button"]'); 3298 if (hamburger) { 3299 var headerEl = document.querySelector('header'); 3300 var observer = new MutationObserver(function () { 3301 hamburger.setAttribute('aria-expanded', headerEl.classList.contains('menu-mobile-opened') ? 'true' : 'false'); 3302 }); 3303 observer.observe(headerEl, { attributes: true, attributeFilter: ['class'] }); 3304 } 3305 3306 // Sincronizar aria-pressed de los labels Shop / Epic sections cuando se hace click 3307 document.querySelectorAll('header .content-labels .label[role="button"]').forEach(function (label) { 3308 label.addEventListener('click', function () { 3309 document.querySelectorAll('header .content-labels .label[role="button"]').forEach(function (other) { 3310 other.setAttribute('aria-pressed', other === label ? 'true' : 'false'); 3311 }); 3312 }); 3313 }); 3314 3315 // A11y: Company menu (Menu desktop) â abrir/cerrar con teclado y mover foco 3316 var companyTitle = document.querySelector('header .content-company-menu-title[role="button"]'); 3317 var companyContainer = document.querySelector('header .content-company-menu-container'); 3318 if (companyTitle && companyContainer) { 3319 function openCompanyMenu() { 3320 companyTitle.parentElement.classList.add('open'); 3321 companyContainer.classList.add('open'); 3322 companyTitle.setAttribute('aria-expanded', 'true'); 3323 } 3324 function closeCompanyMenu() { 3325 companyTitle.parentElement.classList.remove('open'); 3326 companyContainer.classList.remove('open'); 3327 companyTitle.setAttribute('aria-expanded', 'false'); 3328 } 3329 // Enter/Espacio: abre y mueve foco al primer link 3330 companyTitle.addEventListener('keydown', function (e) { 3331 if (e.target !== companyTitle) return; 3332 if (e.key === 'Enter' || e.key === ' ' || e.key === 'Spacebar') { 3333 e.preventDefault(); 3334 var isOpen = companyTitle.getAttribute('aria-expanded') === 'true'; 3335 if (isOpen) { 3336 closeCompanyMenu(); 3337 } else { 3338 openCompanyMenu(); 3339 var firstLink = companyContainer.querySelector('a, [role="button"]'); 3340 if (firstLink) setTimeout(function () { firstLink.focus(); }, 50); 3341 } 3342 } else if (e.key === 'ArrowDown') { 3343 e.preventDefault(); 3344 openCompanyMenu(); 3345 var firstLink = companyContainer.querySelector('a, [role="button"]'); 3346 if (firstLink) firstLink.focus(); 3347 } else if (e.key === 'Escape') { 3348 closeCompanyMenu(); 3349 } 3350 }); 3351 // Esc dentro del container: cerrar y devolver foco al tÃtulo 3352 companyContainer.addEventListener('keydown', function (e) { 3353 if (e.key === 'Escape') { 3354 closeCompanyMenu(); 3355 companyTitle.focus(); 3356 } 3357 }); 3358 // Cerrar al perder foco fuera del container 3359 companyContainer.addEventListener('focusout', function () { 3360 setTimeout(function () { 3361 if (!companyContainer.contains(document.activeElement) && document.activeElement !== companyTitle) { 3362 closeCompanyMenu(); 3363 } 3364 }, 0); 3365 }); 3366 // Sincronizar aria-expanded con hover (mouseenter/leave del JS existente) 3367 var observer = new MutationObserver(function () { 3368 var hasOpen = companyContainer.classList.contains('open'); 3369 companyTitle.setAttribute('aria-expanded', hasOpen ? 'true' : 'false'); 3370 }); 3371 observer.observe(companyContainer, { attributes: true, attributeFilter: ['class'] }); 3372 } 3373 })(); 3374</script>
3374 3375 3376</div> 3377<!-- END sections: header-group --> 3378 3379 3380 3381 <main id="content" class="content-for-layout focus-none template-page-blog" role="main" tabindex="-1"> 3382 <section id="shopify-section-template--19720076460079__custom_featured_article_xtiVHz" class="shopify-section section"><section class="featured-blog main-container"> 3383 <h1>Blog</h1> 3384 3385 3386 3387 <div class="content-img-text"> 3388 <div class="content-img"> 3389 3390 <img src="//epic-cycles.com/cdn/shop/articles/harookz-45-5964.jpg?v=1773418494&width=800" alt="Smart Technology in Bicycles: Revolutionizing the Ride"> 3391 3392 </div> 3393 <div class="content-text"> 3394 3395 <h2>Smart Technology in Bicycles: Revolutionizing the Ride</h2> 3396 <a class="btn" href="/blogs/epic/smart-technology-in-bicycles-revolutionizing-the-ride">Read More</a> 3397 </div> 3398 </div> 3399 3400</section> 3401 3402 3403</section><section id="shopify-section-template--19720076460079__featured_blog_Hnf83f" class="shopify-section"><section class="featured-blog content-anchors" id="tags"> 3404 <div class="btn-mobile click-to-open-popup" data-popup="featured-blog-filters"> 3405 <p>Categories</p> 3406 <iconify-icon icon="mynaui:filter"></iconify-icon> 3407 </div> 3408 3409 <a class="filter-link active" href="?tag=">View all</a><a class="filter-link" href="?tag=benefits-of-electric-bikes#tags">Benefits of electric bikes</a><a class="filter-link" href="?tag=bikerace#tags">bikerace</a><a class="filter-link" href="?tag=chris-froome#tags">chris froome</a><a class="filter-link" href="?tag=city-urban-e-bikes#tags">City/Urban e-bikes</a><a class="filter-link" href="?tag=cycling#tags">cycling</a><p class="more click-to-open-popup" data-popup="featured-blog-filters">+ More</p></section><section class="featured-blog content-news"> 3410 <div class="box-news" data-blog-handle="epic"> 3411 3412 <!-- Fila 1: 3 artÃculos --> 3413 3414 <a href="/blogs/epic/pinarello-dogma-x-with-dura-ace-vs-sram-red-axs-which-build-should-you-actually-ride" class="news "> 3415 <div class="content-img"> 3416 3417 <img src="//epic-cycles.com/cdn/shop/articles/Email_Dogma_X-01.jpg?v=1776454773" alt="Pinarello Dogma X with Dura-Ace vs. SRAM RED AXS: Which Build Should You Actually Ride?"> 3418 3419 </div> 3420 <div class="content-text"> 3421 <h6></h6> 3422 <p>Pinarello Dogma X with Dura-Ace vs. SRAM RED AXS: Which Build Should You Actually Ride?</p> 3423 </div> 3424</a> 3425 3426 3427 <a href="/blogs/epic/electric-mountain-bike-maintenance-guide-turbo-levo-tips-epic-cycles" class="news "> 3428 <div class="content-img"> 3429 3430 <img src="//epic-cycles.com/cdn/shop/articles/harookz-17-3904.jpg?v=1773418185" alt="Electric Mountain Bike Maintenance Guide | Turbo Levo Tips | Epic Cycles"> 3431 3432 </div> 3433 <div class="content-text"> 3434 <h6></h6> 3435 <p>Electric Mountain Bike Maintenance Guide | Turbo Levo Tips | Epic Cycles</p> 3436 </div> 3437</a> 3438 3439 3440 <a href="/blogs/epic/welcome-spring-time-to-upgrade-and-ride-epic" class="news "> 3441 <div class="content-img"> 3442 3443 <img src="//epic-cycles.com/cdn/shop/articles/Banner-Web_SpringSale_507635b5-f872-42b8-88c3-92bfc38f843c.jpg?v=1761731817" alt="Welcome Spring! Time to UPGRADE and RIDE EPIC!"> 3444 3445 </div> 3446 <div class="content-text"> 3447 <h6>Spring Sale</h6> 3448 <p>Welcome Spring! Time to UPGRADE and RIDE EPIC!</p> 3449 </div> 3450</a> 3451 3452 3453 3454 <!-- Fila 2: 3 artÃculos --> 3455 3456 <a href="/blogs/epic/smart-technology-in-bicycles-revolutionizing-the-ride" class="news "> 3457 <div class="content-img"> 3458 3459 <img src="//epic-cycles.com/cdn/shop/articles/harookz-45-5964.jpg?v=1773418494" alt="Smart Technology in Bicycles: Revolutionizing the Ride"> 3460 3461 </div> 3462 <div class="content-text"> 3463 <h6></h6> 3464 <p>Smart Technology in Bicycles: Revolutionizing the Ride</p> 3465 </div> 3466</a> 3467 3468 3469 <a href="/blogs/epic/essential-safety-tips-every-cyclist-should-know-beyond-the-basics" class="news "> 3470 <div class="content-img"> 3471 3472 <img src="//epic-cycles.com/cdn/shop/articles/AQ9I9322.jpg?v=1725888993" alt="Essential Safety Tips Every Cyclist Should Know: Beyond the Basics"> 3473 3474 </div> 3475 <div class="content-text"> 3476 <h6></h6> 3477 <p>Essential Safety Tips Every Cyclist Should Know: Beyond the Basics</p> 3478 </div> 3479</a> 3480 3481 3482 <a href="/blogs/epic/design-your-dream-bike-custom-builds" class="news "> 3483 <div class="content-img"> 3484 3485 <img src="//epic-cycles.com/cdn/shop/articles/PXL_20240414_220841606.PORTRAIT.ORIGINAL.jpg?v=1723823364" alt="Design Your Dream Bike: Custom Builds"> 3486 3487 </div> 3488 <div class="content-text"> 3489 <h6></h6> 3490 <p>Design Your Dream Bike: Custom Builds</p> 3491 </div> 3492</a> 3493 3494 3495 3496 <!-- Fila 3: destacado (1 artÃculo) --> 3497 3498 3499 <a href="/blogs/epic/exploring-different-types-of-mountains-bikes" class="news w100"> 3500 <div class="content-img jola"> 3501 3502 <img src="//epic-cycles.com/cdn/shop/articles/013_MTB-3531__Hero-Video_2800x1620_1.jpg?v=1720454297&width=800" alt="Exploring Different Types of Mountains Bikes"> 3503 3504 </div> 3505 <div class="content-text"> 3506 <h6></h6> 3507 <p>Exploring Different Types of Mountains Bikes</p> 3508 </div> 3509</a> 3510 3511 3512 3513 <!-- Fila 4: últimos 2 --> 3514
3515 <a href="/blogs/epic/everything-you-need-to-know-about-endurance-bikes" class="news w50"> 3516 <div class="content-img"> 3517 3518 <img src="//epic-cycles.com/cdn/shop/articles/Dogma_x.jpg?v=1718299560" alt="Everything You Need to Know About Endurance Bikes"> 3519 3520 </div> 3521 <div class="content-text"> 3522 <h6>cycling, pinarello, pinarello dogma</h6> 3523 <p>Everything You Need to Know About Endurance Bikes</p> 3524 </div> 3525</a> 3526 3527 3528 <a href="/blogs/epic/a-beginners-guide-to-the-2024-giro-ditalia-what-to-expect" class="news w50"> 3529 <div class="content-img"> 3530 3531 <img src="//epic-cycles.com/cdn/shop/articles/giro_f.jpg?v=1715004607" alt="A Beginner's Guide to the 2024 Giro d'Italia: What to Expect"> 3532 3533 </div> 3534 <div class="content-text"> 3535 <h6></h6> 3536 <p>A Beginner's Guide to the 2024 Giro d'Italia: What to Expect</p> 3537 </div> 3538</a> 3539 3540 3541 </div> 3542 3543 3544 <div class="content-btn" id="load-more-wrapper"> 3545 <button class="btn ghost ajaxinate-trigger" id="load-more" data-page="2" data-tag="">See more</button> 3546 </div> 3547 3548 3549 3550 3551</section> 3552 3553 3554 3555<section class="featured-blog content-highlights"> 3556 <h2>Highlights</h2> 3557 3558 <div class="content-slider slider-highlights slider-white"> 3559 3560 3561 <a href="/blogs/epic/pinarello-dogma-x-with-dura-ace-vs-sram-red-axs-which-build-should-you-actually-ride" class="slide"> 3562 <div class="slide-box"> 3563 <div class="content-img"> 3564 3565 <img src="//epic-cycles.com/cdn/shop/articles/Email_Dogma_X-01.jpg?v=1776454773&width=800" alt="Pinarello Dogma X with Dura-Ace vs. SRAM RED AXS: Which Build Should You Actually Ride?"> 3566 3567 </div> 3568 <div class="content-text"> 3569 <h6></h6> 3570 <p>Pinarello Dogma X with Dura-Ace vs. SRAM RED AXS: Which Build Should You Actually Ride?</p> 3571 </div> 3572 </div> 3573 </a> 3574 3575 <a href="/blogs/epic/electric-mountain-bike-maintenance-guide-turbo-levo-tips-epic-cycles" class="slide"> 3576 <div class="slide-box"> 3577 <div class="content-img"> 3578 3579 <img src="//epic-cycles.com/cdn/shop/articles/harookz-17-3904.jpg?v=1773418185&width=800" alt="Electric Mountain Bike Maintenance Guide | Turbo Levo Tips | Epic Cycles"> 3580 3581 </div> 3582 <div class="content-text"> 3583 <h6></h6> 3584 <p>Electric Mountain Bike Maintenance Guide | Turbo Levo Tips | Epic Cycles</p> 3585 </div> 3586 </div> 3587 </a> 3588 3589 <a href="/blogs/epic/welcome-spring-time-to-upgrade-and-ride-epic" class="slide"> 3590 <div class="slide-box"> 3591 <div class="content-img"> 3592 3593 <img src="//epic-cycles.com/cdn/shop/articles/Banner-Web_SpringSale_507635b5-f872-42b8-88c3-92bfc38f843c.jpg?v=1761731817&width=800" alt="Welcome Spring! Time to UPGRADE and RIDE EPIC!"> 3594 3595 </div> 3596 <div class="content-text"> 3597 <h6>Spring Sale</h6> 3598 <p>Welcome Spring! Time to UPGRADE and RIDE EPIC!</p> 3599 </div> 3600 </div> 3601 </a> 3602 3603 <a href="/blogs/epic/smart-technology-in-bicycles-revolutionizing-the-ride" class="slide"> 3604 <div class="slide-box"> 3605 <div class="content-img"> 3606 3607 <img src="//epic-cycles.com/cdn/shop/articles/harookz-45-5964.jpg?v=1773418494&width=800" alt="Smart Technology in Bicycles: Revolutionizing the Ride"> 3608 3609 </div> 3610 <div class="content-text"> 3611 <h6></h6> 3612 <p>Smart Technology in Bicycles: Revolutionizing the Ride</p> 3613 </div> 3614 </div> 3615 </a> 3616 3617 <a href="/blogs/epic/essential-safety-tips-every-cyclist-should-know-beyond-the-basics" class="slide"> 3618 <div class="slide-box"> 3619 <div class="content-img"> 3620 3621 <img src="//epic-cycles.com/cdn/shop/articles/AQ9I9322.jpg?v=1725888993&width=800" alt="Essential Safety Tips Every Cyclist Should Know: Beyond the Basics"> 3622 3623 </div> 3624 <div class="content-text"> 3625 <h6></h6> 3626 <p>Essential Safety Tips Every Cyclist Should Know: Beyond the Basics</p> 3627 </div> 3628 </div> 3629 </a> 3630 3631 </div> 3632</section> 3633 3634<section class="popup-styles featured-blog-filters">
3635 <div class="container"> 3636 <div class="content-title"> 3637 <div> 3638 <iconify-icon icon="mynaui:filter"></iconify-icon> 3639 <h4>Filters</h4> 3640 </div> 3641 <div class="content-close"> 3642 <i class="fa-solid fa-xmark close-this-section"></i> 3643 </div> 3644 </div> 3645 3646 <div class="content-items"> 3647 <p><a class="filter-link" href="?tag=">View all</a></p><p><a class="filter-link" href="?tag=benefits-of-electric-bikes#tags">Benefits of electric bikes</a></p><p><a class="filter-link" href="?tag=bikerace#tags">bikerace</a></p><p><a class="filter-link" href="?tag=chris-froome#tags">chris froome</a></p><p><a class="filter-link" href="?tag=city-urban-e-bikes#tags">City/Urban e-bikes</a></p><p><a class="filter-link" href="?tag=cycling#tags">cycling</a></p><p><a class="filter-link" href="?tag=dogma-f1#tags">dogma f1</a></p><p><a class="filter-link" href="?tag=dogma-f12#tags">dogma f12</a></p><p><a class="filter-link" href="?tag=folding-e-bikes#tags">Folding e-bikes</a></p><p><a class="filter-link" href="?tag=giovanni-pinarello#tags">Giovanni Pinarello</a></p><p><a class="filter-link" href="?tag=ineos-grenadiers#tags">INEOS Grenadiers</a></p><p><a class="filter-link" href="?tag=nytro-road-e7-ultegra-di2#tags">Nytro Road E7 Ultegra Di2</a></p><p><a class="filter-link" href="?tag=pinarello#tags">pinarello</a></p><p><a class="filter-link" href="?tag=pinarello-dogma#tags">pinarello dogma</a></p><p><a class="filter-link" href="?tag=road#tags">Road</a></p><p><a class="filter-link" href="?tag=road-e-bikes#tags">Road e-bikes</a></p><p><a class="filter-link" href="?tag=spring-sale#tags">Spring Sale</a></p><p><a class="filter-link" href="?tag=tour-de-france#tags">tour de france</a></p><p><a class="filter-link" href="?tag=winter#tags">winter</a></p></div> 3648 </div> 3649</section> 3650 3651 3652 3653 3654</section> 3655 </main> 3656 3657 <!-- BEGIN sections: footer-group --> 3658<div id="shopify-section-sections--19720077705263__footer" class="shopify-section shopify-section-group-footer-group"> 3659<link href="//epic-cycles.com/cdn/shop/t/42/assets/section-footer.css?v=60318643098753476351760957019" rel="stylesheet" type="text/css" media="all" /> 3660<link href="//epic-cycles.com/cdn/shop/t/42/assets/component-newsletter.css?v=4727253280200485261760957018" rel="stylesheet" type="text/css" media="all" /> 3661<link href="//epic-cycles.com/cdn/shop/t/42/assets/component-list-menu.css?v=151968516119678728991760957018" rel="stylesheet" type="text/css" media="all" /> 3662<link href="//epic-cycles.com/cdn/shop/t/42/assets/component-list-payment.css?v=69253961410771838501760957017" rel="stylesheet" type="text/css" media="all" /> 3663<link href="//epic-cycles.com/cdn/shop/t/42/assets/component-list-social.css?v=35792976012981934991760957017" rel="stylesheet" type="text/css" media="all" /> 3664<style data-shopify>.footer { 3665 margin-top: 0px; 3666 } 3667 3668 .section-sections--19720077705263__footer-padding { 3669 padding-top: 27px; 3670 padding-bottom: 27px; 3671 } 3672 3673 @media screen and (min-width: 750px) { 3674 .footer { 3675 margin-top: 0px; 3676 } 3677 3678 .section-sections--19720077705263__footer-padding { 3679 padding-top: 36px; 3680 padding-bottom: 36px; 3681 } 3682 }</style><footer class="hidden footer color-scheme-1 gradient section-sections--19720077705263__footer-padding" aria-hidden="true"><div class="footer__content-top page-width"><div 3683 class="footer__blocks-wrapper grid grid--1-col grid--2-col grid--4-col-tablet grid--3-col-tablet scroll-trigger animate--slide-in" 3684 3685 data-cascade 3686 3687 ><div 3688 class="footer-block grid__item scroll-trigger animate--slide-in" 3689 3690 3691 data-cascade 3692 style="--animation-order: 1;" 3693 3694 ></div><div 3695 class="footer-block grid__item scroll-trigger animate--slide-in" 3696 3697 3698 data-cascade 3699 style="--animation-order: 2;" 3700 3701 ></div><div 3702 class="footer-block grid__item scroll-trigger animate--slide-in" 3703 3704 3705 data-cascade 3706 style="--animation-order: 3;" 3707 3708 ></div><div
3709 class="footer-block grid__item scroll-trigger animate--slide-in" 3710 3711 3712 data-cascade 3713 style="--animation-order: 4;" 3714 3715 ></div><div 3716 class="footer-block grid__item scroll-trigger animate--slide-in" 3717 3718 3719 data-cascade 3720 style="--animation-order: 5;" 3721 3722 ></div></div><div 3723 class="footer-block--newsletter scroll-trigger animate--slide-in" 3724 3725 data-cascade 3726 3727 ><div class="footer-block__newsletter"><h2 class="footer-block__heading inline-richtext">Subscribe to our emails</h2><form method="post" action="/contact#ContactFooter" id="ContactFooter" accept-charset="UTF-8" class="footer__newsletter newsletter-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="contact[tags]" value="newsletter"> 3728 <div class="newsletter-form__field-wrapper"> 3729 <div class="field"> 3730 <input 3731 id="NewsletterForm--sections--19720077705263__footer" 3732 type="email" 3733 name="contact[email]" 3734 class="field__input" 3735 value="" 3736 aria-required="true" 3737 autocorrect="off" 3738 autocapitalize="off" 3739 autocomplete="email" 3740 3741 placeholder="Enter your email" 3742 required 3743 > 3744 3745 <button 3746 type="submit" 3747 class="newsletter-form__button field__button" 3748 name="commit" 3749 id="Subscribe" 3750 aria-label="Subscribe" 3751 > 3752 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
3752ox="0 0 14 10"><path fill="currentColor" fill-rule="evenodd" d="M8.537.808a.5.5 0 0 1 .817-.162l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 1 1-.708-.708L11.793 5.5H1a.5.5 0 0 1 0-1h10.793L8.646 1.354a.5.5 0 0 1-.109-.546" clip-rule="evenodd"/></svg> 3753</span> 3754 </button> 3755 </div></div></form></div> 3756 3757<div class="content-rrss footer__list-social"> 3758 3759 <a href="https://www.instagram.com/epic.cycles/?hl=en" target="_blank" rel="noopener" aria-label="Instagram (opens in a new tab)"> 3760 <iconify-icon icon="iconoir:instagram" aria-hidden="true"></iconify-icon> 3761 </a> 3762 3763 3764 <a href="https://www.facebook.com/Epic.Cycles1/" target="_blank" rel="noopener" aria-label="Facebook (opens in a new tab)"> 3765 <iconify-icon icon="basil:facebook-solid" aria-hidden="true"></iconify-icon> 3766 </a> 3767 3768 3769 <a href="https://www.tiktok.com/@epic.cycles" target="_blank" rel="noopener" aria-label="TikTok (opens in a new tab)"> 3770 <iconify-icon icon="ic:baseline-tiktok" aria-hidden="true"></iconify-icon> 3771 </a> 3772 3773 3774 <a href="https://www.youtube.com/@Epic-Cycles" target="_blank" rel="noopener" aria-label="YouTube (opens in a new tab)"> 3775 <iconify-icon icon="qlementine-icons:youtube-16" aria-hidden="true"></iconify-icon> 3776 </a> 3777 3778 3779 3780 3781 3782 3783</div> 3784</div> 3785 </div><div 3786 class="footer__content-bottom scroll-trigger animate--slide-in" 3787 3788 data-cascade 3789 3790 > 3791 <div class="footer__content-bottom-wrapper page-width"> 3792 <div class="footer__column footer__localization isolate"></div> 3793 <div class="footer__column footer__column--info"></div> 3794 </div> 3795 <div class="footer__content-bottom-wrapper page-width footer__content-bottom-wrapper--center"> 3796 <div class="footer__copyright caption"> 3797 <small class="copyright__content" 3798 >© 2026, <a href="/" title="">Epic Cycles</a></small> 3799 <small class="copyright__content"><a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&utm_medium=shopify&utm_source=onlinestore">Powered by Shopify</a></small> 3800 3801 <ul class="footer__policy-links"> 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 </ul> 3814 3815 3816 3817 3818 </div> 3819 </div> 3820 </div> 3821</footer> 3822 3823<footer role="contentinfo" aria-label="Site footer"> 3824 <div class="content-info"> 3825 <div class="content-logo"> 3826 3827 <img src="//epic-cycles.com/cdn/shop/files/Logos_Epic_Cycles_Vector.svg?v=1760958413" alt="Epic Cycles"> 3828 3829 </div> 3830 <div class="content-contact"> 3831 <h6>CONTACT US</h6> 3832 <p class="phone-section">Online Sales: Call: (888) 350-9045 or Text (858) 345-2034</p> 3833 <a href="mailto:[email protected]">[email protected]</a> 3834 <p></p> 3835 </div> 3836 <div class="content-newsletter"> 3837 <h4>Subscribe to our emails</h4> 3838 <p>Join the Epic Cycles community and be the first to hear about exclusive offers, product launches, and expert insights.</p><form method="post" action="/contact#ContactFooter" id="ContactFooter" accept-charset="UTF-8" class="footer__newsletter newsletter-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="contact[tags]" value="newsletter"> 3839 <div class="newsletter-form__field-wrapper"> 3840 <div class="field"> 3841 <input 3842 id="NewsletterForm--sections--19720077705263__footer" 3843 type="email" 3844 name="contact[email]" 3845 class="field__input" 3846 value="" 3847 aria-required="true" 3848 autocorrect="off" 3849 autocapitalize="off" 3850 autocomplete="email" 3851 3852 placeholder="Enter your email" 3853 required 3854 > 3855 3856 <button 3857 type="submit" 3858 class="newsletter-form__button field__button btn" 3859 name="commit" 3860 id="Subscribe" 3861 aria-label="Subscribe" 3862 > 3863 Subscribe 3864 </button> 3865 </div></div></form></div> 3866 3867 </div> 3868 3869 <div class="content-legal"> 3870 <div class="container"> 3871 <p><b>Copyright</b> © 2026 Epic-Cycles</p> 3872 3873 <div class="content-policy"> 3874 3875 3876 3877 <a href="/pages/work-with-us">Work with us</a> 3878 3879 3880 3881 <a href="/pages/policies/terms-of-service">Terms of service</a> 3882 3883 3884 3885 <a href="/pages/policies/privacy-policy">Privacy Policy</a> 3886 3887 3888 3889 <a href="/pages/policies/refund-policy">Refund Policy</a> 3890 3891 3892 3893 <a href="/pages/policies/policies-shipping">Policies & Shipping</a> 3894 3895 3896 </div> 3897 3898<div class="content-rrss footer__list-social"> 3899 3900 <a href="https://www.instagram.com/epic.cycles/?hl=en" target="_blank" rel="noopener" aria-label="Instagram (opens in a new tab)"> 3901 <iconify-icon icon="iconoir:instagram" aria-hidden="true"></iconify-icon> 3902 </a> 3903 3904 3905 <a href="https://www.facebook.com/Epic.Cycles1/" target="_blank" rel="noopener" aria-label="Facebook (opens in a new tab)"> 3906 <iconify-icon icon="basil:facebook-solid" aria-hidden="true"></iconify-icon> 3907 </a> 3908 3909 3910 <a href="https://www.tiktok.com/@epic.cycles" target="_blank" rel="noopener" aria-label="TikTok (opens in a new tab)"> 3911 <iconify-icon icon="ic:baseline-tiktok" aria-hidden="true"></iconify-icon> 3912 </a> 3913 3914 3915 <a href="https://www.youtube.com/@Epic-Cycles" target="_blank" rel="noopener" aria-label="YouTube (opens in a new tab)"> 3916 <iconify-icon icon="qlementine-icons:youtube-16" aria-hidden="true"></iconify-icon> 3917 </a> 3918 3919 3920 3921 3922 3923 3924</div> 3925</div> 3926 </div> 3927</footer> 3928
3929<script type="text/javascript" src="//epic-cycles.com/cdn/shop/t/42/assets/jquery-371.js?v=183079375890424050551760957017"></script>
3929<script type="text/javascript" src="//epic-cycles.com/cdn/shop/t/42/assets/iconify-preload.js?v=152420810530867954481786956997"></script>
vendor: 1 bytes, line 3929
3929
3930<script type="text/javascript" src="//epic-cycles.com/cdn/shop/t/42/assets/iconify-icon.min.js?v=105452092215713176021760957018"></script>
vendor: 1 bytes, line 3930
3930
3931<script type="text/javascript" src="//epic-cycles.com/cdn/shop/t/42/assets/slick.js?v=182247254638562121901760957017"></script>
vendor: 1 bytes, line 3931
3931
3932<script type="text/javascript" src="//epic-cycles.com/cdn/shop/t/42/assets/app.js?v=102913159095261900431786956997"></script>
vendor: 1 bytes, line 3932
3932
3933<script type="text/javascript" src="//epic-cycles.com/cdn/shop/t/42/assets/header.js?v=122759108724762625501785265106"></script>
vendor: 1 bytes, line 3933
3933
3934<script type="text/javascript" src="//epic-cycles.com/cdn/shop/t/42/assets/stores-modal.js?v=183952699677099520501787649475"></script>
vendor: 1 bytes, line 3934
3934
3935<script type="text/javascript" src="//epic-cycles.com/cdn/shop/t/42/assets/custom-collections.js?v=1404473524219993951760957017"></script>
vendor: 1 bytes, line 3935
3935
3936<script type="text/javascript" src="//epic-cycles.com/cdn/shop/t/42/assets/epic-hengam-low-stock-clone.js?v=85905311340104199811785255479"></script>
vendor: 1 bytes, line 3936
3936
3937<script type="text/javascript" src="//epic-cycles.com/cdn/shop/t/42/assets/minicart.js?v=94207676926693799151787656768"></script>
vendor: 1 bytes, line 3937
3937
3938<script src="//epic-cycles.com/cdn/shop/t/42/assets/products-general.js?v=30199962697546299201786956997" defer="defer"></script>
vendor: 1 bytes, line 3938
3938
3939<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/nouislider.min.js"></script>
3939 3940 3941 3942</div> 3943<!-- END sections: footer-group --> 3944 3945 3946<div class="product-compare-modal" id="product-compare-modal"> 3947 <!-- Header Epic --> 3948 <div class="compare-modal-header"> 3949 <div class="header-text"> 3950 <h2 class="compare-modal-title">Compare</h2> 3951 </div> 3952 <button class="compare-modal-close" id="close-compare-modal" data-compare-close aria-label="Close compare"> 3953 <iconify-icon icon="ei:close"></iconify-icon> 3954 </button> 3955 </div> 3956 3957 <!-- Body --> 3958 <div class="compare-modal-body"> 3959 <!-- Empty State Epic --> 3960 <div class="compare-empty-state" id="compare-empty-state"> 3961 <div class="empty-icon"> 3962 <iconify-icon icon="material-symbols:shopping-cart-outline-rounded"></iconify-icon> 3963 </div> 3964 <h3 class="empty-title">Empty Compare</h3> 3965 <p class="empty-description">Add products to compare and find the best option for you.</p> 3966 3967 <div class="empty-features"> 3968 <div class="feature-item" style="--index: 0"> 3969 <iconify-icon icon="material-symbols:compare-arrows-rounded"></iconify-icon> 3970 <span>Compare up to 3 products</span> 3971 </div> 3972 <div class="feature-item" style="--index: 1"> 3973 <iconify-icon icon="material-symbols:speed-rounded"></iconify-icon> 3974 <span>Quick comparison</span> 3975 </div> 3976 <div class="feature-item" style="--index: 2"> 3977 <iconify-icon icon="material-symbols:workspace-premium-rounded"></iconify-icon> 3978 <span>Full details</span> 3979 </div> 3980 </div> 3981 </div> 3982 3983 <!-- Products List Epic --> 3984 <div class="compare-products-list" id="compare-products-list" style="display: none;"> 3985 <!-- Products will be populated here by JavaScript --> 3986 </div> 3987 </div> 3988 3989 <!-- Footer Epic --> 3990 <div class="compare-modal-footer" id="compare-modal-footer" style="display: none;"> 3991 <div class="compare-actions"> 3992 <button class="btn-clear-all" id="clear-all-compare" data-compare-clean> 3993 Clear 3994 </button> 3995 <a href="/pages/compare" class="btn-compare-now" id="go-to-compare"> 3996 Compare 3997 </a> 3998 </div> 3999 </div> 4000</div> 4001 4002<!-- Modal Overlay --> 4003<div class="compare-modal-overlay" id="compare-modal-overlay"></div> 4004 4005 4006 4007<div class="product-compare-float" id="product-compare-float"> 4008 <div class="float-container"> 4009 <!-- Sección izquierda Epic --> 4010 <div class="float-left"> 4011 <div class="float-products" id="float-products"> 4012 <!-- Stack de imágenes de productos --> 4013 </div> 4014 </div> 4015 4016 <!-- Sección derecha Epic --> 4017 <div class="float-right" id="btn-float-view"> 4018 <div class="compare-text"> 4019 Compare 4020 </div> 4021 <div class="selected-products"> 4022 <span class="count">0</span> <span class="product-text">Selected products</span> 4023 </div> 4024 </div> 4025 </div> 4026</div> 4027 4028<ul hidden> 4029 <li id="a11y-refresh-page-message">Choosing a selection results in a full page refresh.</li> 4030 <li id="a11y-new-window-message">Opens in a new window.</li> 4031 </ul> 4032 4033
4033<script> 4034 window.shopUrl = 'https://epic-cycles.com'; 4035 window.routes = { 4036 cart_add_url: '/cart/add', 4037 cart_change_url: '/cart/change', 4038 cart_update_url: '/cart/update', 4039 cart_url: '/cart', 4040 predictive_search_url: '/search/suggest', 4041 }; 4042 4043 window.cartStrings = { 4044 error: `There was an error while updating your cart. Please try again.`, 4045 quantityError: `You can only add [quantity] of this item to your cart.`, 4046 }; 4047 4048 window.variantStrings = { 4049 addToCart: `Add to cart`, 4050 soldOut: `Sold out`, 4051 unavailable: `Unavailable`, 4052 unavailable_with_option: `[value] - Unavailable`, 4053 }; 4054 4055 window.quickOrderListStrings = { 4056 itemsAdded: `[quantity] items added`, 4057 itemAdded: `[quantity] item added`, 4058 itemsRemoved: `[quantity] items removed`, 4059 itemRemoved: `[quantity] item removed`, 4060 viewCart: `View cart`, 4061 each: `[money]/ea`, 4062 min_error: `This item has a minimum of [min]`, 4063 max_error: `This item has a maximum of [max]`, 4064 step_error: `You can only add this item in increments of [step]`, 4065 }; 4066 4067 window.accessibilityStrings = { 4068 imageAvailable: `Image [index] is now available in gallery view`, 4069 shareSuccess: `Link copied to clipboard`, 4070 pauseSlideshow: `Pause slideshow`, 4071 playSlideshow: `Play slideshow`, 4072 recipientFormExpanded: `Gift card recipient form expanded`, 4073 recipientFormCollapsed: `Gift card recipient form collapsed`, 4074 countrySelectorSearchCount: `[count] countries/regions found`, 4075 }; 4076 </script>
4076<script src="//epic-cycles.com/cdn/shop/t/42/assets/predictive-search.js?v=30588223321286415261760957018" defer="defer"></script>
4076<script src="//epic-cycles.com/cdn/shop/t/42/assets/product-info.js?v=149160427226008204701760957017" defer="defer"></script>
4076 4077
4077<script src="//epic-cycles.com/cdn/shop/t/42/assets/product-form.js?v=52391508203786210791760957016" defer="defer"></script>
4077 4078
4078<script src="//epic-cycles.com/cdn/shop/t/42/assets/pickup-availability.js?v=86976368063035490701787649475" defer="defer"></script>
4078<script src="//epic-cycles.com/cdn/shop/t/42/assets/product-compare.js?v=98450167166162869741760957017" defer="defer"></script>
4078<script src="//epic-cycles.com/cdn/shop/t/42/assets/quick-add-modal.js?v=20705134880976197251779454368" defer="defer"></script>
4078<script src="//epic-cycles.com/cdn/shop/t/42/assets/product-card-hover.js?v=111603181540343972631764097428" defer="defer"></script>
4078 4079 4080 <div id="shopify-block-AaHdZdWJnbGpPY1RIa__13191946590013868116" class="shopify-block shopify-app-block"> 4081 4082 4083
4084<script type="application/json" id="feebee-config"> 4085 4086 { 4087 "relevantFeesOnCurrentPage":[], 4088 "globalFees":[], 4089 "feesApplyingToAllProducts":[], 4090 "globalFeeProductVariantId": null, 4091 "productCollectionsIds": [], 4092 "currentProductId": "", 4093 "currentProductVariantIds": [], 4094 "currentProductCollectionIds": [], 4095 "currentMarketId": "gid:\/\/shopify\/Market\/2079359023", 4096 "shopCurrency": "USD", 4097 "customerTagChecks": [], 4098 4099 "initialCart": { 4100 "currency": "USD", 4101 "ids": [], 4102 "keys": [], 4103 "originalLinePrices": [], 4104 "productIds": [], 4105 "quantities": [], 4106 "variantIds": [] 4107 } 4108 } 4109</script>
4109 4110
4111<script src="https://cdn.shopify.com/extensions/01a0e879-67fe-735a-bf95-b3bcae58eb3a/feebee-155/assets/global-fees.js" defer></script>
4111 4112 4113 4114 4115</div><div id="shopify-block-AOWtzVTVmbzR4cWlHT__4061177414627956758" class="shopify-block shopify-app-block">
4115<script> 4116 window.zooomyWish={ 4117 "shop":'epic-cycles2018.myshopify.com', 4118 'local':'en', 4119 'customerId':'', 4120 'customerEmail':'', 4121 'customerName':' ', 4122 'page' :'page.blog', 4123 'productId':'', 4124 'productHandle' : '' 4125 } 4126</script>
vendor: 2 bytes, line 4126
4126
4127<script src="https://zooomyapps.com/wishlist/ZooomyColl.js" data-shop-id="epic-cycles2018.myshopify.com" data-cus-id="" data-cus-email="" data-cus-name=" " data-page="page.blog" async defer></script>
4127 4128 4129</div><div id="shopify-block-ANWk3VXE0N3BIWEMvV__11349500561483629931" class="shopify-block shopify-app-block">
4129<script id="ReStock-config"> 4130 var _ReStockConfig = window._ReStockConfig || {}; 4131 4132 _ReStockConfig.templateName = "page"; 4133 _ReStockConfig.isB2BCustomer = null; 4134 _ReStockConfig.currentLocationId = null; 4135 _ReStockConfig.moneyFormat = "${{amount}}";_ReStockConfig.marketHandle = "us"; 4136 _ReStockConfig.marketId = 2079359023;let metafieldConfigData = null;metafieldConfigData = {"ask_for_gdpr_consent_enabled":false,"not_selectable_variants_enabled":false,"pre_order_products_enabled":false,"ui_style":{"notify_me_styles":[{"wrapper":null,"page":"COLLECTION_PAGE","inline_display_mode":"NOT_DISPLAYED","show_floating_button":false,"inject_in_parent_of_wrapper":false,"inject_to_all_wrappers":false,"handle_rerenders":true,"prepend_to_wrapper":false,"custom_styles":null,"product_card_selector":null,"style_mode":"SMART"},{"wrapper":null,"page":"LANDING_PAGES","inline_display_mode":"NOT_DISPLAYED","show_floating_button":false,"inject_in_parent_of_wrapper":false,"inject_to_all_wrappers":false,"handle_rerenders":true,"prepend_to_wrapper":false,"custom_styles":null,"product_card_selector":null,"style_mode":"SMART"}],"product_page_notify_me_style":{"wrapper":null,"support_wrapper":null,"css_selector_from_theme":null,"inline_display_mode":"BUTTON","show_floating_button":false,"hide_buy_it_now_button":true,"inject_in_parent_of_wrapper":false,"inject_to_all_wrappers":false,"handle_rerenders":true,"prepend_to_wrapper":false,"css_selector":null,"css_selector_by_support":null,"custom_styles":null,"custom_variant_listener":{"element":null,"property":null,"is_dataset_property":false},"use_add_to_cart_button_selector":true,"style_mode":"SMART"},"subscription_form_style":{"custom_styles":null,"style_mode":"SMART","name_field_is_visible":false,"name_field_is_required":false,"email_field_is_required":false,"phone_field_is_required":false,"whatsapp_field_is_required":false,"quantity_field_is_visible":false,"quantity_max_value":10},"button_classes":null,"global_raw_css":"display: none","product_page_raw_css":null,"after_subscribe_message_styles":{"toastColor":"202223","toastBackgroundColor":"d9dfea"}},"ui_contents":[{"notify_me_contents":[{"page":"PRODUCT_PAGE","button_text":"Notify me","not_selectable_variants_button_text":"Out of stock? Click here"},{"page":"COLLECTION_PAGE","button_text":"Notify me","not_selectable_variants_button_text":"Out of stock? Click here"},{"page":"LANDING_PAGES","button_text":"Notify me","not_selectable_variants_button_text":"Out of stock? Click here"}],"subscription_form_content":{"form_title":"Notify me via:","email_input_placeholder":"Email Address ...","email_input_below_text":"Donât worry! We hate spam as much as you do.","email_label":"Email","full_name_label":"Name","full_name_placeholder":"Full name ...","push_label":"Push notification","sms_label":"SMS","sms_input_placeholder":"Phone Number ...","whatsapp_label":"Whatsapp","whatsapp_input_placeholder":"Whatsapp Number ...","empty_name_error_message":"Name is required.","name_length_error_message":"Name is too long.","invalid_email_error_message":"Your email address is not valid.","empty_email_error_message":"Email is required.","invalid_phone_number_error_message":"Your phone number is not valid.","empty_phone_number_error_message":"Phone number is required.","no_channels_selected_error_message":"You need to subscribe to one of the channels.","button_text":"Notify Me When Available","add_to_contacts_checkbox_text":"Notify me about other news or offers too","privacy_policy_text":"I have read and agree to the {{privacy_policy_url_text}}.","privacy_policy_url_text":"privacy policy","privacy_policy_url":"","privacy_policy_error_message":"You must accept our privacy policy","after_subscribe_message_text":"We will notify you when the item is available","already_subscribed_message_text":"You already have subscribed for this item","push_is_not_allowed_message_text":"You didn\\'t allow this site to send you push notifications. To receive back-in-stock notification from this shop.","style_mode":"SMART","quantity_label":"Quantity"},"language":"en"}],"default_language":"en","shop_id":74611,"app_enabled":true,"base_url":"https://api.notify-me.app","excluded_from_back_in_stock_variants":[],"included_in_back_in_stock_variants":[],"has_contact_integration":false,"ask_for_contact_integration_is_hidden":false,"privacy_policy_is_hidden":true,"disable_branding_permission":true,"is_email_hidden":false,"is_sms_hidden":false,"is_push_hidden":true,"is_whatsapp_hidden":true,"collection_page_show_button_when_any_variant_is_out_of_stock":false,"home_page_show_button_when_any_variant_is_out_of_stock":false,"subscription_limit_reached":false,"is_back_in_stock_active":true,"back_
4136in_stock_product_selection_mode":"ALL","low_stock":{"excluded_variants":[],"is_service_active":true,"widget_settings":{"show_mode":"ALL","inventory_threshold":5},"product_page":{"is_elements_shown":true,"ui_contents":{"en":{"description":"Low Stock!"}},"style_mode":"SMART","widget":{"custom_styles":{"show_icon":true,"icon_color":"c77414","text_color":"c77414"},"wrapper_by_support":null,"inject_to_all_wrappers":false},"inline_button_placements":[]},"collection_page":{"is_elements_shown":true,"ui_contents":{"en":{"description":"Only {{remaining_quantity}} items left in stock!"}},"style_mode":"SMART","widget":{"custom_styles":{"show_icon":true,"icon_color":"EE442E","text_color":"EE442E"},"wrapper_by_support":null,"inject_to_all_wrappers":false},"inline_button_placements":[]},"landing_page":{"is_elements_shown":true,"ui_contents":{"en":{"description":"Only {{remaining_quantity}} items left in stock!"}},"style_mode":"SMART","widget":{"custom_styles":{"show_icon":true,"icon_color":"EE442E","text_color":"EE442E"},"wrapper_by_support":null,"inject_to_all_wrappers":false},"inline_button_placements":[]}},"is_suspended":false,"default_country_code":null};let metafieldPreOrderData = null;metafieldPreOrderData = {"product_page":{"ui_styles":{"badge":{"custom_styles":{"color":"","borderRadius":"","backgroundColor":""},"is_hidden":false},"button":{"custom_styles":{"color":"","borderSize":"","borderColor":"","borderRadius":"","backgroundColor":""},"is_visible":true},"description":{"is_hidden":false},"hide_buy_it_now_button":true,"is_active":true,"price":{"custom_styles":null,"format":"{symbol}{price}","is_hidden":false},"replace_with_add_to_cart_button":true,"selling_plan_selector":{"custom_styles":{"badgeTextColor":"000000","cardTitleColor":"202223","cardBorderColor":"e4e5e7","cardBorderRadius":"8","badgeBorderRadius":"6","cardBackgroundColor":"ffffff","badgeBackgroun
4136dColor":"e4e5e7","cardDescriptionColor":"6d7175"},"is_active":false,"custom_css":""},"style_mode":"MANUAL"},"ui_contents":{"en":{"badge_text":"Pre-order","widget_description":"Expected availability: {{availability_date}}","btn_text":"Pre-order now","availability_date_label":"Expected availability","payment_label":"Payment","soon_available_text":"Coming soon","billing_full_payment_text":"Full payment at checkout","billing_due_now_label":"Due now","billing_due_later_label":"Due later on","selling_plan_full_payment_title":"Full payment","selling_plan_partial_payment_title":"Reserve now, pay later","selling_plan_selector_save_label":"Save"}},"elements_selectors":{"button":{"css_selector":"form.add-to-cart-ec-form>button[type='submit'].product-confirm-select.btn","css_selector_by_support":null,"css_selector_from_theme":null},"price":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"description":{"wrapper_by_support":null},"selling_plan_selector":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"inject_to_all_wrappers":false}},"collection_page":{"ui_styles":{"is_active":false,"button":{"custom_styles":null,"is_visible":true},"badge":{"custom_styles":{"text_color":"000","border_radius":10,"background_color":"e4e5e7","discount_text_color":"000"},"is_visible":false,"position":"TOP_RIGHT"},"style_mode":"SMART"},"ui_contents":{"en":{"btn_text":"Pre-order now","badge_text":"Pre-order"}},"elements_selectors":{"button":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"badge_parent":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"price":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null,"format":"{symbol}{price}","is_hidden":false},"quick_view_button":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"quick_view_section":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"quick_view_section_add_to_cart_button":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"featured_section":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"inject_to_all_wrappers":false},"enable_variant_listener_on_cards":false},"landing_page":{"ui_styles":{"is_active":false,"button":{"custom_styles":null,"is_visible":true},"badge":{"custom_styles":{"text_color":"000","border_radius":10,"background_color":"e4e5e7","discount_text_color":"000"},"is_visible":false,"position":"TOP_RIGHT"},"style_mode":"SMART","featured_product_is_active":false},"ui_contents":{"en":{"btn_text":"Pre-order now","badge_text":"Pre-order"}},"elements_selectors":{"button":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"badge_parent":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"price":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null,"format":"{symbol}{price}","is_hidden":false},"quick_view_button":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"quick_view_section":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"quick_view_section_add_to_cart_button":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"featured_section":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"inject_to_all_wrappers":false},"enable_variant_listener_on_cards":false},"limit_reached":false,"variant_ids":[44970683990063,45873267048495,45873267081263,45873267114031,45873266982959,45397197783087,45397197619247,45397197750319,45397197881391,45397197815855,45397197520943,45397197717551,45397197652015,45397197684783,45397197848623,52625705435352,43720644984879,45539212689455,45515549048879,45844915290159,45650977423407,45650977357871,45650977390639,42005468971055,45656524521519,45656524554287,45656526159919,45656525865007,45656526061615,45656525766703,45656526127151,45844949401647,45844949499951,45844949205039,45844949172271,45844949303343,45844949434415,45844949237807,45844949041199,45844948910127,45844948844591,45844948779055,45844948713519,45844948877359,45844948811823,45844949073967,45844948975663,45844949139503,45844948746287,45539212492847,45539212427311,45526061842479,45526061645871,52543470305496,52543470371032,52543470436568,52543470338264,45665055768623,45665055604783,45665055572015,45665055637551,45665055735855,45665055703087,45258954965039,45835562123311,45873175953455,45873176018991,45844874035247,45844873904175,45844874199087,45844873805871,45397199880239,45397199913007],"is_selling_plan_removed_by_support":false,"selling_plans_settings":{"2306539567":{"has_discount":false,"value_type":"percentage","value":0.0}},"selling_plans_billing_settings":{"2306539567":{"payment_type":"FULL","checkout_charge":{"percentage":50,"charge_type":"PERCENTAGE","exact_amount":0},"remaining_fee_checkout_time":{"date_type":"AFTER_SOME_DAYS","exact_date":null,"after_some_days":7}}},"selling_plan_id_to_market_ids":{}
4136,"selling_plan_id_to_variant_ids":{"2306539567":[44970683990063]},"is_service_active":true,"override_cart_requests":true,"excluded_catalogs_products":[],"excluded_catalogs_collections":[],"excluded_company_locations":[],"description_availability_config":{"2306539567":{"type":"SOON","config":{}}},"mixed_cart_alert":{"show_mixed_cart_alert":false,"is_active":false,"ui_styles":{"show_icon":true,"show_title":true,"show_body":true,"style_mode":"SMART","custom_css":"","custom_styles":{"color":"1A1A1A","iconColor":"616161","borderColor":"F1F1F1","borderRadius":8,"backgroundColor":"F1F1F1"}},"elements_selectors":{"cart_page":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null},"cart_drawer":{"css_selector":null,"css_selector_by_support":null,"css_selector_from_theme":null}},"ui_contents":{"en":{"title":"Shipping Notice","body":"Your order contains items with different delivery dates."}}}};let metafieldWishlistData = undefined;metafieldWishlistData = {"is_service_active":true,"is_guest_mode_enabled":true,"wishlist_buttons":{"product_page":{"is_visible":true,"style_mode":"SMART","custom_styles":null,"inject_to_all_wrappers":false,"icon":null,"inline_button_placements":[]},"collection_page":{"is_visible":false,"custom_styles":null,"icon":"","position":"","mode":"","button_placements":[]},"landing_page":{"is_visible":false,"custom_styles":null,"icon":"","position":"","mode":"","button_placements":[]}},"limit_reached":false,"ui_contents":{"en":{"id":68679,"add_to_wishlist_button_label":"Add to wishlist","remove_from_wishlist_button_label":"Itâs in wishlist","list_access_button_label":"Wishlist","list_title":"Wishlist","list_add_all_to_cart_button_label":"Add all to cart","product_card_add_to_cart_button_label":"Add to cart","product_card_out_of_stock_button_label":"Out of stock","empty_list_description":"You didn't like any products yet!","empty_list_explore_button_label":"Explore store","add_to_cart_toast_message":"Added to your cart","login_modal_button_label":"Login","login_modal_description":"Log in to your account to add products to your wishlist and view your previously saved items.","login_modal_title":"Login required"}},"access_button":{"custom_styles":null,"icon":null,"position":null,"hide_floating_button":false,"inline_button_placements":[]},"drawer":{"custom_styles":null,"position":null},"add_to_cart_message":{"custom_styles":null,"position":null},"updated_at":1771953442};let metafieldFlagsData = null;metafieldFlagsData = {};_ReStockConfig._metafields = { 4137 sdkConfig: metafieldConfigData, 4138 preOrderConfig: metafieldPreOrderData, 4139 wishlistConfig: metafieldWishlistData, 4140 featureFlags: metafieldFlagsData 4141 }; 4142</script>
4142 4143 4144<!-- BEGIN app snippet: early-cart-guard -->
4144<script id="ReStock-early-cart-guard"> 4145(function (window) { 4146 try { 4147 if (window.__nmPreorderEarlyGuard) return; 4148 4149 let cfg = null; 4150 const metafields = window._ReStockConfig?._metafields; 4151 if (metafields?.preOrderConfig && typeof metafields.preOrderConfig === 'object') { 4152 cfg = metafields.preOrderConfig; 4153 } 4154 4155 let wrappersInstalled = false; 4156 4157 window.__nmPreorderEarlyGuard = { 4158 v: 1, 4159 active: true, 4160 setConfig: function (nextConfig) { 4161 if (!nextConfig || typeof nextConfig !== 'object') return; 4162 cfg = nextConfig; 4163 if (cfg.override_cart_requests === true) installWrappers(); 4164 } 4165 }; 4166 4167 function isGuardActive() { 4168 return window.__nmPreorderEarlyGuard?.active === true; 4169 } 4170 4171 function isCartAddUrl(url) { 4172 try { 4173 const parsed = new URL(String(url), window.document.baseURI); 4174 return /(?:^|\/)cart\/add(?:\.js(?:on)?)?$/.test(parsed.pathname); 4175 } catch (error) { 4176 return false; 4177 } 4178 } 4179 4180 function isPageActive() { 4181 const template = window._ReStockConfig?.templateName; 4182 let pageConfig = null; 4183 if (template === 'product') { 4184 pageConfig = cfg.product_page; 4185 } else if (template === 'collection' || template === 'list-collections' || template === 'search' || template === 'page') { 4186 pageConfig = cfg.collection_page; 4187 } else if (template === 'index') { 4188 pageConfig = cfg.landing_page; 4189 } 4190 return pageConfig?.ui_styles?.is_active === true; 4191 } 4192 4193 function shouldEnrich() { 4194 if (!cfg) return false; 4195 if (cfg.override_cart_requests !== true) return false; 4196 if (cfg.is_service_active !== true) return false; 4197 if (cfg.limit_reached === true) return false; 4198 if (window._ReStockConfig?.isB2BCustomer) return false; 4199 return isPageActive(); 4200 } 4201 4202 function isPlanVisibleInMarket(planId) { 4203 const planToMarkets = cfg.selling_plan_id_to_market_ids; 4204 if (!planToMarkets) return true; 4205 const allowedMarketIds = planToMarkets[planId]; 4206 if (!allowedMarketIds || allowedMarketIds.length === 0) return true; 4207 const marketId = window._ReStockConfig?.marketId; 4208 if (marketId == null) return true; 4209 return allowedMarketIds.includes(Number(marketId)); 4210 } 4211 4212 function findSellingPlanId(variantId) { 4213 const planToVariants = cfg.selling_plan_id_to_variant_ids; 4214 if (!planToVariants) return null; 4215 for (const planId of Object.keys(planToVariants)) { 4216 const variantIds = planToVariants[planId]; 4217 if (variantIds && variantIds.includes(variantId) && isPlanVisibleInMarket(planId)) return planId; 4218 } 4219 return null; 4220 } 4221 4222 function localizedContents() { 4223 const contents = cfg.product_page?.ui_contents; 4224 if (!contents || typeof contents !== 'object') return {}; 4225 return contents[shopLanguage()] || contents['en'] || Object.values(contents)[0] || {}; 4226 } 4227 4228 function shopLanguage() { 4229 const locale = window.Shopify?.locale; 4230 if (locale) return locale; 4231 const documentLanguage = window.document?.documentElement?.lang; 4232 if (documentLanguage && documentLanguage !== 'null') return documentLanguage; 4233 return null; 4234 } 4235 4236 function formatDate(date) { 4237 return date.toISOString().split('T')[0]; 4238 } 4239 4240 function toFiniteNumber(value) { 4241 if (typeof value === 'number') return Number.isFinite(value) ? value : null; 4242 if (typeof value === 'string') { 4243 const parsed = parseFloat(value); 4244 return Number.isFinite(parsed) ? parsed : null; 4245 } 4246 return null; 4247 } 4248 4249 function clamp(value, min, max) { 4250 return Math.min(max, Math.max(min, value)); 4251 } 4252 4253 function availabilityDateText(planId) { 4254 const settings = cfg.description_availability_config?.[planId]; 4255 if (!settings) return ''; 4256 if (settings.type === 'SOON') return localizedContents().soon_available_text || ''; 4257 if (settings.type === 'SPECIFIC_DATE') { 4258 const parsed = new Date(settings.config.date); 4259 return isNaN(parsed.getTime()) ? '' : formatDate(parsed); 4260 } 4261 if (settings.type === 'RELATIVE_DATE') { 4262 const days = typeof settings.config.days === 'string' ? parseInt(settings.config.days, 10) : settings.config.days; 4263 if (isNaN(days)) return ''; 4264 const futureDate = new Date(); 4265 futureDate.setDate(futureDate.getDate() + days); 4266 return formatDate(futureDate); 4267 } 4268 return ''; 4269 } 4270 4271 function inlineVariantPrice(variantId) { 4272 const variants = window._ReStockConfig?.product?.variants;
4273 if (!Array.isArray(variants)) return null; 4274 const variant = variants.find(function (candidate) { 4275 return Number(candidate?.id) === variantId; 4276 }); 4277 if (!variant) return null; 4278 return variant.price ? variant.price / 100 : 0; 4279 } 4280 4281 function finalPriceForPlan(price, planId) { 4282 const adjustment = cfg.selling_plans_settings?.[planId]; 4283 if (!adjustment?.has_discount) return price; 4284 if (adjustment.value_type === 'percentage') return price * (1 - adjustment.value / 100); 4285 if (adjustment.value_type === 'fixed_amount') return price - adjustment.value * (window.Shopify?.currency?.rate ?? 1); 4286 return price; 4287 } 4288 4289 function formatMoneyIntl(price) { 4290 const currency = window.Shopify?.currency?.active || 'USD'; 4291 const locale = window.Shopify?.locale || 'en-US'; 4292 try { 4293 return new Intl.NumberFormat(locale, { style: 'currency', currency: currency }).format(price); 4294 } catch (error) { 4295 return currency + ' ' + price.toFixed(2); 4296 } 4297 } 4298 4299 const AMOUNT_PLACEHOLDER = /\{\{\s*(\w+)\s*\}\}/; 4300 4301 function delimit(cents, precision, thousands, decimal) { 4302 const parts = (cents / 100).toFixed(precision).split('.'); 4303 const grouped = parts[0].replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + thousands); 4304 return parts[1] ? grouped + (decimal || '.') + parts[1] : grouped; 4305 } 4306 4307 const AMOUNT_FORMATTERS = new Map([ 4308 ['amount', function (cents) { return delimit(cents, 2, ','); }], 4309 ['amount_no_decimals', function (cents) { return delimit(cents, 0, ','); }], 4310 ['amount_with_comma_separator', function (cents) { return delimit(cents, 2, '.', ','); }], 4311 ['amount_no_decimals_with_comma_separator', function (cents) { return delimit(cents, 0, '.'); }], 4312 ['amount_with_apostrophe_separator', function (cents) { return delimit(cents, 2, "'"); }], 4313 ['amount_no_decimals_with_space_separator', function (cents) { return delimit(cents, 0, ' '); }], 4314 ['amount_with_space_separator', function (cents) { return delimit(cents, 2, ' ', ','); }], 4315 ['amount_with_period_and_space_separator', function (cents) { return delimit(cents, 2, ' '); }] 4316 ]); 4317 4318 function decodeEntities(s) { 4319 var el = window.document.createElement('textarea'); el.innerHTML = s; return el.value; 4320 } 4321 4322 function moneyFormat() { 4323 const format = window._ReStockConfig?.moneyFormat; 4324 return typeof format === 'string' ? decodeEntities(format.replace(/<[^>]*>/g, '')) : ''; 4325 } 4326 4327 function formatMoney(amount) { 4328 const format = moneyFormat(); 4329 const formatAmount = AMOUNT_FORMATTERS.get(AMOUNT_PLACEHOLDER.exec(format)?.[1] ?? ''); 4330 if (!formatAmount) return formatMoneyIntl(amount); 4331 return format.replace(AMOUNT_PLACEHOLDER, formatAmount(Math.round(amount * 100))); 4332 } 4333 4334 function calculateCheckoutCharge(price, policy) { 4335 const { charge_type, exact_amount, percentage } = policy.checkout_charge; 4336 if (!Number.isFinite(price) || price <= 0) return 0; 4337 if (charge_type === 'PERCENTAGE') return clamp(price * ((toFiniteNumber(percentage) ?? 0) / 100), 0, price); 4338 return clamp(toFiniteNumber(exact_amount) ?? 0, 0, price); 4339 } 4340 4341 function formatRemainingDueDate(policy) { 4342 const { date_type, exact_date, after_some_days } = policy.remaining_fee_checkout_time; 4343 if (date_type === 'EXACT_DATE' && exact_date) { 4344 const parsed = new Date(exact_date + 'T12:00:00Z'); 4345 if (!isNaN(parsed.getTime())) return formatDate(parsed); 4346 } 4347 if (date_type === 'AFTER_SOME_DAYS' && after_some_days) { 4348 const days = toFiniteNumber(after_some_days); 4349 if (days === null) return ''; 4350 const futureDate = new Date(); 4351 futureDate.setDate(futureDate.getDate() + days); 4352 return formatDate(futureDate); 4353 } 4354 return ''; 4355 } 4356 4357 function paymentText(planId, variantId) { 4358 const policy = cfg.selling_plans_billing_settings?.[planId]; 4359 if (!policy) return ''; 4360 const contents = localizedContents(); 4361 if (policy.payment_type === 'FULL') return contents.billing_full_payment_text || 'Full payment at checkout'; 4362 4363 const price = inlineVariantPrice(variantId); 4364 if (price == null) return ''; 4365 4366 const planPrice = finalPriceForPlan(price, planId); 4367 const dueNowAmount = calculateCheckoutCharge(planPrice, policy); 4368 const dueLaterAmount = clamp(planPrice - dueNowAmount, 0, planPrice); 4369 const dueDate = formatRemainingDueDate(policy); 4370 4371 const dueNowLabel = contents.billing_due_now_label || 'Due now'; 4372 const dueLaterLabel = contents.billing_due_later_label || 'Due later on'; 4373 const formattedDueNow = formatMoney(dueNowAmount); 4374 const formattedDueLater = formatMoney(dueLaterAmount); 4375 const dueLaterPart = dueDate 4376 ? formattedDueLater + ' ' + dueLaterLabel + ' ' + dueDate 4377 : formattedDueLater + ' ' + dueLaterLabel; 4378 4379 return formattedDueNow + ' ' + dueNowLabel + ' · ' + dueLaterPart; 4380 } 4381 4382 const DEFAULT_AVAILABILITY_LABEL = 'Expected availability'; 4383 const DEFAULT_PAYMENT_LABEL = 'Payment'; 4384 const TYPE_MARKER = 'Type'; 4385 4386 function cleanLabel(raw) { 4387 return String(raw == null ? '' : raw) 4388 .replace(/[[\]]/g, '') 4389 .replace(/[\s:ï¼]+$/, '') 4390 .trim(); 4391 } 4392 4393 function resolvePaymentLabel(raw) { 4394 const cleaned = cleanLabel(raw); 4395 if (!cleaned || cleaned.charAt(0) === '_' || cleaned === TYPE_MARKER || cleaned === DEFAULT_AVAILABILITY_LABEL) { 4396 return DEFAULT_PAYMENT_LABEL; 4397 } 4398 return cleaned; 4399 } 4400 4401 function resolveAvailabilityLabel(raw, paymentLabel) { 4402 const cleaned = cleanLabel(raw); 4403 if (!cleaned || cleaned.charAt(0) === '_' || cleaned === TYPE_MARKER || cleaned === paymentLabel) { 4404 return DEFAULT_AVAILABILITY_LABEL; 4405 } 4406 return cleaned; 4407 } 4408 4409 function visibleCartProperties(planId, variantId) { 4410 const properties = {};
4411 try { 4412 const contents = localizedContents(); 4413 const paymentLabel = resolvePaymentLabel(contents.payment_label); 4414 const availabilityLabel = resolveAvailabilityLabel(contents.availability_date_label, paymentLabel); 4415 const availabilityDate = availabilityDateText(planId); 4416 if (availabilityDate) properties[availabilityLabel] = availabilityDate; 4417 const payment = paymentText(planId, variantId); 4418 if (payment) properties[paymentLabel] = payment; 4419 } catch (error) {} 4420 return properties; 4421 } 4422 4423 function setJsonProperty(item, name, value) { 4424 const properties = item.properties && typeof item.properties === 'object' && !Array.isArray(item.properties) ? item.properties : {}; 4425 if (properties[name] === value) return false; 4426 properties[name] = value; 4427 item.properties = properties; 4428 return true; 4429 } 4430 4431 function coerceJsonNumbers(item) { 4432 if (item.id) item.id = Number(item.id); 4433 if (item.quantity) item.quantity = Number(item.quantity); 4434 } 4435 4436 function applyVisibleJsonProperties(item, planId, variantId) { 4437 const properties = visibleCartProperties(planId, variantId); 4438 let changed = false; 4439 for (const name of Object.keys(properties)) { 4440 if (setJsonProperty(item, name, properties[name])) changed = true; 4441 } 4442 return changed; 4443 } 4444 4445 function enrichJsonItem(item) { 4446 if (!item || typeof item !== 'object') return false; 4447 const variantId = Number(item.id); 4448 if (!Number.isFinite(variantId)) return false; 4449 const planId = findSellingPlanId(variantId); 4450 if (planId == null) return false; 4451 4452 if (cfg.is_selling_plan_removed_by_support) { 4453 const tagged = setJsonProperty(item, '_purchase_type', 'NM-preorder'); 4454 const typed = setJsonProperty(item, 'Type', 'Pre-order'); 4455 if (!tagged && !typed) return false; 4456 coerceJsonNumbers(item); 4457 return true; 4458 } 4459 4460 if (item.selling_plan != null && item.selling_plan !== '' && String(item.selling_plan) === String(planId)) return false; 4461 4462 setJsonProperty(item, '_purchase_type', 'NM-preorder'); 4463 if (item.selling_plan == null || item.selling_plan === '') item.selling_plan = Number(planId); 4464 if (item.properties._selling_plan_id == null) setJsonProperty(item, '_selling_plan_id', String(planId)); 4465 applyVisibleJsonProperties(item, planId, variantId); 4466 coerceJsonNumbers(item); 4467 return true; 4468 } 4469 4470 function enrichJson(data) { 4471 if (!data || typeof data !== 'object') return false; 4472 if (Array.isArray(data.items)) { 4473 let changed = false; 4474 for (const item of data.items) { 4475 if (enrichJsonItem(item)) changed = true; 4476 } 4477 return changed; 4478 } 4479 if (data.items && typeof data.items === 'object') return enrichJsonItem(data.items); 4480 return enrichJsonItem(data); 4481 } 4482 4483 function paramScopes(params) { 4484 const prefixes = []; 4485 const seen = {}; 4486 params.forEach(function (value, key) { 4487 const match = /^items\[(\d+)\]\[id\]$/.exec(key); 4488 if (match && !seen[match[1]]) { 4489 seen[match[1]] = true; 4490 prefixes.push('items[' + match[1] + ']'); 4491 } 4492 }); 4493 if (prefixes.length > 0) return prefixes; 4494 if (params.get('items[id]') != null) return ['items']; 4495 if (params.get('id') != null) return ['']; 4496 return []; 4497 } 4498 4499 function scopeKey(prefix, name) { 4500 return prefix ? prefix + '[' + name + ']' : name; 4501 } 4502 4503 function scopePropertyKey(prefix, name) { 4504 return prefix ? prefix + '[properties][' + name + ']' : 'properties[' + name + ']'; 4505 } 4506 4507 function setParam(params, key, value) { 4508 if (params.get(key) === value) return false; 4509 params.set(key, value); 4510 return true; 4511 } 4512 4513 function applyRemovedBySupportParams(params, prefix) { 4514 const tagged = setParam(params, scopePropertyKey(prefix, '_purchase_type'), 'NM-preorder'); 4515 const typed = setParam(params, scopePropertyKey(prefix, 'Type'), 'Pre-order'); 4516 return tagged || typed; 4517 } 4518 4519 function applyVisibleParamProperties(params, prefix, planId, variantId) { 4520 const properties = visibleCartProperties(planId, variantId); 4521 let changed = false;
4522 for (const name of Object.keys(properties)) { 4523 if (setParam(params, scopePropertyKey(prefix, name), properties[name])) changed = true; 4524 } 4525 return changed; 4526 } 4527 4528 function enrichParamScope(params, prefix, planId, variantId) { 4529 if (cfg.is_selling_plan_removed_by_support) return applyRemovedBySupportParams(params, prefix); 4530 4531 const existingPlan = params.get(scopeKey(prefix, 'selling_plan')); 4532 if (existingPlan != null && existingPlan !== '' && String(existingPlan) === String(planId)) return false; 4533 4534 let changed = setParam(params, scopePropertyKey(prefix, '_purchase_type'), 'NM-preorder'); 4535 if (existingPlan == null || existingPlan === '') { 4536 params.set(scopeKey(prefix, 'selling_plan'), String(planId)); 4537 changed = true; 4538 } 4539 if (params.get(scopePropertyKey(prefix, '_selling_plan_id')) == null) { 4540 params.set(scopePropertyKey(prefix, '_selling_plan_id'), String(planId)); 4541 changed = true; 4542 } 4543 if (applyVisibleParamProperties(params, prefix, planId, variantId)) changed = true; 4544 return changed; 4545 } 4546 4547 function enrichParams(params) { 4548 const scopes = paramScopes(params); 4549 let changed = false; 4550 for (const prefix of scopes) { 4551 const variantId = Number(params.get(scopeKey(prefix, 'id'))); 4552 if (!Number.isFinite(variantId)) continue; 4553 const planId = findSellingPlanId(variantId); 4554 if (planId == null) continue; 4555 if (enrichParamScope(params, prefix, planId, variantId)) changed = true; 4556 } 4557 return changed; 4558 } 4559 4560 function enrichBody(body) { 4561 if (typeof body === 'string') { 4562 let jsonData = null; 4563 try { 4564 jsonData = JSON.parse(body); 4565 } catch (error) { 4566 jsonData = null; 4567 } 4568 if (jsonData && typeof jsonData === 'object') { 4569 return enrichJson(jsonData) ? { body: JSON.stringify(jsonData), changed: true } : { body: body, changed: false }; 4570 } 4571 const params = new URLSearchParams(body); 4572 return enrichParams(params) ? { body: params.toString(), changed: true } : { body: body, changed: false }; 4573 } 4574 if (typeof FormData !== 'undefined' && body instanceof FormData) { 4575 return { body: body, changed: enrichParams(body) }; 4576 } 4577 if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) { 4578 return { body: body, changed: enrichParams(body) }; 4579 } 4580 return { body: body, changed: false }; 4581 } 4582 4583 function extractRequestUrl(input) { 4584 if (typeof input === 'string') return input; 4585 if (typeof input?.url === 'string') return input.url; 4586 if (typeof input?.href === 'string') return input.href; 4587 return ''; 4588 } 4589 4590 function maybeEnrichFetchInit(input, init) { 4591 if (!isGuardActive() || !init || init.body == null) return init; 4592 const url = extractRequestUrl(input); 4593 if (!isCartAddUrl(url) || !shouldEnrich()) return init; 4594 const enriched = enrichBody(init.body); 4595 if (!enriched.changed) return init; 4596 return { ...init, body: enriched.body }; 4597 } 4598 4599 function installWrappers() { 4600 if (wrappersInstalled) return; 4601 wrappersInstalled = true; 4602 4603 const originalFetch = window.fetch; 4604 window.fetch = function (input, init) { 4605 let nextInit = init; 4606 try { 4607 nextInit = maybeEnrichFetchInit(input, init); 4608 } catch (error) {} 4609 return originalFetch.call(this || window, input, nextInit); 4610 }; 4611 4612 const xhrPrototype = window.XMLHttpRequest?.prototype; 4613 if (xhrPrototype) { 4614 const originalOpen = xhrPrototype.open; 4615 const originalSend = xhrPrototype.send; 4616 xhrPrototype.open = function () { 4617 try { 4618 this.__nmEarlyGuardUrl = arguments[1]; 4619 } catch (error) {} 4620 return originalOpen.apply(this, arguments); 4621 }; 4622 xhrPrototype.send = function (body) { 4623 try { 4624 if (isGuardActive() && body != null && this.__nmEarlyGuardUrl != null && isCartAddUrl(this.__nmEarlyGuardUrl) && shouldEnrich()) { 4625 const enriched = enrichBody(body); 4626 if (enriched.changed) return originalSend.call(this, enriched.body); 4627 } 4628 } catch (error) {} 4629 return originalSend.apply(this, arguments); 4630 }; 4631 } 4632 } 4633 4634 if (cfg?.override_cart_requests === true) installWrappers(); 4635 } catch (error) {} 4636})(window); 4637</script>
4637 4638<!-- END app snippet --> 4639<!-- BEGIN app snippet: wishlist-page-container -->
4639<script id="ReStock-wishlist-page-container"> 4640(function (window) { 4641 try { 4642 if (window.__nmWishlistPageContainer) return; 4643 4644 const CONTAINER_ID = 'nm-wishlist-page-root'; 4645 const TARGET_SELECTORS = ['main#MainContent', 'main', '[role="main"]']; 4646 const RELATIVE_PLACEMENTS = ['before', 'after', 'start', 'end']; 4647 4648 function trimTrailingSlash(path) { 4649 const value = String(path); 4650 return value.length > 1 && value.charAt(value.length - 1) === '/' ? value.slice(0, -1) : value; 4651 } 4652 4653 function stripRoutesRoot(pathname) { 4654 const root = window.Shopify?.routes?.root; 4655 if (typeof root !== 'string') return pathname; 4656 const prefix = trimTrailingSlash(root); 4657 if (prefix === '' || prefix === '/') return pathname; 4658 if (pathname === prefix) return '/'; 4659 return pathname.indexOf(prefix + '/') === 0 ? pathname.slice(prefix.length) : pathname; 4660 } 4661 4662 function isConfiguredPage(pagePath) { 4663 const pathname = window.location?.pathname; 4664 if (typeof pathname !== 'string') return false; 4665 return trimTrailingSlash(stripRoutesRoot(pathname)) === trimTrailingSlash(pagePath); 4666 } 4667 4668 function hasShareToken() { 4669 const search = window.location?.search; 4670 if (!search) return false; 4671 return !!new URLSearchParams(search).get('w'); 4672 } 4673 4674 function isBootable(wishlistConfig, sdkConfig) { 4675 if (!sdkConfig || typeof sdkConfig !== 'object') return false; 4676 if (sdkConfig.app_enabled !== true) return false; 4677 if (sdkConfig.is_suspended === true) return false; 4678 return wishlistConfig.is_service_active === true; 4679 } 4680 4681 function matchElement(selector) { 4682 try { 4683 return window.document.querySelector(selector) || null; 4684 } catch (error) { 4685 return null; 4686 } 4687 } 4688 4689 function configuredTarget(placement) { 4690 if (!placement || typeof placement !== 'object') return null; 4691 if (typeof placement.css_selector !== 'string' || placement.css_selector === '') return null; 4692 const element = matchElement(placement.css_selector); 4693 if (!element) return null; 4694 const relative = RELATIVE_PLACEMENTS.indexOf(placement.relative_placement) === -1 ? 'start' : placement.relative_placement; 4695 return { element: element, relative: relative }; 4696 } 4697 4698 function builtInTarget() { 4699 for (const selector of TARGET_SELECTORS) { 4700 const element = matchElement(selector); 4701 if (element) return { element: element, relative: 'start' }; 4702 } 4703 return null; 4704 } 4705 4706 function insertContainer(container, target) { 4707 if (target.relative === 'before' || target.relative === 'after') { 4708 const parent = target.element.parentNode; 4709 if (!parent) return false; 4710 parent.insertBefore(container, target.relative === 'before' ? target.element : target.element.nextSibling || null); 4711 return true; 4712 } 4713 target.element.insertBefore(container, target.relative === 'end' ? null : target.element.firstChild || null); 4714 return true; 4715 } 4716 4717 function createContainer(placement) { 4718 const target = configuredTarget(placement) || builtInTarget(); 4719 if (!target) return null; 4720 const container = window.document.createElement('div'); 4721 container.id = CONTAINER_ID; 4722 container.setAttribute('data-nm-container-source', 'fallback'); 4723 return insertContainer(container, target) ? container : null; 4724 } 4725 4726 function usablePagePath(wishlistConfig) { 4727 const myWishlist = wishlistConfig && typeof wishlistConfig === 'object' ? wishlistConfig.my_wishlist : null; 4728 return myWishlist && typeof myWishlist.page_path === 'string' ? myWishlist.page_path : ''; 4729 } 4730 4731 function wishlistPageConfig(wishlistConfig) { 4732 const pagePath = usablePagePath(wishlistConfig); 4733 return pagePath && isConfiguredPage(pagePath) ? wishlistConfig.my_wishlist : null; 4734 } 4735 4736 function armContainer(myWishlist) { 4737 const container = window.document.getElementById(CONTAINER_ID) || createContainer(myWishlist.container_placement); 4738 if (container) container.removeAttribute('data-nm-page-state'); 4739 } 4740 4741 function markInactive() { 4742 const container = window.document.getElementById(CONTAINER_ID); 4743 if (container) container.setAttribute('data-nm-page-state', 'inactive'); 4744 } 4745 4746 function dearmContainer() { 4747 const stale = window.document.getElementById(CONTAINER_ID); 4748 if (stale && stale.getAttribute('data-nm-container-source') === 'fallback') stale.remove(); 4749 else markInactive(); 4750 } 4751 4752 function ensure(wishlistConfig, sdkConfig) {
4753 try { 4754 const myWishlist = wishlistPageConfig(wishlistConfig); 4755 if (!myWishlist) { 4756 if (usablePagePath(wishlistConfig)) dearmContainer(); 4757 return; 4758 } 4759 const active = myWishlist.type === 'separate_page' || hasShareToken(); 4760 if (active && isBootable(wishlistConfig, sdkConfig)) armContainer(myWishlist); 4761 else markInactive(); 4762 } catch (error) {} 4763 } 4764 4765 window.__nmWishlistPageContainer = { v: 1, ensure: ensure }; 4766 4767 const metafields = window._ReStockConfig?._metafields; 4768 ensure(metafields?.wishlistConfig, metafields?.sdkConfig); 4769 } catch (error) {} 4770})(window); 4771</script>
4771 4772<!-- END app snippet --> 4773
4774<script src="https://cdn.shopify.com/extensions/01a0e83c-88a3-702e-8442-82641270f3fe/bestpush-110/assets/restock-sdk-loader.js?v=1790602660" defer></script>
4774 4775 4776<style> 4777 #nm-wishlist-page-root { 4778 min-height: 60vh; 4779 } 4780 4781 #nm-wishlist-page-root[data-nm-container-source="fallback"] { 4782 box-sizing: border-box; 4783 max-width: 1200px; 4784 margin: 0 auto; 4785 padding: 0 1.5rem; 4786 } 4787 4788 #nm-wishlist-page-root[data-nm-page-state="inactive"]:empty { 4789 display: none; 4790 } 4791 4792 #nm-wishlist-page-root:empty { 4793 display: flex; 4794 align-items: center; 4795 justify-content: center; 4796 } 4797 4798 #nm-wishlist-page-root:empty::after { 4799 content: ""; 4800 width: 36px; 4801 height: 36px; 4802 border: 3px solid #e3e3e3; 4803 border-top-color: #1773b0; 4804 border-radius: 50%; 4805 animation: nm-wishlist-page-boot-spin 0.7s linear infinite; 4806 } 4807 4808 @keyframes nm-wishlist-page-boot-spin { 4809 to { 4810 transform: rotate(360deg); 4811 } 4812 } 4813 4814 body:has(#nm-wishlist-page-root:not([data-nm-page-state="inactive"])) .main-page-title, 4815 body:has(#nm-wishlist-page-root:not([data-nm-page-state="inactive"])) .page-title, 4816 body:has(#nm-wishlist-page-root:not(:empty)) .main-page-title, 4817 body:has(#nm-wishlist-page-root:not(:empty)) .page-title { 4818 display: none !important; 4819 } 4820</style> 4821 4822 4823</div><div id="shopify-block-ANEZ6YUIrWjB2bzZUU__11068332061543699368" class="shopify-block shopify-app-block"></div><div id="shopify-block-AU3RpOHNzMElZU0pJQ__6143736321357441667" class="shopify-block shopify-app-block">
4824<script src="//code.tidio.co/odxmoqjzgb5ai5faw7hufhxoelkttban.js?extensionVersion=1.4.1" async></script>
4824 4825 4826 <!-- BEGIN app snippet: visitor-identity-verification --> 4827 4828 4829 4830 4831<!-- END app snippet --> 4832 4833</div><!-- Failed to render app block "18408366429334172745": app block path "shopify://apps/pop-convert-pop-ups-banners/blocks/app-embed/ed587aec-4936-43ae-a1b3-1c9e0d08f185" does not exist -->
4833<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
4833 4834</body> 4835 <style id="acsb-anti-overflow"> 4836 /* En contenedores protegidos, impide que accessiBe cambie tipografÃas/espaciados */ 4837 [data-acsb-skip] * { 4838 4839 } 4840 4841 /* Evita reflows fuertes en sliders/grids */ 4842 [data-acsb-skip] { 4843 4844 max-width: 100%; 4845 } 4846 access-widget-ui{ 4847 z-index: 111 !important; 4848 } 4849 /* Si el widget mete atributos que alteren visibilidad, no afecte el flujo */ 4850 [data-acsb-skip] [data-acsb-hidden], 4851 [data-acsb-skip] [data-acsb-now-navigable], 4852 [data-acsb-skip] [data-acsb-tooltip]{ 4853 display: initial !important; 4854 visibility: initial !important; 4855 opacity: initial !important; 4856 } 4857 </style> 4858 4859 </html> 4860
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.