1<!doctype html> 2<html lang="de"> 3<head > 4 <meta charset="utf-8"/> 5<meta name="description" content="Grosse Auswahl - günstige Preise. Bezahlung per KK, Rechnung, TWINT â Teilzahlung â Schweizer Kundendienst (DE/FR) ⤠Jetzt entdecken!"/> 6<meta name="robots" content="INDEX,FOLLOW"/> 7<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5.0"/> 8<title></title> 9 <link rel="stylesheet" type="text/css" media="all" href="https://www.vedia.ch/static/version1790063611/frontend/Vedia/hyva/de_CH/css/styles.css" /> 10<link rel="icon" type="image/x-icon" href="https://www.vedia.ch/static/version1790063611/frontend/Vedia/hyva/de_CH/Magento_Theme/favicon.ico" /> 11<link rel="shortcut icon" type="image/x-icon" href="https://www.vedia.ch/static/version1790063611/frontend/Vedia/hyva/de_CH/Magento_Theme/favicon.ico" /> 12<link rel="canonical" href="https://www.vedia.ch/customer/account/login/referer/aHR0cHM6Ly93d3cudmVkaWEuY2gvY3VzdG9tZXIvYWNjb3VudC9pbmRleC8~/" /> 13 <!-- BEGIN TRACKJS -->
14<script type="text/javascript" src="https://cdn.trackjs.com/agent/v3/latest/t.js" crossorigin></script>
vendor: 1 bytes, line 14
14
15<script> 16window.TrackJS && TrackJS.install({ 17 token: 'c75ba9dc3b0a4ee0904ab6d07dc048bb', 18 application: 've-m2', 19 onError: function(payload) { 20 if (payload.file) 21 payload.file = payload.file.replace(/\/version\d+\//, '/version0000000000/'); // remove static version key 22 if (payload.message) { 23 payload.message = payload.message 24 .replace(/\/version\d+\//, '/version0000000000/') // remove static version key 25 .replace(/^\[20\d\d-\d\d-\d\d \d\d:\d\d:\d\d\]/, '') // remove logger timestamp at start of message 26 ; 27 } 28 return true; 29 } 30}); 31</script>
31 32<!-- END TRACKJS -->
33<script> 34 var BASE_URL = 'https://www.vedia.ch/'; 35 var require = { 36 "baseUrl": "https://www.vedia.ch/static/version1790063611/frontend/Vedia/hyva/de_CH" 37 }; 38</script>
vendor: 1 bytes, line 38
38
39<script> 40 'use strict'; 41 (function( hyva, undefined ) { 42 43 function lifetimeToExpires(options, defaults) { 44 45 const lifetime = options.lifetime || defaults.lifetime; 46 47 if (lifetime) { 48 const date = new Date; 49 date.setTime(date.getTime() + lifetime * 1000); 50 return date; 51 } 52 53 return null; 54 } 55 56 function generateRandomString() { 57 58 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 59 length = 16; 60 61 let formKey = '', 62 charactersLength = allowedCharacters.length; 63 64 for (let i = 0; i < length; i++) { 65 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 66 } 67 68 return formKey; 69 } 70 71 const sessionCookieMarker = {noLifetime: true} 72 73 const cookieTempStorage = {}; 74 75 const internalCookie = { 76 get(name) { 77 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 78 return v ? v[2] : null; 79 }, 80 set(name, value, days, skipSetDomain) { 81 let expires, 82 path, 83 domain, 84 secure, 85 samesite; 86 87 const defaultCookieConfig = { 88 expires: null, 89 path: '/', 90 domain: null, 91 secure: false, 92 lifetime: null, 93 samesite: 'lax' 94 }; 95 96 const cookieConfig = window.COOKIE_CONFIG || {}; 97 98 expires = days && days !== sessionCookieMarker 99 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 100 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 101 102 path = cookieConfig.path || defaultCookieConfig.path; 103 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 104 secure = cookieConfig.secure || defaultCookieConfig.secure; 105 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 106 107 document.cookie = name + "=" + encodeURIComponent(value) + 108 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 109 (path ? '; path=' + path : '') + 110 (domain ? '; domain=' + domain : '') + 111 (secure ? '; secure' : '') + 112 (samesite ? '; samesite=' + samesite : 'lax'); 113 }, 114 isWebsiteAllowedToSaveCookie() { 115 const allowedCookies = this.get('user_allowed_save_cookie'); 116 if (allowedCookies) { 117 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 118 119 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 120 } 121 return false; 122 }, 123 getGroupByCookieName(name) { 124 const cookieConsentConfig = window.cookie_consent_config || {}; 125 let group = null; 126 for (let prop in cookieConsentConfig) { 127 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 128 if (cookieConsentConfig[prop].includes(name)) { 129 group = prop; 130 break; 131 } 132 } 133 return group; 134 }, 135 isCookieAllowed(name) { 136 const cookieGroup = this.getGroupByCookieName(name); 137 return cookieGroup 138 ? window.cookie_consent_groups[cookieGroup] 139 : this.isWebsiteAllowedToSaveCookie(); 140 }, 141 saveTempStorageCookies() { 142 for (const [name, data] of Object.entries(cookieTempStorage)) { 143 if (this.isCookieAllowed(name)) { 144 this.set(name, data['value'], data['days'], data['skipSetDomain']); 145 delete cookieTempStorage[name]; 146 } 147 } 148 } 149 }; 150 151 hyva.getCookie = (name) => { 152 const cookieConfig = window.COOKIE_CONFIG || {}; 153 154 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 155 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 156 } 157 158 return internalCookie.get(name); 159 } 160 161 hyva.setCookie = (name, value, days, skipSetDomain) => { 162 const cookieConfig = window.COOKIE_CONFIG || {}; 163 164 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 165 cookieTempStorage[name] = {value, days, skipSetDomain}; 166 return; 167 } 168 return internalCookie.set(name, value, days, skipSetDomain); 169 } 170 171 172 hyva.setSessionCookie = (name, value, skipSetDomain) => { 173 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 174 } 175 176 hyva.getBrowserStorage = () => { 177 const browserStorage = window.localStorage || window.sessionStorage; 178 if (!browserStorage) { 179 console.warn('Browser Storage is unavailable'); 180 return false;
181 } 182 try { 183 browserStorage.setItem('storage_test', '1'); 184 browserStorage.removeItem('storage_test'); 185 } catch (error) { 186 console.warn('Browser Storage is not accessible', error); 187 return false; 188 } 189 return browserStorage; 190 } 191 192 hyva.postForm = (postParams) => { 193 const form = document.createElement("form"); 194 195 let data = postParams.data; 196 197 if (! postParams.skipUenc && ! data.uenc) { 198 data.uenc = btoa(window.location.href); 199 } 200 form.method = "POST"; 201 form.action = postParams.action; 202 203 Object.keys(postParams.data).map(key => { 204 const field = document.createElement("input"); 205 field.type = 'hidden' 206 field.value = postParams.data[key]; 207 field.name = key; 208 form.appendChild(field); 209 }); 210 211 const form_key = document.createElement("input"); 212 form_key.type = 'hidden'; 213 form_key.value = hyva.getFormKey(); 214 form_key.name="form_key"; 215 form.appendChild(form_key); 216 217 document.body.appendChild(form); 218 219 form.submit(); 220 } 221 222 hyva.getFormKey = function () { 223 let formKey = hyva.getCookie('form_key'); 224 225 if (!formKey) { 226 formKey = generateRandomString(); 227 hyva.setCookie('form_key', formKey); 228 } 229 230 return formKey; 231 } 232 233 hyva.formatPrice = (value, showSign, additionalClassNames = "", showCurrency = false) => { 234 235 if(showCurrency) { 236 var formatter = new Intl.NumberFormat( 237 'en-CH', { 238 style: 'currency', 239 currency: 'CHF', 240 signDisplay: showSign ? "always" : "auto" 241 } 242 ); 243 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 244 formatter.formatToParts(value).map(({type, value}) => { 245 switch (type) { 246 case 'currency': 247 return (additionalClassNames !== "")? '<span id="priceformat" class="' + additionalClassNames + '">CHF</span>' || value 248 : 'CHF' || value; 249 case 'minusSign': 250 return '- '; 251 case 'plusSign': 252 return '+ '; 253 default : 254 return value; 255 } 256 }).reduce((string, part) => string + part) : 257 formatter.format(value); 258 } else return new Intl.NumberFormat('en-CH', { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(value); 259 } 260 261 const formatStr = function (str, nStart) { 262 const args = Array.from(arguments).slice(2); 263 264 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 265 const idx = parseInt(n) - nStart; 266 267 if (args[idx] === null || args[idx] === void 0) { 268 return m; 269 } 270 return p.length % 2 271 ? p.slice(0, -1).replace('%%', '%') + args[idx] 272 : p.replace('%%', '%') + n; 273 }) 274 } 275 276 hyva.str = function (string) { 277 const args = Array.from(arguments); 278 args.splice(1, 0, 1); 279 280 return formatStr.apply(undefined, args); 281 } 282 283 hyva.strf = function () { 284 const args = Array.from(arguments); 285 args.splice(1, 0, 0); 286 287 return formatStr.apply(undefined, args); 288 } 289 290 /** 291 * Take a html string as `content` parameter and 292 * extract an element from the DOM to replace in 293 * the current page under the same selector, 294 * defined by `targetSelector` 295 */ 296 hyva.replaceDomElement = (targetSelector, content) => { 297 // Parse the content and extract the DOM node using the `targetSelector` 298 const parser = new DOMParser(); 299 const doc = parser.parseFromString(content, 'text/html');
300 const contentNode = doc.querySelector(targetSelector); 301 302 // Bail if content or target can't be found 303 if (!contentNode || !document.querySelector(targetSelector)) { 304 return; 305 } 306 307 hyva.activateScripts(contentNode); 308 309 // Replace the old DOM node with the new content 310 document.querySelector(targetSelector).replaceWith(contentNode); 311 312 // Reload customerSectionData and display cookie-messages if present 313 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 314 hyva.initMessages(); 315 } 316 317 hyva.removeScripts = (contentNode) => { 318 const scripts = contentNode.getElementsByTagName('script'); 319 for (let i = 0; i < scripts.length; i++) { 320 scripts[i].parentNode.removeChild(scripts[i]); 321 } 322 const templates = contentNode.getElementsByTagName('template'); 323 for (let i = 0; i < templates.length; i++) { 324 const container = document.createElement('div'); 325 container.innerHTML = templates[i].innerHTML; 326 hyva.removeScripts(container); 327 templates[i].innerHTML = container.innerHTML; 328 } 329 } 330 331 hyva.activateScripts = (contentNode) => { 332 // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM. 333 const scripts = Array.from(contentNode.getElementsByTagName('script')); 334 335 // Iterate over all script tags to duplicate+inject each into the head 336 for (const original of scripts) { 337 const script = document.createElement('script'); 338 script.innerHTML = original.innerHTML; 339 340 // Remove the original (non-executing) script from the contentNode 341 original.parentNode.removeChild(original) 342 343 // Add script to head 344 document.head.appendChild(script); 345 } 346 347 return contentNode; 348 } 349 350 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 351 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 352 353 let currentTrap; 354 355 const focusableElements = (rootElement) => { 356 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 357 return Array.from(rootElement.querySelectorAll(selector)) 358 .filter(el => { 359 return el.style.display !== 'none' 360 && !el.disabled 361 && el.tabIndex !== -1 362 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 363 }) 364 } 365 366 const focusTrap = (e) => { 367 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 368 if (!isTabPressed) return; 369 370 const focusable = focusableElements(currentTrap) 371 const firstFocusableElement = focusable[0] 372 const lastFocusableElement = focusable[focusable.length - 1] 373 374 e.shiftKey 375 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 376 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 377 }; 378 379 hyva.releaseFocus = (rootElement) => { 380 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 381 currentTrap.removeEventListener('keydown', focusTrap) 382 currentTrap = null 383 } 384 } 385 hyva.trapFocus = (rootElement) => { 386 if (!rootElement) return; 387 hyva.releaseFocus() 388 currentTrap = rootElement 389 rootElement.addEventListener('keydown', focusTrap) 390 const firstElement = focusableElements(rootElement)[0] 391 firstElement && firstElement.focus() 392 } 393 394 hyva.safeParseNumber = (rawValue) => { 395 const number = rawValue ? parseFloat(rawValue) : null; 396 397 return Array.isArray(number) || isNaN(number) ? rawValue : number; 398 } 399 400 const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(''); 401 hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => { 402 403 const camelCase = toCamelCase(name);
404 const key = '__hyva_bool_' + name 405 406 return new Proxy(Object.assign( 407 additionalMethods, 408 { 409 [key]: !!value, 410 [name]() {return !!this[key]}, 411 ['!' + name]() {return !this[key]}, 412 ['toggle' + camelCase]() {this[key] = !this[key]}, 413 [`set${camelCase}True`]() {this[key] = true}, 414 [`set${camelCase}False`]() {this[key] = false}, 415 } 416 ), { 417 set(target, prop, value) { 418 return prop === name 419 ? (target[key] = !!value) 420 : Reflect.set(...arguments); 421 } 422 }) 423 } 424 425 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 426 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 427 428 }( window.hyva = window.hyva || {} )); 429</script>
vendor: 1 bytes, line 429
429
430<script> 431 var BASE_URL = 'https://www.vedia.ch/'; 432 var THEME_PATH = 'https://www.vedia.ch/static/version1790063611/frontend/Vedia/hyva/de_CH'; 433 var COOKIE_CONFIG = { 434 "expires": null, 435 "path": "\u002F", 436 "domain": ".www.vedia.ch", 437 "secure": true, 438 "lifetime": "604800", 439 "cookie_restriction_enabled": false }; 440 var CURRENT_STORE_CODE = 've_de'; 441 var CURRENT_WEBSITE_ID = '6'; 442 443 window.hyva = window.hyva || {} 444 445 window.cookie_consent_groups = window.cookie_consent_groups || {} 446 window.cookie_consent_groups['necessary'] = true; 447 448 window.cookie_consent_config = window.cookie_consent_config || {}; 449 window.cookie_consent_config['necessary'] = [].concat( 450 window.cookie_consent_config['necessary'] || [], 451 [ 452 'user_allowed_save_cookie', 453 'form_key', 454 'mage-messages', 455 'private_content_version', 456 'mage-cache-sessid', 457 'last_visited_store', 458 'section_data_ids' 459 ] 460 ); 461 //# sourceURL=hyva-variables.js 462</script>
462 463
464<script > 465 window.getWpGA4Cookie = function(name) { 466 match = document.cookie.match(new RegExp(name + '=([^;]+)')); 467 if (match) return decodeURIComponent(match[1].replace(/\+/g, ' ')) ; 468 }; 469 470 window.ga4AllowServices = false; 471 var isCookieRestrictionModeEnabled = 0, 472 currentWebsiteId = 6, 473 cookieRestrictionName = 'user_allowed_save_cookie'; 474 475 if (isCookieRestrictionModeEnabled) { 476 allowedCookies = window.getWpGA4Cookie(cookieRestrictionName); 477 478 if (allowedCookies !== undefined) { 479 allowedWebsites = JSON.parse(allowedCookies); 480 481 if (allowedWebsites[currentWebsiteId] === 1) { 482 window.ga4AllowServices = true; 483 } 484 } 485 } else { 486 window.ga4AllowServices = true; 487 } 488 </script>
488 489 490 <!-- Google Tag Manager -->
491<script > if (window.ga4AllowServices) {
vendor: 327 bytes, lines 491-495
491(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 492new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 493j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 494'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 495})(window,document,'script','dataLayer','
495GTM-5R9HJ9V
vendor: 3 bytes, line 495
495');
495} 496<!-- End Google Tag Manager --> </script>
496 497 498
498<script > 499 if (window.ga4AllowServices) { 500 window.dataLayer = window.dataLayer || []; 501 var dl4Objects = [{"pageName":"","pageType":"other"}]; 502 for (var i in dl4Objects) { 503 window.dataLayer.push({ecommerce: null}); 504 window.dataLayer.push(dl4Objects[i]); 505 } 506 var wpGA4Cookies = ['wp_ga4_user_id','wp_ga4_customerGroup']; 507 var orderCustomerGroupCookie = 'wp_ga4_customerGroupForOrder'; 508 var regularCustomerGroupCookie = 'wp_ga4_customerGroup'; 509 var orderCustomerGroupValue = window.getWpGA4Cookie(orderCustomerGroupCookie); 510 511 wpGA4Cookies.map(function (cookieName) { 512 var cookieValue = window.getWpGA4Cookie(cookieName); 513 if (cookieValue) { 514 var dl4Object = {}; 515 var cookieKey = cookieName.replace('wp_ga4_', ''); 516 // Use order customerGroup cookie instead of regular customerGroup cookie if it exists 517 if (cookieName === regularCustomerGroupCookie && orderCustomerGroupValue) { 518 dl4Object[cookieKey] = orderCustomerGroupValue; 519 } else { 520 dl4Object[cookieKey] = cookieValue; 521 } 522 window.dataLayer.push(dl4Object); 523 } 524 }); 525 } 526 </script>
526 527
527<script type="text/javascript"> 528 window._bxq = window._bxq || []; 529 530 function bxq(arguments) { 531 _bxq.push(arguments); 532 } 533 </script>
533 534
534<script type="text/javascript"> 535 { 536 var rtuxOptions = { 537 "account": "lehner_vedia", 538 "key": "b0f3e046-6d7c-4701-9128-972bd63df3cb", 539 "endpoint": "https://main-gw1.wi-platform-cloud.com/narrative/lehner_vedia/api/1", 540 "language": "de", 541 "dev": false, 542 "test": false, 543 "isRestricted": false, 544 "isNavigation": false, 545 "isSearch": false, 546 "isProduct": false, 547 "activeId": null, 548 "currencyCode": "CHF", 549 "isRti":false }; 550 window.rtuxOptions = rtuxOptions; 551 (function (i, s, o, g, a, m) { 552 a = s.createElement(o), m = s.getElementsByTagName(o)[0]; 553 a.async = true; 554 a.src = g; 555 m.parentNode.insertBefore(a, m) 556 })(window, document, 'script', "//bx-cdn.com/static/bav2.min.js"); 557 558 bxq(["setAccount", rtuxOptions.account]); 559 } 560</script>
560 561
561<script type="text/javascript"> 562 document.addEventListener("DOMContentLoaded", function () { 563 //search 564 if (window.rtuxOptions.isSearch) { 565 let searchInput; 566 if (document.getElementById('search')) { 567 searchInput = document.getElementById('search').value; 568 } else if (document.querySelectorAll('input[id^="search_"]').length) { 569 searchInput = document.querySelectorAll('input[id^="search_"]')[0].value; 570 } 571 if (searchInput) { 572 /*global bxq */ 573 bxq(['trackSearch', searchInput]); 574 } 575 } 576 577 //product 578 if (window.rtuxOptions.isProduct) { 579 let activeId = window.rtuxOptions.activeId; 580 if (activeId) { 581 /*global bxq */ 582 bxq(['trackProductView', activeId]); 583 } 584 } 585 586 // page 587 bxq(['trackPageView']); 588 589 // navigation 590 if (window.rtuxOptions.isNavigation) { 591 let activeId = window.rtuxOptions.activeId; 592 if (activeId) { 593 /*global bxq */ 594 bxq(['trackCategoryView', activeId]); 595 } 596 } 597 598 // hyva add-to-cart 599 window.fetch = new Proxy(window.fetch, { 600 apply(fetch, that, args) { 601 const result = fetch.apply(that, args); 602 result.then((response) => { 603 let url; 604 if (typeof args[0] === 'string') { 605 url = args[0]; 606 } else if (args[0] instanceof Request) { 607 url = args[0].url; 608 } else { 609 return result; 610 } 611 612 if (!url.includes('cart/add')) { 613 return result; 614 } 615 let params = []; 616 for (let pair of args[1].body.entries()) { 617 params.push(pair); 618 } 619 trackAddToCart(params); 620 }); 621 return result; 622 } 623 }); 624 625 function trackAddToCart(params) { 626 let prices = []; 627 628 if (document.querySelectorAll("span.price[x-html]") !== undefined && 629 document.querySelectorAll("span.price[x-html]")[0] && 630 document.querySelectorAll("span.price[x-html]")[0].innerHTML.search('<del>') < 0) { 631 prices = document.querySelectorAll("span.price[x-html]"); 632 } 633 if (prices.length === 0 && document.querySelectorAll("span[x-html=selectedCombinationPrice]") !== undefined) { 634 prices = document.querySelectorAll("span[x-html=selectedCombinationPrice]"); 635 } 636 if (prices.length === 0 && document.querySelectorAll("span[name=selected_price]") !== undefined) { 637 prices = document.querySelectorAll("span[name=selected_price]"); 638 } 639 if (prices.length === 0 && document.querySelectorAll("span[class=
639price]") !== undefined) { 640 prices = document.querySelectorAll("span[class=price]"); 641 } 642 let product, qty, attributes = [], simpleProducts = []; 643 for (let i = 0, j = 0; i < params.length; i++) { 644 if (params[i][0] === 'product') { 645 product = params[i][1]; 646 } 647 if (params[i][0] === 'qty') { 648 qty = params[i][1]; 649 } 650 // config product 651 if (typeof (confSwatchOptions) !== 'undefined' && params[i][0].search('super_attribute') > -1) { 652 let a = []; 653 a['id'] = parseInt(params[i][0].match(/\d+/)); 654 a['value'] = parseInt(params[i][1].match(/\d+/)); 655 attributes = attributes.concat([a]); 656 } 657 // group config product 658 if (params[i][0].search('super_group') > -1) { 659 if (params[i][1] > 0) { 660 let price, p = []; 661 662 if (typeof (prices[j]) === 'undefined') { 663 price = prices[0]; 664 } else { 665 price = prices[j]; 666 } 667 p['id'] = parseInt(params[i][0].match(/\d+/)); 668 p['qty'] = parseInt(params[i][1].match(/\d+/)); 669 p['price'] = parseFloat(Number(price.innerText.replace(/[^0-9.]+/g, ""))).toFixed(2); 670 simpleProducts = simpleProducts.concat([p]); 671 } 672 j++; 673 } 674 } 675 676 // configurable product 677 if (typeof (confSwatchOptions) !== 'undefined' && attributes.length === 2) { 678 let array1 = filterProducts(confSwatchOptions.jsonConfig.attributes[attributes[0]['id']].options, attributes[0]['value']); 679 let array2 = filterProducts(confSwatchOptions.jsonConfig.attributes[attributes[1]['id']].options, attributes[1]['value']); 680 product = array1.filter(value => array2.includes(value))[0]; 681 } 682 683 // simple product 684 if (simpleProducts.length === 0) { 685 if (prices.length === 2) { 686 prices = [...prices].reverse(); 687 } 688 simpleProducts = [{ 689 'id': product, 690 'qty': qty, 691 'price': parseFloat(Number(prices[0].innerText.replace(/[^0-9.]+/g, ""))).toFixed(2) 692 }]; 693 } 694 695 /*global bxq */ 696 if (simpleProducts.length > 0) { 697 for (let simpleProduct of simpleProducts) { 698 bxq(['trackAddToBasket', 699 simpleProduct['id'], 700 simpleProduct['qty'], 701 simpleProduct['price'], 702 window.rtuxOptions.currencyCode, 703 ]); 704 } 705 } 706 707 function filterProducts(array, value) { 708 for (let a in array) { 709 if (array[a]['id'] == value) { 710 return array[a].products; 711 } 712 } 713 } 714 } 715 }); 716 </script>
716 717
717<script type="speculationrules"> 718{ 719 "tag": "Hyva Theme", 720 "prefetch": [{ 721 "source": "document", 722 "where": { 723 "and": [ 724 { "href_matches": "/*" }, 725 { "not": { 726 "href_matches": ["/customer/*","/search/*","/sales/*","/wishlist/*","/checkout/*","/paypal/*","/newsletter/*","/stores/store/redirect/*"] }}, 727 { "not": { 728 "selector_matches": [".no-preload", ".do-not-prerender", "[download]", "[rel~=nofollow]", "[target]"] 729 }} 730 ] 731 }, 732 "eagerness": "moderate" 733 }] 734} 735</script>
735 736</head> 737<body id="html-body" class="customer-account-login page-layout-1column"> 738<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 738-739
738 739<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
739GTM-5R9HJ9V
vendor: 83 bytes, lines 739-740
739" 740height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
741<!-- End Google Tag Manager (noscript) --> 742
742<script async src="//bx-cdn.com/static/rti.min.js"></script>
742 743<input name="form_key" type="hidden" value="uojecUerWSEOGZi3" /> 744 <noscript> 745 <section 746 class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal" 747 aria-labelledby="messageGlobalNoScriptMessage" 748 > 749 <div class="container text-center"> 750 <p id="messageGlobalNoScriptMessage"> 751 <strong>JavaScript scheint in Ihrem Browser deaktiviert zu sein.</strong> 752 <span> 753 Um unsere Website in bester Weise zu erfahren, aktivieren Sie Javascript in Ihrem Browser. </span> 754 </p> 755 </div> 756 </section> 757 </noscript> 758 759 760
761<script> 762 'use strict'; 763 764 (function () { 765 window.amGdprCookieBar = { 766 isEnabled: 1, 767 768 /** 769 * @public 770 * @returns {int} 771 */ 772 getIsEnabled() { 773 return this.isEnabled; 774 } 775 } 776 })(); 777</script>
777 778
779<script data-cfasync="false"> 780 window.amastyCookieManager = window.amastyCookieManager || {}; 781</script>
781 782 783<div x-data="initAmastyCookieBar" 784 x-bind="eventListeners" 785 x-cloak 786 id="am-cookie-bar" 787 class=" w-full fixed bottom-0 z-40" 788 > 789 <dialog 790 class="am-cookie-classic flex w-full p-6 relative bottom-0 z-50 inset-y-0" 791 data-dialog-ref-name="am-cookie-bar" 792 closeby="any" 793 aria-label="Cookie Bar" 794 x-bind="dialogConfig" 795 x-htmldialog.modeless="hide" 796 x-ref="am-cookie-bar" 797 > 798<div class="w-full lg:w-[80%] flex justify-between items-center flex-wrap"> 799 <div class="flex w-full lg:w-2/3"> 800 <div x-data="privacyPolicyModal" 801 x-cloak> 802 <p class="text-sm text-ambar-policy-text"> 803 Diese Webseite nutzt Cookies und andere Technologien, um die Benutzerfreundlichkeit zu verbessern 804 und die Leistung der Webseite und unserer Werbemassnahmen zu messen. Weitere Informationen und Ihre Optionen 805 entnehmen Sie bitte unserer 806 <span aria-label="Datenschutzerklärung" x-on:click.prevent="openModal" 807 class="text-sm text-primary hover:text-primary-darker cursor-pointer transition text-right"> 808 Datenschutzerklärung. 809 </span> 810 </p> 811 <div x-ref="backdrop" 812 class="opacity-0 fixed top-0 left-0 flex items-end md:items-center justify-center w-full h-full md:p-10 z-50 bg-black bg-opacity-60 transition cursor-pointer" 813 :class="getOpenOpacityClasses" 814 x-cloak> 815 <div class="relative h-98 md:h-full w-full md:w-200 overflow-y-auto py-6 px-5 md:px-12 lg:px-28 bg-white shadow-md text-left rounded-tl-2xl rounded-tr-2xl md:rounded-none cursor-auto"> 816 <button x-on:click.prevent="closeModal" 817 class="absolute top-3 right-3 flex items-center text-curre justify-center text-xl w-11 h-11 rounded-full bg-primary text-white leadinone"> 818 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 15" class="w-3.5 h-3.5 text-current" role="img"><path d="M6.26 7.461.248 1.451A.85.85 0 0 1 1.451.249l6.01 6.01 6.01-6.01a.85.85 0 0 1 1.203 1.202l-6.01 6.01 6.01 6.01a.85.85 0 0 1-1.202 1.203l-6.01-6.01-6.011 6.01a.85.85 0 0 1-1.202-1.202l6.01-6.01z" fill="currentColor" fill-rule="evenodd"/><title>close</title></svg> 819 820 </button> 821 <div class="l-cms agb"> 822 823 <section class="-mx-4 md:-ml-5 pb-4"> 824 <div class="px-4 pt-4"> 825 <h2 class="mb-5">Datenschutzerklärung</h2> 826 <strong>Allgemeiner Hinweis</strong> 827 <p class="mt-2"> Gestützt auf Artikel 13 der schweizerischen Bundesverfassung und den datenschutzrechtlichen 828 Bestimmungen 829 des Bundes (Datenschutzgesetz, DSG) hat jede Person Anspruch auf Schutz ihrer Privatsphäre sowie auf 830 Schutz vor Missbrauch 831 ihrer persönlichen Daten. Die Betreiber dieser Seiten nehmen den Schutz Ihrer persönlichen Daten sehr 832 ernst. 833 Wir behandeln Ihre personenbezogenen Daten vertraulich und entsprechend der gesetzlichen 834 Datenschutzvorschriften sowie dieser Datenschutzerklärung. 835 </p> 836 <p class="mt-2"> 837 In Zusammenarbeit mit unseren Hosting-Providern bemühen wir uns, die Datenbanken so gut wie möglich vor 838 fremden Zugriffen, Verlusten, Missbrauch oder vor Fälschung zu schützen. 839 </p> 840 <p class="mt-2"> 841 Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) 842 Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist 843 nicht möglich. 844 </p> 845 <p class="mt-2 mb-3"> 846 Durch die Nutzung dieser Website erklären Sie sich mit der Erhebung, Verarbeitung und Nutzung von Daten 847 gemäss der nachfolgenden Beschreibung einverstanden. Diese Website kann grundsätzlich ohne Registrierung 848 besucht werden. 849 Dabei werden Daten wie beispielsweise aufgerufene Seiten bzw. Namen der abgerufenen Datei, Datum und 850 Uhrzeit zu statistischen Zwecken auf dem Server gespeichert, ohne dass diese Daten unmittelbar auf Ihre 851 Person bezogen werden. 852 Personenbezogene Daten, insbesondere Name, Adresse oder E-Mail-Adresse werden soweit möglich auf 853 freiwilliger Basis erhoben. Ohne Ihre Einwilligung erfolgt keine Weitergabe der Daten an Dritte. 854 </p> 855 <strong>Kontakt</strong> 856 <p class="mt-2"> 857 Bei Fragen zu dieser Datenschutzerklärung oder der Bearbeitung Ihrer Personen
857daten können Sie uns gerne 858 wie folgt kontaktieren: 859 </p> 860 <div class="mt-3"> 861 <strong>Lehner Versand AG</strong> 862 <p class="mt-2">Postfach</p> 863 <p class="mt-3">6210 Sursee</p> 864 865 <a href="/cdn-cgi/l/email-protection#e98d889d8c879a8a819c9d93a9858c81878c9bc49f8c9b9a88878dc78a81"><span class="__cf_email__" data-cfemail="9bfffaeffef5e8f8f3eeefe1dbf7fef3f5fee9b6edfee9e8faf5ffb5f8f3">[email protected]</span></a> 866 867 </div> 868 <div class="my-4"> 869 <div class="flex items-center"> 870 <img class="h-fit rounded-sm mr-2" 871 src=https://www.vedia.ch/media/static/cms/impressum/DE.png 872 alt="de flag"> 873 <p>0848 840 600 (deutsch)</p> 874 </div> 875 <div class="mt-2 flex items-center "> 876 <img class="h-fit rounded-sm mr-2" 877 src=https://www.vedia.ch/media/static/cms/impressum/FR.png 878 alt="fr flag"> 879 <p>0848 840 601 (französisch)</p> 880 </div> 881 <div class="mt-2 flex items-center "> 882 <img class="h-fit rounded-sm mr-2" 883 src=https://www.vedia.ch/media/static/cms/impressum/IT.png 884 alt="it flag"> 885 <p>0848 840 602 (italienisch)</p> 886 </div> 887 </div> 888 889 <strong>Ihre Rechte</strong> 890 891 892 </div> 893 894 <div data-cms-accordion 895 class="mt-4 sm:mt-auto -mx-4 md:mx-auto px-4 pt-4 accordion-wrapper transition-colors" 896 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 897 <div class="mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 898 data-cms-accordion-toggle> 899 <p> Sofern die gesetzlichen Voraussetzungen erfüllt sind, haben Sie als von einer Datenbearbeitung 900 betroffene Person die folgenden Rechte: </p> 901 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 902 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 903 904 </span> 905 </div> 906 <div class="mt-auto sm:mt-3 max-h-0 sm:max-h-full overflow-hidden transition-all" 907 x-ref="container1" data-cms-accordion-content 908 x-cloak> 909 <ul class="list -bullet-p mt-4"> 910 <li class="mt-4"> 911 <p class="text-base">Recht auf Auskunft: Sie haben das Recht, jederzeit unentgeltlich Einsicht 912 in Ihre bei uns gespeicherten personenbezogenen Daten zu verlangen, wenn wir diese 913 bearbeiten. 914 So haben Sie die Möglichkeit, zu prüfen, welche personenbezogene Daten wir über Sie 915 bearbeiten, und dass wir diese gemäss geltenden Datenschutz-bestimmungen verwenden. </p> 916 </li> 917 <li class="mt-4"> 918 <p class="text-base"> Recht auf Berichtigung: Sie haben das Recht, unrichtige oder 919 unvollständige personenbezogene Daten berichtigen zu lassen und über die Berichtigung 920 informiert zu werden. 921 Wir informieren in diesem Fall die Empfänger der betroffenen Daten über die 922 vorgenommenen Anpassungen, sofern dies nicht unmöglich oder mit unverhältnismässigem 923 Aufwand verbunden ist.</p> 924 </li> 925 <li class="mt-4"> 926 <p class="text-base">Recht auf Löschung: Sie haben das Recht, dass Ihre personenbezogenen 927 Daten unter bestimmten Umständen gelöscht werden. Im Einzelfall, insbesondere bei 928 gesetzlichen Aufbewahrungspflichten, 929 kann das Recht auf Löschung ausgeschlossen sein. In diesem Fall kann bei gegebenen 930 Voraussetzungen an die Stelle der Löschung eine Sperrung der Daten treten.</p> 931 </li> 932 <li class="mt-4"> 933 <p class="text-base">Recht auf Einschränkung der Bearbeitung: Sie haben das Recht, zu 934 verlangen, dass die Bearbeitung Ihrer personenbezogenen Daten eingeschränkt wird. </p> 935 </li> 936 <li class="mt-4"> 937 <p class="text-base">Recht auf Datenübertragung: Sie haben das Recht, von uns die 938 personenbezogenen Daten, welche Sie uns bereitgestellt haben, unentgeltlich in einem 939 lesbaren Format zu erhalten.</p> 940 </li> 941 <li class="mt-4 mb-4 sm:mb-0"> 942 <p class="text-base">Widerspruchsrecht: Sie können Datenverarbeitungen jederzeit 943 widersprechen, insbesondere für die Datenverarbeitung im Zusammenhang mit Direktwerbung 944 (z.B. Werbe-E-Mails).</p> 945 </li> 946 <li class="mt-4 mb-4 sm:mb-0"> 947 <p class="text-base">Widerrufsrecht: Sie haben grundsätzlich das Recht, eine erteilte 948 Einwilligung jederzeit zu widerrufen. In der Vergangenheit auf Ihre Einwilligung 949 gestützte Bearbeitungstätigkeiten werden durch 950 Ihren Widerruf allerdings nicht unrechtmässig.</p> 951 </li> 952 </ul> 953 </div> 954 </div> 955 <p class="px-4 mt-2"> Zur Ausübung dieser Rechte senden Sie uns bitte eine E-Mail an folgende Adresse: <a href="/cdn-cgi/l/email-protection#f1959085949f82929984858bb19d94999f9483dc87948382909f95df9299"><span class="__cf_email__" data-cfemail="0d696c7968637e6e657879774d61686563687f207b687f7e6c6369236e65">[email protected]</span></a></p> 956 957 958 <div class="px-4 pt-4"> 959 <strong>Datenschutzerklärung für Cookies</strong> 960 <p class="mt-2"> Diese Website verwendet Cookies. Cookies sind Textdateien, die Daten von besuchten Websites 961 oder Domains 962 enthalten und von einem Browser auf dem Computer des Benutzers gespeichert werden. Ein Cookie dient in 963 erster Linie dazu, die Informationen über einen Benutzer während oder nach 964 seinem Besuch innerhalb eines Onlineangebotes zu speichern. Zu den gespeicherten Angaben können z.B. die 965 Spracheinstellungen auf einer Webseite, der Loginstatus, ein Warenkorb oder die Stelle, an der ein Video 966 geschaut wurde, gehören. Zu dem Begriff der Cookies zählen wir ferner andere 967 Technologien, die die gleichen Funktionen wie Cookies erfüllen (z.B. wenn Angaben der Nutzer anhand 968 pseudonymer Onlinekennzeichnungen gespeichert werden, auch als "Nutzer-IDs" bezeichnet) </p> 969 </div> 970 971 <div data-cms-accordion 972 class="mt-4 sm:mt-auto -mx-4 md:mx-auto p-4 accordion-wrapper transition-colors" 973 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 974 <div class="mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 975 data-cms-accordion-toggle> 976 <p> Die folgenden Cookie-Typen und Funktionen werden 977 unterschieden: </p>
978 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 979 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 980 981 </span> 982 </div> 983 <div class="mt-auto sm:mt-3 max-h-0 sm:max-h-full overflow-hidden transition-all" 984 x-ref="container1" data-cms-accordion-content 985 x-cloak> 986 <ul class="list -bullet-p mt-4"> 987 <li class="mt-4"> 988 <p class="text-base">Temporäre Cookies (auch: Session- oder Sitzungs-Cookies): Temporäre 989 Cookies werden 990 spätestens gelöscht, nachdem ein Nutzer ein Online-Angebot verlassen und seinen 991 Browser geschlossen hat.</p> 992 </li> 993 <li class="mt-4"> 994 <p class="text-base">Permanente Cookies: Permanente Cookies bleiben auch nach dem 995 Schliessen des Browsers 996 gespeichert. So kann beispielsweise der Login-Status gespeichert oder bevorzugte 997 Inhalte direkt angezeigt werden, wenn der Nutzer eine Website erneut besucht. 998 Ebenso können die Interessen von Nutzern, die zur Reichweitenmessung oder zu 999 Marketingzwecken verwendet werden, in einem solchen Cookie gespeichert werden.</p> 1000 </li> 1001 <li class="mt-4"> 1002 <p class="text-base">First-Party-Cookies: First-Party-Cookies werden von uns selbst 1003 gesetzt.</p> 1004 </li> 1005 <li class="mt-4"> 1006 <p class="text-base">Third-Party-Cookies (auch: Drittanbieter-Cookies): 1007 Drittanbieter-Cookies werden 1008 hauptsächlich von Werbetreibenden (sog. Dritten) verwendet, um Benutzerinformationen 1009 zu verarbeiten.</p> 1010 </li> 1011 <li class="mt-4"> 1012 <p class="text-base">Notwendige (auch: essenzielle oder unbedingt erforderliche) Cookies: 1013 Cookies können 1014 zum einen für den Betrieb einer Webseite unbedingt erforderlich sein (z.B. um Logins 1015 oder andere Nutzereingaben zu speichern oder aus Gründen der Sicherheit).</p> 1016 </li> 1017 <li class="mt-4 mb-4 sm:mb-0"> 1018 <p class="text-base">Statistik-, Marketing- und Personalisierungs-Cookies: Ferner werden 1019 Cookies im 1020 Regelfall auch im Rahmen der Reichweitenmessung eingesetzt sowie dann, wenn die 1021 Interessen eines Nutzers oder sein Verhalten (z.B. Betrachten bestimmter Inhalte, 1022 Nutzen von Funktionen etc.) auf 1023 einzelnen Webseiten in einem Nutzerprofil gespeichert werden. Solche Profile dienen 1024 dazu, den Nutzern z.B. Inhalte anzuzeigen, die ihren potenziellen Interessen 1025 entsprechen. 1026 Dieses Verfahren wird auch als "Tracking", d.h., Nachverfolgung der potenziellen 1027 Interessen der Nutzer bezeichnet. Soweit wir Cookies oder "Tracking"-Technologien 1028 einsetzen, 1029 informieren wir Sie gesondert in unserer Datenschutzerklärung oder im Rahmen der 1030 Einholung einer Einwilligung.profitieren von professioneller Beratung</p> 1031 </li> 1032 </ul> 1033 </div> 1034 </div> 1035 <div class="px-4 pt-4"> 1036 <p>Hinweise zu Rechtsgrundlagen: Auf welcher Rechtsgrundlage wir Ihre personenbezogenen Daten 1037 mithilfe von 1038 Cookies verarbeiten, hängt davon ab, ob wir Sie um eine Einwilligung bitten. 1039 Falls dies zutrifft und Sie in die Nutzung von Cookies einwilligen, ist die Rechtsgrundlage der 1040 Verarbeitung Ihrer Daten die erklärte Einwilligung. Andernfalls werden die mithilfe von Cookies 1041 verarbeiteten 1042 Daten auf Grundlage unserer berechtigten Interessen (z.B. an einem betriebswirtsc
1042haftlichen Betrieb 1043 unseres Onlineangebotes und dessen Verbesserung) verarbeitet oder, wenn der Einsatz von Cookies 1044 erforderlich ist, um unsere vertraglichen Verpflichtungen zu erfüllen. </p> 1045 1046 <p class="mt-3">Speicherdauer: Sofern wir Ihnen keine expliziten Angaben zur Speicherdauer von permanenten 1047 Cookies 1048 mitteilen (z. B. im Rahmen eines sog. Cookie-Opt-Ins), gehen Sie bitte davon aus, dass die Speicherdauer 1049 bis zu zwei Jahre betragen kann. </p> 1050 1051 <p class="my-3">Allgemeine Hinweise zum Widerruf und Widerspruch (Opt-Out): Abhängig davon, ob die 1052 Verarbeitung auf 1053 Grundlage einer Einwilligung oder gesetzlichen Erlaubnis erfolgt, haben Sie jederzeit die Möglichkeit, 1054 eine erteilte Einwilligung zu widerrufen oder der Verarbeitung Ihrer Daten durch Cookie-Technologien zu 1055 widersprechen (zusammenfassend als "Opt-Out" bezeichnet). Sie können Ihren Widerspruch zunächst mittels 1056 der Einstellungen Ihres Browsers erklären, z.B., indem Sie die Nutzung von Cookies deaktivieren (wobei 1057 hierdurch auch die Funktionsfähigkeit unseres Onlineangebotes eingeschränkt werden kann). Ein 1058 Widerspruch gegen den Einsatz von Cookies zu Zwecken des Onlinemarketings kann auch mittels einer 1059 Vielzahl von Diensten, vor allem im Fall des Trackings, über die Webseiten https://optout.aboutads.info 1060 und https://www.youronlinechoices.com/ erklärt werden. Daneben können Sie weitere Widerspruchshinweise 1061 im Rahmen der Angaben zu den eingesetzten Dienstleistern und Cookies erhalten.</p> 1062 1063 <strong>Datenschutzerklärung für SSL-/TLS-Verschlüsselung</strong> 1064 <p class="my-3">Diese Website nutzt aus Gründen der Sicherheit und zum Schutz der Ãbertragung vertraulicher 1065 Inhalte, wie 1066 zum Beispiel der Anfragen, die Sie an uns als Seitenbetreiber senden, eine SSL-/TLS-Verschlüsselung. 1067 Eine verschlüsselte Verbindung erkennen Sie daran, dass die Adresszeile des Browsers von "http://" auf 1068 "https://" wechselt und an dem Schloss-Symbol in Ihrer Browserzeile. 1069 1070 Wenn die SSL bzw. TLS Verschlüsselung aktiviert ist, können die Daten, die Sie an uns übermitteln, nicht 1071 von Dritten mitgelesen werden. </p> 1072 1073 1074 <strong>Zahlungsabwicklung Online</strong> 1075 <p class="my-3">Wenn Sie auf unserer Website kostenpflichtig Leistungen oder Produkte erwerben, ist je nach Produkt oder Leistung und 1076 gewünschter Zahlungsart die Angabe weiterer Daten erforderlich, wie z.B. Ihre Kreditkarteninformationen oder das Login bei Ihrem 1077 Zahlungsdienstleister. Diese Informationen sowie der Umstand, dass Sie bei uns eine Leistung zum betreffenden Betrag und Zeitpunkt 1078 erworben haben, werden an die jeweiligen Zahlungsdienstleister (z.B. Anbieter von Zahlungslösungen, Kreditkarteherausgeber und 1079 Kreditkarten-Acquirer) weitergeleitet. Beachten Sie dabei stets auch die Informationen des jeweiligen Unternehmens, insbesondere die 1080 Datenschutzerklärung und die Allgemeinen Geschäftsbedingungen. Zur Vermeidung von Zahlungsfällen kann ferner eine Ãbermittlung der 1081 erforderlichen Daten, insbesondere Ihrer Personalien, an eine Auskunftei zur automatisierten Einschätzung Ihrer Bonität erfolgen. In 1082 diesem Rahmen kann Ihnen die Auskunftei einen sogenannten Score-Wert zuordnen. Es handelt sich dabei um einen Schätz-wert über das 1083 künftige Risiko eines Zahlungsausfalls, z.B. anhand einer Prozentangabe. Der Wert wird unter Anwendung von 1084 mathematisch-statistischen Verfahren und unter Einbezug von Daten der Auskunftei aus anderen Quellen erhoben. Wir behalten uns vor, 1085 entsprechend der erhaltenen Auskunft, Ihnen die Zahlungsart "Rechnung" nicht anzubieten. </p> 1086 1087 1088 <strong>
1088Datenschutzerklärung für Kontaktformular</strong> 1089 <p class="my-3">Wenn Sie uns per Kontaktformular Anfragen zukommen lassen, werden Ihre Angaben aus dem 1090 Anfrageformular 1091 inklusive der von Ihnen dort angegebenen Kontaktdaten zwecks Bearbeitung 1092 der Anfrage und für den Fall von Anschlussfragen bei uns gespeichert. Diese Daten geben wir nicht ohne 1093 Ihre Einwilligung weiter.</p> 1094 1095 <strong>Datenschutzerklärung für Newsletterdaten</strong> 1096 <p class="mt-3">Wenn Sie den auf dieser Website angebotenen Newsletter beziehen möchten, benötigen wir von 1097 Ihnen eine 1098 E-Mail-Adresse sowie Informationen, welche uns die Ãberprüfung gestatten, dass Sie der Inhaber der 1099 angegebenen E-Mail-Adresse 1100 sind und mit dem Empfang des Newsletters einverstanden sind. Weitere Daten werden nicht erhoben. Diese 1101 Daten verwenden wir ausschliesslich für den Versand der angeforderten Informationen und geben sie nicht 1102 an Dritte weiter.</p> 1103 1104 <p class="my-3">Die erteilte Einwilligung zur Speicherung der Daten, der E-Mail-Adresse sowie deren Nutzung 1105 zum Versand 1106 des Newsletters können Sie jederzeit widerrufen, etwa über den «Newsletter abbestellen» Link im 1107 Newsletter.</p> 1108 1109 <strong>Datenschutzerklärung für Widerspruch Werbe-Mails</strong> 1110 <p class="mt-3">Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten zur 1111 Ãbersendung von nicht 1112 ausdrücklich angeforderter Werbung und Informationsmaterialien wird hiermit widersprochen. 1113 Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der unverlangten 1114 Zusendung von Werbeinformationen, etwa durch Spam-E-Mails, vor.</p> 1115 </div> 1116 </section> 1117 1118 <section data-cms-accordion 1119 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-gray-300 bg-gray-50" 1120 data-selected-class="bg-gray-50" data-unselected-class="bg-primary-lighter sm:bg-gray-50" data-cms-accordion-class="accordionClass"> 1121 <div class="p-0 sm:p-4"> 1122 <div class="accordion-wrapper"> 1123 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1124 data-cms-accordion-toggle> 1125 <h3>Verwendung von Google</h3> 1126 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1127 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1128 1129 </span> 1130 </div> 1131 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1132 x-ref="container1" data-cms-accordion-content 1133 x-cloak> 1134 <strong class="px-4 sm:px-0">Google Maps</strong> 1135 <p class="px-4 sm:px-0 my-3 pt-4 sm:pt-0"> 1136 Diese Website nutzt das Angebot von Google Maps. Dadurch können wir Ihnen interaktive Karten 1137 direkt in der Website anzeigen und ermöglichen Ihnen die komfortable Nutzung der 1138 Karten-Funktion. 1139 Durch den Besuch auf der Website erhält Google die Information, dass Sie die entsprechende 1140 Unterseite unserer Website aufgerufen haben. Dies erfolgt unabhängig davon, ob Google ein 1141 Nutzerkonto bereitstellt, 1142 über das Sie eingeloggt sind, oder ob kein Nutzerkonto besteht. Wenn Sie bei Google eingeloggt 1143 sind, werden Ihre Daten direkt Ihrem Konto zugeordnet. Wenn Sie die Zuordnung mit Ihrem Profil 1144 bei Google nicht wünschen, 1145 müssen Sie sich vor Aktivierung des Buttons ausloggen. Google speichert Ihre Daten als 1146 Nutzungsprofile und nutzt sie für Zwecke der Werbung, Marktforschung und/oder bedarfsgerechten 1147 Gestaltung seiner Website. 1148 Eine solche Auswertung erfolgt insbesondere (selbst für nicht eingeloggte Nutzer) zur Erbringung 1149 von bedarfsgerechter Werbung und um andere Nutzer des sozialen Netzwerks über Ihre Aktivitäten 1150 auf unserer Website zu informieren. 1151 Ihnen steht ein Widerspruchsrecht zu gegen die Bildung dieser Nutzerprofile, wobei Sie sich zur 1152 Ausübung dessen an Google richten müssen. Weitere Informationen zu Zweck und Umfang der 1153 Datenerhebung und ihrer Verarbeitung durch 1154 Google erhalten Sie neben weiteren Informationen zu Ihren diesbezüglichen Rechten und 1155 Einstellungsmöglichkeiten zum Schutze Ihrer Privatsphäre unter: 1156 www.google.de/intl/de/policies/privacy. 1157 </p> 1158 <strong class="px-4 sm:px-0">Google Ads</strong> 1159 <p class="px-4 sm:px-0 mt-3">Diese Website nutzt das Google Conversion-Tracking. Sind Sie über eine 1160 von Google 1161 geschaltete 1162 Anzeige auf unsere Website gelangt, wird von Google Ads ein Cookie auf Ihrem Rechner gesetzt. 1163 Das Cookie für Conversion-Tracking 1164 wird gesetzt, wenn ein Nutzer auf eine von Google geschaltete Anzeige klickt. Diese Cookies 1165 verlieren nach 30 Tagen ihre Gültigkeit und dienen nicht der persönlichen Identifizierung. 1166 Besucht der Nutzer bestimmte Seiten unserer Website und 1167 das Cookie ist noch nicht abgelaufen, können wir und Google erkennen, dass der Nutzer auf die 1168 Anzeige geklickt hat und zu dieser Seite weitergeleitet wurde. Jeder Google Ads-Kunde erhält ein 1169 anderes Cookie. 1170 Cookies können somit nicht über die Websites von Ads-Kunden nachverfolgt werden. Die mithilfe 1171 des Conversion-Cookies eingeholten Informationen dienen dazu, Conversion-Statistiken für 1172 Ads-Kunden zu erstellen, die sich für 1173 Conversion-Tracking entschieden haben. Die Kunden erfahren die Gesamtanzahl der Nutzer, die auf 1174 ihre Anzeige geklickt haben und zu einer mit einem Conversion-Tracking-Tag versehenen Seite 1175 weitergeleitet wurden. 1176 Sie erhalten jedoch keine Informationen, mit denen sich Nutzer persönlich identifizieren lassen. 1177 </p> 1178 <p class="px-4 sm:px-0 mt-3">Möchten Sie nicht am Tracking teilnehmen, können Sie das hierfür 1179 erforderliche 1180 Setzen eines 1181 Cookies ablehnen â etwa per Browser-Einstellung, die das automatische Setzen von Cookies 1182 generell deaktiviert oder Ihren 1183 Browser so einstellen, dass Cookies von der Domain «googleleadservices.com» blockiert werden. 1184 </p> 1185 <p class="px-4 sm:px-0 mt-3">Bitte beachten Sie, dass Sie die Opt-out-Cookies nicht löschen dürfen, 1186 solange Sie 1187 keine 1188 Aufzeichnung von Messdaten wünschen. Haben Sie alle Ihre Cookies im Browser gelöscht, müssen Sie 1189 das jeweilige Opt-out Cookie erneut setzen.</p> 1190 <p class="px-4 sm:px-0 my-3">Die Webseite nutzt "erweiterte Conversions" von Google Ads. Dazu werden 1191 verschlüsselte 1192 Nutzerdaten an Google übertragen und mit angemeldeten Google-Konten abgeglichen, um Conversions 1193 zuzuordnen.</p> 1194 <strong class="px-4 sm:px-0">Google Analytics</strong> 1195 <p class="px-4 sm:px-0 mt-3">
1195Diese Website benutzt Google Analytics, einen Webanalysedienst der 1196 Google Ireland 1197 Limited. Wenn 1198 der Verantwortliche für die Datenverarbeitung auf dieser Website ausserhalb des Europäischen 1199 Wirtschaftsraumes oder der Schweiz sitzt, dann erfolgt die Google Analytics Datenverarbeitung 1200 durch Google LLC. Google LLC und Google Ireland Limited werden nachfolgend «Google» genannt.</p> 1201 <p class="px-4 sm:px-0 mt-3">Ãber die gewonnenen Statistiken können wir unser Angebot verbessern und 1202 für Sie als 1203 Nutzer 1204 interessanter ausgestalten. Diese Website verwendet Google Analytics zudem für eine 1205 geräteübergreifende Analyse von Besucherströmen, 1206 die über eine User-ID durchgeführt wird. Sofern Sie über ein Google-Benutzerkonto verfügen, 1207 können Sie in den dortigen Einstellungen unter «Meine Daten», «persönliche Daten» die 1208 geräteübergreifende Analyse Ihrer Nutzung deaktivieren.</p> 1209 <p class="px-4 sm:px-0 mt-3">Rechtsgrundlage für die Nutzung von Google Analytics ist Art. 6 Abs. 1 1210 S. 1 lit. f 1211 DS-GVO. Die im 1212 Rahmen von Google Analytics von Ihrem Browser übermittelte IP-Adresse wird nicht mit anderen 1213 Daten von Google zusammengeführt. Wir weisen Sie darauf hin, dass auf dieser 1214 Website Google Analytics um den Code «_anonymizeIp();» erweitert wurde, um eine anonymisierte 1215 Erfassung von IP-Adressen zu gewährleisten. 1216 Dadurch werden IP-Adressen gekürzt weiterverarbeitet, eine Personenbeziehbarkeit kann damit 1217 ausgeschlossen werden. Soweit den über Sie erhobenen Daten ein Personenbezug zukommt, wird 1218 dieser also sofort ausgeschlossen und 1219 die personenbezogenen Daten damit umgehend gelöscht.</p> 1220 <p class="px-4 sm:px-0 mt-3">Nur in Ausnahmefällen wird die volle IP-Adresse an einen Server von 1221 Google in den 1222 USA übertragen 1223 und dort gekürzt. Im Auftrag des Betreibers dieser Website wird Google diese Informationen 1224 benutzen, um Ihre Nutzung der Website auszuwerten, 1225 um Reports über die Websitenaktivitäten zusammenzustellen und um weitere mit der Websitennutzung 1226 und der Internetnutzung verbundene Dienstleistungen gegenüber dem Websitenbetreiber zu 1227 erbringen.</p> 1228 <p class="px-4 sm:px-0 mt-3">Google Analytics verwendet Cookies. Die durch das Cookie erzeugten 1229 Informationen 1230 über Ihre 1231 Benutzung dieser Website werden in der Regel an einen Server von Google in den USA übertragen 1232 und dort gespeichert. Sie können die Speicherung der Cookies durch eine entsprechende 1233 Einstellung Ihrer Browser-Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in 1234 diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden 1235 nutzen können. 1236 Sie können darüber hinaus die Erfassung der durch das Cookie erzeugten und auf Ihre Nutzung der 1237 Website bezogenen Daten (inkl. Ihrer IP-Adresse) an Google sowie die Verarbeitung dieser Daten 1238 durch 1239 Google verhindern, indem Sie das unter dem folgenden Link verfügbare Browser-Plugin 1240 herunterladen und installieren: Google Analytics deaktivieren.</p> 1241 <p class="px-4 sm:px-0 my-3">Ausserdem können Sie die Nutzung von Google Analytics auch verhindern, 1242 indem Sie auf 1243 diesen Link 1244 klicken: Google Analytics deaktivieren. Hierdurch wird ein sog. opt-out Cookie auf Ihrem 1245 Datenträger gespeichert, der die Verarbeitung personenbezogener Daten 1246 durch Google Analytics verhindert. Bitte beachten Sie, dass bei einem Löschen sämtlicher Cookies 1247 auf Ihrem Endgerät auch diese Opt-out-Cookies gelöscht werden, d.h., dass Sie erneut die 1248 Opt-out-Cookies setzen müssen, wenn Sie weiterhin diese 1249 Form der Datenerhebung verhindern wollen. Die Opt-out-Cookies sind pro Browser und 1250 Rechner/Endgerät gesetzt und müssen daher für jeden Browser, Rechner oder anderes Endgerät 1251 gesondert aktiviert werden.</p> 1252 <strong class="px-4 sm:px-0">Google Web Fonts</strong> 1253 <p class="px-4 sm:px-0 my-3">Diese Seite nutzt zur einheitlichen Darstellung von Schriftarten 1254 sogenannte Web 1255 Fonts, die von 1256 der Google Ireland Limited, Gordon House, 4 Barrow St, Dublin, D04 E5W5, Irland (âGoogleâ) 1257 bereitgestellt werden. 1258 Beim Aufruf einer Seite lädt Ihr Browser die benötigten Web Fonts in Ihren Browser-Cache, um 1259 Texte und Schriftarten korrekt anzuzeigen. Zu diesem Zweck muss der von Ihnen verwendete Browser 1260 Verbindung zu den Servern
1261 von Google aufnehmen. Hierbei kann es auch zu einer Ãbermittlung von personenbezogenen Daten an 1262 die Server der Google LLC. in den USA kommen. Auf diese Weise erlangt Google Kenntnis darüber, 1263 dass über 1264 Ihre IP-Adresse unsere Website aufgerufen wurde. Die Nutzung von Google Web Fonts erfolgt im 1265 Interesse einer einheitlichen und ansprechenden Darstellung unserer Online-Angebote. 1266 Wenn Ihr Browser Web Fonts nicht unterstützt, wird eine Standardschrift von Ihrem Computer 1267 genutzt. Weitere Informationen zu Google Web Fonts finden Sie unter 1268 https://developers.google.com/fonts/faq und in der Datenschutzerklärung von 1269 Google: https://www.google.com/policies/privacy/.</p> 1270 <strong class="px-4 sm:px-0">Google Kundenrezensionen</strong> 1271 <p class="px-4 sm:px-0 my-3 mb-4 sm:mb-0">Wir arbeiten mit Google im Rahmen des Programms âGoogle 1272 Kundenrezensionenâ zusammen. 1273 Der Anbieter 1274 ist Google Ireland Limited, Gordon House, 4 Barrow St, Dublin, D04 E5W5, Irland (âGoogleâ). 1275 Dieses Programm gibt uns die Möglichkeit, Kundenrezensionen 1276 von Nutzern unserer Website einzuholen. Hierbei werden Sie nach einem Einkauf auf unserer 1277 Website gefragt, ob Sie an einer E-Mail-Umfrage von Google teilnehmen möchten. Wenn Sie Ihre 1278 Einwilligung erteilen, übermitteln wir Ihre E-Mail-Adresse an Google. 1279 Sie erhalten eine E-Mail von Google Kundenrezensionen, in der Sie gebeten werden, die 1280 Kauferfahrung auf unserer Website zu bewerten. Die von Ihnen abgegebene Bewertung wird 1281 anschliessend mit unseren anderen 1282 Bewertungen zusammengefasst und in unserem Logo Google Kundenrezensionen sowie in unserem 1283 Merchant Center-Dashboard angezeigt. Ausserdem wird Ihre Bewertung für Google 1284 Verkäuferbewertungen genutzt. Im Rahmen der Nutzung von 1285 Google Kundenrezensionen kann es auch zu einer Ãbermittlung von personenbezogenen Daten an die 1286 Server der Google LLC. in den USA kommen.</p> 1287 <strong class="px-4 sm:px-0 mt-3 block">Google Tag Manager</strong> 1288 <p class="px-4 sm:px-0 my-3 mb-4 sm:mb-0">Diese Webseite verwendet den Google Tag Manager. Durch 1289 diesen Dienst können Website-Tags über eine Oberfläche verwaltet werden. Der Google Tool Manager 1290 implementiert lediglich Tags. 1291 Das bedeutet: Es werden keine Cookies eingesetzt und es werden keine personenbezogenen Daten 1292 erfasst. Der Google Tool Manager löst andere Tags aus, die wiederum ggf. Daten erfassen. 1293 Jedoch greift der Google Tag Manager nicht auf diese Daten zu. 1294 Nutzungsrichtlinien: https://www.google.com/intl/de/tagmanager/use-policy.html</p> 1295 </div> 1296 </div> 1297 </div> 1298 </section> 1299 1300 <section data-cms-accordion 1301 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1302 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 1303 <div class="p-0 sm:p-4"> 1304 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1305 data-cms-accordion-toggle> 1306 <h3>Facebook</h3>
1307 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1308 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1309 1310 </span> 1311 </div> 1312 <div class="accordion-content mt-0 sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1313 x-ref="container1" data-cms-accordion-content 1314 x-cloak> 1315 <p class="mt-3 px-4 sm:px-0 mb-4 sm:mb-0"> Diese Website verwendet Funktionen von Facebook Inc., 1601 1316 S. 1317 California Ave, Palo 1318 Alto, CA 1319 94304, USA . Bei Aufruf unserer Seiten mit Facebook-Plug-Ins wird eine Verbindung zwischen Ihrem 1320 Browser und den Servern von Facebook aufgebaut. 1321 Dabei werden bereits Daten an Facebook übertragen. Besitzen Sie einen Facebook-Account, können 1322 diese Daten damit verknüpft werden. Wenn Sie keine Zuordnung dieser Daten zu Ihrem 1323 Facebook-Account wünschen, loggen Sie sich bitte vor dem 1324 Besuch unserer Seite bei Facebook aus. Interaktionen, insbesondere das Nutzen einer 1325 Kommentarfunktion oder das Anklicken eines âLikeâ- oder âTeilenâ-Buttons werden ebenfalls an 1326 Facebook weitergegeben. 1327 Mehr erfahren Sie unter: <a class="link__pink" 1328 href="https://www.facebook.com/about/privacy/" 1329 target="_blank">https://www.facebook.com/about/privacy/</a>. 1330 </p> 1331 </div> 1332 </div> 1333 </section> 1334 1335 <section data-cms-accordion 1336 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300 bg-gray-50" 1337 data-selected-class="bg-gray-50" data-unselected-class="bg-primary-lighter sm:bg-gray-50" data-cms-accordion-class="accordionClass"> 1338 <div class="p-0 sm:p-4"> 1339 <div class="accordion-wrapper"> 1340 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1341 data-cms-accordion-toggle> 1342 <h3>Instagram</h3> 1343 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1344 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1345 1346 </span> 1347 </div> 1348 <div class="accordion-content mt-0 sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1349 x-ref="container1" data-cms-accordion-content 1350 x-cloak> 1351 <p class="px-4 sm:px-0 mb-4 sm:mb-0"> Auf unserer Website sind Funktionen des Dienstes Instagram 1352 eingebunden. Diese 1353 Funktionen werden 1354 angeboten durch die Instagram Inc., 1601 Willow Road, Menlo Park, CA, 94025, USA. Wenn Sie in 1355 Ihrem Instagram-Account eingeloggt sind, 1356 können Sie durch Anklicken des Instagram-Buttons die Inhalte unserer Seiten mit Ihrem 1357 Instagram-Profil verlinken. Dadurch kann Instagram den Besuch unserer Seiten Ihrem Benutzerkonto 1358 zuordnen. 1359 Wir weisen darauf hin, dass wir als Anbieter der Seiten keine Kenntnis vom Inhalt der 1360 übermittelten Daten sowie deren Nutzung durch Instagram erhalten. Weitere Informationen hierzu 1361 finden Sie in der Datenschutzerklärung von Instagram: <a class="link__pink" 1362 href="https://instagram.com/about/legal/privacy/" 1363 target="_blank">http://instagram.com/about/legal/privacy/</a>. 1364 </p> 1365 </div> 1366 </div> 1367 </div> 1368 </section> 1369 1370 <section data-cms-accordion 1371 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1372 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 1373 <div class="p-0 sm:p-4"> 1374 <div class="accordion-wrapper"> 1375 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1376 data-cms-accordion-toggle> 1377 <h3>YouTube</h3>
1378 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1379 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1380 1381 </span> 1382 </div> 1383 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1384 x-ref="container1" data-cms-accordion-content 1385 x-cloak> 1386 <p class="px-4 sm:px-0 mb-4 sm:mb-0"> Auf dieser Website sind Funktionen des Dienstes «YouTube» 1387 eingebunden. 1388 «YouTube» gehört der 1389 Google Ireland Limited, einer nach irischem Recht eingetragenen und betriebenen Gesellschaft mit 1390 Sitz 1391 in Gordon House, Barrow Street, Dublin 4, Irland, welche die Dienste im Europäischen 1392 Wirtschaftsraum und der Schweiz betreibt. Ihre rechtliche Vereinbarung mit «YouTube» besteht aus 1393 den unter folgendem Link zu entnehmenden Bestimmungen und Bedingungen: <a class="link__pink" 1394 href="https://www.youtube.com/static?gl=de&template=terms&hl=de" 1395 target="_blank">http://www.youtube.com/static?gl=de&template=terms&hl=de/</a>. 1396 Diese 1397 Bestimmungen bilden eine rechtlich bindende Vereinbarung zwischen Ihnen und «YouTube» 1398 bezüglich der Nutzung der Dienste. In der Datenschutzerklärung von Google wird erläutert, wie 1399 «YouTube» mit Ihren personenbezogenen Daten verfährt und Ihre Daten schützt, wenn Sie den Dienst 1400 nutzen. 1401 </p> 1402 </div> 1403 </div> 1404 </div> 1405 </section> 1406 1407 <section data-cms-accordion 1408 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1409 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 1410 <div class="p-0 sm:p-4"> 1411 <div class="accordion-wrapper"> 1412 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1413 data-cms-accordion-toggle> 1414 <h3>Pinterest</h3> 1415 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1416 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1417 1418 </span> 1419 </div> 1420 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1421 x-ref="container1" data-cms-accordion-content 1422 x-cloak> 1423 <p class="px-4 sm:px-0 mb-4 sm:mb-0"> Auf dieser Website sind Funktionen des Dienstes «Pinterest» 1424 eingebunden. «Pinterest gehört der Pinterest Inc, einer nach US-amerikanischen eingetragenen und 1425 betriebenen 1426 Gesellschaft mit Sitz in 808 Brannan Street, San Francisco, CA 94103-490, USA, welche die 1427 Dienste im Europäischen Wirtschaftsraum und Schweiz betreibt. Wenn Sie die Website aufrufen und 1428 gleichzeitig in Ihrem Pinterest-Account eingeloggt sind, kann 1429 Pinterest den Besuch unserer Website Ihrem Pinterest-Account unmittelbar zuordnen. Wenn Sie
1430 nicht möchten, dass Pinterest Ihre Daten Ihrem Konto zuordnet, müssen Sie sich vor Ihrem Besuch 1431 unserer Website 1432 bei Pinterest ausloggen. Wir weisen darauf hin, dass wir als Anbieter der Seiten keine Kenntnis 1433 vom Inhalt der übermittelten Daten sowie deren Nutzung durch Pinterest erhalten. 1434 1435 Weitere Informationen hierzu finden Sie in der Datenschutzerklärung von Pinterest: <a 1436 class="link__pink" 1437 href="https://policy.pinterest.com/de/privacy-policy" 1438 target="_blank">https://policy.pinterest.com/de/privacy-policy</a> 1439 1440 1441 </p> 1442 </div> 1443 </div> 1444 </div> 1445 </section> 1446 1447 <section data-cms-accordion 1448 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300 bg-gray-50" 1449 data-selected-class="bg-gray-50" data-unselected-class="bg-primary-lighter sm:bg-gray-50" data-cms-accordion-class="accordionClass"> 1450 <div class="p-0 sm:p-4"> 1451 <div class="accordion-wrapper"> 1452 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1453 data-cms-accordion-toggle> 1454 <h3>Adresult</h3> 1455 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1456 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1457 1458 </span> 1459 </div> 1460 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1461 x-ref="container1" data-cms-accordion-content 1462 x-cloak> 1463 <p class="px-4 sm:px-0 mb-4 sm:mb-0"> Der für die Verarbeitung Verantwortliche hat auf dieser 1464 Internetseite 1465 Komponenten des 1466 Unternehmens adresult integriert. Adresult ist eine Agentur, welche diverse Affiliate-Programme 1467 betreut und Affiliate-Marketing anbietet. Affiliate-Marketing ist eine internetgestützte 1468 Vertriebsform, die es 1469 kommerziellen Betreibern von Internetseiten, den sogenannten Merchants oder Advertisern, 1470 ermöglicht, Werbung, die meist über Klick- oder Sale-Provisionen vergütet wird, auf 1471 Internetseiten Dritter, also bei Vertriebspartnern, die auch Affiliates oder Publisher genannt 1472 werden, einzublenden. 1473 Der Merchant stellt über das Affiliate-Netzwerk ein Werbemittel, also einen Werbebanner oder 1474 andere geeignete Mittel der Internetwerbung, zur Verfügung, welche in der Folge von einem 1475 Affiliate auf eigenen Internetseiten eingebunden oder über sonstige Kanäle, wie etwa das 1476 Keyword- 1477 Advertising oder E-Mail-Marketing, beworben werden. Betreibergesellschaft von adresult ist die 1478 adresult AG, Hönggerstrasse 65, 8037 Züric
1478h, Schweiz. Adresult setzt ein Cookie auf dem 1479 informationstechnologischen System der betroffenen Person. Was Cookies sind, wurde oben bereits 1480 erläutert. Das Tracking-Cookie von adresult speichert keinerlei personenbezogene Daten. 1481 Gespeichert werden lediglich die Identifikationsnummer des Affiliate, also des den potentiellen 1482 Kunden vermittelnden Partners, sowie die Ordnungsnummer des Besuchers einer Internetseite und 1483 des angeklickten Werbemittels. Zweck der Speicherung dieser Daten ist die Abwicklung von 1484 Provisionszahlungen zwischen einem Merchant und dem Affiliate, welche über das 1485 Affiliate-Netzwerk, also adresult, abgewickelt werden. 1486 Die betroffene Person kann die Setzung von Cookies durch unsere Internetseite, wie oben bereits 1487 dargestellt, jederzeit mittels einer entsprechenden Einstellung des genutzten Internetbrowsers 1488 verhindern und damit der Setzung von Cookies dauerhaft widersprechen. 1489 Eine solche Einstellung des genutzten Internetbrowsers würde auch verhindern, dass adresult ein 1490 Cookie auf dem informationstechnologischen System der betroffenen Person setzt. Zudem können von 1491 adresult bereits gesetzte Cookies jederzeit über einen Internetbrowser oder andere 1492 Softwareprogramme gelöscht werden. Die geltenden Datenschutzbestimmungen von adresult können 1493 unter <a class="link__pink" 1494 href="https://www.adresult.ch/impressum/" 1495 target="_blank">https://www.adresult.ch/impressum/</a> abgerufen werden. </p> 1496 </div> 1497 </div> 1498 </div> 1499 </section> 1500 1501 <section data-cms-accordion 1502 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1503 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 1504 <div class="p-0 sm:p-4"> 1505 <div class="accordion-wrapper"> 1506 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1507 data-cms-accordion-toggle> 1508 <h3>Personalisierte Banner</h3> 1509 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1510 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1511 1512 </span> 1513 </div> 1514 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1515 x-ref="container1" data-cms-accordion-content 1516 x-cloak> 1517 <p class="px-4 sm:px-0">Unsere Webseite verwendet Cookies/Werbungs-IDs zu Werbezwecken. Dadurch 1518 können wir unsere Werbung 1519 Besuchern, die sich für unsere Produkte interessieren, auf Partner-Webseiten, Apps und E-Mails 1520 zeigen. 1521 Retargeting-Technologien verwenden Cookies oder Werbe-IDs und zeigen Werbung ausgehend von Ihrem 1522 bisherigen Browsing-Verhalten an. Um diese interessenbasierte Werbung abzulehnen, besuchen Sie 1523 bitte die folgenden Webseiten: 1524 </p> 1525 <p class="px-4 sm:px-0 mt-3"> 1526 <a class="link__pink" 1527 href="https://optout.networka
1527dvertising.org/?c=1/" 1528 target="_blank">https://optout.networkadvertising.org/?c=1/</a>. 1529 </p> 1530 <p class="px-4 sm:px-0 mt-3"> 1531 <a class="link__pink" 1532 href="https://www.youronlinechoices.com/" 1533 target="_blank">https://www.youronlinechoices.com/</a>. 1534 </p> 1535 <p class="px-4 sm:px-0 mt-3 mb-4 sm:mb-0"> 1536 Wir können Informationen wie technische Kennungen aus Ihrer Anmeldungsinformation auf unserer 1537 Webseite oder unserem CRM-System mit zuverlässigen Werbepartnern austauschen. 1538 Dadurch können Ihre Geräte und/oder Umgebungen verknüpft und Ihnen eine nahtlose 1539 Nutzungserfahrung 1540 mit den von Ihnen verwendeten Geräten und Umgebungen angeboten werden. 1541 Nähere Einzelheiten zu diesen Verknüpfungsfähigkeiten entnehmen Sie bitte der 1542 Datenschutzrichtlinie, 1543 die Sie in den vorgenannten Plattformen finden oder den nachstehenden Erläuterungen. </p> 1544 </p> 1545 </div> 1546 </div> 1547 </div> 1548 </section> 1549 1550 <section data-cms-accordion 1551 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1552 data-selected-class="bg-gray-50" data-unselected-class="bg-primary-lighter sm:bg-gray-50" data-cms-accordion-class="accordionClass"> 1553 <div class="p-0 sm:p-4"> 1554 <div class="accordion-wrapper"> 1555 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1556 data-cms-accordion-toggle> 1557 <h3>Criteo</h3> 1558 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1559 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1560 1561 </span> 1562 </div> 1563 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1564 x-ref="container1" data-cms-accordion-content 1565 x-cloak> 1566 <p class="px-4 sm:px-0 mb-4 sm:mb-0">Auf dieser Webseite werden durch Technologien von Criteo 1567 Interaktionsdaten 1568 des 1569 Webseiten-Besuchers in anonymisierter Form zu Marketingzwecken gesammelt und gespeichert. Die 1570 Daten werden nicht dazu benutzt, den 1571 Besucher dieser Webseite persönlich zu identifizieren. Wenn Sie keine personalisierten Banner im 1572 Criteo-Werbenetzwerk mehr sehen möchten, können Sie sich durch Klick auf den nachfolgenden Link 1573 austragen: <a class="link__pink" 1574 href=" https://www.criteo.com/de/privacy/" 1575 target="_blank"> 1576 https://www.criteo.com/de/privacy/</a>. 1577 </p> 1578 </div> 1579 </div> 1580 </div> 1581 </section> 1582 1583 <section data-cms-accordion 1584 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1585 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 1586 <div class="p-0 sm:p-4"> 1587 <div class="accordion-wrapper"> 1588 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1589 data-cms-accordion-toggle> 1590 <h3>Getback</h3>
1591 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1592 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1593 1594 </span> 1595 </div> 1596 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1597 x-ref="container1" data-cms-accordion-content 1598 x-cloak> 1599 <p class="px-4 sm:px-0 mb-4 sm:mb-0">Wir verwenden in unserem Shop das Angebot âGetbackâ der adfocus 1600 GmbH, 1601 Theilerstrasse 7, 6300 Zug, 1602 Schweiz (im Folgenden âGetbackâ), um unsere Besucher und Kunden mit Hilfe von Benachrichtigungen 1603 im jeweiligen 1604 Browser auf unsere Produkte und Angebote aufmerksam zu machen. Mithilfe der durch die Cookies 1605 erzeugten Informationen über Ihre Benutzung unseres Shops (einschliesslich Ihrer IP-Adresse) 1606 können wir bzw. 1607 Getback Ihnen bei Ihrem nächsten Besuch unseres Shops Benachrichtigungen anzeigen lassen, um Sie 1608 über aktuelle Angebote und Rabatte zu informieren sowie personalisierte Produktempfehlungen 1609 anzuzeigen. 1610 Für weitere Informationen zum Datenschutz und zu den eingesetzten Cookies von Getback verweisen 1611 wir auf die Webseite <a class="link__pink" 1612 href=" https://www.getback.app/about/privacy/" 1613 target="_blank"> https://www.getback.app/about/privacy/</a>. 1614 </p> 1615 </div> 1616 </div> 1617 </div> 1618 </section> 1619 1620 <section data-cms-accordion 1621 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1622 data-selected-class="bg-gray-50" data-unselected-class="bg-primary-lighter sm:bg-gray-50" data-cms-accordion-class="accordionClass"> 1623 <div class="p-0 sm:p-4"> 1624 <div class="accordion-wrapper"> 1625 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1626 data-cms-accordion-toggle> 1627 <h3>Gutscheinangebote der Sovendus GmbH</h3> 1628 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1629 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1630 1631 </span> 1632 </div> 1633 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1634 x-ref="container1" data-cms-accordion-content 1635 x-cloak> 1636 <p class="px-4 sm:px-0">Für die Auswahl eines für Sie aktuell interessanten Gutscheinangebots werden 1637 von uns 1638 pseudonymisiert und verschlüsselt der Hashwert Ihrer E-Mail-Adresse und Ihre IP-Adresse an die 1639 Sovendus GmbH, Moltkestr. 11, 76133 Karlsruhe (Sovendus) übermittelt (Art. 6 Abs.1 f DSGVO). 1640 Der pseudonymisierte Hashwert der E-Mail-Adresse wird zur Berücksichtigung eines möglicherweise 1641 vorliegenden Widerspruchs gegen Werbung von Sovendus verwendet (Art. 21 Abs.3, Art. 6 Abs.1 c 1642 DSGVO). Die IP-Adresse wird von Sovendus ausschliesslich zu Zwecken 1643 der Datensicherheit verwendet und im Regelfall nach sieben Tagen anonymisiert (Art. 6 Abs.1 f 1644 DSGVO). Ausserdem übermitteln wir zu Abrechnungszwecken pseudonymisiert Bestellnummer, 1645 Bestellwert mit Währung, 1646 Session-ID, Vorteilscode und Zeitstempel an Sovendus (Art. 6 Abs.1 f DSGVO). Wenn Sie sich für 1647 ein Gutscheinangebot von Sovendus interessieren, zu Ihrer E-Mail-Adresse kein Werbewiderspruch 1648 vorliegt und auf das nur in diesem Fall 1649 angezeigte Gutschein-Banner klicken, werden von uns verschlüsselt Anrede, Name und Ihre 1650 E-Mail-Adresse an Sovendus zur Vorbereitung des Gutscheins übermittelt (Art. 6 Abs.1 b, f 1651 DSGVO). 1652 </p> 1653 <p class="px-4 sm:px-0 mt-3">Weitere Informationen zur Verarbeitung Ihrer Daten durch Sovendus 1654 entnehmen Sie 1655 bitte den 1656 Online-Datenschutzhinweisen unter </p> 1657 <p class="px-4 sm:px-0 mt-2 mb-4 sm:mb-0"><a class="link__pink" 1658 href="https://www.sovendus.com/ch/datenschutz/" 1659 target="_blank">https://www.sovendus.com/ch/datenschutz/</a>. 1660 </p> 1661 </div> 1662 </div> 1663 </div> 1664 </section> 1665 1666 <section data-cms-accordion 1667 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1668 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 1669 <div class="p-0 sm:p-4"> 1670 <div class="accordion-wrapper"> 1671 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1672 data-cms-accordion-toggle> 1673 <h3>Microsoft Advertising</h3>
1674 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1675 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1676 1677 </span> 1678 </div> 1679 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1680 x-ref="container1" data-cms-accordion-content 1681 x-cloak> 1682 <p class="px-4 sm:px-0">Wir nutzen das Online-Werbeprogramm âMicorosoft Advertisingâ des Anbieters 1683 Microsoft Corporation, 1684 One Microsoft Way, Redmond, WA 98052-6399, USA (im Folgenden âMicrosoftâ), um mit Hilfe von 1685 Werbemitteln 1686 (sogenannten âAdsâ) auf unsere Angebote im Shop auf Webseiten von Dritten aufmerksam zu machen. 1687 Ãber unseren Cookie-Banner binden wir Funktionen von Bing Ads auf unserer Website ein und 1688 ermöglichen Microsoft die Auswertung Ihres Surfverhaltens. Wenn Sie auf eine von Microsoft 1689 geschaltete Anzeige klicken, wird ein Cookie für das Conversion-Tracking auf Ihrem jeweilig 1690 genutzten Endgerät abgelegt. 1691 </p> 1692 <p class="px-4 sm:px-0 mt-2">Wenn Sie bestimmte Internetseiten unserer Webseite besuchen und das 1693 Cookie noch 1694 nicht abgelaufen 1695 ist, kann Microsoft erkennen, dass Sie auf die Anzeige geklickt haben und zu dieser Seite 1696 weitergeleitet wurden. £ 1697 Jeder Ads-Kunde erhält eine spezifische Identifikationskennung. Somit besteht keine Möglichkeit, 1698 dass Cookies über die Webseiten von Ads-Kunden nachverfolgt werden können. 1699 </p> 1700 <p class="px-4 sm:px-0 mt-2 mb-4 sm:mb-0">Die Informationen, die mithilfe des Conversion-Cookies 1701 eingeholten 1702 werden, dienen 1703 dazu, 1704 Conversion-Statistiken für Ads-Kunden zu erstellen, die sich für Conversion-Tracking entschieden 1705 haben. Hierbei erfahren die Kunden die Gesamtanzahl der Nutzer, 1706 die auf ihre Anzeige geklickt haben und zu einer mit einem Conversion-Tracking-Tag versehenen 1707 Seite weitergeleitet wurden. Microsoft erhebt, verarbeitet und nutzt über das Cookie 1708 Informationen, aus denen unter Verwendung von 1709 Pseudonymen Nutzungsprofile erstellt werden. Diese Nutzungsprofile dienen der Analyse des 1710 Besucherverhaltens und werden zur Ausspielung von Werbeanzeigen verwendet. Es werden keine 1711 persönlichen Informationen zur Identität des Nutzers verarbeitet. 1712 Für weitere Informationen zum Datenschutz und zu den eingesetzten Cookies von Microsoft Ads 1713 verweisen wir auf die Webseite: <a class="link__pink" 1714 href="https://privacy.microsoft.com/de-de/privacystatement" 1715 target="_blank">https://privacy.microsoft.com/de-de/privacystatement/</a> 1716 </p> 1717 </div> 1718 </div> 1719 </div> 1720 </section> 1721 1722 <section data-cms-accordion 1723 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1724 data-selected-class="bg-gray-50" data-unselected-class="bg-primary-lighter sm:bg-gray-50" data-cms-accordion-class="accordionClass"> 1725 <div class="p-0 sm:p-4"> 1726 <div class="accordion-wrapper"> 1727 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1728 data-cms-accordion-toggle> 1729 <h3>TrackJS</h3>
1730 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1731 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1732 1733 </span> 1734 </div> 1735 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1736 x-ref="container1" data-cms-accordion-content 1737 x-cloak> 1738 <p class="px-4 sm:px-0 mb-4 sm:mb-0">TrackJS ist ein Dienst zum Error-Tracking in Java Script. 1739 Programmfehler in 1740 Java Script werden 1741 durch TrackJS aufgezeichnet und können analysiert werden. Da es sich um Software as a Service 1742 handelt, werden Nutzerdaten an das Unternehmen übermittelt. 1743 TrackJS ist nicht durch das EU-US-Privacy-Shield zertifiziert, daher hat das Unternehmen von der 1744 EU-Kommission genehmigte Standardvertragsklauseln in seine Allgemeinen Geschäftsbedingungen 1745 integriert 1746 (Additional Data Processing Agreement <a class="link__pink" 1747 href="https://trackjs.com/dpa/" 1748 target="_blank">https://trackjs.com/dpa/</a> ). Ein 1749 gesonderter Auftragsverarbeitungsvertrag 1750 ist nicht erforderlich. 1751 </p> 1752 </div> 1753 </div> 1754 </div> 1755 </section> 1756 1757 <section data-cms-accordion 1758 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1759 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 1760 <div class="p-0 sm:p-4"> 1761 <div class="accordion-wrapper"> 1762 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1763 data-cms-accordion-toggle> 1764 <h3>Einsatz und Verwendung von Boxalino</h3> 1765 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1766 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1767 1768 </span> 1769 </div> 1770 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1771 x-ref="container1" data-cms-accordion-content 1772 x-cloak> 1773 <p class="px-4 sm:px-0">Der für die Verarbeitung Verantwortliche hat auf dieser Internetseite 1774 Komponenten von Boxalino 1775 integriert. Boxalino ist ein Web-Analyse-Dienst. Web-Analyse ist die Erhebung, Sammlung und 1776 Auswertung von Daten über das Verhalten von Besuchern von Internetseiten. 1777 Ein Web-Analyse-Dienst erfasst unter anderem Daten darüber, von welcher Internetseite eine 1778 betroffene Person auf eine Internetseite gekommen ist (sogenannte Referrer), auf welche 1779 Unterseiten der Internetseite zugegriffen oder wie oft und für welche Verweildauer eine 1780 Unterseite 1781 betrachtet wurde. Eine Web-Analyse wird überwiegend zur Optimierung einer Internetseite und zur 1782 Kosten-Nutzen-Analyse von Internetwerbung eingesetzt. 1783 </p> 1784 <p class="px-4 sm:px-0 mt-2">Betreibergesellschaft von Boxalino ist die winning interactoins AG, 1785 Hertistrasse 27a, 8304 Wallisellen, Schweiz. Boxalino setzt ein Cookie auf dem
1786 informationstechnologischen System der betroffenen 1787 Person. Was Cookies sind, wurde oben bereits erläutert. Durch jeden Aufruf einer 1788 der Einzelseiten dieser Internetseite, die durch den für die Verarbeitung Verantwortlichen 1789 betrieben wird und auf welcher eine Boxalino-Komponente integriert wurde, wird der 1790 Internetbrowser auf dem informationstechnologischen System 1791 der betroffenen Person automatisch durch die jeweilige Boxalino-Komponente veranlasst, Daten zu 1792 Marketing- und Optimierungszwecken an Boxalino zu übermitteln. Im Rahmen dieses technischen 1793 Verfahrens erhält Boxalino Kenntnis über Daten, die in der 1794 Folge zur Erstellung von pseudonymen Nutzungsprofilen verwendet werden. Die so gewonnenen 1795 Nutzungsprofile dienen der Analyse des Verhaltens der betroffenen Person, welche auf die 1796 Internetseite des für die Verarbeitung Verantwortlichen zugegriffen 1797 hat und werden mit dem Ziel, die Internetseite zu verbessern und zu optimieren, ausgewertet. Die 1798 über die Boxalino-Komponente erhobenen Daten werden nicht ohne vorherige Einholung einer 1799 gesonderten und ausdrücklichen 1800 Einwilligung der betroffenen Person dazu genutzt, die betroffene Person zu identifizieren. Diese 1801 Daten werden nicht mit personenbezogenen Daten oder mit anderen Daten, die das gleiche Pseudonym 1802 enthalten, zusammengeführt. 1803 1804 </p> 1805 <p class="px-4 sm:px-0 mt-2 mb-4 sm:mb-0">Die betroffene Person kann die Setzung von Cookies durch 1806 unsere 1807 Internetseite, wie 1808 oben bereits 1809 dargestellt, jederzeit mittels einer entsprechenden Einstellung des genutzten Internetbrowsers 1810 verhindern und damit der Setzung von Cookies dauerhaft widersprechen. 1811 Eine solche Einstellung des genutzten Internetbrowsers würde auch verhindern, dass Boxalino ein 1812 Cookie auf dem informationstechnologischen System der betroffenen Person setzt. Zudem können von 1813 Boxalino bereits 1814 gesetzte Cookies jederzeit über einen Internetbrowser oder andere Softwareprogramme gelöscht 1815 werden. Die geltenden Datenschutzbestimmungen von Boxalino können unter: <a class="link__pink" 1816 href="https://www.winning-interactions.ai/legal---terms.html/" 1817 target="_blank">http://www.boxalino.com/de/impressum/</a> 1818 abgerufen werden.</p> 1819 </div> 1820 </div> 1821 </div> 1822 </section> 1823 1824 <section data-cms-accordion 1825 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1826 data-selected-class="bg-gray-50" data-unselected-class="bg-primary-lighter sm:bg-gray-50" data-cms-accordion-class="accordionClass"> 1827 <div class="p-0 sm:p-4"> 1828 <div class="accordion-wrapper"> 1829 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1830 data-cms-accordion-toggle> 1831 <h3>Mautic</h3>
1832 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1833 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1834 1835 </span> 1836 </div> 1837 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1838 x-ref="container1" data-cms-accordion-content 1839 x-cloak> 1840 <p class="px-4 sm:px-0">Wir setzen auf dieser Website "Mautic" als Open-Source Werkzeug zur 1841 Marketing Automatisierung ein. Dies ist Tool zur zeitgerechten Ausgabe von passgenauen 1842 Informationen auf Basis der zustimmungsbasierten Erfassung und Analyse von Nutzungsdaten (u.a. 1843 verwendeter Browser, besuchte Seite, Dauer des Aufenthaltes). 1844 Mautic wird auf betriebenen Servern in der EU gehostet. Eine Weitergabe der Daten an Dritte 1845 findet nicht statt. Wir erfassen und verarbeiten Daten mit Mautic nur insoweit, wie für die 1846 Erreichung der geschäftlichen Ziele sinnvoll und erforderlich ist. 1847 </p> 1848 1849 <p class="px-4 sm:px-0 mt-2">Unsere Mautic-Nutzung kann (muss aber nicht) umfassen:</p> 1850 1851 <p class="px-4 sm:px-0 mt-2">Zwar kann ein absoluter Schutz nicht garantiert werden, aber wir legen 1852 grössten Wert auf die 1853 Sicherheit Ihrer Daten:</p> 1854 1855 <ol class="px-4 sm:px-0 numbered-ol mt-4"> 1856 <li> 1857 <p class="text-base"> 1858 Sämtliche Daten des Registrierungsdialoges werden verschlüsselt übertragen. 1859 </p> 1860 </li> 1861 <li class="mt-2"> 1862 <p class="text-base"> 1863 a) Newsletter / E-Mail-Marketing und Kampagnen 1864 Beim sog. E-Mail-Marketing werden Ihnen personalisierte E-Mails zugesandt. Diese 1865 basieren auf Ihren Newsletter-Präferenzen und ggf. auch auf dem Nutzungsverhalten auf 1866 unseren Websites, beim Lesen unserer E-Mails und beim Interagieren mit den darin 1867 enthaltenen Links. Des Weiteren versenden wir E-Mails auch im Rahmen von Kampagnen. 1868 Dem Versand solcher Marketing-E-Mails liegt immer eine gesonderte Zustimmung zu Grunde. 1869 </p> 1870 </li> 1871 <li class="mt-2 mb-4 sm:mb-0"> 1872 <p class="text-base"> 1873 b) Erfassung von Interaktionen 1874 Auf unseren Web-Ressourcen inkl. Shop werden auf Basis Ihrer Zustimmung Interaktionen 1875 erfasst, um Präferenzen der Nutzenden möglichst gut einzuordnen (Profilbildung) und 1876 Inhalte darauf anzupassen. Für die Zuordnung der Einzelaktivitäten zu anonymen oder 1877 bekannten Nutzenden setzt die Software verschiedene technische Verfahren ein: 1878 </p> 1879 <p> Zählpixel: Um zu erkennen, ob z.B. eine E-Mail geöffnet wurde, setzt Mautic sogenannte 1880 Zählpixel (Tracking Pixel) ein. Durch diese wird eine kleine Grafik vom Server des 1881 Anbieters geladen, die zuvor einem individuellen Nutzerprofil zugeordnet wurde. 1882 Personalisierte Weblinks: Um zu erkennen, ob z.B. ein Nutzer einen Link aus einer 1883 E-Mail, QR-Code oder SMS aufruft, fügt Mautic diesen Links eine eindeutige Kennung 1884 hinzu, die zuvor einem individuellen Nutzerprofil zugeordnet wurde. 1885 Bei den dabei erhobenen Daten handelt es sich um: 1886 <li> die Aktivität auf unserer Website</li> 1887 <li> Anzahl der Seitenaufrufe und Verweildauer des Webseiten Besuchers</li> 1888 <li> der Klickpfad des jeweiligen Besuchers</li> 1889 <li> Downloads von Dateien die über die Webseite bereitgestellt werden</li> 1890 <li> Besuche von Landingpages</li> 1891 <li> Ãffnungen von E-Mails aus Newsletter und Kampagnen</li> 1892 <li> Aufrufen von Links aus z.B. E-Mails, SMS oder QR-Codes</li> 1893 </p> 1894 1895 </li> 1896 </ol> 1897 <p class="px-4 sm:px-0 mt-3"> Die von Webseitenbesuchern aktuell genutzte IP Adresse wird bei jedem 1898 Aufruf unserer Webseite an uns übertragen. Mautic speichert diese nur anonymisiert. </p> 1899 </div> 1900 </div> 1901 </div> 1902 </section> 1903 1904 <section data-cms-accordion 1905 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1906 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 1907 <div class="p-0 sm:p-4"> 1908 <div class="accordion-wrapper"> 1909 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1910 data-cms-accordion-toggle> 1911 <h3>Cloudflare</h3>
1912 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1913 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1914 1915 </span> 1916 </div> 1917 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1918 x-ref="container1" data-cms-accordion-content 1919 x-cloak> 1920 <p class="px-4 sm:px-0">Wir nutzen den Service âCloudflareâ. Anbieter ist die Cloudflare Inc., 101 1921 Townsend St., San Francisco, CA 94107, USA (im Folgenden âCloudflareâ). Cloudflare bietet ein 1922 weltweit verteiltes Content Delivery Network mit DNS und SSL Zertifizierung an. Dabei wird 1923 technisch der Informationstransfer zwischen Ihrem Browser und unserer Website über das Netzwerk 1924 von Cloudflare geleitet. Das versetzt Cloudflare in die Lage, den Datenverkehr zwischen Ihrem 1925 Browser und unserer Website zu analysieren und als Filter zwischen unseren Servern und 1926 potenziell bösartigem Datenverkehr aus dem Internet zu dienen. Hierbei kann Cloudflare auch 1927 Cookies oder sonstige Technologien zur Wiedererkennung von Internetnutzern einsetzen, die jedoch 1928 allein zum hier beschriebenen Zweck verwendet werden. Cloudflare ist zertifizierter Teilnehmer 1929 des âEU-US Privacy Shield Frameworksâ. Cloudflare hat sich dazu verpflichtet, sämtliche aus den 1930 Mitgliedstaaten der Europäischen Union (EU) erhaltenen personenbezogenen Daten gemäà dem 1931 âPrivacy Shield Frameworkâ zu handhaben. Der Einsatz von Cloudflare beruht auf unserem 1932 berechtigten Interesse an einer möglichst fehlerfreien und sicheren Bereitstellung unseres 1933 Webangebotes (Art. 6 Abs. 1 lit. f DSGVO).Weitere Informationen zum Thema Sicherheit und 1934 Datenschutz bei Cloudflare finden Sie hier: <a target="_blank" href="https://www.cloudflare.com/privacypolicy/">Cloudflare 1935 Privacy Policy</a> . 1936 </p> 1937 </div> 1938 </div> 1939 </div> 1940 </section> 1941 1942 <section data-cms-accordion 1943 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1944 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 1945 <div class="p-0 sm:p-4"> 1946 <div class="accordion-wrapper"> 1947 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1948 data-cms-accordion-toggle> 1949 <h3>Sichere Datenübertragung</h3> 1950 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1951 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img">
1951<path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1952 1953 </span> 1954 </div> 1955 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 1956 x-ref="container1" data-cms-accordion-content 1957 x-cloak> 1958 <p class="px-4 sm:px-0 mb-4 sm:mb-0">Ihre persönlichen Daten werden bei uns sicher durch 1959 Verschlüsselung übertragen. Dies gilt für 1960 Ihre Bestellung und auch für das Kundenlogin. Wir bedienen uns dabei des Codierungssystems SSL. 1961 </p> 1962 <p class="px-4 sm:px-0 mb-4 sm:mb-0">SSL steht für "Secure Socket Layer" und wird heute als Standard 1963 eingesetzt.</p> 1964 <p class="px-4 sm:px-0 mb-4 sm:mb-0">Zwar kann ein absoluter Schutz nicht garantiert werden, aber 1965 wir legen grössten Wert auf die 1966 Sicherheit Ihrer Daten:</p> 1967 1968 <ol class="px-4 sm:px-0 numbered-ol mt-4"> 1969 <li> 1970 <p> Sämtliche Daten des Registrierungsdialoges werden verschlüsselt übertragen.</p> 1971 </li> 1972 1973 <li> 1974 <p>Alle Systeme, in denen Ihre Daten gespeichert sind, sind passwortgeschützt und nur einem 1975 sehr eingeschränkten Personenkreis zugänglich.</p> 1976 </li> 1977 1978 <li> 1979 <p> Ihre Daten werden nur zu dem Zwecke genutzt, zu dem Sie uns beauftragt haben.</p> 1980 </li> 1981 </ol> 1982 </div> 1983 </div> 1984 </div> 1985 </section> 1986 1987 <section data-cms-accordion 1988 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 1989 data-selected-class="bg-gray-50" data-unselected-class="bg-primary-lighter sm:bg-gray-50" data-cms-accordion-class="accordionClass"> 1990 <div class="p-0 sm:p-4"> 1991 <div class="accordion-wrapper"> 1992 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 1993 data-cms-accordion-toggle> 1994 <h3>Sichere Kreditkartenzahlung</h3> 1995 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 1996 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 1997 1998 </span> 1999 </div> 2000 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 2001 x-ref="container1" data-cms-accordion-content 2002 x-cloak> 2003 <p class="px-4 sm:px-0" 2004 `>Mit dem PCI-DSS-Zertifikat garantieren wir Ihnen, dass wir ein sicherer Anbieter für 2005 Kreditkartenzahlungen sind. PCI DSS steht für Payment Card Industry Data Security Standard und 2006 stellt den weltweit gültigen Sicherheitsstandard für Kartendaten dar. 2007 Die Sicherheitsrichtlinien von PCI wirken Diebstahl und Missbrauch wirkungsvoll entgegen. 2008 PCI-DSS enthält 12 verbindliche Anforderungen, deren Einhaltung jährlich mit einem Zertifikat 2009 bescheinigt wird. Weitere Informationen dazu finden Sie unter: 2010 <a class="link__pink" 2011 href="https://assurance.sysnetgs.com/assurancecard/be8e7fbc4499573fd49c094e465c61e60d83cf8135657915/assurancecard/" 2012 target="_blank">https://assurance.sysnetgs.com/assurancecard</a> 2013 </p> 2014 </div> 2015 2016 2017 </div> 2018 </div> 2019 </section> 2020 <section data-cms-accordion 2021 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 2022 data-selected-class="bg-gray-50" data-unselected-class="bg-primary-lighter sm:bg-gray-50" data-cms-accordion-class="accordionClass"> 2023 <div class="p-0 sm:p-4"> 2024 <div class="accordion-wrapper"> 2025 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 2026 data-cms-accordion-toggle> 2027 <h3>New Relic</h3>
2028 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 2029 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 2030 2031 </span> 2032 </div> 2033 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 2034 x-ref="container1" data-cms-accordion-content 2035 x-cloak> 2036 <p class="px-4 sm:px-0">Wir setzen auf unserer Webseite die Software NewRelic ein. Hierdurch wird 2037 eine Analyse Ihrer Websitenutzung ermöglicht. Die durch das Cookie gespeicherten Informationen 2038 über Ihre Benutzung dieser Website (einschliesslich Ihrer IP-Adresse), 2039 werden an einen Server von NewRelic in den USA übertragen. Die Daten verarbeiten wir aufgrund 2040 unseres überwiegenden Interesses an der optimalen Vermarktung unseres Onlineangebotes nach Art.6 2041 Abs. 1 f) DSGVO. NewRelic wird die gespeicherten Informationen verwenden, 2042 um Ihre Nutzung der Website auszuwerten, um Reports über die Websiteaktivitäten für die 2043 Websitebetreiber zusammenzustellen und um weitere mit der Websitenutzung und der Internetnutzung 2044 verbundene Dienstleistungen zu erbringen. </p> 2045 <p class="px-4 sm:px-0 mt-2">NewRelic ist nach dem Privacy Shield Agreement zertifiziert und 2046 garantiert damit die 2047 Einhaltung 2048 der europäischen Datenschutzgesetzgebung: <a class="link__pink" 2049 href="https://www.privacyshield.gov/participant?id=a2zt0000000TNPiAAO&status=Active" 2050 target="_blank">https://www.privacyshield.gov/participant?id=a2zt0000000TNPiAAO&status=Active</a> 2051 ).</p> 2052 <p class="px-4 sm:px-0 mt-2 mb-4 sm:mb-0"> Weitere Informationen zum Datenschutz finden Sie unter: 2053 <a class="link__pink" 2054 href="https://newrelic.com/termsandconditions/privacy" 2055 target="_blank">https://newrelic.com/termsandconditions/privacy</a> 2056 </p> 2057 </div> 2058 </div> 2059 </div> 2060 </section> 2061 2062 2063 <section data-cms-accordion 2064 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 2065 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 2066 <div class="p-0 sm:p-4"> 2067 <div class="accordion-wrapper"> 2068 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 2069 data-cms-accordion-toggle> 2070 2071 <h3>Nutzung unserer Chat-Funktion</h3> 2072 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 2073 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewB
2073ox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 2074 2075 </span> 2076 </div> 2077 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 2078 x-ref="container1" data-cms-accordion-content 2079 x-cloak> 2080 <p class="px-4 sm:px-0">Wir setzen auf unserer Website die Software Typewise ein. Typewise gehört 2081 zur Typewise AG mit Sitz an der Buckhauserstrasse 36, 8048 Zürich, Schweiz.</p> 2082 2083 <p class="px-4 sm:px-0 mt-2">Wenn Sie uns per Chat kontaktieren, werden Ihre personenbezogenen Daten 2084 bearbeitet. Bearbeitet werden die Daten, die Sie uns zur Verfügung stellen, zum Beispiel Ihr Name, 2085 Ihre E-Mail-Adresse, Ihr Anliegen sowie weitere Informationen, die Sie im Rahmen der Chat-Anfrage 2086 freiwillig mitteilen. Darüber hinaus können technische Informationen sowie der Zeitpunkt des 2087 Eingangs der Anfrage dokumentiert werden. Pflichtangaben sind mit einem Sternchen (*) 2088 gekennzeichnet.</p> 2089 2090 <p class="px-4 sm:px-0 mt-2">Die Chat-Funktion wird durch einen virtuellen Assistenten unterstützt. 2091 Dieser kann einen grossen Teil der Anfragen mithilfe künstlicher Intelligenz automatisiert 2092 beantworten. Je nach Anliegen kann die Anfrage durch Mitarbeitende von Lehner 2093 weiterbearbeitet werden.</p> 2094 2095 <p class="px-4 sm:px-0 mt-2">Wir verarbeiten diese Daten ausschliesslich, um Ihr Anliegen zu 2096 bearbeiten, zum Beispiel zur Erteilung einer Auskunft über ein Produkt, zur Unterstützung bei der 2097 Vertragsabwicklung, etwa bei Rücksendungen, oder zur Verbesserung unseres Services.</p> 2098 2099 <p class="px-4 sm:px-0 mt-2">Ihre Daten können im Rahmen der Bereitstellung der Chat-Funktion durch 2100 Typewise bearbeitet werden. Dies kann Typewise den Zugriff auf Ihre Daten ermöglichen, soweit dies 2101 für die Bereitstellung, den Betrieb, die Wartung und die Unterstützung bei der Nutzung der 2102 Software erforderlich ist.</p> 2103 2104 <p class="px-4 sm:px-0 mt-2">Bitte geben Sie im Chat keine besonders schützenswerten Personendaten 2105 oder vertraulichen Informationen ein, sofern diese für die Bearbeitung Ihres Anliegens nicht 2106 erforderlich sind.</p> 2107 2108 <p class="px-4 sm:px-0 mt-2">Weitere Informationen hierzu finden Sie in der Datenschutzerklärung von 2109 Typewise:</p> <a class="link__pink" href="https://www.typewise.app/legal/privacy-policy" 2110 target="_blank">https://www.typewise.app/legal/privacy-policy</a>. 2111 </div> 2112 </div> 2113 </div> 2114 </section> 2115 2116 <section data-cms-accordion 2117 class="-mx-4 md:-ml-5 pb-0 sm:pb-4 border border-t-0 border-gray-300" 2118 data-selected-class="bg-white" data-unselected-class="bg-primary-lighter sm:bg-white" data-cms-accordion-class="accordionClass"> 2119 <div class="p-0 sm:p-4"> 2120 <div class="accordion-wrapper"> 2121 <div class="p-4 sm:p-0 mt-auto sm:mt-3 cursor-pointer sm:cursor-auto flex items-center justify-between" 2122 data-cms-accordion-toggle> 2123 <h3>Allgemeiner Haftungsausschluss</h3>
2124 <span class=" block sm:hidden transform transition-all rotate-0" data-cms-accordion-icon> 2125 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="chevron-down" viewBox="0 0 448 512" class="w-3.5 h-3.5 text-purple mt-px" role="img"><path fill="currentColor" d="M207.029 381.476 12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"/><title>chevron-down</title></svg> 2126 2127 </span> 2128 </div> 2129 <div class="accordion-content mt-auto sm:mt-4 max-h-0 sm:max-h-full overflow-hidden transition-all" 2130 x-ref="container1" data-cms-accordion-content 2131 x-cloak> 2132 <p class="px-4 sm:px-0">Alle Angaben unseres Internetangebotes wurden sorgfältig geprüft. Wir 2133 bemühen uns, unser 2134 Informationsangebot aktuell, inhaltlich richtig und vollständig anzubieten. Trotzdem kann das 2135 Auftreten von Fehlern nicht völlig ausgeschlossen werden, 2136 womit wir keine Garantie für Vollständigkeit, Richtigkeit und Aktualität von Informationen auch 2137 journalistisch-redaktioneller Art übernehmen können. Haftungsansprüche aus Schäden materieller 2138 oder ideeller Art, die durch die 2139 Nutzung der angebotenen Informationen verursacht wurden, sind ausgeschlossen, sofern kein 2140 nachweislich vorsätzliches oder grob fahrlässiges Verschulden vorliegt. 2141 </p> 2142 <p class="px-4 sm:px-0 mt-2">Der Herausgeber kann nach eigenem Ermessen und ohne Ankündigung Texte 2143 verändern oder 2144 löschen und 2145 ist nicht verpflichtet, Inhalte dieser Website zu aktualisieren. Die Benutzung bzw. der Zugang 2146 zu dieser Website geschieht auf eigene Gefahr des Besuchers. 2147 Der Herausgeber, seine Auftraggeber oder Partner sind nicht verantwortlich für Schäden, wie 2148 direkte, indirekte, zufällige, vorab konkret zu bestimmende oder Folgeschäden, die angeblich 2149 durch den Besuch 2150 dieser Website entstanden sind und übernehmen hierfür folglich keine Haftung.</p> 2151 2152 <p class="px-4 sm:px-0 mt-2">Der Herausgeber übernimmt ebenfalls keine Verantwortung und Haftung für 2153 die Inhalte 2154 und die 2155 Verfügbarkeit von Webseiten Dritter, die über externe Links dieser Website erreichbar sind. Für 2156 den Inhalt der verlinkten Seiten 2157 sind ausschliesslich deren Betreiber verantwortlich. Der Herausgeber distanziert sich damit 2158 ausdrücklich von allen Inhalten Dritter, die möglicherweise straf- oder haftungsrechtlich 2159 relevant sind oder gegen die guten Sitten verstossen.</p> 2160 2161 <h3 class="px-4 sm:px-0 mt-4">Ãnderungen</h3> 2162 2163 <p class="px-4 sm:px-0 mt-2">Wir können diese Datenschutzerklärung jederzeit ohne Vorankündigung 2164 anpassen. Es 2165 gilt die jeweils 2166 aktuelle, auf unserer Website publizierte Fassung. Soweit die Datenschutzerklärung Teil einer 2167 Vereinbarung mit Ihnen ist, 2168 werden wir Sie im Falle einer Aktualisierung
2168über die Ãnderung per E-Mail oder auf andere 2169 geeignete Weise informieren. </p> 2170 2171 <p class="px-4 sm:px-0 mt-2 mb-4 sm:mb-0">Schenkon, 23.06.2026</p> 2172 </div> 2173 </div> 2174 </div> 2175 </section> 2176 </div> 2177 </div> 2178 </div> 2179</div> </div> 2180 <div class="gap-2 mt-4"> 2181 2182<div class="flex flex-row justify-center lg:justify-start"> 2183 2184<button 2185 type="button" 2186 x-data="initAmCookieActionDispatcherBtn" 2187 data-dispatch-action="cookiebar-action-allow" 2188 @click.prevent="actiondispatchHandler" 2189 class="primary btn btn-primary mr-5 py-2 leading-5 text-sm" 2190> 2191 Schliessen</button> 2192 </div> 2193 </div> 2194</div> 2195 2196</dialog> 2197</div>
vendor: 110 bytes, lines 2197-2199
2197 2198 2199<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
2199<script data-cfasync="false"> 2200 'use strict'; 2201 2202 function initAmastyCookieBar() { 2203 return { 2204 ...hyva.modal({ 2205 duration: 150, 2206 transitionEnter: 'transform duration-150', 2207 transitionLeave: 'transform duration-150' 2208 }), 2209 eventListeners: { 2210 ['@close-cookie-bar']() { 2211 this.hide('am-cookie-bar'); 2212 }, 2213 ['@open-cookie-bar']() { 2214 this.show('am-cookie-bar'); 2215 this.$nextTick(() => hyva.trapFocus(this.modalElement)); 2216 }, 2217 ['@amasty-cookie-group-updated.window']() { 2218 const lastUpdate = Alpine.store('AmastyCookieGroups').lastUpdate; 2219 2220 if (this.isShowNotificationBar(this.firstShowProcess, lastUpdate)) { 2221 if (!this.opened['am-cookie-bar']) { 2222 this.show('am-cookie-bar'); 2223 window.dispatchEvent(new CustomEvent('amcookie-show-notification-bar')); 2224 } 2225 this.$nextTick(() => hyva.trapFocus(this.modalElement)); 2226 } else { 2227 !!this.opened['am-cookie-bar'] && 2228 this.hide('am-cookie-bar'); 2229 } 2230 } 2231 }, 2232 2233 firstShowProcess: '0', 2234 2235 /** 2236 * @returns {void} 2237 */ 2238 init: function () { 2239 window.isGdprCookieEnabled = true; 2240 Alpine.store('AmastyCookieGroups').updateGroupData(); 2241 this.modalElement = this.$refs['am-cookie-bar']; 2242 this.modalElement.setAttribute('aria-describedby', 'amcookie-bar-content'); 2243 }, 2244 2245 /** 2246 * @param {string|number} firstShowProcess 2247 * @param {number} lastUpdate 2248 * @returns {boolean} 2249 */ 2250 isShowNotificationBar: function (firstShowProcess, lastUpdate) { 2251 return (this.isNeedFirstShow(firstShowProcess, lastUpdate) && !hyva.getCookie('amcookie_allowed') 2252 || this.isNeedShowOnUpdate(lastUpdate)); 2253 }, 2254 2255 /** 2256 * @param {string|number} firstShowProcess 2257 * @param {number} lastUpdate 2258 * @returns {boolean} 2259 */ 2260 isNeedFirstShow: function (firstShowProcess, lastUpdate) { 2261 hyva.getBrowserStorage().setItem('amCookieBarFirstShowTime', lastUpdate); 2262 2263 if (firstShowProcess === '0') { 2264 return true; 2265 } 2266 2267 if (hyva.getBrowserStorage().getItem('amCookieBarFirstShow') !== '1') { 2268 hyva.getBrowserStorage().setItem('amCookieBarFirstShow', '1'); 2269 2270 return true; 2271 } 2272 2273 return false; 2274 }, 2275 2276 /** 2277 * @param {number} lastUpdate 2278 * @returns {boolean} 2279 */ 2280 isNeedShowOnUpdate: function (lastUpdate) { 2281 if (!lastUpdate) { 2282 return false; 2283 } 2284 2285 return this.isNeedShowAfterLastVisit(lastUpdate) || this.isNeedShowAfterLastAccept(lastUpdate); 2286 }, 2287 2288 /** 2289 * @param {number} lastUpdate 2290 * @returns {boolean} 2291 */ 2292 isNeedShowAfterLastVisit: function (lastUpdate) { 2293 let needToShowAfterLastVisit = 2294 lastUpdate > hyva.getBrowserStorage().getItem('amCookieBarFirstShowTime'); 2295 2296 if (needToShowAfterLastVisit) { 2297 hyva.getBrowserStorage().setItem('amCookieBarFirstShow', null); 2298 this.clearAmCookieAllowed(); 2299 } 2300 2301 return needToShowAfterLastVisit; 2302 }, 2303 2304 /** 2305 * @param {number} lastUpdate 2306 * @returns {boolean} 2307 */ 2308 isNeedShowAfterLastAccept: function (lastUpdate) { 2309 let needToShowAfterLastAccept = false;
2310 2311 if (hyva.getBrowserStorage().getItem('am-last-cookie-acceptance')) { 2312 needToShowAfterLastAccept = 2313 lastUpdate > hyva.getBrowserStorage().getItem('am-last-cookie-acceptance'); 2314 } 2315 2316 if (needToShowAfterLastAccept) { 2317 this.clearAmCookieAllowed(needToShowAfterLastAccept); 2318 } 2319 2320 return needToShowAfterLastAccept; 2321 }, 2322 2323 /** 2324 * @returns {void} 2325 */ 2326 closeCookieBarHandler: function () { 2327 this.$dispatch('close-cookie-bar'); 2328 }, 2329 2330 /** 2331 * @param {boolean} needToShowAfterLastAccept 2332 * @returns {void} 2333 */ 2334 clearAmCookieAllowed: function (needToShowAfterLastAccept = false) { 2335 hyva.setCookie('amcookie_allowed', '', -1, true); 2336 2337 const amastyCookieManager = window.amastyCookieManager ?? {}; 2338 const groupData = amastyCookieManager.getAmastyCookieGroupStorage?.()?.groupData ?? []; 2339 2340 if (needToShowAfterLastAccept && !!groupData.length) { 2341 const disallowedCookies = groupData 2342 .filter(group => !group.isEssential) 2343 .flatMap(group => group.cookies?.map(cookie => cookie.name) ?? []); 2344 2345 hyva.setCookie('amcookie_disallowed', disallowedCookies.join(',')); 2346 2347 amastyCookieManager.deleteDisallowedCookie?.(); 2348 amastyCookieManager.getAmastyCookieGroupStorage?.()?.updateGroupDataPermanently( 2349 groupData.map((group) => { 2350 return { 2351 ...group, 2352 checked: group.isEssential 2353 } 2354 }) 2355 ); 2356 } 2357 } 2358 }; 2359 } 2360 2361 window.addEventListener('alpine:init', () => Alpine.data('initAmastyCookieBar', initAmastyCookieBar), {once: true}); 2362</script>
2362 2363<div class="page-wrapper"><div class="m-siteNav placeholder"><!-- --></div><header class="page-header"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white 2364 contentarea" 2365 href="#contentarea"> 2366 <span> 2367 Direkt zum Inhalt </span> 2368</a> 2369<div class="header content"><div class="border-b border-gray-200"> 2370 <div class="container mt-0 md:mt-4"> 2371 <div class="checkout-logo row flex justify-center items-center pb-4 mt-2 lg:mt-auto pt-2 md:pt-0"> 2372 <div class="z-40"> 2373 <div class="w-full"> 2374 <a class="flex items-center text-xl font-medium tracking-wide text-gray-800 2375 no-underline hover:no-underline font-title" href="https://www.vedia.ch/" title="" aria-label="store logo"> 2376 <img src="https://www.vedia.ch/static/version1790063611/frontend/Vedia/hyva/de_CH/images/vedia-logo.svg" title="" alt="" class="h-7 xl:h-9" /> 2377 </a> 2378</div> 2379 </div> 2380 <div class="order-2 md:order-3 md:ml-auto absolute left-0 md:right-12 md:relative md:top-0 lg:right-0 w-full md:w-auto"> 2381 <div class="customer-header-wrapper flex items-center w-full justify-between md:justify-end px-[10px] md:px-0"> 2382 <div class="checkout-store-switcher hidden md:block pl-4 sm:pl-0 md:pr-0 md:pl-5 xl:ml-3" 2383 x-show="isOpen"> 2384 2385 <div x-data="refusionLanguageSwitcher" 2386 data-ui-id="language-switcher" 2387 x-on:click="toggle" 2388 x-on:click.away="close" 2389 class="switcher language switcher-language flex xl:relative text-sm" 2390 id="switcher-language"> 2391 2392 2393 <div class="flex lg:last:border-0 lg:last:border-t-0 lg:last:border-b-0 lg:last:border-gray-300 order-1 lg:order-none z-40"> 2394 <span class="flex items-center lg:font-bold px-4 py-3 text-gray transition cursor-pointer lg:cursor-auto uppercase xl:hidden" 2395 :class="getBackgroundClasses"> 2396 De <span class="relative xl:hidden top-px ml-1.5 transform transition rotate-90" 2397 :class="getRotateClasses"> 2398 <svg xmlns="http://www.w3.org/2000/svg" class="text-current" fill="none" viewBox="0 0 24 24" stroke="currentColor" width="14" height="14" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/><title>chevron-right</title></svg> 2399 </span> 2400 </span> 2401 </div> 2402 2403 2404 2405 2406 2407 2408 <div class="language-switcher flex-col xl:flex-row flex w-full order-2 xl:order-none absolute xl:relative left-0 z-40 bg-white text-black xl:bg-transparent transform translate-y-full xl:translate-y-0 shadow-3xl xl:shadow-none transition-all opacity-0 xl:opacity-100" 2409 :class="getPointersClasses" 2410 x-cloak> 2411 <a class="relative w-full z-50 p-4 xl:p-1 xl:py-0 text-black font-bold transition flex items-center justify-between" href="https://www.vedia.ch/fr/customer/account/login/referer/aHR0cHM6Ly93d3cudmVkaWEuY2gvY3VzdG9tZXIvYWNjb3VudC9pbmRleC8~/" onclick="window.gtag && gtag('event', 'Change-Language', {'event_category' : 'Header', 'event_label' : 've_fr'});" x-cloak> Deutsch <span class="text-primary xl:hidden"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="16" height="16" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="stroke-primary" role="img"><path d="M20 6 9 17l-5-5"/><title>check</title></svg> 2412</span></a> 2413 <span class="text-gray-500 hidden xl:inline-block">/</span> 2414 <a class="relative w-full z-50 text-black transition p-4 xl:p-1 xl:py-0" href="https://www.vedia.ch/fr/customer/account/login/referer/aHR0cHM6Ly93d3cudmVkaWEuY2gvY3VzdG9tZXIvYWNjb3VudC9pbmRleC8~/" onclick="window.gtag && gtag('event', 'Change-Language', {'event_category' : 'Header', 'event_label' : 've_fr'});" x-cloak> 2415 Français </a> 2416 2417 </div> 2418 2419 </div>
2420<script> 2421 'use strict'; 2422 function refusionLanguageSwitcher() { 2423 return { 2424 open: false, 2425 toggle() { 2426 this.open = !this.open; 2427 }, 2428 close() { 2429 this.open = false; 2430 }, 2431 getBackgroundClasses() { 2432 if (this.open) 2433 return 'bg-gray-200 xl:bg-white text-black xl:hidden'; 2434 else 2435 return ''; 2436 }, 2437 getRotateClasses() { 2438 if (this.open) 2439 return '-rotate-90'; 2440 else 2441 return 'rotate-90'; 2442 }, 2443 getPointersClasses() { 2444 if (this.open) 2445 return 'bottom-0 xl:bottom-0 xl:transform-none xl:transition-none opacity-100 pointer-events-auto'; 2446 else 2447 return '-bottom-4 xl:bottom-0 pointer-events-none xl:pointer-events-auto'; 2448 } 2449 } 2450 } 2451 window.addEventListener('alpine:init', () => {Alpine.data('refusionLanguageSwitcher', refusionLanguageSwitcher)}, {once: true}) 2452</script>
2452 2453 2454 </div> 2455 </div> 2456 </div> 2457 </div> 2458 </div> 2459</div> 2460 2461</div></header><main id="maincontent" class="page-main"><div class="page messages">
2461<script> 2462 function initMessages() { 2463 "use strict"; 2464 return { 2465 messages: window.mageMessages || [], 2466 isEmpty() { 2467 return this.messages.reduce( 2468 function (isEmpty, message) { 2469 return isEmpty && message === undefined 2470 }, true 2471 ) 2472 }, 2473 hasMessages() { 2474 return !this.isEmpty(); 2475 }, 2476 hasMessage() { 2477 return !!this.message; 2478 }, 2479 removeMessage() { 2480 this.messages[this.index] = undefined; 2481 }, 2482 addMessages(messages, hideAfter) { 2483 messages.map((message) => { 2484 this.messages = this.messages.concat(message); 2485 if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { 2486 hideAfter = window.defaultSuccessMessageTimeout; 2487 } 2488 if (hideAfter) { 2489 this.setHideTimeOut(this.messages.length -1, hideAfter); 2490 } 2491 }); 2492 }, 2493 setHideTimeOut(messageIndex, hideAfter) { 2494 setTimeout((messageIndex) => { 2495 this.removeMessage(messageIndex); 2496 }, hideAfter, messageIndex); 2497 }, 2498 eventListeners: { 2499 ['@messages-loaded.window'](event) { 2500 this.addMessages(event.detail.messages, event.detail.hideAfter) 2501 }, 2502 ['@private-content-loaded.window'](event) { 2503 const data = event.detail.data; 2504 if ( 2505 data.messages && 2506 data.messages.messages && 2507 data.messages.messages.length 2508 ) { 2509 this.addMessages(data.messages.messages); 2510 } 2511 }, 2512 ['@clear-messages.window']() { 2513 this.messages = []; 2514 } 2515 }, 2516 getMessageUiId() { 2517 return 'message-' + this.message.type; 2518 } 2519 } 2520 } 2521 2522 window.addEventListener('alpine:init', () => Alpine.data('initMessages', initMessages), {once: true}) 2523</script>
2523 2524<section id="messages" 2525 x-data="initMessages" 2526 x-bind="eventListeners" 2527 aria-live="assertive" 2528 role="alert" 2529> 2530 <template x-if="hasMessages"> 2531 <div class="w-full"> 2532 <div role="alert" class="messages container mx-auto"> 2533 <template x-for="(message, index) in messages" :key="index"> 2534 <div> 2535 <template x-if="hasMessage"> 2536 <div class="message px-5 py-3 mt-8 sm:mt-4 md:-mt-4 lg:mt-4 xl:mt-0 rounded-none shadow-none" :class="message.type" 2537 :ui-id="getMessageUiId" 2538 > 2539 <span x-html="message.text"></span> 2540 <a href="#" class="close cursor-pointer text-white" title="close" 2541 @click.prevent="removeMessage"> 2542 <svg class="fill-white" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" 2543 width="18" height="18" viewBox="0 0 18 18"> 2544 <path 2545 d="M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 2546 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"> 2547 </path> 2548 </svg> 2549 </a> 2550 </div> 2551 </template> 2552 </div> 2553 </template> 2554 </div> 2555 </div> 2556 </template> 2557</section> 2558</div><div class="columns"><div class="column main"><div id="customer-login-container" class="login-container container"><div class="wrap flex flex-wrap justify-center mx-auto w-full"><div class="w-full md:w-[540px] py-10 px-4 md:py-8 md:px-6 bg-gray-100 rounded-lg"> 2559 <div aria-labelledby="block-customer-login-heading"> 2560 <form class="form form-login w-full" 2561 action="https://www.vedia.ch/customer/account/loginPost/referer/aHR0cHM6Ly93d3cudmVkaWEuY2gvY3VzdG9tZXIvYWNjb3VudC9pbmRleC8~/" 2562 method="post" 2563 x-data="initCustomerLoginForm()" 2564 @submit.prevent="submitForm()" 2565 id="customer-login-form"> 2566 <input name="form_key" type="hidden" value="uojecUerWSEOGZi3" /> <fieldset class="fieldset login flex flex-col gap-4"> 2567 <legend class="mb-4"> 2568 <h2 class="text-2xl font-bold title-font text-black" x-text="mainTitle"></h2> 2569 </legend> 2570 <div class="text-gray-blue w-full" x-text="infoText" x-show="infoText"></div> 2571 <div class="field email required !my-2"> 2572 <label class="label gap-1" for="email"><span>E-Mail</span></label> 2573 <div class="control relative"> 2574 <input name="login[username]" 2575 class="form-input w-full mb-1" 2576 value="" 2577 autocomplete="off" 2578 @blur="validateEmail()" 2579 @keydown.enter.prevent="nextStep()" 2580 id="email" 2581 type="email" 2582 title="E-Mail"/> 2583 <p x-show="emailError" x-text="emailError" class="text-sm text-red-600 absolute"></p> 2584 </div> 2585 </div> 2586 2587 <!-- Show two buttons when passkey is detected --> 2588 <div x-show="step === 2 && hasPasskey" class="space-y-4" style="display:none;"> 2589 <div class="flex flex-col md:flex-row gap-3"> 2590 <button type="button" @click="loginWithPassword()" class="btn btn-secondary text-base w-full justify-center"> 2591 <span>Mit Passwort anmelden</span> 2592 </button> 2593 <button type="button" @click="loginWithPasskey()" class="btn btn-primary text-base w-full white justify-center ">
2594 <span>Mit Passkey anmelden</span> 2595 </button> 2596 </div> 2597 <a @click.prevent="goBack()" class="w-full flex text-center items-centar cursor-pointer back-button items-center gap-2"> 2598 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 21" fill="none" aria-hidden="true"> 2599<path fill-rule="evenodd" clip-rule="evenodd" d="M16.875 10.5503C16.875 10.8955 16.5952 11.1753 16.25 11.1753L5.25888 11.1753L9.81694 15.7334C10.061 15.9774 10.061 16.3732 9.81694 16.6172C9.57286 16.8613 9.17714 16.8613 8.93306 16.6172L3.30806 10.9922C3.06398 10.7482 3.06398 10.3524 3.30806 10.1084L8.93306 4.48335C9.17714 4.23927 9.57286 4.23927 9.81694 4.48335C10.061 4.72743 10.061 5.12316 9.81694 5.36723L5.25888 9.92529L16.25 9.92529C16.5952 9.92529 16.875 10.2051 16.875 10.5503Z" fill="#D72B8A"/> 2600</svg> 2601 <span>Zurück</span> 2602 </a> 2603 </div> 2604 2605 <div x-show="step === 2 && !hasPasskey" style="display:none;"> 2606 <div class="field password required"> 2607 <div class="flex justify-between"> 2608 <label for="pass" class="label"><span>Passwort</span></label> 2609 <a class="text-primary" href="https://www.vedia.ch/customer/account/forgotpassword/"><span>Passwort vergessen?</span> 2610 </a> 2611 </div> 2612 2613 <div class="control"> 2614 <input name="login[password]" 2615 class="form-input w-full" 2616 :class="{ 'border-red-600': passwordError }" 2617 type="password" 2618 autocomplete="off" 2619 id="pass" 2620 x-effect="if (step === 2 && !hasPasskey) $nextTick(() => $el.focus())" 2621 @blur="validatePassword()" 2622 @input="passwordError = ''" 2623 title="Passwort"/> 2624 <p x-show="passwordError" x-text="passwordError" class="mt-1 text-sm text-red-600"></p> 2625 </div> 2626 </div> 2627 2628 <div x-data="{open: false}" id="remember-me-box" class="field choice persistent m-rememberMe"> 2629 <div class="m-rememberWrapper flex justify-between w-full items-center flex-wrap"> 2630 <input type="checkbox" name="persistent_remember_me" class="checkbox" id="remember_mehF6NHtwrRH" checked="checked" title="Angemeldet bleiben" /> 2631 <label for="remember_mehF6NHtwrRH" class="label text-sm"> 2632 2633 <span>Angemeldet bleiben</span></label> 2634 2635 <p @click="open = !open" class="a-link tooltip toggle text-sm flex items-center" :class="open ? 'text-primary': 'text-blue'"> 2636 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="fill-current mr-2" width="20" height="20" role="img"><g fill="none" fill-rule="evenodd"><circle fill="currentColor" cx="12" cy="12" r="12"/><path d="M12 7a1 1 0 1 0 1 1c0-.551-.449-1-1-1z" fill="#FFF"/><rect fill="#FFF" transform="matrix(-1 0 0 1 24 0)" x="11" y="10" width="2" height="8" rx="1"/></g><title>info</title></svg> 2637 <span :class="open ? 'text-primary' : 'text-blue'" class="cursor-pointer hover:cursor-pointer"> 2638 Was ist das? </span> 2639 </p> 2640 <div class="tooltip content mage-error p-2 w-full max-w-full border border-primary bg-gray-100 mt-3" :class="open ? 'block' : 'hidden'"> 2641 <p> 2642 Wenn Sie 'Angemeldet bleiben' anklicken, bleiben Sie eine Woche lang automatisch mit Ihren Logindaten auf diesem Computer bei Lehner Versand eingeloggt. Ihr Warenkorb bleibt erhalten, auch wenn Sie den Browser schliessen oder mehr als einen Tag keine Aktion mehr auf dieser Seite durchführen. Dies ist jedoch nur der Fall, sofern Sie sich nicht über 'Abmelden' ausloggen. Aus Sicherheitsgründen raten wir Ihnen jedoch, dieses automatische Login nicht zu nutzen, wenn Sie an einem für andere Nutzer zugänglichen Computer sitzen (z.B. in einem Internetcafé) oder einen öffentlichen Rechner nutzen.</p> 2643 <div class="button-wrapper"> 2644 <div class="js-toogleRemover a-linkArrow -up text-primary fill-primary" @click="open = !open" :class="open ? 'text-primary': 'text-blue'"> 2645 <div class="transform -rotate-90 inline-block text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 185.343 185.343" fill="currentColor" style="enable-background:new 0 0 185.343 185.343" xml:space="preserve" class="fill-current" width="10" height="10" role="img"><path d="M51.707 185.343a10.692 10.692 0 0 1-7.593-3.149 10.724 10.724 0 0 1 0-15.175l74.352-74.347L44.114 18.32c-4.194-4.194-4.194-10.987 0-15.175 4.194-4.194 10.987-4.194 15.18 0l81.934 81.934c4.194 4.194 4.194 10.987 0 15.175l-81.934 81.939a10.678 10.678 0 0 1-7.587 3.15z"/><title>chevron</title></svg> 2646</div>
2647 <span>Schliessen</span></div> 2648 </div> 2649 </div> 2650 </div> 2651</div> 2652 <div class="control"> 2653 <input type="hidden" 2654 value="" 2655 name="g-recaptcha-response" 2656 > 2657</div> 2658 </div> 2659 2660 <div class="flex justify-between items-center w-full mt-1"> 2661 <button x-show="step === 1" type="button" @click="nextStep()" class="btn gap-2 btn-primary w-full max-w-full md:max-w-[180px] justify-center white" :disabled="isChecking"> 2662 <span x-text="'Weiter'"></span> 2663 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" aria-hidden="true"> 2664<path d="M4.25 10.5503L16.75 10.5503M16.75 10.5503L11.125 4.92529M16.75 10.5503L11.125 16.1753" stroke="#D72B8A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2665</svg> 2666 </button> 2667 <a x-show="step === 2 && !hasPasskey" @click.prevent="goBack()" class="w-full flex gap-2 items-center text-center cursor-pointer back-button"> 2668 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 21" fill="none" aria-hidden="true"> 2669<path fill-rule="evenodd" clip-rule="evenodd" d="M16.875 10.5503C16.875 10.8955 16.5952 11.1753 16.25 11.1753L5.25888 11.1753L9.81694 15.7334C10.061 15.9774 10.061 16.3732 9.81694 16.6172C9.57286 16.8613 9.17714 16.8613 8.93306 16.6172L3.30806 10.9922C3.06398 10.7482 3.06398 10.3524 3.30806 10.1084L8.93306 4.48335C9.17714 4.23927 9.57286 4.23927 9.81694 4.48335C10.061 4.72743 10.061 5.12316 9.81694 5.36723L5.25888 9.92529L16.25 9.92529C16.5952 9.92529 16.875 10.2051 16.875 10.5503Z" fill="#D72B8A"/> 2670</svg> 2671 <span>Zurück</span> 2672 </a> 2673 <button x-show="step === 2 && !hasPasskey" type="button" @click="submitForm()" class="btn btn-primary w-full max-w-full md:max-w-[180px] justify-center white" name="send" style="display:none;"> 2674 <span>Anmelden</span> 2675 </button> 2676 </div> 2677 2678 <div> 2679 <template x-if="displayErrorMessage"> 2680 <p class="text-red flex items-center"> 2681 <span class="inline-block w-8 h-8 mr-3"> 2682 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" 2683 stroke="currentColor"> 2684 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 2685 d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/> 2686 </svg> 2687 </span> 2688 <template x-for="errorMessage in errorMessages"> 2689 <span x-html="errorMessage"></span> 2690 </template> 2691 </p> 2692 </template> 2693 </div> 2694 </fieldset> 2695 </form> 2696 </div> 2697 <div class="w-full"> 2698 <p class="my-4 text-sm text-gray-900 px-5 text-recaptcha"> 2699 Dieses Formular ist durch reCAPTCHA geschützt - es gelten die <a class="underline" href="https://policies.google.com/privacy" target="_blank" rel="noopener">Google-Datenschutzbestimmungen</a> und <a class="underline" href="https://policies.google.com/terms" target="_blank" rel="noopener">Geschäftsbedingungen</a>.</p> 2700 </div> 2701
2701<script> 2702 function initCustomerLoginForm() { 2703 return { 2704 errors: 0, 2705 emailError: '', 2706 passwordError: '', 2707 hasCaptchaToken: 0, 2708 displayErrorMessage: false, 2709 errorMessages: [], 2710 step: 1, 2711 mainTitle: 'Anmelden oder Benutzerkonto erstellen ', 2712 infoText: 'Geben Sie Ihre E-Mail-Adresse ein, um sich anzumelden oder ein Benutzerkonto zu erstellen.', 2713 hasPasskey: false, 2714 isChecking: false, 2715 checkEmailUrl: 'https://www.vedia.ch/refusion_webauthn/ajax/checkEmail/', 2716 createAccountUrl: 'https://www.vedia.ch/customer/account/create/', 2717 setErrorMessages(messages) { 2718 this.errorMessages = [messages]; 2719 this.displayErrorMessage = this.errorMessages.length; 2720 if (this.step === 2) { 2721 this.passwordError = 'Bitte\u0020geben\u0020Sie\u0020ein\u0020g\u00FCltiges\u0020Passwort\u0020ein'; 2722 } 2723 }, 2724 nextStep() { 2725 if (!this.validateEmail()) return; 2726 this.isChecking = true; 2727 const email = document.querySelector('#email').value; 2728 this.checkIfCustomerIsLogged(email) 2729 .catch(err => { 2730 console.error('Customer check failed:', err); 2731 this.setErrorMessages('An error occurred. Please try again.'); 2732 this.isChecking = false; 2733 }); 2734 }, 2735 validateEmail() { 2736 const emailInput = document.querySelector('#email'); 2737 if (!emailInput.value.trim() || !emailInput.checkValidity()) { 2738 this.emailError = 'Bitte\u0020g\u00FCltige\u0020E\u002DMail\u0020Adresse\u0020eingeben'; 2739 return false; 2740 } 2741 this.emailError = ''; 2742 return true; 2743 }, 2744 validatePassword() { 2745 const passInput = document.querySelector('#pass'); 2746 if (!passInput.value.trim()) { 2747 this.passwordError = 'Bitte\u0020geben\u0020Sie\u0020ein\u0020g\u00FCltiges\u0020Passwort\u0020ein'; 2748 return false; 2749 } 2750 this.passwordError = ''; 2751 return true; 2752 }, 2753 checkIfCustomerIsLogged(email) { 2754 return fetch(this.checkEmailUrl, { 2755 method: 'POST', 2756 headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, 2757 body: new URLSearchParams({ email }) 2758 }) 2759 .then(response => response.json()) 2760 .then(async customerCheckResult => { 2761 if (customerCheckResult.success && !customerCheckResult.exists) { 2762 // Customer doesn't exist, redirect to registration 2763 window.location.href = this.createAccountUrl + '?email=' + encodeURIComponent(email); 2764 return; 2765 } 2766 2767 this.mainTitle = 'Willkommen zurück!'; 2768 this.infoText = ''; 2769 2770 const result = await new Promise((resolve, reject) => { 2771 document.dispatchEvent(new CustomEvent('webauthn:check', { 2772 detail: { email: email, resolve, reject } 2773 })); 2774 }); 2775 2776 if (result.success && result.enrolled) { 2777 this.hasPasskey = true; 2778 } 2779 2780 this.step = 2; 2781 this.isChecking = false; 2782 }); 2783 }, 2784 async loginWithPasskey() { 2785 const emailInput = document.querySelector('#email'); 2786 const email = emailInput.value; 2787 2788 try { 2789 await new Promise((resolve, reject) => { 2790 document.dispatchEvent(new CustomEvent('webauthn:login', { 2791 detail: { email: email, resolve, reject } 2792 })); 2793 }); 2794 } catch (error) { 2795 2796 } 2797 }, 2798 loginWithPassword() { 2799 this.hasPasskey = false;
2800 }, 2801 submitForm() { 2802 const $form = document.querySelector('#customer-login-form'); 2803 if (!this.hasCaptchaToken) { 2804 this.errors = 1; 2805 2806 const lockSubmitButton = () => { 2807 $form.querySelector('[type="submit"]')?.setAttribute('disabled', true); 2808 }; 2809 2810 const failCaptcha = (errorMessage, exception = null) => { 2811 this.errors = 1; 2812 lockSubmitButton(); 2813 2814 if (this.setErrorMessages) { 2815 this.setErrorMessages([errorMessage]); 2816 this.displayErrorMessage = true; 2817 } else { 2818 window.dispatchMessages && window.dispatchMessages([{ type: "error", text: errorMessage }], 5000); 2819 } 2820 2821 if (exception) { 2822 console.error( 2823 exception || 2824 'An unknown error occurred during ReCaptcha validation. Are the tokens and the domain correctly set up in the Google console?' 2825 ); 2826 } 2827 }; 2828 2829 const executeGreCaptcha = () => { 2830 grecaptcha.ready(() => { 2831 grecaptcha.execute( 2832 '6LeIilUeAAAAAI0woiL9D4LhTYABSJ1fZdBmfMJj', 2833 {action: 'submit'} 2834 ).then((token) => { 2835 const tokenElement = $form['g\u002Drecaptcha\u002Dresponse'] 2836 || $form.querySelector('input[name="g-recaptcha-response"]'); 2837 2838 if (tokenElement && token && token.length > 0) { 2839 tokenElement.value = token; 2840 this.errors = 0; 2841 this.hasCaptchaToken = 1; 2842 (this.submitForm || $form.submit).call(this); 2843 } else { 2844 failCaptcha( 2845 tokenElement 2846 ? 'ReCaptcha\u0020validation\u0020failed.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020try\u0020again.' 2847 : 'Your\u0020form\u0020does\u0020not\u0020have\u0020the\u0020required\u0020fields\u0020for\u0020recaptcha\u0020to\u0020work.' 2848 ); 2849 } 2850 }).catch((exception) => { 2851 failCaptcha( 2852 'ReCaptcha\u0020validation\u0020failed\u0020due\u0020to\u0020a\u0020technical\u0020error.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020try\u0020again.', 2853 exception 2854 ); 2855 }); 2856 }); 2857 }; 2858 2859 if (window.grecaptcha) { 2860 executeGreCaptcha(); 2861 } else { 2862 const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LeIilUeAAAAAI0woiL9D4LhTYABSJ1fZdBmfMJj&lang=de"; 2863 const script = document.createElement('script'); 2864 script.setAttribute('type', 'text/javascript'); 2865 script.setAttribute('src', recaptchaUrl); 2866 document.head.appendChild(script); 2867 2868 script.addEventListener('load', executeGreCaptcha, false); 2869 } 2870 } 2871 2872 if (this.errors === 0) { 2873 if (!this.validatePassword()) return; 2874 $form.submit(); 2875 } 2876 }, 2877 goBack() { 2878 this.step = 1; 2879 this.hasPasskey = false; 2880 this.mainTitle = 'Anmelden oder Benutzerkonto erstellen '; 2881 this.infoText = 'Geben Sie Ihre E-Mail-Adresse ein, um sich anzumelden oder ein Benutzerkonto zu erstellen.'; 2882 } 2883 } 2884 } 2885 </script>
2885 2886</div> 2887 2888</div></div></div></div></main><footer class="page-footer"><div class="footer content"><div class="bg-white flex items-center justify-center py-8 gap-4 w-full"> 2889 <a href="/i-impressum/" 2890 class="text-gray text-sm font-normal"> 2891 Impressum 2892</a> 2893<a href="/i-sicherheit-datenschutz/" 2894 class="text-gray text-sm font-normal"> 2895 Datenschutz 2896</a></div> 2897 2898</div></footer>
2898<script> 2899 (function () { 2900 const badgeDiv = document.getElementById("google_customer_review_badge_general"); 2901 if (badgeDiv !== null) 2902 { 2903 const badge = document.createElement("g:ratingbadge"); 2904 badge.setAttribute("merchant_id", "100551455"); 2905 2906 badgeDiv.appendChild(badge); 2907 } 2908 })(); 2909</script>
2909 2910
2911<script src="https://apis.google.com/js/platform.js" async defer></script>
2911 2912
2913<script> 2914 window.___gcfg = { 2915 lang: 'de' 2916 }; 2917</script>
vendor: 1 bytes, line 2917
2917
2918<script> 2919 if (typeof Alpine !== 'undefined' && Alpine.data) { 2920 Alpine.data('cmsAccordionState', () => ({ 2921 selected: false 2922 })); 2923 } else { 2924 document.addEventListener('alpine:init', () => { 2925 Alpine.data('cmsAccordionState', () => ({ 2926 selected: false 2927 })); 2928 }); 2929 } 2930</script>
2930 2931
2932<script> 2933 (() => { 2934 const classBindings = { 2935 accordionClass: (root, element, selected) => selected 2936 ? element.dataset.selectedClass || root.dataset.selectedClass 2937 : element.dataset.unselectedClass || root.dataset.unselectedClass, 2938 marginClass: (root, element, selected) => selected ? 'mb-4' : 'mb-0', 2939 transparentHeaderClass: (root, element, selected) => selected 2940 ? 'bg-white sm:bg-transparent' 2941 : 'bg-gray-100 sm:bg-transparent', 2942 borderedTransparentHeaderClass: (root, element, selected) => selected 2943 ? 'bg-white sm:bg-transparent border-b-0 border-x-0' 2944 : 'bg-gray-100 sm:bg-transparent border-b border-x', 2945 primaryBorderedTransparentHeaderClass: (root, element, selected) => selected 2946 ? 'bg-white sm:bg-transparent border-b-0 border-x-0' 2947 : 'bg-primary-lighter sm:bg-transparent border-b border-x', 2948 borderXTransparentHeaderClass: (root, element, selected) => selected 2949 ? 'bg-white sm:bg-transparent border-x-0' 2950 : 'bg-gray-100 sm:bg-transparent border-x' 2951 }; 2952 2953 const splitClasses = value => (value || '').split(/\s+/).filter(Boolean); 2954 const findAll = (root, selector) => [ 2955 ...(root.matches(selector) ? [root] : []), 2956 ...root.querySelectorAll(selector) 2957 ]; 2958 2959 const setClasses = (element, selectedClasses, unselectedClasses, selected) => { 2960 element.classList.remove(...splitClasses(selectedClasses), ...splitClasses(unselectedClasses)); 2961 element.classList.add(...splitClasses(selected ? selectedClasses : unselectedClasses)); 2962 }; 2963 2964 const updateAccordion = root => { 2965 const selected = root.dataset.cmsAccordionSelected === 'true'; 2966 2967 findAll(root, '[data-cms-accordion-class]').forEach(element => { 2968 const binding = element.dataset.cmsAccordionClass; 2969 const resolver = classBindings[binding]; 2970 2971 if (!resolver) { 2972 return; 2973 } 2974 2975 setClasses( 2976 element, 2977 resolver(root, element, true), 2978 resolver(root, element, false), 2979 selected 2980 ); 2981 }); 2982 2983 findAll(root, '[data-cms-accordion-icon]').forEach(icon => { 2984 icon.classList.toggle('-rotate-180', selected); 2985 icon.classList.toggle('rotate-0', !selected); 2986 }); 2987 2988 findAll(root, '[data-cms-accordion-content]').forEach(content => { 2989 content.style.maxHeight = selected ? `${content.scrollHeight}px` : ''; 2990 content.removeAttribute('x-cloak'); 2991 }); 2992 }; 2993 2994 const initAccordion = root => { 2995 if (root.dataset.cmsAccordionInitialized === 'true') { 2996 updateAccordion(root); 2997 return; 2998 } 2999 3000 root.dataset.cmsAccordionInitialized = 'true'; 3001 root.dataset.cmsAccordionSelected = root.dataset.cmsAccordionSelected || 'false'; 3002 3003 findAll(root, '[data-cms-accordion-toggle]').forEach(toggle => { 3004 toggle.addEventListener('click', () => { 3005 root.dataset.cmsAccordionSelected = root.dataset.cmsAccordionSelected === 'true' ? 'false' : 'true'; 3006 updateAccordion(root); 3007 }); 3008 }); 3009 3010 updateAccordion(root); 3011 }; 3012 3013 const initAccordions = () => { 3014 document.querySelectorAll('[data-cms-accordion]').forEach(initAccordion); 3015 }; 3016 3017 const updateFooterCollapse = root => { 3018 const opened = root.dataset.cmsFooterOpened === 'true'; 3019 3020 findAll(root, '[data-cms-footer-icon]').forEach(icon => { 3021 icon.classList.toggle('rotate-180', opened); 3022 icon.classList.toggle('justify-end', opened); 3023 }); 3024 3025 findAll(root, '[data-cms-footer-content]').forEach(content => { 3026 content.classList.remove('block', 'hidden', 'sm:block'); 3027 content.classList.add(...splitClasses(opened ? 'block' : 'hidden sm:block')); 3028 }); 3029 3030 findAll(root, '[data-cms-footer-class-open]').forEach(element => { 3031 const openClasses = element.dataset.cmsFooterClassOpen;
3032 const closedClasses = element.dataset.cmsFooterClassClosed; 3033 3034 element.classList.remove(...splitClasses(openClasses), ...splitClasses(closedClasses)); 3035 element.classList.add(...splitClasses(opened ? openClasses : closedClasses)); 3036 }); 3037 }; 3038 3039 const initFooterCollapse = root => { 3040 if (root.dataset.cmsFooterInitialized === 'true') { 3041 updateFooterCollapse(root); 3042 return; 3043 } 3044 3045 root.dataset.cmsFooterInitialized = 'true'; 3046 root.dataset.cmsFooterOpened = root.dataset.cmsFooterOpened || 'false'; 3047 3048 findAll(root, '[data-cms-footer-toggle]').forEach(toggle => { 3049 toggle.addEventListener('click', () => { 3050 root.dataset.cmsFooterOpened = root.dataset.cmsFooterOpened === 'true' ? 'false' : 'true'; 3051 updateFooterCollapse(root); 3052 }); 3053 }); 3054 3055 updateFooterCollapse(root); 3056 }; 3057 3058 const initFooterCollapses = () => { 3059 document.querySelectorAll('[data-cms-footer-collapse]').forEach(initFooterCollapse); 3060 }; 3061 3062 const initCmsInteractions = () => { 3063 initAccordions(); 3064 initFooterCollapses(); 3065 }; 3066 3067 document.addEventListener('DOMContentLoaded', initCmsInteractions); 3068 window.addEventListener('load', initCmsInteractions); 3069 window.addEventListener('private-content-loaded', initCmsInteractions); 3070 window.addEventListener('resize', initCmsInteractions); 3071 })(); 3072</script>
3072 3073
3074<script> 3075 (() => { 3076 function src_default(Alpine) { 3077 Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 3078 let evaluate = evaluateLater(expression); 3079 let options = { 3080 rootMargin: getRootMargin(modifiers), 3081 threshold: getThreshold(modifiers) 3082 }; 3083 let observer = new IntersectionObserver((entries) => { 3084 entries.forEach((entry) => { 3085 if (entry.isIntersecting === (value === "leave")) 3086 return; 3087 evaluate(); 3088 modifiers.includes("once") && observer.disconnect(); 3089 }); 3090 }, options); 3091 observer.observe(el); 3092 cleanup(() => { 3093 observer.disconnect(); 3094 }); 3095 })); 3096 } 3097 function getThreshold(modifiers) { 3098 if (modifiers.includes("full")) 3099 return 0.99; 3100 if (modifiers.includes("half")) 3101 return 0.5; 3102 if (!modifiers.includes("threshold")) 3103 return 0; 3104 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 3105 if (threshold === "100") 3106 return 1; 3107 if (threshold === "0") 3108 return 0; 3109 return Number(`.${threshold}`); 3110 } 3111 function getLengthValue(rawValue) { 3112 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 3113 return match ? match[1] + (match[2] || "px") : void 0; 3114 } 3115 function getRootMargin(modifiers) { 3116 const key = "margin"; 3117 const fallback = "0px 0px 0px 0px"; 3118 const index = modifiers.indexOf(key); 3119 if (index === -1) 3120 return fallback; 3121 let values = []; 3122 for (let i = 1; i < 5; i++) { 3123 values.push(getLengthValue(modifiers[index + i] || "")); 3124 } 3125 values = values.filter((v) => v !== void 0); 3126 return values.length ? values.join(" ").trim() : fallback; 3127 } 3128 3129 document.addEventListener("alpine:init", () => { 3130 window.Alpine.plugin(src_default); 3131 }); 3132 })(); 3133 //# sourceURL=alpine-intersect.js 3134</script>
3134 3135 3136
3137<script type="module" 3138 src="https://www.vedia.ch/static/version1790063611/frontend/Vedia/hyva/de_CH/Hyva_Theme/js/alpine3.min.js" 3139 defer 3140 crossorigin 3141></script>
vendor: 1 bytes, line 3141
3141
3142<script> 3143 function dispatchMessages(messages, hideAfter) { 3144 const messagesEvent = new CustomEvent("messages-loaded", { 3145 detail: { 3146 messages: messages, 3147 hideAfter: hideAfter 3148 } 3149 }); 3150 window.dispatchEvent(messagesEvent); 3151 } 3152 3153 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 3154 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 3155 } 3156 3157 (function( hyva, undefined ) { 3158 3159 hyva.initFormKey = () => { 3160 if (typeof hyva.getFormKey !== 'function') return; 3161 3162 const formKey = hyva.getFormKey(); 3163 if (!formKey) return; 3164 3165 document.querySelectorAll('input[name="form_key"]').forEach((input) => { 3166 input.value = formKey; 3167 }); 3168 } 3169 3170 hyva.initMessages = () => { 3171 try { 3172 const messages = hyva.getCookie('mage-messages'); 3173 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 3174 3175 dispatchMessages(window.mageMessages); 3176 3177 // empty `mage-messages` cookie 3178 const skipSetDomain = true; 3179 hyva.setCookie('mage-messages','', -1, skipSetDomain); 3180 3181 } catch (error) { 3182 console.warn('Error parsing Cookie Messages:', error); 3183 } 3184 } 3185 3186 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 3187 3188 window.addEventListener('pageshow', (event) => { 3189 if (event.persisted) { 3190 hyva.initFormKey(); 3191 } 3192 }); 3193 3194 hyva.alpineInitialized(hyva.initMessages) 3195 }( window.hyva = window.hyva || {} )); 3196 //# sourceURL=hyva-cookies.js 3197</script>
vendor: 1 bytes, line 3197
3197
3198<script> 3199 'use strict'; 3200 { 3201 const private_content_key = 'mage-cache-storage'; 3202 const private_content_expire_key = 'mage-cache-timeout'; 3203 const private_content_version_key = 'private_content_version'; 3204 const section_data_ids_key = 'section_data_ids'; 3205 const mage_cache_session_id_key = 'mage-cache-sessid'; 3206 const last_visited_store_key = 'last_visited_store'; 3207 3208 const ttl = 3600; 3209 3210 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 3211 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 3212 } 3213 3214 function loadSectionData () { 3215 const browserStorage = hyva.getBrowserStorage(); 3216 if (!browserStorage) { 3217 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 3218 [{ 3219 type: "warning", 3220 text: "Please enable LocalStorage in your browser." 3221 }] 3222 ); 3223 return; 3224 } 3225 try { 3226 let isInvalid = false; 3227 3228 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 3229 isInvalid = true; 3230 } 3231 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 3232 3233 if (window.location.pathname === '/checkout/onepage/success/') { 3234 isInvalid = true; 3235 } 3236 3237 if (!hyva.getCookie(mage_cache_session_id_key)) { 3238 isInvalid = true; 3239 browserStorage.removeItem(private_content_key); 3240 const skipSetDomain = true; 3241 const days = false; 3242 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 3243 } 3244 3245 const cookieVersion = hyva.getCookie(private_content_version_key); 3246 const storageVersion = browserStorage.getItem(private_content_version_key); 3247 3248 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 3249 isInvalid = true; 3250 } 3251 3252 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 3253 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 3254 browserStorage.removeItem(private_content_key); 3255 } 3256 3257 if (isInvalid && cookieVersion) { 3258 fetchPrivateContent([]); 3259 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 3260 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 3261 if ( 3262 privateContent && 3263 privateContentExpires && 3264 privateContent.cart && 3265 privateContent.customer 3266 ) { 3267 dispatchPrivateContent(privateContent); 3268 } else { 3269 fetchPrivateContent([]); 3270 } 3271 } else { 3272 if (document.getElementById('default-section-data')) { 3273 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 3274 dispatchPrivateContent(privateContent); 3275 } else { 3276 dispatchPrivateContent({}); 3277 } 3278 } 3279 3280 } catch (error) { 3281 console.warn('Error retrieving Private Content:', error); 3282 } 3283 } 3284 3285 hyva.alpineInitialized(loadSectionData) 3286 window.addEventListener('reload-customer-section-data', loadSectionData); 3287 3288 window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data); 3289 3290 function dispatchPrivateContent(data) { 3291 3292 const privateContentEvent = new CustomEvent("private-content-loaded", { 3293 detail: { 3294 data: window.processSectionDataBeforeDispatch(data) 3295 } 3296 }); 3297 window.dispatchEvent(privateContentEvent); 3298 } 3299 3300 function fetchPrivateContent(sections) { 3301 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 3302 method: 'GET', 3303 headers: { 3304 'Content-Type': 'application/json', 3305 'X-Requested-With': 'XMLHttpRequest' 3306 } 3307 }) 3308 .then(response => response.ok && response.json()) 3309 .then( 3310 data => { 3311 if (data) { 3312 try { 3313 const browserStorage = hyva.getBrowserStorage(); 3314 3315 // merge new data preserving non-invalidated sections 3316 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 3317 3318 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 3319 delete oldSectionData['checkout-data']; 3320 } 3321 const newSectionData = Object.assign(oldSectionData, data); 3322 3323 dispatchPrivateContent(newSectionData); 3324 3325 // don't persist messages, they've been dispatched already 3326 if (newSectionData.messages && newSectionData.messages.messages ) { 3327 newSectionData.messages.messages = []; 3328 } 3329 3330 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 3331 3332 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 3333 browserStorage.setItem(private_content_expire_key, expiresAt); 3334 3335 const newCookieVersion = hyva.getCookie(private_content_version_key); 3336 browserStorage.setItem(private_content_version_key, newCookieVersion); 3337 3338 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 3339 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 3340 hyva.setCookie( 3341 section_data_ids_key, 3342 JSON.stringify( 3343 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 3344 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 3345 return sectionDataIds; 3346 }, {}) 3347 ), 3348 false, 3349 true 3350 ); 3351 } catch (error) { 3352 console.warn("Couldn't store privateContent", error); 3353 } 3354 } 3355 } 3356 ); 3357 } 3358 } 3359</script>
vendor: 1 bytes, line 3359
3359
3360<script> 3361 (() => { 3362 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 3363 })() 3364</script>
vendor: 1 bytes, line 3364
3364
3365<script> 3366 (events => { 3367 const dispatchUserInteractionEvent = () => { 3368 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 3369 window.dispatchEvent(new Event('init-external-scripts')) 3370 }; 3371 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 3372 })(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown']); 3373 //# sourceURL=hyva-init-external-scripts.js 3374</script>
vendor: 1 bytes, line 3374
3374
3375<script> 3376 'use strict'; 3377 3378 (function() { 3379 3380 const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LeIilUeAAAAAI0woiL9D4LhTYABSJ1fZdBmfMJj&lang=de"; 3381 3382 const loadRecaptchaScript = (event) => { 3383 if (typeof window.grecaptcha !== 'undefined' || !event.target.form) { 3384 return 3385 } 3386 3387 let script = document.createElement('script'); 3388 script.setAttribute('type', 'text/javascript'); 3389 script.setAttribute('src', recaptchaUrl); 3390 document.head.appendChild(script); 3391 } 3392 3393 document.body.addEventListener("input", loadRecaptchaScript, { once: true }); 3394 document.body.addEventListener("focus", loadRecaptchaScript, { once: true }); 3395 3396 }()); 3397 3398</script>
3398 3399 3400<div 3401 id="tab-title-watcher" 3402 x-data="tabTitleWatcher" 3403 data-inactive-emoji="👋" 3404 data-inactive-text="Sind Sie noch da? Unsere Angebote warten auf Sie" 3405> 3406</div> 3407
3408<script> 3409 document.addEventListener('alpine:init', () => { 3410 Alpine.data('tabTitleWatcher', () => ({ 3411 originalTitle: document.title, 3412 inactiveTitle: '', 3413 scrollPosition: 0, 3414 intervalId: null, 3415 step: 3, 3416 delay: 100, 3417 3418 init() { 3419 const emoji = this.$el.dataset.inactiveEmoji || ''; 3420 const text = this.$el.dataset.inactiveText || ''; 3421 this.inactiveTitle = `${emoji} ${text} `; 3422 3423 document.addEventListener('visibilitychange', () => { 3424 if (document.hidden) { 3425 this.startLoop(); 3426 } else { 3427 this.stopLoop(); 3428 document.title = this.originalTitle; 3429 } 3430 }); 3431 }, 3432 3433 startLoop() { 3434 if (this.intervalId) return; 3435 3436 this.scrollPosition = 0; 3437 let fullText = this.inactiveTitle; 3438 3439 this.intervalId = setInterval(() => { 3440 const len = fullText.length; 3441 const display = fullText.slice(this.scrollPosition) + fullText.slice(0, this.scrollPosition); 3442 document.title = display; 3443 3444 this.scrollPosition = (this.scrollPosition + this.step) % len; 3445 }, this.delay); 3446 }, 3447 3448 stopLoop() { 3449 if (this.intervalId) { 3450 clearInterval(this.intervalId); 3451 this.intervalId = null; 3452 } 3453 } 3454 })); 3455 }); 3456</script>
3456 3457 3458
3459<script> 3460 function privacyPolicyModal() { 3461 return { 3462 open: false, 3463 init() { 3464 this.$nextTick(() => { 3465 this.$refs.backdrop.addEventListener('click', (e) => { 3466 if (e.target === this.$refs.backdrop) this.closeModal(); 3467 }); 3468 }); 3469 }, 3470 stickyHeader: window.pageYOffset > 1200, 3471 openModal() { 3472 this.open = true; 3473 }, 3474 closeModal() { 3475 this.open = false; 3476 }, 3477 isModalOpen() { 3478 return this.isOpen; 3479 }, 3480 getOpenOpacityClasses() { 3481 if (this.open) 3482 return 'opacity-100 pointer-events-auto'; 3483 else 3484 return 'opacity-0 pointer-events-none'; 3485 } 3486 }; 3487 } 3488 window.addEventListener('alpine:init', () => Alpine.data('privacyPolicyModal', privacyPolicyModal),) 3489</script>
vendor: 1 bytes, line 3489
3489
3490<script> 3491 (function () { 3492 'use strict'; 3493 3494 const partUrl = 'https://www.vedia.ch/refusion_webauthn/ajax/'; 3495 const accountUrl = 'https://www.vedia.ch/customer/account/'; 3496 3497 const api = (url, data) => { 3498 return fetch(url, { 3499 method: 'POST', 3500 headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, 3501 body: new URLSearchParams(data) 3502 }).then(response => response.json()); 3503 }; 3504 3505 const bufferToBase64Url = (input) => { 3506 const bytes = input instanceof ArrayBuffer 3507 ? new Uint8Array(input) 3508 : (input instanceof Uint8Array ? input : new Uint8Array(input.buffer || input)); 3509 let binary = ''; 3510 for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]); 3511 const b64 = btoa(binary); 3512 return b64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); 3513 }; 3514 3515 const b64urlToBuffer = (b64url) => { 3516 const pad = '='.repeat((4 - (b64url.length % 4)) % 4); 3517 const base64 = (b64url + pad).replace(/-/g, '+').replace(/_/g, '/'); 3518 const raw = atob(base64); 3519 const buffer = new ArrayBuffer(raw.length); 3520 const view = new Uint8Array(buffer); 3521 for (let i = 0; i < raw.length; ++i) view[i] = raw.charCodeAt(i); 3522 return buffer; 3523 }; 3524 3525 document.addEventListener('webauthn:check', async (e) => { 3526 const {email, resolve, reject} = e.detail; 3527 try { 3528 const result = await api(partUrl + 'check', {email}); 3529 resolve(result); 3530 } catch (error) { 3531 reject(error); 3532 } 3533 }); 3534 3535 document.addEventListener('webauthn:login', async (e) => { 3536 const {email, resolve, reject} = e.detail; 3537 try { 3538 // Your existing login logic here... 3539 const result = await performPasskeyLogin(email); 3540 resolve(result); 3541 } catch (error) { 3542 reject(error); 3543 } 3544 }); 3545 3546 // Exported function to perform passkey login 3547 const performPasskeyLogin = async (email) => { 3548 return api(partUrl + 'options', {email}).then(opts => { 3549 if (!opts.success) throw new Error(opts.message || 'Error'); 3550 const publicKey = opts.publicKey; 3551 publicKey.challenge = b64urlToBuffer(publicKey.challenge); 3552 if (publicKey.allowCredentials) { 3553 publicKey.allowCredentials = publicKey.allowCredentials.map(item => ({...item, id: b64urlToBuffer(item.id)})); 3554 } 3555 return navigator.credentials.get({publicKey}); 3556 }).then(assertion => { 3557 const data = { 3558 email, 3559 assertion: JSON.stringify({ 3560 id: assertion.id, 3561 type: assertion.type, 3562 rawId: bufferToBase64Url(assertion.rawId), 3563 response: { 3564 authenticatorData: bufferToBase64Url(assertion.response.authenticatorData), 3565 clientDataJSON: bufferToBase64Url(assertion.response.clientDataJSON), 3566 signature: bufferToBase64Url(assertion.response.signature), 3567 userHandle: assertion.response.userHandle ? bufferToBase64Url(assertion.response.userHandle) : null, 3568 } 3569 }) 3570 }; 3571 return api(partUrl + 'verify', data); 3572 }).then(result => { 3573 if (result && result.success) { 3574 window.location.href = result.redirect || accountUrl; 3575 } else if (result && result.message) { 3576 throw new Error(result.message); 3577 } 3578 return result; 3579 }); 3580 }; 3581 })(); 3582</script>
vendor: 1 bytes, line 3582
3582
3583<script> 3584 (function () { 3585 const modals = []; 3586 let lastHide = 0; 3587 3588 function resolveElement($refs, value) { 3589 if (!value) return null; 3590 if (value instanceof Element) return value; 3591 if (typeof value === 'string') { 3592 try { 3593 return ($refs && $refs[value]) || document.querySelector(value) || null; 3594 } catch (e) {} 3595 } 3596 return null; 3597 } 3598 3599 function determineTrigger($refs, dialog, trigger) { 3600 if (!trigger && dialog?.target instanceof HTMLElement) { 3601 return dialog.target; 3602 } 3603 3604 if (typeof dialog === 'string' && trigger?.target instanceof HTMLElement) { 3605 return trigger.target; 3606 } 3607 3608 return resolveElement($refs, trigger); 3609 } 3610 3611 function setFocusFirstElement(dialogElement) { 3612 if (!dialogElement) return; 3613 3614 window.setTimeout(() => { 3615 const candidates = dialogElement.querySelectorAll('[x-focus-first]'); 3616 for (const candidate of candidates) { 3617 if (candidate.closest('dialog') === dialogElement) { 3618 candidate.focus(); 3619 return; 3620 } 3621 } 3622 }, 50); 3623 } 3624 3625 window.hyva.modal = function(options = {}) { 3626 if (this.$el && this.$el.dataset && this.$el.dataset.options) { 3627 try { 3628 options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}')); 3629 } catch (e) { 3630 throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON'); 3631 } 3632 } 3633 3634 const config = Object.assign({ 3635 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 3636 transitionEnterStart: 'opacity-0', 3637 transitionEnterEnd: 'opacity-100', 3638 transitionLeave: 'transition ease-in duration-300', 3639 transitionLeaveStart: 'opacity-100', 3640 transitionLeaveEnd: 'opacity-0', 3641 }, options); 3642 3643 return { 3644 opened: {}, 3645 show(dialog, trigger) { 3646 const name = typeof dialog === 'string' ? dialog : config.dialog; 3647 if (!name || this.opened[name]) return; 3648 3649 this.opened[name] = true; 3650 const focusTarget = determineTrigger(this.$refs, dialog, trigger); 3651 const dialogEl = this.$refs && this.$refs[name]; 3652 const frame = { name, instance: this, focusTarget, time: Date.now() }; 3653 modals.push(frame); 3654 setFocusFirstElement(dialogEl); 3655 return new Promise(resolve => { frame.resolve = resolve; }); 3656 }, 3657 cancel() { 3658 this.hide(false); 3659 }, 3660 ok() { 3661 this.hide(true); 3662 }, 3663 hide(value) { 3664 if (Date.now() - lastHide < config.duration) return; 3665 lastHide = Date.now(); 3666 3667 const modal = modals.pop(); 3668 if (!modal) return; 3669 3670 modal.instance.opened[modal.name] = false; 3671 3672 const focusTarget = modal.focusTarget; 3673 focusTarget && window.setTimeout(() => focusTarget.focus(), config.duration + 50); 3674 modal.resolve && modal.resolve(value); 3675 }, 3676 /** 3677 * @deprecated Use dialogConfig() instead, which is used by the default modal-container.phtml template. 3678 * This method is kept for backwards compatibility with custom container templates. 3679 */ 3680 overlay(dialog) { 3681 dialog = this.$el.dataset.dialogRefName || dialog; 3682 const name = typeof dialog === 'string' ? dialog : config.dialog; 3683 if (this.$el.tagName !== 'DIALOG' && ! window.hyva.modal.legacyModalCompatibility) { 3684 console.warn( 3685 '[hyva] Deprecated modal markup detected (x-bind="overlay" on a non-dialog element' + 3686 (name ? ` for "${name}"` : '') + ').\n' + 3687 'Escape and click-outside closing are not available for such dialogs anymore.\n' + 3688 'Install hyva-themes/magento2-legacy-modal-compatibility or migrate to the native <dialog> markup.' 3689 ); 3690 } 3691 return Object.assign({}, this.dialogConfig(name), { 3692 ['@hyva-modal-show.window'](event) { 3693 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 3694 } 3695 }); 3696 }, 3697 dialogConfig(name) { 3698 name = name || this.$el.dataset.dialogRefName || config.dialog; 3699 return { 3700 ['x-show']: () => name ? this.opened[name] : false, 3701 ['x-transition:enter']: config.transitionEnter, 3702 ['x-transition:enter-start']: config.transitionEnterStart, 3703 ['x-transition:enter-end']: config.transitionEnterEnd, 3704 ['x-transition:leave']: config.transitionLeave, 3705 ['x-transition:leave-start']: config.transitionLeaveStart, 3706 ['x-transition:leave-end']: config.transitionLeaveEnd, 3707 ['@hyva-modal-show.window'](event) { 3708 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide); 3709 }, 3710 }; 3711 },
3712 showDialogOnInit() { 3713 const name = this.$el.dataset.dialogRefName; 3714 if (name) { 3715 this.show(name); 3716 } 3717 } 3718 }; 3719 } 3720 3721 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length - 1] 3722 3723 window.hyva.modal.pop = function () { 3724 if (modals.length > 0) { 3725 modals[modals.length - 1].instance.hide(); 3726 } 3727 } 3728 3729 /** 3730 * @deprecated Native <dialog> handles focus trapping automatically. 3731 * Calling this function has no effect. Kept for backwards compatibility. 3732 */ 3733 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) {} 3734 3735 /** 3736 * @deprecated Native <dialog> with x-htmldialog handles ESC key and click-outside events. 3737 * These functions have no effect. Kept for backwards compatibility. 3738 */ 3739 window.hyva.modal.eventListeners = { 3740 keydown: event => {}, 3741 click: event => {} 3742 }; 3743 })(); 3744 3745 window.addEventListener('alpine:init', () => { 3746 Alpine.data('hyvaModal', window.hyva.modal); 3747 }, {once: true}); 3748</script>
3748 3749 3750<div x-data="initCookieBarSettings" x-bind="eventListeners"> 3751 <dialog 3752 x-ref="am-cookie-bar-settings" 3753 data-dialog-ref-name="am-cookie-bar-settings" 3754 aria-labelledby="cookiebar-groups" 3755 closeby="any" 3756 class="open:flex flex-col relative max-h-[70vh] overflow-auto max-w-[90vw] md:max-w-[50vw] shadow-xl 3757 rounded-lg p-10 text-gray-700 bg-white backdrop:bg-black/60 am-cookie-bar-settings" 3758 x-bind="dialogConfig('am-cookie-bar-settings')" 3759 x-htmldialog="hideHandler" 3760 > 3761 <button @click="hideHandler" 3762 aria-label="Schliessen" 3763 x-ref="ambar-settings-close" 3764 class="absolute right-2 top-2 text-gray-300 transition 3765 hover:text-black focus:drop-shadow-md hover:drop-shadow-md"> 3766 <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" 3767 stroke="currentColor" 3768 stroke-width="2"> 3769 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 3770 </svg> 3771 </button> 3772 <div id="cookiebar-groups"> 3773 3774<div class="w-full flex flex-col" x-data="cookieGroupData"> 3775 <template x-for="group in getGroupsData" :key="group.groupId"> 3776 <div class="mb-2"> 3777 <div class="header flex justify-between items-start py-2"> 3778 <div> 3779 <h3 class="text-lg font-semibold pr-6 ambar-group-title" x-text="group.name"></h3> 3780 <p class="py-2 text-sm ambar-group-description" x-html="group.description"></p> 3781 <button class="mb-4 text-sm text-primary rounded-sm before:content-none after:content-none" 3782 type="button" 3783 title="Weitere Informationen" 3784 aria-label="Weitere Informationen" 3785 @click="$dispatch('classic-open-am-cookie-group-info', group)"> 3786 Weitere Informationen </div> 3787 <label class="relative inline-flex items-center cursor-pointer"> 3788 <input class="sr-only peer" 3789 type="checkbox" 3790 data-amcookie-js="field" 3791 name="groups[]" 3792 x-model="group.checked" 3793 value="group.groupId" 3794 id="getSwitchBoxId" 3795 disabled="group.isEssential" 3796 aria-label="group.name"> 3797 <div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600"></div> 3798 </label> 3799 </div> 3800 </div> 3801 </template> 3802</div> 3803
3804<script> 3805 'use strict'; 3806 function cookieGroupData() { 3807 return { 3808 getGroupsData() { 3809 let amStorage = hyva.amStorage 3810 if (!amStorage) 3811 return []; 3812 3813 let cookieGroups = amStorage.getStorage('AmastyCookieGroups') 3814 if (!cookieGroups) 3815 return []; 3816 3817 return cookieGroups.groupData; 3818 }, 3819 getSwitchBoxId() { 3820 return 'switchBox' + this.group.groupId; 3821 } 3822 } 3823 } 3824 window.addEventListener('alpine:init', () => Alpine.data('cookieGroupData', cookieGroupData),) 3825</script>
3825 3826 </div> 3827 <div class="w-full flex justify-center"> 3828 <button type="button" 3829 class="ambar-action-btn text-xs font-semibold text-white uppercase btn-primary px-8 py-2" 3830 x-ref="ambar-settings-done" 3831 @click="$dispatch('cookiebar-action-accept', { include_checked_groups: true })" 3832 > 3833 Fertig </button> 3834 </div> 3835 </dialog> 3836</div> 3837
3838<script data-cfasync="false"> 3839 'use strict'; 3840 3841 function initCookieBarSettings() { 3842 return { 3843 ...hyva.modal({ 3844 dialog: 'am-cookie-bar-settings' 3845 }), 3846 eventListeners: { 3847 ['@close-am-cookie-bar-settings.window']() { 3848 this.hideHandler(); 3849 }, 3850 ['@open-am-cookie-bar-settings.window']() { 3851 !this.opened['am-cookie-bar-settings'] && 3852 this.show('am-cookie-bar-settings'); 3853 }, 3854 ['@cookiebar-action-accept-finish.window']() { 3855 this.hideHandler(); 3856 } 3857 }, 3858 hideHandler: function () { 3859 !!this.opened['am-cookie-bar-settings'] && 3860 this.hide('am-cookie-bar-settings'); 3861 }, 3862 focusDoneButton: function () { 3863 this.$refs['ambar-settings-done']?.focus(); 3864 }, 3865 focusCloseButton: function () { 3866 this.$refs['ambar-settings-close']?.focus(); 3867 } 3868 } 3869 } 3870 3871 window.addEventListener('alpine:init', () => Alpine.data('initCookieBarSettings', initCookieBarSettings), { once: true }); 3872</script>
3872 3873
3874<script data-cfasync="false"> 3875 'use strict'; 3876 3877 /** 3878 * @typedef {Object} CookieGroupData 3879 * @prop {Boolean} checked 3880 * @prop {[{description: string, lifetime: number|null, name: string, provider: string, type: string}]} cookies 3881 * @prop {String} description 3882 * @prop {string|null} groupId 3883 * @prop {Boolean} isEssential 3884 * @prop {String} name 3885 */ 3886 3887 function initAmastyCookieGroupsStorage() { 3888 return { 3889 /** 3890 * @type {[CookieGroupData]} 3891 */ 3892 groupData: [], 3893 cookiePolicy: undefined, 3894 lastUpdate: undefined, 3895 3896 /** 3897 * @returns {string|number[]} 3898 */ 3899 getEssentialGroupIds: function () { 3900 return this.groupData.reduce(function (essentialGroupIds, group) { 3901 if (group.isEssential) { 3902 essentialGroupIds.push(group.groupId) 3903 } 3904 3905 return essentialGroupIds; 3906 }, []); 3907 }, 3908 3909 /** 3910 * @returns {string|number[]} 3911 */ 3912 getCheckedGroupIds: function () { 3913 return this.groupData.reduce(function (checkedGroupIds, group) { 3914 if (group.checked) { 3915 checkedGroupIds.push(group.groupId); 3916 } 3917 3918 return checkedGroupIds; 3919 }, []); 3920 }, 3921 3922 /** 3923 * @param {string} cookieName 3924 * @returns {boolean} 3925 */ 3926 isCookieEssential: function (cookieName) { 3927 const allEssentialCookies = this.getEssentialCookies(); 3928 3929 return !!allEssentialCookies.find(cookie => cookie.name === cookieName); 3930 }, 3931 3932 /** 3933 * @returns {array} 3934 */ 3935 getEssentialCookies: function () { 3936 return this.groupData 3937 .filter(group => group.isEssential) 3938 .map(group => group.cookies) 3939 .flat(); 3940 }, 3941 3942 /** 3943 * @returns {boolean} 3944 */ 3945 hasGroupData: function () { 3946 return !!this.groupData.length; 3947 }, 3948 3949 /** 3950 * @param {string} cookieName 3951 * @param {string} pattern 3952 * @returns {boolean} 3953 */ 3954 isEssentialByPattern: function (cookieName, pattern) { 3955 const essentialCookiePatterns = this.getEssentialCookiesPattern(pattern); 3956 3957 return essentialCookiePatterns.some((pattern) => !!cookieName.match(this.getCookiePattern(pattern))); 3958 }, 3959 3960 /** 3961 * @param {string} pattern 3962 * @return {Array} 3963 */ 3964 getEssentialCookiesPattern: function (pattern) { 3965 return this.getCookiesByPattern(pattern, this.getEssentialCookies()); 3966 }, 3967 3968 /** 3969 * @param {string} pattern 3970 * @param {Array|undefined} cookies 3971 * @return {Array} 3972 */ 3973 getCookiesByPattern: function (pattern, cookies) { 3974 if (typeof cookie === 'undefined') { 3975 cookies = this.getAllCookies(); 3976 } 3977 3978 return cookies
3979 .map((cookie) => typeof cookie === 'object' ? cookie.name : cookie.split('=')[0].trim()) 3980 .filter((cookie) => cookie.match(pattern) !== null); 3981 }, 3982 3983 /** 3984 * @returns {array} 3985 */ 3986 getDisallowedCookies: function () { 3987 const disallowedCookie = decodeURIComponent(hyva.getCookie('amcookie_disallowed') ?? ''); 3988 if (!disallowedCookie) { 3989 return []; 3990 } 3991 3992 return disallowedCookie.split(','); 3993 }, 3994 3995 /** 3996 * @returns {string} 3997 */ 3998 getCookiePattern: function (pattern) { 3999 return `^${pattern.replaceAll('*', '.*')}$`; 4000 }, 4001 4002 /** 4003 * @returns {array} 4004 */ 4005 getAllCookies: function () { 4006 return document.cookie.split(';'); 4007 }, 4008 4009 /** 4010 * @param {Array} groupData 4011 * @returns {array} 4012 */ 4013 updateGroupDataPermanently: function (groupData) { 4014 this.groupData = [...groupData]; 4015 }, 4016 4017 /** 4018 * @param {boolean} setAcceptance 4019 * @returns {Promise} 4020 */ 4021 updateGroupData: function (setAcceptance = false) { 4022 const cookieFetchUrl = `${BASE_URL}amcookie/cookie/cookies`; 4023 const requestUrl = new URL(cookieFetchUrl, window.location.origin); 4024 4025 requestUrl.searchParams.append('allowed', hyva.getCookie('amcookie_allowed')); 4026 requestUrl.searchParams.append('restriction', hyva.getCookie('amcookie_policy_restriction')); 4027 4028 return fetch(requestUrl.toString(), { 4029 method: "GET", 4030 headers: { 4031 'X-Requested-With': 'XMLHttpRequest' 4032 } 4033 }).then(response => { 4034 if (response.ok) { 4035 return response.json(); 4036 } 4037 4038 return Promise.reject(`${response.status} ${response.statusText}`); 4039 }).then(data => { 4040 this.cookiePolicy = data.cookiePolicy ?? 'allowed'; 4041 this.lastUpdate = data.lastUpdate ?? 0; 4042 this.groupData = [...data.groupData]; 4043 4044 hyva.setCookie('amcookie_policy_restriction', this.cookiePolicy, 10); 4045 if (setAcceptance) { 4046 amastyCookieManager.setLastCookieAcceptance(this.lastUpdate); 4047 } 4048 4049 return data; 4050 }).catch(error => { 4051 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 4052 { 4053 type: "error", 4054 text: error 4055 } 4056 ]); 4057 }).finally(() => window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated'))); 4058 } 4059 } 4060 } 4061 4062 window.addEventListener( 4063 'alpine:init', 4064 () => Alpine.store('AmastyCookieGroups', initAmastyCookieGroupsStorage()), 4065 { once: true } 4066 ); 4067</script>
4067 4068
4069<script data-cfasync="false"> 4070 (function (amastyCookieManager) { 4071 'use strict'; 4072 4073 amastyCookieManager.pattern = '{(?<cookiePattern>.*)}'; 4074 4075 amastyCookieManager.getAmastyCookieGroupStorage = function () { 4076 return Alpine.store('AmastyCookieGroups') ?? {}; 4077 }; 4078 4079 amastyCookieManager.deleteDisallowedCookie = function () { 4080 const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); 4081 const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; 4082 4083 disallowedCookies.forEach((name) => { 4084 const pattern = name.match(this.pattern); 4085 if (!!pattern && !!amastyCookieGroupStorage) { 4086 const cookiePattern = amastyCookieGroupStorage.getCookiePattern(pattern.groups.cookiePattern) ?? ''; 4087 4088 amastyCookieGroupStorage.getCookiesByPattern(cookiePattern).forEach((cookieName) => { 4089 this.deleteNotEssentialCookie(cookieName); 4090 }); 4091 } else { 4092 this.deleteNotEssentialCookie(name); 4093 } 4094 }); 4095 }; 4096 4097 amastyCookieManager.isCookieAllowed = function (cookieName) { 4098 const allowedGroups = hyva.getCookie('amcookie_allowed'); 4099 const disallowedCookie = this.getAmastyCookieGroupStorage()?.getDisallowedCookies() ?? []; 4100 const isCookiePolicyAllowed = hyva.getCookie('amcookie_policy_restriction') === 'allowed'; 4101 const isCookieEssential = this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName); 4102 const isCookieEssentialByPattern = this.getAmastyCookieGroupStorage()?.isEssentialByPattern(cookieName, this.pattern); 4103 4104 if (!isCookiePolicyAllowed || isCookieEssential || isCookieEssentialByPattern) { 4105 return true; 4106 } 4107 4108 return !((!allowedGroups && !disallowedCookie) || this.isCookieDisallowed(cookieName)); 4109 }; 4110 4111 amastyCookieManager.isCookieDisallowed = function (cookieName) { 4112 const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); 4113 const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; 4114 4115 return disallowedCookies.some((cookie) => { 4116 const pattern = cookie.match(this.pattern); 4117 4118 return !!pattern && !!cookieName.match(amastyCookieGroupStorage?.getCookiePattern(pattern.groups.cookiePattern)); 4119 }) || disallowedCookies.indexOf(cookieName) !== -1; 4120 }; 4121 4122 amastyCookieManager.processManageableCookies = function () { 4123 let cookieScripts = document.querySelectorAll('script[data-amcookie-groupid][type="text/plain"]'); 4124 4125 cookieScripts.forEach((elem) => { 4126 if (this.isChecked(elem.dataset['amcookie-groupid'])) { 4127 let elClone = elem.cloneNode(true).setAttribute('type', 'text/javascript'); 4128 4129 elem.remove(); 4130 document.body.appendChild(elClone); 4131 } 4132 }); 4133 }; 4134 4135 amastyCookieManager.deleteNotEssentialCookie = function (cookieName) { 4136 if (!this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName)) { 4137 hyva.setCookie(cookieName, '', -1, true); 4138 } 4139 }; 4140 4141 amastyCookieManager.setLastCookieAcceptance = function (lastUpdate) { 4142 localStorage.setItem('am-last-cookie-acceptance', lastUpdate); 4143 }; 4144 4145 window.addEventListener('amasty-cookie-group-updated', () => { 4146 amastyCookieManager.deleteDisallowedCookie(); 4147 }); 4148 4149 window.addEventListener('private-content-loaded', () => { 4150 amastyCookieManager.getAmastyCookieGroupStorage()?.hasGroupData() && amastyCookieManager.deleteDisallowedCookie(); 4151 }); 4152 }(window.amastyCookieManager = window.amastyCookieManager || {})); 4153</script>
4153 4154
4155<script data-cfasync="false"> 4156 (function () { 4157 'use strict'; 4158 4159 window.addEventListener('cookiebar-action-accept', (event) => { 4160 const groups = event.detail?.include_checked_groups ? Alpine.store('AmastyCookieGroups').getCheckedGroupIds() : []; 4161 const url = `${BASE_URL}amcookie/cookie/savegroups`; 4162 const urlParams = event.detail?.params ?? {}; 4163 const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; 4164 const body = new URLSearchParams({ 4165 form_key: hyva.getFormKey() 4166 }); 4167 groups.length && groups.map(groupId => body.append('groups[]', groupId)); 4168 4169 for (const [key, value] of Object.entries(urlParams)) { 4170 body.append(key, value); 4171 } 4172 4173 fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) 4174 .then(response => { 4175 if (response.ok) { 4176 return response.json(); 4177 } 4178 4179 return Promise.reject(`${response.status} ${response.statusText}`); 4180 }) 4181 .then(data => { 4182 !!data.success && Alpine.store('AmastyCookieGroups').updateGroupData(true); 4183 }) 4184 .catch(error => { 4185 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 4186 { 4187 type: "error", 4188 text: error 4189 } 4190 ]); 4191 }) 4192 .finally(() => { 4193 amastyCookieManager.processManageableCookies(); 4194 window.dispatchEvent(new CustomEvent('cookiebar-action-accept-finish')); 4195 window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated')); 4196 // Wait cookiebar close animation 4197 setTimeout(() => { 4198 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 4199 }, 100); 4200 }); 4201 }); 4202 })(); 4203</script>
4203 4204
4205<script data-cfasync="false"> 4206 (function () { 4207 'use strict'; 4208 4209 window.addEventListener('cookiebar-action-allow', () => { 4210 const url = `${BASE_URL}amcookie/cookie/allow`; 4211 const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; 4212 const body = new URLSearchParams({ 4213 form_key: hyva.getFormKey() 4214 }); 4215 fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) 4216 .then(response => { 4217 if (response.ok) { 4218 return response; 4219 } 4220 4221 return Promise.reject(`${response.status} ${response.statusText}`); 4222 }) 4223 .then(() => { 4224 Alpine.store('AmastyCookieGroups').updateGroupData(true); 4225 }) 4226 .catch(error => { 4227 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 4228 { 4229 type: "error", 4230 text: error 4231 } 4232 ]); 4233 }) 4234 .finally(() => { 4235 amastyCookieManager.processManageableCookies(); 4236 window.dispatchEvent(new CustomEvent('cookiebar-action-allow-finish')); 4237 // Wait cookiebar close animation 4238 setTimeout(() => { 4239 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 4240 }, 100); 4241 }); 4242 }); 4243 })(); 4244</script>
4244 4245
4246<script data-cfasync="false"> 4247 (function () { 4248 'use strict'; 4249 4250 window.addEventListener('cookiebar-action-settings', () => { 4251 window.dispatchEvent(new Event('open-am-cookie-bar-settings')); 4252 }); 4253 })(); 4254</script>
4254 4255 4256<style> 4257 :root { 4258 /* Bar Color Settings */ 4259 --ambar-background: #fff; 4260 --ambar-links-color: #326ed1; 4261 --ambar-policy-text: #374151; 4262 --ambar-toggle-active-color: #2563eb; 4263 --ambar-toggle-inactive-color: #fff; 4264 4265 /* Buttons Color Settings */ 4266 --ambar-button-accept-color: #337ab7; 4267 --ambar-button-accept-hover-color: #337ab7; 4268 --ambar-button-accept-text: #fff; 4269 --ambar-button-accept-hover-text: #fff; 4270 4271 --ambar-button-allow-color: #337ab7; 4272 --ambar-button-allow-hover-color: #337ab7; 4273 --ambar-button-allow-text: #fff; 4274 --ambar-button-allow-hover-text: #fff; 4275 4276 --ambar-button-decline-color: #337ab7; 4277 --ambar-button-decline-hover-color: #337ab7; 4278 --ambar-button-decline-text: #fff; 4279 --ambar-button-decline-hover-text: #fff; 4280 4281 --ambar-button-settings-color: #337ab7; 4282 --ambar-button-settings-hover-color: #337ab7; 4283 --ambar-button-settings-text: #fff; 4284 --ambar-button-settings-hover-text: #fff; 4285 4286 /* Buttons Order Settings */ 4287 --ambar-button-accept-order: 0; 4288 --ambar-button-allow-order: 0; 4289 --ambar-button-settings-order: 0; 4290 --ambar-button-decline-order: 0; 4291 4292 /* Cookie Information Bar Color Settings */ 4293 --ambar-information-background: #fff; 4294 --ambar-information-title: #374151; 4295 --ambar-information-description: #374151; 4296 --ambar-information-table-header: #374151; 4297 --ambar-information-table-content: #374151; 4298 4299 /* Cookie Information Bar Done Button Settings */ 4300 --ambar-information-button-color: #1d4ed8; 4301 --ambar-information-button-hover-color: #1d4ed8; 4302 --ambar-information-button-text: #fff; 4303 --ambar-information-button-hover-text: #fff; 4304 4305 /* Settings Bar Done Button Settings */ 4306 --ambar-setting-button-color: #1d4ed8; 4307 --ambar-setting-button-hover-color: #1d4ed8; 4308 --ambar-setting-button-text: #fff; 4309 --ambar-setting-button-hover-text: #fff; 4310 4311 /* cookie_settings_bar_customisation */ 4312 --ambar-setting-bar-group-background: #fff; 4313 --ambar-setting-bar-group-title: #000; 4314 --ambar-setting-bar-group-description: #000; 4315 --ambar-setting-bar-group-links: #326ed1; 4316 } 4317</style> 4318
4319<script data-cfasync="false"> 4320 'use strict'; 4321 4322 function initAmCookieActionDispatcherBtn() { 4323 return { 4324 actiondispatchHandler: function (event) { 4325 const { dispatchAction, dispatchPayload } = event.currentTarget.dataset; 4326 this.$dispatch(dispatchAction, this.parsePayload(dispatchPayload)); 4327 }, 4328 parsePayload: function (payload) { 4329 try { 4330 return JSON.parse(payload); 4331 } catch (e) { 4332 return null; 4333 } 4334 } 4335 }; 4336 } 4337 4338 window.addEventListener( 4339 'alpine:init', 4340 () => Alpine.data('initAmCookieActionDispatcherBtn', initAmCookieActionDispatcherBtn), 4341 { once: true } 4342 ); 4343</script>
4343 4344
4345<script data-cfasync="false"> 4346 'use strict'; 4347 4348 function initAmCookieGroups() { 4349 return { 4350 /** 4351 * @withContext x-for: $store.AmastyCookieGroups.groupData 4352 * @returns {string} 4353 */ 4354 getInputGroupId: function () { 4355 return `amcookie-${this.$el.dataset.groupPrefix}group-${this.group.groupId}` 4356 }, 4357 4358 /** 4359 * @withContext x-for: $store.AmastyCookieGroups.groupData 4360 * @returns {{"!bg-gray-400": boolean}} 4361 */ 4362 getInputStyles: function () { 4363 return { 4364 '!bg-gray-400': this.group.isEssential 4365 } 4366 }, 4367 4368 /** 4369 * @withContext x-for: $store.AmastyCookieGroups.groupData 4370 * @returns {void} 4371 */ 4372 toggleGroup: function () { 4373 this.group.checked = !this.group.checked; 4374 }, 4375 4376 /** 4377 * @withContext x-for: $store.AmastyCookieGroups.groupData 4378 * @returns {void} 4379 */ 4380 moreInfoClickHandler: function () { 4381 this.$dispatch(this.$el.dataset.dispatchAction, this.group); 4382 }, 4383 4384 moreInformationAboutCookieGroup: function () { 4385 return hyva.str('About\u0020\u0022\u00251\u0022\u0020Cookie\u0020Group', this.group.name); 4386 } 4387 } 4388 } 4389 4390 window.addEventListener( 4391 'alpine:init', 4392 () => Alpine.data('initAmCookieGroups', initAmCookieGroups), 4393 {once: true} 4394 ); 4395</script>
vendor: 1 bytes, line 4395
4395
4396<script> 4397 if (window.AmFB) { 4398 (() => { 4399 const gdprListeners = [ 4400 { 4401 event: 'cookiebar-action-accept-finish', 4402 callback: () => window.AmFB.initPixels(), 4403 options: { once: true } 4404 }, 4405 { 4406 event: 'cookiebar-action-allow-finish', 4407 callback: () => window.AmFB.initPixels(), 4408 options: { once: true } 4409 } 4410 ]; 4411 4412 const isAllowedToRunScript = function () { 4413 const facebookPixelCookieName = '_fbp'; 4414 const allowedCookies = hyva.getCookie('amcookie_allowed') || ''; 4415 const disallowedCookies = hyva.getCookie('amcookie_disallowed') || ''; 4416 return !!allowedCookies.length 4417 && (!disallowedCookies || disallowedCookies.indexOf(facebookPixelCookieName) === -1); 4418 }; 4419 4420 window.AmFB.setDataToSection = new Proxy(window.AmFB.setDataToSection, { 4421 apply(target, thisArg, argArray) { 4422 if (isAllowedToRunScript()) { 4423 return target.apply(thisArg, argArray); 4424 } 4425 4426 return { 4427 then: () => {} 4428 } 4429 } 4430 }); 4431 4432 window.AmFB.initPixels = new Proxy(window.AmFB.initPixels, { 4433 apply(target, thisArg, argArray) { 4434 if (isAllowedToRunScript()) { 4435 return target.apply(thisArg, argArray); 4436 } 4437 } 4438 }); 4439 4440 window.AmFB = new Proxy(window.AmFB, { 4441 get(target, prop, receiver) { 4442 if (prop === 'listeners') { 4443 return [...Reflect.get(...arguments), ...(gdprListeners)]; 4444 } 4445 4446 return Reflect.get(...arguments); 4447 } 4448 }); 4449 })(); 4450 } 4451</script>
vendor: 1 bytes, line 4451
4451
4452<script> 4453 'use strict'; 4454 4455 (function () { 4456 document.querySelectorAll('[data-amcookie-js="footer-link"]').forEach(link => { 4457 link.addEventListener('click', function (event) { 4458 event.preventDefault(); 4459 window.dispatchEvent(new CustomEvent('cookiebar-action-settings')); 4460 }); 4461 }); 4462 })(); 4463</script>
vendor: 1 bytes, line 4463
4463
4464<script> 4465 (function () { 4466 let amFancyProcessed = false; 4467 4468 window.addEventListener('load-amfancybox', () => { 4469 if (amFancyProcessed) { 4470 window?.Fancybox && window.dispatchEvent(new CustomEvent('amfancybox-loaded', {})); 4471 return; 4472 } 4473 4474 const script = document.createElement('script'); 4475 script.src = 'https://www.vedia.ch/static/version1790063611/frontend/Vedia/hyva/de_CH/Amasty_LibFancybox/fancybox_ui/fancybox.min.js'; 4476 script.async = true; 4477 document.body.appendChild(script); 4478 4479 amFancyProcessed = true; 4480 4481 script.onload = () => { 4482 window.dispatchEvent(new CustomEvent('amfancybox-loaded', {})); 4483 } 4484 4485 const stylesHref = 'https://www.vedia.ch/static/version1790063611/frontend/Vedia/hyva/de_CH/Amasty_LibFancybox/fancybox_ui/fancybox.min.css'; 4486 4487 if (document.querySelector(`link[href="${stylesHref}"]`)) { 4488 return; 4489 } 4490 4491 const styles = document.createElement('link'); 4492 styles.rel = 'stylesheet'; 4493 styles.type = 'text/css'; 4494 styles.href = stylesHref; 4495 4496 document.head.appendChild(styles); 4497 }); 4498 }()); 4499</script>
4499 4500 4501
4502<script> 4503 window.addEventListener('amfancybox-loaded', () => { 4504 Fancybox.bind('[data-fancybox="gallery"]', { 4505 Thumbs : false 4506 }); 4507 }); 4508</script>
4508 4509
4510<script> 4511 function amReviewCommentFormDataFn() { 4512 const element = this.$el; 4513 const validation = hyva.formValidation(element); 4514 const comments = amReviewCommentsHandler(); 4515 4516 return { 4517 ...validation, 4518 ...comments, 4519 init() { 4520 if (validation.init) { 4521 validation.init.call(this); 4522 } 4523 if (comments.init) { 4524 comments.init.call(this); 4525 } 4526 } 4527 }; 4528 } 4529 4530 window.addEventListener( 4531 'alpine:init', 4532 () => Alpine.data( 4533 'amReviewCommentFormDataFn', 4534 amReviewCommentFormDataFn 4535 ), 4536 {once: true} 4537 ) 4538</script>
4538 4539
4540<script> 4541 'use strict'; 4542 4543 function amReviewsSlider() { 4544 return { 4545 active: 0, 4546 itemCount: 0, 4547 pageSize: parseInt(this.$el.dataset.pageSize), 4548 sliderClass: this.$el.dataset.sliderClass, 4549 slidesClass: this.$el.dataset.slidesClass, 4550 pageFillers: 0, 4551 getSlider() { 4552 return this.$root.querySelector(this.sliderClass); 4553 }, 4554 4555 calcPageSize() { 4556 const slider = this.getSlider(); 4557 if (slider) { 4558 this.itemCount = slider.querySelectorAll(this.slidesClass).length; 4559 this.pageSize = Math.round(slider.clientWidth / slider.querySelector(this.slidesClass).clientWidth); 4560 this.pageFillers = ( 4561 this.pageSize * Math.ceil(this.itemCount / this.pageSize) 4562 ) - this.itemCount; 4563 } 4564 }, 4565 4566 calcActive() { 4567 const slider = this.getSlider(); 4568 if (slider) { 4569 const sliderItems = this.itemCount + this.pageFillers; 4570 const calculatedActiveSlide = slider.scrollLeft / (slider.scrollWidth / sliderItems); 4571 this.active = Math.round(calculatedActiveSlide / this.pageSize) * this.pageSize; 4572 } 4573 }, 4574 4575 scrollPrevious() { 4576 this.scrollTo(this.active - this.pageSize); 4577 }, 4578 4579 scrollNext() { 4580 this.scrollTo(this.active + this.pageSize); 4581 }, 4582 4583 scrollTo(idx) { 4584 const slider = this.getSlider(); 4585 if (slider) { 4586 const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers); 4587 slider.scrollLeft = Math.floor(slideWidth) * idx; 4588 this.active = idx; 4589 } 4590 }, 4591 4592 sliderPreviousClass() { 4593 return { 4594 'opacity-25 pointer-events-none' : this.active === 0 4595 } 4596 }, 4597 4598 sliderDotClass() { 4599 return { 4600 'bg-opacity-100': this.active === parseInt(this.$el.dataset.index), 4601 'bg-opacity-25': this.active !== parseInt(this.$el.dataset.index), 4602 'hidden': (this.pageSize !== 1 && !!(parseInt(this.$el.dataset.index) % this.pageSize)) 4603 } 4604 }, 4605 4606 sliderNextClass() { 4607 return { 4608 'opacity-25 pointer-events-none' : this.active >= this.itemCount-this.pageSize 4609 } 4610 }, 4611 4612 setSliderDot() { 4613 return this.scrollTo(parseInt(this.$el.dataset.index)) 4614 }, 4615 4616 isNav() { 4617 return this.itemCount > this.pageSize 4618 }, 4619 4620 reviewSliderResize() { 4621 const self = this; 4622 self.calcPageSize(); 4623 self.$nextTick( function() { 4624 self.calcActive() 4625 }) 4626 } 4627 } 4628 } 4629 4630 window.addEventListener( 4631 'alpine:init', 4632 () => Alpine.data( 4633 'amReviewsSlider', 4634 amReviewsSlider 4635 ), 4636 {once: true} 4637 ) 4638</script>
4638 4639
4640<script> 4641 'use strict'; 4642 4643 function helpFul() { 4644 const reviewId = this.$el.dataset.reviewId; 4645 4646 return { 4647 config: { 4648 plusReview: 0, 4649 minusReview: 0, 4650 reviewId: reviewId, 4651 }, 4652 4653 voted: { 4654 plus: 0, 4655 minus: 0 4656 }, 4657 4658 jsonConfig: JSON.parse(this.$el.dataset.config), 4659 4660 selectors: { 4661 shortHelpFul: '[data-review-helpful="'+ reviewId +'"] .count-plus-review' 4662 }, 4663 4664 /** 4665 * @returns {void} 4666 */ 4667 initVoteBlock: function () { 4668 window.addEventListener('amreview-update-vote-data', (event) => { 4669 const voteData = { 4670 data: event.detail.votes[reviewId], 4671 voted: event.detail.voted[reviewId] 4672 } 4673 4674 this.updateVote(voteData); 4675 }) 4676 }, 4677 4678 /** 4679 * @param {string} type 4680 * @returns {void} 4681 */ 4682 sendVote: function (type) { 4683 const body = new URLSearchParams({ 4684 form_key: hyva.getFormKey(), 4685 type: type, 4686 review: this.config.reviewId 4687 }); 4688 4689 fetch(this.jsonConfig.url, { 4690 method: 'POST', 4691 body: body, 4692 headers: { 4693 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 4694 'X-Requested-With': 'XMLHttpRequest' 4695 } 4696 }).then(response => { 4697 if (response.ok) { 4698 return response.json(); 4699 } 4700 4701 return Promise.reject(`${response.status} ${response.statusText}`); 4702 }).then(result => { 4703 if (result && result.success) { 4704 this.updateVote(result); 4705 } 4706 }).catch(error => { 4707 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 4708 { 4709 type: "error", 4710 text: error 4711 } 4712 ]); 4713 }); 4714 }, 4715 4716 /** 4717 * @param {Object} result 4718 * @returns {void} 4719 */ 4720 updateVote: function (result) { 4721 this.config.plusReview = result.data.plus; 4722 this.config.minusReview = result.data.minus; 4723 this.voted.plus = result.voted.plus; 4724 this.voted.minus = result.voted.minus; 4725 4726 this.updateShortHelpFul(); 4727 }, 4728 4729 /** 4730 * @returns {void} 4731 */ 4732 updateShortHelpFul: function () { 4733 document.querySelector(this.selectors.shortHelpFul).textContent = this.config.plusReview; 4734 }, 4735 4736 /** 4737 * @returns {string} 4738 */ 4739 reviewPulsClass() { 4740 return !!this.voted.plus ? 'text-green-600': 'text-gray-400' 4741 }, 4742 4743 /** 4744 * @returns {string} 4745 */ 4746 reviewMinusClass() { 4747 return !!this.voted.minus ? 'text-red-600': 'text-gray-400' 4748 }, 4749 4750 /** 4751 * @returns {void} 4752 */ 4753 sendPlusVote() { 4754 return this.sendVote('plus') 4755 }, 4756 4757 /** 4758 * @returns {void} 4759 */ 4760 sendMinusVote() { 4761 return this.sendVote('minus') 4762 }, 4763 4764 /** 4765 * @returns {string} 4766 */ 4767 configPlusReview() { 4768 return this.config.plusReview 4769 }, 4770 4771 /** 4772 * @returns {string} 4773 */ 4774 configMinusReview() { 4775 return this.config.minusReview 4776 } 4777 } 4778 } 4779 4780 window.addEventListener( 4781 'alpine:init', 4782 () => Alpine.data( 4783 'helpFul', 4784 helpFul 4785 ), 4786 {once: true} 4787 ); 4788 4789 function reviewWidgetModal() { 4790 return Object.assign( 4791 hyva.modal(), 4792 { 4793 /** 4794 * @returns {void} 4795 */ 4796 showModal() { 4797 return this.$dispatch('hyva-modal-show', { dialog: 'amreview-popup-' + this.$el.dataset.productId }); 4798 }, 4799 4800 /** 4801 * @returns {void} 4802 */ 4803 hideModal() { 4804 return this.$dispatch('hyva-modal-hide', { dialog: 'amreview-popup-' + this.$el.dataset.productId }); 4805 } 4806 } 4807 ) 4808 } 4809 4810 window.addEventListener( 4811 'alpine:init', 4812 () => Alpine.data( 4813 'reviewWidgetModal', 4814 reviewWidgetModal 4815 ), 4816 {once: true} 4817 ) 4818</script>
4818 4819 4820<div x-data="initCookieGroupInfo_6ab7e945c7e16" x-bind="eventListeners"> 4821 <dialog 4822 x-ref="classic-am-cookie-group-info" 4823 data-dialog-ref-name="classic-am-cookie-group-info" 4824 aria-labelledby="amcookie-group-info" 4825 closeby="any" 4826 class="open:flex flex-col max-h-[70vh] max-w-[90vw] md:max-w-[50vw] overflow-auto 4827 bg-white shadow-xl rounded-lg p-8 text-gray-700 relative backdrop:bg-gray-500/50" 4828 x-bind="dialogConfig('classic-am-cookie-group-info')" 4829 x-htmldialog="closeHandler" 4830 > 4831 <template x-if="group"> 4832 <div id="amcookie-group-info"> 4833 <button type="button" 4834 @mousedown.prevent.stop 4835 @click.prevent.stop="closeHandler($event)" 4836 aria-label="Schliessen" 4837 class="absolute right-2 top-2 text-gray-300 transition 4838 hover:text-black focus:drop-shadow-md hover:drop-shadow-md" 4839 > 4840 <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" 4841 stroke="currentColor" 4842 stroke-width="2"> 4843 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 4844 </svg> 4845 </button> 4846 <div class="md:flex md:justify-start pb-4"> 4847 <h3 class="text-xl font-semibold" x-text="group.name"></h3> 4848 </div> 4849 <template x-if="group.description"> 4850 <p class="mb-4" x-html="group.description"></p> 4851 </template> 4852 <div class="overflow-x-scroll md:overflow-x-auto"> 4853 <div class="table-auto w-full mb-4 text-left"> 4854 <div> 4855 <template x-for="(item, index) in group.cookies" :key="index"> 4856 <div class="mt-5 pb-3 border-primary-light border-b"> 4857 <div class="flex"> 4858 <span class="pr-4 font-bold">Cookie-Name:</span> 4859 <div x-text="item.name" class="font-semibold pr-4"></div> 4860 </div> 4861 <div class="flex mt-2"> 4862 <div class="pr-4 font-bold">Cookie-Anbieter:</div> 4863 <div x-text="item.provider" class="pr-4"></div> 4864 </div> 4865 <div class="mt-2 flex flex-col"> 4866 <div class="min-w-[30%] pr-4 font-bold">Cookie-Beschreibung:</div> 4867 <div x-html="item.description" class="min-w-[30%] pr-4"></div> 4868 </div> 4869 <div class="mt-2 flex"> 4870 <div class="pr-4 font-bold">Cookie-Lebensdauer:</div> 4871 <div x-text="item.lifetime" class="pr-4"></div> 4872 </div> 4873 <div class="flex mt-2"> 4874 <div class="pr-4 font-bold">Cookie-Typ:</div> 4875 <div x-text="item.type" class="pr-4"></div> 4876 </div> 4877 </div> 4878 </template> 4879 </div> 4880 </div> 4881 </div> 4882 </div> 4883 </template> 4884 <div class="w-full flex justify-center"> 4885 <button 4886 type="button" 4887 @mousedown.prevent.stop 4888 @click.prevent.stop="closeHandler($event)" 4889 aria-label="Fertig" 4890 class="mt-4 text-xs font-semibold text-white btn-primary btn uppercase ambar-action-btn" 4891 > 4892 Fertig </button> 4893 </div> 4894 </dialog> 4895</div>
4896<script data-cfasync="false"> 4897 'use strict'; 4898 4899 function initCookieGroupInfo_6ab7e945c7e16() { 4900 return { 4901 ...hyva.modal({ 4902 dialog: 'classic-am-cookie-group-info' 4903 }), 4904 group: null, 4905 eventListeners: { 4906 ['@classic-close-am-cookie-group-info.window']() { 4907 this.closeHandler(); 4908 }, 4909 ['@classic-open-am-cookie-group-info.window'](event) { 4910 this.group = event.detail; 4911 4912 if (!!this.group) { 4913 /* 4914 If modal have big cookies list this can lead to 4915 trigger hide event in hyva.modal.eventListeners.click, 4916 so we should wait till this.group is reassigned 4917 */ 4918 this.$nextTick(() => this.show('classic-am-cookie-group-info')); 4919 } 4920 } 4921 }, 4922 closeHandler: function (event = null) { 4923 event?.preventDefault?.(); 4924 event?.stopPropagation?.(); 4925 this.hide('classic-am-cookie-group-info'); 4926 } 4927 } 4928 } 4929 4930 window.addEventListener( 4931 'alpine:init', 4932 () => Alpine.data( 4933 'initCookieGroupInfo_6ab7e945c7e16', 4934 initCookieGroupInfo_6ab7e945c7e16 ), 4935 {once: true} 4936 ); 4937</script>
4937 4938<div id="check-75c9b43529a638ae560e272516d95f3d" style="display:none"></div>
4939<script type="text/json" id="default-section-data"> 4940 {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"CH":{"name":"Schweiz","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"LI":{"name":"Liechtenstein"},"data_id":1790437701},"loggedAsCustomer":[],"captcha":[],"persistent":[],"review":[],"wishlist":{"items":[]},"amgiftcard_cart":[],"hyva_checkout":[],"wp_ga4":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[]}</script>
4940 4941</div>
4941<script> 4942 const wpGA4ServerSide = { 4943 pushClick: function(productId, listId, listName, index) { 4944 if (window.wpGA4ServerSideIsBot === true) return; 4945 if (productId) { 4946 var requestUrl = 'https://www.vedia.ch/weltpixel_ga4/track/productclick/'; 4947 if (productId && listId && listName) { 4948 fetch(requestUrl, { 4949 method: 'POST', 4950 headers: { 4951 'Content-Type': 'application/x-www-form-urlencoded', 4952 'X-Requested-With': 'XMLHttpRequest' 4953 }, 4954 body: 'product_id=' + productId + '&list_id=' + listId +'&list_name=' + listName + '&index=' + index 4955 }) 4956 .then(res => res.json()) 4957 .then(data => { 4958 }); 4959 } 4960 } 4961 }, 4962 4963 pushViewItemList: function(hashId) { 4964 if (window.wpGA4ServerSideIsBot === true) return; 4965 if (hashId && document.getElementById('wp_ga4_server_side_view_item_list')) { 4966 var requestUrl = 'https://www.vedia.ch/weltpixel_ga4/track/viewitemlist/'; 4967 fetch(requestUrl, { 4968 method: 'POST', 4969 headers: { 4970 'Content-Type': 'application/x-www-form-urlencoded', 4971 'X-Requested-With': 'XMLHttpRequest' 4972 }, 4973 4974 body: 'hash_id='+hashId 4975 }) 4976 .then(res => res.json()) 4977 .then(data => { 4978 }); 4979 } 4980 } 4981 }; 4982 4983 window.wpGA4ServerSide = wpGA4ServerSide; 4984 4985 let allowGa4Services = window.ga4AllowServices ?? true; 4986 4987 if (allowGa4Services) { 4988 let selectedShippingMethod = ''; 4989 let selectedPaymentMethod = ''; 4990 4991 const {fetch: originalFetch} = window; 4992 window.fetch = async (...args) => { 4993 let [resource, config] = args; 4994 let response = await originalFetch(resource, config); 4995 let ajaxContentBody = false; 4996 4997 if ((typeof resource == 'string') && 4998 ((resource.search('post/livewire/message/checkout.shipping.methods') > 0) || (resource.search('post/livewire/message/checkout.payment.methods') > 0))) { 4999 var jsonBody = false; 5000 if (config.body) { 5001 try { 5002 jsonBody = JSON.parse(config.body); 5003 } catch (e) {} 5004 } 5005 5006 if (jsonBody && jsonBody.updates && jsonBody.updates[0] && jsonBody.updates[0].payload && jsonBody.updates[0].payload.value) { 5007 if (resource.search('checkout.shipping.methods') > 0) { 5008 if (selectedShippingMethod != jsonBody.updates[0].payload.value) { 5009 selectedShippingMethod = jsonBody.updates[0].payload.value; 5010 ajaxContentBody = 'step=1&option=' + selectedShippingMethod; 5011 } 5012 } 5013 if (resource.search('checkout.payment.methods') > 0) { 5014 if (selectedPaymentMethod != jsonBody.updates[0].payload.value) { 5015 selectedPaymentMethod = jsonBody.updates[0].payload.value; 5016 ajaxContentBody = 'step=2&option=' + selectedPaymentMethod; 5017 } 5018 } 5019 5020 if (ajaxContentBody && window.wpGA4ServerSideIsBot !== true) { 5021 fetch('https://www.vedia.ch/weltpixel_ga4/track/hyva/', { 5022 method: 'POST', 5023 headers: { 5024 'Content-Type': 'application/x-www-form-urlencoded', 5025 'X-Requested-With': 'XMLHttpRequest' 5026 }, 5027 body: ajaxContentBody 5028 }) 5029 .then(res => res.json()) 5030 .then(data => { 5031 if (data) { 5032 window.dataLayer.push({ecommerce: null}); 5033 window.dataLayer.push(data); 5034 } 5035 }); 5036 } 5037 } 5038 } 5039 5040 if ((typeof resource == 'string') && resource.search('/customer\/section\/load/') > 0) { 5041 response.clone().json().then(data => { 5042 if (data.wp_ga4.datalayer) { 5043 const dataLayerData = JSON.parse(data.wp_ga4.datalayer); 5044 dataLayerData.forEach((dataLayerItem) => { 5045 window.dataLayer.push({ecommerce: null}); 5046 window.dataLayer.push(dataLayerItem); 5047 }); 5048 } 5049 }); 5050 } 5051 return response; 5052 }; 5053 5054 5055 (function() { 5056 if (window.wpGA4ServerSideIsBot === true) return; 5057 const ga4PromotionOptions = { 5058 enabled: 0, 5059 disableDatalayerEvents: 0, 5060 serverSidePromotionViewEnabled: 0, 5061 serverSidePromotionClickEnabled: 0 }; 5062 5063 const dataLayerPromotionViewPush = ga4PromotionOptions.enabled && !(ga4PromotionOptions.disableDatalayerEvents && ga4PromotionOptions.serverSidePromotionViewEnabled); 5064 const dataLayerPromotionClickPush = ga4PromotionOptions.enabled && !(ga4PromotionOptions.disableDatalayerEvents && ga4PromotionOptions.serverSidePromotionClickEnabled); 5065 5066 const promotionViewUrl = 'https://www.vedia.ch/weltpixel_ga4/track/promotionview/'; 5067 const promotionClickUrl = 'https://www.vedia.ch/weltpixel_ga4/track/promotionclick/'; 5068 5069 function parseJsonSafe(text, fallback) { 5070 try { return JSON.parse(text); } catch (e) { return fallback; } 5071 } 5072 5073 function getPromoItemsById(uniqueId) { 5074 if (!uniqueId) return []; 5075 const el = document.getElementById(uniqueId); 5076 if (!el) return []; 5077 const raw = el.textContent || el.innerText || '[]'; 5078 return parseJsonSafe(raw, []); 5079 } 5080 5081 function pushDataLayerEvent(evtName, ecommerce) { 5082 if (!window.dataLayer) { window.dataLayer = []; } 5083 window.dataLayer.push({ ecommerce: null }); 5084 window.dataLayer.push({ event: evtName, ecommerce: ecommerce }); 5085 } 5086 5087 function serializePromotionViews(promotionViews) { 5088 const parts = []; 5089 parts.push('dataLayerPush=' + (dataLayerPromotionViewPush ? 1 : 0)); 5090 promotionViews.forEach((pv, i) => { 5091 for (const key in pv) { 5092 if (!Object.prototype.hasOwnProperty.call(pv, key)) continue; 5093 const value = pv[key] == null ? '' : String(pv[key]); 5094 parts.push('promotion_views[' + i + '][' + encodeURIComponent(key) + ']=' + encodeURIComponent(value)); 5095 } 5096 }); 5097 return parts.join('&'); 5098 } 5099 5100 function setCookie(name, value, maxAgeSeconds) { 5101 try { 5102 document.cookie = name + '=' + encodeURIComponent(value) + '; path=/; max-age=' + maxAgeSeconds; 5103 } catch (e) {} 5104 } 5105 5106 function onPromotionClick(ev) { 5107 const el = ev.currentTarget; 5108 const promoId = el.getAttribute('data-track-promo-id') || ''; 5109 const promoName = el.getAttribute('data-track-promo-name') || ''; 5110 const promoCreative = el.getAttribute('data-track-promo-creative') || ''; 5111 const promoPositionSlot = el.getAttribute('data-track-promo-position') || ''; 5112 const promoItemIds = el.getAttribute('data-unqiue-id-items') || ''; 5113 const promoProductIds = el.getAttribute('data-track-promo-product-ids') || ''; 5114 const promoItems = getPromoItemsById(promoItemIds); 5115 5116 if (dataLayerPromotionClickPush && promoItemIds) { 5117 pushDataLayerEvent('select_promotion', { 5118 promotion_id: promoId, 5119 promotion_name: promoName, 5120 creative_name: promoCreative, 5121 creative_slot: promoPositionSlot, 5122 items: promoItems 5123 }); 5124 5125 const promotionClickCookie = JSON.stringify({ 5126 promotion_id: promoId, 5127 promotion_name: promoName, 5128 product_ids: promoProductIds 5129 });
5130 setCookie('wp_ga4_promotion_click', promotionClickCookie, 86400); 5131 } 5132 5133 if (dataLayerPromotionClickPush || ga4PromotionOptions.serverSidePromotionClickEnabled) { 5134 const body = 5135 'promotion_id=' + encodeURIComponent(promoId) + 5136 '&promotion_name=' + encodeURIComponent(promoName) + 5137 '&creative_name=' + encodeURIComponent(promoCreative) + 5138 '&creative_slot=' + encodeURIComponent(promoPositionSlot) + 5139 '&product_ids=' + encodeURIComponent(promoProductIds) + 5140 '&promo_items_uniqueid=' + encodeURIComponent(promoItemIds) + 5141 '&dataLayerPush=' + (dataLayerPromotionClickPush ? 1 : 0); 5142 5143 fetch(promotionClickUrl, { 5144 method: 'POST', 5145 headers: { 5146 'Content-Type': 'application/x-www-form-urlencoded', 5147 'X-Requested-With': 'XMLHttpRequest' 5148 }, 5149 body: body 5150 }) 5151 .then(res => res.json()) 5152 .then(pushData => { 5153 if (dataLayerPromotionClickPush && pushData) { 5154 try { 5155 for (let i = 0; i < pushData.length; i++) { 5156 window.dataLayer.push({ ecommerce: null }); 5157 window.dataLayer.push(pushData[i]); 5158 } 5159 const promotionClickCookie = JSON.stringify({ 5160 promotion_id: promoId, 5161 promotion_name: promoName, 5162 product_ids: promoProductIds 5163 }); 5164 setCookie('wp_ga4_promotion_click', promotionClickCookie, 86400); 5165 } catch (e) {} 5166 } 5167 }) 5168 .catch(() => {}); 5169 } 5170 } 5171 5172 function bindPromotionClicks() { 5173 const elements = document.querySelectorAll('[data-track-promo-id]'); 5174 elements.forEach((el) => { 5175 el.removeEventListener('click', onPromotionClick); 5176 el.addEventListener('click', onPromotionClick); 5177 }); 5178 } 5179 5180 function handlePromotionViews() { 5181 if (!(dataLayerPromotionViewPush || ga4PromotionOptions.serverSidePromotionViewEnabled)) return; 5182 const promotionViews = []; 5183 const elements = document.querySelectorAll('[data-track-promo-id]'); 5184 elements.forEach((el) => { 5185 const promoId = el.getAttribute('data-track-promo-id') || ''; 5186 const promoName = el.getAttribute('data-track-promo-name') || ''; 5187 const promoCreative = el.getAttribute('data-track-promo-creative') || ''; 5188 const promoPositionSlot = el.getAttribute('data-track-promo-position') || ''; 5189 const promoItemIds = el.getAttribute('data-unqiue-id-items') || ''; 5190 const promoProductIds = el.getAttribute('data-track-promo-product-ids') || ''; 5191 const promoItems = getPromoItemsById(promoItemIds); 5192 5193 if (dataLayerPromotionViewPush && promoItemIds) { 5194 pushDataLayerEvent('view_promotion', { 5195 promotion_id: promoId, 5196 promotion_name: promoName, 5197 creative_name: promoCreative, 5198 creative_slot: promoPositionSlot, 5199 items: promoItems 5200 }); 5201 } 5202 5203 promotionViews.push({ 5204 promotion_id: promoId, 5205 promotion_name: promoName, 5206 creative_name: promoCreative, 5207 creative_slot: promoPositionSlot, 5208 product_ids: promoProductIds, 5209 promo_items_uniqueid: promoItemIds 5210 }); 5211 }); 5212 5213 if (promotionViews.length) { 5214 const body = serializePromotionViews(promotionViews); 5215 fetch(promotionViewUrl, { 5216 method: 'POST', 5217 headers: { 5218 'Content-Type': 'application/x-www-form-urlencoded', 5219 'X-Requested-With': 'XMLHttpRequest' 5220 }, 5221 body: body 5222 }) 5223 .then(res => res.json()) 5224 .then(pushData => { 5225 if (dataLayerPromotionViewPush && pushData) { 5226 try { 5227 for (let i = 0; i < pushData.length; i++) { 5228 window.dataLayer.push({ ecommerce: null }); 5229 window.dataLayer.push(pushData[i]); 5230 } 5231 } catch (e) {} 5232 } 5233 }) 5234 .catch(() => {}); 5235 } 5236 } 5237 5238 if (dataLayerPromotionClickPush || ga4PromotionOptions.serverSidePromotionClickEnabled || 5239 dataLayerPromotionViewPush || ga4PromotionOptions.serverSidePromotionViewEnabled) { 5240 if (document.readyState === 'loading') { 5241 document.addEventListener('DOMContentLoaded', function() { 5242 bindPromotionClicks(); 5243 handlePromotionViews(); 5244 }); 5245 } else { 5246 bindPromotionClicks(); 5247 handlePromotionViews(); 5248 } 5249 } 5250 })(); 5251 5252 } 5253 5254 </script>
vendor: 1 bytes, line 5254
5254
5255<script type="text/x-magento-init">{"*": 5256 {"Magento_Persistent/js/remember-me-config": { 5257 "config": {"persistenceConfig":{"isRememberMeCheckboxVisible":true,"isRememberMeCheckboxChecked":true}} 5258 }}}</script>
5258</body> 5259</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.