1<!doctype html><html class="no-js" lang="de" dir="ltr"> 2<head> 3 <meta charset="utf-8"> 4 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 5 <meta name="viewport" content="width=device-width,initial-scale=1"> 6 <meta name="theme-color" content="#171717"> 7 <link rel="canonical" href="https://odiporo.de/cart"> 8 <link rel="preconnect" href="https://cdn.shopify.com" crossorigin> 9 <link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin> 10 11 <link rel="dns-prefetch" href="https://ajax.googleapis.com"> 12 <link rel="dns-prefetch" href="https://maps.googleapis.com"> 13 <link rel="dns-prefetch" href="https://maps.gstatic.com"> 14 15<link rel="shortcut icon" href="//odiporo.de/cdn/shop/files/O_Logo_White-01.png?crop=center&height=32&v=1752656128&width=32" type="image/png" /><!-- Google Tag Manager -->
16<script>
vendor: 327 bytes, lines 16-20
16(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 17new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 18j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 19'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 20})(window,document,'script','dataLayer','
20GTM-KX7KVKS
vendor: 3 bytes, line 20
20');
20</script>
20 21<!-- End Google Tag Manager --> 22 <title>Dein Warenkorb – odiporo.de - Smarte Elektronik für jeden Anspruch</title><meta property="og:site_name" content="odiporo.de - Smarte Elektronik für jeden Anspruch"> 23<meta property="og:url" content="https://odiporo.de/cart"> 24<meta property="og:title" content="Dein Warenkorb"> 25<meta property="og:type" content="website"> 26<meta property="og:description" content="Als dynamisch wachsendes E Commerce-Unternehmen haben wir uns einer klaren Mission verschrieben: Wir bieten unseren Kunden erstklassige Technologie-Produkte mit einem hervorragenden Preis Leistungs-Verhältnis. Unser sorgfältig kuratiertes und wachsendes Sortiment reicht von zukunftsweisender Elektromobilität über intel"><meta property="og:image" content="http://odiporo.de/cdn/shop/files/Odiporo.de_Logo_Insta_Profilbild_1080x1080_537f761d-70e6-49fb-87bf-7d698bf65e71.png?v=1787740204"> 27 <meta property="og:image:secure_url" content="https://odiporo.de/cdn/shop/files/Odiporo.de_Logo_Insta_Profilbild_1080x1080_537f761d-70e6-49fb-87bf-7d698bf65e71.png?v=1787740204"> 28 <meta property="og:image:width" content="1080"> 29 <meta property="og:image:height" content="1080"><meta name="twitter:site" content="@"> 30<meta name="twitter:card" content="summary_large_image"> 31<meta name="twitter:title" content="Dein Warenkorb"> 32<meta name="twitter:description" content="Als dynamisch wachsendes E Commerce-Unternehmen haben wir uns einer klaren Mission verschrieben: Wir bieten unseren Kunden erstklassige Technologie-Produkte mit einem hervorragenden Preis Leistungs-Verhältnis. Unser sorgfältig kuratiertes und wachsendes Sortiment reicht von zukunftsweisender Elektromobilität über intel"> 33<style>@font-face { 34 font-family: Roboto; 35 font-weight: 400; 36 font-style: normal; 37 font-display: swap; 38 src: url("//odiporo.de/cdn/fonts/roboto/roboto_n4.2019d890f07b1852f56ce63ba45b2db45d852cba.woff2") format("woff2"), 39 url("//odiporo.de/cdn/fonts/roboto/roboto_n4.238690e0007583582327135619c5f7971652fa9d.woff") format("woff"); 40} 41@font-face { 42 font-family: Roboto; 43 font-weight: 500; 44 font-style: normal; 45 font-display: swap; 46 src: url("//odiporo.de/cdn/fonts/roboto/roboto_n5.250d51708d76acbac296b0e21ede8f81de4e37aa.woff2") format("woff2"), 47 url("//odiporo.de/cdn/fonts/roboto/roboto_n5.535e8c56f4cbbdea416167af50ab0ff1360a3949.woff") format("woff"); 48} 49@font-face { 50 font-family: Roboto; 51 font-weight: 700; 52 font-style: normal; 53 font-display: swap; 54 src: url("//odiporo.de/cdn/fonts/roboto/roboto_n7.f38007a10afbbde8976c4056bfe890710d51dec2.woff2") format("woff2"), 55 url("//odiporo.de/cdn/fonts/roboto/roboto_n7.94bfdd3e80c7be00e128703d245c207769d763f9.woff") format("woff"); 56} 57@font-face { 58 font-family: Roboto; 59 font-weight: 400; 60 font-style: italic; 61 font-display: swap; 62 src: url("//odiporo.de/cdn/fonts/roboto/roboto_i4.57ce898ccda22ee84f49e6b57ae302250655e2d4.woff2") format("woff2"), 63 url("//odiporo.de/cdn/fonts/roboto/roboto_i4.b21f3bd061cbcb83b824ae8c7671a82587b264bf.woff") format("woff"); 64} 65@font-face { 66 font-family: Roboto; 67 font-weight: 700; 68 font-style: italic; 69 font-display: swap; 70 src: url("//odiporo.de/cdn/fonts/roboto/roboto_i7.7ccaf9410746f2c53340607c42c43f90a9005937.woff2") format("woff2"), 71 url("//odiporo.de/cdn/fonts/roboto/roboto_i7.49ec21cdd7148292bffea74c62c0df6e93551516.woff") format("woff"); 72} 73:root { 74 /*! General */ 75 --color-base-text: 23 23 23; 76 --color-base-highlight: 255 209 0; 77 --color-base-background: 255 255 255; 78 --color-base-button: 23 23 23; 79 --color-base-button-gradient: #171717; 80 --color-base-button-text: 255 255 255; 81 --color-keyboard-focus: 255 217 0; 82 --color-shadow: 23 23 23; 83 --color-price: 23 23 23; 84 --color-sale-price: 198 40 40; 85 --color-sale-tag: 255 209 0; 86 --color-sale-tag-text: 23 23 23; 87 --color-rating: 245 158 11; 88 --color-placeholder: 255 255 255; 89 --color-success-text: 46 125 50; 90 --color-success-background: 255 255 255; 91 --color-error-text: 198 40 40; 92 --color-error-background: 255 255 255; 93 --color-info-text: 21 101 192; 94 --color-info-background: 255 255 255; 95 96 /*! Menu and drawers */ 97 --color-drawer-text: 23 23 23; 98 --color-drawer-background: 255 255 255; 99 --color-drawer-button-background: 255 209 0; 100 --color-drawer-button-gradient: #ffd100; 101 --color-drawer-button-text: 23 23 23; 102 --color-drawer-overlay: 255 217 0; 103 104 /*! Product card */ 105 --card-radius: var(--rounded-card); 106 --card-border-width: 0.0rem; 107 --card-border-opacity: 0.0; 108 --card-shadow-opacity: 0.1; 109 --card-shadow-horizontal-offset: 0.0rem; 110 --card-shadow-vertical-offset: 0.0rem; 111 112 /*! Buttons */ 113 --buttons-radius: var(--rounded-button); 114 --buttons-border-width: 2px; 115 --buttons-border-opacity: 1.0; 116 --buttons-shadow-opacity: 0.0; 117 --buttons-shadow-horizontal-offset: 0px; 118 --buttons-shadow-vertical-offset: 0px; 119 120 /*! Inputs */ 121 --inputs-radius: var(--rounded-input); 122 --inputs-border-width: 0px; 123 --inputs-border-opacity: 0.65; 124 125 /*! Spacing */ 126 --sp-0d5: 0.125rem; 127 --sp-1: 0.25rem; 128 --sp-1d5: 0.375rem; 129 --sp-2: 0.5rem;
130 --sp-2d5: 0.625rem; 131 --sp-3: 0.75rem; 132 --sp-3d5: 0.875rem; 133 --sp-4: 1rem; 134 --sp-4d5: 1.125rem; 135 --sp-5: 1.25rem; 136 --sp-5d5: 1.375rem; 137 --sp-6: 1.5rem; 138 --sp-6d5: 1.625rem; 139 --sp-7: 1.75rem; 140 --sp-7d5: 1.875rem; 141 --sp-8: 2rem; 142 --sp-8d5: 2.125rem; 143 --sp-9: 2.25rem; 144 --sp-9d5: 2.375rem; 145 --sp-10: 2.5rem; 146 --sp-10d5: 2.625rem; 147 --sp-11: 2.75rem; 148 --sp-12: 3rem; 149 --sp-13: 3.25rem; 150 --sp-14: 3.5rem; 151 --sp-15: 3.875rem; 152 --sp-16: 4rem; 153 --sp-18: 4.5rem; 154 --sp-20: 5rem; 155 --sp-23: 5.625rem; 156 --sp-24: 6rem; 157 --sp-28: 7rem; 158 --sp-32: 8rem; 159 --sp-36: 9rem; 160 --sp-40: 10rem; 161 --sp-44: 11rem; 162 --sp-48: 12rem; 163 --sp-52: 13rem; 164 --sp-56: 14rem; 165 --sp-60: 15rem; 166 --sp-64: 16rem; 167 --sp-68: 17rem; 168 --sp-72: 18rem; 169 --sp-80: 20rem; 170 --sp-96: 24rem; 171 --sp-100: 32rem; 172 173 /*! Font family */ 174 --font-heading-family: Roboto, sans-serif; 175 --font-heading-style: normal; 176 --font-heading-weight: 400; 177 --font-heading-line-height: 1.2; 178 --font-heading-letter-spacing: 0.0em; 179 180 181 --font-body-family: Roboto, sans-serif; 182 --font-body-style: normal; 183 --font-body-weight: 400; 184 --font-body-line-height: 1.6; 185 --font-body-letter-spacing: 0.0em; 186 187 --font-navigation-family: var(--font-body-family); 188 --font-navigation-size: clamp(0.875rem, 0.748rem + 0.3174vw, 1.125rem); 189 --font-navigation-weight: 500; 190 191 192 --font-button-family: var(--font-body-family); 193 --font-button-size: clamp(0.875rem, 0.8115rem + 0.1587vw, 1.0rem); 194 --font-button-weight: 500; 195 196 197 --font-product-family: var(--font-body-family); 198 --font-product-size: clamp(1.0rem, 0.873rem + 0.3175vw, 1.25rem); 199 --font-product-weight: 500; 200 201 202 /*! Font size */ 203 --text-3xs: 0.625rem; 204 --text-2xs: 0.6875rem; 205 --text-xs: 0.75rem; 206 --text-2sm: 0.8125rem; 207 --text-sm: 0.875rem; 208 --text-base: 1.0rem; 209 --text-lg: 1.125rem; 210 --text-xl: 1.25rem; 211 --text-2xl: 1.5rem; 212 --text-3xl: 1.875rem; 213 --text-4xl: 2.25rem; 214 --text-5xl: 3.0rem; 215 --text-6xl: 3.75rem; 216 --text-7xl: 4.5rem; 217 --text-8xl: 6.0rem; 218 219 /*! Layout */ 220 --page-width: 1900px; 221 --gap-padding: clamp(var(--sp-5), 2.526vw, var(--sp-12)); 222 --grid-gap: clamp(40px, 20vw, 60px); 223 --page-padding: var(--sp-5); 224 --page-container: min(calc(100vw - var(--scrollbar-width, 0px) - var(--page-padding) * 2), var(--page-width)); 225 --rounded-button: 0.75rem; 226 --rounded-input: 0.75rem; 227 --rounded-card: clamp(var(--sp-2d5), 1.053vw, var(--sp-5)); 228 --rounded-block: clamp(var(--sp-2d5), 1.053vw, var(--sp-5)); 229 230 /*! Other */ 231 --icon-weight: 1.5px; 232 } 233 234 @media screen and (min-width: 1024px) { 235 :root { 236 --page-padding: var(--sp-9); 237 } 238 } 239 240 @media screen and (min-width: 1280px) { 241 :root { 242 --gap-padding: var(--sp-12); 243 --page-padding: var(--sp-12); 244 --page-container: min(calc(100vw - var(--scrollbar-width, 0px) - var(--page-padding) * 2), max(var(--page-width), 1280px)); 245 } 246 } 247 248 @media screen and (min-width: 1536px) { 249 :root { 250 --page-padding: max(var(--sp-12), 50vw - var(--scrollbar-width, 0px)/2 - var(--page-width)/2); 251 } 252 } 253</style> 254 <link rel="preload" as="font" href="//odiporo.de/cdn/fonts/roboto/roboto_n4.2019d890f07b1852f56ce63ba45b2db45d852cba.woff2" type="font/woff2" crossorigin> 255 256 257 <link rel="preload" as="font" href="//odiporo.de/cdn/fonts/roboto/roboto_n4.2019d890f07b1852f56ce63ba45b2db45d852cba.woff2" type="font/woff2" crossorigin> 258 259<link href="//odiporo.de/cdn/shop/t/3/assets/theme.css?v=147535658888616814551767967621" rel="stylesheet" type="text/css" media="all" /><link rel="stylesheet" href="//odiporo.de/cdn/shop/t/3/assets/apps.css?v=181677850728302373271744817342" media="print" fetchpriority="low" onload="this.media='all'"> 260 261
261<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
261<meta name="google-site-verification" content="0nfOA03KB2llEYepo7ebUe5QZ-ZWgCEOHJt93iusFxE"> 262<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/90810417531/digital_wallets/dialog"> 263<meta id="in-context-paypal-metadata" data-shop-id="90810417531" data-venmo-supported="false" data-environment="production" data-locale="de_DE" data-paypal-v4="true" data-currency="EUR"> 264<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
264<script async="async" src="/checkouts/internal/preloads.js?locale=de-DE"></script>
264 265<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
266<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=de-DE&shop_id=90810417531" crossorigin="anonymous"></script>
vendor: 1 bytes, line 266
266
267<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":90810417531,"countryCode":"DE","currencyCode":"EUR","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/90810417531","merchantName":"odiporo.de - Smarte Elektronik für jeden Anspruch","requiredBillingContactFields":["postalAddress","email"],"requiredShippingContactFields":["postalAddress","email"],"shippingType":"shipping","supportedNetworks":["visa","maestro","masterCard","amex"],"total":{"type":"pending","label":"odiporo.de - Smarte Elektronik für jeden Anspruch","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 267
267
268<script id="shopify-features" type="application/json">{"accessToken":"c7fb4a2c810720620d03dbb82618158c","betas":["rich-media-storefront-analytics"],"domain":"odiporo.de","predictiveSearch":true,"shopId":90810417531,"locale":"de"}</script>
vendor: 1 bytes, line 268
268
269<script>var Shopify = Shopify || {}; 270Shopify.shop = "v80rnh-af.myshopify.com"; 271Shopify.locale = "de"; 272Shopify.currency = {"active":"EUR","rate":"1.0"}; 273Shopify.country = "DE"; 274Shopify.theme = {"name":"Concept live","id":179096813947,"schema_name":"Concept","schema_version":"4.1.0","theme_store_id":2412,"role":"main"}; 275Shopify.theme.handle = "null"; 276Shopify.theme.style = {"id":null,"handle":null}; 277Shopify.cdnHost = "odiporo.de/cdn"; 278Shopify.routes = Shopify.routes || {}; 279Shopify.routes.root = "/"; 280Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 281Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 282Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 283Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 283
283
284<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 284
284
285<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 285
285
286<script> 287 window.ShopifyPay = window.ShopifyPay || {}; 288 window.ShopifyPay.apiHost = "shop.app\/pay"; 289 window.ShopifyPay.redirectState = null; 290</script>
vendor: 1 bytes, line 290
290
291<script> 292 window.Shopify = window.Shopify || {}; 293 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 294 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 295 window.Shopify.SignInWithShop.eligible = true; 296</script>
vendor: 1 bytes, line 296
296
297<script id="shop-js-analytics" type="application/json">{"pageType":"cart"}</script>
vendor: 1 bytes, line 297
297
298<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.de.esm.js"></script>
vendor: 1 bytes, line 298
298
299<script type="module"> 300 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.de.esm.js"); 301 302 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 303 304</script>
vendor: 1 bytes, line 304
304
305<script> 306 window.Shopify = window.Shopify || {}; 307 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 308 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.de.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.de.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.de.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.de.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.de.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.de.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.de.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.de.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.de.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.de.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.de.esm.js"],"listener":["modules/v2/loader.listener.de.esm.js"],"pay-button":["modules/v2/loader.pay-button.de.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.de.esm.js"],"shop-button":["modules/v2/loader.shop-button.de.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.de.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.de.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.de.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.de.esm.js"],"shop-login":["modules/v2/loader.shop-login.de.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.de.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.de.esm.js"]}; 309</script>
vendor: 1 bytes, line 309
309
310<script>(function() { 311 var isLoaded = false; 312 function asyncLoad() { 313 if (isLoaded) return; 314 isLoaded = true; 315 var urls = ["https:\/\/dr4qe3ddw9y32.cloudfront.net\/awin-shopify-integration-code.js?aid=32931\u0026v=shopifyApp_5.2.3\u0026ts=1753793870681\u0026shop=v80rnh-af.myshopify.com","https:\/\/widget.trustpilot.com\/bootstrap\/v5\/tp.widget.sync.bootstrap.min.js?shop=v80rnh-af.myshopify.com","https:\/\/ecommplugins-scripts.trustpilot.com\/v2.1\/js\/header.min.js?settings=eyJrZXkiOiI3S3RBeFRUeUJOeUxIcE9mIiwicyI6InNrdSJ9\u0026shop=v80rnh-af.myshopify.com","https:\/\/ecommplugins-scripts.trustpilot.com\/v2.1\/js\/success.min.js?settings=eyJrZXkiOiI3S3RBeFRUeUJOeUxIcE9mIiwicyI6InNrdSIsInQiOlsib3JkZXJzL2Z1bGZpbGxlZCJdLCJ2IjoiIiwiYSI6Ildvb0NvbW1lcmNlLTcuMi4wIn0=\u0026shop=v80rnh-af.myshopify.com","https:\/\/ecommplugins-trustboxsettings.trustpilot.com\/v80rnh-af.myshopify.com.js?settings=1749535109302\u0026shop=v80rnh-af.myshopify.com","https:\/\/tseish-app.connect.trustedshops.com\/esc.js?apiBaseUrl=aHR0cHM6Ly90c2Vpc2gtYXBwLmNvbm5lY3QudHJ1c3RlZHNob3BzLmNvbQ==\u0026instanceId=djgwcm5oLWFmLm15c2hvcGlmeS5jb20=\u0026shop=v80rnh-af.myshopify.com","https:\/\/searchanise-ef84.kxcdn.com\/widgets\/shopify\/init.js?a=1g7I4c8g3n\u0026shop=v80rnh-af.myshopify.com"]; 316 for (var i = 0; i < urls.length; i++) { 317 var s = document.createElement('script'); 318 s.type = 'text/javascript'; 319 s.async = true; 320 s.src = urls[i]; 321 var x = document.getElementsByTagName('script')[0]; 322 x.parentNode.insertBefore(s, x); 323 } 324 }; 325 if(window.attachEvent) { 326 window.attachEvent('onload', asyncLoad); 327 } else { 328 window.addEventListener('load', asyncLoad, false); 329 } 330})();</script>
vendor: 1 bytes, line 330
330
331<script id="__st">var __st={"a":90810417531,"offset":7200,"reqid":"ccd1293e-0848-4e78-b196-6fac301051d1-1791081636","pageurl":"odiporo.de\/cart","u":"b6ec5763ec88","p":"cart"};</script>
vendor: 1 bytes, line 331
331
332<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 332
332
333<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:'Durch hCaptcha geschützt',privacyText:'Datenschutz',termsText:'Allgemeine Geschäftsbedingungen'},(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 333
333
334<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//odiporo.de/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 334
334
335<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 = "//odiporo.de/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>
335<script crossorigin="anonymous" defer="defer" src="//odiporo.de/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 335
335
336<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 336
336
337<script> 338 window.Shopify = window.Shopify || {}; 339 window.Shopify.MCP = window.Shopify.MCP || {}; 340 window.Shopify.MCP.enabled = true; 341 window.Shopify.MCP.shop = "v80rnh-af.myshopify.com"; 342 window.Shopify.MCP.mcpEndpoint = "https:\/\/odiporo.de\/api\/mcp"; 343 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"]}}]; 344</script>
vendor: 1 bytes, line 344
344
345<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("\/\/odiporo.de\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 346</script>
vendor: 1 bytes, line 346
346
347<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://odiporo.de/cdn/shopifycloud/portable-wallets/latest/portable-wallets.de.js",t.type="module",document.head.appendChild(t)}}; 348</script>
vendor: 1 bytes, line 348
348
349<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 350 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); 351</script>
vendor: 1 bytes, line 351
351
352<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})}})); 353</script>
vendor: 1 bytes, line 353
353
354<script id='scb4127' type='text/javascript' async='' src='https://odiporo.de/cdn/shopifycloud/privacy-banner/storefront-banner.js'></script>
354<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://odiporo.de/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 355<style id="shopify-accelerated-checkout-cart"> 356 #shopify-buyer-consent { 357 margin-top: 1em; 358 display: inline-block; 359 width: 100%; 360} 361 362#shopify-buyer-consent.hidden { 363 display: none; 364} 365 366#shopify-subscription-policy-button { 367 background: none; 368 border: none; 369 padding: 0; 370 text-decoration: underline; 371 font-size: inherit; 372 cursor: pointer; 373} 374 375#shopify-subscription-policy-button::before { 376 box-shadow: none; 377} 378 379 </style> 380
381<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
381 382 383
383<script src="//odiporo.de/cdn/shop/t/3/assets/vendor.js?v=83836565987576270061744817342" defer="defer"></script>
383 384
384<script src="//odiporo.de/cdn/shop/t/3/assets/theme.js?v=29274041475657875791757172179" defer="defer"></script>
384<script> 385 document.documentElement.classList.replace('no-js', 'js'); 386 387 window.theme = window.theme || {}; 388 theme.routes = { 389 shop_url: 'https://odiporo.de', 390 root_url: '/', 391 cart_url: '/cart', 392 cart_add_url: '/cart/add', 393 cart_change_url: '/cart/change', 394 cart_update_url: '/cart/update', 395 search_url: '/search', 396 predictive_search_url: '/search/suggest' 397 }; 398 399 theme.variantStrings = { 400 preOrder: "Vorbestellung", 401 addToCart: "In den Einkaufswagen legen", 402 soldOut: "Ausverkauft", 403 unavailable: "Nicht verfügbar", 404 addToBundle: "Zum Bundle hinzufügen", 405 backInStock: "Benachrichtigen Sie mich, wenn es verfügbar ist" 406 }; 407 408 theme.shippingCalculatorStrings = { 409 error: "Beim Abrufen der Versandtarife sind ein oder mehrere Fehler aufgetreten:", 410 notFound: "Wir liefern leider nicht an Ihre Adresse.", 411 oneResult: "Es gibt einen Versandtarif für Ihre Adresse:", 412 multipleResults: "Es gibt mehrere Versandtarife für Ihre Adresse:" 413 }; 414 415 theme.recipientFormStrings = { 416 expanded: "Formular für den Empfänger des Geschenkgutscheins erweitert", 417 collapsed: "Formular für den Empfänger des Geschenkgutscheins minimiert" 418 }; 419 420 theme.quickOrderListStrings = { 421 itemsAdded: "[quantity] Artikel hinzugefügt", 422 itemAdded: "[quantity] Artikel hinzugefügt", 423 itemsRemoved: "[quantity] Artikel entfernt", 424 itemRemoved: "[quantity] Artikel entfernt", 425 viewCart: "Warenkorb ansehen", 426 each: "[money]\/Stück", 427 minError: "Dieser Artikel hat ein Minimum von [min]", 428 maxError: "Dieser Artikel hat ein Maximum von [max]", 429 stepError: "Du kannst diesen Artikel nur in Abstufungen von [step] hinzufügen." 430 }; 431 432 theme.cartStrings = { 433 error: `Beim Aktualisieren deines Warenkorbs ist ein Fehler aufgetreten. Bitte versuche es erneut.`, 434 quantityError: `Du kannst deinem Warenkorb nur [quantity] Stück dieses Artikels hinzufügen.`, 435 }; 436 437 theme.dateStrings = { 438 d: "T", 439 day: "Tag", 440 days: "Tage", 441 h: "S", 442 hour: "Stunde", 443 hours: "Stunden", 444 m: "M", 445 minute: "Minute", 446 minutes: "Minuten", 447 s: "S", 448 second: "Sekunde", 449 seconds: "Sekunden" 450 };theme.strings = { 451 recentlyViewedEmpty: "Ihre zuletzt angesehenen Produkte sind leer.", 452 close: "SchlieÃen", 453 next: "Vorwärts", 454 previous: "Zurück", 455 qrImageAlt: "QR-Code â Scannen, um Geschenkgutschein einzulösen" 456 }; 457 458 theme.settings = { 459 moneyFormat: "â¬{{amount_with_comma_separator}}", 460 moneyWithCurrencyFormat: "â¬{{amount_with_comma_separator}} EUR", 461 currencyCodeEnabled: false, 462 externalLinksNewTab: false, 463 cartType: "drawer", 464 isCartTemplate: true, 465 pswpModule: "\/\/odiporo.de\/cdn\/shop\/t\/3\/assets\/photoswipe.min.js?v=41760041872977459911744817341", 466 themeName: 'Concept', 467 themeVersion: '4.1.0', 468 agencyId: '' 469 };</script>
469 470<meta name="google-site-verification" content="oXgyZf81eTvYPx2Im5JpetGnXQ6s1NhTnFvjBBLqmq8" /> 471<!-- BEGIN app block: shopify://apps/amazon-reviews/blocks/product-rating-snippet-embed/88ab28f3-a438-4eb3-a83e-f1a9c62c5069 --> 472 473 474 475<!-- END app block --><!-- BEGIN app block: shopify://apps/hulk-form-builder/blocks/app-embed/b6b8dd14-356b-4725-a4ed-77232212b3c3 --><!-- BEGIN app snippet: hulkapps-formbuilder-theme-ext -->
475<script type="text/javascript"> 476 477 if (typeof window.formbuilder_customer != "object") { 478 window.formbuilder_customer = {} 479 } 480 481 482 483 window.hulkFormBuilder = { 484 form_data: {"form_64N2MOqnj6GawputCWCQwA":{"uuid":"64N2MOqnj6GawputCWCQwA","form_name":"My Form","form_data":{"div_back_gradient_1":"#fff","div_back_gradient_2":"#fff","back_color":"#d8d1d1","form_title":"\u003ch2 style=\"text-align: center;\"\u003e\u003cstrong\u003eOrder Cancellation Form\u003c\/strong\u003e\u003c\/h2\u003e\n\u003cquillbot-extension-portal\u003e\u003c\/quillbot-extension-portal\u003e\u003cquillbot-extension-portal\u003e\u003c\/quillbot-extension-portal\u003e\u003cquillbot-extension-portal\u003e\u003c\/quillbot-extension-portal\u003e","form_submit":"Submit Cancellation Form","after_submit":"hideAndmessage","after_submit_msg":"","captcha_enable":"no","label_style":"inlineLabels","input_border_radius":"2","back_type":"color","input_back_color":"#fff","input_back_color_hover":"#fff","back_shadow":"none","label_font_clr":"#333333","input_font_clr":"#333333","button_align":"fullBtn","button_clr":"#fff","button_back_clr":"#333333","button_border_radius":"2","form_width":"600px","form_border_size":"2","form_border_clr":"#c7c7c7","form_border_radius":"1","label_font_size":"14","input_font_size":"12","button_font_size":"16","form_padding":"35","input_border_color":"#ccc","input_border_color_hover":"#ccc","btn_border_clr":"#333333","btn_border_size":"1","form_name":"My Form","form_description":"\u003cp style=\"text-align: center;\"\u003ePlease fill out the fields below to cancel your order.\u003c\/p\u003e\n\u003cquillbot-extension-portal\u003e\u003c\/quillbot-extension-portal\u003e\u003cquillbot-extension-portal\u003e\u003c\/quillbot-extension-portal\u003e\u003cquillbot-extension-portal\u003e\u003c\/quillbot-extension-portal\u003e","form_access_message":"\u
484003cp\u003ePlease login to access the form\u003cbr\u003eDo not have an account? Create account\u003c\/p\u003e","formElements":[{"Conditions":{},"type":"text","position":0,"label":"Order Number\/ID","page_number":1},{"Conditions":{},"type":"text","position":1,"label":"First Name","required":"yes","halfwidth":"yes","page_number":1},{"Conditions":{},"type":"text","position":2,"label":"Last Name","required":"yes","halfwidth":"yes","page_number":1},{"Conditions":{},"type":"email","position":3,"required":"yes","email_confirm":"yes","label":"Email Address","halfwidth":"no","page_number":1},{"Conditions":{},"type":"address","position":4,"label":"Address","page_number":1},{"Conditions":{},"type":"textarea","position":5,"label":"What is your reason for canceling? ","page_number":1}]},"is_spam_form":false,"shop_uuid":"3V4DRpazYs-jm-3e98wLgA","shop_timezone":"Europe\/Berlin","shop_id":138025,"shop_is_after_submit_enabled":false,"shop_shopify_plan":"Grow","shop_shopify_domain":"v80rnh-af.myshopify.com","popup_settings":{},"form_is_active":true},"form_72wWVIobEOG7TER4ZbeVqA":{"uuid":"72wWVIobEOG7TER4ZbeVqA","form_name":"Ihre Anfrage â wir beraten Sie persönlich","form_data":{"div_back_gradient_1":"#fff","div_back_gradient_2":"#fff","back_color":"#fff","form_title":"\u003ch2\u003eGesch\u0026auml;ftskundenanfrage\u003c\/h2\u003e\n","form_submit":"Absenden","after_submit":"hideAndmessage","after_submit_msg":"\u003cp\u003e\u003cstrong data-end=\"111\" data-start=\"95\"\u003eVielen Dank!\u003c\/strong\u003e\u003cbr data-end=\"114\" data-start=\"111\" \/\u003e\nWir haben deine Anfrage erhalten und melden uns in K\u0026uuml;rze bei dir.\u003c\/p\u003e\n","captcha_enable":"yes","label_style":"blockLabels","input_border_radius":"10","back_type":"transparent","input_back_color":"#fff","input_back_color_hover":"#fff","back_shadow":"none","label_font_clr":"#333333","input_font_clr":"#333333","button_align":"fullBtn","button_clr":"#fff","button_back_clr":"#333333","button_border_radius":"30","form_width":"100%","form_border_size":"1","form_border_clr":"#c7c7c7","form_border_radius":"20","label_font_size":"14","input_font_size":"12","button_font_size":"16","form_padding":"35","input_border_color":"#ccc","input_border_color_hover":"#ccc","btn_border_clr":"#333333","btn_border_size":"1","form_name":"Ihre Anfrage â wir beraten Sie persönlich","form_access_message":"\u
484003cp\u003ePlease login to access the form\u003cbr\u003eDo not have an account? Create account\u003c\/p\u003e","captcha_honeypot":"no","captcha_align":"left","captcha_lang":"de","captcha_version_3_enable":"no","input_fonts_type":"Google Fonts","formElements":[{"Conditions":{},"type":"text","position":0,"label":"Firma","halfwidth":"yes","page_number":1},{"Conditions":{},"type":"text","position":1,"label":"Name","halfwidth":"yes","required":"yes","page_number":1},{"type":"email","position":2,"label":"Email","required":"yes","email_confirm":"yes","Conditions":{},"page_number":1,"centerfield":"no","email_validate_field":"no"},{"Conditions":{},"type":"phone","position":3,"label":"Telefonummer","default_country_code":"Germany +49","phone_validate_field":"no","page_number":1},{"Conditions":{},"type":"multipleCheckbox","position":4,"label":"Produktinteresse","values":"TV - Fernseher\nMonitore\nE-Scooter\nLaufbänder\nSaugroboter\nSonstiges","elementCost":{},"align":"horizontal","required":"yes","other_for_multi_value":"yes","other_multi_checkbox_label":"Sonstige","page_number":1},{"Conditions":{},"type":"select","position":5,"label":"Bestimmtes Produkt","values":"aeco HARMONY HDX1 Hochgeschwindigkeits-Ionen-Haartrockner\naeco AirX - Flow 100 Ventilator\naeco AirX - SPIN Turmventilator\naeco DUO Doppelkammer AirFryer 9 Liter\naeco Touch Airfryer 5,7 Liter\naeco Compact Airfryer 4,3 Liter\naeco VacuBot X3\naeco VacuBot X5\naeco VacuBot X5 Plus\naeco Cube 2.0 Airfryer 2 Liter\nEufy S1 Pro\nEufy S1 Saug\/Wischroboter Mit All-in-One Station\nDyon Enter 32 Pro X2\nDyon Enter 40 PRO X2 FHD\nDyon Enter 24 Pro X2\nDyon Smart 24 VX HD\nDyon Smart 43 VX FHD\nDyon Movie Smart 32 VX\nDyon Movie Smart 40 VX-2\nDyon Movie Smart 24 VX\nDyon Enter 22 Pro X2\nDyon SMART 50 VX\nDyon Movie Smart 55 VX\nDyon Ultimax 32F-TI\nDyon Ultimax 43F-TI\nDyon Ultimax 50U-TI\nDyon Ultimax 55U-TI\nDyon Ultimax 24F-TI\nDyon Ultimax 24H-TI-W HD\nDyon Ultimax 32H-TI-W HD\nDYON Movie Smart 22 VX\nDYON ENTER 24 PRO-X-V\nDYON SMART 24 VX-V\nDYON nexGo 24H\nDYON Smart 32 VX\nDYON Movie Smart 32 VX-S\nDYON nexGo 32H\nDYON Ultimax 32H-TI-WS\nDYON Smart 40 VX-2\nDYON Ultimax 40F-TI\nDYON nexGo 40F\nDYON Movie Smart 43 VX\nDYON nexGo 43F\nDYON Movie Smart 50 VX\nDYON Movie Smart 50 VX-S\nDYON Smart 55 VX\nDYON Movie Smart 55 VX-2\nEureka NERE10S â 2-in-1 Saug-\u0026 Wischroboter Schwarz\nEureka J20 - 3in1 Saug\/ Wischroboter\nEureka E10S â 2-in-1 Saug-\u0026 Wischroboter WeiÃ\nEureka J12 Ultra Saug\/Wischroboter Schwarz\nEureka J12 Ultra Saug\/Wischroboter WeiÃ\nEureka J20 - 3in1 Saug\/ Wischroboter WeiÃ\nEureka E20 PLUS weià - 2 in 1 Saug\/Wischroboter mit Zyklon Absaugstation\nEureka E20 PLUS schwarz - 2 in 1 Saug\/Wischroboter mit Zyklon Absaugstation\nEureka J15 Pro Ultra Saug\/Wischroboter\nHUTT W8 Fensterputzroboter\nHUTT W9 Fensterputzroboter\nHUTT A1 Fensterputzroboter\nHUTT C7 Fensterputzroboter\nHUTT E+Universal 5000 mAh Akku für W8\/W9\/A1\nKingsmith Rutschfeste WalkingPad Laufband-Bodenmatte (Version II)\nKingsmith Neck Massage Kingsmith\nKingsmith WalkingPad C1 Klappbares Laufband\nKingsmith WalkingPad C2 Klappbares Laufband - weiÃ\nKingsmith WalkingPad C2 Klappbares Laufband - schwarz\nKingsmith WalkingPad P1 Klappbares Laufband für Schreibtisch\nKingsmith WalkingPad Z1 Klappbares Laufband für Schreibtisch\nKingsmith WalkingPad Z3 Hybrid+ Klappbares Laufband\nKingsmith WalkingPad A1 Pro Klappbares Laufband\nKingsmith WalkingPad R1 Pro\nKingsmith WalkingPad R1H\nKingsmith WalkingPad R2\nKingsmith WalkingPad R2H\nKingsmith WalkingPad MC11 Klappbares Laufband\nKingsmith WalkingPad MC21\nKingsmith WalkingPad X23\/MX16 Klappbares Laufband\nKingsmith WalkingPad X218 Klappbares Laufband\nKingsmith Klappbare Trainingsbank Multifunktion\nKEYi Premium Petbot mit Ladestation\nMolly\u0026Cody SPRING Water Fountain\nMolly\u0026Cody BALOU Futtermaschine\nMolly\u0026Cody LUCKY Futtermaschine\nMolly\u0026Cody SAMSON Tierhaarschneidemaschine\n1More ColorBuds 2 Bluetooth In-Ear Kopfhörer WeiÃ\nRoborock ZEO One - weià \/2in1 Wash \u0026 Dryer\nSharp Core S3 E-Scooter\nSharp Core S4 E-Scooter\nEureka J12 Ultra Saug\/Wischroboter\nEureka NERE10S â 2-in-1 Saug-\u0026 Wischroboter\nNIU KQi1 Pro E-Scooter\nNIU KQi2 Pro E-Scooter\nNIU KQi3 Pro E-Scooter\nNIU KQi3 Sport E-Scooter\nKingsmith WalkingPad C2 Klappbares Laufband\nKingsmith WalkingPad R1H\/R1 Pro 2IN1 Klappbares Laufband\nKingsmith WalkingPad R2\/R2H Walk\u0026Run 2IN1 Faltbares Laufband\nKingsmith WalkingPad G1 Klappbares Laufband mit Handläufen\nODYS i25-F-144\nODYS Q27-X\nODYS i27-F-144\nODYS XE34-UWQ-120\nOdys XP32 32 Zoll Curved Monitor WQHD\nOdys i27 27 Zoll Office \u0026 Gam
484ing Monitor\nOdys XP32-X 32 Zoll Curved Gaming Monitor\nOdys XP32 PRO-X 32 Zoll Curved Gaming Monitor\nOdys XP34 PRO-X 34 Zoll Curved Gaming Monitor\nOdys Q27 PRO-X 27 Zoll Curved Monitor WQHD\nOdys i27-Q-100 27 Zoll Flat Monitor WQHD\nOdys i27-Q-180 27 Zoll Flat Monitor WQHD\nOdys XP27-F-180 27 Zoll Curved Monitor\nOdys NEO e100 E-Scooter\nOdys PAX E-Scooter\nOdys ALPHA X5 PRO - E-Scooter\nOdys ALPHA X5 E Scooter\nOdys Phi X30 - E-Scooter\nOdys ULTRON i75 E-Scooter\nOdys FlexPump - Mobiler Mini Kompressor\nNIU KQi3 Pro Gold E-Scooter\nNIU KQi3 Pro Schwarz E-Scooter\nNIU KQi3 Sport Schwarz E-Scooter\nNIU KQi3 Sport Blau E-Scooter\nNIU KQi3 Sport Rot E-Scooter\nNIU KQi3 Sport Weià E-Scooter\nNIU KQi2 Pro Grau E-Scooter\nNIU KQi2 Pro Weià E-Scooter\nNIU KQi3 Max E-Scooter\nNIU KQi1 Pro Anthrazit E-Scooter\nNIU KQi1 Pro White E-Scooter\nNIU KQi 300X DE-BG E-Scooter\nNIU KQi 300P DE-BK E-Scooter\nNIU KQi 300P DE-WT E-Scooter\nNIU KQi100P Anthrazit E-Scooter\nNIU KQi100F Schwarz E-Scooter\nXiaomi Electric Scooter Storage Bag\nXiaomi Electric Scooter 4 Ultra\nXiaomi Electric Scooter 4 Lite Gen 2\nXiaomi Electric Scooter 5 MAX DE AX\nXiaomi Electric Scooter 5 PRO\nXiaomi Electric Scooter 5 DE AX\nXiaomi Electric Scooter Elite DE AX\nXiaomi Smart Doorbell 3\nXiaomi 12V Max Brushless Cordless Drill EU\nXiaomi Sports Fanny Pack\nXiaomi A27i Monitor 27 Zoll\nSonstiges","elementCost":{},"other_value":"yes","other_value_label":"Sonstiges","page_number":1},{"Conditions":{},"type":"textarea","position":6,"label":"Frage oder Nachricht","inputHeight":"100","page_number":1,"required":"yes"},{"Conditions":{},"type":"terms_conditions","position":7,"label":"Datenverarbeitung akzeptiert","checked":"no","infoMessage":"Mit dem Absenden meiner Anfrage erkläre ich mich damit einverstanden, dass meine oben angegebenen Daten von der odiporo GmbH an autorisierte Vertriebspartner weitergegeben werden dürfen. Diese dürfen mich per Post, Telefon und\/oder E-Mail kontaktieren, um mein Interesse an Produkten und Dienstleistungen der odiporo GmbH zu besprechen. Die Verarbeitung meiner Daten erfolgt gemäà den geltenden Datenschutzbestimmungen. Weitere Informationen findest du in unserer Datenschutzerklärung.","required":"yes","halfwidth":"no","page_number":1}]},"is_spam_form":false,"shop_uuid":"3V4DRpazYs-jm-3e98wLgA","shop_timezone":"Europe\/Berlin","shop_id":138025,"shop_is_after_submit_enabled":false,"shop_shopify_plan":"Grow","shop_shopify_domain":"v80rnh-af.myshopify.com","popup_settings":{},"form_is_active":true},"form_cfjl7Hus5DHEv6-DyZL3lQ":{"uuid":"cfjl7Hus5DHEv6-DyZL3lQ","form_name":"B2B-Anfrage","form_data":{"div_back_gradient_1":"#fff","div_back_gradient_2":"#fff","back_color":"#fff","form_title":"\u003ch3\u003eB2B \/\u003cbr \/\u003e\nGesch\u0026auml;ftskunden Anfrage\u003c\/h3\u003e\n","form_submit":"Senden","after_submit":"hideAndmessage","after_submit_msg":"\u003cp\u003eVielen Dank. Die Anfrage wurde erfolgreich \u0026uuml;bermittelt.\u003c\/p\u003e\n","captcha_enable":"yes","label_style":"blockLabels","input_border_radius":"10","back_type":"transparent","input_back_color":"#fff","input_back_color_hover":"#fff","back_shadow":"none","label_font_clr":"#333333","input_font_clr":"#333333","button_align":"fullBtn","button_clr":"#fff","button_back_clr":"#000000","button_border_radius":"30","form_width":"100%","form_border_size":0,"form_border_clr":"#000000","form_border_radius":"30","label_font_size":"15","input_font_size":"12","button_font_size":"16","form_padding":"10","input_border_color":"#ccc","input_border_color_hover":"#ccc","btn_border_clr":"#000000","btn_border_size":"1","form_name":"B2B-Anfrage","form_access_message":"\u
484003cp\u003ePlease login to access the form\u003cbr\u003eDo not have an account? Create account\u003c\/p\u003e","captcha_honeypot":"no","captcha_version_3_enable":"no","input_fonts_type":"System Fonts","label_fonts_type":"System Fonts","logged_in_users":"no","captcha_align":"left","captcha_lang":"de","formElements":[{"Conditions":{},"type":"text","position":0,"label":"Produktname","required":"yes","page_number":1},{"Conditions":{},"type":"number","position":1,"label":"Menge","minNumber":"1","required":"yes","page_number":1},{"type":"text","position":2,"label":"Name \/ Firma","customClass":"","halfwidth":"no","Conditions":{},"centerfield":"no","required":"yes","page_number":1},{"type":"email","position":3,"label":"Email","required":"yes","email_confirm":"yes","Conditions":{},"page_number":1},{"type":"textarea","position":4,"label":"Nachricht","required":"no","Conditions":{},"page_number":1,"inputHeight":"200"}]},"is_spam_form":false,"shop_uuid":"3V4DRpazYs-jm-3e98wLgA","shop_timezone":"Europe\/Berlin","shop_id":138025,"shop_is_after_submit_enabled":false,"shop_shopify_plan":"Grow","shop_shopify_domain":"v80rnh-af.myshopify.com","popup_settings":{},"form_is_active":true},"form_E5Os6jaNVGwNKNJbXL34IA":{"uuid":"E5Os6jaNVGwNKNJbXL34IA","form_name":"Geschäftskundenanfrage (B2B)","form_data":{"div_back_gradient_1":"#fff","div_back_gradient_2":"#fff","back_color":"#fff","form_title":"\u003ch2\u003e\u003cspan style=\"font-family:Arial;\"\u003eIhre Anfrage - wir beraten Sie gerne pers\u0026ouml;nlich.\u003c\/span\u003e\u003c\/h2\u003e\n","form_submit":"Jetzt beraten lassen","after_submit":"hideAndmessage","after_submit_msg":"\u003cp data-path-to-node=\"8\"\u003eVielen Dank f\u0026uuml;r Ihre Nachricht und Ihr Interesse an odiporo.de. Wir freuen uns, dass Sie den Weg zu uns gefunden haben.\u003c\/p\u003e\n\n\u003cp data-path-to-node=\"9\"\u003eOb smarte Elektronik f\u0026uuml;r Ihr Zuhause oder L\u0026ouml;sungen f\u0026uuml;r Ihr Unternehmen, Ihr Anliegen ist bei uns eingegangen und wird bereits bearbeitet.\u003c\/p\u003e\n\n\u003cp data-path-to-node=\"11\"\u003e\u003cb data-index-in-node=\"0\" data-path-to-node=\"11\"\u003eWie es weitergeht:\u003c\/b\u003e Wir pr\u0026uuml;fen Ihre Anfrage individuell. Sollten Sie spezifische Unterlagen, technische Datenbl\u0026auml;tter oder Unterst\u0026uuml;tzung bei der Ger\u0026auml;teauswahl ben\u0026ouml;tigen, bereiten unsere Produktspezialisten diese bereits f\u0026uuml;r Sie vor.\u003c\/p\u003e\n\n\u003cp data-path-to-node=\"12\"\u003eGewerbliche Projektanfragen aus dem B2B-Bereich leiten wir direkt an unsere pers\u0026ouml;nliche Fachbetreuung weiter, um Ihnen eine optimale und unkomplizierte Abwicklung zu garantieren.\u003c\/p\u003e\n\n\u003cp data-path-to-node=\"13\"\u003eWir melden uns in K\u0026uuml;rze bei Ihnen.\u003c\/p\u003e\n\n\u003cp data-path-to-node=\"14\"\u003eMit freundlichen Gr\u0026uuml;\u0026szlig;en\u003c\/p\u003e\n\n\u003cp data-path-to-node=\"15\"\u003e\u003cb data-index-in-node=\"0\" data-path-to-node=\"15\"\u003eIhr Team von odiporo.de\u003c\/b\u003e\u003c\/p\u003e\n","captcha_enable":"yes","label_style":"blockLabels","input_border_radius":"10","back_type":"transparent","input_back_color":"#fff","input_back_color_hover":"#fff","back_shadow":"none","label_font_clr":"#333333","input_font_clr":"#333333","button_align":"centerBtn","button_clr":"#fff","button_back_clr":"#333333","button_border_radius":"30","form_width":"100%","form_border_size":"1","form_border_clr":"#c7c7c7","form_border_radius":"20","label_font_size":"14","input_font_size":"12","button_font_size":"16","form_padding":"35","input_border_color":"#ccc","input_border_color_hover":"#ccc","btn_border_clr":"#333333","btn_border_size":"1","form_name":"Geschäftskundenanfrage (B2B)","form_access_message":"\u
484003cp\u003ePlease login to access the form\u003cbr\u003eDo not have an account? Create account\u003c\/p\u003e","captcha_honeypot":"no","captcha_align":"left","captcha_lang":"de","captcha_version_3_enable":"no","input_fonts_type":"Google Fonts","formElements":[{"Conditions":{},"type":"text","position":0,"label":"Firmenname","halfwidth":"yes","page_number":1,"required":"yes"},{"Conditions":{},"type":"text","position":1,"label":"Umsatzsteuer-ID (USt.-ID.)","page_number":1},{"Conditions":{},"type":"text","position":2,"label":"Ansprechpartner","halfwidth":"yes","required":"yes","page_number":1},{"type":"email","position":3,"label":"E-Mail Adresse","required":"yes","email_confirm":"yes","Conditions":{},"page_number":1,"centerfield":"no","email_validate_field":"no","halfwidth":"no"},{"Conditions":{},"type":"phone","position":4,"label":"Telefonummer (optional)","default_country_code":"Germany +49","phone_validate_field":"no","page_number":1,"required":"no"},{"Conditions":{},"type":"select","position":5,"label":"Ihre Branche (optional)","values":"Hotel \u0026 Tourismus\nBüro \u0026 Verwaltung\nIndustrie\nGastronomie\nFitnessstudio\nWiederverkäufer\nSonstiges","elementCost":{},"page_number":1},{"Conditions":{},"type":"select","position":6,"label":"Produktinteresse","required":"yes","values":"Fernseher\nMonitore\nFitness\nE-Scooter\nSaugroboter\nAir Fryer\nLuftreiniger\nHeizlüfter\nGPS-Tier-Tracker\nSonstiges","elementCost":{},"page_number":1},{"Conditions":{},"type":"textarea","position":7,"label":"Frage oder Nachricht","required":"yes","page_number":1},{"Conditions":{},"type":"terms_conditions","position":8,"label":"Datenverarbeitung akzeptiert","checked":"no","required":"yes","halfwidth":"no","page_number":1,"infoMessage":"Ich bin damit einverstanden, dass die odiporo GmbH meine Daten an autorisierte Vertriebspartner weitergibt, die mich per Post, Telefon oder E-Mail zu Produkten und Dienstleistungen kontaktieren dürfen. Weitere Informationen unter: https:\/\/odiporo.de\/policies\/privacy-policy"}]},"is_spam_form":false,"shop_uuid":"3V4DRpazYs-jm-3e98wLgA","shop_timezone":"Europe\/Berlin","shop_id":138025,"shop_is_after_submit_enabled":false,"shop_shopify_plan":"Grow","shop_shopify_domain":"v80rnh-af.myshopify.com","popup_settings":{},"form_is_active":true}}, 485 shop_data: {"shop_3V4DRpazYs-jm-3e98wLgA":{"shop_uuid":"3V4DRpazYs-jm-3e98wLgA","shop_timezone":"Europe\/Berlin","shop_id":138025,"shop_is_after_submit_enabled":false,"shop_shopify_plan":"Grow","shop_shopify_domain":"v80rnh-af.myshopify.com","shop_created_at":"2025-05-27T23:26:22.258Z","is_skip_metafield":false,"shop_deleted":false,"shop_disabled":false}}, 486 settings_data: {"shop_settings":{"shop_customise_msgs":[],"default_customise_msgs":{"is_required":"is required","thank_you":"Thank you! The form was submitted successfully.","processing":"Processing...","valid_data":"Please provide valid data","valid_email":"Provide valid email format","valid_tags":"HTML Tags are not allowed","valid_phone":"Provide valid phone number","valid_captcha":"Please provide a valid CAPTCHA response.","valid_url":"Provide valid URL","only_number_alloud":"Provide valid number in","number_less":"must be less than","number_more":"must be more than","image_must_less":"Image must be less than 20MB","image_number":"Images allowed","image_extension":"Invalid extension! Please provide image file","error_image_upload":"Error in image upload. Please try again.","error_file_upload":"Error in file upload. Please try again.","your_response":"Your response","error_form_submit":"Error occur.Please try again after sometime.","email_submitted":"Form with this email is already submitted","invalid_email_by_zerobounce":"The email address you entered appears to be invalid. Please check it and try again.","download_file":"Download file","card_details_invalid":"Your card details are invalid","card_details":"Card details","please_enter_card_details":"Please enter card details","card_number":"Card number","exp_mm":"Exp MM","exp_yy":"Exp YY","crd_cvc":"CVV","payment_value":"Payment amount","please_enter_payment_amount":"Please enter a payment amount.","address1":"Address line 1","address2":"Address line 2","city":"City","province":"Province","zipcode":"Zip code","country":"Country","blocked_domain":"This form does not accept addresses from","file_must_less":"File must be less than 20MB","file_extension":"Invalid extension! Please provide file","only_file_number_alloud":"files allowed","previous":"Previous","next":"Next","must_have_a_input":"Please enter at least one field.","please_enter_required_data":"Please enter required data","atleast_one_special_char":"Include at least one special character","atleast_one_lowercase_char":"Include at least one lowercase character","atleast_one_uppercase_char":"Include at least one uppercase character","atleast_one_number":"Include at least one number","must_have_8_chars":"Must have 8 characters long","be_between_8_and_12_chars":"Be between 8 and 12 characters long","please_select":"Please Select","phone_submitted":"Form with this phone number is already submitted","user_res_parse_error":"Error while submitting the form","valid_same_values":"values must be the same","product_choice_clear_selection":"Clear Selection","picture_choice_clear_selection":"Clear Selection","remove_all_for_file_image_upload":"Remove All","invali
486d_file_type_for_image_upload":"You can't upload files of this type.","invalid_file_type_for_signature_upload":"You can't upload files of this type.","max_files_exceeded_for_file_upload":"You can not upload any more files.","max_files_exceeded_for_image_upload":"You can not upload any more files.","file_already_exist":"File already uploaded","max_limit_exceed":"You have added the maximum number of text fields.","cancel_upload_for_file_upload":"Cancel upload","cancel_upload_for_image_upload":"Cancel upload","cancel_upload_for_signature_upload":"Cancel upload"}}}, 487 features_data: {"shop_plan_features":{"shop_plan_features":["unlimited-forms","full-design-customization","export-form-submissions","multiple-recipients-for-form-submissions","multiple-admin-notifications","enable-captcha","unlimited-file-uploads","save-submitted-form-data","set-auto-response-message","conditional-logic","form-banner","save-as-draft-facility","include-user-response-in-admin-email","disable-form-submission","mail-platform-integration","stripe-payment-integration","pre-built-templates","create-customer-account-on-shopify","google-analytics-3-by-tracking-id","facebook-pixel-id","bing-uet-pixel-id","advanced-js","advanced-css","api-available","customize-form-message","hidden-field","restrict-from-submissions-per-one-user","utm-tracking","ratings","privacy-notices","heading","paragraph","shopify-flow-trigger","domain-setup","block-domain","address","html-code","form-schedule","after-submit-script","customize-form-scrolling","on-form-submission-record-the-referrer-url","password","duplicate-the-forms","include-user-response-in-auto-responder-email","elements-add-ons","admin-and-auto-responder-email-with-tokens","email-export","premium-support","google-analytics-4-by-measurement-id","google-ads-for-tracking-conversion","validation-field","load_form_as_popup","advanced_conditional_logic","forms-limit","submissions-visibility-limit","approve-or-decline-submission","product-choice","ticket-system","emoji-feedback","multi-line-text","iamge-choice","image-display","file-upload","slack-integration","google-sheets-integration","multi-page-form","access-only-for-logged-in-users","zapier-integration","add-tags-for-existing-customers","restrict-from-submissions-per-phone-number","multi-column-text","booking","zerobounce-integration","form-layout-image"]}}, 488 shop: null, 489 shop_id: null, 490 plan_features: null, 491 validateDoubleQuotes: false, 492 assets: { 493 searchableDropdown: "https://cdn.shopify.com/extensions/01a08a53-1431-71a3-8d75-dd04d3c69aa4/form-builder-by-hulkapps-74/assets/searchable-dropdown.js", 494 extraFunctions: "https://cdn.shopify.com/extensions/01a08a53-1431-71a3-8d75-dd04d3c69aa4/form-builder-by-hulkapps-74/assets/extra-functions.js", 495 extraStyles: "https://cdn.shopify.com/extensions/01a08a53-1431-71a3-8d75-dd04d3c69aa4/form-builder-by-hulkapps-74/assets/extra-styles.css", 496 bootstrapStyles: "https://cdn.shopify.com/extensions/01a08a53-1431-71a3-8d75-dd04d3c69aa4/form-builder-by-hulkapps-74/assets/theme-app-extension-bootstrap.css", 497 }, 498 translations: { 499 htmlTagNotAllowed: "HTML Tags are not allowed", 500 sqlQueryNotAllowed: "SQL Queries are not allowed", 501 doubleQuoteNotAllowed: "Double quotes are not allowed", 502 503 maxTextFieldsReached: "You have added the maximum number of text fields.", 504 505 506 507 zerobounceApiErrorMsg: "We couldn\u0026#39;t verify your email due to a technical issue. Please try again later.", 508 } 509 510 } 511 512 513 514 window.FbThemeAppExtSettingsHash = {} 515 516</script>
516<!-- END app snippet --><!-- END app block --><!-- BEGIN app block: shopify://apps/judge-me-reviews/blocks/judgeme_core/61ccd3b1-a9f2-4160-9fe9-4fec8413e5d8 --><!-- Start of Judge.me Core --> 517 518 519 520 521 522 523 524<link rel="dns-prefetch" href="https://cdn.judge.me"> 525<link rel="dns-prefetch" href="https://cdn1.judge.me"> 526<link rel="dns-prefetch" href="https://api.judge.me"> 527
528<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":"Keine Bewertungen","badge_n_reviews_text":"{{ n }} Bewertung/Bewertungen","hide_badge_preview_if_no_reviews":true,"badge_hide_text":false,"enforce_center_preview_badge":false,"widget_title":"Kundenbewertungen","widget_open_form_text":"Bewertung schreiben","widget_close_form_text":"Bewertung abbrechen","widget_refresh_page_text":"Seite aktualisieren","widget_summary_text":"Basierend auf {{ number_of_reviews }} Bewertung/Bewertungen","widget_no_review_text":"Schreiben Sie die erste Bewertung","widget_name_field_text":"Anzeigename","widget_verified_name_field_text":"Verifizierter Name (öffentlich)","widget_name_placeholder_text":"Anzeigename","widget_required_field_error_text":"Dieses Feld ist erforderlich.","widget_email_field_text":"E-Mail-Adresse","widget_verified_email_field_text":"Verifizierte E-Mail (privat, kann nicht bearbeitet werden)","widget_email_placeholder_text":"Ihre E-Mail-Adresse","widget_email_field_error_text":"Bitte geben Sie eine gültige E-Mail-Adresse ein.","widget_rating_field_text":"Bewertung","widget_review_title_field_text":"Bewertungstitel","widget_review_title_placeholder_text":"Geben Sie Ihrer Bewertung einen Titel","widget_review_body_field_text":"Bewertungsinhalt","widget_review_body_placeholder_text":"Beginnen Sie hier zu schreiben...","widget_pictures_field_text":"Bild/Video (optional)","widget_submit_review_text":"Bewertung abschicken","widget_submit_verified_review_text":"Verifizierte Bewertung abschicken","widget_submit_success_msg_with_auto_publish":"Vielen Dank! Bitte aktualisieren Sie die Seite in wenigen Momenten, um Ihre Bewertung zu sehen. Sie können Ihre Bewertung entfernen oder bearbeiten, indem Sie sich bei \u003ca href='https://judge.me/login' target='_blank' rel='nofollow noopener'\u003eJudge.me\u003c/a\u003e anmelden","widget_submit_success_msg_no_auto_publish":"Vielen Dank! Ihre Bewertung wird veröffentlicht, sobald sie vom Shop-Administrator genehmigt wurde. Sie können Ihre Bewertung entfernen oder bearbeiten, indem Sie sich bei \u003ca href='https://judge.me/login' target='_blank' rel='nofollow noopener'\u003eJudge.me\u003c/a\u003e anmelden","widget_show_default_reviews_out_of_total_text":"Es werden {{ n_reviews_shown }} von {{ n_reviews }} Bewertungen angezeigt.","widget_show_all_link_text":"Alle anzeigen","widget_show_less_link_text":"Weniger anzeigen","widget_author_said_text":"{{ reviewer_name }} sagte:","widget_days_text":"vor {{ n }} Tag/Tagen","widget_weeks_text":"vor {{ n }} Woche/Wochen","widget_months_text":"vor {{ n }} Monat/Monaten","widget_years_text":"vor {{ n }} Jahr/Jahren","widget_yesterday_text":"Gestern","widget_today_text":"Heute","widget_replied_text":"\u003e\u003e {{ shop_name }} antwortete:","widget_read_more_text":"Mehr lesen","widget_reviewer_name_as_initial":"","widget_rating_filter_color":"#fbcd0a","widget_rating_filter_see_all_text":"Alle Bewertungen anzeigen","widget_sorting_most_recent_text":"Neueste","widget_sorting_highest_rating_text":"Höchste Bewertung","widget_sorting_lowest_rating_text":"Niedrigste Bewertung","widget_sorting_with_pictures_text":"Nur Bilder","widget_sorting_most_helpful_text":"Hilfreichste","widget_open_question_form_text":"Eine Frage stellen","widget_reviews_subtab_text":"Bewertungen","widget_questions_subtab_text":"Fragen","widget_question_label_text":"Frage","widget_answer_label_text":"Antwort","widget_question_placeholder_text":"Schreiben Sie hier Ihre Frage","widget_submit_question_text":"Frage absenden","widget_question_submit_success_text":"Vielen Dank für Ihre Frage! Wir werden Sie benachrichtigen, sobald sie beantwortet wird.","verified_badge_text":"Verifiziert","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":"(auÃerhalb des Shops)","all_reviews_pagination":100,"all_reviews_product_name_prefix_text":"über","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":"Produktbewertungen","widget_shop_reviews_subtab_text":"Shop-Bewertungen","widget_other_products_reviews_text":"Be
528wertungen für andere Produkte","widget_store_reviews_subtab_text":"Shop-Bewertungen","widget_product_variant_reference_text":"Bewertung für","widget_no_store_reviews_text":"Dieser Shop hat noch keine Bewertungen erhalten","widget_web_restriction_product_reviews_text":"Dieses Produkt hat noch keine Bewertungen erhalten","widget_no_items_text":"Keine Elemente gefunden","widget_show_more_text":"Mehr anzeigen","widget_write_a_store_review_text":"Shop-Bewertung schreiben","widget_product_and_store_reviews_text":"Produkt- und Shop-Bewertungen","widget_reviews_in_collection_text":"Bewertungen in dieser Kollektion","widget_other_languages_heading":"Bewertungen in anderen Sprachen","widget_translate_review_text":"Bewertung übersetzen nach {{ language }}","widget_translating_review_text":"Ãbersetzung läuft...","widget_show_original_translation_text":"Original anzeigen ({{ language }})","widget_translate_review_failed_text":"Bewertung konnte nicht übersetzt werden.","widget_translate_review_retry_text":"Erneut versuchen","widget_translate_review_try_again_later_text":"Versuchen Sie es später noc
528h einmal","show_product_url_for_grouped_product":false,"widget_sorting_pictures_first_text":"Bilder zuerst","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":"â
Bewertungen","floating_tab_title":"Lassen Sie Kunden für uns sprechen","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":"Kunden bewerten uns mit {{ shop.metafields.judgeme.all_reviews_rating | round: 1 }}/5 basierend auf {{ shop.metafields.judgeme.all_reviews_count }} Bewertungen.","all_reviews_text_badge_text_branded_style":"{{ shop.metafields.judgeme.all_reviews_rating | round: 1 }} von 5 Sternen basierend auf {{ shop.metafields.judgeme.all_reviews_count }} Bewertungen","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":"Lassen Sie Kunden für uns sprechen","testimonials_carousel_title":"Kunden sagen uns","videos_carousel_title":"Echte Kunden-Geschichten","cards_carousel_title":"Kunden sagen uns","featured_carousel_count_text":"aus {{ n }} Bewertungen","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":false,"mute_video_by_default":false,"widget_sorting_videos_first_text":"Videos zuerst","widget_review_pending_text":"Ausstehend","featured_carousel_items_for_large_screen":3,"social_share_options_order":"Facebook,Twitter","remove_microdata_snippet":false,"disable_json_ld":false,"enable_json_ld_products":false,"preview_badge_show_question_text":false,"preview_badge_no_question_text":"Keine Fragen","preview_badge_n_question_text":"{{ number_of_questions }} Frage/Fragen","qa_badge_show_icon":false,"qa_badge_position":"same-row","remove_judgeme_branding":false,"widget_add_search_bar":false,"widget_search_bar_placeholder":"Suchen","widget_sorting_verified_only_text":"Nur verifizierte","widget_sorting_most_relevant_text":"Relevanteste","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":"Mehr Bewertungen lesen","featured_carousel_view_product_button_text":"Produkt ansehen","all_reviews_page_load_reviews_on":"scroll","all_reviews_page_load_more_text":"Mehr Bewertungen laden","disable_fb_tab_reviews":false,"enable_ajax_cdn_cache":false,"widget_advanced_speed_features":5,"widget_public_name_text":"wird öffentlich angezeigt wie","default_reviewer_name":"John Smith","default_reviewer_name_has_non_latin":true,"widget_reviewer_anonymous":"Anonym","medals_widget_title":"Judge.me Bewertungsmedaillen","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":"Keine YouTube-Video-URL","widget_max_length_field_error_text":"Bitte geben Sie nicht mehr als {0} Zeichen ein.","widget_show_country_flag":false,"widget_show_collected_via_shop_app":true,"widget_verified_by_shop_badge_style":"light","widget_verified_by_shop_text":"Verifiziert vom Shop","widget_show_photo_gallery":false,"widget_load_with_code_splitting":true,"widget_ugc_install_preference":false,"widget_ugc_title":"Von uns hergestellt, von Ihnen geteilt","widget_ugc_subt
528itle":"Markieren Sie uns, um Ihr Bild auf unserer Seite zu sehen","widget_ugc_arrows_color":"#ffffff","widget_ugc_primary_button_text":"Jetzt kaufen","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":"Mehr laden","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":"Bewertungen ansehen","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":"#108474","widget_enable_secondary_color":false,"widget_secondary_color":"#edf5f5","widget_summary_average_rating_text":"{{ average_rating }} von 5","widget_media_grid_title":"Kundenfotos \u0026 -videos","widget_media_grid_see_more_text":"Mehr sehen","widget_round_style":false,"widget_show_product_medals":true,"widget_verified_by_judgeme_text":"Verifiziert von Judge.me","widget_show_store_medals":true,"widget_verified_by_judgeme_text_in_store_medals":"Verifiziert von Judge.me","widget_media_field_exceed_quantity_message":"Entschuldigung, wir können nur {{ max_media }} für eine Bewertung akzeptieren.","widget_media_field_exceed_limit_message":"{{ file_name }} ist zu groÃ, bitte wählen Sie ein {{ media_type }} kleiner als {{ size_limit }}MB.","widget_review_submitted_text":"Bewertung abgesendet!","widget_question_submitted_text":"Frage abgesendet!","widget_close_form_text_question":"Abbrechen","widget_write_your_answer_here_text":"Schreiben Sie hier Ihre Antwort","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":"gesammelt von Judge.me","widget_pagination_type":"standard","widget_load_more_text":"Mehr laden","widget_load_more_color":"#108474","widget_full_review_text":"Vollständige Bewertung","widget_read_more_reviews_text":"Mehr Bewertungen lesen","widget_read_questions_text":"Fragen lesen","widget_questions_and_answers_text":"Fragen \u0026 Antworten","widget_verified_by_text":"Verifiziert von","widget_verified_text":"Verifiziert","widget_number_of_reviews_text":"{{ number_of_reviews }} Bewertungen","widget_back_button_text":"Zurück","widget_next_button_text":"Weiter","widget_custom_forms_filter_button":"Filter","custom_forms_style":"horizontal","widget_show_review_information":false,"how_reviews_are_collected":"Wie werden Bewertungen gesammelt?","widget_show_review_keywords":false,"widget_gdpr_statement":"Wie wir Ihre Daten verwenden: Wir kontaktieren Sie nur bezüglich der von Ihnen abgegebenen Bewertung und nur, wenn nötig. Durch das Absenden Ihrer Bewertung stimmen Sie den \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eNutzungsbedingungen\u003c/a\u003e, der \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eDatenschutzrichtlinie\u003c/a\u003e und den \u003ca href='https://judge.me/content-policy' target='_blank' rel='nofollow noopener'\u003eInhaltsrichtlinien\u003c/a\u003e von Judge.me zu.","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":"#108474","show_product_variant":false,"all_reviews_product_variant_label_text":"Variante: ","widget_show_verified_branding":true,"widget_ai_summary_title":"Kunden sagen","widget_ai_summary_disclaimer":"KI-gestützte Bewertungszusammenfassung basierend auf aktuellen Kundenbewertungen","widget_show_ai_summary":false,"widget_show_ai_summary_bg":false,"write_review_button_visibility":"everyone","store_summary_widget_heading":"Kunden bewerten die
528sen Shop","store_summary_widget_button_text":"Kundenbewertungen ansehen","store_summary_widget_button_theme_text":"KI-Bewertungszusammenfassung ansehen","widget_show_review_title_input":false,"widget_autofill_review_title":true,"redirect_reviewers_invited_via_email":"external_form","request_store_review_after_product_review":false,"request_review_other_products_in_order":false,"review_form_color_scheme":"default","review_form_corner_style":"square","review_form_star_color":"#108474","review_form_text_color":"#333333","review_form_background_color":"#ffffff","review_form_field_background_color":"#fafafa","review_form_button_color":"#108474","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":"Wie würden Sie dieses Produkt bewerten?","review_content_introduction_text":"Wir würden uns freuen, wenn Sie etwas über Ihre Erfahrung teilen würden.","store_review_form_title_text":"Wie würden Sie diesen Shop bewerten?","store_review_form_introduction_text":"Wir würden uns freuen, wenn Sie etwas über Ihre Erfahrung teilen würden.","show_review_guidance_text":true,"one_star_review_guidance_text":"Schlecht","five_star_review_guidance_text":"GroÃartig","customer_information_screen_title_text":"Ãber Sie","customer_information_introduction_text":"Bitte teilen Sie uns mehr über sich mit.","custom_questions_screen_title_text":"Ihre Erfahrung im Detail","custom_questions_introduction_text":"Hier sind einige Fragen, die uns helfen, mehr über Ihre Erfahrung zu verstehen.","review_submitted_screen_title_text":"Vielen Dank für Ihre Bewertung!","review_submitted_screen_thank_you_text":"Wir verarbeiten sie und sie wird bald im Shop erscheinen.","review_submitted_screen_email_verification_text":"Bitte bestätigen Sie Ihre E-Mail-Adresse, indem Sie auf den Link klicken, den wir Ihnen gerade gesendet haben. Dies hilft uns, die Bewertungen authentisch zu halten.","confirm_email_screen_title_text":"Bestätigen Sie Ihre E-Mail","confirm_email_screen_message_text":"Um Bewertungen authentisch zu halten, senden wir Ihnen einen sicheren Link zum Weiterschreiben Ihrer Bewertung. Es dauert nur einen Moment.","check_email_screen_title_text":"Ãberprüfen Sie Ihre E-Mail","check_email_screen_message_text":"Wir haben Ihnen eine E-Mail an {{ email }} gesendet. Klicken Sie auf die Schaltfläche in der E-Mail, um fortzufahren.","check_email_screen_resend_message_text":"E-Mail erneut gesendet!","check_email_resend_hint_text":"E-Mail nicht erhalten? Ãberprüfen Sie Ihren Spam-Ordner oder [senden Sie die E-Mail erneut].","verification_email_rate_limit_error_text":"Sie haben das Limit für Bewertungsversuche für dieses Produkt erreicht. Bitte überprüfen Sie Ihren Posteingang oder versuchen Sie es später erneut.","review_submitted_request_store_review_text":"Möchten Sie Ihre Erfahrung beim Einkaufen bei uns teilen?","review_submitted_review_other_products_text":"Möchten Sie diese Produkte bewerten?","store_review_screen_title_text":"Möchten Sie Ihre Erfahrung mit uns teilen?","store_review_introduction_text":"Wir würden uns freuen, wenn Sie etwas über Ihre Erfahrung teilen würden.","reviewer_media_screen_title_picture_text":"Bild teilen","reviewer_media_introduction_picture_text":"Laden Sie ein Foto hoch, um Ihre Bewertung zu unterstützen.","reviewer_media_screen_title_video_text":"Video teilen","reviewer_media_introduction_video_text":"Laden Sie ein Video hoch, um Ihre Bewertung zu unterstützen.","reviewer_media_screen_title_picture_or_video_text":"Bild oder Video teilen","reviewer_media_introduction_picture_or_video_text":"Laden Sie ein Foto oder Video hoch, um Ihre Bewertung zu unterstützen.","reviewer_media_youtube_url_text":"Fügen Sie hier Ihre Youtube-URL ein","advanced_settings_next_step_button_text":"Weiter","advanced_settings_close_review_button_text":"SchlieÃen","modal_write_review_flow":true,"write_review_flow_required_text":"Erforderlich","write_review_flow_privacy_message_text":"Wir respektieren Ihre Privatsphäre.","write_review_flow_anonymous_text":"Be
528wertung als anonym","write_review_flow_visibility_text":"Dies wird nicht für andere Kunden sichtbar sein.","write_review_flow_multiple_selection_help_text":"Wählen Sie so viele aus, wie Sie möchten","write_review_flow_single_selection_help_text":"Wählen Sie eine Option","write_review_flow_required_field_error_text":"Dieses Feld ist erforderlich","write_review_flow_invalid_email_error_text":"Bitte geben Sie eine gültige E-Mail-Adresse ein","write_review_flow_max_length_error_text":"Max. {{ max_length }} Zeichen.","write_review_flow_media_upload_text":"\u003cb\u003eZum Hochladen klicken\u003c/b\u003e oder ziehen und ablegen","write_review_flow_gdpr_statement":"Wir kontaktieren Sie nur bei Bedarf bezüglich Ihrer Bewertung. Mit dem Absenden Ihrer Bewertung stimmen Sie unseren \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eGeschäftsbedingungen\u003c/a\u003e und unserer \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eDatenschutzrichtlinie\u003c/a\u003e zu.","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":"Erzählen Sie uns mehr","negative_review_resolution_text":"Ihre Erfahrung ist uns wichtig. Falls es Probleme mit Ihrem Kauf gab, sind wir hier, um zu helfen. Zögern Sie nicht, uns zu kontaktieren, wir würden gerne die Gelegenheit haben, die Dinge zu korrigieren.","negative_review_resolution_button_text":"Kontaktieren Sie uns","negative_review_resolution_proceed_with_review_text":"Hinterlassen Sie eine Bewertung","negative_review_resolution_subject":"Problem mit dem Kauf von {{ shop_name }}.{{ order_name }}","coupon_promo_intro_any_review_text":"Schreiben Sie eine Bewertung und erhalten Sie einen Gutschein über {{ amount }} Rabatt auf Ihren nächsten Einkauf","coupon_promo_intro_with_photo_text":"Schreiben Sie eine Bewertung und fügen Sie ein Foto oder Video hinzu, um einen Gutschein über {{ amount }} Rabatt auf Ihren nächsten Einkauf zu erhalten","coupon_promo_intro_with_video_text":"Schreiben Sie eine Bewertung und fügen Sie ein Video hinzu, um einen Gutschein über {{ amount }} Rabatt auf Ihren nächsten Einkauf zu erhalten","coupon_promo_intro_up_to_any_review_text":"Schreiben Sie eine Bewertung und erhalten Sie einen Gutschein über bis zu {{ amount }} Rabatt auf Ihren nächsten Einkauf","coupon_promo_intro_up_to_with_photo_text":"Schreiben Sie eine Bewertung und fügen Sie ein Foto oder Video hinzu, um einen Gutschein über bis zu {{ amount }} Rabatt auf Ihren nächsten Einkauf zu erhalten","coupon_promo_intro_external_text":"Schreiben Sie eine Bewertung und erhalten Sie eine Belohnung für Ihren nächsten Einkauf","coupon_promo_intro_external_with_photo_text":"Schreiben Sie eine Bewertung und fügen Sie ein Foto oder Video hinzu, um eine Belohnung für Ihren nächsten Einkauf zu erhalten","coupon_promo_intro_external_with_video_text":"Schreiben Sie eine Bewertung und fügen Sie ein Video hinzu, um eine Belohnung für Ihren nächsten Einkauf zu erhalten","coupon_promo_media_photo_text":"Fügen Sie ein Foto oder Video hinzu und erhalten Sie einen Gutschein über {{ amount }} Rabatt auf Ihren nächsten Einkauf","coupon_promo_media_photo_only_text":"Fügen Sie ein Foto hinzu und erhalten Sie einen Gutschein über {{ amount }} Rabatt auf Ihren nächsten Einkauf","coupon_promo_media_video_text":"Fügen Sie ein Video hinzu und erhalten Sie einen Gutschein über {{ amount }} Rabatt auf Ihren nächsten Einkauf","coupon_promo_media_external_photo_text":"Fügen Sie ein Foto oder Video hinzu und erhalten Sie eine Belohnung für Ihren nächsten Einkauf","coupon_promo_media_external_photo_only_text":"Fügen Sie ein Foto hinzu und erhalten Sie eine Belohnung für Ihren nächsten Einkauf","coupon_promo_media_external_video_text":"Fügen Sie ein Video hinzu und erhalten Sie eine Belohnung für Ihren nächsten Einkauf","coupon_promo_success_text":"Sie haben einen Gutschein für Ihren nächsten Einkauf bei {{ shop_name }} erhalten!","coupon_promo_success_subtext":"Sie erhalten Ihre Gutschein-E-Mail innerhalb einer Stunde.","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":"Be
528wertung gesammelt durch eine Einladung zum Shop","transparency_badges_from_another_provider_text":"Bewertung gesammelt von einem anderen Anbieter","transparency_badges_collected_from_store_visitor_text":"Bewertung gesammelt von einem Shop-Besucher","transparency_badges_written_in_google_text":"Bewertung in Google geschrieben","transparency_badges_written_in_etsy_text":"Bewertung in Etsy geschrieben","transparency_badges_written_in_shop_app_text":"Bewertung in Shop App geschrieben","transparency_badges_earned_reward_text":"Bewertung erhielt eine Belohnung für zukünftige Bestellungen","product_review_widget_per_page":10,"widget_other_languages_reviews_per_page":3,"widget_store_review_label_text":"Shop-Bewertung","widget_cart_mode_aggregate_heading_text":"Kunden bewerten diesen Shop","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":false,"review_widget_qna_enabled":false,"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_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":"Bewertung","review_widget_review_word_plural":"Bewertungen","review_widget_voting_label":"Hilfreich?","review_widget_shop_reply_label":"Antwort von {{ shop_name }}:","review_widget_filters_title":"Filter","review_widget_filter_rating_title":"Bewertung","review_widget_filter_keyword_title":"Stichwort","review_widget_clear_filters_text":"Filter löschen","review_widget_expand_more_text":"Mehr","review_widget_review_highlights_title":"Bewertungs-Highlights","qna_widget_question_word_singular":"Frage","qna_widget_question_word_plural":"Fragen","qna_widget_answer_reply_label":"Antwort von {{ answerer_name }}:","qna_content_screen_title_text":"Frage dieses Produkts stellen","qna_widget_question_required_field_error_text":"Bitte geben Sie Ihre Frage ein.","qna_widget_flow_gdpr_statement":"Wir kontaktieren Sie nur bei Bedarf bezüglich Ihrer Frage. Mit dem Absenden Ihrer Frage stimmen Sie unseren \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eGeschäftsbedingungen\u003c/a\u003e und unserer \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eDatenschutzrichtlinie\u003c/a\u003e zu.","qna_widget_question_submitted_text":"Danke für Ihre Frage!","qna_widget_close_form_text_question":"SchlieÃen","qna_widget_question_submit_success_text":"Wir werden Ihnen per E-Mail informieren, wenn wir Ihre Frage beantworten.","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_
528number_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":"Kundenbewertungen","all_reviews_widget_v2025_ai_summary_title":"Kunden sagen über diesen Shop","all_reviews_widget_v2025_no_review_text":"Schreiben Sie die erste Bewertung","all_reviews_widget_v2025_review_highlights_title":"Bewertungs-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":"Von unseren Kunden","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":"Unterstützt von Judge.me","locale":"en","reply_name":"odiporo.de - Smarte Elektronik für jeden Anspruch","shop_currency":"EUR","widget_version":"3.0","footer":true,"autopublish":false,"review_dates":true,"enable_custom_form":false,"shop_locale":"de","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_shop_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":false,"rtl_stars_enabled_ar":true,"rtl_stars_enabled_he":true,"reply_name_text":"odiporo.de - Smarte Elektronik für jeden Anspruch"};</script>
528 <style class='jdgm-settings-style'>.jdgm-xx{left:0}:root{--jdgm-primary-color: #108474;--jdgm-secondary-color: rgba(16,132,116,0.1);--jdgm-star-color: #108474;--jdgm-write-review-text-color: white;--jdgm-write-review-bg-color: #108474;--jdgm-paginate-color: #108474;--jdgm-border-radius: 0;--jdgm-reviewer-name-color: #108474}.jdgm-histogram__bar-content{background-color:#108474}.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:#108474}.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:"Mehr sehen"}@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:"Mehr sehen"}}.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:'über'}.jdgm-rev__variant-label:before{content:'Variante: '}.jdgm-rev__out-of-store-text:before{content:'(auÃerhalb des Shops)'}@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: #108474;--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:#108474}.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:'odiporo.de - Smarte Elektronik für jeden Anspruch'}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-full-rev__product-button{border-radius:calc( 8px * 6 )} 529</style> <style class='jdgm-settings-style'></style> 530 531 532 533 534 <style class='jdgm-miracle-styles'> 535 @-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
535/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} 536 537</style> 538 539 540 541 542 543 544 545 546
547<script data-cfasync='false' class='jdgm-script'> 548!function(e){window.jdgm=window.jdgm||{}; 549/* INF-1976 */ 550var _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;}(); 551if(_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;} 552jdgm.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/", 553jdgm.docReady=function(d){(e.attachEvent?"complete"===e.readyState:"loading"!==e.readyState)? 554setTimeout(d,0):e.addEventListener("DOMContentLoaded",d)},jdgm.loadCSS=function(d,t,o,a){ 555!o&&jdgm.loadCSS.requestedUrls.indexOf(d)>=0||(jdgm.loadCSS.requestedUrls.push(d), 556(a=e.createElement("link")).rel="stylesheet",a.class="jdgm-stylesheet",a.media="nope!", 557a.href=d,a.onload=function(){this.media="all",t&&setTimeout(t)},e.body.appendChild(a))}, 558jdgm.loadCSS.requestedUrls=[],jdgm.loadJS=function(e,d){var t=new XMLHttpRequest; 559t.onreadystatechange=function(){4===t.readyState&&t.status>=200&&t.status<300&&(Function(t.response)(),d&&d(t.response))}, 560t.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( 561".jdgm-widget, .jdgm-all-reviews-page").length>0)&&(jdgmSettings.widget_load_with_code_splitting? 562parseFloat(jdgmSettings.widget_version)>=3?jdgm.loadCSS(jdgm.CDN_BASE_URL+"widget_v3_base.css"): 563jdgm.loadCSS(jdgm.CDN_BASE_URL+"widget_base.css"):jdgm.loadCSS(jdgm.CDN_BASE_URL+"shopify_v2.css") 564)}))}(document); 565</script>
565 566<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> 567 568<!-- BEGIN app snippet: theme_fix_tags -->
568<script> 569 (function() { 570 var jdgmThemeFixes = null; 571 if (!jdgmThemeFixes) return; 572 573 // "All themes" fix: CSS and JS applied on every theme. CSS is injected 574 // before the per-theme fix so the theme-specific CSS wins the cascade. 575 // HTML is never applied globally (too risky). 576 var allThemesFix = jdgmThemeFixes['all']; 577 if (allThemesFix && allThemesFix.css) { 578 var allStyleTag = document.createElement('style'); 579 allStyleTag.classList.add('jdgm-theme-fix-style-all'); 580 allStyleTag.innerHTML = allThemesFix.css; 581 document.head.append(allStyleTag); 582 }; 583 584 if (allThemesFix && allThemesFix.js) { 585 var allScriptTag = document.createElement('script'); 586 allScriptTag.classList.add('jdgm-theme-fix-script-all'); 587 allScriptTag.innerHTML = allThemesFix.js; 588 document.head.append(allScriptTag); 589 }; 590 591 var thisThemeFix = jdgmThemeFixes[Shopify.theme.id]; 592 if (!thisThemeFix) return; 593 594 if (thisThemeFix.html) { 595 document.addEventListener("DOMContentLoaded", function() { 596 var htmlDiv = document.createElement('div'); 597 htmlDiv.classList.add('jdgm-theme-fix-html'); 598 htmlDiv.innerHTML = thisThemeFix.html; 599 document.body.append(htmlDiv); 600 }); 601 }; 602 603 if (thisThemeFix.css) { 604 var styleTag = document.createElement('style'); 605 styleTag.classList.add('jdgm-theme-fix-style'); 606 styleTag.innerHTML = thisThemeFix.css; 607 document.head.append(styleTag); 608 }; 609 610 if (thisThemeFix.js) { 611 var scriptTag = document.createElement('script'); 612 scriptTag.classList.add('jdgm-theme-fix-script'); 613 scriptTag.innerHTML = thisThemeFix.js; 614 document.head.append(scriptTag); 615 }; 616 })(); 617</script>
617 618<!-- END app snippet --> 619<!-- End of Judge.me Core --> 620 621 622 623<!-- END app block --><!-- BEGIN app block: shopify://apps/ta-labels-badges/blocks/bss-pl-config-data/91bfe765-b604-49a1-805e-3599fa600b24 -->
623<script 624 id='bss-pl-config-data' 625 data-nosnippet 626> 627 let TAE_StoreId = "66168"; 628 if (typeof BSS_PL == 'undefined' || TAE_StoreId !== "") { 629 var BSS_PL = {}; 630 BSS_PL.storeId = 66168; 631 BSS_PL.currentPlan = "free"; 632 BSS_PL.apiServerProduction = "https://product-labels.tech-arms.io"; 633 BSS_PL.publicAccessToken = "69fb7e281c40886d881224d0ab04299c"; 634 BSS_PL.customerTags = "null"; 635 BSS_PL.customerId = "null"; 636 BSS_PL.storeIdCustomOld = 10678; 637 BSS_PL.storeIdOldWIthPriority = 12200; 638 BSS_PL.storeIdOptimizeAppendLabel = 59637 639 BSS_PL.optimizeCodeIds = null; 640 BSS_PL.extendedFeatureIds = null; 641 BSS_PL.watermarkRemoved = null; 642 BSS_PL.watermarkGoliveConfigId = 747; 643 BSS_PL.watermarkUrl = "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-watermark.png"; 644 BSS_PL.integration = {"laiReview":{"status":0,"config":[]}} || {}; 645 BSS_PL.settingsData = {} || {}; 646 BSS_PL.configProductMetafields = [] || []; 647 BSS_PL.configVariantMetafields = [] || []; 648 649 BSS_PL.configData = [].concat(); 650 651 652 BSS_PL.configDataBanner = [].concat(); 653 654 655 BSS_PL.configDataPopup = [].concat(); 656 657 658 BSS_PL.configDataLabelGroup = [].concat(); 659 660 661 BSS_PL.collectionID = ``; 662 BSS_PL.collectionHandle = ``; 663 BSS_PL.collectionTitle = ``; 664 665 666 BSS_PL.conditionConfigData = [].concat(); 667 } 668</script>
668 669 670 671 672
672<script id='fixBugForStore66168' data-nosnippet> 673 674function bssFixSupportProductParent($, page, parents, itemHandle) { 675 return parents.filter(function () { 676 return !( 677 // $(this).is(".card-grid .card .product-card__media") || 678 $(this).is(".product__thumbnail") || 679 $(this).is("figure.media.media--transparent") || 680 $(this).is(".product-sticky-form__variant .media") || 681 $(this).is(".dynamic-image-wrapper picture") || 682 $(this).is(".rte") || 683 $(this).is(".rte .brand-logo-snippet > a") || 684 $(this).is(".product-form-wrapper ~ .flex.justify-between.items-center .items-center") || 685 $(this).is(".footer__logo > a") || 686 $(this).is("cart-drawer .horizontal-product__media") 687 ); 688 }); 689} 690 691function bssFixSupportAppendHtmlLabel($, BSS_PL, parent, page, htmlLabel) { 692 let appended = false; 693 if($(parent).is(".product__media-container .product__media")){ 694 $(parent).css("position", "relative").append(htmlLabel); 695 appended = true; 696 } 697 698 if($(parent).is(".snize-product")){ 699 $(parent).find(".snize-thumbnail").css("position", "relative").append(htmlLabel); 700 appended = true; 701 } 702 if ($(parent).is(".horizontal-products .horizontal-product")) { 703 $(parent).find(".horizontal-product__media").append(htmlLabel); 704 appended = true; 705 } 706 707 if ($(parent).is(".product-card__details .horizontal-product")) { 708 $(parent).find(".horizontal-product__media").append(htmlLabel); 709 appended = true; 710 } 711 return appended; 712} 713 714function bssFixSupportElementImage($, img, parent, page) { 715 // Write code here 716 if($(parent).is(".product__media-container .product__media")){ 717 img = $(parent); 718 } 719 720 if($(parent).is(".snize-product")){ 721 img = $(parent).find(".snize-thumbnail img"); 722 } 723 724 if ($(parent).is(".horizontal-products .horizontal-product")) { 725 img = $(parent).find(".horizontal-product__media"); 726 } 727 728 return img; 729} 730 731function bssFixSupportReInitLabel($, BSS_PL, firstLoadProduct, checkPageFly, initCollectionLabel, initBadge) { 732 // Write code here 733 const input = document.querySelector("search-drawer .search__form .search__field > input"); 734 let idTimeOut = null; 735 736 function observeSearchResults() { 737 const target = document.querySelector("#snize-instant-search-results .snize-ac-results-singlecolumn-list"); 738 // if (!target) return console.warn("Chưa thấy danh sách kết quả."); 739 740 const observer = new MutationObserver(() => { 741 const preOrderItem = target.querySelector(".snize-product"); 742 // console.log("preOrderItem", preOrderItem) 743 if (preOrderItem) { 744 if (idTimeOut) clearTimeout(idTimeOut); 745 idTimeOut = setTimeout(() => { 746 BSS_PL.firstLoad = true; 747 BSS_PL.init(); 748 }, 888); 749 } 750 }); 751 752 observer.observe(target, { 753 childList: true, 754 subtree: true, 755 }); 756 } 757 758 if (input) { 759 input.addEventListener("input", (e) => { 760 observeSearchResults(); 761 }); 762 } else { 763 // console.warn("Không tìm thấy input."); 764 } 765 766 $(document).on('click', '.cart-drawer-button', function() { 767 let resizeTimeout; 768 clearTimeout(resizeTimeout); 769 resizeTimeout = setTimeout(() => { 770 document.querySelectorAll('.horizontal-products .bss_pl_img').forEach(el => el.remove()); 771 document.querySelectorAll('.horizontal-products [data-bss-pl="active"]').forEach(el => { 772 el.setAttribute('data-bss-pl', 'none'); 773 }); 774 if (typeof BSS_PL !== 'undefined') { 775 BSS_PL.firstLoad = true; 776 BSS_PL.init(); 777 } 778 }, 100); 779 }); 780 781 782 return { firstLoadProduct, checkPageFly }; 783} 784 785function bssFixSupportTurnOffAutoAppendLabel() { 786 return false; 787} 788 789 </script>
789 790 791 792<style> 793 794 795 796</style> 797
798<script data-nosnippet> 799 function bssLoadScripts(src, callback, isDefer = false) { 800 const scriptTag = document.createElement('script'); 801 document.head.appendChild(scriptTag); 802 scriptTag.src = src; 803 if (isDefer) { 804 scriptTag.defer = true; 805 } else { 806 scriptTag.async = true; 807 } 808 if (callback) { 809 scriptTag.addEventListener('load', function () { 810 callback(); 811 }); 812 } 813 } 814 const scriptUrls = [ 815 "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-init-helper.js", 816 "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-init-config-run-scripts.js", 817 ]; 818 Promise.all(scriptUrls.map((script) => new Promise((resolve) => bssLoadScripts(script, resolve)))).then((res) => { 819 console.log('BSS scripts loaded'); 820 window.bssScriptsLoaded = true; 821 }); 822 823 function bssInitScripts() { 824 if (BSS_PL.configData.length) { 825 const enabledFeature = [ 826 { type: 1, script: "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-init-for-label.js" }, 827 { type: 2, badge: [0, 7, 8], script: "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-init-for-badge-product-name.js" }, 828 { type: 2, badge: [1, 11], script: "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-init-for-badge-product-image.js" }, 829 { type: 2, badge: 2, script: "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-init-for-badge-custom-selector.js" }, 830 { type: 2, badge: [3, 9, 10], script: "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-init-for-badge-price.js" }, 831 { type: 2, badge: 4, script: "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-init-for-badge-add-to-cart-btn.js" }, 832 { type: 2, badge: 5, script: "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-init-for-badge-quantity-box.js" }, 833 { type: 2, badge: 6, script: "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-init-for-badge-buy-it-now-btn.js" } 834 ] 835 .filter(({ type, badge }) => BSS_PL.configData.some(item => item.label_type === type && (badge === undefined || (Array.isArray(badge) ? badge.includes(item.badge_type) : item.badge_type === badge))) || (BSS_PL.configDataLabelGroup && BSS_PL.configDataLabelGroup.length)) 836 .map(({ script }) => script); 837 838 enabledFeature.forEach((src) => bssLoadScripts(src)); 839 840 if (enabledFeature.length) { 841 const src = "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-product-label-js.js"; 842 bssLoadScripts(src); 843 } 844 } 845 846 if (BSS_PL.configDataBanner && BSS_PL.configDataBanner.length) { 847 const src = "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-product-label-banner.js"; 848 bssLoadScripts(src); 849 } 850 851 if (BSS_PL.configDataPopup && BSS_PL.configDataPopup.length) { 852 const src = "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-product-label-popup.js"; 853 bssLoadScripts(src); 854 } 855 856 if (window.location.search.includes('bss-pl-custom-selector')) { 857 const src = "https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-product-label-custom-position.js"; 858 bssLoadScripts(src, null, true); 859 } 860 } 861 bssInitScripts(); 862</script>
862 863 864 865<!-- END app block --><!-- BEGIN app block: shopify://apps/kor-order-limit-quantity/blocks/app-embed/143c1e59-4c01-4de6-ad3e-90b86ada592d --> 866 867 868<!-- BEGIN app snippet: mc-checkout -->
868<script type="text/javascript"> 869 870 const mcLimitKORData1 = {"priority":{"default_priority":["VARIANT_LIMIT","PRODUCT_LIMIT","COLLECTION_MIN_MAX","PRODUCT_TAG_LIMIT","TAG_LIMIT","GLOBAL_LIMIT"],"cart_amount":["CART_LIMIT","AMOUNT_LIMIT","TAGS_AMOUNT_LIMIT","TOTAL_WEIGHT"]},"config":{"override_amount":null},"messages":{"upper_limit_msg":"Du kannst maximal \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e Stück von \u003cstrong\u003e{%-product_title-%}\u003c\/strong\u003e kaufen.","lower_limit_msg":"You Need to Purchase at least \u003cstrong\u003e{%-limit-%} \u003c\/strong\u003e Qty of \u003cstrong\u003e{%-product_title-%}\u003c\/strong\u003e.","increment_limit_msg":"You can buy \u003cstrong\u003e{%-product_title-%}\u003c\/strong\u003e in multiples of \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e.","lifetime_limit_msg":"Du kannst maximal \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e Stück von \u003cstrong\u003e{%-product_title-%}\u003c\/strong\u003e kaufen."},"global":{"info":{"min_limit":1,"max_limit":5}},"products":{"info":[]}}; 871 872 873 const mcLimitKORData2 = {"locale_messages":{"default":{"general_min_message":"You Need to Purchase at least \u003cstrong\u003e{%-limit-%} \u003c\/strong\u003e Qty of \u003cstrong\u003e{%-product_title-%}\u003c\/strong\u003e.","general_max_message":"Du kannst maximal \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e Stück von \u003cstrong\u003e{%-product_title-%}\u003c\/strong\u003e kaufen.","general_multiply_message":"You can buy \u003cstrong\u003e{%-product_title-%}\u003c\/strong\u003e in multiples of \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e.","general_lifetime_message":"Du kannst maximal \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e Stück von \u003cstrong\u003e{%-product_title-%}\u003c\/strong\u003e kaufen.","order_amt_tag_min_message":"","order_amt_tag_max_message":"","weight_min_message":"","weight_max_message":"","product_tag_min_message":"Minimum quantity allowed for this product is \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e.","product_tag_max_message":"Maximum quantity allowed for this product is \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e.","product_tag_multiply_message":"Quantity must be a multiple of \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e.","product_tag_future_message":"Lifetime quantity limit for this product is \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e.","cart_min_message":"Total limit must be \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e to proceed with the checkout.","cart_max_message":"Pro Bestellung sind maximal 5 Stück möglich.","order_amt_min_message":"","order_amt_max_message":""}},"collections":{"info":[]},"tags":[],"modelDesign":"\u003cstyle\u003e.modal-content-custom{background-color:#fefefe;border:1px solid #888;color:#000000;font-size:15px;}\u003c\/style\u003e"}; 874 875 876 const mcLimitKORData3 = {"collectionsProducts":{"info":[]},"variants":{"info":[]},"product_tags":{"info":[]},"cart":{"info":{"id":505,"min_limit":null,"max_limit":5,"min_limit_message":"Total limit must be \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e to proceed with the checkout.","max_limit_message":"Pro Bestellung sind maximal 5 Stück möglich."}},"amount":{"info":null},"weight":{"info":null,"message":{"min_weight_message":null,"max_weight_message":null,"product_tag_min_message":"Minimum quantity allowed for this product is \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e.","product_tag_max_message":"Maximum quantity allowed for this product is \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e.","product_tag_multiply_message":"Quantity must be a multiple of \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e.","product_tag_future_message":"Lifetime quantity limit for this product is \u003cstrong\u003e{%-limit-%}\u003c\/strong\u003e."}}}; 877 878 const mcLimitKORData = { ...mcLimitKORData1, ...mcLimitKORData2, ...mcLimitKORData3 }; 879 880 const mcKorAppSettings = {"plan":2,"hasFreeImpression":false,"disable_add_to_cart":false,"designType":"ALERT","lifetime_limit":{"life_span_type":0,"life_span_days":0,"end_date":null,"start_date":null,"interval":{"date":null,"interval":"custom","custom_days":1}},"pPage":[]}; 881 882 // For add to cart button Click 883 var template = "cart"; 884 function jqueryCode() { 885 if (template == 'product') { 886 document.addEventListener('DOMContentLoaded', () => { 887 $('button[name="add"], .btn-addtocart, .buy-buttons__buttons [data-component="button-action"], .add-to-cart, button[data-action="add-to-cart"], button[type="submit"][data-add-to-cart-text]').click(function (e, options) { 888 options = options || {}; 889 if (!options.eventTrigger) { 890 e.preventDefault(); 891 if (addToCartEventStopPropogation.includes(Shopify.shop)) { 892 e.stopImmediatePropagation(); 893 } 894 CheckOnAddToCart().then(function (res) { 895 if (res.msg != '') { 896 showMessage(res.msg); 897 } else { 898 if (Shopify.shop == "urbanbaristas.myshopify.com") { 899 $('form[action^="/cart/add"]').submit(); 900 } else { 901 $(e.target).trigger("click", { eventTrigger: true }); 902 } updateNumberOfProductLimit(res.qty); 903 } 904 }); 905 } 906 }); 907 if (typeof mcKorAppSettings != "undefined" && (mcKorAppSettings?.pPage?.addToCart && mcKorAppSettings?.pPage?.addToCart != "")) { 908 $(mcKorAppSettings?.pPage?.addToCart).click(function (e, options) { 909 options = options || {}; 910 if (!options.eventTrigger) { 911 e.preventDefault(); 912 if (addToCartEventStopPropogation.includes(Shopify.shop)) { 913 e.stopImmediatePropagation(); 914 } 915 CheckOnAddToCart().then(function (res) { 916 if (res.msg != '') { 917 showMessage(res.msg); 918 } else { 919 $(e.target).trigger("click", { eventTrigger: true }); 920 updateNumberOfProductLimit(res.qty); 921 } 922 }); 923 } 924 }); 925 } 926 }); 927 } 928 } 929 930 function CheckOnAddToCart() { 931 return new Promise(function (resolve) { 932 jQuery.getJSON("/cart.js", function (cartItems) { 933 934 var res = window.mcproductresponse.data; 935 var msg = ''; 936 var globalMsg = ''; 937 let variantMsg = ""; 938 var collectionMsg = ''; 939 var tagMsg = ''; 940 var is_global_limit = false, 941 is_product_limit = false, 942 is_number_collection_limit = false, 943 is_tag_limit = false, 944 is_variant_limit = false, 945 is_product_tag_limit = false;
946 var productMsg = ''; 947 var productTagMsg = ''; 948 //var productData = $('form[action^="/cart/add"], form[action$="/cart/add"]').serializeArray(); 949 var productId = product_id, 950 variantId = '', 951 qty = '', 952 variantqty = '', 953 collectionqty = ''; 954 955 var productData = $('form[action^="/cart/add"], form[action$="/cart/add"]').serializeArray(); 956 if (mcKorAppSettings?.pPage?.fmSelecotor) { 957 productData = $(mcKorAppSettings?.pPage?.fmSelecotor).serializeArray(); 958 } 959 960 // get variant id 961 const queryString = window.location.search; 962 const urlParams = new URLSearchParams(queryString); 963 const variant_id = urlParams.get('variant'); 964 965 productData.map((product) => { 966 if (product.name == 'quantity') { 967 qty = variantqty = collectionqty = parseInt(product.value, 10); 968 } else if (product.name == 'id') { 969 variantId = product.value; 970 } 971 }) 972 973 cartItems.items.map((item) => { 974 if (productId == item.product_id) { 975 qty = parseInt(item.quantity, 10) + qty; 976 } 977 if (variantId == item.id) { 978 variantqty = parseInt(item.quantity, 10) + variantqty; 979 } 980 }) 981 982 if (res?.tag?.info) { 983 var tagMaxQty = res.tag.info.max_limit; 984 var tagMinQty = res.tag.info.min_limit; 985 if (tagMinQty != 0 && tagMinQty && tagMaxQty != 0 && tagMaxQty) { 986 is_tag_limit = true; 987 if (qty > tagMaxQty) { 988 tagMsg = res.tag.message.upper_limit_msg; 989 } else if (qty < tagMinQty) { 990 tagMsg = res.tag.message.lower_limit_msg; 991 } 992 } 993 } 994 995 if (res?.number_of_product_limit?.length > 0) { 996 is_number_collection_limit = true; 997 res.number_of_product_limit.map(collection => { 998 if (collectionqty > collection.remaining_max_qty) { 999 collectionMsg = collection.max_msg; 1000 } 1001 }) 1002 } 1003 1004 1005 if (variantId && res?.variants?.length > 0) {
1006 res.variants.forEach((variant) => { 1007 if (variant.info.id == variantId) { 1008 let min_qty = variant.info.lower_limit; 1009 let max_qty = variant.info.purchase_limit; 1010 if (max_qty != null && max_qty != 0 && max_qty && min_qty != null && min_qty != 0 && min_qty) { 1011 is_variant_limit = true; 1012 if (variantqty > max_qty) { 1013 variantMsg = variant.message.upper_limit_msg; 1014 } else if (variantqty < min_qty) { 1015 variantMsg = variant.message.lower_limit_msg; 1016 } 1017 } 1018 } 1019 }); 1020 } 1021 1022 if (res?.product?.info) { 1023 var maxQty = res.product.info.purchase_limit; 1024 var minQty = res.product.info.min_purchase_limit; 1025 // var lifetimeQty = res.product.info.life_time_limit || 0; 1026 1027 var lifetimeQty = res.product.info?.remainingQty; 1028 var remainingQty = res.product.info?.remainingQty; 1029 1030 if (minQty != 0 && minQty && maxQty != 0 && maxQty) { 1031 is_product_limit = true; 1032 if (lifetimeQty != null && lifetimeQty != undefined && qty > remainingQty) { 1033 productMsg = res.product.message.lifetime_limit_msg; 1034 } else if (qty > maxQty) { 1035 productMsg = res.product.message.upper_limit_msg; 1036 } else if (qty < minQty) { 1037 productMsg = res.product.message.lower_limit_msg; 1038 } 1039 } 1040 } 1041 1042 if (res?.product_tag?.info) { 1043 var maxQty = res.product_tag.info.max_limit; 1044 var minQty = res.product_tag.info.min_limit; 1045 1046 var lifetimeQty = res.product_tag.info?.remainingQty; 1047 var remainingQty = res.product_tag.info?.remainingQty; 1048 1049 if (minQty != 0 && minQty && maxQty != 0 && maxQty) { 1050 is_product_tag_limit = true; 1051 if (lifetimeQty != null && lifetimeQty != undefined && qty > remainingQty) { 1052 productTagMsg = res.product_tag.message.future_limit_msg; 1053 } else if (qty > maxQty) { 1054 productTagMsg = res.product_tag.message.upper_limit_msg; 1055 } else if (qty < minQty) { 1056 productTagMsg = res.product_tag.message.lower_limit_msg; 1057 } 1058 } 1059 } 1060 1061 if (res?.global?.info && Object.keys(res.global.message).length > 0) { 1062 var globalMaxQty = res.global.info.global_limit; 1063 var globalMinQty = res.global.info.min_global_limit; 1064 // is_product_check = 1 -> check against product-level qty (this product across all its 1065 // variants); 0/null/undefined -> existing variant-level qty (this variant only). 1066 var globalQty = res.global.info.is_product_check ? qty : variantqty; 1067 1068 if (globalMaxQty != null && globalMinQty != null) { 1069 is_global_limit = true; 1070 if (globalQty > globalMaxQty) { 1071 globalMsg = res.global.message.upper_limit_msg; 1072 } else if (globalQty < globalMinQty) { 1073 globalMsg = res.global.message.lower_limit_msg; 1074 } 1075 } 1076 } 1077 1078 if (res?.priority) { 1079 for (const [key, value] of Object.entries(res.priority)) { 1080 if ((value == "COLLECTION_MIN_MAX" || value == "PRODUCT_LIMIT") && is_product_limit) { 1081 msg = productMsg; 1082 break; 1083 } 1084 if (value == "PRODUCT_TAG_LIMIT" && is_product_tag_limit) { 1085 msg = productTagMsg; 1086 break; 1087 } 1088 if (value == "VARIANT_LIMIT" && is_variant_limit) { 1089 msg = variantMsg; 1090 break; 1091 } 1092 if (value == "GLOBAL_LIMIT" && is_global_limit) { 1093 msg = globalMsg; 1094 break; 1095 } 1096 if (value == "TAG_LIMIT" && is_tag_limit) { 1097 msg = tagMsg; 1098 break; 1099 } 1100 } 1101 } 1102 1103 if (is_number_collection_limit) { 1104 if (msg) { 1105 msg += "<br>" + collectionMsg; 1106 } else { 1107 msg = collectionMsg; 1108 } 1109 } 1110 1111 var response = { 1112 msg: msg, 1113 qty: collectionqty 1114 } 1115 resolve(response); 1116 }); 1117 }) 1118 } 1119 1120 function updateNumberOfProductLimit(qty) { 1121 qty = parseInt(qty, 10); 1122 var res = window.mcproductresponse.data; 1123 if (res?.number_of_product_limit.length > 0) { 1124 res?.number_of_product_limit.map(collection => { 1125 collection.remaining_max_qty = parseInt(collection.remaining_max_qty - qty, 10); 1126 }) 1127 } 1128 window.mcproductresponse.data = res; 1129 } 1130</script>
1130<!-- END app snippet --><!-- BEGIN app snippet: mc-product -->
1130<script> 1131 function mcKorGetDateRangeFromLifeSpan(ctx) { 1132 const now = new Date(); 1133 1134 // Helpers scoped inside 1135 function startOfDay(date) { 1136 return new Date(date.getFullYear(), date.getMonth(), date.getDate()); 1137 } 1138 1139 function endOfDay(date) { 1140 return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999); 1141 } 1142 1143 function startOfWeek(date) { 1144 const d = new Date(date); 1145 const day = d.getDay(); 1146 const diff = d.getDate() - day + (day === 0 ? -6 : 1); // Monday as start 1147 return startOfDay(new Date(d.setDate(diff))); 1148 } 1149 1150 function endOfWeek(date) { 1151 const start = startOfWeek(date); 1152 return endOfDay(new Date(start.getFullYear(), start.getMonth(), start.getDate() + 6)); 1153 } 1154 1155 function startOfMonth(date) { 1156 return new Date(date.getFullYear(), date.getMonth(), 1); 1157 } 1158 1159 function endOfMonth(date) { 1160 return new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59, 999); 1161 } 1162 1163 function startOfYear(date) { 1164 return new Date(date.getFullYear(), 0, 1); 1165 } 1166 1167 function endOfYear(date) { 1168 return new Date(date.getFullYear(), 11, 31, 23, 59, 59, 999); 1169 } 1170 1171 // Main logic 1172 if (ctx.life_span_type === 2) { 1173 const startDate = startOfDay(new Date(now.getFullYear(), now.getMonth(), now.getDate() - ctx.life_span_days)); 1174 const endDate = endOfDay(now); 1175 return [startDate, endDate]; 1176 } 1177 1178 if (ctx.life_span_type === 4) { 1179 const startDate = endOfDay(new Date(ctx.start_date)); 1180 const endDate = startOfDay(new Date(ctx.end_date)); 1181 const currentDate = now; 1182 1183 if (currentDate < startDate || currentDate > endDate) { 1184 return [null, null]; 1185 } 1186 1187 return [startDate, endDate]; 1188 } 1189 1190 if (ctx.life_span_type === 5) { 1191 const intervalSetting = ctx.user_interval; 1192 if (!intervalSetting) return [null, null]; 1193 1194 const interval = intervalSetting.interval; 1195 1196 if (interval === "day") { 1197 return [startOfDay(now), endOfDay(now)]; 1198 } 1199 1200 if (interval === "week") { 1201 return [startOfWeek(now), endOfWeek(now)]; 1202 } 1203 1204 if (interval === "month") { 1205 return [startOfMonth(now), endOfMonth(now)]; 1206 } 1207 1208 if (interval === "year") { 1209 return [startOfYear(now), endOfYear(now)]; 1210 } 1211 1212 if (["10", "20", "30", "custom"].includes(interval)) { 1213 let days = 1; 1214 let start = new Date(); 1215 1216 if (intervalSetting.date) { 1217 start = new Date(intervalSetting.date); 1218 } 1219 1220 if (["10", "20", "30"].includes(interval)) { 1221 days = parseInt(interval, 10); 1222 } else if (interval === "custom") { 1223 days = parseInt(intervalSetting.custom_days || 1, 10); 1224 } 1225 1226 const now = new Date(); 1227 if (now < start) return [null, null]; 1228 1229 const diffDays = Math.floor((now - start) / (1000 * 60 * 60 * 24)); 1230 const multiplier = Math.floor(diffDays / days); 1231 1232 if (multiplier >= 1) { 1233 start.setDate(start.getDate() + multiplier * days); 1234 } 1235 1236 const end = new Date(start); 1237 end.setDate(start.getDate() + days); 1238 1239 return [startOfDay(start), endOfDay(end)]; 1240 } 1241 } 1242 1243 return [null, null]; 1244 } 1245 1246 function mcKorAnalyzeOrdersByDateRange(orders, startDate, endDate) { 1247 let total_order_amount = 0; 1248 let order_product_data = {}; 1249 let order_variant_data = {}; 1250 1251 orders.forEach(order => { 1252 const orderDate = new Date(order.created_at); 1253 if (startDate && endDate && orderDate >= startDate && orderDate <= endDate) { 1254 total_order_amount += order.total_price; 1255 1256 order.line_items.forEach(item => { 1257 // Count product quantity 1258 if (!order_product_data[item.product_id]) { 1259 order_product_data[item.product_id] = 0; 1260 } 1261 order_product_data[item.product_id] += item.quantity; 1262 1263 // Count variant quantity 1264 if (!order_variant_data[item.variant_id]) { 1265 order_variant_data[item.variant_id] = 0; 1266 } 1267 order_variant_data[item.variant_id] += item.quantity; 1268 }); 1269 } 1270 }); 1271 1272 return { 1273 total_order_amount, 1274 order_product_data, 1275 order_variant_data 1276 }; 1277 } 1278</script>
1278 1279 1280 1281<!-- END app snippet --><!-- BEGIN app snippet: mc-limit -->
1281<script> 1282 if (typeof jQuery == 'undefined') { 1283 var headTag = document.getElementsByTagName("head")[0]; 1284 var jqTag = document.createElement('script'); 1285 jqTag.type = 'text/javascript'; 1286 jqTag.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js'; 1287 jqTag.defer = 'defer'; 1288 headTag.appendChild(jqTag); 1289 } 1290</script>
vendor: 1 bytes, line 1290
1290
1291<script src="https://magecomp.us/js/LimitQtyHelper.js" defer></script>
1291 1292 1293<div> 1294 1295 <style> 1296 .close-custom { 1297 color: #aaa; 1298 float: right; 1299 font-size: 28px; 1300 font-weight: 700; 1301 margin-right: 4px; 1302 margin-top: -3px; 1303 position: absolute; 1304 top: 0; 1305 right: 0; 1306 } 1307 </style> 1308 1309 1310 1311 <style> 1312 /*.d-none { 1313 display: none !important; 1314 }*/ 1315 1316 .modal-custom { 1317 display: none; 1318 position: fixed; 1319 z-index: 10000; 1320 left: 0; 1321 top: 0; 1322 width: 100%; 1323 height: 100%; 1324 overflow: auto; 1325 background-color: #000; 1326 background-color: rgba(0, 0, 0, .4) 1327 } 1328 1329 1330 .modal-content-custom { 1331 background-color: #fefefe; 1332 margin: 15% auto; 1333 padding: 25px; 1334 border: 1px solid #888; 1335 width: fit-content; 1336 position: relative; 1337 } 1338 1339 1340 .close-custom:focus, 1341 .close-custom:hover { 1342 color: #000; 1343 text-decoration: none; 1344 cursor: pointer 1345 } 1346 1347 #mc-loader { 1348 display: none; 1349 position: fixed; 1350 left: 50%; 1351 top: 50%; 1352 z-index: 10000; 1353 width: 150px; 1354 height: 150px; 1355 margin: -75px 0 0 -75px; 1356 border: 16px solid #f3f3f3; 1357 border-radius: 50%; 1358 border-top: 16px solid #3498db; 1359 width: 120px; 1360 height: 120px; 1361 -webkit-animation: spin 2s linear infinite; 1362 animation: spin 2s linear infinite 1363 } 1364 1365 @-webkit-keyframes spin { 1366 0% { 1367 -webkit-transform: rotate(0) 1368 } 1369 1370 100% { 1371 -webkit-transform: rotate(360deg) 1372 } 1373 } 1374 1375 @keyframes spin { 1376 0% { 1377 transform: rotate(0) 1378 } 1379 1380 100% { 1381 transform: rotate(360deg) 1382 } 1383 } 1384 1385 .animate-bottom { 1386 position: relative; 1387 -webkit-animation-name: animatebottom; 1388 -webkit-animation-duration: 1s; 1389 animation-name: animatebottom; 1390 animation-duration: 1s 1391 } 1392 1393 @-webkit-keyframes animatebottom { 1394 from { 1395 bottom: -100px; 1396 opacity: 0 1397 } 1398 1399 to { 1400 bottom: 0; 1401 opacity: 1 1402 } 1403 } 1404 1405 @keyframes animatebottom { 1406 from { 1407 bottom: -100px; 1408 opacity: 0 1409 } 1410 1411 to { 1412 bottom: 0; 1413 opacity: 1 1414 } 1415 } 1416 1417 @media only screen and (max-width: 768px) {
1418 .modal-content-custom { 1419 margin-top: 70%; 1420 } 1421 } 1422 1423 #purchase_limit_messages ul { 1424 list-style: none !important; 1425 } 1426 1427 .mc-disabled { 1428 pointer-events: none; 1429 opacity: 0.5; 1430 } 1431 </style> 1432 <div id="modelDesignId"></div> 1433 <div id="mc-loader"></div> 1434 <div id="myModal" class="modal-custom"> 1435 <div class="modal-content-custom"> 1436 <div id="purchase_limit_messages"></div><span class="close-custom">×</span> 1437 </div> 1438 </div> 1439
1439<script id="kor-market-config" type="application/json"> 1440 { 1441 "market_id": "96371376507", 1442 "market_handle": "de" 1443 } 1444 </script>
1444 1445
1445<script type="text/javascript"> 1446 1447 var template = "cart"; 1448 var customer_id = ""; 1449 var product_id = ""; 1450 var shopName = "v80rnh-af.myshopify.com"; 1451 var defaultvariantId = ""; //get default variant id when page load 1452 window.mcproductresponse = {}; 1453 1454 function cartSubmitAndCheckout(formElement) { 1455 var params = formElement.serializeArray(); 1456 $.ajax({ 1457 url: "/cart", 1458 type: "post", 1459 data: params, 1460 success: function (res) { 1461 //window.location.replace('/checkout'); 1462 1463 window.location.replace('/checkout'); 1464 1465 }, 1466 error: function (err) { 1467 console.error(err.responseText); 1468 } 1469 }); 1470 } 1471 1472 function checkLimitOne(e, click = false, trigger = null) { 1473 e.customer_id = customer_id; 1474 const marketElem = document.querySelector("#kor-market-config"); 1475 const marketData = JSON.parse(marketElem?.textContent?.trim() || "{}"); 1476 e.config = { 1477 locale: Shopify?.locale, 1478 currency: Shopify?.currency, 1479 country: Shopify?.country, 1480 market: marketData 1481 }; 1482 1483 $.ajax({ 1484 type: "POST", 1485 url: "/a/cart-update", 1486 dataType: "json", 1487 data: e, 1488 success: function (e) { 1489 console.log("e..."); 1490 console.log(e); 1491 if (1 == e.error) { 1492 var t = "<ul>"; 1493 $.each(e.messages, function (e, n) { 1494 t += "<li>" + n + "</li>" 1495 }), t += "</ul>", $("#purchase_limit_messages").html(t), document.getElementById("myModal").style.display = "block" 1496 $(".additional-checkout-buttons, .additional_checkout_buttons, .dynamic-checkout__content").addClass("mc-disabled"); 1497 } else if (click) { 1498 //window.location.replace('/checkout'); 1499 1500 window.location.replace('/checkout'); 1501 1502 } 1503 else { 1504 // $(".additional-checkout-buttons").removeClass("mc-disabled"); 1505 $(".additional-checkout-buttons,.additional_checkout_buttons, .dynamic-checkout__content").removeClass("mc-disabled"); 1506 } 1507 document.getElementById("mc-loader").style.display = "none" 1508 } 1509 }); 1510 } 1511 1512 function myJQueryCode() { 1513 jqueryCode(); 1514 if (template == 'login') { 1515 $(document).ready(function () { 1516 $("input[name='checkout_url']").attr('value', '/cart'); 1517 }); 1518 } 1519 1520 var modal = document.getElementById("myModal"), 1521 span = document.getElementsByClassName("close-custom")[0]; 1522 1523 function checkLimit(e, click = false) { 1524 1525 e.customer_id = customer_id; 1526 const marketElem = document.querySelector("#kor-market-config"); 1527 const marketData = JSON.parse(marketElem?.textContent?.trim() || "{}"); 1528 e.config = { 1529 locale: Shopify?.locale, 1530 currency: Shopify?.currency, 1531 country: Shopify?.country, 1532 market: marketData 1533 }; 1534 1535 $.ajax({ 1536 type: "POST", 1537 url: "/a/cart-update", 1538 dataType: "json", 1539 data: e, 1540 success: function (e) { 1541 console.log("e..k."); 1542 console.log(e); 1543 let cartUpdateRes = e; 1544 var purchaseCartLimitMessages = document.getElementById('modelDesignId'); 1545 if (purchaseCartLimitMessages && cartUpdateRes?.modelDesign) { 1546 purchaseCartLimitMessages.innerHTML = cartUpdateRes.modelDesign; 1547 } 1548 if (1 == e.error) { 1549 var t = "<ul>"; 1550 $.each(e.messages, function (e, n) { 1551 t += "<li>" + n + "</li>" 1552 }), t += "</ul>", $("#purchase_limit_messages").html(t), document.getElementById("myModal").style.display = "block" 1553 $(".additional-checkout-buttons, .dynamic-checkout__content").addClass("mc-disabled"); 1554 } else if (click) { 1555 // window.location.replace('/checkout'); 1556 let submitFormEventShop = ["pro-image-sports-at-the-mall-of-america.myshopify.com", "distell-staff-sales.myshopify.com", "trevocorp.myshopify.com"]; 1557 if (submitFormEventShop.includes(Shopify.shop)) { 1558 if (shopName == "distell-staff-sales.myshopify.com") { 1559 if (document.querySelector("#cart").reportValidity()) { 1560 let formElement = 'form[action="/cart"]'; 1561 cartSubmitAndCheckout($(formElement)); 1562 } 1563 } else { 1564 let formElement = 'form[action="/cart"]'; 1565 cartSubmitAndCheckout($(formElement)); 1566 } 1567 1568 } else { 1569 if (typeof preventDirectCheckout !== "undefined" && !preventDirectCheckout.includes(Shopify.shop)) { 1570 //window.location.replace('/checkout'); 1571 1572 window.location.replace('/checkout'); 1573 1574 } 1575 } 1576 } 1577 document.getElementById("mc-loader").style.display = "none" 1578 } 1579 }); 1580 } 1581 1582 document.getElementsByClassName("close-custom")[0].addEventListener("click", function () { 1583 document.getElementById("myModal").style.display = "none"; 1584 }); 1585 1586 if (Shopify.shop == 'nghia-nippers-corporation.myshopify.com') { 1587 $(document).ready(function () { 1588 $("a[href='/cart']").click(() => { 1589 jQuery.getJSON("/cart.js", function (cartItems) { 1590 checkLimitOne(cartItems); 1591 }); 1592 }); 1593 }); 1594 } 1595 1596 if (template == 'product') { 1597 var mcPlusName; 1598 var mcMinusName; 1599 var mcQtyInput; 1600 var mcPlusSelector = [".qty_plus", ".increase", ".plus-btn", ".plus_btn", ".quantity-plus", ".plus", ".qty-plus", ".js--add", ".qty-up", "button[name='plus']", "input[name='plus']", "a[data-quantity='up']", ".js-qty__adjust--plus", "[data-action='increase-quantity']", ".icon-plus", "button[data-action='increase-picker-quantity']", ".inc", ".quantity__button--plus", "[data-quantity-action='increase']", ".quantity-input-plus", ".shopify-product-form [data-update-quantity='plus']", ".product-form__quantity-add-item", ".icon--plus-big", '.qtyplus', '.quantity-selector__button--plus', '.plus_btn', '.quantity-wrapper [data-quantity="up"]', ".ProductForm__QuantitySelector [data-action='increase-quantity']", ".adjust-plus", "button[aria-label='Increase the quantity']", "[data-control
1600='-']", '[data-increase-qty]', '.t4s-quantity-selector is--plus', "button[aria-label='increment']", ".qty-adjuster__up", "button[aria-label='Add']"]; 1601 var mcMinusSelector = [".qty_minus", ".reduced", ".minus-btn", ".minus", ".quantity-minus", ".qty-minus", ".js--minus", ".qty-down", "button[name='minus']", "input[name='minus']", "a[data-quantity='down']", ".js-qty__adjust--minus", "[data-action='decrease-quantity']", ".icon-minus", "button[data-action='decrease-picker-quantity']", ".dec", ".quantity__button--minus", "[data-quantity-action='decrease']", ".quantity-input-minus", ".shopify-product-form [data-update-quantity='minus']", ".product-form__quantity-subtract-item", ".icon--minus-big", '.qtyminus', '.quantity-selector__button--minus', '.minus_btn', '.quantity-wrapper [data-quantity="down"]', ".ProductForm__QuantitySelector [data-action='decrease-quantity']", ".adjust-minus", "button[aria-label='Reduce the quantity']", "[data-control='+']", '[data-decrease-qty]', '.t4s-quantity-selector is--minus', "button[aria-label='decrement']", ".qty-adjuster__down", "button[aria-label='Subtract']"]; 1602 window.mcQtyInputSelector = [".js-qty__num", ".quantity__input", ".quantity", ".quantity-selector", "input[name='quantity']", "input[name='product-quantity']", "#quantity", ".QuantitySelector__CurrentQuantity", ".quantity-selector--product .quantity-selector__value", "input[name='quantity'][class='quantity__input']", ".quantity-input-field", ".shopify-product-form [name='quantity']", ".product-form__input--quantity", "#quantity-selector__input", ".product-form__input--quantity", ".QuantitySelector__CurrentQuantity[name='quantity']", ".quantity_selector quantity-input [name='quantity']", ".product-form .quantity-selector__input", "input[name='quantity'][class='quantity']"]; 1603 1604 // jQuery.getJSON("/cart.js", function (cartItems) { 1605 // productLimit(product_id, cartItems); 1606 // }); 1607 mcKorSetProductLimit(); 1608 const intMCval = setInterval(() => { 1609 if(typeof updateMcCartQtyFromCart == "function") { 1610 updateMcCartQtyFromCart(); 1611 clearInterval(intMCval); 1612 } 1613 }, 1000); 1614 1615 setTimeout(() => { 1616 clearInterval(intMCval); 1617 }, 3000); 1618 1619 mcPlusSelector.forEach((plus) => { 1620 if ($(document).find(plus).length > 0) { 1621 mcPlusName = $(plus); 1622 } 1623 }) 1624 1625 mcMinusSelector.forEach((minus) => { 1626 if ($(document).find(minus).length > 0) { 1627 mcMinusName = $(minus); 1628 } 1629 }) 1630 1631 window.mcQtyInputSelector.forEach((input) => { 1632 if ($(document).find(input).length > 0) { 1633 mcQtyInput = $(input); 1634 } 1635 }) 1636 1637 if (typeof mcKorAppSettings != "undefined" && (mcKorAppSettings?.pPage?.inputQty && mcKorAppSettings?.pPage?.inputQty != "")) { 1638 jQuery(document).on("change", mcKorAppSettings?.pPage?.inputQty, function (e) { 1639 e.preventDefault(); 1640 e.stopImmediatePropagation(); 1641 limitOnProductSuccess(); 1642 }); 1643 } else { 1644 jQuery(document).on("change", mcQtyInput, function (e) { 1645 e.preventDefault(); 1646 e.stopImmediatePropagation(); 1647 limitOnProductSuccess(); 1648 }); 1649 } 1650 // For shops 1651 let shops = ["aarogyam-wellness-store.myshopify.com", "pharmacy-at-spar-midrand.myshopify.com", "cathrin-walk.myshopify.com", "buffchick.myshopify.com", "masicbeauty.myshopify.com", "trevocorp.myshopify.com", "tapes-tools.myshopify.com", "imprensa-nacional-casa-da-moeda-test.myshopify.com", "denikwholesale.myshopify.com", "gmoco-ohio.myshopify.com", "imprensa-nacional-casa-da-moeda-test.myshopify.com", "d48a1f.myshopify.com", "le-parastore.myshopify.com", "lswiring.myshopify.com", "turkishsouq-shop.myshopify.com", "jainsonslightsonline.myshopify.com", "enzo-pt.myshopify.co", "fcxsport.myshopify.com", "dprimerocol.myshopify.com", "nocelab.myshopify.com", "hybrid-supreme-filter-shop.myshopify.com", "loud-pizza.myshopify.com", "sa-stage.myshopify.com"]; 1652 if (shops.includes(shopName)) { 1653 if (typeof mcKorAppSettings != "undefined" && (mcKorAppSettings?.pPage?.plusBtn && mcKorAppSettings?.pPage?.plusBtn != "")) { 1654 jQuery(document).on("click", mcKorAppSettings?.pPage?.plusBtn, function (e) { 1655 limitOnProductSuccess(); 1656 }); 1657 } else { 1658 jQuery(document).on("click", mcPlusName, function (e) { 1659 limitOnProductSuccess(); 1660 }); 1661 } 1662 if (typeof mcKorAppSettings != "undefined" && (mcKorAppSettings?.pPage?.minusBtn && mcKorAppSettings?.pPage?.minusBtn != "")) { 1663 jQuery(document).on("click", mcKorAppSettings?.pPage?.minusBtn, function (e) { 1664 limitOnProductSuccess(); 1665 }); 1666 } else { 1667 jQuery(document).on("click", mcMinusName, function (e) { 1668 limitOnProductSuccess(); 1669 }); 1670 } 1671 } 1672 1673 $(span).click(function (e) { 1674 modal.style.display = "none"; 1675 e.preventDefault(); 1676 }); 1677 } 1678 1679 if (template == 'cart') { 1680 1681 jQuery.getJSON("/cart.js", function (e) { 1682 checkLimit(e) 1683 }), span.onclick = function () { 1684 modal.style.display = "none" 1685 }, window.onclick = function (e) { 1686 e.target == modal && (modal.style.display = "none") 1687 }; 1688 jQuery(document).on("click", span, function (e) { 1689 modal.style.display = "none"; 1690 }); 1691 } 1692 1693 jQuery(document).on("click", "button[name='checkout']", function (e, options) { 1694 if (!options) { 1695 document.getElementById("mc-loader").style.display = "block"; 1696 e.preventDefault(); 1697 e.stopImmediatePropagation(); 1698 jQuery.getJSON("/cart.js", function (cartItems) { 1699 checkLimit(cartItems, true); 1700 }); 1701 } 1702 }); 1703 1704 jQuery(document).on("click", "input[name='checkout']", function (e, options) { 1705 if (!options) { 1706 document.getElementById("mc-loader").style.display = "block"; 1707 e.preventDefault(); 1708 e.stopImmediatePropagation(); 1709 jQuery.getJSON("/cart.js", function (cartItems) { 1710 checkLimit(cartItems, true); 1711 }); 1712 } 1713 }); 1714 1715 // jQuery(document).on("click", span, function (e) { 1716 // modal.style.display = "none"; 1717 // }); 1718 1719 jQuery(document).on("click", "a[href='/checkout']", function (e) { 1720 document.getElementById("mc-loader").style.display = "block"; 1721 e.preventDefault(); 1722 e.stopImmediatePropagation(); 1723 jQuery.getJSON("/cart.js", function (cartItems) { 1724 checkLimit(cartItems, true); 1725 }); 1726 }); 1727 1728 jQuery(document).on("click", "input[name='checkouts']", function (e) { 1729 document.getElementById("mc-loader").style.display = "block"; 1730 e.preventDefault(); 1731 e.stopImmediatePropagation(); 1732 jQuery.getJSON("/cart.js", function (cartItems) { 1733 checkLimit(cartItems, true); 1734 }); 1735 }); 1736 1737 1738 if (template == 'product') { 1739 if (shopName == 'shop-hamples.myshopify.com') { 1740 $(document).ready(function () { 1741 var className = $(".btn-addtocart"); 1742 var t = className.clone(); 1743 t.removeClass("addtocart-js").attr("type", "button").attr('data-mc', "add-to-cart").css({ 1744 "background": "#a24e4e", "font-family": "'Sen-Bold', sans-serif", "border": "none", 1745 "color": "#ffffff", "font-size": "14px", "line-height": "1.0", "font-weight": "400", "letter-spacing": "0.05em", "position": "relative", 1746 "outline": "none", "padding": "6px 31px 4px", "display": "inline-flex", "justify-content": "center", "align-items": "center", "text-align": "center", 1747 }); 1748 className.after(t); 1749 className.hide(); 1750 t.on("click", () => { 1751 CheckOnAddToCart().then(res => { 1752 if (res.msg != '') { 1753 showMessage(res.msg); 1754 } else { 1755 className.trigger("click", { eventTrigger: true }); 1756 updateNumberOfProductLimit(res.qty); 1757 } 1758 }); 1759 }); 1760 1761 var buttonName = $(".stickyaddtocart"); 1762 var clone = buttonName.clone(); 1763 clone.removeClass("btn").attr("type", "button").attr('data-mc', "add-to-cart").css({ "font-family": "'Sen-Bold', sans-serif", "border": "none", "color": "#ffffff", "line-height": "1.0", "letter-spacing": "0.05em", "position": "relative", "justify-content": "center", "align-items": "center", "text-align": "center", "background": "#a24e4e", "font- size": "14px", "padding": "6px 31px 4px", "height": "40px", }); 1764 buttonName.after(clone); 1765 buttonName.hide(); 1766 clone.on("click", () => { 1767 CheckOnAddToCart().then(res => { 1768 if (res.msg != '') { 1769 showMessage(res.msg); 1770 } else { 1771 buttonName.trigger("click", { eventTrigger: true }); 1772 updateNumberOfProductLimit(res.qty); 1773 } 1774 }); 1775 }); 1776 }); 1777 } 1778 } 1779 1780 1781 if (shopName == '0861banner.myshopify.com') { 1782 $(document).ready(function () { 1783 var clone = $('#add-to-cart').clone(); 1784 clone.removeClass("add-to-cart").removeAttr('id').attr("type", "button").attr('data-mc', "add-to-cart").css("padding", '10px 40px').css("line-height", '30px').css("font-size", '14px').css("border-radius", '25px'); 1785 $('#add-to-cart').after(clone); 1786 $('#add-to-cart').hide(); 1787 clone.on("click", () => { 1788 CheckOnAddToCart().then(res => { 1789 if (res.msg != '') { 1790 showMessage(res.msg); 1791 } else { 1792 $('#add-to-cart').trigger("click", { eventTrigger: true }); 1793 updateNumberOfProductLimit(res.qty); 1794 } 1795 }); 1796 }); 1797 }); 1798 } 1799 1800 if (shopName == 'imprensa-nacional-casa-da-moeda-test.mysh
1800opify.com') { 1801 $(document).ready(function () { 1802 var clone = $('.single_add_to_cart_button').clone(); 1803 var clone1 = clone.clone(); 1804 clone1.attr("type", "button").attr('data-mc', "add-to-cart"); 1805 clone.after(clone1); 1806 clone.hide(); 1807 clone1.on("click", () => { 1808 CheckOnAddToCart().then(res => { 1809 if (res.msg != '') { 1810 showMessage(res.msg); 1811 } else { 1812 $('.single_add_to_cart_button').trigger("click", { eventTrigger: true }); 1813 updateNumberOfProductLimit(res.qty); 1814 } 1815 }); 1816 }); 1817 }); 1818 } 1819 1820 } 1821 1822 function productLimit(e, cartItems) { 1823 const config = { 1824 locale: Shopify?.locale, 1825 currency: Shopify?.currency, 1826 country: Shopify?.country, 1827 }; 1828 1829 $.ajax({ 1830 type: "POST", 1831 url: "/a/cart-update?page=product", 1832 dataType: "json", 1833 data: { product_id: e, cartItems: cartItems, config }, 1834 success: function (e) { 1835 console.log("e..l."); 1836 console.log(e); 1837 window.mcproductresponse = e; 1838 if (window.mcproductresponse?.data?.modelDesign) { 1839 var purchaseLimitMessages = document.getElementById('modelDesignId'); 1840 if (purchaseLimitMessages) { 1841 purchaseLimitMessages.innerHTML = window.mcproductresponse?.data?.modelDesign; 1842 } 1843 } 1844 limitOnProductSuccess(true); 1845 } 1846 }); 1847 } 1848 1849 function ifCheckoutNotWorking(e) { 1850 document.getElementById("mc-loader").style.display = "block"; 1851 e.preventDefault(); 1852 e.stopImmediatePropagation(); 1853 jQuery.getJSON("/cart.js", function (cartItems) { 1854 checkLimitOne(cartItems, true); 1855 }); 1856 } 1857 1858 if (typeof jQuery == 'undefined') { 1859 var headTag = document.getElementsByTagName("head")[0]; 1860 var jqTag = document.createElement('script'); 1861 jqTag.type = 'text/javascript'; 1862 jqTag.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js'; 1863 jqTag.onload = myJQueryCode; 1864 headTag.appendChild(jqTag); 1865 } else { 1866 myJQueryCode(); 1867 } 1868 </script>
1868 1869</div><!-- END app snippet --> 1870 1871<!-- END app block --><!-- BEGIN app block: shopify://apps/adcell-tracking-remarketing/blocks/theme_extension/578397e0-3e42-4c27-add7-dfc15023b09b -->
1871<script> 1872 (function () { 1873 var PROXY = '/apps/adcell/bid'; 1874 1875 function readCookie(name) { 1876 var m = document.cookie.match('(?:^|; )' + name + '=([^;]*)'); 1877 return m ? decodeURIComponent(m[1]) : null; 1878 } 1879 function writeCookie(name, value, maxAge) { 1880 document.cookie = name + '=' + encodeURIComponent(value) + '; Path=/; Max-Age=' + maxAge + '; Secure; SameSite=Lax'; 1881 } 1882 function lsGet(name) { try { return window.localStorage.getItem(name); } catch (e) { return null; } } 1883 function lsSet(name, value) { try { window.localStorage.setItem(name, value); } catch (e) {} } 1884 function fetchCart() { 1885 return fetch('/cart.js', { credentials: 'same-origin' }) 1886 .then(function (r) { return r.json(); }) 1887 .catch(function () { return null; }); 1888 } 1889 function stampCart(cart, bid) { 1890 var token = (cart && cart.token) ? cart.token : ''; 1891 if (!bid || !token) { return; } 1892 if (((cart && cart.attributes) || {})['_adcell_bid'] === bid) { return; } 1893 var guard = token + ':' + bid; 1894 if (sessionStorage.getItem('adcellCartStamped') === guard) { return; } 1895 fetch('/cart/update.js', { 1896 method: 'POST', 1897 credentials: 'same-origin', 1898 headers: { 'Content-Type': 'application/json' }, 1899 body: JSON.stringify({ attributes: { _adcell_bid: bid } }) 1900 }).then(function () { 1901 sessionStorage.setItem('adcellCartStamped', guard); 1902 }).catch(function () {}); 1903 } 1904 1905 var syTries = 0; 1906 function syncServer(bid, vc) { 1907 fetchCart().then(function (cart) { 1908 var token = (cart && cart.token) ? cart.token : ''; 1909 var sy = readCookie('_shopify_y') || ''; 1910 stampCart(cart, bid); 1911 if (!sy && syTries < 2) { 1912 syTries++; 1913 setTimeout(function () { 1914 if (readCookie('_shopify_y')) { syncServer(bid, vc); } 1915 }, 2000); 1916 } 1917 var guard = token + ':' + (bid || '') + ':' + (vc || '') + ':' + sy; 1918 if (sessionStorage.getItem('adcellBidSynced') === guard) { return; } 1919 var body = ''; 1920 if (bid) { body += 'bid=' + encodeURIComponent(bid); } 1921 if (vc) { body += (body ? '&' : '') + 'vc=' + encodeURIComponent(vc); } 1922 if (token) { body += (body ? '&' : '') + 'cart_token=' + encodeURIComponent(token); } 1923 if (sy) { body += (body ? '&' : '') + 'sy=' + encodeURIComponent(sy); } 1924 if (!body) { return; } 1925 fetch(PROXY, { 1926 method: 'POST', 1927 credentials: 'same-origin', 1928 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, 1929 body: body 1930 }).then(function () { 1931 sessionStorage.setItem('adcellBidSynced', guard); 1932 }).catch(function () {}); 1933 }); 1934 } 1935 1936 var urlBid = new URLSearchParams(window.location.search).get('bid'); 1937 var jsBid = readCookie('adcell'); 1938 var vc = readCookie('adcell_vc'); 1939 1940 if (!urlBid && !jsBid) { 1941 jsBid = lsGet('adcell'); 1942 if (jsBid) { writeCookie('adcell', jsBid, 90 * 24 * 3600); } 1943 } 1944 if (urlBid || jsBid) { lsSet('adcell', urlBid || jsBid); } 1945 1946 if (urlBid || jsBid) { 1947 syncServer(urlBid || jsBid, vc); 1948 } else { 1949 fetchCart().then(function (cart) { 1950 var sy = readCookie('_shopify_y'); 1951 var token = cart && cart.token; 1952 if (!sy && !token) { 1953 if (vc) { syncServer(null, vc); } 1954 return; 1955 } 1956 var qs = []; 1957 if (sy) { qs.push('sy=' + encodeURIComponent(sy)); } 1958 if (token) { qs.push('cart_token=' + encodeURIComponent(token)); } 1959 fetch(PROXY + '?' + qs.join('&'), { credentials: 'same-origin' }) 1960 .then(function (r) { return r.json(); }) 1961 .then(function (data) {
1962 var bid = (data && data.bid) || null; 1963 var view = vc || (data && data.vc) || null; 1964 if (bid) { writeCookie('adcell', bid, 90 * 24 * 3600); lsSet('adcell', bid); } 1965 if (!vc && data && data.vc) { writeCookie('adcell_vc', data.vc, 24 * 3600); } 1966 if (!bid && !view) { return; } 1967 syncServer(bid, view); 1968 }) 1969 .catch(function () { 1970 if (vc) { syncServer(null, vc); } 1971 }); 1972 }); 1973 } 1974 })(); 1975</script>
1975 1976
1977<script id="trad-js" type="text/javascript" src="https://t.adcell.com/js/trad.js?s=shopify&v=1.2.6&pid=11079" async="async"></script>
vendor: 1 bytes, line 1977
1977
1978<script> 1979 var script = document.querySelector("#trad-js"); 1980 script.addEventListener('load', function() { 1981 Adcell.Tracking.track(); 1982 }); 1983</script>
1983 1984 1985<!-- END app block -->
1985<script src="https://cdn.shopify.com/extensions/01a08a53-1431-71a3-8d75-dd04d3c69aa4/form-builder-by-hulkapps-74/assets/form-builder-script.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1985
1985
1986<script src="https://cdn.shopify.com/extensions/01a0fd03-c455-7b82-9766-74101e55572c/judgeme-771/assets/loader.js" type="text/javascript" defer="defer"></script>
1986 1987<link href="https://cdn.shopify.com/extensions/01a0fb6d-171d-712b-8764-40c957e243dd/version_06d0a5c3-2026-10-02_14h03m/assets/bss-pl-style.min.css" rel="stylesheet" type="text/css" media="all">
1988<script src="https://cdn.shopify.com/extensions/01a09f84-d46f-7905-a8c6-a2d9ec0b62c1/koala-upsell-gift-368/assets/gifts-embed.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1988
1988
1989<script src="https://cdn.shopify.com/extensions/01a0ae26-3791-7e3e-a78c-3496db49db55/purchase-limit-84/assets/limit-qty.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1989
1989
1990<script src="https://cdn.shopify.com/extensions/01a0eecd-e3cf-72d9-81f3-f3f881b5b528/checkout-regeln-grosse-warenkoerbe-2026-09-29/assets/widerruf-button.js" type="text/javascript" defer="defer"></script>
1990 1991<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
1992<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: 90810417531,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "cart"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 1992
1992
1993<script> 1994 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 1995</script>
vendor: 1 bytes, line 1995
1995
1996<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}
1996).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: 90810417531,storefrontBaseUrl: "https://odiporo.de",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://odiporo.de/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"1981874555","configuration":"{\"pixel_id\":\"24670573312611090\",\"pixel_type\":\"facebook_pixel\"}","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"]}
1996,{"id":"1936589179","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"]},"dataSharingState":"unrestricted"},{"id":"1888813435","configuration":"{\"pixelCode\":\"D1JRB3RC77U8NM2EQM60\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"22e92c2ad45662f435e4801458fb78cc","type":"APP","apiClientId":4383523,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":[]},"dataSharingState":"optimized"},{"id":"1850147195","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-KQW87QQ8C6\\\",\\\"GT-PLVXLZN9\\\",\\\"GT-PJWWR3DB\\\"],\\\"target_country\\\":\\\"ZZ\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-KQW87QQ8C6\\\",\\\"AW-10820734941\\\/16EWCOfEu-AaEN2f3aco\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-KQW87QQ8C6\\\",\\\"AW-10820734941\\\/aanTCOvFu-AaEN2f3aco\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-KQW87QQ8C6\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-KQW87QQ8C6\\\",\\\"AW-10820734941\\\/HCJ5COjFu-AaEN2f3aco\\\",\\\"MC-7J6TNED5ZZ\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-KQW87QQ8C6\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-KQW87QQ8C6\\\",\\\"AW-10820734941\\\/48EmCOTEu-AaEN2f3aco\\\",\\\"MC-7J6TNED5ZZ\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-KQW87QQ8C6\\\",\\\"AW-10820734941\\\/a1leCO3Eu-AaEN2f3aco\\\",\\\"MC-7J6TNED5ZZ\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-KQW87QQ8C6\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-KQW87QQ8C6\\\",\\\"AW-10820734941\\\/q57VCO7Fu-AaEN2f3aco\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-KQW87QQ8C6\\\",\\\"AW-10820734941\\\/gtULCOrEu-AaEN2f3aco\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-KQW87QQ8C6\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"1848639867","configuration":"{\"apiKey\":\"1g7I4c8g3n\",\"host\":\"searchserverapi1.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"5559ea45e47b67d15b30b79e7c6719da","type":"APP","apiClientId":578825,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1772224891","configuration":"{\"accountID\":\"2232\",\"programID\":\"11079\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"d6602526b535375a3751906f21a618e2","type":"APP","apiClientId":2982569,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1734705531","configuration":"{\"advertiserId\":\"32931\",\"shopDomain\":\"v80rnh-af.myshopify.com\",\"appVersion\":\"shopifyApp_5.2.3\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c287d09bac7e7a912a76f3941fab1c2f","type":"APP","apiClientId":2887701,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"}
1996,{"id":"1666285947","configuration":"{\"myshopifyDomain\":\"v80rnh-af.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"23b97d18e2aa74363140dc29c9284e87","type":"APP","apiClientId":2775569,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"253952379","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["MARKETING","SALE_OF_DATA"],"name":"ADCELL Conversion Tracking"},{"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":"odiporo.de - Smarte Elektronik für jeden Anspruch","paymentSettings":{"currencyCode":"EUR"},"myshopifyDomain":"v80rnh-af.myshopify.com","countryCode":"DE","storefrontUrl":"https:\/\/odiporo.de"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"15083900469627","handle":"flexpump-mobiler-mini-kompressor","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"55457096040827","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://odiporo.de/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"179096813947","themeStoreId":"2412","themePublished":"true","eventMetadataId":"8800b9a0-608f-4551-b772-4395efa0ae8f","pageType":"cart","shopId":"90810417531","storefrontBaseUrl":"https:\/\/odiporo.de","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>
1996<script> 1997 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 1998 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 1999 window.ShopifyAnalytics.meta.currency = 'EUR'; 2000 var meta = {"page":{"pageType":"cart","requestId":"ccd1293e-0848-4e78-b196-6fac301051d1-1791081636"}}; 2001 for (var attr in meta) { 2002 window.ShopifyAnalytics.meta[attr] = meta[attr]; 2003 } 2004</script>
vendor: 1 bytes, line 2004
2004
2005<script class="analytics"> 2006 (function () { 2007 var customDocumentWrite = function(content) { 2008 var jquery = null; 2009 2010 if (window.jQuery) { 2011 jquery = window.jQuery; 2012 } else if (window.Checkout && window.Checkout.$) { 2013 jquery = window.Checkout.$; 2014 } 2015 2016 if (jquery) { 2017 jquery('body').append(content); 2018 } 2019 }; 2020 2021 var hasLoggedConversion = function(token) { 2022 if (token) { 2023 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 2024 } 2025 return false; 2026 } 2027 2028 var setCookieIfConversion = function(token) { 2029 if (token) { 2030 var twoMonthsFromNow = new Date(Date.now()); 2031 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 2032 2033 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 2034 } 2035 } 2036 2037 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 2038 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 2039 if (trekkie.integrations) { 2040 return; 2041 } 2042 trekkie.methods = [ 2043 'identify', 2044 'page', 2045 'ready', 2046 'track', 2047 'trackForm', 2048 'trackLink' 2049 ]; 2050 trekkie.factory = function(method) { 2051 return function() { 2052 var args = Array.prototype.slice.call(arguments); 2053 args.unshift(method); 2054 trekkie.push(args); 2055 if (method == 'track' || method == 'page') { 2056 var pageUrl; 2057 try { 2058 pageUrl = window.location.href; 2059 } catch (e) {} 2060 var pageReferrer; 2061 try { 2062 pageReferrer = document.referrer; 2063 } catch (e) {} 2064 try { 2065 if (window.__TREKKIE_SHIM_QUEUE == null) { 2066 window.__TREKKIE_SHIM_QUEUE = []; 2067 } 2068 window.__TREKKIE_SHIM_QUEUE.push({ 2069 from: 'trekkie-stub', 2070 method: method, 2071 args: args.slice(1), 2072 pageContext: { 2073 url: pageUrl, 2074 referrer: pageReferrer 2075 } 2076 }); 2077 } catch (e) { 2078 // no-op 2079 } 2080 } 2081 return trekkie; 2082 }; 2083 }; 2084 for (var i = 0; i < trekkie.methods.length; i++) { 2085 var key = trekkie.methods[i]; 2086 trekkie[key] = trekkie.factory(key); 2087 } 2088 trekkie.load = function(config) { 2089 trekkie.config = config || {}; 2090 trekkie.config.initialDocumentCookie = document.cookie; 2091 var first = document.getElementsByTagName('script')[0]; 2092var script = document.createElement('script'); 2093script.type = 'text/javascript'; 2094script.onerror = function(e) { 2095 var scriptFallback = document.createElement('script'); 2096 scriptFallback.type = 'text/javascript'; 2097 scriptFallback.onerror = function(error) { 2098 var Monorail = { 2099 produce: function produce(monorailDomain, schemaId, payload) { 2100 var currentMs = new Date().getTime(); 2101 var event = { 2102 schema_id: schemaId, 2103 payload: payload, 2104 metadata: { 2105 event_created_at_ms: currentMs, 2106 event_sent_at_ms: currentMs 2107 } 2108 }; 2109 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 2110 }, 2111 sendRequest: function sendRequest(endpointUrl, payload) { 2112 // Try the sendBeacon API 2113 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 2114 var blobData = new window.Blob([payload], { 2115 type: 'text/plain' 2116 }); 2117 2118 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 2119 return true; 2120 } // sendBeacon was not successful 2121 2122 } // XHR beacon 2123 2124 var xhr = new XMLHttpRequest(); 2125 2126 try { 2127 xhr.open('POST', endpointUrl); 2128 xhr.setRequestHeader('Content-Type', 'text/plain'); 2129 xhr.send(payload); 2130 } catch (e) { 2131 console.log(e); 2132 } 2133 2134 return false; 2135 }, 2136 isIos12: function isIos12() { 2137 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 2138 } 2139 }; 2140 Monorail.produce('monorail-edge.shopifysvc.com', 2141 'trekkie_storefront_load_errors/1.1', 2142 {shop_id: 90810417531, 2143 theme_id: 179096813947, 2144 app_name: "storefront", 2145 context_url: window.location.href, 2146 source_url: "//odiporo.de/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 2147 2148 }; 2149 scriptFallback.async = true; 2150 scriptFallback.src = '//odiporo.de/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 2151 first.parentNode.insertBefore(scriptFallback, first); 2152}; 2153script.async = true; 2154script.src = '//odiporo.de/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 2155first.parentNode.insertBefore(script, first); 2156 2157 }; 2158 trekkie.load( 2159 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":90810417531,"isMerchantRequest":null,"themeId":179096813947,"themeCityHash":"16345578726536469421","contentLanguage":"de","currency":"EUR","eventMetadataId":"8800b9a0-608f-4551-b772-4395efa0ae8f"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 2160 ); 2161 2162 var loaded = false;
2163 trekkie.ready(function() { 2164 if (loaded) return; 2165 loaded = true; 2166 2167 window.ShopifyAnalytics.lib = window.trekkie; 2168 2169 var originalDocumentWrite = document.write; 2170 document.write = customDocumentWrite; 2171 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 2172 document.write = originalDocumentWrite; 2173 2174 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 2175 var token = match? match[1]: undefined; 2176 if (!hasLoggedConversion(token)) { 2177 setCookieIfConversion(token); 2178 2179 } 2180 }); 2181 2182 window.ShopifyAnalytics.lib.page(null,{"pageType":"cart","requestId":"ccd1293e-0848-4e78-b196-6fac301051d1-1791081636","shopifyEmitted":true}); 2183 2184 var eventsListenerScript = document.createElement('script'); 2185 eventsListenerScript.async = true; 2186 eventsListenerScript.src = "//odiporo.de/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 2187 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 2188})();</script>
vendor: 1 bytes, line 2188
2188
2189<script 2190 defer 2191 src="https://odiporo.de/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 2192 data-application="storefront-renderer" 2193 data-shop-id="90810417531" 2194 data-render-region="gcp-us-west1" 2195 data-page-type="cart" 2196 data-theme-instance-id="179096813947" 2197 data-theme-name="Concept" 2198 data-theme-version="4.1.0" 2199 data-monorail-region="shop_domain" 2200 data-resource-timing-sampling-rate="10" 2201 data-shs="true" 2202 data-shs-beacon="true" 2203 data-shs-export-with-fetch="true" 2204 data-shs-logs-sample-rate="1" 2205 data-shs-beacon-endpoint="https://odiporo.de/api/collect" 2206></script>
2206 2207<meta name="shopify-y" content="de61e3ea-ba66-4ce5-8134-ed1a5160e66a" data-expiration="1822639237000"><meta name="shopify-s" content="b1f87317-c840-4dbe-b269-1f71643c9dcb" data-expiration="1791083437000"><meta name="new-cookie-storage-activated" content="t"> 2208</head> 2209 2210<body class="template-cart" data-rounded-button="round-slight" data-rounded-input="round-slight" data-rounded-block="round" data-rounded-card="round" data-button-hover="standard" data-lazy-image data-title-animation data-page-rendering> 2211 <a class="sr-only skip-link" href="#MainContent">Direkt zum Inhalt</a> 2212 2213 <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 2213-2214
2213 2214<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
2214GTM-KX7KVKS
vendor: 83 bytes, lines 2214-2215
2214" 2215height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
2216<!-- End Google Tag Manager (noscript) --><mouse-cursor class="mouse-cursor z-50 fixed select-none flex items-center justify-center pointer-events-none rounded-full"> 2217 <svg class="icon icon-cursor" stroke="currentColor" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> 2218 <path d="M10 30L30 10M10 10L30 30" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path> 2219 </svg> 2220</mouse-cursor> 2221<!-- BEGIN sections: header-group --> 2222<div id="shopify-section-sections--24796503015803__announcement-bar" class="shopify-section shopify-section-group-header-group topbar-section"><style> 2223 :root {--topbar-height: var(--sp-12);} 2224 2225 @media screen and (min-width: 1536px) { 2226 :root {--topbar-height: var(--sp-14);} 2227 } 2228 2229 #shopify-section-sections--24796503015803__announcement-bar { 2230 --gradient-background: #ffd900; 2231 --color-background: 255 217 0; 2232 --color-foreground: 6 6 6; 2233 --color-highlight: 255 221 191; 2234 } 2235 </style><div class="topbar topbar--center page-width page-width--full section section--rounded relative grid py-0 h-full w-full items-center"><div class="social-icons hidden lg:flex items-center"><ul class="flex flex-wrap items-center gap-6"><li><a href="https://www.facebook.com/Odiporo" class="social_platform block relative" is="magnet-link" title="odiporo.de - Smarte Elektronik für jeden Anspruch auf Facebook"><svg class="icon icon-facebook icon-sm" viewBox="0 0 24 24" stroke="none" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 2236 <path d="M9.03153 23L9 13H5V9H9V6.5C9 2.7886 11.2983 1 14.6091 1C16.1951 1 17.5581 1.11807 17.9553 1.17085V5.04948L15.6591 5.05052C13.8584 5.05052 13.5098 5.90614 13.5098 7.16171V9H18.75L16.75 13H13.5098V23H9.03153Z"/> 2237 </svg><span class="sr-only">Facebook</span> 2238 </a> 2239 </li><li><a href="https://www.instagram.com/odiporo.de/" class="social_platform block relative" is="magnet-link" title="odiporo.de - Smarte Elektronik für jeden Anspruch auf Instagram"><svg class="icon icon-instagram icon-sm" viewBox="0 0 24 24" stroke="none" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 2240 <path d="M12 2.98C14.94 2.98 15.28 2.99 16.44 3.04C17.14 3.04 17.83 3.18 18.48 3.42C18.96 3.6 19.39 3.88 19.75 4.24C20.12 4.59 20.4 5.03 20.57 5.51C20.81 6.16 20.94 6.85 20.95 7.55C21 8.71 21.01 9.06 21.01 12C21.01 14.94 21 15.28 20.95 16.44C20.95 17.14 20.81 17.83 20.57 18.48C20.39 18.95 20.11 19.39 19.75 19.75C19.39 20.11 18.96 20.39 18.48 20.57C17.83 20.81 17.14 20.94 16.44 20.95C15.28 21 14.93 21.01 12 21.01C9.07 21.01 8.72 21 7.55 20.95C6.85 20.95 6.16 20.81 5.51 20.57C5.03 20.39 4.6 20.11 4.24 19.75C3.87 19.4 3.59 18.96 3.42 18.48C3.18 17.83 3.05 17.14 3.04 16.44C2.99 15.28 2.98 14.93 2.98 12C2.98 9.07 2.99 8.72 3.04 7.55C3.04 6.85 3.18 6.16 3.42 5.51C3.6 5.03 3.88 4.6 4.24 4.24C4.59 3.87 5.03 3.59 5.51 3.42C6.16 3.18 6.85 3.05 7.55 3.04C8.71 2.99 9.06 2.98 12 2.98ZM12 1C9.01 1 8.64 1.01 7.47 1.07C6.56 1.09 5.65 1.26 4.8 1.58C4.07 1.86 3.4 2.3 2.85 2.85C2.3 3.41 1.86 4.07 1.58 4.8C1.26 5.65 1.09 6.56 1.07 7.47C1.02 8.64 1 9.01 1 12C1 14.99 1.01 15.36 1.07 16.53C1.09 17.44 1.26 18.35 1.58 19.2C1.86 19.93 2.3 20.6 2.85 21.15C3.41 21.7 4.07 22.14 4.8 22.42C5.65 22.74 6.56 22.91 7.47 22.93C8.64 22.98 9.01 23 12 23C14.99 23 15.36 22.99 16.53 22.93C17.44 22.91 18.35 22.74 19.2 22.42C19.93 22.14 20.6 21.7 21.15 21.15C21.7 20.59 22.14 19.93 22.42 19.2C22.74 18.35 22.91 17.44 22.93 16.53C22.98 15.36 23 14.99 23 12C23 9.01 22.99 8.64 22.93 7.47C22.91 6.56 22.74 5.65 22.42 4.8C22.14 4.07 21.7 3.4 21.15 2.85C20.59 2.3 19.93 1.86 19.2 1.58C18.35 1.26 17.44 1.09 16.53 1.07C15.36 1.02 14.99 1 12 1ZM12 6.35C10.88 6.35 9.79 6.68 8.86 7.3C7.93 7.92 7.21 8.8 6.78 9.84C6.35 10.87 6.24 12.01 6.46 13.1C6.68 14.2 7.22 15.2 8.01 15.99C8.8 16.78 9.81 17.32 10.9 17.54C12 17.76 13.13 17.65 14.16 17.22C15.19 16.79 16.07 16.07 16.7 15.14C17.32 14.21 17.65 13.12 17.65 12C17.65 10.5 17.05 9.06 16 8.01C14.94 6.95 13.5 6.36 12.01 6.36L12 6.35ZM12 15.67C11.27 15.67 10.57 15.45 9.96 15.05C9.36 14.65 8.89 14.07 8.61 13.4C8.33 12.73 8.26 11.99 8.4 11.28C8.54 10.57 8.89 9.92 9.4 9.4C9.91 8.88 10.5
22407 8.54 11.28 8.4C11.99 8.26 12.73 8.33 13.4 8.61C14.07 8.89 14.64 9.36 15.05 9.96C15.45 10.56 15.67 11.27 15.67 12C15.67 12.97 15.28 13.91 14.6 14.59C13.91 15.28 12.98 15.66 12.01 15.66L12 15.67ZM17.87 7.45C18.6 7.45 19.19 6.86 19.19 6.13C19.19 5.4 18.6 4.81 17.87 4.81C17.14 4.81 16.55 5.4 16.55 6.13C16.55 6.86 17.14 7.45 17.87 7.45Z"/> 2241 </svg><span class="sr-only">Instagram</span> 2242 </a> 2243 </li><li><a href="https://www.youtube.com/channel/UCFAKK0tiJMLwDbjcoZQPiiA/videos" class="social_platform block relative" is="magnet-link" title="odiporo.de - Smarte Elektronik für jeden Anspruch auf YouTube"><svg class="icon icon-youtube icon-sm" viewBox="0 0 24 24" stroke="none" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 2244 <path d="M23.8 7.6C23.8 7.6 23.6 5.9 22.8 5.2C21.9 4.2 20.9 4.2 20.4 4.2C17 4 12 4 12 4C12 4 7 4 3.6 4.2C3.1 4.3 2.1 4.3 1.2 5.2C0.5 5.9 0.2 7.6 0.2 7.6C0.2 7.6 0 9.5 0 11.5V13.3C0 15.2 0.2 17.2 0.2 17.2C0.2 17.2 0.4 18.9 1.2 19.6C2.1 20.6 3.3 20.5 3.8 20.6C5.7 20.8 12 20.8 12 20.8C12 20.8 17 20.8 20.4 20.5C20.9 20.4 21.9 20.4 22.8 19.5C23.5 18.8 23.8 17.1 23.8 17.1C23.8 17.1 24 15.2 24 13.2V11.4C24 9.5 23.8 7.6 23.8 7.6ZM9.5 15.5V8.8L16 12.2L9.5 15.5Z"/> 2245 </svg><span class="sr-only">YouTube</span> 2246 </a> 2247 </li><li><a href="https://www.tiktok.com/@odiporo.de" class="social_platform block relative" is="magnet-link" title="odiporo.de - Smarte Elektronik für jeden Anspruch auf TikTok"><svg class="icon icon-tiktok icon-sm" viewBox="0 0 24 24" stroke="none" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 2248 <path d="M10.6315 8.937V13.059C10.1123 12.9221 9.56911 12.9034 9.0418 13.0044C8.5145 13.1054 8.01657 13.3234 7.58473 13.6424C7.15288 13.9613 6.79813 14.3732 6.54661 14.8475C6.2951 15.3218 6.15324 15.8466 6.13148 16.383C6.10175 16.8449 6.17125 17.3078 6.33531 17.7405C6.49938 18.1733 6.7542 18.5659 7.08266 18.892C7.41111 19.2181 7.80557 19.4701 8.23952 19.631C8.67346 19.7919 9.13684 19.8581 9.59848 19.825C10.0648 19.8608 10.5333 19.7949 10.9717 19.6319C11.41 19.4689 11.8078 19.2126 12.1374 18.8809C12.4671 18.5491 12.7208 18.1498 12.881 17.7104C13.0413 17.271 13.1042 16.8021 13.0655 16.336V0H17.1425C17.8355 4.315 19.9935 5.316 22.8825 5.778V9.913C20.8804 9.74881 18.9491 9.09645 17.2575 8.013V16.18C17.2575 19.88 15.0675 24 9.63048 24C8.61045 23.9955 7.60156 23.7875 6.66297 23.3881C5.72437 22.9886 4.87496 22.4059 4.16451 21.6739C3.45407 20.942 2.89689 20.0755 2.52563 19.1254C2.15438 18.1754 1.97652 17.1607 2.00248 16.141C2.03479 15.0794 2.29174 14.0366 2.75639 13.0815C3.22105 12.1265 3.88285 11.2807 4.69819 10.6C5.51352 9.9193 6.46387 9.41915 7.48658 9.1325C8.50929 8.84586 9.58114 8.77923 10.6315 8.937Z"/> 2249 </svg><span class="sr-only">TikTok</span> 2250 </a> 2251 </li></ul></div><div class="announcement-bar h-full flex justify-center lg:justify-center without-nav relative"> 2252 <announcement-bar id="Slider-sections--24796503015803__announcement-bar" class="announcement__slides flex justify-center w-full h-full flickity" autoplay autoplay-speed="5"><div class="announcement__slide flex h-full" ><div class="announcement__content flex items-center gap-2"><span class="announcement-icon hidden md:block"><svg class="icon icon-truck icon-xs stroke-1" viewBox="0 0 16 16" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2253 <path d="M6.66675 12.6667H9.33342M6.66675 12.6667C6.66675 13.7712 5.77132 14.6667 4.66675 14.6667C3.56218 14.6667 2.66675 13.7712 2.66675 12.6667M6.66675 12.6667C6.66675 11.5621 5.77132 10.6667 4.66675 10.6667C3.56218 10.6667 2.66675 11.5621 2.66675 12.6667M9.33342 12.6667C9.33342 13.7712 10.2288 14.6667 11.3334 14.6667C12.438 14.6667 13.3334 13.7712 13.3334 12.6667M9.33342 12.6667C9.33342 11.5621 10.2288 10.6667 11.3334 10.6667C12.438 10.6667 13.3334 11.5621 13.3334 12.6667M13.3334 12.6667V12.6667C14.438 12.6667 15.3334 11.7712 15.3334 10.6667V4.53334C15.3334 3.41324 15.3334 2.85319 15.1154 2.42536C14.9237 2.04904 14.6177 1.74308 14.2414 1.55133C13.8136 1.33334 13.2535 1.33334 12.1334 1.33334H10.3334C9.40153 1.33334 8.93559 1.33334 8.56805 1.48558C8.07799 1.68857 7.68864 2.07792 7.48566 2.56798C7.33342 2.93552 7.33342 3.40146 7.33342 4.33334V4.33334C7.33342 5.26523 7.33342 5.73117 7.18117 6.09871C6.97819 6.58877 6.58884 6.97811 6.09878 7.1811C5.73124 7.33334 5.2653 7.33334 4.33341 7.33334H1.00008M2.66675 12.6667V12.6667C2.20176 12.6667 1.9
22536927 12.6667 1.77852 12.6156C1.26088 12.4769 0.85656 12.0725 0.717859 11.5549C0.666748 11.3642 0.666748 11.1317 0.666748 10.6667V8.86795C0.666748 8.44463 0.666748 8.23297 0.688385 8.0258C0.734513 7.58411 0.853872 7.15318 1.04157 6.7507C1.1296 6.56192 1.2385 6.38042 1.4563 6.01743V6.01743C1.78307 5.47281 1.94646 5.20049 2.14753 4.97976C2.57779 4.50743 3.14762 4.18479 3.77402 4.05886C4.06674 4.00001 4.38431 4.00001 5.01944 4.00001H7.33342" stroke-linecap="round" stroke-linejoin="round"/> 2254 </svg></span><p class="announcement-text leading-tight">Kostenlose & schnelle Lieferung</p></div></div><div class="announcement__slide flex h-full" aria-hidden="true" ><div class="announcement__content flex items-center gap-2"><span class="announcement-icon hidden md:block"><svg class="icon icon-wallet icon-xs stroke-1" viewBox="0 0 16 16" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2255 <path d="M1.33325 2.66668V11.4667C1.33325 12.5868 1.33325 13.1468 1.55124 13.5747C1.74299 13.951 2.04895 14.2569 2.42527 14.4487C2.85309 14.6667 3.41315 14.6667 4.53325 14.6667H11.4666C12.5867 14.6667 13.1467 14.6667 13.5746 14.4487C13.9509 14.2569 14.2569 13.951 14.4486 13.5747C14.6666 13.1468 14.6666 12.5868 14.6666 11.4667V7.20001C14.6666 6.07991 14.6666 5.51985 14.4486 5.09203C14.2569 4.71571 13.9509 4.40974 13.5746 4.218C13.1467 4.00001 12.5867 4.00001 11.4666 4.00001H7.99992M14.6666 7.33334H14.3333C13.2287 7.33334 12.3333 8.22877 12.3333 9.33334V9.33334C12.3333 10.4379 13.2287 11.3333 14.3333 11.3333H14.6666M11.3333 4.00001L10.7733 3.25334C10.2453 2.54935 9.98126 2.19735 9.64668 1.94347C9.35035 1.71862 9.01478 1.55083 8.6571 1.44868C8.25325 1.33334 7.81325 1.33334 6.93325 1.33334H2.66659C1.93021 1.33334 1.33325 1.9303 1.33325 2.66668V2.66668C1.33325 3.40306 1.93021 4.00001 2.66659 4.00001H11.3333Z" stroke-linecap="round" stroke-linejoin="round"/> 2256 </svg></span><p class="announcement-text leading-tight">Sichere & flexible Zahlungsarten</p></div></div></announcement-bar></div></div> 2257</div><div id="shopify-section-sections--24796503015803__header" class="shopify-section shopify-section-group-header-group header-section"><style> 2258 #shopify-section-sections--24796503015803__header { 2259 --section-padding-top: 32px; 2260 --section-padding-bottom: 32px; 2261 --color-background: 255 255 255; 2262 --color-foreground: 23 23 23; 2263 --color-transparent: 255 255 255; 2264 } 2265</style><menu-drawer id="MenuDrawer" class="menu-drawer drawer drawer--start z-30 fixed bottom-0 left-0 h-full w-full pointer-events-none" 2266 data-section-id="sections--24796503015803__header" 2267 hidden 2268> 2269 <overlay-element class="overlay fixed-modal invisible opacity-0 fixed bottom-0 left-0 w-full h-screen pointer-events-none" aria-controls="MenuDrawer" aria-expanded="false"></overlay-element> 2270 <div class="drawer__inner z-10 absolute top-0 flex flex-col w-full h-full overflow-hidden"> 2271 <gesture-element class="drawer__header flex justify-between opacity-0 invisible relative"> 2272 <span class="drawer__title heading lg:text-3xl text-2xl leading-none tracking-tight"></span> 2273 <button class="button button--secondary button--close drawer__close hidden sm:flex items-center justify-center" type="button" is="hover-button" aria-controls="MenuDrawer" aria-expanded="false" aria-label="SchlieÃen"> 2274 <span class="btn-fill" data-fill></span> 2275 <span class="btn-text"><svg class="icon icon-close icon-sm" viewBox="0 0 20 20" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2276 <path stroke-linecap="round" stroke-linejoin="round" d="M5 15L15 5M5 5L15 15"></path> 2277 </svg></span> 2278 </button> 2279 </gesture-element> 2280 <div class="drawer__content opacity-0 invisible flex flex-col h-full grow shrink"> 2281 <nav class="relative grow overflow-hidden" role="navigation"> 2282 <ul class="drawer__scrollable drawer__menu relative w-full h-full" role="list" data-parent><li class="drawer__menu-group"><details is="menu-details"> 2283 <summary class="drawer__menu-item block cursor-pointer relative" aria-expanded="false"> 2284 <button type="button" class="heading text-2xl leading-none tracking-tight" is="api-button" data-id="DrawerSubMenu-sections--24796503015803__header-1" data-section-id="sections--24796503015803__header">Fernseher</button> 2285 </summary> 2286 <div class="drawer__submenu z-1 absolute top-0 left-0 flex flex-col w-full h-full" data-parent> 2287 <button type="button" class="tracking-tight heading text-base shrink-0 flex items-center gap-3 w-full" data-close>Fernseher</button><div id="DrawerSubMenu-sections--24796503015803__header-1" class="drawer__scrollable flex flex-col h-full"></div></div> 2288</details> 2289</li><li class="drawer__menu-group"><details is="menu-details"> 2290 <summary class="drawer__menu-item block cursor-pointer relative" aria-expanded="false"> 2291 <button type="button" class="heading text-2xl leading-none tracking-tight" is="api-button" data-id="DrawerSubMenu-sections--24796503015803__header-2" data-section-id="sections--24796503015803__header">Monitore</button> 2292 </summary> 2293 <div class="drawer__submenu z-1 absolute top-0 left-0 flex flex-col w-full h-full" data-parent> 2294 <button type="button" class="tracking-tight heading text-base shrink-0 flex items-center gap-3 w-full" data-close>Monitore</button><div id="DrawerSubMenu-sections--24796503015803__header-2" class="drawer__scrollable flex flex-col h-full"></div></div> 2295</details> 2296</li><li class="drawer__menu-group"><details is="menu-details"> 2297 <summary class="drawer__menu-item block cursor-pointer relative" aria-expanded="false"> 2298 <button type="button" class="heading text-2xl leading-none tracking-tight" is="api-button" data-id="DrawerSubMenu-sections--24796503015803__header-3" data-section-id="sections--24796503015803__header">Fitness</button> 2299 </summary> 2300 <div class="drawer__submenu z-1 absolute top-0 left-0 flex flex-col w-full h-full" data-parent> 2301 <button type="button" class="tracking-tight heading text-base shrink-0 flex items-center gap-3 w-full" data-close>Fitness</button><div id="DrawerSubMenu-sections--24796503015803__header-3" class="drawer__scrollable flex flex-col h-full"></div></div> 2302</details> 2303</li><li class="drawer__menu-group"><details is="menu-details"> 2304 <summary class="drawer__menu-item block cursor-pointer relative" aria-expanded="false"> 2305 <button type="button" class="heading text-2xl leading-none tracking-tight" is="api-button" data-id="DrawerSubMenu-sections--24796503015803__header-4" data-section-id="sections--24796503015803__header">E-Scooter</button> 2306 </summary> 2307 <div class="drawer__submenu z-1 absolute top-0 left-0 flex flex-col w-full h-full" data-parent> 2308 <button type="button" class="tracking-tight heading text-base shrink-0 flex items-center gap-3 w-full" data-close>E-Scooter</button><div id="DrawerSubMenu-sections--24796503015803__header-4" class="drawer__scrollable flex flex-col h-full"></div></div> 2309</details> 2310</li><li class="drawer__menu-group"><details is="menu-details"> 2311 <summary class="drawer__menu-item block cursor-pointer relative" aria-expanded="false"> 2312 <button type="button" class="heading text-2xl leading-none tracking-tight" is="api-button" data-id="DrawerSubMenu-sections--24796503015803__header-5" data-section-id="sections--24796503015803__header">Reinigungsroboter</button> 2313 </summary> 2314 <div class="drawer__submenu z-1 absolute top-0 left-0 flex flex-col w-full h-full" data-parent> 2315 <button type="button" class="tracking-tight heading text-base shrink-0 flex items-center gap-3 w-full" data-close>Reinigungsroboter</button><div id="DrawerSubMenu-sections--24796503015803__header-5" class="drawer__scrollable flex flex-col h-full"></div></div> 2316</details> 2317</li><li class="drawer__menu-group"><details is="menu-details"> 2318 <summary class="drawer__menu-item block cursor-pointer relative" aria-expanded="false"> 2319 <button type="button" class="heading text-2xl leading-none tracking-tight" is="api-button" data-id="DrawerSubMenu-sections--24796503015803__header-6" data-section-id="sections--24796503015803__header">Wohnen</button> 2320 </summary> 2321 <div class="drawer__submenu z-1 absolute top-0 left-0 flex flex-col w-full h-full" data-parent> 2322 <button type="button" class="tracking-tight heading text-base shrink-0 flex items-center gap-3 w-full" data-close>Wohnen</button><div id="DrawerSubMenu-sections--24796503015803__header-6" class="drawer__scrollable flex flex-col h-full"></div></div> 2323</details> 2324</li><li class="drawer__menu-group"><a class="drawer__menu-item block heading text-2xl leading-none tracking-tight" href="/pages/b2b-geschaftskundenanfragen">Geschäftskunden</a></li><li class="drawer__menu-group"><a class="drawer__menu-item block heading text-2xl leading-none tracking-tight" href="/pages/coming-soon">Angebote</a></li><li class="drawer__menu-group"><a class="drawer__menu-item block heading text-2xl leading-none tracking-tight" href="/blogs/ratgeber_kaufberatung_wissen">Ratgeber</a></li></ul> 2325 </nav> 2326 <div class="drawer__footer grid w-full"><div class="drawer__footer-bottom flex items-center justify-between gap-6"><a href="https://odiporo.de/customer_authentication/redirect?locale=de®ion_country=DE" class="button button--primary icon-with-text" is="hover-link" rel="nofollow">
2327 <span class="btn-fill" data-fill></span> 2328 <span class="btn-text"><svg class="icon icon-account-2 icon-xs" viewBox="0 0 16 17" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2329 <rect width="6.5" height="6.5" x="4.75" y="1.917" rx="3.25"></rect> 2330 <path stroke-linecap="round" d="M8 10.834c1 0 2.667.222 3 .333.333.11 2.467.533 3 1.333.667 1 .667 1.334.667 2.667M8 10.834c-1 0-2.667.222-3 .333-.333.11-2.467.533-3 1.333-.667 1-.667 1.334-.667 2.667"></path> 2331 </svg>Login</span> 2332 </a></div> 2333 </div> 2334 </div> 2335 </div> 2336</menu-drawer> 2337<header data-section-id="sections--24796503015803__header" class="header header--left mobile:header--left page-width page-width--full section section--rounded section--padding grid items-center z-20 relative w-full" is="sticky-header" data-sticky-type="always"><div class="header__icons header__icons--start flex justify-start z-2"> 2338 <div class="header__buttons flex items-center gap-1d5"><a href="/search" class="search-drawer-button flex items-center justify-center" is="magnet-link" aria-controls="SearchDrawer" aria-expanded="false" > 2339 <span class="sr-only">Suche</span><svg class="icon icon-search icon-lg" viewBox="0 0 24 24" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2340 <path stroke-linecap="round" d="m21 21-3.636-3.636m0 0A9 9 0 1 0 4.636 4.636a9 9 0 0 0 12.728 12.728Z"></path> 2341 </svg></a><button class="menu-drawer-button flex items-center justify-center" type="button" is="magnet-button" aria-controls="MenuDrawer" aria-expanded="false"> 2342 <span class="sr-only">Seitennavigation</span><svg class="icon icon-hamburger icon-lg" viewBox="0 0 24 24" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2343 <path stroke-linecap="round" d="M3 6H21M3 12H11M3 18H16"></path> 2344 </svg></button></div> 2345</div> 2346<div class="header__logo flex justify-center z-2" itemscope itemtype="http://schema.org/Organization"><a 2347 href="/" 2348 itemprop="url" 2349 class="header__logo-link has-white-logo flex items-center relative" 2350 > 2351 <span class="sr-only">odiporo.de - Smarte Elektronik für jeden Anspruch</span><img src="//odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone.jpg?v=1776089538&width=2794" alt="Logo mit dem Schriftzug odiporo.de in schwarzer Schrift, mit einer gelben und weiÃen Pillenform vor dem Buchstaben o auf weiÃem Hintergrund." srcset="//odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone.jpg?v=1776089538&width=260 260w, //odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone.jpg?v=1776089538&width=520 520w" width="2794" height="713" loading="eager" sizes="260px" style="max-height: 66.34931997136721px;max-width: 260px;" itemprop="logo" is="lazy-image" class="logo hidden md:block"><img src="//odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_abc754b7-3558-4575-a94b-e9706704929d.jpg?v=1776089582&width=2794" alt="Logo mit dem Text odiporo.de in schwarzen Kleinbuchstaben; das o ist teilweise mit einem gelben kapselförmigen Hintergrund auf der linken Seite gefüllt." srcset="//odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_abc754b7-3558-4575-a94b-e9706704929d.jpg?v=1776089582&width=160 160w, //odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_abc754b7-3558-4575-a94b-e9706704929d.jpg?v=1776089582&width=320 320w" width="2794" height="713" loading="eager" sizes="160px" style="max-height: 40.83035075161059px;max-width: 160px;" itemprop="logo" is="lazy-image" class="logo md:hidden"><img src="//odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_invers.png?v=1776255252&width=1000" alt="Das Bild zeigt den Text odiporo.de in einer modernen, hellen Schriftart mit einem gelben und weiÃen kapselförmigen Design, das den Buchstaben o am Anfang bildet." srcset="//odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_invers.png?v=1776255252&width=260 260w, //odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_invers.png?v=1776255252&width=520 520w" width="1000" height="255" loading="eager" sizes="260px" style="max-height: 66.3px;max-width: 260px;" itemprop="logo" is="lazy-image" class="white-logo hidden md:block absolute"><img src="//odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_invers.png?v=1776255252&width=1000" alt="Das Bild zeigt den Text odiporo.de in einer modernen, hellen Schriftart mit einem gelben und weiÃen kapselförmigen Design, das den Buchstaben o am Anfang bildet." srcset="//odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_invers.png?v=1776255252&width=160 160w, //odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_invers.png?v=1776255252&width=320 320w" width="1000" height="255" loading="eager" sizes="160px" style="max-height: 40.800000000000004px;max-width: 160px;" itemprop="logo" is="lazy-image" class="white-logo md:hidden absolute"></a></div><div class="header__navigation hidden lg:flex lg:gap-5 lg:justify-start"> 2352 <nav class="header__menu hidden lg:flex" role="navigation" aria-label="Primary"><ul class="flex flex-wrap gap-1 list-menu with-block"><li> 2353 <details is="details-mega" trigger="click" level="top" > 2354 <summary data-link="/collections/dyon-fernseher-smart-tv" class="z-2 relative rounded-full"> 2355 <button type="button" class="menu__item text-sm-lg flex items-center font-medium z-2 relative cursor-pointer" is="api-magnet-button" data-id="HeaderNavMega-sections--24796503015803__header-1-start" data-section-id="sections--24796503015803__header" data-magnet
2355="0" tabindex="-1"> 2356 <span class="btn-text" data-text>Fernseher<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2357 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2358 </svg></span><span class="btn-text btn-duplicate">Fernseher<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2359 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2360 </svg></span></button> 2361 </summary> 2362 <div class="mega-menu absolute top-0 left-0 w-full max-w-full overflow-hidden pointer-events-none"><div class="mega-menu__container invisible"><ul id="HeaderNavMega-sections--24796503015803__header-1-start" class="mega-menu__list page-width page-width--full flex flex-wrap w-full h-full overflow-hidden" role="list" tabindex="-1"><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2363 <span class="media-card media-card--card w-full h-full"></span> 2364 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2365 <span class="media-card media-card--card w-full h-full"></span> 2366 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2367 <span class="media-card media-card--card w-full h-full"></span> 2368 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2369 <span class="media-card media-card--card w-full h-full"></span> 2370 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2371 <span class="media-card media-card--card w-full h-full"></span> 2372 </li></ul></div></div> 2373 </details> 2374 </li><li> 2375 <details is="details-mega" trigger="click" level="top" > 2376 <summary data-link="/collections/odys-monitore-gaming-office-curved-ultra-wide-alle" class="z-2 relative rounded-full"> 2377 <button type="button" class="menu__item text-sm-lg flex items-center font-medium z-2 relative cursor-pointer" is="api-magnet-button" data-id="HeaderNavMega-sections--24796503015803__header-2-start" data-section-id="sections--24796503015803__header" data-magnet="0" tabindex="-1"> 2378 <span class="btn-text" data-text>Monitore<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2379 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2380 </svg></span><span class="btn-text btn-duplicate">Monitore<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2381 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2382 </svg></span></button> 2383 </summary> 2384 <div class="mega-menu absolute top-0 left-0 w-full max-w-full overflow-hidden pointer-events-none"><div class="mega-menu__container invisible"><ul id="HeaderNavMega-sections--24796503015803__header-2-start" class="mega-menu__list page-width page-width--full flex flex-wrap w-full h-full overflow-hidden" role="list" tabindex="-1"><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2385 <span class="media-card media-card--card w-full h-full"></span> 2386 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2387 <span class="media-card media-card--card w-full h-full"></span> 2388 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2389 <span class="media-card media-card--card w-full h-full"></span> 2390 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2391 <span class="media-card media-card--card w-full h-full"></span> 2392 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2393 <span class="media-card media-card--card w-full h-full"></span> 2394 </li></ul></div></div> 2395 </details> 2396 </li><li> 2397 <details is="details-mega" trigger="click" level="top" > 2398 <summary data-link="/collections/fitness" class="z-2 relative rounded-full"> 2399 <button type="button" class="menu__item text-sm-lg flex items-center font-medium z-2 relative cursor-pointer" is="api-magnet-button" data-id="HeaderNavMega-sections--24796503015803__header-3-start" data-section-id="sections--24796503015803__header" data-magnet
2399="0" tabindex="-1"> 2400 <span class="btn-text" data-text>Fitness<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2401 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2402 </svg></span><span class="btn-text btn-duplicate">Fitness<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2403 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2404 </svg></span></button> 2405 </summary> 2406 <div class="mega-menu absolute top-0 left-0 w-full max-w-full overflow-hidden pointer-events-none"><div class="mega-menu__container invisible"><ul id="HeaderNavMega-sections--24796503015803__header-3-start" class="mega-menu__list page-width page-width--full flex flex-wrap w-full h-full overflow-hidden" role="list" tabindex="-1"><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2407 <span class="media-card media-card--card w-full h-full"></span> 2408 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2409 <span class="media-card media-card--card w-full h-full"></span> 2410 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2411 <span class="media-card media-card--card w-full h-full"></span> 2412 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2413 <span class="media-card media-card--card w-full h-full"></span> 2414 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2415 <span class="media-card media-card--card w-full h-full"></span> 2416 </li></ul></div></div> 2417 </details> 2418 </li><li> 2419 <details is="details-mega" trigger="click" level="top" > 2420 <summary data-link="/collections/e-scooter" class="z-2 relative rounded-full"> 2421 <button type="button" class="menu__item text-sm-lg flex items-center font-medium z-2 relative cursor-pointer" is="api-magnet-button" data-id="HeaderNavMega-sections--24796503015803__header-4-start" data-section-id="sections--24796503015803__header" data-magnet="0" tabindex="-1"> 2422 <span class="btn-text" data-text>E-Scooter<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2423 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2424 </svg></span><span class="btn-text btn-duplicate">E-Scooter<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2425 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2426 </svg></span></button> 2427 </summary> 2428 <div class="mega-menu absolute top-0 left-0 w-full max-w-full overflow-hidden pointer-events-none"><div class="mega-menu__container invisible"><ul id="HeaderNavMega-sections--24796503015803__header-4-start" class="mega-menu__list page-width page-width--full flex flex-wrap w-full h-full overflow-hidden" role="list" tabindex="-1"><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2429 <span class="media-card media-card--card w-full h-full"></span> 2430 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2431 <span class="media-card media-card--card w-full h-full"></span> 2432 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2433 <span class="media-card media-card--card w-full h-full"></span> 2434 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2435 <span class="media-card media-card--card w-full h-full"></span> 2436 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2437 <span class="media-card media-card--card w-full h-full"></span> 2438 </li></ul></div></div> 2439 </details> 2440 </li><li> 2441 <details is="details-mega" trigger="click" level="top" > 2442 <summary data-link="/collections/saugroboter" class="z-2 relative rounded-full"> 2443 <button type="button" class="menu__item text-sm-lg flex items-center font-medium z-2 relative cursor-pointer" is="api-magnet-button" data-id="HeaderNavMega-sections--24796503015803__header-5-start" data-section-id="sections--24796503015803__header" data-magnet
2443="0" tabindex="-1"> 2444 <span class="btn-text" data-text>Reinigungsroboter<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2445 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2446 </svg></span><span class="btn-text btn-duplicate">Reinigungsroboter<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2447 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2448 </svg></span></button> 2449 </summary> 2450 <div class="mega-menu absolute top-0 left-0 w-full max-w-full overflow-hidden pointer-events-none"><div class="mega-menu__container invisible"><ul id="HeaderNavMega-sections--24796503015803__header-5-start" class="mega-menu__list page-width page-width--full flex flex-wrap w-full h-full overflow-hidden" role="list" tabindex="-1"><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2451 <span class="media-card media-card--card w-full h-full"></span> 2452 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2453 <span class="media-card media-card--card w-full h-full"></span> 2454 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2455 <span class="media-card media-card--card w-full h-full"></span> 2456 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2457 <span class="media-card media-card--card w-full h-full"></span> 2458 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2459 <span class="media-card media-card--card w-full h-full"></span> 2460 </li></ul></div></div> 2461 </details> 2462 </li><li> 2463 <details is="details-mega" trigger="click" level="top" > 2464 <summary data-link="/collections/wohnen" class="z-2 relative rounded-full"> 2465 <button type="button" class="menu__item text-sm-lg flex items-center font-medium z-2 relative cursor-pointer" is="api-magnet-button" data-id="HeaderNavMega-sections--24796503015803__header-6-start" data-section-id="sections--24796503015803__header" data-magnet="0" tabindex="-1"> 2466 <span class="btn-text" data-text>Wohnen<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2467 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2468 </svg></span><span class="btn-text btn-duplicate">Wohnen<svg class="icon icon-chevron-menu icon-md" viewBox="0 0 10 7" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2469 <path stroke-linecap="round" stroke-linejoin="round" d="m1 1 4 4 4-4"></path> 2470 </svg></span></button> 2471 </summary> 2472 <div class="mega-menu absolute top-0 left-0 w-full max-w-full overflow-hidden pointer-events-none"><div class="mega-menu__container invisible"><ul id="HeaderNavMega-sections--24796503015803__header-6-start" class="mega-menu__list page-width page-width--full flex flex-wrap w-full h-full overflow-hidden" role="list" tabindex="-1"><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2473 <span class="media-card media-card--card w-full h-full"></span> 2474 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2475 <span class="media-card media-card--card w-full h-full"></span> 2476 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2477 <span class="media-card media-card--card w-full h-full"></span> 2478 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2479 <span class="media-card media-card--card w-full h-full"></span> 2480 </li><li class="mega-menu__item flex opacity-0 w-full aspect-square"> 2481 <span class="media-card media-card--card w-full h-full"></span> 2482 </li></ul></div></div> 2483 </details> 2484 </li><li> 2485 <a href="/pages/b2b-geschaftskundenanfragen" class="menu__item text-sm-lg flex items-center font-medium z-2 relative cursor-pointer" is="magnet-link" data-magnet
2485="0"> 2486 <span class="btn-text" data-text>Geschäftskunden</span><span class="btn-text btn-duplicate">Geschäftskunden</span></a> 2487 </li><li> 2488 <a href="/pages/coming-soon" class="menu__item text-sm-lg flex items-center font-medium z-2 relative cursor-pointer" is="magnet-link" data-magnet="0"> 2489 <span class="btn-text" data-text>Angebote</span><span class="btn-text btn-duplicate">Angebote</span></a> 2490 </li><li> 2491 <a href="/blogs/ratgeber_kaufberatung_wissen" class="menu__item text-sm-lg flex items-center font-medium z-2 relative cursor-pointer" is="magnet-link" data-magnet="0"> 2492 <span class="btn-text" data-text>Ratgeber</span><span class="btn-text btn-duplicate">Ratgeber</span></a> 2493 </li></ul> 2494</nav> 2495 </div><div class="header__icons header__icons--end flex justify-end z-2"> 2496 <div class="header__buttons flex items-center gap-1d5"><a href="/search" class="search-drawer-button flex items-center justify-center" is="magnet-link" aria-controls="SearchDrawer" aria-expanded="false" > 2497 <span class="sr-only">Suche</span><svg class="icon icon-search icon-lg" viewBox="0 0 24 24" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2498 <path stroke-linecap="round" d="m21 21-3.636-3.636m0 0A9 9 0 1 0 4.636 4.636a9 9 0 0 0 12.728 12.728Z"></path> 2499 </svg></a><a href="https://odiporo.de/customer_authentication/redirect?locale=de®ion_country=DE" class="hidden lg:flex items-center justify-center" is="magnet-link" rel="nofollow"> 2500 <span class="sr-only">Login</span><svg class="icon icon-account icon-lg" viewBox="0 0 24 24" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2501 <rect width="10.5" height="10.5" x="6.75" y="1.75" rx="5.25"></rect> 2502 <path stroke-linecap="round" d="M12 15.5c1.5 0 4 .333 4.5.5.5.167 3.7.8 4.5 2 1 1.5 1 2 1 4m-10-6.5c-1.5 0-4 .333-4.5.5-.5.167-3.7.8-4.5 2-1 1.5-1 2-1 4"></path> 2503 </svg></a><a href="/cart" class="cart-drawer-button flex items-center justify-center relative" is="magnet-link" aria-controls="CartDrawer" aria-expanded="false" data-no-instant> 2504 <span class="sr-only">Warenkorb</span><svg class="icon icon-cart icon-lg" viewBox="0 0 24 24" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2505 <path stroke-linecap="round" stroke-linejoin="round" d="M1 1h.5v0c.226 0 .339 0 .44.007a3 3 0 0 1 2.62 1.976c.034.095.065.204.127.42l.17.597m0 0 1.817 6.358c.475 1.664.713 2.496 1.198 3.114a4 4 0 0 0 1.633 1.231c.727.297 1.592.297 3.322.297h2.285c1.75 0 2.626 0 3.359-.302a4 4 0 0 0 1.64-1.253c.484-.627.715-1.472 1.175-3.161l.06-.221c.563-2.061.844-3.092.605-3.906a3 3 0 0 0-1.308-1.713C19.92 4 18.853 4 16.716 4H4.857ZM12 20a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm8 0a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z"></path> 2506 </svg><cart-count class="count absolute top-0 right-0 text-xs" aria-label="0 Artikel" hidden>0</cart-count> 2507 </a><button class="menu-drawer-button flex items-center justify-center" type="button" is="magnet-button" aria-controls="MenuDrawer" aria-expanded="false"> 2508 <span class="sr-only">Seitennavigation</span><svg class="icon icon-hamburger icon-lg" viewBox="0 0 24 24" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2509 <path stroke-linecap="round" d="M3 6H21M3 12H11M3 18H16"></path> 2510 </svg></button></div> 2511</div> 2512<span class="header__corner corner left bottom flex absolute pointer-events-none">
2513 <svg class="w-full h-auto" viewBox="0 0 101 101" stroke="none" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 2514 <path fill-rule="evenodd" clip-rule="evenodd" d="M101 0H0V101H1C1 45.7715 45.7715 1 101 1V0Z"></path> 2515 <path d="M1 101C1 45.7715 45.7715 1 101 1" fill="none"></path> 2516 </svg> 2517</span> 2518<span class="header__corner corner right bottom flex absolute pointer-events-none"> 2519 <svg class="w-full h-auto" viewBox="0 0 101 101" stroke="none" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 2520 <path fill-rule="evenodd" clip-rule="evenodd" d="M101 0H0V101H1C1 45.7715 45.7715 1 101 1V0Z"></path> 2521 <path d="M1 101C1 45.7715 45.7715 1 101 1" fill="none"></path> 2522 </svg> 2523</span><span class="header__cutout cutout opacity-0 absolute left-0 top-100 w-full pointer-events-none"></span></header><overlay-element class="overlay opacity-0 z-1 fixed left-0 w-full pointer-events-none"></overlay-element>
2523<script> 2524 if (Shopify.designMode) { 2525 document.documentElement.style.setProperty('--header-height', Math.round(document.getElementById('shopify-section-sections--24796503015803__header').clientHeight) + 'px'); 2526 } 2527</script>
2527 2528 2529 2530</div> 2531<!-- END sections: header-group --><!-- BEGIN sections: overlay-group --> 2532<div id="shopify-section-sections--24796502983035__cart-drawer" class="shopify-section shopify-section-group-overlay-group"> 2533<style> #shopify-section-sections--24796502983035__cart-drawer .drawer__title.heading {font-size: 1.55rem;} </style></div><div id="shopify-section-sections--24796502983035__search-drawer" class="shopify-section shopify-section-group-overlay-group">
2533<script src="//odiporo.de/cdn/shop/t/3/assets/search.js?v=153964456974568625491744817342" defer></script>
2533<search-drawer id="SearchDrawer" class="search-drawer drawer drawer--end z-35 fixed bottom-0 left-0 h-full w-full pointer-events-none" 2534 role="dialog" 2535 aria-modal="true" 2536 aria-label="Suche" 2537 shopify-design-mode 2538 hidden 2539 > 2540 <overlay-element class="overlay fixed-modal invisible opacity-0 fixed bottom-0 left-0 w-full h-screen pointer-events-none" aria-controls="SearchDrawer" aria-expanded="false"></overlay-element> 2541 <div class="drawer__inner z-10 absolute top-0 flex flex-col w-full h-full overflow-hidden"> 2542 <gesture-element class="drawer__header flex justify-between opacity-0 invisible relative"> 2543 <span class="drawer__title heading lg:text-3xl text-2xl leading-none tracking-tight">Suche</span> 2544 <button class="button button--secondary button--close drawer__close hidden sm:flex items-center justify-center" type="button" is="hover-button" aria-controls="SearchDrawer" aria-expanded="false" aria-label="SchlieÃen"> 2545 <span class="btn-fill" data-fill></span> 2546 <span class="btn-text"><svg class="icon icon-close icon-sm" viewBox="0 0 20 20" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2547 <path stroke-linecap="round" stroke-linejoin="round" d="M5 15L15 5M5 5L15 15"></path> 2548 </svg></span> 2549 </button> 2550 </gesture-element> 2551 <div class="drawer__content opacity-0 invisible flex flex-col h-full grow shrink"> 2552 <div class="drawer__scrollable relative flex flex-col grow shrink"><form class="search__form flex flex-col gap-8 h-full relative" action="/search" method="GET" role="search"> 2553 <input type="hidden" name="options[prefix]" value="last" /> 2554 <label class="sr-only" for="SearchFormInput-sections--24796502983035__search-drawer">Suche</label> 2555 <div class="search__field field flex items-center gap-4 relative"><input 2556 class="input" 2557 type="search" 2558 name="q" 2559 id="SearchFormInput-sections--24796502983035__search-drawer" 2560 placeholder="Durchsuchen Sie unseren Shop" 2561 autocomplete="off" 2562 autocorrect="off" 2563 autocapitalize="off" 2564 spellcheck="off"/></div></form> 2565</div> 2566 </div> 2567 </div> 2568 </search-drawer> 2569</div> 2570<!-- END sections: overlay-group --><div class="page-container" id="PageContainer"> 2571 <main class="main-content relative" id="MainContent" role="main"> 2572 <div id="shopify-section-template--24796501901691__main" class="shopify-section"><style> 2573 #shopify-section-template--24796501901691__main { 2574 --section-padding-top: 72px; 2575 --section-padding-bottom: 60px; 2576 } 2577</style> 2578 2579<link href="//odiporo.de/cdn/shop/t/3/assets/cart.css?v=44492766454939690861744817342" rel="stylesheet" type="text/css" media="all" />
2580<script src="//odiporo.de/cdn/shop/t/3/assets/cart.js?v=15891569860397040191744817341" defer></script>
2580<div class="cart is-empty section"> 2581 <div class="page-width relative"> 2582 <div class="title-wrapper leading-none grid gap-4 md:flex md:items-end md:justify-between"> 2583 <h1 class="heading title-xl tracking-heading"> 2584 <split-words class="split-words block" data-animate="fade-up-large">Dein Warenkorb</split-words> 2585 </h1> 2586 <p> 2587 <a class="button button--secondary icon-with-text" href="/collections/all" is="hover-link"> 2588 <span class="btn-fill" data-fill></span> 2589 <span class="btn-text"><svg class="icon icon-return icon-sm" viewBox="0 0 22 10" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2590 <path stroke-linecap="round" stroke-linejoin="round" d="M1 9V1M1 9H8.77778M1 9C1 9 6 1 12 1C20 1 21 9 21 9"></path> 2591 </svg>Weiter shoppen</span> 2592 </a> 2593 </p> 2594 </div> 2595 2596 <div class="empty-state grid items-center justify-center text-center gap-7d5 md:gap-14"> 2597 <div class="flex flex-col items-center gap-5 md:gap-10"><svg class="icon icon-empty icon-xxxl" viewBox="0 0 60 61" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2598 <path stroke-linecap="round" stroke-linejoin="round" d="M23.75 25.5a1.25 1.25 0 1 1-2.5 0m2.5 0a1.25 1.25 0 1 0-2.5 0m2.5 0h-2.5m17.5 0a1.25 1.25 0 1 1-2.5 0m2.5 0a1.25 1.25 0 1 0-2.5 0m2.5 0h-2.5m3.75 15c-2.28-3.036-5.91-5-10-5s-7.72 1.964-10.001 5M30 55.5v0c13.807 0 25-11.193 25-25v0c0-13.807-11.193-25-25-25v0c-13.807 0-25 11.193-25 25v0c0 13.807 11.193 25 25 25Z"></path> 2599 </svg><div class="grid gap-5"> 2600 <p class="heading leading-none tracking-tight">Dein Warenkorb ist leer.</p> 2601 </div> 2602 </div> 2603 <a class="empty-state__link button button--primary button--fixed" href="/collections/all" is="hover-link"> 2604 <span class="btn-fill" data-fill></span> 2605 <span class="btn-text">Weiter shoppen</span> 2606 </a> 2607 </div></div> 2608</div> 2609 2610 2611</div><div id="shopify-section-template--24796501901691__recently-viewed" class="shopify-section recently-section"><style> 2612 #shopify-section-template--24796501901691__recently-viewed { 2613 --section-padding-top: 60px; 2614 --section-padding-bottom: 100px;} 2615</style> 2616 2617<recently-viewed class="recently-viewed block" data-url="/search?section_id=template--24796501901691__recently-viewed&type=product&q=" data-limit="6"></recently-viewed> 2618 2619 2620</div> 2621 </main> 2622 2623 <footer-group class="footer-group block w-full"><!-- BEGIN sections: footer-group --> 2624<div id="shopify-section-sections--24796503048571__footer" class="shopify-section shopify-section-group-footer-group"><style> 2625 #shopify-section-sections--24796503048571__footer { 2626 --section-padding-top: 12px; 2627 --section-padding-bottom: 48px;--color-background: 31 31 31;--color-foreground: 255 255 255; 2628 --color-border: var(--color-foreground)/ 0.1; 2629 --color-border-dark: var(--color-foreground)/ 0.4; 2630 --color-border-light: var(--color-foreground)/ 0.06;--color-button-background: 255 255 255; 2631 --color-button-border: 255 255 255;--color-button-text: 0 0 0;} 2632</style><div class="section section--padding section--rounded" is="footer-parallax"> 2633 <footer class="footer footer--inverted page-width page-width--full relative grid"><div class="footer__left flex flex-col md:flex-row gap-10"><div class="footer__accordions flex flex-wrap flex-col md:flex-row md:grow md:gap-12"> 2634 2635 <details class="footer__item--link_list-2 details active" is="footer-details" data-opened > 2636 <summary class="details__summary flex items-center justify-between gap-2 cursor-pointer"> 2637 <span class="heading text-base-2xl font-medium lg:font-heading">Support</span><svg class="icon icon-chevron-up icon-md" viewBox="0 0 24 24" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2638 <path stroke-linecap="round" stroke-linejoin="round" d="M6 15L12 9L18 15"></path> 2639 </svg></summary><div class="details__content"> 2640 <ul class="flex flex-col gap-3"><li class="inline-flex"> 2641 <a href="/pages/uber-uns" class="block reversed-link text-sm-lg leading-tight">Ãber uns</a> 2642 </li><li class="inline-flex"> 2643 <a href="/pages/b2b-geschaftskundenanfragen" class="block reversed-link text-sm-lg leading-tight">Geschäftskunden</a> 2644 </li><li class="inline-flex"> 2645 <a href="/blogs/ratgeber_kaufberatung_wissen" class="block reversed-link text-sm-lg leading-tight">Ratgeber</a> 2646 </li><li class="inline-flex"> 2647 <a href="/pages/kontakt" class="block reversed-link text-sm-lg leading-tight">Hilfe & Kontakt</a> 2648 </li><li class="inline-flex"> 2649 <a href="/pages/warum-wir-dir-30-tage-ruckgaberecht-schenken" class="block reversed-link text-sm-lg leading-tight">30 Tage kostenlose Rückgabe</a> 2650 </li><li class="inline-flex"> 2651 <a href="/pages/kostenlose-lieferung" class="block reversed-link text-sm-lg leading-tight">Kostenlose Lieferung</a> 2652 </li><li class="inline-flex"> 2653 <a href="/pages/zahlungsarten" class="block reversed-link text-sm-lg leading-tight">
2653Sichere & flexible Zahlung</a> 2654 </li><li class="inline-flex"> 2655 <a href="/pages/erklarung-zur-barrierefreiheit" class="block reversed-link text-sm-lg leading-tight">Barrierefreiheit</a> 2656 </li><li class="inline-flex"> 2657 <a href="/apps/widerruf" class="block reversed-link text-sm-lg leading-tight">Vertrag widerrufen</a> 2658 </li></ul> 2659 </div> 2660 <style> 2661 @media (min-width: 1280px) { 2662 .footer__item--link_list-2 { width: calc(50% - var(--sp-12)); } 2663 } 2664 </style></details> 2665 2666 2667 2668 2669 <div class="footer__custom-badge text-center" style="margin-top:30px;"> 2670 2671 <h2 class="h4" style="margin-bottom:10px;">Unsere Partner</h2> 2672 2673 <a href="https://www.idealo.de/preisvergleich/Shop/324690.html#i" target="_blank"><img src="https://img.idealo.com/badges/324690/97223127-5589-4caf-8eb8-8e999df136ce" alt="unsere idealo.de Bewertungen" style="max-width:200px;height:auto;"></a> <br> <a href="https://www.adcell.de/partnerprogramme/11079" target="_blank"> 2674 <img style="border: 1px solid #aaa; border-radius: 5px;" src="https://storage.googleapis.com/adcell_documents/media_library/f7/11/26315627bafba5057f_6.png" title="Klicken Sie hier, um zum Affiliate-Programm von Odiporo bei ADCELL zu gelangen." alt="Affiliate Netzwerk ADCELL"> 2675 </a> 2676 </div> 2677 2678 2679 </div> 2680 </div><div class="footer__right grid gap-10"><div class="footer__newsletter grid gap-6"><p class="footer__logo leading-none"> 2681 <a href="/"> 2682 <span class="sr-only">odiporo.de - Smarte Elektronik für jeden Anspruch</span><img src="//odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_invers.png?v=1776255252&width=1000" alt="Das Bild zeigt den Text odiporo.de in einer modernen, hellen Schriftart mit einem gelben und weiÃen kapselförmigen Design, das den Buchstaben o am Anfang bildet." srcset="//odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_invers.png?v=1776255252&width=274 274w, //odiporo.de/cdn/shop/files/Odiporo.de_Logo_Pantone_invers.png?v=1776255252&width=549 549w" width="1000" height="255" loading="eager" sizes="274.5098039215686px" style="--image-width: 274.5098039215686px; --image-height: 70px;" is="lazy-image"></a> 2683 </p><p class="h3 text-xl md:title-sm leading-none tracking-none font-medium lg:font-heading">Melden Sie sich für unseren odiporo.de Newsletter an und sichern Sie sich exklusive Angebote.</p><form method="post" action="/contact#newsletter-sections--24796503048571__footer" id="newsletter-sections--24796503048571__footer" accept-charset="UTF-8" class="newsletter-form grid gap-5"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="contact[tags]" value="newsletter" /> 2684 <input type="hidden" name="contact[context]" value="footer" /> 2685 <div class="field relative"> 2686 <input 2687 id="NewsletterForm--sections--24796503048571__footer" 2688 class="input is-floating input--fill" 2689 type="email" 2690 name="contact[email]" 2691 value="" 2692 autocorrect="off" 2693 autocapitalize="off" 2694 autocomplete="email" 2695 placeholder="Deine Mailadresse" 2696 required/> 2697 <label class="label is-floating" for="NewsletterForm--sections--24796503048571__footer">Deine Mailadresse</label> 2698 <div class="self-submit-button absolute"> 2699 <button type="submit" class="button button--primary self-button flex justify-center items-center" is="magnet-button" data-magnet="20" aria-label="Abonnieren"> 2700 <span class="btn-text"> 2701 <svg class="icon icon-arrow-right icon-xs transform" viewBox="0 0 16 16" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg"> 2702 <path stroke-linecap="round" stroke-linejoin="round" d="M2 8.00012H14M14 8.00012L9.33333 3.3335M14 8.00012L9.33333 12.6668"></path> 2703 </svg> 2704 </span> 2705 </button> 2706 </div> 2707 </div></form></div><div class="footer__socials flex justify-start md:justify-end xl:justify-start"><ul class="flex flex-wrap items-center gap-7"><li><a href="https://www.facebook.com/Odiporo" class="social_platform block relative" is="magnet-link" title="odip
2707oro.de - Smarte Elektronik für jeden Anspruch auf Facebook"><svg class="icon icon-facebook icon-lg" viewBox="0 0 24 24" stroke="none" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 2708 <path d="M9.03153 23L9 13H5V9H9V6.5C9 2.7886 11.2983 1 14.6091 1C16.1951 1 17.5581 1.11807 17.9553 1.17085V5.04948L15.6591 5.05052C13.8584 5.05052 13.5098 5.90614 13.5098 7.16171V9H18.75L16.75 13H13.5098V23H9.03153Z"/> 2709 </svg><span class="sr-only">Facebook</span> 2710 </a> 2711 </li><li><a href="https://www.instagram.com/odiporo.de/" class="social_platform block relative" is="magnet-link" title="odiporo.de - Smarte Elektronik für jeden Anspruch auf Instagram"><svg class="icon icon-instagram icon-lg" viewBox="0 0 24 24" stroke="none" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 2712 <path d="M12 2.98C14.94 2.98 15.28 2.99 16.44 3.04C17.14 3.04 17.83 3.18 18.48 3.42C18.96 3.6 19.39 3.88 19.75 4.24C20.12 4.59 20.4 5.03 20.57 5.51C20.81 6.16 20.94 6.85 20.95 7.55C21 8.71 21.01 9.06 21.01 12C21.01 14.94 21 15.28 20.95 16.44C20.95 17.14 20.81 17.83 20.57 18.48C20.39 18.95 20.11 19.39 19.75 19.75C19.39 20.11 18.96 20.39 18.48 20.57C17.83 20.81 17.14 20.94 16.44 20.95C15.28 21 14.93 21.01 12 21.01C9.07 21.01 8.72 21 7.55 20.95C6.85 20.95 6.16 20.81 5.51 20.57C5.03 20.39 4.6 20.11 4.24 19.75C3.87 19.4 3.59 18.96 3.42 18.48C3.18 17.83 3.05 17.14 3.04 16.44C2.99 15.28 2.98 14.93 2.98 12C2.98 9.07 2.99 8.72 3.04 7.55C3.04 6.85 3.18 6.16 3.42 5.51C3.6 5.03 3.88 4.6 4.24 4.24C4.59 3.87 5.03 3.59 5.51 3.42C6.16 3.18 6.85 3.05 7.55 3.04C8.71 2.99 9.06 2.98 12 2.98ZM12 1C9.01 1 8.64 1.01 7.47 1.07C6.56 1.09 5.65 1.26 4.8 1.58C4.07 1.86 3.4 2.3 2.85 2.85C2.3 3.41 1.86 4.07 1.58 4.8C1.26 5.65 1.09 6.56 1.07 7.47C1.02 8.64 1 9.01 1 12C1 14.99 1.01 15.36 1.07 16.53C1.09 17.44 1.26 18.35 1.58 19.2C1.86 19.93 2.3 20.6 2.85 21.15C3.41 21.7 4.07 22.14 4.8 22.42C5.65 22.74 6.56 22.91 7.47 22.93C8.64 22.98 9.01 23 12 23C14.99 23 15.36 22.99 16.53 22.93C17.44 22.91 18.35 22.74 19.2 22.42C19.93 22.14 20.6 21.7 21.15 21.15C21.7 20.59 22.14 19.93 22.42 19.2C22.74 18.35 22.91 17.44 22.93 16.53C22.98 15.36 23 14.99 23 12C23 9.01 22.99 8.64 22.93 7.47C22.91 6.56 22.74 5.65 22.42 4.8C22.14 4.07 21.7 3.4 21.15 2.85C20.59 2.3 19.93 1.86 19.2 1.58C18.35 1.26 17.44 1.09 16.53 1.07C15.36 1.02 14.99 1 12 1ZM12 6.35C10.88 6.35 9.79 6.68 8.86 7.3C7.93 7.92 7.21 8.8 6.78 9.84C6.35 10.87 6.24 12.01 6.46 13.1C6.68 14.2 7.22 15.2 8.01 15.99C8.8 16.78 9.81 17.32 10.9 17.54C12 17.76 13.13 17.65 14.16 17.22C15.19 16.79 16.07 16.07 16.7 15.14C17.32 14.21 17.65 13.12 17.65 12C17.65 10.5 17.05 9.06 16 8.01C14.94 6.95 13.5 6.36 12.01 6.36L12 6.35ZM12 15.67C11.27 15.67 10.57 15.45 9.96 15.05C9.36 14.65 8.89 14.07 8.61 13.4C8.33 12.73 8.26 11.99 8.4 11.28C8.54 10.57 8.89 9.92 9.4 9.4C9.91 8.88 10.57 8.54 11.28 8.4C11.99 8.26 12.73 8.33 13.4 8.61C14.07 8.89 14.64 9.36 15.05 9.96C15.45 10.56 15.67 11.27 15.67 12C15.67 12.97 15.28 13.91 14.6 14.59C13.91 15.28 12.98 15.66 12.01 15.66L12 15.67ZM17.87 7.45C18.6 7.45 19.19 6.86 19.19 6.13C19.19 5.4 18.6 4.81 17.87 4.81C17.14 4.81 16.55 5.4 16.55 6.13C16.55 6.86 17.14 7.45 17.87 7.45Z"/> 2713 </svg><span class="sr-only">Instagram</span> 2714 </a> 2715 </li><li><a href="https://www.youtube.com/channel/UCFAKK0tiJMLwDbjcoZQPiiA/videos" class="social_platform block relative" is="magnet-link" title="odiporo.de - Smarte Elektronik für jeden Anspruch auf YouTube"><svg class="icon icon-youtube icon-lg" viewBox="0 0 24 24" stroke="none" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 2716 <path d="M23.8 7.6C23.8 7.6 23.6 5.9 22.8 5.2C21.9 4.2 20.9 4.2 20.4 4.2C17 4 12 4 12 4C12 4 7 4 3.6 4.2C3.1 4.3 2.1 4.3 1.2 5.2C0.5 5.9 0.2 7.6 0.2 7.6C0.2 7.6 0 9.5 0 11.5V13.3C0 15.2 0.2 17.2 0.2 17.2C0.2 17.2 0.4 18.9 1.2 19.6C2.1 20.6 3.3 20.5 3.8 20.6C5.7 20.8 12 20.8 12 20.8C12 20.8 17 20.8 20.4 20.5C20.9 20.4 21.9 20.4 22.8 19.5C23.5 18.8 23.8 17.1 23.8 17.1C23.8 17.1 24 15.2 24 13.2V11.4C24 9.5 23.8 7.6 23.8 7.6ZM9.5 15.5V8.8L16 12.2L9.5 15.5Z"/> 2717 </svg><span class="sr-only">YouTube</span> 2718 </a> 2719 </li><li><a href="https://www.tiktok.com/@odiporo.de" class="social_platform block relative" is="magnet-link" title="odip
2719oro.de - Smarte Elektronik für jeden Anspruch auf TikTok"><svg class="icon icon-tiktok icon-lg" viewBox="0 0 24 24" stroke="none" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> 2720 <path d="M10.6315 8.937V13.059C10.1123 12.9221 9.56911 12.9034 9.0418 13.0044C8.5145 13.1054 8.01657 13.3234 7.58473 13.6424C7.15288 13.9613 6.79813 14.3732 6.54661 14.8475C6.2951 15.3218 6.15324 15.8466 6.13148 16.383C6.10175 16.8449 6.17125 17.3078 6.33531 17.7405C6.49938 18.1733 6.7542 18.5659 7.08266 18.892C7.41111 19.2181 7.80557 19.4701 8.23952 19.631C8.67346 19.7919 9.13684 19.8581 9.59848 19.825C10.0648 19.8608 10.5333 19.7949 10.9717 19.6319C11.41 19.4689 11.8078 19.2126 12.1374 18.8809C12.4671 18.5491 12.7208 18.1498 12.881 17.7104C13.0413 17.271 13.1042 16.8021 13.0655 16.336V0H17.1425C17.8355 4.315 19.9935 5.316 22.8825 5.778V9.913C20.8804 9.74881 18.9491 9.09645 17.2575 8.013V16.18C17.2575 19.88 15.0675 24 9.63048 24C8.61045 23.9955 7.60156 23.7875 6.66297 23.3881C5.72437 22.9886 4.87496 22.4059 4.16451 21.6739C3.45407 20.942 2.89689 20.0755 2.52563 19.1254C2.15438 18.1754 1.97652 17.1607 2.00248 16.141C2.03479 15.0794 2.29174 14.0366 2.75639 13.0815C3.22105 12.1265 3.88285 11.2807 4.69819 10.6C5.51352 9.9193 6.46387 9.41915 7.48658 9.1325C8.50929 8.84586 9.58114 8.77923 10.6315 8.937Z"/> 2721 </svg><span class="sr-only">TikTok</span> 2722 </a> 2723 </li></ul></div></div></footer><parallax-overlay class="footer-overlay hidden md:block z-20 absolute left-0 top-0 w-full pointer-events-none" data-target="height" data-start="100%" data-stop="0%"></parallax-overlay></div> 2724 2725 2726</div><div id="shopify-section-sections--24796503048571__footer-copyright" class="shopify-section shopify-section-group-footer-group"><style> 2727 #shopify-section-sections--24796503048571__footer-copyright { 2728 --gradient-background: #171717; 2729 --color-background: 23 23 23; 2730 --color-foreground: 255 255 255; 2731 } 2732</style> 2733 2734<div class="section section--rounded" is="footer-parallax"> 2735 <div class="footer-copyright page-width page-width--full w-full flex flex-col items-center justify-between gap-4 lg:gap-0 lg:flex-row relative"> 2736 <div class="rte credits text-center">Powered by Axdia International GmbH<ul class="flex flex-wrap gap-3 justify-center lg:justify-start"><li> 2737 <small> 2738 <a href="/policies/privacy-policy" class="block reversed-link">Datenschutzerklärung</a> 2739 </small> 2740 </li><li> 2741 <small> 2742 <a href="/policies/legal-notice" class="block reversed-link">Impressum</a> 2743 </small> 2744 </li><li> 2745 <small> 2746 <a href="/policies/refund-policy" class="block reversed-link">Widerrufsrecht</a> 2747 </small> 2748 </li><li> 2749 <small> 2750 <a href="/policies/terms-of-service" class="block reversed-link">AGB</a> 2751 </small> 2752 </li><li> 2753 <small> 2754 <a href="/policies/contact-information" class="block reversed-link">Kontaktinformationen</a> 2755 </small> 2756 </li><li> 2757 <small> 2758 <a href="/policies/shipping-policy" class="block reversed-link">Versand</a> 2759 </small> 2760 </li></ul></div><ul class="payment-icons flex flex-wrap justify-center gap-2 xl:gap-3"><li><svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-american_express"><title id="pi-american_express">American Express</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#0071CE" style="fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;"/><path d="M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z" stroke="black" stroke-opacity="0.07" style="stroke:black;stroke-opacity:0.07;"/><path d="M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z" fill="white" style="fill:white;fill-opacity:1;"/>
2760</svg> 2761</li><li><svg version="1.1" xmlns="http://www.w3.org/2000/svg" role="img" x="0" y="0" width="38" height="24" viewBox="0 0 165.521 105.965" xml:space="preserve" aria-labelledby="pi-apple_pay"><title id="pi-apple_pay">Apple Pay</title><path fill="#000" d="M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z" /><path fill="#FFF" d="M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875" /><g><g><path fill="#000" d="M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858" /><path fill="#000" d="M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048" /></g><g><path fill="#000" d="M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z" /><path fill="#000" d="M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z" /><path fill="#000" d="M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z" /></g></g></svg> 2762</li><li><svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-google_pay"><title id="pi-google_pay">Google Pay</title><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF"/><path d="M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.
276206zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z" fill="#5F6368"/><path d="M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z" fill="#4285F4"/><path d="M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z" fill="#34A853"/><path d="M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z" fill="#FBBC04"/><path d="M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z" fill="#EA4335"/></svg> 2763</li><li><svg xmlns="http://www.w3.org/2000/svg" role="img" width="38" height="24" viewBox="0 0 38 24" aria-labelledby="pi-klarna" fill="none"><title id="pi-klarna">Klarna</title><rect width="38" height="24" rx="2" fill="#FFA8CD"/><rect x=".5" y=".5" width="37" height="23" rx="1.5" stroke="#000" stroke-opacity=".07"/><path d="M30.62 14.755c-.662 0-1.179-.554-1.179-1.226 0-.673.517-1.226 1.18-1.226.663 0 1.18.553 1.18 1.226 0 .672-.517 1.226-1.18 1.226zm-.33 1.295c.565 0 1.286-.217 1.686-1.068l.04.02c-.176.465-.176.742-.176.81v.11h1.423v-4.786H31.84v.109c0 .069 0 .346.175.81l-.039.02c-.4-.85-1.121-1.068-1.687-1.068-1.355 0-2.31 1.088-2.31 2.522 0 1.433.955 2.521 2.31 2.521zm-4.788-5.043c-.643 0-1.15.228-1.56 1.068l-.039-.02c.175-.464.175-.741.175-.81v-.11h-1.423v4.787h1.462V13.4c0-.662.38-1.078.995-1.078.614 0 .917.356.917 1.068v2.532h1.462v-3.046c0-1.088-.838-1.869-1.989-1.869zm-4.963 1.068l-.039-.02c.176-.464.176-.741.176-.81v-.11h-1.424v4.787h1.463l.01-2.304c0-.673.35-1.078.926-1.078.156 0 .282.02.429.06v-1.464c-.644-.139-1.22.109-1.54.94zm-4.65 2.68c-.664 0-1.18-.554-1.18-1.226 0-.673.516-1.226 1.18-1.226.662 0 1.179.553 1.179 1.226 0 .672-.517 1.226-1.18 1.226zm-.332 1.295c.565 0 1.287-.217 1.687-1.068l.038.02c-.175.465-.175.742-.175.81v.11h1.424v-4.786h-1.424v.109c0 .069 0 .346.175.81l-.038.02c-.4-.85-1.122-1.068-1.687-1.068-1.356 0-2.311 1.088-2.311 2.522 0 1.433.955 2.521 2.31 2.521zm-4.349-.128h1.463V9h-1.463v6.922zM10.136 9H8.644c0 1.236-.751 2.343-1.892 3.134l-.448.317V9h-1.55v6.922h1.55V12.49l2.564 3.43h1.892L8.293 12.64c1.121-.82 1.852-2.096 1.843-3.639z" fill="#0B051D"/></svg></li><li><svg viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-maestro"><title id="pi-maestro">Maestro</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"/><circle fill="#EB001B" cx="15" cy="12" r="7"/><circle fill="#00A2E5" cx="23" cy="12" r="7"/><path fill="#7375CF" d="M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z"/></svg></li><li><svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-master"><title id="pi-master">Mastercard</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#1C1C1C" style="fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#232323" style="fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;"/><path d="M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z" fill="#EB001B" style="fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;"/><path d="M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z" fill="#F79E1B" style="fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;"/>
2763<path d="M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z" fill="#FF5F00" style="fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;"/></svg> 2764</li><li><svg viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-paypal"><title id="pi-paypal">PayPal</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"/><path fill="#003087" d="M23.9 8.3c.2-1 0-1.7-.6-2.3-.6-.7-1.7-1-3.1-1h-4.1c-.3 0-.5.2-.6.5L14 15.6c0 .2.1.4.3.4H17l.4-3.4 1.8-2.2 4.7-2.1z"/><path fill="#3086C8" d="M23.9 8.3l-.2.2c-.5 2.8-2.2 3.8-4.6 3.8H18c-.3 0-.5.2-.6.5l-.6 3.9-.2 1c0 .2.1.4.3.4H19c.3 0 .5-.2.5-.4v-.1l.4-2.4v-.1c0-.2.3-.4.5-.4h.3c2.1 0 3.7-.8 4.1-3.2.2-1 .1-1.8-.4-2.4-.1-.5-.3-.7-.5-.8z"/><path fill="#012169" d="M23.3 8.1c-.1-.1-.2-.1-.3-.1-.1 0-.2 0-.3-.1-.3-.1-.7-.1-1.1-.1h-3c-.1 0-.2
27640-.2.1-.2.1-.3.2-.3.4l-.7 4.4v.1c0-.3.3-.5.6-.5h1.3c2.5 0 4.1-1 4.6-3.8v-.2c-.1-.1-.3-.2-.5-.2h-.1z"/></svg></li><li><svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-shopify_pay"><title id="pi-shopify_pay">Shop Pay</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000"/><path d="M35.889 0C37.05 0 38 .982 38 2.182v19.636c0 1.2-.95 2.182-2.111 2.182H2.11C.95 24 0 23.018 0 21.818V2.182C0 .982.95 0 2.111 0H35.89z" fill="#5A31F4"/><path d="M9.35 11.368c-1.017-.223-1.47-.31-1.47-.705 0-.372.306-.558.92-.558.54 0 .934.238 1.225.704a.079.079 0 00.104.03l1.146-.584a.082.082 0 00.032-.114c-.475-.831-1.353-1.286-2.51-1.286-1.52 0-2.464.755-2.464 1.956 0 1.275 1.15 1.597 2.17 1.82 1.02.222 1.474.31 1.474.705 0 .396-.332.582-.993.582-.612 0-1.065-.282-1.34-.83a.08.08 0 00-.107-.035l-1.143.57a.083.083 0 00-.036.111c.454.92 1.384 1.437 2.627 1.437 1.583 0 2.539-.742 2.539-1.98s-1.155-1.598-2.173-1.82v-.003zM15.49 8.855c-.65 0-1.224.232-1.636.646a.04.04 0 01-.069-.03v-2.64a.08.08 0 00-.08-.081H12.27a.08.08 0 00-.08.082v8.194a.08.08 0 00.08.082h1.433a.08.08 0 00.081-.082v-3.594c0-.695.528-1.227 1.239-1.227.71 0 1.226.521 1.226 1.227v3.594a.08.08 0 00.081.082h1.433a.08.08 0 00.081-.082v-3.594c0-1.51-.981-2.577-2.355-2.577zM20.753 8.62c-.778 0-1.507.24-2.03.588a.082.082 0 00-.027.109l.632 1.088a.08.08 0 00.11.03 2.5 2.5 0 011.318-.366c1.25 0 2.17.891 2.17 2.068 0 1.003-.736 1.745-1.669 1.745-.76 0-1.288-.446-1.288-1.077 0-.361.152-.657.548-.866a.08.08 0 00.032-.113l-.596-1.018a.08.08 0 00-.098-.035c-.799.299-1.359 1.018-1.359 1.984 0 1.46 1.152 2.55 2.76 2.55 1.877 0 3.227-1.313 3.227-3.195 0-2.018-1.57-3.492-3.73-3.492zM28.675 8.843c-.724 0-1.373.27-1.845.746-.026.027-.069.007-.069-.029v-.572a.08.08 0 00-.08-.082h-1.397a.08.08 0 00-.08.082v8.182a.08.08 0 00.08.081h1.433a.08.08 0 00.081-.081v-2.683c0-.036.043-.054.069-.03a2.6 2.6 0 001.808.7c1.682 0 2.993-1.373 2.993-3.157s-1.313-3.157-2.993-3.157zm-.271 4.929c-.956 0-1.681-.768-1.681-1.783s.723-1.783 1.681-1.783c.958 0 1.68.755 1.68 1.783 0 1.027-.713 1.783-1.681 1.783h.001z" fill="#fff"/></svg> 2765</li><li><svg viewBox="-36 25 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-unionpay"><title id="pi-unionpay">Union Pay</title><path fill="#005B9A" d="M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z"/><path fill="#E9292D" d="M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z"/><path fill="#0E73B9" d="M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z"/><path fill="#059DA4" d="M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z"/><path fill="#fff" d="M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.
2765635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19"/></svg></li><li><svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-visa"><title id="pi-visa">Visa</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#142FBD" style="fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#1532CB" style="fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;"/><path d="M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778
276516.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z" fill="white" style="fill:white;fill-opacity:1;"/></svg> 2766</li></ul></div> 2767</div> 2768 2769 2770<style> #shopify-section-sections--24796503048571__footer-copyright li:has(a[href="/policies/contact-information"]) {display: none;} #shopify-section-sections--24796503048571__footer-copyright li:has(a[href="/policies/shipping-policy"]) {display: none;} </style></div> 2771<!-- END sections: footer-group --></footer-group> 2772 </div> 2773 2774 <ul hidden> 2775 <li id="a11y-refresh-page-message">Wenn du dich für eine Auswahl entscheidest, wird die Seite komplett aktualisiert.</li> 2776 <li id="a11y-new-window-message">Wird in einem neuen Fenster geöffnet.</li> 2777 </ul>
2777<script src="//odiporo.de/cdn/shop/t/3/assets/instant-page.js?v=99963444960178710701744817341" type="module" fetchpriority="low" defer="defer"></script>
2777<script> 2778 const updatePlaceholderIfFound = () => { 2779 document.querySelectorAll('input[type="email"]').forEach(input => { 2780 const current = input.getAttribute('placeholder') || ''; 2781 if (current.includes('Newsletter') || current.trim() === '') { 2782 input.setAttribute('placeholder', 'Deine Mailadresse'); 2783 } 2784 }); 2785 }; 2786 2787 // Starte Beobachter 2788 const observer = new MutationObserver((mutationsList, observer) => { 2789 updatePlaceholderIfFound(); 2790 }); 2791 2792 // Aktiviere, sobald DOM da ist 2793 document.addEventListener('DOMContentLoaded', function () { 2794 updatePlaceholderIfFound(); // erster Versuch 2795 observer.observe(document.body, { 2796 childList: true, 2797 subtree: true 2798 }); 2799 }); 2800 2801 // Sicherheit: Wiederholung nach 1s und 3s 2802 setTimeout(updatePlaceholderIfFound, 1000); 2803 setTimeout(updatePlaceholderIfFound, 3000); 2804</script>
2804 2805 2806 2807 2808 2809<style> .ips-small-text {color: #fae009;} </style> 2810<div id="shopify-block-AVG5qQ0sxL0pGS1p1Z__6770548097779500122" class="shopify-block shopify-app-block"> <!-- BEGIN app snippet: banners --> <koala-gifts-banners class="koala--hidden koala-element--app-embed-block" data-state="eyAgICAgICAidHlwZXMiOiBbIkFOTk9VTkNFTUVOVF9CQU5ORVIiLCJQUk9EVUNUX1BBR0VfQkFOTkVSIiwiUkVXQVJEX1NIT1dDQVNFIiwiUkVXQVJEX1NIT1dDQVNFX1VQU0VMTCJdLCAgICAgICAiZW1iZWRkZWQiOiB0cnVlLCAgICAgICAidGVtcGxhdGUiOiB7ICAgICAgICAgIm5hbWUiOiAiY2FydCIgICAgICAgfSwgICAgICAgICAgICAgICJhcHAiOiB7ICAgICAgICAgInByb3h5U3ViUGF0aCI6ICJrb2FsYS11cHNlbGwtZ2lmdCIgICAgICAgfSwgICAgICAgImN1c3RvbWVyIjogeyAgICAgICAgICJpc0F1dGhlbnRpY2F0ZWQiOiBmYWxzZSwgICAgICAgICAiYWxsVGltZUFtb3VudFNwZW50IjogMCwgICAgICAgICAiYWxsVGltZU9yZGVyc0NvdW50IjogMCwgICAgICAgICAidGFncyI6IHsgICAgICAgICAgICAgICAgICAgIH0gICAgICAgfSwgICAgICAgInNob3AiOiB7ICAgICAgICAgImxvY2FsZSI6ICJkZSIsICAgICAgICAgIm1vbmV5Rm9ybWF0IjogIuKCrHt7YW1vdW50X3dpdGhfY29tbWFfc2VwYXJhdG9yfX0iLCAgICAgICAgICJmbGFncyI6IHt9ICAgICAgIH0sICAgICAgICJvZmZlcnMiOiBbICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICJpZCI6ICJjbWRpbjV0anQwcGR4ejUxaWllYzhqNzNtIiwgICAgICAgICAgICAgImRlZmluaXRpb24iOiB7InRpZXJzIjpbeyJpZCI6IjYwZWY1OTM2LWRiNzctNDFiMi05YzM1LTFkZWY2MzY5ZTA1ZiIsIm5hbWUiOiJUaWVyIDEiLCJyZXdhcmQiOnsidHlwZSI6IlBST0RVQ1QiLCJpdGVtcyI6W3siaWQiOiJnaWQ6XC9cL3Nob3BpZnlcL1Byb2R1Y3RcLzE1MDgzOTAwNDY5NjI3IiwiaGFuZGxlIjoiZmxleHB1bXAtbW9iaWxlci1taW5pLWtvbXByZXNzb3IiLCJ2YXJpYW50cyI6W3siaWQiOiJnaWQ6XC9cL3Nob3BpZnlcL1Byb2R1Y3RWYXJpYW50XC81NTQ1NzA5NjA0MDgyNyIsInF1YW50aXR5IjoxfV19XSwiZGlzY291bnQiOnsibmFtZSI6eyJ2YWx1ZSI6IkZSRUUgR0lGVCJ9LCJ0eXBlIjoiUEVSQ0VOVEFHRSIsInZhbHVlIjoxMDB9fSwidHJpZ2dlcnMiOlt7InR5cGUiOiJTUEVDSUZJQ19QUk9EVUNUIiwiaXRlbXMiOlt7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzI1ODM2MyIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg2OTk2ODU5In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA0ODU3MzM4NzEzMSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1MzUyOTIxNjUzNjI3In0seyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1MzUyOTIxNzE5MTYzIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzA5NDUyMyIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg2ODMzMDE5In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzE2MDA1OSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg2ODk4NTU1In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzE5MjgyNyIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg2OTMxMzIzIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzIyNTU5NSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg2OTY0MDkxIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzQ4NzczOSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3MjI2MjM1In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzUyMDUwNyIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3MjU5MDAzIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzU1MzI3NSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3MjkxNzcxIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzYxODgxMSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3MzU3MzA3In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzY1MTU3OSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3MzkwMDc1In0seyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NjM3OTc4OTA3MDAzIn0seyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NjM3OTc4OTM5NzcxIn0seyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NjM3OTc4OTcyNTM5In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzY4NDM0NyIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3NDIyODQzIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzcxNzExNSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3NDU1NjExIn0seyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3NDg4Mzc5In1dfV0sInJ1bGVzIjpbXX1dfV0sImFjdGlvbiI6IkFVVE9fQUREX1RPX0NBUlQiLCJvcHRpb25zIjp7ImxpbWl0Ijp7InZhbHVlIjo1LCJlbmFibGVkIjp0cnVlfSwic2NoZWR1bGUiOnsic3RhcnQiOiIyMDI1LTA3LTI0VDA5OjU5OjQxLjM0MVoiLCJlbmFibGVkIjpmYWxzZX0sIndvcmtzSW5SZXZlcnNlIjpmYWxzZX0sInZlcnNpb24iOiJWMiJ9LCAgICAgICAgICAgICAiY29tcGF0aWJpbGl0eSI6IHt9LCAgICAgICAgICAgICAidGVtcGxhdGUiOiB7fSwgICAgICAgICAgICAgInR5cGUiOiAiQlhHWSIgICAgICAgICAgI
2810H0gICAgICAgICAgICAgICAgXSwgICAgICAgInJld2FyZFByb2R1Y3RzIjogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI2MGVmNTkzNi1kYjc3LTQxYjItOWMzNS0xZGVmNjM2OWUwNWYiOiBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiAxNTA4MzkwMDQ2OTYyNywgICAgICAgICAgICAgICAgICAgICAgICJ0aXRsZSI6ICJPRFlTIEZsZXhQdW1wIC0gTW9iaWxlciBNaW5pIEtvbXByZXNzb3IiLCAgICAgICAgICAgICAgICAgICAgICAgImhhc09ubHlEZWZhdWx0VmFyaWFudCI6IHRydWUsICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXNTZWxsaW5nUGxhbiI6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVkX2ltYWdlIjogIlwvXC9vZGlwb3JvLmRlXC9jZG5cL3Nob3BcL2ZpbGVzXC94OTEwMDAxLW9keXMtZmxleHB1bXAtbWluaWFpcmNvbXBwYjEyMDB4MTIwMHB4djAyanBnLTEwNTU4Ny5qcGc/dj0xNzQ4MjIyNzI0IiwgICAgICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiL3Byb2R1Y3RzL2ZsZXhwdW1wLW1vYmlsZXItbWluaS1rb21wcmVzc29yIiwgICAgICAgICAgICAgICAgICAgICAgICJ2YXJpYW50cyI6IFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlkIjogNTU0NTcwOTYwNDA4MjcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aXRsZSI6ICJEZWZhdWx0IFRpdGxlIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByaWNlIjogMzk5OSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBhcmVfYXRfcHJpY2UiOiA0OTk5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXZhaWxhYmxlIjogdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVkX2ltYWdlIjogbnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmVudG9yeV9tYW5hZ2VtZW50IjogInNob3BpZnkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52ZW50b3J5X3BvbGljeSI6ICJDT05USU5VRSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZlbnRvcnlfcXVhbnRpdHkiOiA4MDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgICAgICAgIm1hcmtldCI6IHsgICAgICAgICAiaWQiOiAiOTYzNzEzNzY1MDciLCAgICAgICAgICJjb3VudHJ5Q29kZSI6ICJERSIsICAgICAgICAgImxhbmd1YWdlQ29kZSI6ICJERSIgICAgICAgfSwgICAgICAgInNlbGVjdG9ycyI6IFtdICAgICB9"></koala-gifts-banners> <!-- END app snippet --> <!-- BEGIN app snippet: styles --> <!-- END app snippet --> <!-- BEGIN app snippet: script --> <!-- END app snippet --> <koala-gifts data-state="eyAgICAgICAidGVtcGxhdGUiOiB7ICAgICAgICJuYW1lIjogImNhcnQiICAgICAgIH0sICAgICAgICAgICAgICAiYXBwIjogeyAgICAgICAicHJveHlTdWJQYXRoIjogImtvYWxhLXVwc2VsbC1naWZ0IiAgICAgICB9LCAgICAgICAiY3VzdG9tZXIiOiB7ICAgICAgICJpc0F1dGhlbnRpY2F0ZWQiOiBmYWxzZSwgICAgICAgImFsbFRpbWVBbW91bnRTcGVudCI6IDAsICAgICAgICJhbGxUaW1lT3JkZXJzQ291bnQiOiAwLCAgICAgICAidGFncyI6IHsgICAgICAgICAgICAgIH0gICAgICAgfSwgICAgICAgInNob3AiOiB7ICAgICAgICJsb2NhbGUiOiAiZGUiLCAgICAgICAibW9uZXlGb3JtYXQiOiAi4oKse3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSIsICAgICAgICJmbGFncyI6IHt9ICAgICAgIH0sICAgICAgICJvZmZlcnMiOiBbICAgICAgICAgICAgICAgIHsgICAgICAgICAiaWQiOiAiY21kaW41dGp0MHBkeHo1MWlpZWM4ajczbSIsICAgICAgICAgImRlZmluaXRpb24iOiB7InRpZXJzIjpbeyJpZCI6IjYwZWY1OTM2LWRiNzctNDFiMi05YzM1LTFkZWY2MzY5ZTA1ZiIsIm5hbWUiOiJUaWVyIDEiLCJyZXdhcmQiOnsidHlwZSI6IlBST0RVQ1QiLCJpdGVtcyI6W3siaWQiOiJnaWQ6XC9cL3Nob3BpZnlcL1Byb2R1Y3RcLzE1MDgzOTAwNDY5NjI3IiwiaGFuZGxlIjoiZmxleHB1bXAtbW9iaWxlci1taW5pLWtvbXByZXNzb3IiLCJ2YXJpYW50cyI6W3siaWQiOiJnaWQ6XC9cL3Nob3BpZnlcL1Byb2R1Y3RWYXJpYW50XC81NTQ1NzA5NjA0MDgyNyIsInF1YW50aXR5IjoxfV19XSwiZGlzY291bnQiOnsibmFtZSI6eyJ2YWx1ZSI6IkZSRUUgR0lGVCJ9LCJ0eXBlIjoiUEVSQ0VOVEFHRSIsInZhbHVlIjoxMDB9fSwidHJpZ2dlcnMiOlt7InR5cGUiOiJTUEVDSUZJQ19QUk9EVUNUIiwiaXRlbXMiOlt7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzI1ODM2MyIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg2OTk2ODU5In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA0ODU3MzM4NzEzMSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1MzUyOTIxNjUzNjI3In0seyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1MzUyOTIxNzE5MTYzIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzA5NDUyMyIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg2ODMzMDE5In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzE2MDA1OSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg2ODk4NTU1In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzE5MjgyNyIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg2OTMxMzIzIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzIyNTU5NSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg2OTY0MDkxIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzQ4NzczOSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3MjI2MjM1In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzUyMDUwNyIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3MjU5MDAzIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzU1MzI3NSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3MjkxNzcxIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzYxODgxMSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3MzU3MzA3In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzY1MTU3OSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3MzkwMDc1In0seyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NjM3OTc4OTA3MDAzIn0seyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NjM3OTc4OTM5NzcxIn0seyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NjM3OTc4OTcyNTM5In1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzY4NDM0NyIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3NDIyODQzIn1dfSx7ImlkIjoiZ2lkOlwvXC9zaG9waWZ5XC9Qcm9kdWN0XC8xNTA4Mzg5NzcxNzExNSIsInZhcmlhbnRzIjpbeyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3NDU1NjExIn0seyJpZCI6ImdpZDpcL1wvc2hvcGlmeVwvUHJvZHVjdFZhcmlhbnRcLzU1NDU3MDg3NDg4Mzc5In1dfV0sInJ1bGVzIjpbXX1dfV0sImFjdGlvbiI6IkFVVE9fQUREX1RPX0NBUlQiLCJvcHRpb25zIjp7ImxpbWl0Ijp7InZhbHVlIjo1LCJlbmFibGVkIjp0cnVlfSwic2NoZWR1bGUiOnsic3RhcnQiOiIyMDI1LTA3LTI0VDA5OjU5OjQxLjM0MVoiLCJlbmFibGVkIjpmYWxzZX0sIndvcmtzSW5SZXZlcnNlIjpmYWxzZX0sInZlcnNpb24iOiJWMiJ9LCAgICAgICAgICJjb21wYXRpYmlsaXR5Ijoge30sICAgICAgICAgInRlbXBsYXRlIjoge30sICAgICAgICAgInR5cGUiOiAiQlhHWSIgICAgICAgICB9ICAgICAgICAgICAgICBdLCAgICAgICAicmV3YXJkUHJvZHVjdHMiOiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI2MGVmNTkzNi1kYjc3LTQxYjItOWMzNS0xZGVmNjM2OWUwNWYiOiBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiAxNTA4MzkwMDQ2OTYyNywgICAgICAgICAgICAgICAgICAgICAgICJ0aXRsZSI6ICJPRFlTIEZsZXhQdW1wIC0gTW9iaWxlciBNaW5pIEtvbXByZXNzb3IiLCAgICAgICAgICAgICAgICAgICAgICAgImhhc09ubHlEZWZhdWx0VmFyaWFudCI6IHRydWUsICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXNTZWxsaW5nUGxhbiI6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVkX2ltYWdlIjogIlwvXC9vZGlwb3JvLmRlXC9jZG5cL3N
2810ob3BcL2ZpbGVzXC94OTEwMDAxLW9keXMtZmxleHB1bXAtbWluaWFpcmNvbXBwYjEyMDB4MTIwMHB4djAyanBnLTEwNTU4Ny5qcGc/dj0xNzQ4MjIyNzI0IiwgICAgICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiL3Byb2R1Y3RzL2ZsZXhwdW1wLW1vYmlsZXItbWluaS1rb21wcmVzc29yIiwgICAgICAgICAgICAgICAgICAgICAgICJ2YXJpYW50cyI6IFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiA1NTQ1NzA5NjA0MDgyNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpdGxlIjogIkRlZmF1bHQgVGl0bGUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJpY2UiOiAzOTk5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGFyZV9hdF9wcmljZSI6IDQ5OTksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdmFpbGFibGUiOiB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVhdHVyZWRfaW1hZ2UiOiBudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52ZW50b3J5X21hbmFnZW1lbnQiOiAic2hvcGlmeSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZlbnRvcnlfcG9saWN5IjogIkNPTlRJTlVFIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmVudG9yeV9xdWFudGl0eSI6IDgwNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgICAgICAgIm1hcmtldCI6IHsgICAgICAgImlkIjogIjk2MzcxMzc2NTA3IiwgICAgICAgImNvdW50cnlDb2RlIjogIkRFIiwgICAgICAgImxhbmd1YWdlQ29kZSI6ICJERSIgICAgICAgfSAgICAgICB9"></koala-gifts> <!-- BEGIN app snippet: koala-ids --> <!-- END app snippet --> </div><div id="shopify-block-AYWlrTlpQRGRQaXlOZ__5280235153711299465" class="shopify-block shopify-app-block">
2810<script> 2811 window.__widerrufLocale = "de"; 2812 2813 2814 window.__widerrufSettings = JSON.parse("{\"buttonMode\":\"menu_item\",\"menuItemNames\":[\"Vertrag widerrufen\"],\"euOnly\":false,\"backgroundColor\":\"#fed133\",\"textColor\":\"#000000\",\"borderRadius\":\"20px\",\"displayMode\":\"page\",\"panelPosition\":\"right\",\"floatingButtonText\":\"Vertrag widerrufen\",\"floatingButtonPosition\":\"bottom-right\",\"panelTitle\":\"Widerruf\",\"fontWeight\":\"400\",\"buttonSize\":\"small\",\"marginTop\":5,\"marginBottom\":5,\"i18n\":{\"en\":{\"floatingButtonText\":\"Withdraw contract\",\"panelTitle\":\"Withdrawal\"},\"fr\":{\"floatingButtonText\":\"Rétracter le contrat\",\"panelTitle\":\"Rétractation\"},\"it\":{\"floatingButtonText\":\"Recedere dal contratto\",\"panelTitle\":\"Recesso\"},\"es\":{\"floatingButtonText\":\"Desistir del contrato\",\"panelTitle\":\"Desistimiento\"},\"nl\":{\"floatingButtonText\":\"Overeenkomst herroepen\",\"panelTitle\":\"Herroeping\"},\"pl\":{\"floatingButtonText\":\"OdstÄ p od umowy\",\"panelTitle\":\"OdstÄ pienie od umowy\"}}}"); 2815 2816</script>
2816 2817
2818<script> 2819 (function () { 2820 var src = "https:\/\/cdn.shopify.com\/extensions\/01a0eecd-e3cf-72d9-81f3-f3f881b5b528\/checkout-regeln-grosse-warenkoerbe-2026-09-29\/assets\/widerruf-button.js"; 2821 function ensure() { 2822 if (window.__widerrufButtonLoaded) return; 2823 var s = document.createElement("script"); 2824 s.src = src; 2825 s.defer = true; 2826 document.head.appendChild(s); 2827 } 2828 if (document.readyState === "complete") { 2829 ensure(); 2830 } else { 2831 window.addEventListener("load", ensure); 2832 } 2833 })(); 2834</script>
2834 2835 2836 2837</div><div id="shopify-block-AV1c1MGppS3Bld2V0Z__1967102994182284862" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: connected_sdk_script -->
2837<script src='https://www.paypalobjects.com/pa/js/min/pa.js'></script>
2837 2838
2839<script 2840 src='https://www.paypal.com/sdk/js?client-id=AbtXlp5R3xc83T9xW_ZXKTK8IVZ-14EMelDioU4VC285IqSuxUI4yotKxjV0sz_X6YsONYi10vSBPNKM&merchant-id=SK45JS2S8VVTS&components=messages' 2841 data-namespace='PayPalSDK' 2842 data-partner-attribution-id='JADEDPIXEL_SHOPPINGCART_EC_CA' 2843></script>
2843 2844<!-- END app snippet --><!-- BEGIN app snippet: utils -->
2844<script> 2845 // ============================================ 2846 // Core Utilities 2847 // ============================================ 2848 2849 // Setup FPTI Analytics 2850 if (PAYPAL && PAYPAL.analytics) { 2851 PAYPAL.analytics.setup({ 2852 data: { 2853 pgrp: 'shopify:messaging:app-embed', 2854 comp: 'shopify-app-embed', 2855 }, 2856 }); 2857 } 2858 2859 const recordEvent = (event_name, additionalData) => { 2860 PAYPAL.analytics.instance.recordEvent(event_name, { 2861 theme: window?.Shopify?.theme?.name || 'unknown', 2862 shop: window?.Shopify?.shop || 'unknown', 2863 path: window.location.pathname, 2864 flow: 'Shopify - Pay Later', 2865 space_key: 'SKD8GM', 2866 ...additionalData, 2867 }); 2868 }; 2869 2870 // In Theme Editor when using Advanced Settings 2871 // User chooses copy as JS Path from their browser 2872 // The pasted value will be a string that contains "document.querySelector("...") 2873 // Remove document.querySelector(" and ") 2874 // Using JS Path we can ensure the path to the element is accurate 2875 const parseSelector = (selector) => { 2876 try { 2877 // Handle both single and double quotes 2878 return selector 2879 .replace(/document\.querySelector\(["']/g, '') 2880 .replace(/["']\)/g, ''); 2881 } catch (e) { 2882 recordEvent('appEmbed:parseSelector:error', { error: e.message }); 2883 } 2884 }; 2885 2886 // Waits for Element to be rendered 2887 // Uses mutation observer to watch for changes in the DOM 2888 // https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver 2889 // On changes, check for the selector again 2890 const waitForElement = (selector) => { 2891 try { 2892 return new Promise((resolve) => { 2893 const existing = document.querySelector(selector); 2894 if (existing) return resolve(existing); 2895 2896 const observer = new MutationObserver(() => { 2897 const el = document.querySelector(selector); 2898 if (el) { 2899 observer.disconnect(); 2900 resolve(el); 2901 } 2902 }); 2903 2904 observer.observe(document.body, { 2905 childList: true, 2906 subtree: true, 2907 }); 2908 }); 2909 } catch (e) { 2910 recordEvent('appEmbed:waitForElement:error', { error: e.message }); 2911 } 2912 }; 2913 2914 // Formats correct cart/drawer subtotal and adds or updates messaging 2915 const addOrUpdateMessagingPriceAttribute = async (price, locator, messaging) => { 2916 try { 2917 // Format price to 2 decimal places ex: 150000 => 1500.00 2918 // Messaging requires price to be in string format 2919 const formattedPrice = Number((price / 100).toFixed(2)).toString(); 2920 2921 const messagingId = messaging.id; 2922 const existingMessaging = document.getElementById(messagingId); 2923 2924 if (existingMessaging) { 2925 // Update the data-pp-amount attribute on the existing element 2926 existingMessaging.setAttribute('data-pp-amount', formattedPrice); 2927 } else { 2928 const element = await waitForElement(locator); 2929 2930 const updatedPriceMessaging = messaging.cloneNode(); 2931 updatedPriceMessaging.setAttribute('data-pp-amount', formattedPrice); 2932 2933 element.after(updatedPriceMessaging); 2934 } 2935 } catch (e) { 2936 recordEvent('appEmbed:addOrUpdateMessagingPriceAttribute:error', { error: e.message }); 2937 } 2938 }; 2939 2940 // Fetches cart details from Shopify cart endpoint 2941 const fetchCartDetails = async () => { 2942 try { 2943 const response = await fetch('/cart.js'); 2944 const cart = await response.json(); 2945 2946 return cart.total_price; 2947 } catch (e) { 2948 recordEvent('appEmbed:fetchCartDetails:error', { error: e.message }); 2949 } 2950 }; 2951 2952 // Fetches variant details Shopify product endpoint 2953 // https://shopify.dev/docs/api/ajax/reference/product 2954 const fetchVariant = async () => { 2955 try { 2956 // Ex: https://test-store.myshopify.com/products/the-multi-location-snowboard?variant=45268551368883 2957 const urlParams = new URLSearchParams(window.location.search); 2958 const urlVariantId = parseInt(urlParams.get('variant'), 10); 2959 const productHandle = window.location.pathname.split('/products/')[1]?.split('?')[0]; 2960 2961 const response = await fetch(`/products/${productHandle}.js`); 2962 const productData = await response.json(); 2963 const variants = productData.variants; 2964 const selectedVariant = variants.find(v => v.id === urlVariantId); 2965 2966 if (selectedVariant) { 2967 return selectedVariant; 2968 } 2969 2970 return variants.find(v => v.available) || variants[0]; 2971 } catch (e) { 2972 recordEvent('appEmbed:fetchVariant:error', { error: e.message }); 2973 } 2974 }; 2975 2976 // Get the selected variant ID from URL, form input, or select element
2977 const getSelectedVariantId = () => { 2978 try { 2979 const urlParams = new URLSearchParams(window.location.search); 2980 const urlVariant = urlParams.get('variant'); 2981 if (urlVariant) return parseInt(urlVariant, 10); 2982 2983 const formInput = document.querySelector('form[action*="/cart/add"] input[name="id"]'); 2984 if (formInput?.value) return parseInt(formInput.value, 10); 2985 2986 const selectInput = document.querySelector('form[action*="/cart/add"] select[name="id"]'); 2987 if (selectInput?.value) return parseInt(selectInput.value, 10); 2988 2989 return null; 2990 } catch (e) { 2991 recordEvent('appEmbed:getSelectedVariantId:error', { error: e.message }); 2992 return null; 2993 } 2994 }; 2995 2996 const getShopifyData = () => { 2997 try { 2998 const selectedVariantId = getSelectedVariantId(); 2999 3000 const findVariant = (variants) => { 3001 if (!variants?.length) return null; 3002 if (selectedVariantId) { 3003 const selected = variants.find(v => v.id === selectedVariantId); 3004 if (selected) return selected; 3005 } 3006 return variants.find(v => v.available) || variants[0]; 3007 }; 3008 3009 if (window.meta?.product) { 3010 const product = window.meta.product; 3011 const variant = findVariant(product.variants); 3012 return { 3013 product: { title: product.title, vendor: product.vendor, type: product.type, id: product.id }, 3014 price: variant ? { 3015 priceInCents: variant.price, 3016 compareAtPrice: variant.compare_at_price, 3017 currency: window.Shopify?.currency?.active || 'USD', 3018 variantId: variant.id, 3019 variantTitle: variant.title 3020 } : null 3021 }; 3022 } 3023 3024 if (window.ShopifyAnalytics?.meta?.product) { 3025 const product = window.ShopifyAnalytics.meta.product; 3026 const variant = findVariant(product.variants); 3027 return { 3028 product: { title: product.title, vendor: product.vendor, id: product.id }, 3029 price: variant ? { 3030 priceInCents: variant.price, 3031 currency: window.Shopify?.currency?.active || 'USD', 3032 variantId: variant.id 3033 } : null 3034 }; 3035 } 3036 3037 return null; 3038 } catch (e) { 3039 recordEvent('appEmbed:getShopifyData:error', { error: e.message }); 3040 return null; 3041 } 3042 }; 3043 3044 // Generic function to watch for changes in the DOM 3045 // and listen for specific API calls made by the Shopify store 3046 // Callback provides specific logic for handling the response 3047 const watchForChanges = (locator, messaging, callback) => { 3048 try { 3049 // Overrides the native `fetch` function to listen for specific API calls. 3050 // Wrapped in an Immediately Invoked Function Expression (IIFE) 3051 // To avoid polluting the global namespace. 3052 (function (window, windowFetch) { 3053 // Check if `fetch` is a function. If not, exit early. 3054 if (typeof fetch !== 'function') return; 3055 3056 window.fetch = function () { 3057 // Call the original `fetch` function with the provided arguments. 3058 const response = windowFetch.apply(this, arguments); 3059 3060 response.then(async (res) => { 3061 if (typeof callback === 'function') { 3062 callback(res, locator, messaging); 3063 } 3064 }); 3065 3066 // Return the original `fetch` response. 3067 return response; 3068 }; 3069 })(window, window.fetch); 3070 } catch (e) { 3071 recordEvent('appEmbed:watchForChanges:error', { error: e.message }); 3072 } 3073 }; 3074 3075 // Provides ability to watch for cart changes 3076 // such as increment, decrement, or remove items 3077 // Also handles adding new items which opens Cart Drawer 3078 // and updates the messaging with the new cart total 3079 // This function is used for both Cart Drawer and Cart Page 3080 const watchForCartChanges = (locator, messaging) => { 3081 const cartChangeCallback = async (res, locator, messaging) => { 3082 // Determine the id of messaging div either #paypal-upstream-messaging-cart-{page | drawer} 3083 const messagingId = messaging.id; 3084 3085 // Changes (e.g., increment, decrement, or remove items). 3086 if (res.url.includes('/cart/change')) { 3087 // Clone the response to read its JSON data without consuming the original response. 3088 res 3089 .clone() 3090 .json() 3091 .then((data) => { 3092 addOrUpdateMessagingPriceAttribute(data.total_price, locator, messaging); 3093 }); 3094 3095 // Called when adding a new item which opens Cart Drawer 3096 } else if (res.url.includes('/cart/add')) { 3097 // Adding items does not return the updated cart details, 3098 // Fetch the updated cart details (e.g., total_price). 3099 const updatedPrice = await fetchCartDetails(); 3100 3101 // Introduce a delay to handle potential race conditions where the cart drawer has not rendered yet. 3102 setTimeout(async () => { 3103 await addOrUpdateMessagingPriceAttribute(updatedPrice, locator, messaging); 3104 }, 500); 3105 } 3106 }; 3107 3108 watchForChanges(locator, messaging, cartChangeCallback); 3109 }; 3110
3111 // Provides ability to watch for product specific changes 3112 // such as variant selection on product pages 3113 const watchForProductChanges = (locator, messaging) => { 3114 let lastVariantId = new URLSearchParams(window.location.search).get('variant'); 3115 3116 const handleVariantChange = async () => { 3117 const currentVariantId = new URLSearchParams(window.location.search).get('variant'); 3118 if (currentVariantId && currentVariantId !== lastVariantId) { 3119 lastVariantId = currentVariantId; 3120 3121 const newVariantData = await fetchVariant(); 3122 const newPriceInCents = newVariantData?.price; 3123 3124 if (newPriceInCents) { 3125 await addOrUpdateMessagingPriceAttribute(newPriceInCents, locator, messaging); 3126 } else { 3127 recordEvent('appEmbed:watchForProductChanges:error:noNewVariantPrice'); 3128 } 3129 } 3130 }; 3131 3132 // Shopify themes can either handle variant changes on the client-side or server-side (via variant API calls) 3133 // We will "intercept" and handle variant changes by: 3134 // 1. Watching for URL changes 3135 const _pushState = history.pushState.bind(history); 3136 const _replaceState = history.replaceState.bind(history); 3137 3138 history.pushState = function (...args) { 3139 _pushState(...args); 3140 handleVariantChange(); 3141 }; 3142 3143 history.replaceState = function (...args) { 3144 _replaceState(...args); 3145 handleVariantChange(); 3146 }; 3147 3148 // 2. Watching for back/forward browser clicks 3149 window.addEventListener('popstate', handleVariantChange); 3150 3151 // 3. Fallback: Watching for variant API calls 3152 // Future optimization: This fallback could be removed if all Shopify themes can be handled with 1. and 2. 3153 const productChangeCallback = async (res, locator, messaging) => { 3154 if (res.url.includes('/variants')) { 3155 await handleVariantChange(); 3156 return; 3157 } 3158 }; 3159 3160 watchForChanges(locator, messaging, productChangeCallback); 3161 }; 3162</script>
3162 3163<!-- END app snippet --><!-- BEGIN app snippet: price-detection -->
3163<script> 3164 // ============================================ 3165 // Price Detection & Element Scoring 3166 // Depends on: utils.liquid (recordEvent, getShopifyData) 3167 // ============================================ 3168 3169 const extractPriceFromText = (text) => { 3170 const match = text.match(/[\d,]+\.?\d*/); 3171 if (!match) return null; 3172 return parseFloat(match[0].replace(/,/g, '')); 3173 }; 3174 3175 const textMatchesPrice = (text, knownPriceInCents) => { 3176 const extracted = extractPriceFromText(text); 3177 if (extracted === null) return false; 3178 const knownPrice = knownPriceInCents / 100; 3179 return Math.abs(extracted - knownPrice) < 0.01; 3180 }; 3181 3182 const hasStrikethrough = (element) => { 3183 let el = element; 3184 while (el && el !== document.body) { 3185 const style = getComputedStyle(el); 3186 if (style.textDecoration.includes('line-through') || 3187 style.textDecorationLine?.includes('line-through')) { 3188 return true; 3189 } 3190 if (['S', 'DEL', 'STRIKE'].includes(el.tagName)) { 3191 return true; 3192 } 3193 el = el.parentElement; 3194 } 3195 return false; 3196 }; 3197 3198 // Find the add-to-cart button. Result is cached since the button doesn't change per page load. 3199 let _cachedAddToCartButton; 3200 const findAddToCartButton = () => { 3201 if (_cachedAddToCartButton !== undefined) return _cachedAddToCartButton; 3202 try { 3203 const formButton = document.querySelector('form[action*="/cart/add"] button[type="submit"]'); 3204 if (formButton) return (_cachedAddToCartButton = formButton); 3205 3206 const buttons = document.querySelectorAll('button'); 3207 for (const btn of buttons) { 3208 const text = btn.textContent.toLowerCase(); 3209 if (text.includes('add to cart') || text.includes('add to bag') || 3210 text.includes('buy now') || text.includes('add to basket')) { 3211 return (_cachedAddToCartButton = btn); 3212 } 3213 } 3214 3215 return (_cachedAddToCartButton = null); 3216 } catch (e) { 3217 recordEvent('appEmbed:findAddToCartButton:error', { error: e.message }); 3218 return (_cachedAddToCartButton = null); 3219 } 3220 }; 3221 3222 // Find element containing specific text (used for product title proximity). 3223 // Result is cached per text string â title is static per page load and scoreElement 3224 // calls this once per candidate, so without caching it's O(candidates) full DOM walks. 3225 let _titleElementCache = {}; 3226 const findElementContainingText = (text) => { 3227 if (text in _titleElementCache) return _titleElementCache[text]; 3228 try { 3229 const normalizedText = text.toLowerCase().trim(); 3230 const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT); 3231 3232 let node; 3233 while (node = walker.nextNode()) { 3234 const nodeText = node.textContent.trim().toLowerCase(); 3235 if (nodeText.length > 5 && normalizedText.includes(nodeText.substring(0, 20))) { 3236 const el = node.parentElement; 3237 const rect = el.getBoundingClientRect(); 3238 if (rect.width > 0 && rect.height > 0) { 3239 const fontSize = parseFloat(getComputedStyle(el).fontSize); 3240 if (fontSize >= 16) return (_titleElementCache[text] = el); 3241 } 3242 } 3243 } 3244 return (_titleElementCache[text] = null); 3245 } catch (e) { 3246 return null; 3247 } 3248 }; 3249 3250 const getViewportThresholds = () => { 3251 const vh = window.innerHeight; 3252 const isMobile = window.innerWidth < 768; 3253 3254 return { 3255 position: [[vh * 0.6, 50], [vh * 1.2, 30], [vh * 2.0, 10]], 3256 fontSize: [ 3257 [isMobile ? 18 : 24, 40], 3258 [isMobile ? 14 : 18, 25], 3259 [isMobile ? 12 : 14, 10], 3260 ], 3261 proximity: { 3262 close: isMobile ? 60 : 100, 3263 medium: isMobile ? 120 : 200, 3264 far: isMobile ? 240 : 400, 3265 }, 3266 }; 3267 }; 3268 3269 const getTieredScore = (value, tiers, defaultScore = 0) => { 3270 for (const [threshold, points] of tiers) { 3271 if (value < threshold) return points; 3272 } 3273 return defaultScore; 3274 }; 3275 3276 // Scores a DOM element on how likely it is to be the product's main price. 3277 // Higher score = better candidate. Factors: 3278 // - Position on page (elements higher up score better) 3279 // - Font size (larger text = more likely a displayed price) 3280 // - Proximity to product title and add-to-cart button 3281 // - Structural exclusions (footer/header/nav/hidden = heavy penalty) 3282 // - Strikethrough detection (compare-at prices = heavy penalty) 3283 const scoreElement = (element, productMeta = null, debug = false) => { 3284 let score = 0; 3285 const breakdown = debug ? {} : null; 3286 const { position, fontSize, proximity } = getViewportThresholds(); 3287 const { close, medium, far } = proximity; 3288 const rect = element.getBoundingClientRect(); 3289 3290 // POSITION ON PAGE 3291 const absoluteTop = rect.top + window.scrollY; 3292 const posScore = getTieredScore(absoluteTop, position, -30); 3293 score += posScore; 3294 if (debug) breakdown.position = `${posScore >= 0 ? '+' : ''}${posScore} (top ${Math.round(absoluteTop)}px)`; 3295 3296 // FONT SIZE 3297 const fontPx = parseFloat(getComputedStyle(element).fontSize); 3298 const fontScore = fontSize.find(([t]) => fontPx >= t)?.[1] ?? -10; 3299 score += fontScore; 3300 if (debug) breakdown.fontSize = `${fontScore >= 0 ? '+' : ''}${fontScore} (${fontPx}px)`; 3301 3302 // PROXIMITY TO PRODUCT TITLE 3303 if (productMeta?.title) { 3304 const titleElement = findElementContainingText(productMeta.title); 3305 if (titleElement) { 3306 const distance = Math.abs(titleElement.getBoundingClientRect().bottom - rect.top); 3307 const titleScore = getTieredScore(distance, [[close, 40], [medium, 25], [far, 10]], 0); 3308 score += titleScore; 3309 if (debug) breakdown.titleProximity = `+${titleScore} (${Math.round(distance)}px)`; 3310 } else if (debug) { 3311 breakdown.titleProximity = 'title element not found'; 3312 } 3313 } else if (debug) { 3314 breakdown.titleProximity = 'no product title'; 3315 } 3316 3317 // PROXIMITY TO ADD-TO-CART BUTTON 3318 const addButton = findAddToCartButton(); 3319 if (addButton) { 3320 const distance = Math.abs(addButton.getBoundingClientRect().top - rect.top); 3321 const cartScore = getTieredScore(distance, [[close, 30], [medium, 20], [far, 10]], 0); 3322 score += cartScore; 3323 if (debug) breakdown.cartProximity = `+${cartScore} (${Math.round(distance)}px)`; 3324 } else if (debug) { 3325 breakdown.cartProximity = 'add-to-cart not found'; 3326 } 3327 3328 // STRUCTURAL EXCLUSIONS 3329 const exclusions = [ 3330 ['footer, header, nav', 'in footer/header/nav'], 3331 ['button, a[href*="/cart"], [type="submit"]', 'in button/link'], 3332 ['[aria-hidden="true"], [hidden], .hidden, .visually-hidden', 'hidden'], 3333 ]; 3334 for (const [selector, reason] of exclusions) { 3335 if (element.closest(selector)) { 3336 score -= 100; 3337 if (debug) breakdown.structural = `-100 (${reason})`; 3338 break; 3339 } 3340 } 3341 if (debug && !breakdown.structural) breakdown.structural = '+0'; 3342 3343 // STRIKETHROUGH 3344 if (hasStrikethrough(element)) { 3345 score -= 100; 3346 if (debug) breakdown.strikethrough = '-100 (compare-at price)'; 3347 } else if (debug) { 3348 breakdown.strikethrough = '+0'; 3349 } 3350 3351 if (debug) { 3352 breakdown.totalScore = score; 3353 breakdown.elementText = element.textContent.trim().substring(0, 30); 3354 breakdown.elementTag = element.tagName; 3355 } 3356 3357 return debug ? { score, breakdown } : score; 3358 }; 3359 3360 // Find all elements containing a specific price value 3361 const findElementsWithPrice = (knownPriceInCents, productMeta = null, debug = false, log = () => {}) => { 3362 const candidates = []; 3363 const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT); 3364 3365 let node; 3366 while (node = walker.nextNode()) { 3367 const text = node.textContent.trim(); 3368 if (text.length > 30 || !textMatchesPrice(text, knownPriceInCents)) continue; 3369 3370 const element = node.parentElement; 3371 const rect = element.getBoundingClientRect(); 3372 3373 if (rect.width === 0 || rect.height === 0 || hasStrikethrough(element)) continue; 3374 3375 const score = scoreElement(element, productMeta, false); 3376 candidates.push({ element, text, score }); 3377 } 3378 3379 if (debug && candidates.length > 0) { 3380 candidates.sort((a, b) => b.score - a.score); 3381 log(` Candidates: ${candidates.length}, top: score=${candidates[0].score}, text="${candidates[0].text}"`); 3382 } 3383 3384 return candidates; 3385 }; 3386 3387 // Find the /cart/add form by traversing from the price element 3388 // This is more reliable than name-based container detection since all Shopify themes have this form 3389 const findCartFormFromPrice = (priceElement, debug = false, log = () => {}) => { 3390 let el = priceElement; 3391 3392 while (el && el !== document.body) { 3393 if (el.tagName === 'FORM' && el.action?.includes('/cart/add')) { 3394 if (debug) log(` Found /cart/add form (element itself)`); 3395 return el; 3396 } 3397 3398 let sibling = el.nextElementSibling; 3399 while (sibling) { 3400 if (sibling.tagName === 'FORM' && sibling.action?.includes('/cart/add')) { 3401 if (debug) log(` Found /cart/add form as sibling`); 3402 return sibling; 3403 } 3404 // Check if sibling contains the form 3405 const formInSibling = sibling.querySelector('form[action*="/cart/add"]'); 3406 if (formInSibling) { 3407 if (debug) log(` Found /cart/add form inside sibling`); 3408 return formInSibling; 3409 } 3410 sibling = sibling.nextElementSibling; 3411 } 3412 3413 el = el.parentElement; 3414 } 3415 3416 if (debug) log(` No /cart/add form found`); 3417 return null; 3418 }; 3419 3420 // Fallback: walk up from the price text element to find a suitable wrapper. 3421 // Used when no /cart/add form exists near the price element. 3422 const findPriceContainer = (priceElement) => { 3423 let el = priceElement; 3424 let bestContainer = priceElement; 3425 3426 while (el && el !== document.body) { 3427 // Look for elements with price-related IDs (common Shopify pattern) 3428 if (el.id && /price/i.test(el.id)) { 3429 bestContainer = el; 3430 } 3431 // Look for elements with price-related classes that seem like containers 3432 if (el.className && typeof el.className === 'string') { 3433 const classes = el.className.toLowerCase(); 3434 if (/\bprice\b/.test(classes) && !/price-item|price__regular|price__sale/.test(classes)) { 3435 bestContainer = el; 3436 } 3437 } 3438 // Stop at major structural elements 3439 if (el.tagName === 'SECTION' || el.tagName === 'ARTICLE' || el.tagName === 'MAIN') { 3440 break; 3441 } 3442 el = el.parentElement; 3443 } 3444 3445 return bestContainer; 3446 }; 3447 3448 // Try common Shopify theme price selectors (Dawn and derivatives) 3449 const findPriceByTemplateSelector = (debug = false, log = () => {}) => { 3450 const selectors = [ 3451 '[id*="price-template"]', // Dawn theme pattern 3452 '.price-item--regular:not(s):not(del)',
3453 '[data-product-price]', 3454 ]; 3455 3456 for (const selector of selectors) { 3457 const el = document.querySelector(selector); 3458 if (el && !hasStrikethrough(el)) { 3459 if (debug) log(`Template selector found: ${selector}`); 3460 return el; 3461 } 3462 } 3463 return null; 3464 }; 3465 3466 // Check if we're in an isolated/sandboxed iframe (theme editor) 3467 const isIsolatedContext = () => { 3468 if (window === window.top) return false; // Not in iframe 3469 try { 3470 // Try to access parent - if cross-origin, we're isolated 3471 const test = window.parent.document; 3472 return false; // Can access parent, not isolated 3473 } catch (e) { 3474 return true; // Cross-origin, we're isolated 3475 } 3476 }; 3477 3478 // Try to find price element in sibling iframes (theme editor workaround) 3479 const findPriceInSiblingIframes = (knownPriceInCents) => { 3480 const iframes = document.querySelectorAll('iframe'); 3481 3482 for (const iframe of iframes) { 3483 try { 3484 const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document; 3485 if (!iframeDoc) continue; 3486 3487 const priceElement = iframeDoc.querySelector('.price-item, .price, [data-product-price]'); 3488 if (priceElement) { 3489 return { element: priceElement, document: iframeDoc }; 3490 } 3491 } catch (e) { 3492 // Cross-origin iframe, skip 3493 } 3494 } 3495 3496 return null; 3497 }; 3498 3499 // Helper: Insert messaging near a price element (before cart form or after price container). 3500 // Returns the price container element used as the logical anchor. 3501 const insertMessagingNearPrice = (priceElement, messaging, debug = false, log = () => {}) => { 3502 const cartForm = findCartFormFromPrice(priceElement, debug, log); 3503 const container = findPriceContainer(priceElement); 3504 if (cartForm) { 3505 cartForm.before(messaging.cloneNode()); 3506 if (debug) log('Inserted messaging before /cart/add form'); 3507 } else { 3508 container.after(messaging.cloneNode()); 3509 if (debug) log('Inserted after price container (no form found)'); 3510 } 3511 return container; 3512 }; 3513 3514 // Insert messaging after price element 3515 const insertMessagingWithRetry = (shopifyData, messaging, debug = false, log = () => {}) => { 3516 // Skip visual preview iframe 3517 if (window.location.search.includes('source=visualPreviewInitialLoad')) return; 3518 if (document.querySelector('#paypal-upstream-messaging-product')) return; 3519 3520 const liquidPriceInCents = shopifyData?.price?.priceInCents; 3521 const isIsolated = isIsolatedContext(); 3522 3523 if (debug) { 3524 log('=== Price Detection ==='); 3525 log(`Context: ${isIsolated ? 'Theme Editor' : 'Live Storefront'}`); 3526 log(`Price: ${liquidPriceInCents} cents ($${(liquidPriceInCents / 100).toFixed(2)})`); 3527 } 3528 3529 // Priority 1: Template selectors (common theme patterns like Dawn) 3530 const templateElement = findPriceByTemplateSelector(debug, log); 3531 if (templateElement) { 3532 return insertMessagingNearPrice(templateElement, messaging, debug, log); 3533 } 3534 3535 // Priority 2: Scoring-based price detection 3536 const priceElement = findPriceElement(shopifyData, debug, log); 3537 if (priceElement) { 3538 return insertMessagingNearPrice(priceElement, messaging, debug, log); 3539 } 3540 3541 // Priority 3: Sibling iframes (theme editor only) 3542 if (isIsolated) { 3543 const siblingResult = findPriceInSiblingIframes(liquidPriceInCents); 3544 if (siblingResult) { 3545 return insertMessagingNearPrice(siblingResult.element, messaging, debug, log); 3546 } 3547 } 3548 3549 if (!isIsolated) { 3550 log('Could not find price element. Consider using Advanced Settings with a custom selector.'); 3551 } 3552 return null; 3553 }; 3554 3555 const findPriceElement = (shopifyData = null, debug = false, log = () => {}) => { 3556 try { 3557 const knownPriceInCents = shopifyData?.price?.priceInCents; 3558 const productMeta = shopifyData?.product; 3559 3560 if (debug) log(`findPriceElement: ${knownPriceInCents} cents`); 3561 3562 if (knownPriceInCents) { 3563 const candidates = findElementsWithPrice(knownPriceInCents, productMeta, debug, log); 3564 if (candidates.length > 0) { 3565 candidates.sort((a, b) => b.score - a.score); 3566 if (debug) log(` â FOUND (score=${candidates[0].score})`); 3567 return candidates[0].element; 3568 } 3569 } 3570 3571 if (debug) log(' â null (no candidates)'); 3572 return null; 3573 } catch (e) { 3574 if (debug) log(` â Error: ${e.message}`); 3575 recordEvent('appEmbed:findPriceElement:error', { error: e.message }); 3576 return null; 3577 } 3578 }; 3579</script>
3579 3580<!-- END app snippet --><!-- BEGIN app snippet: navigator-panel --><template id="pp-nav-template"> 3581 <style> 3582 /* --- Floating placement panel shell --- */ 3583 #pp-nav-panel { 3584 position: fixed; 3585 top: 50%; 3586 left: 20px; 3587 transform: translateY(-50%); 3588 background: #fff; 3589 border-radius: 12px; 3590 font-family: system-ui, -apple-system, sans-serif; 3591 font-size: 13px; 3592 z-index: 999999; 3593 width: 340px; 3594 box-shadow: 0 8px 32px rgba(0,0,0,0.18); 3595 overflow: hidden; 3596 transition: transform 0.3s ease, height 0.3s ease; 3597 } 3598 #pp-nav-panel.minimized { 3599 display: none; 3600 } 3601 3602 /* --- Minimized pill button --- */ 3603 #pp-nav-pill { 3604 position: fixed; 3605 bottom: 20px; 3606 left: 20px; 3607 background: #003087; 3608 color: #fff; 3609 border: none; 3610 border-radius: 24px; 3611 padding: 10px 18px; 3612 font-family: system-ui, -apple-system, sans-serif; 3613 font-size: 13px; 3614 font-weight: 600; 3615 cursor: pointer; 3616 z-index: 999999; 3617 box-shadow: 0 4px 16px rgba(0,48,135,0.3); 3618 display: none; 3619 align-items: center; 3620 gap: 8px; 3621 transition: box-shadow 0.2s; 3622 } 3623 #pp-nav-pill:hover { 3624 box-shadow: 0 6px 20px rgba(0,48,135,0.45); 3625 } 3626 3627 /* --- Header --- */ 3628 .pp-panel-header { 3629 background: #003087; 3630 color: #fff; 3631 padding: 14px 16px; 3632 display: flex; 3633 align-items: center; 3634 justify-content: space-between; 3635 } 3636 .pp-panel-title { 3637 font-size: 14px; 3638 font-weight: 700; 3639 margin: 0; 3640 letter-spacing: 0.01em; 3641 } 3642 .pp-minimize-btn { 3643 background: none; 3644 border: none; 3645 color: rgba(255,255,255,0.8); 3646 cursor: pointer; 3647 font-size: 18px; 3648 line-height: 1; 3649 padding: 2px; 3650 border-radius: 4px; 3651 transition: color 0.15s; 3652 } 3653 .pp-minimize-btn:hover { 3654 color: #fff; 3655 } 3656 3657 /* --- Panel body --- */ 3658 .pp-panel-content { 3659 padding: 16px; 3660 } 3661 3662 /* --- Step info boxes --- */ 3663 .pp-step-box { 3664 border-radius: 8px; 3665 padding: 10px 12px; 3666 font-size: 12px; 3667 line-height: 1.5; 3668 margin-bottom: 12px; 3669 display: flex; 3670 align-items: flex-start; 3671 gap: 8px; 3672 } 3673 .pp-step-box.blue { 3674 background: #e8f4fd; 3675 border: 1px solid #b8dff5; 3676 color: #0a5a96; 3677 } 3678 .pp-step-box.green { 3679 background: #e6f9ee; 3680 border: 1px solid #a3e4b8; 3681 color: #1a7a3a; 3682 } 3683 .pp-step-text { 3684 flex: 1; 3685 } 3686 .pp-step-text p { 3687 margin: 0 0 8px 0; 3688 } 3689 .pp-step-text p:last-child { 3690 margin-bottom: 0; 3691 } 3692 .pp-step-text strong { 3693 display: block; 3694 font-size: 12px; 3695 margin-bottom: 2px; 3696 } 3697 .pp-step-dismiss { 3698 background: none; 3699 border: none; 3700 color: inherit; 3701 opacity: 0.5; 3702 cursor: pointer; 3703 font-size: 16px; 3704 line-height: 1; 3705 padding: 0; 3706 flex-shrink: 0; 3707 } 3708 .pp-step-dismiss:hover { 3709 opacity: 1; 3710 } 3711 3712 /* --- Warning banners --- */ 3713 .pp-warning { 3714 background: #fff3cd; 3715 border: 1px solid #ffc107; 3716 border-radius: 8px; 3717 padding: 10px 12px; 3718 margin-bottom: 12px; 3719 font-size: 12px; 3720 color: #856404; 3721 line-height: 1.4; 3722 } 3723 .pp-warning-icon { 3724 margin-right: 4px; 3725 } 3726 3727 /* --- Pick placement + copy actions --- */ 3728 .pp-pick-btn { 3729 width: 100%; 3730 padding: 12px; 3731 border: 2px solid #0070ba; 3732 border-radius: 8px; 3733 background: #0070ba; 3734 color: #fff; 3735 cursor: pointer; 3736 font-size: 13px; 3737 font-weight: 600; 3738 transition: all 0.15s; 3739 display: flex; 3740 align-items: center; 3741 justify-content: center; 3742 gap: 8px; 3743 } 3744 .pp-pick-btn:hover { 3745 opacity: 0.9; 3746 } 3747 .pp-pick-btn.active { 3748 background: #f0f7ff; 3749 color: #0070ba; 3750 border-color: #b8dff5; 3751 } 3752 .pp-pick-btn.active:hover { 3753 background: #e0efff; 3754 } 3755 3756 /* --- Copy button --- */ 3757 #pp-apply-btn { 3758 width: 100%; 3759 background: #28a745; 3760 color: #fff; 3761 border: none; 3762 padding: 12px; 3763 border-radius: 8px; 3764 font-weight: 600; 3765 cursor: pointer; 3766 font-size: 13px; 3767 transition: all 0.2s; 3768 display: none; 3769 align-items: center; 3770 justify-content: center; 3771 gap: 8px; 3772 margin-top: 12px; 3773 } 3774 #pp-apply-btn:hover { 3775 opacity: 0.9; 3776 } 3777 #pp-apply-btn.applied { 3778 background: #28a745; 3779 } 3780 3781 /* --- Step 2 confirmation --- */ 3782 #pp-step2 { 3783 display: none; 3784 margin-top: 18px; 3785 } 3786 </style> 3787 <div class='pp-panel-header'> 3788 <div class='pp-panel-title'>PayPal Pay Later Messaging</div> 3789 <button class='pp-minimize-btn' id='pp-collapse-btn' title='Minimize panel'>▾</button> 3790 </div> 3791 <div class='pp-panel-content'> 3792 <div id='pp-warning' class='pp-warning' style='display: none;'></div> 3793 <div id='pp-inspector-warning' class='pp-warning' style='display: none;'></div> 3794 <div class='pp-step-box blue' id='pp-step1'>
3795 <span class='pp-step-text' 3796 ><strong>Step 1: Choose message placement</strong> 3797 Click the button below and then hover over your page to select a placement. 3798 </span> 3799 </div> 3800 <button id='pp-pick-btn' class='pp-pick-btn'>◎ Start Picking Placement</button 3801 ><button id='pp-apply-btn'>Copy Current Placement</button> 3802 <div id='pp-step2' style='display:none;'> 3803 <div class='pp-step-box green'> 3804 <span class='pp-step-text' 3805 ><strong>Step 2: Paste and save</strong> 3806 <p style='margin: 0 0 8px 0;'> 3807 You have copied the placement for the <b id='pp-context-name'>Product Page</b>. 3808 </p> 3809 <p style='margin: 0;'> 3810 Go back to the App Embeds section, and in the Paypal Advanced Settings, paste the copied value into the 3811 <b id='pp-selector-name'>Product Page</b> field and click the 'Save' button in the top right corner. 3812 </p></span 3813 ><button class='pp-step-dismiss' id='pp-step2-dismiss' title='Dismiss'>×</button> 3814 </div> 3815 </div> 3816 </div> 3817</template> 3818<!-- END app snippet --><!-- BEGIN app snippet: navigator -->
3818<script> 3819 // ============================================ 3820 // DOM Traversal Controls for Theme Editor 3821 // Depends on: price-detection.liquid (isIsolatedContext) 3822 // ============================================ 3823 3824 const OVERLAY_STYLE = 3825 'position:fixed;pointer-events:none;background:rgba(255,152,0,0.12);border:2px solid rgba(255,152,0,0.6);z-index:999998;display:none;'; 3826 const OVERLAY_LABEL_STYLE = 3827 'position:absolute;bottom:100%;left:-2px;background:#f57c00;color:#fff;font:10px system-ui;padding:2px 6px;border-radius:3px 3px 0 0;white-space:nowrap;'; 3828 const COPY_BUTTON_LABEL = 'Copy Current Placement'; 3829 const COPIED_BUTTON_LABEL = 'Placement Copied!'; 3830 3831 const isInOverlay = (el) => { 3832 while (el && el !== document.body) { 3833 if (getComputedStyle(el).position === 'fixed') return true; 3834 el = el.parentElement; 3835 } 3836 return false; 3837 }; 3838 3839 // Position a fixed overlay to cover a target element 3840 const positionOverlayOnElement = (overlay, el) => { 3841 const rect = el.getBoundingClientRect(); 3842 Object.assign(overlay.style, { 3843 top: rect.top + 'px', 3844 left: rect.left + 'px', 3845 width: rect.width + 'px', 3846 height: rect.height + 'px', 3847 display: 'block', 3848 }); 3849 }; 3850 3851 // Module-level refs for global listeners added by createNavigationPanel. 3852 // Stored here so they can be removed if the panel is re-initialized. 3853 let _panelInspectorActivate = null; 3854 let _panelInspectorDeactivate = null; 3855 let _highlightedElement = null; 3856 let _panelPickModeCleanup = null; 3857 3858 // Detect UID pattern in ID (Shopify's --suffix or long numeric/hex suffixes) 3859 const hasUid = (id) => { 3860 if (!id) return false; 3861 if (/--/.test(id)) return true; 3862 return /[-_](\d{5,}|[a-f0-9]{8,})$/i.test(id); 3863 }; 3864 const getIdPrefix = (id) => { 3865 if (id.includes('--')) return id.split('--')[0]; 3866 const match = id.match(/^(.+?)[-_](\d{5,}|[a-f0-9]{8,})$/i); 3867 return match ? match[1] : null; 3868 }; 3869 const getMeaningfulClasses = (el) => { 3870 if (!el.className || typeof el.className !== 'string') return []; 3871 return el.className.trim().split(/\s+/).filter(c => 3872 c && !c.startsWith('_') && !c.startsWith('js-') && 3873 c.length < 30 && !/^[a-f0-9]{6,}$/i.test(c) && !/^[A-Z]/.test(c) 3874 ); 3875 }; 3876 const isUnique = (selector) => document.querySelectorAll(selector).length === 1; 3877 3878 // Returns null if no unique selector can be generated 3879 const generateSelector = (element) => { 3880 if (!element || element === document.body || element === document.documentElement) { 3881 return null; 3882 } 3883 const classes = getMeaningfulClasses(element); 3884 3885 // Priority 1: Clean ID 3886 if (element.id && !hasUid(element.id)) return `#${element.id}`; 3887 3888 // Priority 2: ID with UID â attribute wildcard selector 3889 if (element.id && hasUid(element.id)) { 3890 const prefix = getIdPrefix(element.id); 3891 if (prefix) { 3892 const selector = `[id^="${prefix}-"]`; 3893 if (isUnique(selector)) return selector; 3894 } 3895 } 3896 3897 // Priority 3: Unique class 3898 for (const cls of classes) { 3899 if (isUnique('.' + cls)) return '.' + cls; 3900 } 3901 3902 // Priority 4: Ancestor + target class combinations (walk up to 5 levels) 3903 if (classes.length > 0) { 3904 let ancestor = element.parentElement; 3905 let depth = 0; 3906 while (ancestor && ancestor !== document.body && ancestor !== document.documentElement && depth < 5) { 3907 const ancClasses = getMeaningfulClasses(ancestor); 3908 if (ancClasses.length > 0) { 3909 const s1 = `.${ancClasses[0]} .${classes[0]}`; 3910 if (isUnique(s1)) return s1; 3911 const s2 = `.${ancClasses[0]} > .${classes[0]}`; 3912 if (isUnique(s2)) return s2; 3913 } 3914 if (ancestor.id && !hasUid(ancestor.id)) { 3915 const s3 = `#${ancestor.id} .${classes[0]}`; 3916 if (isUnique(s3)) return s3; 3917 } 3918 ancestor = ancestor.parentElement; 3919 depth++; 3920 } 3921 } 3922 3923 // NO FALLBACK - return null if no unique selector exists 3924 return null; 3925 }; 3926 const hasSpecificSelector = (el) => generateSelector(el) !== null; 3927 const shouldSkipElement = (el) => { 3928 if (!el || el.hidden) return true; 3929 if (['SCRIPT', 'STYLE', 'TEMPLATE'].includes(el.tagName)) return true; 3930 if ( 3931 el.closest('#pp-nav-panel') || 3932 el.closest('#pp-nav-pill') || 3933 el.closest('#pp-pick-overlay') 3934 ) 3935 return true; 3936 if (el.hasAttribute('data-pp-message')) return true; 3937 if (!hasSpecificSelector(el)) return true; 3938 return false;
3939 }; 3940 const resolveContextName = (providedContextName, messagingTemplate) => { 3941 if (providedContextName && providedContextName !== 'this area') return providedContextName; 3942 const id = messagingTemplate?.id || ''; 3943 if (id.includes('cart-drawer')) return 'Cart Drawer'; 3944 if (id.includes('cart')) return 'Cart Page'; 3945 if (id.includes('product')) return 'Product Page'; 3946 return 'this area'; 3947 }; 3948 3949 // Called when the cart drawer closes (via IntersectionObserver in cartDrawer.liquid) 3950 // and at the start of createNavigationPanel to tear down any existing instance. 3951 // Cleans up pick mode listeners, DOM elements, highlights, and preview clones. 3952 const destroyNavigationPanel = () => { 3953 if (_panelPickModeCleanup) { 3954 _panelPickModeCleanup(); 3955 _panelPickModeCleanup = null; 3956 } 3957 document.getElementById('pp-nav-panel')?.remove(); 3958 document.getElementById('pp-nav-pill')?.remove(); 3959 const preview = document.querySelector('[id$="-preview"][data-pp-message]'); 3960 if (preview) preview.remove(); 3961 if (_highlightedElement) { 3962 _highlightedElement.style.outline = ''; 3963 _highlightedElement.style.outlineOffset = ''; 3964 _highlightedElement = null; 3965 } 3966 if (_panelInspectorActivate) { 3967 document.removeEventListener('shopify:inspector:activate', _panelInspectorActivate); 3968 document.removeEventListener('shopify:inspector:deactivate', _panelInspectorDeactivate); 3969 _panelInspectorActivate = _panelInspectorDeactivate = null; 3970 } 3971 document.documentElement.style.cursor = ''; 3972 }; 3973 3974 const createNavigationPanel = ( 3975 initialElement, 3976 messagingTemplate, 3977 warningMessage = null, 3978 contextName = 'this area', 3979 ) => {
3980 let currentTarget = initialElement; 3981 let resolvedContextName = resolveContextName(contextName, messagingTemplate); 3982 destroyNavigationPanel(); 3983 3984 const panel = document.createElement('div'); 3985 panel.id = 'pp-nav-panel'; 3986 const tmpl = document.getElementById('pp-nav-template'); 3987 panel.appendChild(tmpl.content.cloneNode(true)); 3988 3989 // Create minimized pill button (separate from panel) 3990 const pill = document.createElement('button'); 3991 pill.id = 'pp-nav-pill'; 3992 pill.innerHTML = 'PayPal Pay Later Messaging'; 3993 const applyBtn = panel.querySelector('#pp-apply-btn'); 3994 const warningEl = panel.querySelector('#pp-warning'); 3995 const step2 = panel.querySelector('#pp-step2'); 3996 const step2Dismiss = panel.querySelector('#pp-step2-dismiss'); 3997 const contextEl = panel.querySelector('#pp-context-name'); 3998 const selectorEl = panel.querySelector('#pp-selector-name'); 3999 const updateContextUI = (newContext) => { 4000 resolvedContextName = newContext; 4001 if (contextEl) contextEl.textContent = resolvedContextName; 4002 if (selectorEl) { 4003 selectorEl.textContent = resolvedContextName; 4004 } 4005 }; 4006 updateContextUI(resolvedContextName); 4007 const detectContextFromElement = (el) => { 4008 if (el.closest('#CartDrawer, .drawer, .cart-drawer, [id*="cart-drawer"], [class*="cart-drawer"]')) 4009 return 'Cart Drawer'; 4010 if (window.location.pathname.endsWith('/cart') || el.closest('.cart, #cart, #main-cart-items, #main-cart-footer')) 4011 return 'Cart Page'; 4012 return 'Product Page'; 4013 }; 4014 4015 // Show warning message if provided 4016 if (warningMessage && warningEl) { 4017 warningEl.innerHTML = `<span class="pp-warning-icon">â ï¸</span>${warningMessage}`; 4018 warningEl.style.display = 'block'; 4019 } 4020 let isInitialRender = true; 4021 const updateUI = () => { 4022 // Highlight element 4023 highlightElement(currentTarget); 4024 // Update button states 4025 applyBtn.textContent = COPY_BUTTON_LABEL; 4026 applyBtn.classList.remove('applied'); 4027 // Reposition messaging â skip on initial render (already placed correctly by auto-detection) 4028 if (!isInitialRender) repositionMessaging(); 4029 isInitialRender = false;
4030 }; 4031 4032 const highlightElement = (el) => { 4033 if (_highlightedElement) { 4034 _highlightedElement.style.outline = ''; 4035 _highlightedElement.style.outlineOffset = ''; 4036 } 4037 _highlightedElement = el; 4038 if (el) { 4039 el.style.outline = '2px solid rgba(255,152,0,0.6)'; 4040 el.style.outlineOffset = '-1px'; 4041 } 4042 }; 4043 4044 const repositionMessaging = () => { 4045 if (!currentTarget) return; 4046 const existing = document.getElementById(messagingTemplate.id); 4047 const targetInOverlay = isInOverlay(currentTarget); 4048 const msgInOverlay = existing && isInOverlay(existing); 4049 if (targetInOverlay !== msgInOverlay) { 4050 // Cross-context: reposition messaging in the target's context without touching the original 4051 const allMessaging = document.querySelectorAll('[data-pp-message]'); 4052 let contextMsg = null; 4053 for (const el of allMessaging) { 4054 if (isInOverlay(el) === targetInOverlay) { contextMsg = el; break; } 4055 } 4056 if (!contextMsg) { 4057 contextMsg = messagingTemplate.cloneNode(true); 4058 contextMsg.id = messagingTemplate.id + '-preview'; 4059 } 4060 contextMsg.remove(); 4061 currentTarget.after(contextMsg); 4062 return; 4063 } 4064 if (existing) existing.remove(); 4065 const newMessaging = messagingTemplate.cloneNode(true); 4066 currentTarget.after(newMessaging); 4067 }; 4068 4069 const collapseBtn = panel.querySelector('#pp-collapse-btn'); 4070 const pickBtn = panel.querySelector('#pp-pick-btn'); 4071 let pickMode = false; 4072 let pickHoverTarget = null; 4073 let pickOverlay = null; 4074 let pickLabel = null; 4075 let applyBtnResetTimer = null; 4076 let _pickRafId = null; 4077 4078 const enterPickMode = () => { 4079 pickMode = true; 4080 document.documentElement.style.cursor = 'crosshair'; 4081 pickBtn.classList.add('active'); 4082 pickBtn.innerHTML = 'â Pick a spot on the page...'; 4083 applyBtn.textContent = COPY_BUTTON_LABEL; 4084 applyBtn.classList.remove('applied'); 4085 applyBtn.style.display = 'flex'; 4086 step2.style.display = 'none'; 4087 if (contextEl) contextEl.textContent = resolvedContextName; 4088 // Create overlay for highlighting (pointer-events:none prevents interference) 4089 pickOverlay = document.createElement('div'); 4090 pickOverlay.id = 'pp-pick-overlay'; 4091 pickOverlay.style.cssText = OVERLAY_STYLE; 4092 pickLabel = document.createElement('div'); 4093 pickLabel.style.cssText = OVERLAY_LABEL_STYLE; 4094 pickOverlay.appendChild(pickLabel); 4095 document.body.appendChild(pickOverlay); 4096 4097 document.addEventListener('mousemove', onPickHover, true); 4098 document.addEventListener('click', onPickClick, true); 4099 document.addEventListener('mousedown', onPickSuppressEvent, true); 4100 document.addEventListener('pointerdown', onPickSuppressEvent, true); 4101 }; 4102 4103 const exitPickMode = () => { 4104 pickMode = false; 4105 document.documentElement.style.cursor = ''; 4106 pickBtn.classList.remove('active'); 4107 pickBtn.innerHTML = 'â Start Picking Placement'; 4108 applyBtn.style.display = 'none'; 4109 // Remove overlay 4110 const overlay = document.getElementById('pp-pick-overlay'); 4111 if (overlay) overlay.remove(); 4112 pickOverlay = null; 4113 pickLabel = null; 4114 pickHoverTarget = null; 4115 4116 if (_pickRafId) { cancelAnimationFrame(_pickRafId); _pickRafId = null; } 4117 document.removeEventListener('mousemove', onPickHover, true); 4118 document.removeEventListener('click', onPickClick, true); 4119 document.removeEventListener('mousedown', onPickSuppressEvent, true); 4120 document.removeEventListener('pointerdown', onPickSuppressEvent, true); 4121 }; 4122 4123 // Find the nearest visible child element to cursor coordinates 4124 const snapToNearestChild = (parent, cx, cy) => { 4125 const children = parent.children; 4126 if (!children.length) return null; 4127 let best = null; 4128 let bestDist = 30; 4129 for (const child of children) { 4130 if (shouldSkipElement(child)) continue; 4131 const r = child.getBoundingClientRect(); 4132 if (r.width === 0 || r.height === 0) continue; 4133 const dx = cx < r.left ? r.left - cx : cx > r.right ? cx - r.right : 0; 4134 const dy = cy < r.top ? r.top - cy : cy > r.bottom ? cy - r.bottom : 0; 4135 const dist = Math.sqrt(dx * dx + dy * dy); 4136 if (dist < bestDist) { 4137 bestDist = dist; 4138 best = child; 4139 } 4140 } 4141 return best; 4142 }; 4143 4144 const onPickHover = (e) => { 4145 if (_pickRafId) return; 4146 _pickRafId = requestAnimationFrame(() => { 4147 _pickRafId = null; 4148 let el = document.elementFromPoint(e.clientX, e.clientY); 4149 if (!el || shouldSkipElement(el)) { 4150 document.documentElement.style.cursor = 'not-allowed'; 4151 if (pickOverlay) pickOverlay.style.display = 'none'; 4152 pickHoverTarget = null; 4153 return; 4154 } 4155 4156 if (el.children.length > 0) { 4157 const snapped = snapToNearestChild(el, e.clientX, e.clientY); 4158 if (snapped) el = snapped; 4159 } 4160 4161 // Skip elements without a unique selector 4162 if (shouldSkipElement(el)) { 4163 document.documentElement.style.cursor = 'not-allowed'; 4164 pickHoverTarget = null; 4165 if (pickOverlay) pickOverlay.style.display = 'none'; 4166 return; 4167 } 4168 document.documentElement.style.cursor = 'crosshair'; 4169 if (el === pickHoverTarget) return; 4170 pickHoverTarget = el; 4171 positionOverlayOnElement(pickOverlay, el);
4172 pickLabel.innerHTML = 'Select this placement'; 4173 }); 4174 }; 4175 4176 const onPickSuppressEvent = (e) => { 4177 if (e.target.closest('#pp-nav-panel')) return; 4178 e.preventDefault(); 4179 e.stopPropagation(); 4180 }; 4181 4182 const onPickClick = (e) => { 4183 if (e.target.closest('#pp-nav-panel')) return; 4184 e.preventDefault(); 4185 e.stopPropagation(); 4186 e.stopImmediatePropagation(); 4187 if (pickHoverTarget && !shouldSkipElement(pickHoverTarget)) { 4188 currentTarget = pickHoverTarget; 4189 updateContextUI(detectContextFromElement(currentTarget)); 4190 updateUI(); 4191 } 4192 }; 4193 4194 // --- Pick button --- 4195 pickBtn.addEventListener('click', () => { 4196 if (pickMode) exitPickMode(); 4197 else enterPickMode(); 4198 }); 4199 4200 _panelPickModeCleanup = () => { if (pickMode) exitPickMode(); }; 4201 4202 // --- Minimize / expand --- 4203 collapseBtn.addEventListener('click', () => { 4204 if (pickMode) exitPickMode(); 4205 panel.classList.add('minimized'); 4206 pill.style.display = 'flex'; 4207 highlightElement(null); 4208 }); 4209 pill.addEventListener('click', () => { 4210 panel.classList.remove('minimized'); 4211 pill.style.display = 'none'; 4212 highlightElement(currentTarget); 4213 }); 4214 4215 // --- Step 2 dismiss --- 4216 step2Dismiss.addEventListener('click', () => { 4217 step2.style.display = 'none'; 4218 }); 4219 4220 // Handle copy button click 4221 panel.addEventListener('click', async (e) => { 4222 const button = e.target.closest('#pp-apply-btn'); 4223 if (!button) return; 4224 // Skip buttons handled separately 4225 if (button.id === 'pp-collapse-btn' || button.id === 'pp-pick-btn' || button.id === 'pp-step2-dismiss') return; 4226 if (button.id === 'pp-apply-btn') { 4227 const selector = generateSelector(currentTarget); 4228 if (!selector) return; 4229 let copied = false; 4230 try { 4231 // Try multiple copy methods (iframe security blocks clipboard API) 4232 if (navigator.clipboard?.writeText) { 4233 await navigator.clipboard.writeText(selector); 4234 copied = true; 4235 } 4236 } catch {} 4237 if (!copied) { 4238 try { 4239 const ta = document.createElement('textarea'); 4240 ta.value = selector; 4241 ta.style.position = 'fixed'; 4242 ta.style.opacity = '0'; 4243 document.body.appendChild(ta); 4244 ta.select(); 4245 copied = document.execCommand('copy'); 4246 ta.remove(); 4247 } catch {} 4248 } 4249 if (copied) { 4250 applyBtn.textContent = COPIED_BUTTON_LABEL; 4251 applyBtn.classList.add('applied'); 4252 if (applyBtnResetTimer) clearTimeout(applyBtnResetTimer); 4253 applyBtnResetTimer = setTimeout(() => { 4254 applyBtn.textContent = COPY_BUTTON_LABEL; 4255 applyBtn.classList.remove('applied'); 4256 applyBtnResetTimer = null; 4257 }, 1200); 4258 // Show Step 2 confirmation 4259 step2.style.display = 'block'; 4260 } 4261 exitPickMode(); 4262 } 4263 }); 4264 4265 // --- Inspector mode detection --- 4266 const inspectorWarning = panel.querySelector('#pp-inspector-warning'); 4267 let inspectorActive = typeof Shopify !== 'undefined' && Shopify.inspectMode; 4268 const isMac = navigator.platform?.startsWith('Mac') || navigator.userAgentData?.platform === 'macOS'; 4269 const shortcut = isMac ? 'â â§ I' : 'Ctrl + Shift + I'; 4270 const enableInspectorMode = () => { 4271 inspectorActive = true; 4272 inspectorWarning.innerHTML = `<span class="pp-warning-icon">â ï¸</span> For a better experience, press <strong>${shortcut}</strong> to turn off inspector mode`; 4273 inspectorWarning.style.display = 'block'; 4274 }; 4275 const disableInspectorMode = () => { 4276 inspectorActive = false; 4277 inspectorWarning.style.display = 'none'; 4278 }; 4279 _panelInspectorActivate = enableInspectorMode; 4280 _panelInspectorDeactivate = disableInspectorMode; 4281 document.addEventListener('shopify:inspector:activate', enableInspectorMode); 4282 document.addEventListener('shopify:inspector:deactivate', disableInspectorMode); 4283 4284 // Prevent panel/pill clicks from closing cart drawer (themes close drawer on outside mousedown) 4285 const stopBubble = (e) => e.stopPropagation(); 4286 panel.addEventListener('mousedown', stopBubble); 4287 panel.addEventListener('pointerdown', stopBubble); 4288 pill.addEventListener('mousedown', stopBubble); 4289 pill.addEventListener('pointerdown', stopBubble); 4290 4291 document.body.appendChild(panel); 4292 document.body.appendChild(pill); 4293 if (inspectorActive) enableInspectorMode(); 4294 updateUI(); 4295 return panel; 4296 }; 4297</script>
4297 4298<!-- END app snippet --><!-- BEGIN app snippet: cart -->
4298<script> 4299 // Determine correct locator by theme name 4300 const cartPageThemeName = window.Shopify.theme.name; 4301 let cartPageLocator, cartPageNodeToObserve, cartPageMutationNode; 4302 4303 try { 4304 switch (cartPageThemeName) { 4305 // to support other themes add cases 4306 // default case supports Shopify Free themes 4307 default: 4308 cartPageLocator = '.cart__footer .totals'; 4309 cartPageNodeToObserve = '#main-cart-footer .js-contents'; 4310 cartPageMutationNode = 'js-contents'; 4311 break; 4312 } 4313 // Begin Upstream Messaging Implementation 4314 const cartPageMessaging = document.createElement('div'); 4315 const price = 0 / 100; 4316 4317 const cartPageAttributes = { 4318 'id': 'paypal-upstream-messaging-cart-page', 4319 'data-pp-message': '', 4320 'data-pp-placement': 'cart', 4321 'data-pp-style-layout': 'text', 4322 'data-pp-style-text-align': 'right', 4323 'data-pp-style-logo-type': "inline", 4324 'data-pp-style-text-color': "black", 4325 'data-pp-style-text-size': "16", 4326 'data-pp-style-logo-position': "", 4327 'data-pp-style-text-align': "", 4328 'data-pp-amount': price, 4329 'style': 'padding-top: 10px', 4330 }; 4331 4332 Object.keys(cartPageAttributes).forEach((key) => { 4333 cartPageMessaging.setAttribute(key, cartPageAttributes[key]); 4334 }); 4335 4336 const advancedSettingsEnabled = 'true' === 'true'; 4337 let selectorNotFoundWarning = null; 4338 4339 if (advancedSettingsEnabled && '' !== '') { 4340 // utils.liquid 4341 cartPageLocator = parseSelector(''); 4342 } 4343 4344 if ("enabled" === 'enabled') { 4345 const element = document.querySelector(cartPageLocator); 4346 4347 if (element) { 4348 element.after(cartPageMessaging.cloneNode()); 4349 4350 if (advancedSettingsEnabled && isIsolatedContext()) { 4351 setTimeout(() => { 4352 createNavigationPanel(element, cartPageMessaging, null, 'Cart Page'); 4353 }, 500); 4354 } 4355 4356 // utils.liquid 4357 watchForCartChanges(cartPageLocator, cartPageMessaging); 4358 } else if (advancedSettingsEnabled && isIsolatedContext()) { 4359 selectorNotFoundWarning = 'Selected placement not found on this page. Please choose an element that is present on all page templates.'; 4360 recordEvent('appEmbed:advanced-settings-selector-not-found', { locator: cartPageLocator }); 4361 setTimeout(() => { 4362 createNavigationPanel(document.body, cartPageMessaging, selectorNotFoundWarning, 'Cart Page'); 4363 }, 500); 4364 } 4365 } 4366 } catch (e) { 4367 // utils.liquid 4368 recordEvent('appEmbed:query-selector-not-found-cart-page', { locator: cartPageLocator, error: e.message }); 4369 } 4370 </script>
4370 4371<!-- END app snippet --><!-- BEGIN app snippet: cartDrawer -->
4371<script> 4372 // Determine correct locator by theme name 4373 const cartDrawerThemeName = window.Shopify.theme.name; 4374 let cartDrawerLocator, cartDrawerNodeToObserve, cartDrawerMutationNode; 4375 4376 switch (cartDrawerThemeName) { 4377 // to support other themes add cases 4378 // default case supports Shopify Free themes 4379 default: 4380 cartDrawerLocator = '.cart-drawer__footer .totals'; 4381 cartDrawerNodeToObserve = '#CartDrawer'; 4382 cartDrawerMutationNode = 'drawer__inner'; 4383 break; 4384 } 4385 // Begin Upstream Messaging Implementation 4386 try { 4387 const cartDrawerMessaging = document.createElement('div'); 4388 const price = 0 / 100; 4389 4390 const cartDrawerAttributes = { 4391 'id': 'paypal-upstream-messaging-cart-drawer', 4392 'data-pp-message': '', 4393 'data-pp-placement': 'cart', 4394 'data-pp-style-layout': 'text', 4395 'data-pp-style-text-align': 'right', 4396 'data-pp-style-logo-type': "inline", 4397 'data-pp-style-text-color': "black", 4398 'data-pp-style-text-size': "16", 4399 'data-pp-style-logo-position': "", 4400 'data-pp-amount': price, 4401 }; 4402 4403 Object.keys(cartDrawerAttributes).forEach((key) => { 4404 cartDrawerMessaging.setAttribute(key, cartDrawerAttributes[key]); 4405 }); 4406 4407 const advancedSettingsEnabled = 'true' === 'true'; 4408 const customCartDrawerSelector = ''.trim(); 4409 4410 if (advancedSettingsEnabled && customCartDrawerSelector !== '') { 4411 // utils.liquid 4412 cartDrawerLocator = parseSelector(customCartDrawerSelector); 4413 } 4414 4415 if ("enabled" === 'enabled') { 4416 waitForElement(cartDrawerLocator).then(elem => { 4417 elem.after(cartDrawerMessaging.cloneNode()); 4418 4419 if (advancedSettingsEnabled && isIsolatedContext() && !document.getElementById('pp-nav-panel')) { 4420 let drawerPanelActive = false; 4421 new IntersectionObserver((entries) => { 4422 if (entries[0].isIntersecting) { 4423 if (!document.getElementById('pp-nav-panel')) { 4424 setTimeout(() => { 4425 if (!document.getElementById('pp-nav-panel')) { 4426 createNavigationPanel(elem, cartDrawerMessaging, null, 'Cart Drawer'); 4427 drawerPanelActive = true; 4428 } 4429 }, 300); 4430 } 4431 } else if (drawerPanelActive) { 4432 destroyNavigationPanel(); 4433 drawerPanelActive = false; 4434 } 4435 }, { threshold: 0.1 }).observe(elem); 4436 } 4437 }); 4438 4439 // Custom selector not found â show navigator with warning when drawer opens 4440 if (advancedSettingsEnabled && customCartDrawerSelector && !document.querySelector(cartDrawerLocator) && isIsolatedContext() && !document.getElementById('pp-nav-panel')) { 4441 const drawerContainer = document.querySelector(cartDrawerNodeToObserve); 4442 if (drawerContainer) { 4443 let warningPanelActive = false; 4444 const warning = 'Selected placement not found on this page. Please choose an element that is present on all page templates.'; 4445 recordEvent('appEmbed:advanced-settings-selector-not-found', { locator: cartDrawerLocator }); 4446 new IntersectionObserver((entries) => { 4447 if (entries[0].isIntersecting) { 4448 if (!document.getElementById('pp-nav-panel')) { 4449 setTimeout(() => { 4450 if (!document.getElementById('pp-nav-panel')) { 4451 createNavigationPanel(drawerContainer, cartDrawerMessaging, warning, 'Cart Drawer'); 4452 warningPanelActive = true; 4453 } 4454 }, 300); 4455 } 4456 } else if (warningPanelActive) { 4457 destroyNavigationPanel(); 4458 warningPanelActive = false; 4459 } 4460 }, { threshold: 0.1 }).observe(drawerContainer); 4461 } 4462 } 4463 4464 // utils.liquid 4465 watchForCartChanges(cartDrawerLocator, cartDrawerMessaging); 4466 } 4467 } catch (e) { 4468 // utils.liquid 4469 recordEvent('appEmbed:query-selector-not-found-cart-drawer', { locator: cartDrawerLocator, error: e.message }); 4470 } 4471 </script>
4471 4472<!-- END app snippet --> 4473 4474 4475</div><div id="shopify-block-AVC9KZllULzBVbkRXS__18369883135137792385" class="shopify-block shopify-app-block"><link href="//cdn.shopify.com/extensions/01a0c92e-2778-7671-a9da-706379edd60a/3.4.1/assets/styles.css" rel="stylesheet" type="text/css" media="all" /> 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494
4495<script> 4496 // Country and locale come from Liquid, so they are known at first paint. The 4497 // sheet href is built synchronously, and resolving the language from anything 4498 // that has to be fetched first would show the wrong one for a moment. 4499 window.energyLabelContext = window.energyLabelContext || { 4500 country: 'DE', 4501 locale: 'de' 4502 }; 4503 4504 // The country decides the sheet language and the browser only breaks ties, so 4505 // both travel with the request and the server resolves what it asks EPREL for. 4506 window.energyLabelSheetUrl = window.energyLabelSheetUrl || function(eprelNumber){ 4507 const params = new URLSearchParams({ 4508 country: window.energyLabelContext.country || '', 4509 langs: (navigator.languages || [navigator.language]).filter(Boolean).join(',') 4510 }); 4511 return '/apps/energy-label/api/products/' + eprelNumber + '/sheets?' + params; 4512 }; 4513 4514 // Fetched unconditionally â the sheet options below may be off, but the label 4515 // settings are still needed. Cached on window so badge click handlers can read 4516 // openLabelInNewTab synchronously (an await before window.open reads as a popup). 4517 window.energyLabelSettings = window.energyLabelSettings || {}; 4518 window.energyLabelSettingsReady = window.energyLabelSettingsReady || 4519 fetch(`/apps/energy-label/api/settings?locale=${encodeURIComponent(window.energyLabelContext.locale || '')}`) 4520 .then(response => response.json()) 4521 .then(settings => { window.energyLabelSettings = settings; return settings; }) 4522 .catch(() => window.energyLabelSettings); 4523 4524 window.energyLabelShouldOpenInNewTab = function(){ 4525 return window.energyLabelSettings.openLabelInNewTab === true; 4526 }; 4527 4528 window.energyLabelOpenInNewTab = function(labelUrl){ 4529 if(!labelUrl){ return false; } 4530 window.open(labelUrl, '_blank', 'noopener'); 4531 return true; 4532 }; 4533</script>
4533 4534 4535 4536 4537<div style="display: none"> 4538 4539 4540 4541
4541<script src="https://cdn.shopify.com/extensions/01a0c92e-2778-7671-a9da-706379edd60a/3.4.1/assets/script-embed.js" async data-typeCart="1" 4542 data-cssSelector="cart-item__details" 4543 data-cssSelectorProduct="cart-item" 4544 data-cssSelectorProduct-drawer="horizontal-product" 4545 data-cssSelector-drawer="horizontal-product__details" 4546 data-cssSelector-drawer-block="cart-drawer" 4547 > 4548 </script>
4548 4549 4550 4551</div> 4552<template class="energy-label__template"> 4553 <div class="energy-label__overlay" onclick="handleCollectionOverlayClick(event)" popover> 4554 <button class="energy-label__close-button" onclick="hideCollectionOverlay(event)"> 4555 <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> 4556 <path d="M6 6L26 26M6 26L26 6" stroke="#ffffff" stroke-width="2"/> 4557 </svg> 4558 </button> 4559 <div class="energy-label__image-container"> 4560 <img class="energy-label__image" width="auto" height="auto" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMiAzQzcuMDI5NDQgMyAzIDcuMDI5NDQgMyAxMkMzIDE2Ljk3MDYgNy4wMjk0NCAyMSAxMiAyMUMxMi44Mjg0IDIxIDEzLjUgMjEuNjcxNiAxMy41IDIyLjVDMTMuNSAyMy4zMjg0IDEyLjgyODQgMjQgMTIgMjRDNS4zNzI1OCAyNCAwIDE4LjYyNzQgMCAxMkMwIDUuMzcyNTggNS4zNzI1OCAwIDEyIDBDMTguNjI3NCAwIDI0IDUuMzcyNTggMjQgMTJDMjQgMTIuODI4NCAyMy4zMjg0IDEzLjUgMjIuNSAxMy41QzIxLjY3MTYgMTMuNSAyMSAxMi44Mjg0IDIxIDEyQzIxIDcuMDI5NDQgMTYuOTcwNiAzIDEyIDNaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K" alt="Energy Label"> 4561 <div class="energy-label__popup-link">Powered by <a href="https://apps.shopify.com/eu-energy-label" target="_blank">EU Energy Label app</a></div> 4562 </div> 4563 </div> 4564</template> 4565 4566 4567<embed-block-energy-label></embed-block-energy-label> 4568 4569<style> 4570 4571 4572 4573 4574 4575 .cart-item__details .energy-badge__container { 4576 margin-left: 0px; 4577 margin-right: 0px; 4578 margin-top: 0px; 4579 margin-bottom: 0px; 4580 4581 flex-direction: row; 4582 justify-content: flex-start; 4583 align-items: center; 4584 gap: 12px; 4585 4586 } 4587 4588 4589 .cart-item__details .energy-badge__link-text::before { 4590 font-size: 12px; 4591 } 4592 4593 4594 4595 .horizontal-product__details .energy-badge__container { 4596 margin-left: 0px; 4597 margin-right: 0px; 4598 margin-top: 0px; 4599 margin-bottom: 0px; 4600 4601 flex-direction: row; 4602 justify-content: flex-start; 4603 align-items: center; 4604 gap: 12px; 4605 4606 } 4607 4608 4609 .horizontal-product__details .energy-badge__link-text::before { 4610 font-size: 12px; 4611 } 4612 4613 4614 4615 4616 4617 4618 .cart-item__details .energy-badge__image { 4619 height: 24px; 4620 } 4621 .cart-item__details .energy-badge__image--manual, 4622 .cart-item__details .energy-badge__image.manual { 4623 height: 14px; 4624 } 4625 4626 4627 4628 .horizontal-product__details .energy-badge__image { 4629 height: 24px; 4630 } 4631 .horizontal-product__details .energy-badge__image--manual, 4632 .horizontal-product__details .energy-badge__image.manual { 4633 height: 14px; 4634 } 4635 4636 4637 4638</style> 4639 4640 4641</div>
4641<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
4641 4642</body> 4643</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.