1<!DOCTYPE html> 2<html lang="de-DE" 3 itemscope="itemscope" 4 itemtype="https://schema.org/WebPage" 5 > 6 7 8 9 10 <head> 11 <meta charset="utf-8"> 12 13 <meta name="viewport" 14 content="width=device-width, initial-scale=1, shrink-to-fit=no"> 15 16 <meta name="author" 17 content=""> 18 <meta name="robots" 19 content="noindex,follow"> 20 <meta name="revisit-after" 21 content="15 days"> 22 <meta name="keywords" 23 content=""> 24 <meta name="description" 25 content=""> 26 27 <meta property="og:url" 28 content="https://www.tekoplan-planen.shop/account/login"> 29 <meta property="og:type" 30 content="website"> 31 <meta property="og:site_name" 32 content="Tekoplan GmbH - Der PVC Planen Online Shop"> 33 <meta property="og:title" 34 content="Registrierung | Tekoplan GmbH - Der PVC Planen Online Shop"> 35 <meta property="og:description" 36 content=""> 37 <meta property="og:image" 38 content="https://www.tekoplan-planen.shop/media/8e/54/60/1668004341/tekoplan-planenmanufaktur.png?ts=1668004341"> 39 40 <meta name="twitter:card" 41 content="summary"> 42 <meta name="twitter:site" 43 content="Tekoplan GmbH - Der PVC Planen Online Shop"> 44 <meta name="twitter:title" 45 content="Registrierung | Tekoplan GmbH - Der PVC Planen Online Shop"> 46 <meta name="twitter:description" 47 content=""> 48 <meta name="twitter:image" 49 content="https://www.tekoplan-planen.shop/media/8e/54/60/1668004341/tekoplan-planenmanufaktur.png?ts=1668004341"> 50 51 <meta itemprop="copyrightHolder" 52 content="Tekoplan GmbH - Der PVC Planen Online Shop"> 53 <meta itemprop="copyrightYear" 54 content=""> 55 <meta itemprop="isFamilyFriendly" 56 content="true"> 57 <meta itemprop="image" 58 content="https://www.tekoplan-planen.shop/media/8e/54/60/1668004341/tekoplan-planenmanufaktur.png?ts=1668004341"> 59 60 <meta name="theme-color" 61 content="#171717"> 62 63 64 65 66 67 68 69 70 71 72 <!-- Custom html code --><meta name="google-site-verification" content="uSlcdPNGo_HNjwn5H8FLTiBoBFVt2EsQQaJ3vXFbSdw" />
72<script> 73 function uet_report_conversion() { 74 window.uetq = window.uetq || []; 75 window.uetq.push("event", "", {"revenue_value":"1","currency":"EUR"}); 76 } 77</script>
77<!-- Meta Pixel Code -->
77<script>
vendor: 399 bytes, lines 77-86
77 78!function(f,b,e,v,n,t,s) 79{if(f.fbq)return;n=f.fbq=function(){n.callMethod? 80n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 81if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 82n.queue=[];t=b.createElement(e);t.async=!0; 83t.src=v;s=b.getElementsByTagName(e)[0]; 84s.parentNode.insertBefore(t,s)}(window, document,'script', 85'https://connect.facebook.net/en_US/fbevents.js'); 86fbq('init', '
861965863263791371
vendor: 30 bytes, lines 86-87
86'); 87fbq('track', 'PageView');
88</script>
88<noscript><img height="1" width="1" style="display:none" 89src="https://www.facebook.com/tr?id=1965863263791371&ev=PageView&noscript=1" 90/></noscript><!-- End Meta Pixel Code --> 91 92 93 94 95 96 97 <link rel="icon" href="https://www.tekoplan-planen.shop/media/3b/d5/d6/1757671064/exquisite-favicon_(8).png?ts=1757671064"> 98 99 <link rel="apple-touch-icon" 100 href="https://www.tekoplan-planen.shop/media/cb/c7/05/1757671064/exquisite-share-icon_(8).png?ts=1757671064"> 101 102 103 <title itemprop="name"> 104 Registrierung | Tekoplan GmbH - Der PVC Planen Online Shop </title> 105 106 <style> 107 :root {--sw-color-brand-primary: #dc1a22;--sw-color-brand-secondary: #070707;--sw-border-color: #dedede;--sw-background-color: #171717;--sw-color-success: #3cc261;--sw-color-info: #26b6cf;--sw-color-warning: #ffbd5d;--sw-color-danger: #e00000;--sw-font-family-base: 'Inter', sans-serif;--sw-text-color: #000000;--sw-font-family-headline: 'Oswald', sans-serif;--sw-headline-color: #333333;--sw-color-price: #000000;--sw-color-buy-button: #3d7f53;--sw-color-buy-button-text: #ffffff;--sw-logo-desktop: url('https://www.tekoplan-planen.shop/media/8e/54/60/1668004341/tekoplan-planenmanufaktur.png?ts=1668004341');--sw-logo-tablet: url('https://www.tekoplan-planen.shop/media/8e/54/60/1668004341/tekoplan-planenmanufaktur.png?ts=1668004341');--sw-logo-mobile: url('https://www.tekoplan-planen.shop/media/8e/54/60/1668004341/tekoplan-planenmanufaktur.png?ts=1668004341');--sw-logo-share: url('https://www.tekoplan-planen.shop/media/cb/c7/05/1757671064/exquisite-share-icon_(8).png?ts=1757671064');--sw-logo-favicon: url('https://www.tekoplan-planen.shop/media/3b/d5/d6/1757671064/exquisite-favicon_(8).png?ts=1757671064');--sw-breakpoint-xs: 0;--sw-breakpoint-sm: 576;--sw-breakpoint-md: 768;--sw-breakpoint-lg: 992;--sw-breakpoint-xl: 1200;--sw-breakpoint-xxl: 1400;--twt-color-brand-primary-light: #e84545;--twt-color-brand-primary-dark: #ad0000;--twt-color-brand-secondary-light: #141414;--twt-color-brand-secondary-dark: #070707;--twt-font-size-base: 16;--twt-font-size-h1: 36;--twt-font-size-h2: 28;--twt-font-size-h3: 24;--twt-font-size-h4: 20;--twt-font-size-h5: 16;--twt-font-size-h6: 14;--twt-font-size-html-xs: 80;--twt-font-size-html-sm: 90;--twt-font-size-html-xl: 100;--twt-link-color: var(--sw-color-brand-primary);--twt-font-weight-light: 400;--twt-font-weight-normal: 400;--twt-font-weight-bold: 700;--twt-google-font-import: 1;--twt-font-family-base-font-weight: 400,700;
107--twt-font-family-headline-font-weight: 400,700;--twt-iconset: twt-six;--twt-icon-cart: bag;--twt-icon-newsletter-submit: envelope;--twt-icon-benefits: checkmark;--twt-color-details-button: #f9f9f9;--twt-sticky-nav-main-logo-image: url('https://www.tekoplan-planen.shop/media/8e/54/60/1668004341/tekoplan-planenmanufaktur.png?ts=1668004341');--twt-shopping-experiences-header-logo-image: url('https://www.tekoplan-planen.shop/media/8e/54/60/1668004341/tekoplan-planenmanufaktur.png?ts=1668004341');--twt-container-layout: 2;--twt-border-radius: 1;--twt-background-image-show: 2;--twt-background-image-size: cover;--twt-background-image-position: left top;--twt-background-image-repeat: repeat;--twt-background-image-attachment: fixed;--twt-background-image: url('https://www.tekoplan-planen.shop/media/1d/85/75/1757671064/exquisite-background_(8).jpg?ts=1757671064');--twt-container-max-width: 1900;--twt-container-layout-margin-top-bottom: 30;--twt-container-layout-box-shadow: 0 0 30px;--twt-container-layout-box-shadow-color: rgba(0, 0, 0, 0.3);--twt-container-padding-left-right: 10;--twt-container-main-margin-top: 20;--twt-container-main-margin-bottom: 40;--twt-container-main-padding-phone-xs: 8;--twt-container-main-padding-phone: 15;--twt-container-main-padding-tablet: 20;--twt-container-main-padding: 30;--twt-container-main-border-color: #ffffff;--twt-container-main-background-color: #ffffff;--twt-color-primary-button: var(--twt-color-brand-primary-dark);--twt-color-secondary-button: var(--sw-color-brand-secondary);--twt-color-light-button: #f9f9f9;--twt-dropdown-color: #000000;--twt-dropdown-link-color: #000000;--twt-dropdown-link-color-hover: var(--sw-color-brand-primary);--twt-dropdown-border-color: #e0e0e0;--twt-dropdown-background-color: #ffffff;--twt-dropdown-box-shadow-type: 1;--twt-forms-layout-type: 2;--twt-forms-input-color: #222222;--twt-forms-input-color-hover: var(--sw-color-brand-primary);--twt-forms-input-focus-color: var(--sw-color-brand-primary);--twt-forms-input-border-color: #cccccc;--twt-forms-input-border-color-hover: var(--sw-color-brand-primary);--twt-forms-input-focus-border-color: var(--sw-color-brand-primary);--twt-forms-input-background-color: #fafafa;--twt-forms-input-focus-background-color: #e7e7e7;--twt-forms-input-placeholder-color: #8e8e8e;--twt-forms-label-color: #515151;--twt-forms-check-input-background-color: #cccccc;--twt-forms-check-input-checked-background-color: var(--sw-color-brand-primary);--twt-forms-input-font-size: 15;--twt-forms-label-font-size: 14;--twt-modal-backdrop-color: rgba(0, 0, 0, 0.5);--twt-modal-backdrop-effect-blur: 0;--twt-product-review-point-color: #fedc70;--twt-product-review-point-blank-color: #bcc1c7;--twt-table-body-color: #333333;--twt-table-body-border-color: #eeeeee;--twt-table-body-background-color: transparent;--twt-table-accent-background-color: transparent;--twt-table-hover-color: var(--twt-table-body-color);--twt-table-hover-background-color: rgba(0, 0, 0, 0.075);--twt-table-active-background-color: var(--twt-table-hover-background-color);--twt-table-head-color: #ffffff;--twt-table-head-background-color: #333333;--twt-table-dark-color: #ffffff;--twt-table-dark-border-color: #5b6770;--twt-table-dark-background-color: #4a545b;--twt-table-dark-accent-background-color: rgba(255, 255, 255, 0.05);--twt-table-dark-hover-color: var(--twt-table-dark-color);--twt-table-dark-hover-background-color: rgba(255, 255, 255, 0.075);--twt-table-border-color: #dddddd;--twt-table-body-border-bottom-color: rgba(0, 0, 0, 0);--twt-table-head-border-bottom-color: var(--twt-table-body-border-color);--twt-table-dark-head-border-bottom-color: var(--twt-table-dark-border-color);--twt-header-type: 4;--twt-header-margin-top: 5;--twt-header-padding-top: 5;--twt-header-padding-bottom: 15;--twt-header-width: 1;--twt-header-height: 40;--twt-custom-header-nav-max-width: 1200;--twt-header-actions-background-color: rgba(255, 255, 255, 0);--twt-header-background-image-show: 2;--twt-header-background-image-size: auto;--twt-header-background-image-position: left top;--twt-header-background-image-repeat: repeat;--twt-header-background-image-attachment: fixed;--twt-header-background-image: url('https://www.tekoplan-planen.shop/media/a6/f2/54/1667310908/exquisite-background-footer.jpg?ts=1667310908');--twt-header-dropdown-font-size: 14;--twt-header-dropdown-color: #111111;--twt-header-dropdown-color-hover: var(--sw-color-brand-primary);
107--twt-header-dropdown-border-color: #e0e0e0;--twt-header-dropdown-background-color: #ffffff;--twt-header-logo-type: 1;--twt-header-logo-width: 360;--twt-header-logo-height: auto;--twt-header-logo-margin-top: 0;--twt-header-logo-hover-type: 2;--twt-textlogo-fill: #333333;--twt-textlogo-font-size: 24;--twt-textlogo-font-weight: bold;--twt-header-top-bar-show: 2;--twt-header-top-bar-width: 0;--twt-header-top-bar-color: #ffffff;--twt-header-top-bar-color-hover: #cccccc;--twt-header-top-bar-color-hotline: #555555;--twt-header-top-bar-border-color: transparent;--twt-header-top-bar-background-color: #000;--twt-header-top-bar-font-size: 14;--twt-header-top-bar-line-height: 40;--twt-header-top-bar-justify-content: flex-end;--twt-header-top-bar-icon-font-size: 1;--twt-header-top-bar-hotline-show: 1;--twt-header-top-bar-hotline-label-show: 2;--twt-header-top-bar-languages-menu-show: 2;--twt-header-top-bar-languages-menu-text-show: 2;--twt-languages-menu-additional-flags: 1;--twt-languages-menu-additional-flags-extended: 1;--twt-languages-menu-shopware-language-pack: 1;--twt-header-top-bar-currencies-menu-show: 2;--twt-header-top-bar-currencies-menu-text-show: 2;--twt-header-top-bar-service-menu-show: 2;--twt-header-top-bar-service-menu-text-show: 2;--twt-header-search-show: 2;--twt-header-search-type: 2;--twt-header-search-input-corner-type: 1;--twt-header-search-input-border-radius: 10;--twt-header-search-input-color: #000000;--twt-header-search-input-border-color: #ffffff;--twt-header-search-input-background-color: #ffffff;--twt-header-search-btn-icon-color: #ffffff;--twt-header-search-btn-border-color: var(--sw-color-brand-primary);--twt-header-search-btn-background-color: var(--sw-color-brand-primary);--twt-header-search-text-align: left;--twt-header-search-max-width: 500;--twt-header-search-width-desktop: 800;--twt-header-search-flyout-container-width: 1;--twt-header-search-flyout-max-width: 500;--twt-header-search-flyout-max-width-desktop: 100%;--twt-header-search-flyout-padding: 15;--twt-header-phone-search-flyout-background-color: #111111;--twt-header-search-flyout-background-color: #000000;--twt-header-search-fullscreen-backdrop-color: rgba(0, 0, 0, 0.9);--twt-header-search-fullscreen-backdrop-effect-blur: 0;--twt-header-actions-btn-text-show: 1;--twt-header-actions-btn-icon-position: 1;--twt-header-actions-btn-corner-type: 2;--twt-header-actions-btn-font-size: 14;--twt-header-actions-btn-font-weight: normal;--twt-header-actions-btn-line-height: 40;--twt-header-actions-btn-icon-font-size: 22;--twt-header-actions-btn-color: #ffffff;--twt-header-actions-btn-color-hover: #cccccc;--twt-header-actions-btn-icon-color: #ffffff;--twt-header-actions-btn-icon-color-hover: #cccccc;--twt-header-actions-btn-border-color: transparent;--twt-header-actions-btn-border-color-hover: transparent;--twt-header-actions-btn-background-color: transparent;--twt-header-actions-btn-background-color-hover: transparent;--twt-header-actions-wishlist-btn-badge-background-color: var(--sw-color-brand-primary);--twt-header-actions-account-menu-btn-badge-show: 1;--twt-header-actions-account-menu-btn-badge-background-color: var(--sw-color-brand-primary);--twt-header-actions-cart-btn-total-show: 3;--twt-header-actions-cart-btn-badge-show: 3;--twt-header-actions-cart-btn-text-show: 1;--twt-header-actions-cart-btn-separator-show: 1;--twt-header-actions-cart-btn-font-weight: normal;--twt-header-actions-cart-btn-color: #ffffff;--twt-header-actions-cart-btn-color-hover: #cccccc;--twt-header-actions-cart-btn-icon-color: #ffffff;--twt-header-actions-cart-btn-icon-color-hover: #cccccc;--twt-header-actions-cart-btn-border-color: transparent;--twt-header-actions-cart-btn-border-color-hover: transparent;--twt-header-actions-cart-btn-separator-border-color: #e4e7ea;--twt-header-actions-cart-btn-background-color: transparent;--twt-header-actions-cart-btn-background-color-hover: transparent;--twt-header-actions-cart-btn-badge-background-color: var(--sw-color-brand-primary);--twt-nav-main-show: 2;--twt-nav-main-home-link-show: 2;--twt-nav-main-home-link: 2;--twt-nav-main-arrows-show: 2;--twt-nav-main-hover-type: 1;--twt-nav-main-height: 60;--twt-nav-main-padding: 16;--twt-nav-main-padding-bottom: 0;--twt-nav-main-margin-left: 0;--twt-nav-main-margin-right: 0;--twt-nav-main-width: 0;--twt-nav-main-background-color: transparent;--twt-nav-main-border-bottom-color: var(--sw-color-brand-primary);--twt-nav-main-border-bottom-color-hover: var(--sw-color-brand-primary);--twt-nav-main-border: transparent;--twt-nav-main-font-family: 2;--twt-nav-main-font-size: 21;--twt-nav-main-font-weight: bold;--twt-nav-main-font-weight-active: bold;--twt-nav-main-justify-content: center;--twt-nav-main-text-transform: uppercase;--twt-nav-main-home-link-color: #ffffff;--twt-nav-main-home-link-color-hover: var(--sw-color-brand-primary);--twt-nav-main-home-link-color-active: var(--sw-color-brand-primary);--twt-nav-main-color: #ffffff;--twt-nav-main-color-hover: var(--sw-color-brand-primary);--twt-nav-main-color-active: var(--sw-color-brand-primary);--twt-nav-main-icon-color: #ffffff;--twt-nav-main-icon-color-hover: var(--sw-color-brand-primary);--twt-nav-main-icon-color-active: var(--sw-color-brand-primary);--twt-nav-main-link-background-color: rgba(255, 255, 255, 0);--twt-nav-main-background-color-hover: rgba(0, 0, 0, 0.97);--twt-nav-main-background-color-active: transparent;--twt-nav-main-link-highlighted-color: #ef2f3c;--twt-nav-main-link-highlighted-color-hover: #feecee;--twt-nav-main-link-highlighted-color-active: #ef2f3c;--twt-nav-main-link-highlighted-icon-color: #ef2f3c;--twt-nav-main-link-highlighted-icon-color-hover: #feecee;--twt-nav-main-link-highlighted-icon-color-active: #ef2f3c;--twt-nav-main-link-highlighted-background-color: rgba(255, 255, 255, 0);--twt-nav-main-link-highlighted-background-color-hover: #ef2f3c;--twt-nav-main-link-highlighted-background-color-active: #ffffff;--twt-nav-main-flyout: 2;--twt-nav-main-max-depth: 3;--twt-nav-main-flyout-sizing-mode: 4;--twt-nav-main-flyout-width: 1360px;--twt-nav-main-flyout-style: 2;--twt-nav-main-flyout-animation: 3;--twt-nav-main-flyout-categories-margin-left: 10;--twt-nav-main-flyout-categories-color: #ffffff;--twt-nav-main-flyout-categories-color-hover: var(--sw-color-brand-primary);--twt-nav-main-flyout-categories-color-active: var(--sw-color-brand-primary);--twt-nav-main-flyout-categories-icon-color: #ffffff;--twt-nav-main-flyout-background-color: rgba(0, 0, 0, 0.97);--twt-nav-main-flyout-seperator-color: #bcc1c7;--twt-nav-main-flyout-font-family: 1;--twt-nav-main-flyout-font-size: 16;
107--twt-nav-main-flyout-font-weight: normal;--twt-nav-main-flyout-text-transform: none;--twt-nav-main-flyout-level1-font-family: 1;--twt-nav-main-flyout-level1-font-size: 16;--twt-nav-main-flyout-level1-font-weight: normal;--twt-nav-main-flyout-level1-text-transform: none;--twt-nav-main-flyout-level2-font-family: 1;--twt-nav-main-flyout-level2-font-size: 16;--twt-nav-main-flyout-level2-font-weight: normal;--twt-nav-main-flyout-level2-text-transform: none;--twt-nav-main-flyout-bar-show: 2;--twt-nav-main-flyout-bar-padding-top-bottom: 15;--twt-nav-main-flyout-bar-padding-left-right: 15;--twt-nav-main-flyout-bar-color: #cccccc;--twt-nav-main-flyout-bar-color-hover: var(--sw-color-brand-primary);--twt-nav-main-flyout-bar-background-color: #111111;--twt-nav-main-flyout-close-btn-padding: 15;--twt-sticky-nav-main-show: 2;--twt-sticky-nav-main-type: 1;--twt-sticky-nav-main-scroll-top: 0;--twt-sticky-nav-main-breakpoint: 6;--twt-sticky-nav-main-height: 50;--twt-sticky-nav-main-justify-content: center;--twt-sticky-nav-main-toggle: 1;--twt-sticky-nav-main-cart-show: 2;--twt-sticky-nav-main-search-show: 1;--twt-sticky-nav-main-background-color: #111111;--twt-sticky-nav-main-logo-show: 2;--twt-sticky-nav-main-logo-width: 80;--twt-sticky-nav-main-logo-height: auto;--twt-sticky-nav-main-logo-margin-right: 20;--twt-header-minimal-fixed: 1;--twt-header-minimal-height: 90;--twt-header-minimal-color: #cccccc;--twt-header-minimal-link-color: #cccccc;--twt-header-minimal-link-color-hover: #ffffff;--twt-header-minimal-border-bottom-color: rgba(0, 0, 0, 0);--twt-header-minimal-background-color: rgba(0, 0, 0, 0);--twt-header-minimal-home-btn-color: #cccccc;--twt-header-minimal-home-btn-color-hover: #ffffff;--twt-header-minimal-home-btn-border-color: rgba(0, 0, 0, 0);--twt-header-minimal-home-btn-border-color-hover: rgba(0, 0, 0, 0);--twt-header-minimal-home-btn-background-color: #111111;--twt-header-minimal-home-btn-background-color-hover: #111111;--twt-header-phone-type: 1;--twt-header-logo-max-width-mobile: 160;--twt-header-height-mobile: 50;--twt-header-phone-fixed: 2;--twt-header-phone-background-color: #111111;--twt-header-phone-btn-color: #ffffff;--twt-header-phone-btn-color-hover: var(--sw-color-brand-primary);--twt-header-phone-btn-icon-color: #ffffff;--twt-header-phone-btn-icon-color-hover: var(--sw-color-brand-primary);--twt-header-phone-btn-border-color: #111111;--twt-header-phone-btn-border-color-hover: #111111;--twt-header-phone-btn-background-color: #111111;--twt-header-phone-btn-background-color-hover: #111111;--twt-header-phone-nav-type: 1;--twt-header-phone-nav-height: 70;--twt-header-phone-logo-position: center;--twt-header-phone-nav-background-color: #ffffff;--twt-header-phone-nav-box-shadow: 0 0 20px;--twt-header-phone-nav-box-shadow-color: rgba(0, 0, 0, 0.1);--twt-header-phone-btn-corner-type: 3;--twt-header-phone-btn-home: 1;--twt-header-phone-btn-home-order: 100;--twt-header-phone-btn-navigation-order: 200;--twt-header-phone-btn-search-order: 300;--twt-header-phone-btn-cart-order: 400;--twt-header-phone-btn-wishlist-order: 500;--twt-header-phone-btn-account-order: 600;--twt-header-phone-cart-btn-highlighting: 2;--twt-header-phone-search-flyout-position: 2;--twt-header-phone-nav-main-toggle-label-show: 2;--twt-shopping-experiences-header-position: 2;--twt-footer-margin-top: 20;--twt-footer-padding-top: 0;--twt-footer-padding-bottom: 0;--twt-footer-padding: 0;--twt-footer-background-color: #ffffff;--twt-footer-background-image-show: 2;--twt-footer-background-image-size: cover;--twt-footer-background-image-position: left top;--twt-footer-background-image-repeat: repeat;--twt-footer-background-image-attachment: fixed;--twt-footer-background-image: url('https://www.tekoplan-planen.shop/media/29/db/b2/1757671064/exquisite-background-footer_(8).jpg?ts=1757671064');--twt-footer-column-font-family: 1;--twt-footer-column-font-size: 16;--twt-footer-column-headline-font-size: 18;
107--twt-footer-column-headline-font-weight: bold;--twt-footer-column-headline-text-transform: none;--twt-footer-column-headline-link-underline: 1;--twt-footer-grid-columns-tablet: 4;--twt-footer-grid-columns: 3;--twt-footer-width-columns-top: 2;--twt-footer-upper-section-margin-bottom: 0;--twt-footer-columns-top-padding-top: 20;--twt-footer-columns-top-padding-right: 1;--twt-footer-columns-top-padding-bottom: 1;--twt-footer-columns-top-padding-left: 1;--twt-footer-columns-top-justify-content: space-around;--twt-footer-column-top-color: #ffffff;--twt-footer-column-top-link-color: #ffffff;--twt-footer-column-top-link-color-hover: var(--sw-color-brand-primary);--twt-footer-columns-top-background-color: #e00000;--twt-footer-column-top-headline-color: var(--sw-color-brand-primary);--twt-footer-column-top-headline-border-color: #050505;--twt-footer-upper-section-background-image-show: 2;--twt-footer-upper-section-background-image-size: auto;--twt-footer-upper-section-background-image-position: left top;--twt-footer-upper-section-background-image-repeat: repeat;--twt-footer-upper-section-background-image-attachment: fixed;--twt-footer-upper-section-background-image: url('');--twt-footer-column-top-text-align: center;--twt-footer-width: 1;--twt-footer-main-section-margin-bottom: 0;--twt-footer-columns-padding-top: 20;--twt-footer-columns-padding-right: 1;--twt-footer-columns-padding-bottom: 1;--twt-footer-columns-padding-left: 1;--twt-footer-justify-content: space-between;--twt-footer-column-color: #fefefe;--twt-footer-column-link-color: #ffffff;--twt-footer-column-link-color-hover: var(--sw-color-brand-primary);--twt-footer-columns-background-color: rgba(0, 0, 0, 0);--twt-footer-column-headline-color: var(--sw-color-brand-primary);--twt-footer-column-headline-border-color: #ffffff;--twt-footer-main-section-background-image-show: 2;--twt-footer-main-section-background-image-size: contain;--twt-footer-main-section-background-image-position: left top;--twt-footer-main-section-background-image-repeat: repeat;--twt-footer-main-section-background-image-attachment: fixed;--twt-footer-column-text-align: left;--twt-footer-width-columns-bottom: 2;--twt-footer-lower-section-margin-bottom: 0;--twt-footer-columns-bottom-padding-top: 20;--twt-footer-columns-bottom-padding-right: 1;--twt-footer-columns-bottom-padding-bottom: 1;--twt-footer-columns-bottom-padding-left: 1;--twt-footer-columns-bottom-justify-content: space-around;--twt-footer-column-bottom-color: #ffffff;--twt-footer-column-bottom-link-color: #ffffff;--twt-footer-column-bottom-link-color-hover: #cccccc;--twt-footer-columns-bottom-background-color: #e00000;--twt-footer-column-bottom-headline-color: var(--sw-color-brand-primary);--twt-footer-column-bottom-headline-border-color: #050505;--twt-footer-lower-section-background-image-show: 2;--twt-footer-lower-section-background-image-size: auto;--twt-footer-lower-section-background-image-position: left top;--twt-footer-lower-section-background-image-repeat: repeat;--twt-footer-lower-section-background-image-attachment: fixed;--twt-footer-lower-section-background-image: url('');--twt-footer-column-bottom-text-align: center;--twt-footer-element-1: about;--twt-footer-element-1-toggle: 3;--twt-footer-element-1-newcol: 3;--twt-footer-element-1-position: 1;--twt-footer-element-1-order: 100;--twt-footer-element-2: footernav;--twt-footer-element-2-toggle: 3;--twt-footer-element-2-newcol: 1;--twt-footer-element-2-position: 1;--twt-footer-element-2-order: 200;--twt-footer-element-3: hotline;--twt-footer-element-3-toggle: 3;--twt-footer-element-3-newcol: 1;--twt-footer-element-3-position: 1;--twt-footer-element-3-order: 300;--twt-footer-element-4: benefits;--twt-footer-element-4-toggle: 3;--twt-footer-element-4-newcol: 1;--twt-footer-element-4-position: 1;--twt-footer-element-4-order: 400;--twt-footer-element-5: paymentshipping;--twt-footer-element-5-toggle: 3;--twt-footer-element-5-newcol: 1;--twt-footer-element-5-position: 1;--twt-footer-element-5-order: 500;--twt-footer-element-6: newsletter;--twt-footer-element-6-toggle: 3;--twt-footer-element-6-newcol: 3;--twt-footer-element-6-position: 2;--twt-footer-element-6-order: 600;--twt-footer-element-7: awards;--twt-footer-element-7-toggle: 3;--twt-footer-element-7-newcol: 1;--twt-footer-element-7-position: 1;--twt-footer-element-7-order: 700;--twt-footer-element-8: communities;--twt-footer-element-8-toggle: 3;--twt-footer-element-8-newcol: 2;--twt-footer-element-8-position: 3;--twt-footer-element-8-order: 800;--twt-footer-element-9: none;--twt-footer-element-9-toggle: 3;--twt-footer-element-9-newcol: 1;--twt-footer-element-9-position: 1;--twt-footer-element-9-order: 900;--twt-footer-element-10: none;--twt-footer-element-10-toggle: 3;--twt-footer-element-10-newcol: 1;--twt-footer-element-10-position: 1;--twt-footer-element-10-order: 1000;--twt-footer-element-11: none;--twt-footer-element-11-toggle: 3;--twt-footer-element-11-newcol: 1;--twt-footer-element-11-position: 2;--twt-footer-element-11-order: 1100;--twt-footer-minimal-color: #cccccc;--twt-footer-minimal-link-color: #cccccc;--twt-footer-minimal-background-color: rgba(0, 0, 0, 0);--twt-footer-minimal-service-menu-link-color: #cccccc;--twt-footer-minimal-copyright-border-top-color: rgba(0, 0, 0, 0);--twt-footer-minimal-font-size: 14;--twt-footer-logos-show: none;--twt-footer-service-menu-show: 5;--twt-footer-bottom-element-1: none;--twt-footer-bottom-color: #cccccc;--twt-footer-bottom-link-color: #cccccc;--twt-footer-bottom-link-color-hover: #ffffff;--twt-footer-bottom-background-color: transparent;--twt-footer-bottom-background-image-show: 2;--twt-footer-bottom-background-image-size: auto;--twt-footer-bottom-background-image-position: left top;--twt-footer-bottom-background-image-repeat: repeat;--twt-footer-bottom-background-image-attachment: fixed;--twt-footer-bottom-background-image: url('');--twt-footer-bottom-font-size: 14;--twt-breadcrumb-show-home: 1;--twt-breadcrumb-show-cms-shop-pages: 1;--twt-breadcrumb-show-cms-landing-pages: 1;--twt-breadcrumb-show-cms-category-pages: 1;--twt-breadcrumb-show-cms-product-pages: 1;--twt-breadcrumb-style: 1;--twt-breadcrumb-separator-style: 1;--twt-breadcrumb-further-information: 1;--twt-breadcrumb-links-underline: 1;--twt-breadcrumb-text-color: #444444;--twt-breadcrumb-divider-color: #444444;--twt-breadcrumb-link-color: #444444;--twt-breadcrumb-link-active-color: var(--sw-color-brand-primary);--twt-breadcrumb-buttons-border-color: #bcc1c7;--twt-breadcrumb-buttons-background-color: #eeeeee;--twt-breadcrumb-buttons-border-color-active: var(--sw-color-brand-primary);--twt-breadcrumb-buttons-background-color-active: var(--sw-color-brand-primary);--twt-breadcrumb-buttons-corner-type: 2;--twt-breadcrumb-buttons-border-show: 2;--twt-breadcrumb-buttons-separator-show: 1;--twt-breadcrumb-list-corner-type: 2;--twt-breadcrumb-border-color-list: #bcc1c7;--twt-breadcrumb-background-color-list: #eeeeee;--twt-breadcrumb-container-styling: 1;--twt-breadcrumb-container-corner-type: 2;--twt-breadcrumb-width: 1;--twt-breadcrumb-margin-top: 10;--twt-breadcrumb-margin-bottom: 10;--twt-breadcrumb-padding-top-bottom: 1;--twt-breadcrumb-padding-left-right: 1;--twt-breadcrumb-justify-content: flex-start;--twt-breadcrumb-border-color: rgba(0, 0, 0, 0);--twt-breadcrumb-border-top-color: rgba(0, 0, 0, 0);--twt-breadcrumb-border-bottom-color: rgba(0, 0, 0, 0);--twt-breadcrumb-background-color: rgba(0, 0, 0, 0);--twt-cookie-permission-show: 2;--twt-cookie-permission-position: 1;--twt-cookie-permission-padding: 10;
107--twt-cookie-permission-box-shadow: 0 0 30px;--twt-cookie-permission-box-shadow-color: rgba(0, 0, 0, 0.2);--twt-cookie-permission-overlay-color: rgba(0, 0, 0, 0.5);--twt-cookie-permission-overlay-effect-blur: 0;--twt-cookie-permission-top: 40;--twt-cookie-permission-left: 25;--twt-cookie-permission-bottom: 40;--twt-cookie-permission-right: 25;--twt-cookie-permission-width: 1;--twt-cookie-permission-max-width: 260;--twt-cookie-permission-color: #555555;--twt-cookie-permission-border-color: #cccccc;--twt-cookie-permission-background-color: #ffffff;--twt-cookie-permission-deny-btn-background-color: var(--sw-border-color);--twt-cookie-permission-configuration-btn-background-color: var(--sw-color-brand-secondary);--twt-cookie-permission-accept-all-btn-background-color: var(--sw-color-brand-primary);--twt-offcanvas-layout-type: 1;--twt-offcanvas-margin: 10;--twt-offcanvas-border-radius: 3;--twt-offcanvas-backdrop-color: rgba(0, 0, 0, 0.5);--twt-offcanvas-backdrop-effect-blur: 0;--twt-offcanvas-nav-currencies-menu-text-show: 1;--twt-offcanvas-nav-languages-menu-text-show: 1;--twt-offcanvas-nav-service-menu-show: 1;--twt-offcanvas-nav-service-menu-icon-show: 2;--twt-offcanvas-nav-service-menu-text-show: 1;--twt-offcanvas-nav-dropdown-coloration: 1;--twt-pagination-style: 1;--twt-pagination-color: var(--sw-color-brand-primary);--twt-pagination-border-color: #bcc1c7;--twt-pagination-background-color: #ffffff;--twt-pagination-hover-border-color: #bcc1c7;--twt-pagination-hover-background-color: #eeeeee;--twt-pagination-active-color: #ffffff;--twt-pagination-active-border-color: var(--sw-color-brand-primary);--twt-pagination-active-background-color: var(--sw-color-brand-primary);--twt-pagination-disabled-color: #798490;--twt-pagination-disabled-border-color: #bcc1c7;--twt-pagination-disabled-background-color: #eeeeee;--twt-pagination-corner-type: 2;--twt-pagination-buttons-corner-type: 2;--twt-product-badges-corner-type: 3;--twt-product-badges-font-size: 16;--twt-product-badges-stock-badge-mode: 1;--twt-product-badges-stock-badge-coloration: 1;--twt-product-badges-stock-badge-background-color: #f1c40f;--twt-product-badges-stock-badge-icon-show: 1;--twt-product-badges-sold-badge-coloration: 1;--twt-product-badges-sold-badge-background-color: #0070e0;--twt-product-badges-sold-badge-icon-show: 1;--twt-product-badges-shipping-free-badge-coloration: 1;--twt-product-badges-shipping-free-badge-background-color: #4aa3df;--twt-product-badges-shipping-free-badge-icon-show: 1;--twt-product-badges-discount-badge-type: 1;--twt-product-badges-discount-badge-round: 1;--twt-product-badges-discount-badge-coloration: 1;--twt-product-badges-discount-badge-background-color: var(--sw-color-brand-primary);--twt-product-badges-topseller-badge-coloration: 1;--twt-product-badges-topseller-badge-background-color: #f1c40f;--twt-product-badges-topseller-badge-icon-show: 1;--twt-product-badges-new-badge-coloration: 1;--twt-product-badges-new-badge-background-color: #2ecc71;--twt-product-badges-new-badge-icon-show: 1;--twt-scroll-up-corner-type: 2;--twt-scroll-up-box-shadow: 1px 2px 6px;--twt-scroll-up-box-shadow-color: rgba(0, 0, 0, 0.3);--twt-scroll-up-color: #ffffff;--twt-scroll-up-border-color: var(--sw-color-brand-primary);--twt-scroll-up-background-color: var(--sw-color-brand-primary);--twt-scroll-up-color-hover: #ffffff;--twt-scroll-up-border-color-hover: var(--sw-color-brand-primary);--twt-scroll-up-background-color-hover: var(--twt-color-brand-primary-dark);--twt-base-slider-controls-style: 1;--twt-base-slider-controls-corner-type: 2;--twt-base-slider-controls-hover-type: 2;--twt-base-slider-controls-color: var(--sw-color-brand-primary);--twt-base-slider-controls-border-color: transparent;--twt-base-slider-controls-background-color: transparent;--twt-base-slider-controls-color-hover: var(--sw-color-brand-secondary);--twt-base-slider-navigation-dots-style: 2;--twt-base-slider-navigation-dots-type: 3;--twt-base-slider-navigation-dots-hover-type: 1;--twt-base-slider-navigation-dots-alignment: 3;--twt-base-slider-navigation-dots-background-color: #bcc1c7;--twt-base-slider-navigation-dots-background-color-active: #798490;
107--twt-cms-section-boxed-padding-left-right: 20;--twt-cms-animations-name: none;--twt-cms-animations-name-headlines: none;--twt-cms-layout-adjustments-landing-pages: 1;--twt-cms-layout-adjustments-category-pages: 2;--twt-cms-layout-adjustments-product-pages: 2;--twt-cms-layout-adjustments-shop-pages: 2;--twt-cms-section-boxed-sidebar-combined: 2;--twt-cms-section-boxed-margin-top-home: 1;--twt-cms-section-boxed-margin-top: 20;--twt-cms-section-margin-bottom: 1;--twt-cms-section-padding-top-bottom: 20;--twt-cms-section-background-color: rgba(255, 255, 255, 0);--twt-cms-section-boxed-border-color: #000;--twt-cms-section-boxed-background-color: #000;--twt-image-slider-controls-individual: 1;--twt-image-slider-controls-style: 1;--twt-image-slider-controls-corner-type: 2;--twt-image-slider-controls-hover-type: 2;--twt-image-slider-controls-color: var(--sw-color-brand-primary);--twt-image-slider-controls-border-color: transparent;--twt-image-slider-controls-background-color: transparent;--twt-image-slider-controls-color-hover: var(--sw-color-brand-secondary);--twt-image-slider-navigation-dots-alignment: 3;--twt-gallery-slider-controls-individual: 2;--twt-gallery-slider-controls-style: 1;--twt-gallery-slider-controls-corner-type: 2;--twt-gallery-slider-controls-hover-type: 1;--twt-gallery-slider-controls-color: var(--sw-color-brand-primary);--twt-gallery-slider-controls-border-color: transparent;--twt-gallery-slider-controls-background-color: #ffffff;--twt-gallery-slider-controls-color-hover: var(--sw-color-brand-secondary);--twt-gallery-slider-navigation-dots-alignment: 3;--twt-cms-block-image-position-mobile: 1;--twt-cms-block-image-position-desktop: 1;--twt-cms-block-image-font-size: 16;--twt-cms-block-image-align-items: flex-start;--twt-product-slider-controls-individual: 1;--twt-product-slider-controls-style: 1;--twt-product-slider-controls-corner-type: 2;--twt-product-slider-controls-hover-type: 2;--twt-product-slider-controls-color: var(--sw-color-brand-primary);--twt-product-slider-controls-border-color: transparent;--twt-product-slider-controls-background-color: transparent;--twt-product-slider-controls-color-hover: var(--sw-color-brand-secondary);--twt-cms-element-product-box: rgba(0, 0, 0, 0);--twt-filter-panel-layout-type: 2;--twt-filter-panel-toggle-btn-color: #333333;--twt-filter-panel-toggle-btn-border-color: #eeeeee;--twt-filter-panel-toggle-btn-background-color: #ffffff;--twt-filter-panel-toggle-btn-color-hover: #000000;--twt-filter-panel-toggle-btn-border-color-hover: #666666;--twt-filter-panel-toggle-btn-background-color-hover: #eeeeee;--twt-filter-panel-toggle-btn-color-expanded: var(--sw-color-brand-primary);--twt-filter-panel-toggle-btn-border-color-expanded: var(--sw-color-brand-primary);--twt-filter-panel-toggle-btn-background-color-expanded: #ffffff;--twt-filter-panel-spacing-sidebar: 2;--twt-filter-panel-item-dropdown-border-color-sidebar: #eeeeee;--twt-filter-panel-item-dropdown-background-color-sidebar: #ffffff;--twt-filter-panel-content-padding-top: 1;--twt-filter-panel-content-padding-right: 20;--twt-filter-panel-content-padding-bottom: 1;--twt-filter-panel-content-padding-left: 20;--twt-filter-panel-content-border: 1px solid;--twt-filter-panel-content-border-color: rgba(255, 255, 255, 0);--twt-filter-panel-content-background-color: rgba(255, 255, 255, 0);--twt-filter-panel-item-dropdown-border-color: #eeeeee;--twt-filter-panel-item-dropdown-background-color: #ffffff;--twt-sidebar-filter-headline-show: 1;--twt-sidebar-filter-headline-margin-bottom: 0;--twt-category-navigation-layout-type: 2;--twt-category-navigation-box-background-color: #ffffff;--twt-category-navigation-box-border-color: rgba(255, 255, 255, 0);--twt-category-navigation-border-color: #eeeeee;--twt-category-navigation-accent-color: #000000;--twt-category-navigation-link-color: #111111;--twt-category-navigation-link-color-hover: #ffffff;--twt-category-navigation-link-color-active: var(--sw-color-brand-primary);--twt-category-navigation-link-background-color: #ffffff;--twt-category-navigation-link-background-color-hover: var(--sw-color-brand-primary);--twt-category-navigation-link-background-color-active: #ffffff;--twt-category-navigation-headline-show: 1;--twt-category-navigation-headline-margin-bottom: 0;--twt-listing-column-count-xs: 12;--twt-listing-column-count-sm: 6;--twt-listing-column-count-md: 6;--twt-listing-column-count-lg: 4;--twt-listing-column-count-xl: 3;--twt-listing-column-count-sidebar-xs: 12;--twt-listing-column-count-sidebar-sm: 6;--twt-listing-column-count-sidebar-md: 6;--twt-listing-column-count-sidebar-lg: 6;--twt-listing-column-count-sidebar-xl: 4;--twt-listing-column-count-xs-image: 12;--twt-listing-column-count-sm-image: 6;--twt-listing-column-count-md-image: 6;--twt-listing-column-count-lg-image: 4;--twt-listing-column-count-xl-image: 3;--twt-listing-column-count-sidebar-xs-image: 12;--twt-listing-column-count-sidebar-sm-image: 6;--twt-listing-column-count-sidebar-md-image: 6;--twt-listing-column-count-sidebar-lg-image: 6;--twt-listing-column-count-sidebar-xl-image: 4;--twt-listing-column-count-xs-minimal: 12;--twt-listing-column-count-sm-minimal: 6;--twt-listing-column-count-md-minimal: 6;--twt-listing-column-count-lg-minimal: 4;--twt-listing-column-count-xl-minimal: 3;--twt-listing-column-count-sidebar-xs-minimal: 12;--twt-listing-column-count-sidebar-sm-minimal: 6;--twt-listing-column-count-sidebar-md-minimal: 6;--twt-listing-column-count-sidebar-lg-minimal: 6;--twt-listing-column-count-sidebar-xl-minimal: 4;--twt-product-badges-stock-badge-show: 1;--twt-product-badges-sold-badge-show: 2;--twt-product-badges-shipping-free-badge-show: 2;--twt-product-badges-discount-badge-show: 2;--twt-product-badges-topseller-badge-show: 2;--twt-product-badges-new-badge-show: 2;--twt-product-box-layout-type: 2;--twt-product-box-hover-type: 2;
107--twt-product-box-hover-apply: 1;--twt-product-box-text-align: center;--twt-product-box-action-buy-btn-show: 2;--twt-product-box-action-buy-btn-hover: 4;--twt-product-box-compact-layout: 2;--twt-product-box-description-show: 2;--twt-product-box-description-breakpoint: sm;--twt-product-box-short-description-show: 1;--twt-product-box-variant-characteristics-show: 2;--twt-product-box-ordernumber-show: 1;--twt-product-box-manufacturer-show: 1;--twt-product-box-price-unit-show: 2;--twt-product-box-cheapest-price-show: 2;--twt-product-box-list-price-price-show: 2;--twt-product-box-list-price-percentage-show: 2;--twt-product-box-border-color: #000000;--twt-product-box-border-color-hover: #000000;--twt-product-box-background-color: #ffffff;--twt-product-box-background-color-hover: #ffffff;--twt-product-box-box-shadow-type: 11;--twt-product-box-box-shadow: 0 5px 10px;--twt-product-box-box-shadow-color: rgba(0, 0, 0, 0.075);--twt-product-box-box-shadow-type-hover: 13;--twt-product-box-box-shadow-hover: 0 10px 20px;--twt-product-box-box-shadow-color-hover: rgba(0, 0, 0, 0.15);--twt-product-box-image-layout-type: 1;--twt-product-box-image-hover-type: 3;--twt-product-box-image-height: 200;--twt-product-box-image-object-fit: standard;--twt-product-box-image-align-items: center;--twt-product-box-image-background-color: rgba(0, 0, 0, 0);--twt-product-box-wishlist-button-position: bottom;--twt-product-box-wishlist-button-color: #4a545b;--twt-product-box-wishlist-button-background-color: #f9f9f9;--twt-product-box-product-review-rating-corner-type: 2;--twt-product-box-product-review-rating-position: 1;--twt-product-box-product-name-line-clamp: 2;--twt-product-box-btn-buy-layout: 1;--twt-product-box-btn-buy-icon-position: 1;--twt-product-box-ordernumber-show-box-standard: 1;--twt-product-box-manufacturer-show-box-standard: 1;--twt-product-box-product-name-line-clamp-box-standard: 2;--twt-product-box-ordernumber-show-box-image: 1;--twt-product-box-manufacturer-show-box-image: 1;--twt-product-box-product-name-line-clamp-box-image: 2;--twt-product-box-ordernumber-show-box-minimal: 1;--twt-product-box-manufacturer-show-box-minimal: 1;--twt-product-box-product-name-line-clamp-box-minimal: 2;--twt-product-detail-sticky-gallery-buybox: 1;--twt-product-detail-properties-table-layout: 2;--twt-product-detail-properties-table-style: 2;--twt-product-detail-properties-table-width: 2;--twt-product-detail-slider-image-similar-note-show: 1;--twt-product-detail-gallery-fetchpriority: 1;--twt-product-detail-short-description-show: 1;--twt-product-detail-prices-table-layout: 2;--twt-product-detail-prices-table-style: 2;--twt-product-detail-prices-table-width: 2;--twt-product-detail-prices-table-head-color: #ffffff;--twt-product-detail-prices-table-head-background-color: var(--sw-color-brand-primary);--twt-product-detail-btn-buy-layout: 1;--twt-product-detail-btn-buy-icon-position: 1;--twt-product-detail-configurator-layout-type: 2;--twt-product-detail-configurator-option-color: #2b3136;--twt-product-detail-configurator-option-border-color: #adb5bd;--twt-product-detail-configurator-option-bg-color: transparent;--twt-product-detail-configurator-option-color-hover: var(--sw-color-brand-primary);--twt-product-detail-configurator-option-border-color-hover: var(--sw-color-brand-primary);--twt-product-detail-configurator-option-bg-color-hover: transparent;--twt-product-detail-configurator-option-color-active: #2b3136;--twt-product-detail-configurator-option-border-color-active: var(--sw-color-brand-primary);--twt-product-detail-configurator-option-bg-color-active: transparent;--twt-product-detail-configurator-option-color-disabled: #2b3136;--twt-product-detail-configurator-option-border-color-disabled: #adb5bd;--twt-product-detail-configurator-option-bg-color-disabled: transparent;--twt-product-detail-configurator-option-disabled-layout-type: 3;--twt-product-detail-configurator-option-disabled-strikethrough-color: #b3bfcc;--twt-product-detail-configurator-text-option-bordered: 2;--twt-product-detail-labels-style: 1;--twt-product-detail-labels-arrangement: 2;--twt-product-detail-labels-position: 2;--twt-product-detail-shipping-free-label-show: 1;--twt-product-detail-stock-label-show: 1;--twt-product-detail-stock-label-mode: 1;--twt-product-detail-stock-label-threshold-lowstock: 10;--twt-product-detail-stock-label-threshold-highstock: 500;--twt-product-detail-sold-label-show: 1;--twt-product-detail-notavailable-label-show: 1;--twt-product-detail-preorder-label-show: 1;--twt-product-detail-deliverytime-available-label-show: 1;--twt-product-detail-deliverytime-restock-label-show: 1;--twt-product-detail-badges: 1;--twt-product-detail-badges-position: 2;--twt-product-detail-badges-stock-badge-show: 1;--twt-product-detail-badges-sold-badge-show: 2;--twt-product-detail-badges-shipping-free-badge-show: 2;--twt-product-detail-badges-discount-badge-show: 2;--twt-product-detail-badges-topseller-badge-show: 2;--twt-product-detail-badges-new-badge-show: 2;--twt-product-detail-specifications-section-spacing: 5;--twt-product-detail-ordernumber-show: 2;--twt-product-detail-manufacturer-show: 1;--twt-product-detail-manufacturernumber-show: 1;--twt-product-detail-ean-show: 1;--twt-product-detail-custom-field-1-show: 2;--twt-product-detail-weight-show: 1;--twt-product-detail-length-show: 1;--twt-product-detail-width-show: 1;--twt-product-detail-height-show: 1;--twt-product-detail-custom-field-2-show: 2;--twt-product-detail-stock-show: 1;
107--twt-product-detail-availablestock-show: 1;--twt-product-detail-deliverytime-show: 1;--twt-product-detail-minpurchase-show: 1;--twt-product-detail-maxpurchase-show: 1;--twt-product-detail-custom-field-3-show: 1;--twt-product-detail-specifications-label-font-weight: bold;--twt-product-detail-specifications-label-transform: none;--twt-product-detail-specifications-text-font-weight: normal;--twt-product-detail-videos-max-width: 0;--twt-product-detail-product-videos-show-controls: 2;--twt-product-detail-product-videos-advanced-privacy: 2;--twt-product-detail-product-videos-need-confirmation: 1;--twt-product-detail-product-videos-placeholder-layout-type: 1;--twt-product-detail-product-videos-placeholder-background-color: #eeeeee;--twt-product-detail-product-videos-backdrop-background-color: rgba(255, 255, 255, 0.5);--twt-product-detail-product-videos-overlay-background-color: rgba(255, 255, 255, 0.5);--twt-product-detail-product-videos-placeholder-preview-image: url('');--twt-social-proofing-infotext-show: 1;--twt-social-proofing-threshold: 1000;--twt-social-proofing-visibility: 1;--twt-social-proofing-infotext-position: 2;--twt-social-proofing-infotext-icon-show: 2;--twt-social-proofing-infotext-color: var(--sw-color-brand-primary);--twt-social-proofing-infotext-icon-color: var(--sw-color-brand-primary);--twt-social-proofing-infotext-font-weight: bold;--twt-social-proofing-infotext-transform: none;--twt-product-detail-sharing-links-show: 1;--twt-product-detail-sharing-links-icon-style: 4;--twt-product-detail-sharing-links-icon-size: 45;--twt-product-detail-sharing-links-icon-coloration: 1;--twt-product-detail-sharing-links-icon-color: var(--sw-color-brand-primary);
107--twt-product-detail-sharing-links-headline-font-weight: normal;--twt-product-detail-sharing-links-headline-transform: none;--twt-product-detail-benefits-show: 1;--twt-product-detail-benefits-layout-type: 1;--twt-product-detail-benefits-content: 1;--twt-product-detail-benefits-position: 2;--twt-product-detail-benefits-headline-show: 2;--twt-product-detail-benefits-icon-color: var(--sw-color-success);--twt-product-detail-benefits-border-color: #eeeeee;--twt-product-detail-benefits-background-color: #fafafa;--twt-product-detail-payment-logos-show: 1;--twt-product-detail-payment-logos-position: 1;--twt-product-detail-payment-logos-headline-font-weight: normal;--twt-product-detail-payment-logos-headline-transform: none;--twt-product-detail-tabs-layout-type: 1;--twt-product-detail-tabs-background-border-bottom: 2px solid;--twt-product-detail-tabs-container-background-color: #fafafa;--twt-product-detail-tabs-color: #000000;--twt-product-detail-tabs-color-hover: var(--sw-color-brand-primary);--twt-product-detail-tabs-color-active: var(--sw-color-brand-primary);--twt-product-detail-tabs-border-bottom-color: #eeeeee;--twt-product-detail-tabs-border-bottom-color-hover: #cccccc;--twt-product-detail-tabs-border-bottom-color-active: var(--sw-color-brand-primary);--twt-product-detail-tabs-background-color: #ffffff;--twt-product-detail-tabs-background-color-hover: #ffffff;--twt-product-detail-tabs-background-color-active: #ffffff;--twt-product-detail-description-title-show: 2;--twt-product-detail-properties-headline-show: 1;--twt-product-detail-properties-info-show: 1;--twt-product-detail-product-videos-show: 2;--twt-product-detail-product-videos-position: 2;--twt-product-detail-datasheets-show: 1;--twt-product-detail-datasheets-preview-show: 2;--twt-product-detail-further-links-show: 1;--twt-product-detail-further-links-new-tab: 2;--twt-product-detail-downloads-show: 1;--twt-product-detail-comment-show: 1;--twt-product-detail-properties-position: 2;--twt-product-detail-tab-properties-title-show: 2;--twt-product-detail-tab-properties-info-show: 1;--twt-product-detail-tab-product-videos-show: 1;--twt-product-detail-tab-product-videos-headline-show: 2;--twt-product-detail-tab-datasheets-show: 1;--twt-product-detail-tab-datasheets-headline-show: 2;--twt-product-detail-tab-custom-content-show: 1;--twt-product-detail-tab-custom-content-headline-show: 2;--twt-product-detail-tab-manufacturer-show: 1;--twt-product-detail-tab-manufacturer-title-show: 2;--twt-product-detail-tab-manufacturer-logo-show: 2;--twt-product-detail-tab-manufacturer-related-links-subheadline-show: 2;--twt-product-detail-tab-manufacturer-link-products-show: 1;--twt-product-detail-tab-manufacturer-link-website-show: 2;--twt-product-detail-cross-selling-show: 2;--twt-payment-shipping-method-name-color: #111111;--twt-payment-shipping-method-description-color: #71767b;--twt-cms-layout-adjustments-login-pages: 2;--twt-cms-layout-adjustments-account-pages: 2;--twt-cms-layout-adjustments-checkout-pages: 2;--twt-checkout-register-structure: 2;--twt-confirmpage-container-layout: 2;--twt-cms-layout-adjustments-b2b-components: 1;--twt-sidebar-content-sticky: 1;--twt-sidebar-block-content-layout-type: 1;--twt-sidebar-block-upper-section-margin-top: 20;--twt-sidebar-block-upper-section-margin-bottom: 30;--twt-sidebar-block-lower-section-margin-top: 30;--twt-sidebar-block-lower-section-margin-bottom: 30;--twt-sidebar-block-content-color: #000000;--twt-sidebar-block-content-background-color: #ffffff;--twt-sidebar-block-container-padding-top: 0;--twt-sidebar-block-container-padding-right: 0;--twt-sidebar-block-container-padding-bottom: 0;--twt-sidebar-block-container-padding-left: 0;--twt-sidebar-block-headline-layout-type: 2;--twt-sidebar-block-headline-padding-top: 7;--twt-sidebar-block-headline-padding-bottom: 7;--twt-sidebar-block-headline-color: #ffffff;--twt-sidebar-block-headline-background-color: rgba(0, 0, 0, 0);--twt-sidebar-block-headline-font-family: 1;--twt-sidebar-block-headline-font-size: 16;
107--twt-sidebar-block-headline-font-weight: normal;--twt-sidebar-block-headline-text-transform: none;--twt-sidebar-element-1: none;--twt-sidebar-element-1-toggle: 1;--twt-sidebar-element-1-position: 2;--twt-sidebar-element-1-order: 100;--twt-sidebar-element-1-margin-top: 0;--twt-sidebar-element-1-margin-bottom: 0;--twt-sidebar-element-2: none;--twt-sidebar-element-2-toggle: 1;--twt-sidebar-element-2-position: 3;--twt-sidebar-element-2-order: 200;--twt-sidebar-element-2-margin-top: 0;--twt-sidebar-element-2-margin-bottom: 0;--twt-sidebar-element-3: none;--twt-sidebar-element-3-toggle: 1;--twt-sidebar-element-3-position: 3;--twt-sidebar-element-3-order: 300;--twt-sidebar-element-3-margin-top: 30;--twt-sidebar-element-3-margin-bottom: 0;--twt-footer-footernav-list-style: 2;--twt-footer-footernav-padding-left: 17;--twt-footer-footernav-link-color: #ffffff;--twt-footer-footernav-link-color-hover: var(--sw-color-brand-primary);--twt-footer-footernav-marker-color: #ffffff;--twt-footer-footernav-border-bottom-color: #000000;--twt-footer-footernav-text-transform: none;--twt-footer-footernav-link-underline: 1;--twt-widget-awards-image-max-width: 100;--twt-widget-awards-image-max-height: none;--twt-widget-awards-text-show: 1;--twt-widget-awards-standard-ssl: 2;--twt-widget-benefits-content-type: 1;--twt-widget-benefits-icons-show: 2;--twt-widget-benefits-content-max-items: 6;--twt-widget-benefits-font-size-item: 16;--twt-widget-benefits-font-size-icon: 16;--twt-widget-communities-layout-type: 1;--twt-widget-communities-icon-style: 4;--twt-widget-communities-icon-size: 45;--twt-widget-communities-additional-text-show: 2;--twt-widget-communities-label-show: 1;--twt-widget-communities-label-position: 1;--twt-widget-communities-link-nofollow: 2;--twt-widget-communities-icon-coloration: 2;--twt-widget-communities-icon-color: #000000;--twt-widget-communities-icon-coloration-sidebar: 2;--twt-widget-communities-icon-color-sidebar: var(--twt-widget-communities-icon-color);--twt-widget-communities-facebook: 2;--twt-widget-communities-instagram: 2;--twt-widget-communities-twitter: 1;--twt-widget-communities-x: 1;--twt-widget-communities-youtube: 1;--twt-widget-communities-vimeo: 1;--twt-widget-communities-twitch: 1;--twt-widget-communities-flickr: 1;--twt-widget-communities-pinterest: 1;--twt-widget-communities-tiktok: 1;--twt-widget-communities-spotify: 1;--twt-widget-communities-blogger: 1;--twt-widget-communities-blog: 1;--twt-widget-communities-whatsapp: 1;--twt-widget-communities-linkedin: 1;--twt-widget-communities-xing: 1;--twt-widget-communities-website: 1;--twt-widget-hotline-contact-form-show: 1;--twt-widget-hotline-font-size: 16;--twt-widget-hotline-font-size-phone-number: 20;--twt-widget-location-route-button-show: 1;--twt-widget-location-route-button-color: #333333;--twt-widget-location-route-button-color-hover: #111111;--twt-widget-location-route-button-border-color: #dddddd;--twt-widget-location-route-button-border-color-hover: #cccccc;--twt-widget-location-route-button-background-color: #dddddd;--twt-widget-location-route-button-background-color-hover: #cccccc;--twt-widget-newsletter-input-corner-type: 1;--twt-widget-newsletter-input-border-radius: 10;--twt-widget-newsletter-input-color: #333333;--twt-widget-newsletter-input-border-color: #ffffff;--twt-widget-newsletter-input-background-color: #ffffff;--twt-widget-newsletter-button-color: #111111;--twt-widget-newsletter-button-color-hover: var(--sw-color-brand-primary);--twt-widget-newsletter-button-border-color: #eeeeee;--twt-widget-newsletter-button-border-color-hover: #eeeeee;--twt-widget-newsletter-button-background-color: #ffffff;--twt-widget-newsletter-button-background-color-hover: #eeeeee;--twt-widget-newsletter-input-text-align: left;--twt-widget-payment-logo-max-height: 45;--twt-widget-payment-logo-corner-type: 1;--twt-widget-payment-logo-link: 2;--twt-widget-payment-logo-fallback-badge: 2;--twt-widget-payment-logo-coloration: 1;--twt-widget-payment-logo-fallback-badge-color: #333333;--twt-widget-payment-logo-border-color: #eeeeee;--twt-widget-payment-logo-fallback-badge-border-color: #eeeeee;--twt-widget-payment-logo-fallback-badge-background-color: #ffffff;--twt-widget-payment-logo-fallback-badge-font-size: 10;--twt-widget-payment-logo-fallback-badge-text-transform: none;
107--twt-widget-payment-logo-fallback-badge-font-weight: bold;--twt-widget-payment-logo-custom-image-1: url('https://www.tekoplan-planen.shop/media/d3/51/69/1667994205/twt-amazon-pay.svg?ts=1667994205');--twt-widget-payment-logo-custom-image-2: url('https://www.tekoplan-planen.shop/media/00/c1/e3/1667994227/twt-paypal.svg?ts=1667994227');--twt-widget-payment-logo-custom-image-3: url('https://www.tekoplan-planen.shop/media/0a/de/59/1667994240/twt-custom-invoice.svg?ts=1667994240');--twt-widget-shipping-logo-max-height: 45;--twt-widget-shipping-logo-corner-type: 1;--twt-widget-shipping-logo-link: 2;--twt-widget-shipping-logo-fallback-badge: 2;--twt-widget-shipping-logo-coloration: 1;--twt-widget-shipping-logo-fallback-badge-color: #333333;--twt-widget-shipping-logo-border-color: #eeeeee;--twt-widget-shipping-logo-fallback-badge-border-color: #eeeeee;--twt-widget-shipping-logo-fallback-badge-background-color: #ffffff;--twt-widget-shipping-logo-fallback-badge-font-size: 10;--twt-widget-shipping-logo-fallback-badge-text-transform: none;--twt-widget-shipping-logo-fallback-badge-font-weight: bold;--twt-widget-shipping-logo-custom-image-2: url('https://www.tekoplan-planen.shop/media/60/1e/a2/1667994292/twt-dhl.svg?ts=1667994292');--twt-widget-shipping-logo-custom-image-3: url('https://www.tekoplan-planen.shop/media/3d/79/26/1667994298/twt-dachser.svg?ts=1667994298');--twt-announcement-banner-show: 1;--twt-announcement-banner-closable: 1;--twt-announcement-banner-link: 2;--twt-announcement-banner-link-newtab: 1;--twt-announcement-banner-link-nofollow: 2;--twt-announcement-banner-color: #000000;--twt-announcement-banner-background-color: #333333;--twt-announcement-banner-font-size: 14;--twt-announcement-banner-text-transform: none;--twt-announcement-banner-font-weight: normal;--twt-checkout-steps-show: 1;--twt-checkout-steps-cart-show: 1;--twt-checkout-steps-style: 1;--twt-checkout-steps-icon-style: 1;--twt-checkout-steps-item-text-show: 5;--twt-checkout-steps-item-box-shadow-type: 1;--twt-checkout-steps-item-corner-type: 3;--twt-checkout-steps-item-border-radius: 10;--twt-checkout-steps-item-color: #000000;--twt-checkout-steps-item-color-active: #000000;--twt-checkout-steps-item-color-completed: #000000;--twt-checkout-steps-item-icon-color: #dddddd;--twt-checkout-steps-item-icon-color-active: #000000;--twt-checkout-steps-item-icon-color-completed: var(--sw-color-success);--twt-checkout-steps-item-border-color: #dddddd;--twt-checkout-steps-item-border-color-active: #000000;--twt-checkout-steps-item-border-color-completed: var(--sw-color-success);--twt-checkout-steps-item-background-color: #ffffff;--twt-checkout-steps-item-background-color-active: #ffffff;--twt-checkout-steps-item-background-color-completed: #ffffff;--twt-checkout-steps-item-seperator-color: #dddddd;--twt-checkout-steps-item-seperator-color-active: #000000;--twt-checkout-steps-item-seperator-color-completed: var(--sw-color-success);--twt-checkout-steps-item-font-size: 14;--twt-checkout-steps-item-text-transform: none;--twt-checkout-steps-item-font-weight: normal;--twt-custom-announcement-show: 1;--twt-custom-announcement-border-color: #ffe79a;--twt-custom-announcement-background-color: #fff3cd;--twt-custom-announcement-font-size: 14;--twt-floating-widget-show: 1;--twt-floating-widget-mobile: 1;--twt-floating-widget-position: 1;--twt-floating-widget-hover-type: 2;--twt-floating-widget-width: 400;--twt-floating-widget-height: 300;--twt-floating-widget-title-width: 200;--twt-floating-widget-title-height: 40;--twt-floating-widget-padding: 20;--twt-floating-widget-align-items: center;--twt-floating-widget-justify-content: center;--twt-floating-widget-side-bottom-distance: 20;--twt-floating-widget-side-bottom-distance-unit: 1;--twt-floating-widget-color: #333333;--twt-floating-widget-link-color: var(--sw-color-brand-primary);--twt-floating-widget-link-color-hover: var(--twt-color-brand-primary-dark);--twt-floating-widget-background-color: #ffffff;--twt-floating-widget-title-color: #ffffff;--twt-floating-widget-title-background-color: var(--sw-color-brand-primary);--twt-floating-widget-background-image: url('');--twt-floating-widget-background-image-object-fit: none;--twt-floating-widget-font-size: 16;--twt-floating-widget-title-font-size: 18;--twt-floating-widget-text-align: center;--twt-floating-widget-title-text-transform: none;--twt-hero-section-show-cms-category-pages: 1;--twt-hero-section-show-cms-shop-pages: 1;--twt-hero-section-pull-up: 1;--twt-hero-section-text-coloration: white;--twt-hero-section-text-align: left;--twt-hero-section-sizing-mode: 1;--twt-hero-section-content-max-width: 100%;--twt-hero-section-padding-top-sm: 170;--twt-hero-section-padding-top-lg: 210;--twt-hero-section-overlay-background-color: #000000;--twt-hero-section-overlay-opacity: 90;--twt-hero-section-background-image-attachment: fixed;--twt-hero-section-background-image-parallax: 1;--twt-hero-section-breadcrumb-show: 1;--twt-hero-section-breadcrumb-position: bottom;--twt-hero-section-breadcrumb-justify-content: flex-start;--twt-listing-subcategories-show: 1;--twt-listing-subcategories-show-cms-shop-pages: 1;--twt-listing-subcategories-layout: textBelow;--twt-listing-subcategories-justify-content: flex-start;--twt-listing-subcategories-display-mode: contain;--twt-listing-subcategories-image-width: 100%;--twt-listing-subcategories-image-height: 140px;--twt-listing-subcategories-image-min-height: 140px;--twt-listing-subcategories-image-max-height: 140px;--twt-listing-subcategories-color: var(--sw-text-color);--twt-listing-subcategories-color-hover: var(--sw-color-brand-primary);--twt-listing-subcategories-background-color: #ffffff;--twt-listing-subcategories-background-color-hover: #ffffff;--twt-listing-subcategories-border-color: var(--sw-border-color);--twt-listing-subcategories-border-color-hover: var(--sw-color-brand-primary);--twt-listing-subcategories-image-background-color: #eef2f5;--twt-listing-subcategories-font-family: 1;--twt-listing-subcategories-font-size: 16;--twt-listing-subcategories-font-weight: normal;--twt-listing-subcategories-text-transform: none;--twt-listing-subcategories-column-count-xs: 12;--twt-listing-subcategories-column-count-sm: 6;--twt-listing-subcategories-column-count-md: 6;--twt-listing-subcategories-column-count-lg: 4;--twt-listing-subcategories-column-count-xl: 3;--twt-listing-subcategories-column-count-xxl: 3;--twt-listing-subcategories-lazy-loading: eager;--twt-slideout-communities-show: 1;--twt-slideout-communities-style: 1;--twt-slideout-communities-icon-size: 36;--twt-slideout-communities-icon-coloration: 1;--twt-slideout-communities-icon-color: var(--sw-color-brand-primary);--twt-slideout-communities-color: #ffffff;--twt-slideout-communities-background-color: #eeeeee;--twt-usp-bar-header: 2;--twt-usp-bar-footer: 2;--twt-usp-bar-header-position: 1;--twt-usp-bar-footer-position: 1;--twt-usp-bar-header-layout: 1;--twt-usp-bar-footer-layout: 1;--twt-usp-bar-large-icons-subtitle: 1;--twt-usp-bar-widget-content: communities;--twt-usp-bar-header-width: 1;--twt-usp-bar-width: 1;--twt-usp-bar-height-small-icons: 36;--twt-usp-bar-height-large-icons: 110;--twt-usp-bar-small-icons-justify-content: space-between;--twt-usp-bar-large-icons-justify-content: space-around;--twt-usp-bar-header-color: #cccccc;--twt-usp-bar-header-icon-color: #cccccc;--twt-usp-bar-header-border-color: #000000;--twt-usp-bar-header-background-color: #000000;--twt-usp-bar-footer-color: #cccccc;--twt-usp-bar-footer-icon-color: #cccccc;--twt-usp-bar-footer-border-color: #000000;--twt-usp-bar-footer-background-color: #000000;--twt-usp-bar-font-family: 1;--twt-usp-bar-font-size: 14;
107--twt-usp-bar-font-weight: normal;--twt-usp-bar-font-weight-large: bold;--twt-usp-bar-text-transform: none;--twt-usp-bar-icon-size-small: 15;--twt-usp-bar-icon-size-large: 36;--twt-usp-bar-breakpoint-item-1: 3;--twt-usp-bar-breakpoint-item-2: 4;--twt-usp-bar-breakpoint-item-3: 5;--twt-usp-bar-breakpoint-item-4: 6;--twt-usp-bar-breakpoint-item-5: 1;--twt-usp-bar-breakpoint-item-6: 8;--twt-accessibility-underline-links: 2;--twt-skip-target-link-color: #000000;--twt-forms-input-btn-focus-color: var(--sw-color-brand-primary);--twt-skip-to-content-color: #333333;--twt-skip-to-content-background-color: #eeeeee;--twt-cms-hero-slider-autoplay: 1;--twt-custom-cms-spacing-classes: 3;--twt-custom-cms-spacing-classes-more: 1;--twt-custom-cms-image-decoration-classes: 2;--twt-custom-cms-image-hover-classes: 2;--twt-cms-animations-more: 1;--twt-custom-cms-column-padding-classes: 2;--twt-custom-cms-headline-classes: 2;--twt-custom-css-max-width-classes: 1;--twt-cms-block-cloumns-classes: 2;--twt-cms-block-grid-classes: 2;--twt-cms-hero-slider-css: 2;--twt-cms-text-teaser-css: 2;--twt-cms-text-teaser-decorated-css: 2;--twt-cms-button-teaser-css: 2;--twt-cms-call-to-action-css: 2;--twt-cms-hover-box-css: 2;--twt-cms-hover-teaser-css: 2;--twt-cms-image-teaser-css: 2;--twt-cms-hero-teaser-css: 2;--twt-cms-advanced-teaser-css: 2;--twt-cms-classic-teaser-css: 2;--twt-cms-modern-teaser-css: 2;--twt-cms-round-teaser-css: 2;--twt-cms-image-banner-css: 2;--twt-cms-parallax-banner-css: 2;--twt-cms-hero-banner-css: 2;--twt-cms-advanced-banner-css: 2;--twt-cms-image-text-layered-css: 2;--twt-cms-listing-subcategories-css: 2;--twt-cms-countdown-banner-css: 2;--twt-cms-discount-banner-css: 2;--twt-cms-testimonials-css: 2;--twt-jquery-load: 2;--twt-header-type-compatibility: 2;--twt-header-account-btn-compatibility: 2;--twt-header-cart-btn-compatibility: 2;--twt-header-wishlist-btn-compatibility: 2;--twt-nav-main-home-link-compatibility: 2;--twt-nav-main-menu-items-compatibility: 2;--twt-top-bar-compatibility: 2;--twt-product-badges-discount-badge-compatibility: 2;--twt-product-badges-topseller-badge-compatibility: 2;--twt-product-badges-new-badge-compatibility: 2;--twt-breadcrumb-compatibility: 2;--twt-product-box-image-compatibility: 2;--twt-product-detail-buy-widget-compatibility: 2;--twt-product-detail-reviews-tab-compatibility: 2;--twt-footer-type-compatibility: 2;--twt-footer-logos-compatibility: 2;--twt-quickview-show: 1;--twt-product-box-quantity-selection-show: 1;--twt-nav-main-dropdown-box-shadow-type: 6;--twt-nav-main-external-links-icon-show: 1;--twt-product-box-sold: 1;--twt-product-box-sold-style: 1;--twt-product-box-image-srcset-and-sizes: 2;--twt-product-image-resizing: 1;--twt-product-image-resizing-breakpoint: 3;--twt-custom-css-deprecated-classes: 1;--twt-custom-cms-box-shadow-classes: 2;--twt-filter-panel-item-color: #000000;--twt-filter-panel-item-border-color: #ffffff;--twt-filter-panel-item-background-color: #ffffff;--twt-filter-panel-item-toggle-color: var(--sw-color-brand-primary);--twt-filter-panel-item-toggle-border-color: #ffffff;--twt-filter-panel-item-toggle-background-color: #ffffff;--twt-filter-panel-content-filter-active-background-color: #ffffff;} 108 </style> 109 <link rel="stylesheet" 110 href="https://www.tekoplan-planen.shop/theme/c7c869ddef4117828dbc452e4846ffba/css/all.css?1791201311"> 111 112 113 114 115 116 117 118 119 120 <!-- Custom css file --> 121 <link rel="stylesheet" href="https://www.tekoplan-planen.shop/css/individual.css" crossorigin="anonymous"> 122 123 124 125 <!-- Custom css code --> 126 <style>.nav-main .main-navigation-link { 127 font-family: "Oswald",sans-serif; 128 font-size: 21px; 129 font-size: 1.1125rem; 130 font-weight: 700; 131 text-transform: uppercase; 132} 133.top-bar-nav-btn.btn { 134 color: #fff; 135 font-weight: 400; 136 padding: 0; 137 border: 0 none; 138} 139 140.pix-uploadtwo-outer { 141 display: none; 142} 143 144.twt-widget-paymentshipping .is-payment-logo img.footer-logo-image { 145 border: 1px solid #000; 146} 147 148.twt-is-cms-product-detail .cms-section-default.boxed .cms-block:not(.twt-cms-block-reset):not(.bg-color) { 149 background-color: #fff; 150} 151 152body { 153 color: #000; 154} 155 156/* Cookie Banner als mittige Box */ 157 158html body .cookie-permission-container[style*="display: block"] { 159 position: fixed !important; 160 top: 50% !important; 161 left: 50% !important; 162 right: auto !important; 163 bottom: auto !important; 164 165 transform: translate(-50%, -50%) !important; 166 167 width: calc(100vw - 40px) !important; 168 max-width: 640px !important; 169 height: auto !important; 170 171 margin: 0 !important; 172 padding: 28px !important; 173 174 background: #ffffff !important; 175 color: #222222 !important; 176 177 border: 1px solid #d8d8d8 !important; 178 border-top: 5px solid #e00000 !important; 179 border-radius: 8px !important; 180 181 box-shadow: 0 24px 70px rgba(0, 0, 0, 0.45) !important; 182 183 z-index: 999999 !important; 184} 185 186/* innerer Bootstrap-Container */ 187html body .cookie-permission-container > .container { 188 width: 100% !important; 189 max-width: none !important; 190 padding: 0 !important; 191 margin: 0 !important; 192} 193 194/* Bootstrap-Row */ 195html body .cookie-permission-container .row { 196 display: flex !important; 197 flex-direction: column !important;
198 align-items: stretch !important; 199 200 margin: 0 !important; 201} 202 203/* Textbereich */ 204html body .cookie-permission-container .cookie-permission-content { 205 width: 100% !important; 206 max-width: 100% !important; 207 208 flex: 0 0 auto !important; 209 210 padding: 0 0 22px 0 !important; 211 margin: 0 !important; 212 213 text-align: center !important; 214 font-size: 15px !important; 215 line-height: 1.6 !important; 216} 217 218/* Mehr Informationen */ 219html body .cookie-permission-container .cookie-permission-content a { 220 color: #e00000 !important; 221 font-weight: 700 !important; 222 text-decoration: underline !important; 223} 224 225/* Button-Bereich */ 226html body .cookie-permission-container .cookie-permission-actions { 227 width: 100% !important; 228 max-width: 100% !important; 229 230 flex: 0 0 auto !important; 231 232 display: flex !important; 233 justify-content: center !important; 234 align-items: stretch !important; 235 236 gap: 10px !important; 237 238 margin: 0 !important; 239 padding: 0 !important; 240} 241 242/* beide Wrapper */ 243html body .cookie-permission-container .cookie-permission-button, 244html body .cookie-permission-container .js-cookie-configuration-button { 245 display: block !important; 246 margin: 0 !important; 247} 248 249/* Buttons */ 250html body .cookie-permission-container .btn { 251 min-height: 46px !important; 252 padding: 10px 18px !important; 253 254 border-radius: 4px !important; 255 256 font-size: 13px !important; 257 font-weight: 700 !important; 258} 259 260/* technisch notwendige */ 261html body .cookie-permission-container .cookie-permission-button .btn { 262 background: #dedede !important; 263 border-color: #dedede !important; 264 color: #222 !important; 265} 266 267/* konfigurieren */ 268html body .cookie-permission-container .js-cookie-configuration-button .btn { 269 background: #070707 !important; 270 border-color: #070707 !important; 271 color: #ffffff !important; 272} 273 274html body .cookie-permission-container .js-cookie-configuration-button .btn:hover { 275 background: #e00000 !important; 276 border-color: #e00000 !important; 277} 278 279/* Mobile */ 280@media (max-width: 767.98px) { 281 html body .cookie-permission-container[style*="display: block"] { 282 width: calc(100vw - 24px) !important; 283 max-width: none !important; 284 285 padding: 22px 18px !important; 286 287 max-height: calc(100vh - 24px) !important; 288 overflow-y: auto !important; 289 } 290 291 html body .cookie-permission-container .cookie-permission-actions { 292 flex-direction: column !important; 293 } 294 295 html body .cookie-permission-container .cookie-permission-button, 296 html body .cookie-permission-container .js-cookie-configuration-button, 297 html body .cookie-permission-container .btn { 298 width: 100% !important; 299 } 300} 301.product-box .product-action, 302.product-box:hover .product-action { 303 position: static !important; 304 top: auto !important; 305 right: auto !important; 306 bottom: auto !important; 307 left: auto !important; 308 transform: none !important; 309 margin-top: 12px !important; 310} 311 312.cms-element-text h1 { 313 color: #f2f2f2 !important; 314 opacity: 1 !important; 315} 316 317.product-delivery-information p.delivery-information { 318 margin-bottom: 2px; 319 display: none; 320} 321 322/* Produktaktion immer sichtbar und unterhalb des Preises */ 323.product-box .product-action, 324.product-box:hover .product-action { 325 position: static !important; 326 top: auto !important; 327 right: auto !important; 328 bottom: auto !important; 329 left: auto !important; 330 331 transform: none !important; 332 333 display: block !important; 334 visibility: visible !important; 335 opacity: 1 !important; 336 pointer-events: auto !important; 337 338 height: auto !important; 339 max-height: none !important; 340 341 margin-top: 12px !important; 342} 343 344.msis-free-shipping { 345 color: #2f8d52 !important; 346 font-weight: 700 !important; 347} 348 349.msis-free-shipping::before { 350 content: "â "; 351} 352 353.msis-paypal-guest-headline { 354 margin: 22px 0 10px; 355} 356 357.msis-paypal-guest-headline__title { 358 font-family: "Oswald", sans-serif; 359 font-size: 20px; 360 line-height: 1.2; 361 font-weight: 700; 362 color: #222; 363 margin-bottom: 3px; 364} 365 366.msis-paypal-guest-headline__text { 367 font-size: 13px; 368 line-height: 1.4; 369 color: #666; 370 margin-bottom: 10px; 371} 372 373/* ======================================== 374 Warenkorb Conversion Optimierung 375 ======================================== */ 376
377/* Automatischen Rabatt kompakter darstellen */ 378.is-act-cartpage .line-item-promotion.msis-fixed-promotion .line-item-info-img { 379 display: none !important; 380} 381 382.is-act-cartpage .line-item-promotion.msis-fixed-promotion .line-item-label { 383 color: #2f8d52 !important; 384 font-weight: 700 !important; 385} 386 387.is-act-cartpage .line-item-promotion.msis-fixed-promotion .line-item-label::before { 388 content: "â "; 389} 390 391.is-act-cartpage .line-item-promotion.msis-fixed-promotion .line-item-remove { 392 display: none !important; 393} 394 395.is-act-cartpage .line-item-promotion.msis-fixed-promotion { 396 padding-top: 6px !important; 397 padding-bottom: 6px !important; 398} 399 400 401/* Produktnummer-Eingabe zunächst einklappen */ 402.is-act-cartpage .msis-cart-add-product-form { 403 display: none !important; 404 margin-top: 10px !important; 405} 406 407.is-act-cartpage .msis-cart-add-product-form.is-open { 408 display: block !important; 409} 410 411.is-act-cartpage .msis-cart-add-toggle { 412 appearance: none; 413 border: 0; 414 background: transparent; 415 padding: 0; 416 color: #e00000; 417 font-weight: 700; 418 font-size: 14px; 419 cursor: pointer; 420} 421 422.is-act-cartpage .msis-cart-add-toggle:hover { 423 text-decoration: underline; 424} 425 426 427/* Kostenlosen Versand als Vorteil darstellen */ 428.is-act-cartpage .cart-shipping-costs-btn.msis-shipping-free-link { 429 color: #2f8d52 !important; 430 font-weight: 700 !important; 431} 432 433 434/* GroÃen PayPal-Ratenbanner unter den Produkten ausblenden */ 435.is-act-cartpage .msis-hide-cart-paypal-banner { 436 display: none !important; 437} 438 439 440/* Ãberschrift vor PayPal Express rechts */ 441.is-act-cartpage .msis-cart-paypal-headline { 442 margin: 16px 0 8px; 443 padding-top: 13px; 444 border-top: 1px solid #dedede; 445} 446 447.is-act-cartpage .msis-cart-paypal-headline__title { 448 font-family: "Oswald", sans-serif; 449 font-size: 18px; 450 line-height: 1.25; 451 font-weight: 700; 452 color: #222; 453} 454 455.is-act-cartpage .msis-cart-paypal-headline__text { 456 margin-top: 2px; 457 font-size: 12px; 458 line-height: 1.4; 459 color: #666; 460} 461 462.is-act-cartpage .msis-cart-add-toggle { 463 color: #444 !important; 464 font-weight: 600 !important; 465} 466 467.is-act-cartpage .msis-cart-add-toggle:hover { 468 color: #e00000 !important; 469} 470 471/* Versanddetails-Link im Warenkorb ausblenden */ 472.is-act-cartpage .cart-shipping-costs-btn { 473 display: none !important; 474} 475 476.msis-cart-delivery-headline { 477 font-family: "Oswald", sans-serif; 478 font-size: 18px; 479 line-height: 1.2; 480 font-weight: 700; 481 color: #222; 482 margin: 0 0 8px; 483} 484 485.msis-free-shipping { 486 color: #2f8d52 !important; 487 font-weight: 700 !important; 488} 489 490.msis-cart-green-label { 491 color: #2f8d52 !important; 492 font-weight: 700 !important; 493} 494 495.msis-offcanvas-count-fixed { 496 font-weight: 700; 497} 498 499.msis-auto-hidden { 500 display: none !important; 501} 502/* ========================================== 503 Offcanvas Warenkorb Feinschliff 504 ========================================== */ 505 506/* Rabatt ohne Icon / unnötigen Platz */ 507.offcanvas .msis-offcanvas-promotion-compact { 508 padding-top: 8px !important; 509 padding-bottom: 8px !important; 510} 511 512.offcanvas .msis-offcanvas-promotion-compact 513.line-item-info-img, 514.offcanvas .msis-offcanvas-promotion-compact 515.line-item-remove { 516 display: none !important; 517} 518 519.offcanvas .msis-offcanvas-discount { 520 color: #2f8d52 !important; 521 font-weight: 700 !important; 522} 523 524 525/* Versandkosten + Kostenlos in EINER Zeile */ 526.offcanvas .msis-offcanvas-shipping-row { 527 display: flex !important; 528 align-items: center !important; 529 justify-content: space-between !important; 530 width: 100% !important; 531} 532 533.offcanvas .msis-offcanvas-free-inline { 534 margin-left: 12px !important; 535 color: #2f8d52 !important; 536 font-weight: 700 !important; 537 white-space: nowrap !important; 538} 539 540 541/* Trusted-Shops Floating Badge nur bei 542 geöffnetem Warenkorb ausblenden */ 543body.msis-cart-offcanvas-open 544[id*="trustbadge" i], 545body.msis-cart-offcanvas-open 546[class*="trustbadge" i], 547body.msis-cart-offcanvas-open 548iframe[src*="trustedshops" i], 549body.msis-cart-offcanvas-open 550iframe[src*="etrusted" i] { 551 opacity: 0 !important; 552 visibility: hidden !important; 553 pointer-events: none !important; 554} 555 556/* Warenkorb */ 557.is-act-cartpage .msis-cart-delivery-headline { 558 font-family: "Oswald", sans-serif; 559 font-size: 18px; 560 line-height: 1.2; 561 font-weight: 700; 562 color: #222; 563 margin: 0 0 8px; 564} 565 566 567/* Offcanvas */ 568.offcanvas .msis-offcanvas-delivery-headline { 569 font-family: "Oswald", sans-serif; 570 font-size: 17px; 571 line-height: 1.2; 572 font-weight: 700; 573 color: #222; 574 margin: 20px 0 8px; 575} 576/* ========================================== 577 K3 MaÃanfertigung: Lieferzeit + Konfiguration 578 ========================================== */ 579
580/* Ãberschriften bei K3 */ 581.is-act-cartpage .msis-k3-delivery-headline, 582.offcanvas .msis-k3-delivery-headline, 583.msis-k3-product-delivery-headline { 584 font-family: "Oswald", sans-serif; 585 font-size: 18px; 586 line-height: 1.2; 587 font-weight: 700; 588 color: #222; 589 margin: 0 0 8px; 590} 591 592.msis-k3-product-delivery-headline { 593 margin-top: 10px; 594} 595 596/* Originalen Netzhirsch-Countdown bei K3 ausblenden, 597 unseren Text aber sichtbar lassen */ 598.netzhirsch-order-countdown.msis-k3-countdown 599> :not(.msis-k3-countdown-text) { 600 display: none !important; 601} 602 603/* Grüne K3-Lieferbox */ 604.netzhirsch-order-countdown.msis-k3-countdown { 605 display: block !important; 606 background: #effff3 !important; 607 border: 1px solid #3cc261 !important; 608 padding: 12px 14px !important; 609 margin: 6px 0 16px !important; 610 color: #222 !important; 611} 612 613.netzhirsch-order-countdown.msis-k3-countdown .msis-k3-countdown-text { 614 display: block !important; 615 position: relative; 616 padding-left: 28px; 617 margin: 0 !important; 618 line-height: 1.45; 619} 620 621.netzhirsch-order-countdown.msis-k3-countdown .msis-k3-countdown-text::before { 622 content: "â·"; 623 position: absolute; 624 left: 0; 625 top: -2px; 626 color: #2f9a52; 627 font-size: 19px; 628 line-height: 1; 629} 630 631.msis-k3-countdown-text strong { 632 font-weight: 700; 633} 634 635/* K3-Lieferzeit direkt am Artikel */ 636.msis-k3-delivery-time { 637 font-weight: 600; 638 color: #555; 639} 640 641/* ========================================== 642 K3 Wunschplane â kompakte Konfiguration 643 ========================================== */ 644 645.msis-k3-configuration { 646 margin-top: 10px; 647 max-width: 440px; 648} 649 650/* komplette Karte */ 651.msis-k3-config-card { 652 background: #f8f9f8; 653 border: 1px solid #e3e6e3; 654 border-left: 3px solid #3cc261; 655 padding: 11px 13px; 656} 657 658/* Ãberschrift */ 659.msis-k3-configuration-title { 660 font-family: "Oswald", sans-serif; 661 font-size: 15px; 662 line-height: 1.2; 663 font-weight: 700; 664 color: #222; 665 margin-bottom: 9px; 666} 667 668/* Hauptinformationen */ 669.msis-k3-config-main { 670 display: grid; 671 gap: 5px; 672} 673 674.msis-k3-config-main-row { 675 display: grid; 676 grid-template-columns: 92px minmax(0, 1fr); 677 gap: 10px; 678 align-items: start; 679} 680 681.msis-k3-config-main-label { 682 color: #777; 683 font-size: 12px; 684 line-height: 1.35; 685} 686 687.msis-k3-config-main-value { 688 color: #222; 689 font-size: 12px; 690 line-height: 1.35; 691 font-weight: 700; 692} 693 694/* Details aufklappbar */ 695.msis-k3-config-details { 696 margin-top: 10px; 697 padding-top: 8px; 698 border-top: 1px solid #dedede; 699} 700 701.msis-k3-config-details summary { 702 display: inline-block; 703 cursor: pointer; 704 color: #2f8d52; 705 font-size: 12px; 706 font-weight: 700; 707 list-style: none; 708} 709 710.msis-k3-config-details summary::-webkit-details-marker { 711 display: none; 712} 713 714.msis-k3-config-details summary::before { 715 content: "+ "; 716} 717 718.msis-k3-config-details[open] summary::before { 719 content: "â "; 720} 721 722.msis-k3-config-details summary:hover { 723 text-decoration: underline; 724} 725 726/* Detailinformationen */ 727.msis-k3-config-detail-grid { 728 margin-top: 10px; 729 display: grid; 730 gap: 4px; 731} 732 733.msis-k3-config-detail-row { 734 display: grid; 735 grid-template-columns: 140px minmax(0, 1fr); 736 gap: 10px; 737} 738 739.msis-k3-config-detail-label { 740 color: #777; 741 font-size: 11px; 742 line-height: 1.4; 743} 744 745.msis-k3-config-detail-value { 746 color: #333; 747 font-size: 11px; 748 line-height: 1.4; 749 font-weight: 600; 750} 751 752/* Offcanvas */ 753.offcanvas .msis-k3-configuration { 754 max-width: none; 755 margin-top: 8px; 756} 757 758.offcanvas .msis-k3-config-card { 759 padding: 10px; 760} 761 762.offcanvas .msis-k3-config-main-row { 763 grid-template-columns: 76px minmax(0, 1fr); 764} 765 766.offcanvas .msis-k3-config-detail-row { 767 grid-template-columns: 105px minmax(0, 1fr); 768} 769 770@media (max-width: 575.98px) { 771 .msis-k3-config-main-row, 772 .msis-k3-config-detail-row { 773 grid-template-columns: 1fr; 774 gap: 1px; 775 } 776 777 .msis-k3-config-main-row { 778 margin-bottom: 5px; 779 } 780} 781 782 783/* ========================================== 784 Warenkorb CRO Feinschliff 2026-08 785 ========================================== */ 786
787/* Gutscheincode standardmäÃig ruhig/eingeklappt */ 788.msis-cart-coupon { 789 margin-top: 2px; 790} 791 792.msis-cart-coupon-toggle { 793 appearance: none; 794 border: 0; 795 background: transparent; 796 padding: 4px 0; 797 color: #555; 798 font-size: 13px; 799 font-weight: 600; 800 cursor: pointer; 801 text-align: left; 802} 803 804.msis-cart-coupon-toggle:hover { 805 color: #e00000; 806 text-decoration: underline; 807} 808 809.msis-cart-coupon:not(.is-open) .msis-cart-coupon-label, 810.msis-cart-coupon:not(.is-open) .msis-cart-coupon-fields { 811 display: none !important; 812} 813 814.msis-cart-coupon.is-open .msis-cart-coupon-toggle { 815 margin-bottom: 7px; 816} 817 818/* K3 Details bleiben kompakt und sind bewusst sekundär */ 819.msis-k3-config-details > summary { 820 user-select: none; 821} 822 823/* Artikelnummer-Eingabe noch etwas zurücknehmen */ 824.is-act-cartpage .msis-cart-add-toggle { 825 font-size: 12px !important; 826 font-weight: 600 !important; 827 color: #666 !important; 828} 829 830.is-act-cartpage .msis-cart-add-toggle:hover { 831 color: #e00000 !important; 832} 833 834/* Kompakte Servicebox auf der eigentlichen Warenkorbseite */ 835.is-act-cartpage .msis-cart-service-compact { 836 padding-top: 12px !important; 837 padding-bottom: 12px !important; 838 min-height: 0 !important; 839} 840 841.is-act-cartpage .msis-cart-service-compact .msis-cart-service-hide { 842 display: none !important; 843} 844 845.is-act-cartpage .msis-cart-service-compact .msis-cart-service-title { 846 font-size: 18px !important; 847 line-height: 1.2 !important; 848 margin-bottom: 4px !important; 849} 850 851.is-act-cartpage .msis-cart-service-compact .msis-cart-service-portrait { 852 width: 58px !important; 853 height: 58px !important; 854 min-width: 58px !important; 855 object-fit: cover !important; 856} 857 858.is-act-cartpage .msis-cart-service-compact [class*="__head"] { 859 margin-bottom: 8px !important; 860} 861 862.is-act-cartpage .msis-cart-service-compact [class*="__grid"] { 863 display: flex !important; 864 align-items: center !important; 865 gap: 14px !important; 866 margin-top: 6px !important; 867} 868 869.is-act-cartpage .msis-cart-service-compact .msis-cart-service-phone { 870 margin: 0 !important; 871} 872 873/* Vertrauenszeile direkt nach dem Haupt-CTA */ 874.msis-checkout-benefits { 875 display: flex; 876 flex-wrap: wrap; 877 justify-content: center; 878 align-items: center; 879 column-gap: 0 !important; 880 row-gap: 4px !important; 881 margin: 8px 0 12px !important; 882 color: #555 !important; 883 font-size: 12px !important; 884 line-height: 1.4; 885 text-align: center; 886} 887 888.msis-checkout-benefits > span:not(.msis-benefit-separator) { 889 white-space: nowrap; 890 font-weight: 500; 891 color: #555; 892} 893 894.msis-checkout-benefits > span:not(.msis-benefit-separator)::first-letter { 895 color: #2f8d52; 896 font-weight: 700; 897} 898 899/* Bewusst sichtbarer Abstand um die Trenner */ 900.msis-benefit-separator { 901 color: #aaa !important; 902 margin: 0 7px !important; 903 flex: 0 0 auto; 904} 905 906.offcanvas .msis-checkout-benefits { 907 font-size: 10.5px !important; 908 margin-bottom: 9px !important; 909} 910 911@media (max-width: 575.98px) { 912 .msis-checkout-benefits { 913 row-gap: 4px !important; 914 font-size: 10px !important; 915 } 916 917 .msis-benefit-separator { 918 margin: 0 4px !important; 919 } 920 921 .is-act-cartpage .msis-cart-service-compact [class*="__grid"] { 922 display: block !important; 923 } 924} 925 926 927/* ========================================== 928 Warenkorb Stabilisierung V3 929 ========================================== */ 930.is-act-cartpage .line-item-promotion.msis-fixed-promotion .line-item-info-img, 931.is-act-cartpage .line-item-promotion.msis-fixed-promotion .line-item-remove { 932 display: none !important; 933} 934 935.is-act-cartpage .line-item-promotion.msis-fixed-promotion .line-item-label { 936 color: #2f8d52 !important; 937 font-weight: 700 !important; 938} 939 940.is-act-cartpage .line-item-promotion.msis-fixed-promotion .line-item-label::before { 941 content: "â "; 942} 943 944.is-act-cartpage .msis-cart-add-product-form:not(.is-open) { 945 display: none !important; 946} 947 948.is-act-cartpage .msis-hide-cart-paypal-banner { 949 display: none !important; 950} 951 952/* ========================================== 953 TEKOPLAN Navigation Desktop â eine Zeile 954 ========================================== */ 955@media (min-width: 1200px) { 956 .main-navigation .container, 957 .main-navigation-container, 958 .navigation-main .container { 959 max-width: 1600px !important; 960 width: 100% !important; 961 } 962 963 .main-navigation-menu { 964 display: flex !important; 965 flex-wrap: nowrap !important; 966 align-items: center !important; 967 justify-content: center !important; 968 width: 100% !important; 969 } 970 971 .main-navigation-link { 972 flex: 0 0 auto !important; 973 white-space: nowrap !important; 974 padding-left: 11px !important; 975 padding-right: 11px !important; 976 } 977 978 .main-navigation-link-text { 979 white-space: nowrap !important; 980 } 981} 982 983/* ========================================== 984 Checkout CRO V4 985 Bundesland bleibt unveraendert sichtbar. 986 ========================================== */ 987 988.msis-checkout-register-cro .checkout-main { 989 --msis-checkout-green: #2f8d52; 990} 991
992/* Bestandskunden-Hinweis kompakter */ 993.msis-checkout-register-cro .twt-checkout-header-login.msis-checkout-login-title { 994 margin-bottom: 5px !important; 995 font-size: 18px !important; 996} 997 998.msis-checkout-register-cro .msis-checkout-login-toggle { 999 display: inline-flex !important; 1000 align-items: center !important; 1001 gap: 5px !important; 1002 margin-bottom: 12px !important; 1003 padding: 0 !important; 1004 font-size: 13px !important; 1005} 1006 1007.msis-checkout-register-cro .msis-checkout-login-toggle a, 1008.msis-checkout-register-cro .msis-checkout-login-toggle button { 1009 font-weight: 700 !important; 1010 color: #e00000 !important; 1011 text-decoration: underline !important; 1012} 1013 1014/* PayPal klar als eigener Express-Weg */ 1015.msis-checkout-register-cro .msis-checkout-paypal-headline { 1016 margin: 10px 0 8px !important; 1017 padding: 10px 0 0 !important; 1018 border-top: 1px solid #e5e5e5 !important; 1019} 1020 1021.msis-checkout-register-cro .msis-checkout-paypal-headline .msis-paypal-guest-headline__title { 1022 font-family: "Oswald", sans-serif !important; 1023 font-size: 19px !important; 1024 line-height: 1.2 !important; 1025 font-weight: 700 !important; 1026 color: #222 !important; 1027 margin-bottom: 2px !important; 1028} 1029 1030.msis-checkout-register-cro .msis-checkout-paypal-headline .msis-paypal-guest-headline__text { 1031 margin: 0 0 8px !important; 1032 color: #666 !important; 1033 font-size: 12px !important; 1034 line-height: 1.4 !important; 1035} 1036 1037/* Servicebox im Checkout nur als Hilfeleiste */ 1038.msis-checkout-register-cro .msis-checkout-service-compact { 1039 margin: 14px 0 22px !important; 1040 padding: 10px 14px !important; 1041 min-height: 0 !important; 1042} 1043 1044.msis-checkout-register-cro .msis-checkout-service-compact .msis-checkout-service-hide { 1045 display: none !important; 1046} 1047 1048.msis-checkout-register-cro .msis-checkout-service-compact [class*="__head"] { 1049 grid-template-columns: 54px minmax(0, 1fr) !important; 1050 gap: 12px !important; 1051 margin-bottom: 8px !important; 1052} 1053 1054.msis-checkout-register-cro .msis-checkout-service-compact [class*="__portrait-wrap"] { 1055 width: 54px !important; 1056 height: 54px !important; 1057} 1058 1059.msis-checkout-register-cro .msis-checkout-service-compact .msis-checkout-service-title, 1060.msis-checkout-register-cro .msis-checkout-service-compact [class*="__title"] { 1061 font-size: 16px !important; 1062 line-height: 1.2 !important; 1063 margin: 0 0 4px !important; 1064} 1065 1066.msis-checkout-register-cro .msis-checkout-service-compact [class*="__status"] { 1067 font-size: 11px !important; 1068} 1069 1070.msis-checkout-register-cro .msis-checkout-service-compact [class*="__grid"] { 1071 display: block !important; 1072 margin: 0 !important; 1073} 1074 1075.msis-checkout-register-cro .msis-checkout-service-compact .msis-checkout-service-phone { 1076 display: grid !important; 1077 grid-template-columns: 34px minmax(0, 1fr) !important; 1078 gap: 9px !important; 1079 align-items: center !important; 1080 margin: 0 !important; 1081} 1082 1083.msis-checkout-register-cro .msis-checkout-service-compact .msis-checkout-service-phone [class*="__icon"] { 1084 width: 32px !important; 1085 height: 32px !important; 1086} 1087 1088.msis-checkout-register-cro .msis-checkout-service-compact .msis-checkout-service-phone a[href^="tel:"] { 1089 font-size: 13px !important; 1090 font-weight: 700 !important; 1091 white-space: nowrap !important; 1092} 1093 1094/* Gastkonto-Option: kompakt, sauber und eindeutig optional */ 1095.msis-checkout-register-cro .msis-checkout-account-option { 1096 display: inline-flex !important; 1097 align-items: center !important; 1098 gap: 10px !important; 1099 width: auto !important; 1100 max-width: 100% !important; 1101 margin: 12px 0 18px !important; 1102 padding: 9px 12px !important; 1103 background: #f8f9f8 !important; 1104 border: 1px solid #dfe4df !important; 1105 border-radius: 3px !important; 1106 color: #333 !important; 1107 font-size: 12px !important; 1108 line-height: 1.3 !important; 1109} 1110 1111.msis-checkout-register-cro .msis-checkout-account-option .form-check-input, 1112.msis-checkout-register-cro .msis-checkout-account-option .msis-checkout-account-checkbox { 1113 position: static !important; 1114 float: none !important; 1115 flex: 0 0 18px !important; 1116 width: 18px !important; 1117 height: 18px !important; 1118 margin: 0 !important; 1119 border: 1.5px solid #8a8a8a !important; 1120 border-radius: 3px !important; 1121 background-color: #fff !important; 1122 box-shadow: none !important; 1123 cursor: pointer !important; 1124} 1125 1126.msis-checkout-register-cro .msis-checkout-account-option .form-check-input:checked, 1127.msis-checkout-register-cro .msis-checkout-account-option .msis-checkout-account-checkbox:checked { 1128 background-color: #dc1a22 !important; 1129 border-color: #dc1a22 !important; 1130} 1131 1132.msis-checkout-register-cro .msis-checkout-account-option .msis-checkout-account-label { 1133 display: inline-flex !important;
1134 align-items: center !important; 1135 flex-wrap: wrap !important; 1136 gap: 7px !important; 1137 margin: 0 !important; 1138 padding: 0 !important; 1139 font-weight: 500 !important; 1140 cursor: pointer !important; 1141} 1142 1143.msis-checkout-register-cro .msis-checkout-account-badge { 1144 display: inline-flex !important; 1145 align-items: center !important; 1146 min-height: 20px !important; 1147 padding: 2px 7px !important; 1148 border-radius: 999px !important; 1149 background: #ecefec !important; 1150 color: #626862 !important; 1151 font-size: 10px !important; 1152 font-weight: 700 !important; 1153 text-transform: uppercase !important; 1154 letter-spacing: .02em !important; 1155} 1156 1157.msis-checkout-register-cro .msis-checkout-account-text { 1158 color: #333 !important; 1159 font-size: 12px !important; 1160 font-weight: 600 !important; 1161} 1162 1163/* Automatischen 5-%-Rabatt auch in der Checkout-Seitenleiste schlank zeigen */ 1164.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact { 1165 padding-top: 7px !important; 1166 padding-bottom: 7px !important; 1167 min-height: 0 !important; 1168} 1169 1170.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact .line-item-info-img, 1171.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact .line-item-remove { 1172 display: none !important; 1173} 1174 1175.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact .line-item-label { 1176 color: #2f8d52 !important; 1177 font-weight: 700 !important; 1178} 1179 1180/* Weiter-Button eindeutiger */ 1181.msis-checkout-register-cro .msis-checkout-continue-btn { 1182 min-height: 44px !important; 1183 font-weight: 700 !important; 1184} 1185 1186.msis-checkout-register-cro .msis-checkout-continue-note { 1187 margin-top: 7px !important; 1188 text-align: center !important; 1189 font-size: 11px !important; 1190 line-height: 1.35 !important; 1191 color: #666 !important; 1192} 1193 1194/* Formular minimal ruhiger */ 1195.msis-checkout-register-cro .register-card .card-body { 1196 padding-top: 4px !important; 1197} 1198 1199.msis-checkout-register-cro .twt-checkout-header-register { 1200 margin-top: 22px !important; 1201 margin-bottom: 8px !important; 1202} 1203 1204/* Rechte Warenkorbspalte: K3-Details kompakt lassen */ 1205.msis-checkout-register-cro .checkout-aside .msis-k3-configuration { 1206 max-width: 100% !important; 1207 margin-top: 7px !important; 1208} 1209 1210.msis-checkout-register-cro .checkout-aside .msis-k3-config-card { 1211 padding: 9px 10px !important; 1212} 1213 1214/* Bundesland: KEINE Ausblend-Regel hier. */ 1215 1216@media (max-width: 767.98px) { 1217 .msis-checkout-register-cro .msis-checkout-service-compact [class*="__head"] { 1218 grid-template-columns: 46px minmax(0, 1fr) !important; 1219 } 1220 1221 .msis-checkout-register-cro .msis-checkout-service-compact [class*="__portrait-wrap"] { 1222 width: 46px !important; 1223 height: 46px !important; 1224 } 1225 1226 .msis-checkout-register-cro .msis-checkout-paypal-headline .msis-paypal-guest-headline__title { 1227 font-size: 17px !important; 1228 } 1229} 1230 1231 1232/* ========================================== 1233 Checkout CRO V5 - Feinschliff 1234 ========================================== */ 1235.msis-checkout-register-cro .msis-checkout-login-toggle .icon { 1236 width: 18px !important; 1237 height: 18px !important; 1238} 1239 1240.msis-checkout-register-cro .msis-checkout-login-toggle .login-collapse-toggle { 1241 display: inline-flex !important; 1242 align-items: center !important; 1243 min-height: 24px !important; 1244} 1245 1246.msis-checkout-register-cro #msis-paypal-guest-headline.msis-checkout-paypal-headline { 1247 display: block !important; 1248 width: 100% !important; 1249} 1250 1251@media (max-width: 575.98px) { 1252 .msis-checkout-register-cro .msis-checkout-account-option { 1253 display: flex !important; 1254 width: 100% !important; 1255 } 1256} 1257 1258/* ========================================== 1259 Checkout CRO V6 - kompakter Bestellcheck 1260 ========================================== */ 1261 1262/* PayPal-Ratenhinweis bleibt erhalten, sitzt aber unter beiden Buttons */ 1263.msis-checkout-register-cro [data-swag-paypal-express-button="true"] { 1264 width: 100% !important; 1265} 1266 1267.msis-checkout-register-cro .msis-checkout-paypal-installment-bottom { 1268 order: 20 !important; 1269 flex: 0 0 100% !important; 1270 width: 100% !important; 1271 max-width: 100% !important; 1272 margin: 5px 0 0 !important; 1273 padding: 0 !important; 1274 text-align: left !important; 1275} 1276 1277/* Von PayPal nachgeladenen Text bewusst klein als Zusatzinfo behandeln */ 1278.msis-checkout-register-cro .msis-checkout-paypal-installment-bottom > * { 1279 max-width: 100% !important; 1280} 1281 1282/* Rechte Spalte = kompakte Bestellkontrolle statt zweiter Warenkorb */ 1283.msis-checkout-register-cro .checkout-aside .msis-checkout-order-title { 1284 margin-bottom: 10px !important; 1285} 1286 1287.msis-checkout-register-cro .checkout-aside .line-item-product.msis-checkout-product-compact { 1288 position: relative !important; 1289 padding: 10px 0 !important; 1290 margin: 0 !important; 1291 border-bottom: 1px solid #e5e5e5 !important; 1292} 1293 1294.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-row, 1295.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-info > .row { 1296 margin-left: 0 !important; 1297 margin-right: 0 !important; 1298} 1299 1300.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-info { 1301 width: 100% !important; 1302 padding: 0 42px 0 0 !important; 1303} 1304 1305.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-info-img { 1306 flex: 0 0 54px !important; 1307 width: 54px !important; 1308 max-width: 54px !important; 1309 padding: 0 9px 0 0 !important; 1310} 1311 1312.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-img-container, 1313.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-img-link { 1314 width: 46px !important; 1315 height: 46px !important; 1316 min-height: 46px !important; 1317} 1318 1319.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-img { 1320 max-width: 46px !important; 1321 max-height: 46px !important; 1322 object-fit: contain !important; 1323} 1324 1325.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-details { 1326 flex: 1 1 auto !important; 1327 width: calc(100% - 54px) !important; 1328 min-width: 0 !important; 1329 padding: 0 !important; 1330} 1331 1332.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-label { 1333 display: inline !important; 1334 font-size: 14px !important; 1335 line-height: 1.25 !important; 1336 font-weight: 700 !important; 1337} 1338 1339.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-product-number, 1340.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact [class*="delivery"] { 1341 margin-top: 2px !important; 1342 font-size: 11px !important; 1343 line-height: 1.3 !important; 1344} 1345 1346/* Anzahl + Preis nicht mehr als zwei grosse Extrazeilen wiederholen */ 1347.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact > .line-item-row > .line-item-quantity, 1348.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact > .line-item-row > .line-item-unit-price, 1349.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact > .line-item-row > .line-item-total-price { 1350 display: none !important; 1351} 1352 1353.msis-checkout-register-cro .checkout-aside .msis-checkout-line-price { 1354 display: flex !important;
1355 align-items: baseline !important; 1356 gap: 4px !important; 1357 margin-top: 5px !important; 1358 font-size: 12px !important; 1359 line-height: 1.3 !important; 1360 color: #333 !important; 1361} 1362 1363.msis-checkout-register-cro .checkout-aside .msis-checkout-line-total { 1364 font-size: 13px !important; 1365 color: #111 !important; 1366 font-weight: 700 !important; 1367} 1368 1369.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-remove { 1370 position: absolute !important; 1371 top: 9px !important; 1372 right: 0 !important; 1373 width: 34px !important; 1374 margin: 0 !important; 1375 z-index: 2 !important; 1376} 1377 1378.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-remove-button { 1379 width: 34px !important; 1380 height: 34px !important; 1381 padding: 4px !important; 1382} 1383 1384/* K3-Kontrollkarte in der schmalen Checkout-Spalte noch etwas kompakter */ 1385.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .msis-k3-configuration { 1386 margin-top: 7px !important; 1387} 1388 1389.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .msis-k3-config-card { 1390 padding: 8px 9px !important; 1391} 1392 1393.msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .msis-k3-config-main { 1394 gap: 3px !important; 1395} 1396 1397/* Rabatt im Checkout wirklich in EINE Zeile bringen */ 1398.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact { 1399 padding: 8px 0 !important; 1400 border-bottom: 1px solid #e5e5e5 !important; 1401} 1402 1403.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact > .line-item-row { 1404 display: flex !important; 1405 flex-wrap: nowrap !important; 1406 align-items: center !important; 1407 justify-content: space-between !important; 1408 margin: 0 !important; 1409} 1410 1411.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact .line-item-info { 1412 flex: 1 1 auto !important; 1413 width: auto !important; 1414 padding: 0 !important; 1415} 1416 1417.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact .line-item-total-price { 1418 display: block !important; 1419 flex: 0 0 auto !important; 1420 width: auto !important; 1421 margin: 0 0 0 12px !important; 1422 padding: 0 !important; 1423 text-align: right !important; 1424} 1425 1426.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact .line-item-total-price-label { 1427 display: none !important; 1428} 1429 1430.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact .line-item-total-price-value { 1431 font-size: 13px !important; 1432 font-weight: 700 !important; 1433 white-space: nowrap !important; 1434} 1435 1436@media (max-width: 767.98px) { 1437 .msis-checkout-register-cro .checkout-aside .msis-checkout-product-compact .line-item-info { 1438 padding-right: 38px !important; 1439 } 1440} 1441 1442 1443 1444/* ========================================== 1445 Checkout CRO V7 - Conversion Feinschliff 1446 ========================================== */ 1447 1448/* Kontotyp + Anrede auf Desktop in einer gemeinsamen Zeile */ 1449.msis-checkout-register-cro .msis-checkout-personal-top-row { 1450 margin-bottom: 0 !important; 1451} 1452 1453.msis-checkout-register-cro .msis-checkout-personal-top-row > .form-group { 1454 flex: 0 0 50% !important; 1455 width: 50% !important; 1456 max-width: 50% !important; 1457} 1458 1459/* Telefonnummer: freiwillig, Nutzen fuer Speditionslieferungen erklaeren */ 1460.msis-checkout-register-cro .msis-checkout-phone-hint { 1461 margin-top: 5px !important; 1462 max-width: 520px !important; 1463 color: #6a6a6a !important; 1464 font-size: 11px !important; 1465 line-height: 1.35 !important; 1466} 1467 1468/* Rechte Bestellkontrolle auf Desktop beim Scrollen sichtbar halten */ 1469@media (min-width: 992px) { 1470 .msis-checkout-register-cro .checkout-aside.msis-checkout-aside-sticky { 1471 position: sticky !important; 1472 top: 18px !important; 1473 align-self: flex-start !important; 1474 } 1475} 1476 1477/* Rabatt garantiert als eine kompakte Zeile â unabhaengig vom Shopware-Markup */ 1478.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact { 1479 display: block !important; 1480 padding: 9px 0 !important; 1481 margin: 0 !important; 1482 min-height: 0 !important; 1483 border-bottom: 1px solid #e5e5e5 !important; 1484} 1485 1486.msis-checkout-register-cro .checkout-aside .line-item-promotion.msis-checkout-promotion-compact > :not(.msis-checkout-discount-row) { 1487 display: none !important; 1488} 1489 1490.msis-checkout-register-cro .checkout-aside .msis-checkout-discount-row { 1491 display: flex !important;
1492 align-items: center !important; 1493 justify-content: space-between !important; 1494 gap: 14px !important; 1495 width: 100% !important; 1496 margin: 0 !important; 1497 padding: 0 !important; 1498} 1499 1500.msis-checkout-register-cro .checkout-aside .msis-checkout-discount-label { 1501 color: #2f8d52 !important; 1502 font-size: 13px !important; 1503 font-weight: 700 !important; 1504 line-height: 1.25 !important; 1505 white-space: nowrap !important; 1506} 1507 1508.msis-checkout-register-cro .checkout-aside .msis-checkout-discount-value { 1509 margin-left: auto !important; 1510 color: #111 !important; 1511 font-size: 13px !important; 1512 font-weight: 700 !important; 1513 line-height: 1.25 !important; 1514 white-space: nowrap !important; 1515} 1516 1517/* Weiter-CTA bewusst linksbuendig statt optisch in der Mitte zu schweben */ 1518.msis-checkout-register-cro .register-submit { 1519 text-align: left !important; 1520} 1521 1522.msis-checkout-register-cro .register-submit .msis-checkout-continue-btn { 1523 display: block !important; 1524 width: 56% !important; 1525 min-width: 420px !important; 1526 max-width: 620px !important; 1527 margin-left: 0 !important; 1528 margin-right: auto !important; 1529} 1530 1531.msis-checkout-register-cro .register-submit .msis-checkout-continue-note { 1532 width: 56% !important; 1533 min-width: 420px !important; 1534 max-width: 620px !important; 1535 margin: 7px 0 0 !important; 1536 text-align: left !important; 1537 color: #555 !important; 1538 font-size: 11px !important; 1539 line-height: 1.35 !important; 1540} 1541 1542@media (max-width: 767.98px) { 1543 .msis-checkout-register-cro .msis-checkout-personal-top-row > .form-group { 1544 flex: 0 0 100% !important; 1545 width: 100% !important; 1546 max-width: 100% !important; 1547 } 1548 1549 .msis-checkout-register-cro .register-submit .msis-checkout-continue-btn, 1550 .msis-checkout-register-cro .register-submit .msis-checkout-continue-note { 1551 width: 100% !important; 1552 min-width: 0 !important; 1553 max-width: none !important; 1554 } 1555} 1556 1557/* ========================================== 1558 V9 Hotfix: Startseite nur Cookie-Hinweis 1559 ========================================== */ 1560 1561/* Die Beratungs-/Bestellhilfe gehoert nicht auf die Startseite. 1562 Doppelte Absicherung ueber die echte Shopware-Home-Bodyklasse und 1563 die bereits im Head gesetzte Guard-Klasse. */ 1564html.msis-homepage-hide-support .msisdesign-configurator-support-v127, 1565html.msis-homepage-hide-support section[class*="msisdesign-configurator-support-"], 1566body.is-act-home .msisdesign-configurator-support-v127, 1567body.is-act-home section[class*="msisdesign-configurator-support-"], 1568body.is-active-route-frontend-home-page .msisdesign-configurator-support-v127, 1569body.is-active-route-frontend-home-page section[class*="msisdesign-configurator-support-"] { 1570 display: none !important; 1571 visibility: hidden !important; 1572 height: 0 !important; 1573 min-height: 0 !important; 1574 max-height: 0 !important; 1575 margin: 0 !important; 1576 padding: 0 !important; 1577 border: 0 !important; 1578 overflow: hidden !important; 1579} 1580 1581/* Checkout-CTA weiterhin wirklich linksbuendig. */ 1582.msis-checkout-register-cro .register-submit.msis-checkout-submit-left { 1583 margin-left: 0 !important; 1584 margin-right: auto !important; 1585} 1586 1587.msis-checkout-register-cro .register-submit.msis-checkout-submit-left .msis-checkout-continue-btn { 1588 margin-left: 0 !important; 1589 margin-right: auto !important; 1590} 1591 1592/* ========================================== 1593 TEKOPLAN Cookie Banner CRO 1594 Nur notwendige | Alle akzeptieren 1595 ========================================== */ 1596 1597/* Konfigurieren im ersten Dialog ausblenden */ 1598html body .cookie-permission-container 1599.js-cookie-configuration-button { 1600 display: none !important; 1601} 1602 1603/* Buttonbereich */ 1604html body .cookie-permission-container 1605.cookie-permission-actions { 1606 display: flex !important; 1607 justify-content: center !important; 1608 align-items: stretch !important; 1609 flex-wrap: nowrap !important; 1610 gap: 10px !important; 1611 1612 width: 100% !important; 1613 max-width: 100% !important; 1614 1615 margin: 0 !important; 1616 padding: 0 !important; 1617} 1618 1619/* Beide sichtbaren Button-Wrapper gleich breit */ 1620html body .cookie-permission-container 1621.cookie-permission-button, 1622 1623html body .cookie-permission-container 1624.js-cookie-accept-all-button { 1625 display: block !important; 1626 flex: 1 1 0 !important; 1627 width: auto !important; 1628 margin: 0 !important; 1629} 1630 1631/* Beide Buttons */ 1632html body .cookie-permission-container 1633.cookie-permission-button .btn, 1634 1635html body .cookie-permission-container 1636.js-cookie-accept-all-button .btn { 1637 width: 100% !important; 1638 min-height: 46px !important; 1639 1640 padding: 10px 18px !important; 1641 1642 border-radius: 4px !important; 1643 1644 font-size: 13px !important; 1645 font-weight: 700 !important; 1646 1647 white-space: nowrap !important; 1648} 1649 1650 1651/* ------------------------------------------ 1652 Nur technisch notwendige 1653 ------------------------------------------ */ 1654 1655html body .cookie-permission-container 1656.cookie-permission-button .btn { 1657 background: #dedede !important; 1658 border-color: #dedede !important; 1659 color: #222222 !important; 1660} 1661 1662html body .cookie-permission-container 1663.cookie-permission-button .btn:hover { 1664 background: #cccccc !important; 1665 border-color: #cccccc !important; 1666 color: #111111 !important; 1667} 1668 1669 1670/* ------------------------------------------ 1671 Alle akzeptieren = Hauptaktion 1672 ------------------------------------------ */ 1673 1674html body .cookie-permission-container 1675.js-cookie-accept-all-button .btn { 1676 background: #e00000 !important;
1677 border-color: #e00000 !important; 1678 color: #ffffff !important; 1679} 1680 1681html body .cookie-permission-container 1682.js-cookie-accept-all-button .btn:hover { 1683 background: #bd0000 !important; 1684 border-color: #bd0000 !important; 1685 color: #ffffff !important; 1686} 1687 1688 1689/* ------------------------------------------ 1690 Mobile 1691 ------------------------------------------ */ 1692 1693@media (max-width: 767.98px) { 1694 1695 html body .cookie-permission-container 1696 .cookie-permission-actions { 1697 flex-direction: column-reverse !important; 1698 gap: 8px !important; 1699 } 1700 1701 html body .cookie-permission-container 1702 .cookie-permission-button, 1703 1704 html body .cookie-permission-container 1705 .js-cookie-accept-all-button { 1706 width: 100% !important; 1707 flex: 0 0 auto !important; 1708 } 1709 1710 html body .cookie-permission-container 1711 .cookie-permission-button .btn, 1712 1713 html body .cookie-permission-container 1714 .js-cookie-accept-all-button .btn { 1715 width: 100% !important; 1716 } 1717}</style> 1718 1719 1720
1720<script type="importmap"> 1721 { 1722 "imports": {"shopware":"https:\/\/www.tekoplan-planen.shop\/bundles\/storefront\/storefront\/shopware\/shopware.js?1781851651"} } 1723 </script>
1723 1724 1725
1725<script type="module" src="https://www.tekoplan-planen.shop/bundles/storefront/storefront/shopware/shopware.js?1781851651"></script>
1725 1726 1727 1728
1728<script> 1729 window.features = JSON.parse('\u007B\u0022V6_5_0_0\u0022\u003Atrue,\u0022v6.5.0.0\u0022\u003Atrue,\u0022V6_6_0_0\u0022\u003Atrue,\u0022v6.6.0.0\u0022\u003Atrue,\u0022V6_7_0_0\u0022\u003Atrue,\u0022v6.7.0.0\u0022\u003Atrue,\u0022V6_8_0_0\u0022\u003Afalse,\u0022v6.8.0.0\u0022\u003Afalse,\u0022DISABLE_VUE_COMPAT\u0022\u003Atrue,\u0022disable.vue.compat\u0022\u003Atrue,\u0022ACCESSIBILITY_TWEAKS\u0022\u003Atrue,\u0022accessibility.tweaks\u0022\u003Atrue,\u0022TELEMETRY_METRICS\u0022\u003Afalse,\u0022telemetry.metrics\u0022\u003Afalse,\u0022FLOW_EXECUTION_AFTER_BUSINESS_PROCESS\u0022\u003Afalse,\u0022flow.execution.after.business.process\u0022\u003Afalse,\u0022PERFORMANCE_TWEAKS\u0022\u003Afalse,\u0022performance.tweaks\u0022\u003Afalse,\u0022ENABLE_OPENSEARCH_FOR_ADMIN_API\u0022\u003Afalse,\u0022enable.opensearch.for.admin.api\u0022\u003Afalse,\u0022CACHE_CONTEXT_HASH_RULES_OPTIMIZATION\u0022\u003Afalse,\u0022cache.context.hash.rules.optimization\u0022\u003Afalse,\u0022CACHE_REWORK\u0022\u003Afalse,\u0022cache.rework\u0022\u003Afalse,\u0022DEFERRED_CART_ERRORS\u0022\u003Afalse,\u0022deferred.cart.errors\u0022\u003Afalse,\u0022REPEATED_PAYMENT_FINALIZE\u0022\u003Afalse,\u0022repeated.payment.finalize\u0022\u003Afalse,\u0022PERMANENT_AUTOMATIC_PROMOTIONS\u0022\u003Afalse,\u0022permanent.automatic.promotions\u0022\u003Afalse,\u0022METEOR_TEXT_EDITOR\u0022\u003Afalse,\u0022meteor.text.editor\u0022\u003Afalse,\u0022MCP_SERVER\u0022\u003Afalse,\u0022mcp.server\u0022\u003Afalse,\u0022JSON_LD_DATA\u0022\u003Afalse,\u0022json.ld.data\u0022\u003Afalse,\u0022BREADCRUMB_REWORK\u0022\u003Afalse,\u0022breadcrumb.rework\u0022\u003Afalse\u007D'); 1730 </script>
1730 1731 1732 1733 1734 1735
1735<script> 1736 window.dataLayer = window.dataLayer || []; 1737 window.gtag = window.gtag || function () { window.dataLayer.push(arguments); }; 1738 1739 window.gtag('consent', 'default', { 1740 'ad_storage': 'denied', 1741 'analytics_storage': 'denied', 1742 'ad_user_data': 'denied', 1743 'ad_personalization': 'denied', 1744 'wait_for_update': 500 1745 }); 1746 1747 // Improves same-domain conversion attribution when ad_storage is denied. 1748 // This does NOT grant consent and does NOT enable advertising cookies. 1749 window.gtag('set', 'url_passthrough', true); 1750 1751 window.gtag('js', new Date()); 1752 window.gtag('config', 'AW-16748285166'); 1753 1754 // Local diagnostic state only. Nothing here is sent by this diagnostic object. 1755 window.__tekoplanGoogleAdsTracking = window.__tekoplanGoogleAdsTracking || {}; 1756 window.__tekoplanGoogleAdsTracking.version = '1.1.0'; 1757 window.__tekoplanGoogleAdsTracking.tagId = 'AW-16748285166'; 1758 window.__tekoplanGoogleAdsTracking.mode = 'advanced-consent-mode'; 1759 window.__tekoplanGoogleAdsTracking.urlPassthrough = true; 1760 window.__tekoplanGoogleAdsTracking.baseTagInitializedAt = new Date().toISOString(); 1761 </script>
vendor: 98 bytes, lines 1761-1762
1761 1762 <script id="tekoplan-google-ads-gtag" async src="https://www.googletagmanager.com/gtag/js?id=
1762AW-16748285166
vendor: 211 bytes, lines 1762-1766
1762"></script> 1763 1764 1765 1766
1766<!-- added by Trusted Shops app: Start --> 1767
1767<script src="https://integrations.etrusted.com/applications/widget.js/v2" async defer></script>
1767 1768 <!-- End --> 1769 1770 1771 1772 1773 1774 1775 1776 1777
1777<script type="text/javascript" data-campit-matomo="true" 1778 data-campit-matomo-options="{"context":{"controllerName":"auth","controllerAction":"loginpage"},"siteId":"1","matomoUrl":"https:\/\/tekoplanplanenshop.matomo.cloud","cookieConsent":"shopwareCookieConsent","debugEnabled":false}"> 1779 window.campitMatomoCallBack = function () { 1780 <!-- Matomo --> 1781 var _paq = window._paq = window._paq || []; 1782 /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ 1783 _paq.push(['trackPageView']); 1784 _paq.push(['enableLinkTracking']); 1785 (function () { 1786 var u = "https://tekoplanplanenshop.matomo.cloud/"; 1787 _paq.push(['setTrackerUrl', u + 'matomo.php']); 1788 _paq.push(['setSiteId', 1]); 1789 var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0]; 1790 g.async = true; 1791 g.src = u + 'matomo.js'; 1792 s.parentNode.insertBefore(g, s); 1793 })(); 1794 <!-- End Matomo Code --> 1795 }; 1796 </script>
vendor: 189 bytes, lines 1796-1800
1796 1797 1798 1799 <script type="text/javascript" id="recaptcha-script" 1800 data-src='https://www.google.com/recaptcha/api.js?render=
18006Le3G4AtAAAAABkM5gpgmXVYSjCN1VMIBaqf-TaF
vendor: 42 bytes, lines 1800-1802
1800' 1801 defer></script> 1802
1802<script> 1803 window.googleReCaptchaV3Active = true; 1804 </script>
1804 1805 1806 1807
1807<script> 1808 window.useDefaultCookieConsent = true; 1809 </script>
1809 1810 1811
1811<script> 1812 window.activeNavigationId = '26cf1202c12d4a88b183aae4579ac77f'; 1813 window.activeNavigationPathIdList = JSON.parse('\u005B\u005D'); 1814 window.activeRoute = 'frontend.account.login.page'; 1815 window.activeRouteParameters = '\u007B\u0022_noStore\u0022\u003Atrue\u007D'; 1816 window.router = { 1817 'frontend.cart.offcanvas': '/checkout/offcanvas', 1818 'frontend.cookie.offcanvas': '/cookie/offcanvas', 1819 'frontend.cookie.groups': '/cookie/groups', 1820 'frontend.checkout.finish.page': '/checkout/finish', 1821 'frontend.checkout.info': '/widgets/checkout/info', 1822 'frontend.menu.offcanvas': '/widgets/menu/offcanvas', 1823 'frontend.cms.page': '/widgets/cms', 1824 'frontend.cms.navigation.page': '/widgets/cms/navigation', 1825 'frontend.country.country-data': '/country/country-state-data', 1826 'frontend.app-system.generate-token': '/app-system/Placeholder/generate-token', 1827 'frontend.gateway.context': '/gateway/context', 1828 'frontend.cookie.consent.offcanvas': '/cookie/consent-offcanvas', 1829 'frontend.account.login.page': '/account/login', 1830 }; 1831 window.salesChannelId = '2da9733a900347e7ac298d3df9036d94'; 1832 window.currencyIsoCode = 'EUR'; 1833 window.openOffcanvasAfterAddToCart = '1'; 1834 </script>
1834 1835 1836
1836<script> 1837 1838 window.breakpoints = JSON.parse('\u007B\u0022xs\u0022\u003A0,\u0022sm\u0022\u003A576,\u0022md\u0022\u003A768,\u0022lg\u0022\u003A992,\u0022xl\u0022\u003A1200,\u0022xxl\u0022\u003A1400\u007D'); 1839 </script>
1839 1840 1841 1842
1842<script src="https://www.tekoplan-planen.shop/theme/b5da4f959c9c4fa9afc26b2924556339/assets/js/jquery-3.5.1.slim.min.js?1790330373"></script>
1842 1843 1844 1845 1846 1847
1847<script> 1848 window.validationMessages = JSON.parse('\u007B\u0022required\u0022\u003A\u0022Die\u0020Eingabe\u0020darf\u0020nicht\u0020leer\u0020sein.\u0022,\u0022email\u0022\u003A\u0022Ung\\u00fcltige\u0020E\u002DMail\u002DAdresse.\u0020Die\u0020E\u002DMail\u0020ben\\u00f6tigt\u0020das\u0020Format\u0020\\\u0022nutzer\u0040beispiel.de\\\u0022.\u0022,\u0022confirmation\u0022\u003A\u0022Ihre\u0020Eingaben\u0020sind\u0020nicht\u0020identisch.\u0022,\u0022minLength\u0022\u003A\u0022Die\u0020Eingabe\u0020ist\u0020zu\u0020kurz.\u0022,\u0022pattern\u0022\u003A\u0022Die\u0020Eingabe\u0020entspricht\u0020nicht\u0020dem\u0020erforderlichen\u0020Format.\u0022,\u0022grecaptcha\u0022\u003A\u0022Bitte\u0020akzeptieren\u0020Sie\u0020die\u0020technisch\u0020erforderlichen\u0020Cookies,\u0020um\u0020die\u0020reCAPTCHA\u002D\\u00dcberpr\\u00fcfung\u0020zu\u0020erm\\u00f6glichen.\u0022\u007D'); 1849 </script>
1849 1850 1851 1852
1852<script> 1853 window.themeJsPublicPath = 'https://www.tekoplan-planen.shop/theme/c7c869ddef4117828dbc452e4846ffba/js/'; 1854 </script>
1854 1855
1855<script type="text/javascript" src="https://www.tekoplan-planen.shop/theme/c7c869ddef4117828dbc452e4846ffba/js/storefront/storefront.js?1791201311" defer></script>
1855 1856
1856<script type="text/javascript" src="https://www.tekoplan-planen.shop/theme/c7c869ddef4117828dbc452e4846ffba/js/swag-pay-pal/swag-pay-pal.js?1791201311" defer></script>
1856 1857
1857<script type="text/javascript" src="https://www.tekoplan-planen.shop/theme/c7c869ddef4117828dbc452e4846ffba/js/pixel-areacalculator/pixel-areacalculator.js?1791201311" defer></script>
1857 1858
1858<script type="text/javascript" src="https://www.tekoplan-planen.shop/theme/c7c869ddef4117828dbc452e4846ffba/js/futi-checkout-upload/futi-checkout-upload.js?1791201311" defer></script>
1858 1859
1859<script type="text/javascript" src="https://www.tekoplan-planen.shop/theme/c7c869ddef4117828dbc452e4846ffba/js/netzhirsch-order-countdown/netzhirsch-order-countdown.js?1791201311" defer></script>
1859 1860
1860<script type="text/javascript" src="https://www.tekoplan-planen.shop/theme/c7c869ddef4117828dbc452e4846ffba/js/mollie-payments/mollie-payments.js?1791201311" defer></script>
1860 1861
1861<script type="text/javascript" src="https://www.tekoplan-planen.shop/theme/c7c869ddef4117828dbc452e4846ffba/js/campit-matomo/campit-matomo.js?1791201311" defer></script>
1861 1862
1862<script type="text/javascript" src="https://www.tekoplan-planen.shop/theme/c7c869ddef4117828dbc452e4846ffba/js/swag-custom-notification/swag-custom-notification.js?1791201311" defer></script>
1862 1863
1863<script type="text/javascript" src="https://www.tekoplan-planen.shop/theme/c7c869ddef4117828dbc452e4846ffba/js/tcinn-theme-ware-exquisite/tcinn-theme-ware-exquisite.js?1791201311" defer></script>
1863 1864 1865 1866 1867 1868 1869 </head> 1870 1871 <body class="is-ctl-auth is-act-loginpage is-active-route-frontend-account-login-page themeware twt-exquisite twt-header-type-4 twt-full-width-boxed twt-cms-styling"> 1872 1873 1874 1875 1876 1877 1878 <div id="page-top" class="skip-to-content bg-primary-subtle text-primary-emphasis overflow-hidden" tabindex="-1"> 1879 <div class="container skip-to-content-container d-flex justify-content-center visually-hidden-focusable"> 1880 <a href="#content-main" class="skip-to-content-link d-inline-flex text-decoration-underline m-1 p-2 fw-bold gap-2"> 1881 Zum Hauptinhalt springen 1882 </a> 1883 1884 <a href="#header-main-search-input" class="skip-to-content-link d-inline-flex text-decoration-underline m-1 p-2 fw-bold gap-2 d-none d-sm-block"> 1885 Zur Suche springen 1886 </a> 1887 1888 <a href="#main-navigation-menu" class="skip-to-content-link d-inline-flex text-decoration-underline m-1 p-2 fw-bold gap-2 d-none d-lg-block"> 1889 Zur Hauptnavigation springen 1890 </a> 1891 </div> 1892 </div> 1893 1894 1895 <noscript class="noscript-main"> 1896 1897 1898 <div 1899 role="alert" 1900 aria-live="polite" 1901 class="alert alert-info d-flex align-items-center" 1902 > 1903 1904 1905 1906 1907 1908 1909 1910 1911 <span class="icon icon-info" aria-hidden="true"> 1912 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M12 7c.5523 0 1 .4477 1 1s-.4477 1-1 1-1-.4477-1-1 .4477-1 1-1zm1 9c0 .5523-.4477 1-1 1s-1-.4477-1-1v-5c0-.5523.4477-1 1-1s1 .4477 1 1v5zm11-4c0 6.6274-5.3726 12-12 12S0 18.6274 0 12 5.3726 0 12 0s12 5.3726 12 12zM12 2C6.4772 2 2 6.4772 2 12s4.4772 10 10 10 10-4.4772 10-10S17.5228 2 12 2z" id="icons-default-info" /></defs><use xlink:href="#icons-default-info" fill="#758CA3" fill-rule="evenodd" /></svg> 1913 </span> 1914 1915 1916 1917 <div class="alert-content-container"> 1918 1919 Um unseren Shop in vollem Umfang nutzen zu können, empfehlen wir Ihnen Javascript in Ihrem Browser zu aktivieren. 1920 </div> 1921 1922 </div> 1923 </noscript> 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 <section id="twt-usp-bar" class="twt-usp-bar is-header is-small layout-1 top" 1948 data-twt-usp-bar-position="1" data-twt-usp-bar-usps="5" 1949 role="region" 1950 aria-label="Darum lohnt sich Einkaufen bei uns" 1951 > 1952 1953 <div class="twt-usp-bar-container container"> 1954 <div class="row h-100 align-items-center"> 1955 <div class="twt-usp-bar-items col px-0"> 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 <div class="twt-usp-bar-item twt-usp-1 item-1"> 1972 <div class="item-icon"> 1973 1974 1975 1976 1977 1978 1979 1980 1981
1982 <span class="icon icon-rocket" aria-hidden="true"> 1983 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M5.2213 14.4042a12.7324 12.7324 0 0 0-3.4638-1.434c-.7541-.1886-1.0142-1.1277-.4646-1.6773l1.8284-1.8284A5 5 0 0 1 6.657 8h2.47l.47-.6462A13 13 0 0 1 20.1107 2H21c.5523 0 1 .4477 1 1v.8893a13 13 0 0 1-5.3538 10.5136l-.4355.3167.2102.8407a5 5 0 0 1-1.3152 4.7482l-2.3986 2.3986c-.5496.5496-1.4887.2895-1.6772-.4646a12.7324 12.7324 0 0 0-1.434-3.4638 41.8718 41.8718 0 0 1-5.2797 2.17c-.7817.2606-1.5255-.4832-1.2649-1.265a41.8718 41.8718 0 0 1 2.17-5.2795zm.9287-1.7747A41.8718 41.8718 0 0 1 7.7358 10h-1.079a3 3 0 0 0-2.1213.8787l-.661.661c.794.2997 1.5546.665 2.2755 1.0898zm8.309 3.33a41.8717 41.8717 0 0 1-3.0885 1.8905 14.7187 14.7187 0 0 1 1.0897 2.2755l1.2313-1.2312a3 3 0 0 0 .789-2.849l-.0214-.0858zm-4.2242.2328a39.8717 39.8717 0 0 0 4.292-2.721l.943-.6859a11 11 0 0 0 4.5296-8.7848A11 11 0 0 0 11.2146 8.53l-.686.9432a39.8717 39.8717 0 0 0-2.721 4.2919 14.762 14.762 0 0 1 2.4272 2.4271zm-1.8172.936a12.7602 12.7602 0 0 0-1.5459-1.5459c-.4347.9-.8358 1.8167-1.202 2.748a39.8718 39.8718 0 0 0 2.7479-1.2021z" id="icons-default-rocket" /></defs><use xlink:href="#icons-default-rocket" fill="#758CA3" fill-rule="evenodd" /></svg> 1984 </span> 1985 1986 1987 </div> 1988 <div class="item-label"> 1989 <div class="item-title">Versand per GLS und Spedition</div> 1990 </div> 1991 </div> 1992 1993 1994 1995 <div class="twt-usp-bar-item twt-usp-2 item-2"> 1996 <div class="item-icon"> 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 <span class="icon icon-clock" aria-hidden="true"> 2007 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M13 11V6c0-.5523-.4477-1-1-1s-1 .4477-1 1v6c0 .5523.4477 1 1 1h4c.5523 0 1-.4477 1-1s-.4477-1-1-1h-3zm-1 13C5.3726 24 0 18.6274 0 12S5.3726 0 12 0s12 5.3726 12 12-5.3726 12-12 12zm0-2c5.5228 0 10-4.4772 10-10S17.5228 2 12 2 2 6.4772 2 12s4.4772 10 10 10z" id="icons-default-clock" /></defs><use xlink:href="#icons-default-clock" fill="#758CA3" fill-rule="evenodd" /></svg> 2008 </span> 2009 2010 2011 </div> 2012 <div class="item-label"> 2013 <div class="item-title">Kundenservice von 8-17 Uhr</div> 2014 </div> 2015 </div> 2016 2017 2018 2019 <div class="twt-usp-bar-item twt-usp-3 item-3"> 2020 <div class="item-icon"> 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 <span class="icon icon-thumb-up" aria-hidden="true"> 2031 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M4 9c.5523 0 1 .4477 1 1s-.4477 1-1 1-1-.4477-1-1 .4477-1 1-1zm4-2h.2457a1 1 0 0 0 .9615-.7253l1.1711-4.0989A3 3 0 0 1 13.263 0h1.76c1.6568 0 3 1.3431 3 3a3 3 0 0 1-.1155.8242L17 7h4c1.6569 0 3 1.3431 3 3v5c0 4.4183-3.5817 8-8 8H8c0 .5523-.4477 1-1 1H1c-.5523 0-1-.4477-1-1V7c0-.5523.4477-1 1-1h6c.5523 0 1 .4477 1 1zM6 8H2v14h4V8zm2 1v12h8c3.3137 0 6-2.6863 6-6v-5c0-.5523-.4477-1-1-1h-6.6515l1.6358-5.7253A1 1 0 0 0 16.0228 3c0-.5523-.4477-1-1-1H13.263a1 1 0 0 0-.9615.7253l-1.1711 4.0989A3 3 0 0 1 8.2457 9H8z" id="icons-default-thumb-up" /></defs><use xlink:href="#icons-default-thumb-up" fill="#758CA3" fill-rule="evenodd" /></svg> 2032 </span> 2033 2034 2035 </div> 2036 <div class="item-label"> 2037 <div class="item-title">Käuferschutz über Trusted Shops</div> 2038 </div> 2039 </div> 2040 2041 2042 2043 <div class="twt-usp-bar-item twt-usp-4 item-4"> 2044 <div class="item-icon"> 2045 2046 2047 2048 2049 2050 2051 2052 2053
2054 <span class="icon icon-briefcase" aria-hidden="true"> 2055 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M20 8v1c0 .5523-.4477 1-1 1s-1-.4477-1-1V8H6v1c0 .5523-.4477 1-1 1s-1-.4477-1-1V8H3c-.5523 0-1 .4477-1 1v10c0 .5523.4477 1 1 1h18c.5523 0 1-.4477 1-1V9c0-.5523-.4477-1-1-1h-1zM7 6V4c0-1.1046.8954-2 2-2h6c1.1046 0 2 .8954 2 2v2h4c1.6569 0 3 1.3431 3 3v10c0 1.6569-1.3431 3-3 3H3c-1.6569 0-3-1.3431-3-3V9c0-1.6569 1.3431-3 3-3h4zm2 0h6V4H9v2z" id="icons-default-briefcase" /></defs><use xlink:href="#icons-default-briefcase" fill="#758CA3" fill-rule="evenodd" /></svg> 2056 </span> 2057 2058 2059 </div> 2060 <div class="item-label"> 2061 <div class="item-title">Bequemer Kauf auf Rechnung</div> 2062 </div> 2063 </div> 2064 2065 2066 2067 2068 <div class="twt-usp-bar-item twt-usp-5 item-6"> 2069 <div class="item-icon"> 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 <span class="icon icon-headset" aria-hidden="true"> 2080 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M2 11v4h2v-4H2zm20-2c1.1046 0 2 .8954 2 2v4c0 1.1046-.8954 2-2 2v3c0 1.6569-1.3431 3-3 3h-1c0 .5523-.4477 1-1 1h-2c-.5523 0-1-.4477-1-1v-2c0-.5523.4477-1 1-1h2c.5523 0 1 .4477 1 1h1c.5523 0 1-.4477 1-1v-3c-1.1046 0-2-.8954-2-2v-4c0-1.1046.8954-2 2-2 0-3.866-3.134-7-7-7h-2C7.134 2 4 5.134 4 9c1.1046 0 2 .8954 2 2v4c0 1.1046-.8954 2-2 2H2c-1.1046 0-2-.8954-2-2v-4c0-1.1046.8954-2 2-2 0-4.9706 4.0294-9 9-9h2c4.9706 0 9 4.0294 9 9zm-2 2v4h2v-4h-2z" id="icons-default-headset" /></defs><use xlink:href="#icons-default-headset" fill="#758CA3" fill-rule="evenodd" /></svg> 2081 </span> 2082 2083 2084 </div> 2085 <div class="item-label"> 2086 <div class="item-title">Beratung unter: +49 (0)6681 9678446</div> 2087 </div> 2088 </div> 2089 2090 </div> 2091 2092 2093 </div> 2094 </div> 2095 2096 </section> 2097 2098 2099 2100 <header class="header-main"> 2101 <div class="container"> 2102 <div class="top-bar d-none d-lg-block"> 2103 2104 <nav class="top-bar-nav d-flex justify-content-end gap-3" 2105 aria-label="Shop-Einstellungen" 2106 > 2107 <div class="row align-items-center twt-top-bar"> 2108 2109 <div class="col-auto"> 2110 <div class="twt-top-bar-dropdowns d-flex justify-content-end gap-3"> 2111 <div class="top-bar-nav-item top-bar-menu"><div class="service-menu dropdown"><button class="btn dropdown-toggle top-bar-nav-btn" 2112 type="button" 2113 id="serviceMenuDropdown-top-bar" 2114 data-bs-toggle="dropdown" 2115 aria-haspopup="true" 2116 aria-expanded="false" 2117 ><span class="icon icon-themeware icon-help icon-solid" aria-hidden="true"><?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><rect x="10.96" y="16.13" width="2.06" height="2.06"/><path d="M12,5.81a4,4,0,0,0-4,4H10a2,2,0,1,1,4,0c0,.6-.51,1-1.29,1.72a5.31,5.31,0,0,0-.69.6,3.3,3.3,0,0,0-1,2.24v.69H13v-.69a1.33,1.33,0,0,1,.43-.86,2.16,2.16,0,0,1,.51-.43c.77-.69,2-1.64,2-3.27A3.91,3.91,0,0,0,12,5.81Z"/><path d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,20a9,9,0,1,1,9-9A9,9,0,0,1,12,21Z"/></svg></span><span class="top-bar-nav-text">Service/Hilfe</span></button><ul class="top-bar-list dropdown-menu dropdown-menu-end"><li class="top-bar-list-item"><a class="top-bar-list-item dropdown-item d-flex gap-1" 2118 href="" 2119 title="Nützliche Links"> 2120 Nützliche Links 2121 </a></li><li class="top-bar-list-item"><a class="top-bar-list-item dropdown-item d-flex gap-1" 2122 href="" 2123 title="Planenkonfigurator"> 2124 Planenkonfigurator 2125 </a></li></ul></div></div> </div> 2126 </div> 2127 </div> 2128 </nav> 2129 2130 2131 </div> 2132 2133 2134 2135 <div class="row align-items-center header-row"> 2136 <div class="col-12 col-lg-auto header-logo-col pb-sm-2 my-3 m-lg-0"> 2137 <div class="header-logo-main text-center"> 2138 <a class="header-logo-main-link" 2139 href="/" 2140 title="Zur Startseite gehen"> 2141 <picture class="header-logo-picture d-block m-auto"> 2142 2143 2144 <img src="https://www.tekoplan-planen.shop/media/8e/54/60/1668004341/tekoplan-planenmanufaktur.png?ts=1668004341" 2145 alt="Zur Startseite gehen" 2146 class="img-fluid header-logo-main-img"> 2147 </picture> 2148 2149 2150 2151 <a href="/" 2152 class="header-logo-shopping-experiences-link" 2153 title="Zur Startseite gehen" 2154 > 2155 <img src="https://www.tekoplan-planen.shop/media/8e/54/60/1668004341/tekoplan-planenmanufaktur.png?ts=1668004341" alt="Zur Startseite gehen" class="img-fluid header-logo-shopping-experiences-img"> 2156 </a> 2157 </a> 2158 </div> 2159 </div> 2160 2161 2162 2163 <div class="col-12 order-1 col-sm-auto order-sm-2 header-actions-col"> 2164 <div class="row g-0"> 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 <div class="col d-lg-none"> 2177 <div class="menu-button"> 2178 2179 <button 2180 class="btn nav-main-toggle-btn header-actions-btn" 2181 type="button" 2182 data-off-canvas-menu="true" 2183 aria-label="Menü" 2184 title="Navigation" 2185 > 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 <span class="icon icon-themeware icon-stack icon-solid" aria-hidden="true"><?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2206<path d="M2,5.48H22a1,1,0,0,0,0-2H2a1,1,0,0,0,0,2Z"/><path d="M22,10.92H2a1,1,0,0,0,0,2H22a1,1,0,0,0,0-2Z"/><path d="M22,18.52H2a1,1,0,0,0,0,2H22a1,1,0,0,0,0-2Z"/></svg></span> 2207 2208 2209 2210 2211 2212 <span class="header-nav-main-toggle-label"> 2213 Navigation 2214 </span> 2215 </button> 2216 2217 </div> 2218 </div> 2219 2220 2221 2222 2223 2224 2225 2226 <div class="col-auto twt-search-col"> 2227 <div class="search-toggle"> 2228 <button class="btn header-actions-btn search-toggle-btn js-search-toggle-btn collapsed" 2229 type="button" 2230 data-bs-toggle="collapse" 2231 data-bs-target="#searchCollapse" 2232 aria-expanded="false" 2233 aria-controls="searchCollapse" 2234 aria-label="Suchen" 2235 > 2236 <span class="header-search-toggle-icon"> 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 <span class="icon icon-themeware icon-search icon-solid" aria-hidden="true"><?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.34,1A8.52,8.52,0,0,0,7.77,15L1.43,21.29a1,1,0,0,0,0,1.42,1,1,0,0,0,.71.29,1,1,0,0,0,.71-.29l6.38-6.38A8.52,8.52,0,1,0,14.34,1Zm0,15a6.52,6.52,0,1,1,6.52-6.52A6.53,6.53,0,0,1,14.34,16Z"/></svg></span> 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 <span class="icon icon-themeware icon-x icon-solid" aria-hidden="true"><?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.41,12l9.3-9.29a1,1,0,1,0-1.42-1.42L12,10.59,2.71,1.29A1,1,0,0,0,1.29,2.71L10.59,12l-9.3,9.29a1,1,0,0,0,0,1.42,1,1,0,0,0,1.42,0L12,13.41l9.29,9.3a1,1,0,0,0,1.42,0,1,1,0,0,0,0-1.42Z"/></svg></span> 2284 2285 2286 2287 2288 </span> 2289 2290 <span class="header-search-toggle-name"> 2291 Suche 2292 </span> 2293 </button> 2294 </div> 2295 </div> 2296 2297 2298 <div class="col-auto"> 2299 <div class="account-menu"> 2300 <div class="dropdown"> 2301 <button class="btn account-menu-btn header-actions-btn" 2302 type="button" 2303 id="accountWidget" 2304 data-account-menu="true" 2305 data-bs-toggle="dropdown" 2306 aria-expanded="false" 2307 aria-label="Mein Konto" 2308 title="Mein Konto" 2309 > 2310 <span class="header-account-icon"> 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 <span class="icon icon-themeware icon-avatar icon-solid" aria-hidden="true"><?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21.31,16.24A10.3,10.3,0,0,0,15.89,13a6.57,6.57,0,1,0-7.74,0A10.18,10.18,0,0,0,2.8,16.24a7.86,7.86,0,0,0-1.55,3.84,1,1,0,0,0,.35.85,8.89,8.89,0,0,0,2.94,1.41,28.5,28.5,0,0,0,7.34.84h.35a28.5,28.5,0,0,0,7.34-.84,9,9,0,0,0,2.94-1.41,1,1,0,0,0,.34-.85A7.8,7.8,0,0,0,21.31,16.24ZM12,3.17A4.57,4.57,0,1,1,7.44,7.74,4.57,4.57,0,0,1,12,3.17ZM19,20.43a25.91,25.91,0,0,1-6.64.74h-.52a26,26,0,0,1-6.64-.74,11,11,0,0,1-1.8-.74,5.19,5.19,0,0,1,1-2.16c2.64-3.14,7.58-3,7.63-3h.19s5-.18,7.63,3a5.32,5.32,0,0,1,1,2.16A11.2,11.2,0,0,1,19,20.43Z"/></svg></span> 2332 2333 2334 2335 2336 </span> 2337 2338 <span class="header-account-name"> 2339 Mein Konto 2340 </span> 2341 2342 </button> 2343 2344 2345 <div class="dropdown-menu dropdown-menu-end account-menu-dropdown js-account-menu-dropdown" 2346 aria-labelledby="accountWidget"> 2347 2348 2349 2350 <div class="offcanvas-header"> 2351 <button class="btn btn-secondary offcanvas-close js-offcanvas-close"> 2352 2353 2354 2355 2356 2357 2358 <span class="icon icon-x icon-sm" aria-hidden="true"> 2359 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="m10.5858 12-7.293-7.2929c-.3904-.3905-.3904-1.0237 0-1.4142.3906-.3905 1.0238-.3905 1.4143 0L12 10.5858l7.2929-7.293c.3905-.3904 1.0237-.3904 1.4142 0 .3905.3906.3905 1.0238 0 1.4143L13.4142 12l7.293 7.2929c.3904.3905.3904 1.0237 0 1.4142-.3906.3905-1.0238.3905-1.4143 0L12 13.4142l-7.2929 7.293c-.3905.3904-1.0237.3904-1.4142 0-.3905-.3906-.3905-1.0238 0-1.4143L10.5858 12z" id="icons-default-x" /></defs><use xlink:href="#icons-default-x" fill="#758CA3" fill-rule="evenodd" /></svg> 2360 </span> 2361 2362 2363 Menü schlieÃen 2364 </button> 2365 </div> 2366 2367 <div class="offcanvas-body"> 2368 <div class="account-menu"> 2369 <div class="dropdown-header account-menu-header"> 2370 Ihr Konto 2371 </div> 2372 2373 <div class="account-menu-login"> 2374 <a href="/account/login" 2375 title="Anmelden" 2376 class="btn btn-primary account-menu-login-button"> 2377 Anmelden 2378 </a> 2379 2380 <div class="account-menu-register"> 2381 oder 2382 <a href="/account/login" 2383 title="Registrieren"> 2384 registrieren 2385 </a> 2386 </div> 2387 </div> 2388 2389 <div class="account-menu-links"> 2390 <div class="header-account-menu"> 2391 <div class="card account-menu-inner"> 2392 2393 <nav class="list-group list-group-flush account-aside-list-group"> 2394 2395 <a href="/account" 2396 title="Ãbersicht" 2397 class="list-group-item list-group-item-action account-aside-item" 2398 > 2399 Ãbersicht 2400 </a> 2401 2402 <a href="/account/profile" 2403 title="Persönliches Profil" 2404 class="list-group-item list-group-item-action account-aside-item" 2405 > 2406 Persönliches Profil 2407 </a> 2408 2409 <a href="/account/address" 2410 title="Adressen" 2411 class="list-group-item list-group-item-action account-aside-item" 2412 > 2413 Adressen 2414 </a> 2415 2416 <a href="/account/order" 2417 title="Bestellungen" 2418 class="list-group-item list-group-item-action account-aside-item" 2419 > 2420 Bestellungen 2421 </a> 2422 2423 2424 <a href="/account/mollie/subscriptions" 2425 title="Abonnements" 2426 class="list-group-item list-group-item-action account-aside-item"> 2427 Abonnements 2428 </a> 2429 2430 2431 2432 </nav> 2433 2434 </div> 2435 </div> 2436 </div> 2437 </div> 2438 </div> 2439 </div> 2440 </div> 2441 </div> 2442 </div> 2443 2444 2445 2446 2447 <div class="col-auto"> 2448 <div 2449 class="header-cart" 2450 data-off-canvas-cart="true" 2451 data-off-canvas-cart-options="{"autoFocus":true}" 2452 > 2453 <a 2454 class="btn header-cart-btn header-actions-btn" 2455 href="/checkout/cart" 2456 data-cart-widget="true" 2457 title="Warenkorb" 2458 aria-labelledby="cart-widget-aria-label" 2459 aria-haspopup="dialog" 2460 > 2461 <span class="header-cart-icon"> 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 <span class="icon icon-themeware icon-bag icon-solid" aria-hidden="true"><?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2482<path d="M20.87,6.82a1,1,0,0,0-1-.93H16.72V5.36A4.45,4.45,0,0,0,12,1,4.42,4.42,0,0,0,7.23,5.36v.53H4.11a1,1,0,0,0-1,.93l-1,14a2,2,0,0,0,2,2.14H19.8a2,2,0,0,0,2-2.13ZM9.23,5.37A2.4,2.4,0,0,1,12,3c2.59,0,2.76,2,2.77,2.37v.53H9.23Zm-2,2.52v1a1,1,0,0,0,2,0v-1h5.49v1a1,1,0,1,0,2,0v-1h2.22l.5,7.61H4.51l.54-7.61ZM4.12,21l.3-4.24h15.1L19.8,21Z"/></svg></span> 2483 2484 2485 2486 2487 2488 </span> 2489 2490 <span class="header-cart-name"> 2491 Warenkorb 2492 </span> 2493 2494 2495 <span class="header-cart-total"> 2496 0,00 ⬠2497 </span> 2498 2499 </a> 2500 </div> 2501 </div> 2502 2503 2504 </div> 2505 </div> 2506 </div> 2507 2508 2509 </div> 2510 </header> 2511 2512 2513 2514 <div class="nav-main"> 2515 <div class="container"> 2516 2517 <div id="sticky-logo" class="d-none"> 2518 <a href="/" 2519 class="sticky-logo-main-link" 2520 title="Zur Startseite gehen" 2521 > 2522 <picture> 2523 2524 <img src="https://www.tekoplan-planen.shop/media/8e/54/60/1668004341/tekoplan-planenmanufaktur.png?ts=1668004341" alt="Zur Startseite gehen"> 2525 2526 2527 </picture> 2528 </a> 2529 </div> 2530 2531 2532 <span id="js-sticky-cart-position" class="d-none"></span> 2533 2534 </div> 2535 2536 <div class="container"> 2537 2538 <nav class="navbar navbar-expand-lg main-navigation-menu" 2539 id="main-navigation-menu" 2540 itemscope="itemscope" 2541 itemtype="https://schema.org/SiteNavigationElement" 2542 data-navbar="true" 2543 data-navbar-options="{"pathIdList":[]}" 2544 aria-label="Hauptnavigation" 2545 > 2546 <div class="collapse navbar-collapse" id="main_nav"> 2547 <ul class="navbar-nav main-navigation-menu-list flex-wrap"> 2548 2549 <li class="nav-item nav-item-26cf1202c12d4a88b183aae4579ac77f"> 2550 <a class="nav-link main-navigation-link home-link root nav-item-26cf1202c12d4a88b183aae4579ac77f-link active" 2551 href="/" 2552 itemprop="url" 2553 title="Home" 2554 > 2555 <div class="main-navigation-icon"> 2556 <span itemprop="name"> 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 <span class="icon icon-themeware icon-home icon-solid" aria-hidden="true"><?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22.72,11.55l-3.21-3.3V3.81a1,1,0,1,0-2,0V6.19L12.72,1.25A1.06,1.06,0,0,0,12,1a1,1,0,0,0-.72.31L3.45,9.51a.81.81,0,0,0-.18.19l-2,2.1a1,1,0,0,0,0,1.42,1,1,0,0,0,.69.27,1,1,0,0,0,.73-.31l.33-.36v8.43A1.94,1.94,0,0,0,5,23.18H18.85a1.93,1.93,0,0,0,1.93-1.93V12.43l.5.52a1,1,0,1,0,1.44-1.4Zm-9.1,9.63H10.23V14.4h3.39Zm5.16,0H14.87v-8H9v8H5.06V10.71l7-7.32,6.77,7Z"/></svg></span> 2578 2579 2580 2581 2582 </span> 2583 </div> 2584 2585 </a> 2586 </li> 2587 2588 2589 2590 2591 2592 2593 2594 2595 <li class="nav-item nav-item-01995b7eac107cc1ae4f6ea20a7f1e5f dropdown "> 2596 <a class="nav-link nav-item-01995b7eac107cc1ae4f6ea20a7f1e5f-link root main-navigation-link no-dropdown" 2597 href="https://www.tekoplan-planen.shop/Planenkonfigurator/" 2598 itemprop="url" 2599 title="Planenkonfigurator" 2600 > 2601 <sp
2601an itemprop="name" class="main-navigation-link-text">Planenkonfigurator</span> 2602 2603 2604 </a> 2605 2606 </li> 2607 2608 2609 2610 2611 2612 2613 <li class="nav-item nav-item-cafb42b7d7fa4d9c9160de5f078ef0ec dropdown "> 2614 <a class="nav-link nav-item-cafb42b7d7fa4d9c9160de5f078ef0ec-link root main-navigation-link dropdown-toggle" 2615 href="https://www.tekoplan-planen.shop/Abdeckplane/" 2616 itemprop="url" 2617 title="Abdeckplane" 2618 > 2619 <span itemprop="name" class="main-navigation-link-text">Abdeckplane</span> 2620 2621 2622 2623 2624 2625 2626 2627 2628 <span class="icon icon-arrow-medium-down icon-xs" aria-hidden="true"> 2629 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"><defs><path id="icons-solid-arrow-medium-down" d="M4.7071 6.2929c-.3905-.3905-1.0237-.3905-1.4142 0-.3905.3905-.3905 1.0237 0 1.4142l4 4c.3905.3905 1.0237.3905 1.4142 0l4-4c.3905-.3905.3905-1.0237 0-1.4142-.3905-.3905-1.0237-.3905-1.4142 0L8 9.5858l-3.2929-3.293z" /></defs><use xlink:href="#icons-solid-arrow-medium-down" fill="#758CA3" fill-rule="evenodd" /></svg> 2630 </span> 2631 2632 </a> 2633 2634 </li> 2635 2636 2637 2638 2639 2640 2641 <li class="nav-item nav-item-f3bcdc7c0bd84d569d4a3fdc2d30dc3c dropdown "> 2642 <a class="nav-link nav-item-f3bcdc7c0bd84d569d4a3fdc2d30dc3c-link root main-navigation-link dropdown-toggle" 2643 href="https://www.tekoplan-planen.shop/Terrassenplane/" 2644 itemprop="url" 2645 title="Terrassenplane" 2646 > 2647 <span itemprop="name" class="main-navigation-link-text">Terrassenplane</span> 2648 2649 2650 2651 2652 2653 2654 2655 2656 <span class="icon icon-arrow-medium-down icon-xs" aria-hidden="true"> 2657 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"><use xlink:href="#icons-solid-arrow-medium-down" fill="#758CA3" fill-rule="evenodd" /></svg> 2658 </span> 2659 2660 </a> 2661 2662 </li> 2663 2664 2665 2666 2667 2668 2669 <li class="nav-item nav-item-f914d8099fe74be
2669c8f4aecd5c3a906b6 dropdown "> 2670 <a class="nav-link nav-item-f914d8099fe74bec8f4aecd5c3a906b6-link root main-navigation-link dropdown-toggle" 2671 href="https://www.tekoplan-planen.shop/Carportplane/" 2672 itemprop="url" 2673 title="Carportplane" 2674 > 2675 <span itemprop="name" class="main-navigation-link-text">Carportplane</span> 2676 2677 2678 2679 2680 2681 2682 2683 2684 <span class="icon icon-arrow-medium-down icon-xs" aria-hidden="true"> 2685 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"><use xlink:href="#icons-solid-arrow-medium-down" fill="#758CA3" fill-rule="evenodd" /></svg> 2686 </span> 2687 2688 </a> 2689 2690 </li> 2691 2692 2693 2694 2695 2696 2697 <li class="nav-item nav-item-ce9fcfe3c3844c87bceccd35916c9b35 dropdown "> 2698 <a class="nav-link nav-item-ce9fcfe3c3844c87bceccd35916c9b35-link root main-navigation-link dropdown-toggle" 2699 href="https://www.tekoplan-planen.shop/Poolplane/" 2700 itemprop="url" 2701 title="Poolplane" 2702 > 2703 <span itemprop="name" class="main-navigation-link-text">Poolplane</span> 2704 2705 2706 2707 2708 2709 2710 2711 2712 <span class="icon icon-arrow-medium-down icon-xs" aria-hidden="true"> 2713 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"><use xlink:href="#icons-solid-arrow-medium-down" fill="#758CA3" fill-rule="evenodd" /></svg> 2714 </span> 2715 2716 </a> 2717 2718 </li> 2719 2720 2721 2722 2723 2724 2725 <li class="nav-item nav-item-596e59b0584e445289b53afd2bb79947 dropdown "> 2726 <a class="nav-link nav-item-596e59b0584e445289b53afd2bb79947-link root main-navigation-link no-dropdown" 2727 href="https://www.tekoplan-planen.shop/Anhaenger-LKW-Plane/" 2728 itemprop="url" 2729 title="Anhänger- / LKW-Plane" 2730 > 2731 <sp
2731an itemprop="name" class="main-navigation-link-text">Anhänger- / LKW-Plane</span> 2732 2733 2734 </a> 2735 2736 </li> 2737 2738 2739 2740 2741 2742 2743 <li class="nav-item nav-item-d05b4c474f724b19a2224872ed386373 dropdown "> 2744 <a class="nav-link nav-item-d05b4c474f724b19a2224872ed386373-link root main-navigation-link dropdown-toggle" 2745 href="https://www.tekoplan-planen.shop/Reptilienschutzzaun-GTH/" 2746 itemprop="url" 2747 title="Reptilienschutzzaun GTH" 2748 > 2749 <span itemprop="name" class="main-navigation-link-text">Reptilienschutzzaun GTH</span> 2750 2751 2752 2753 2754 2755 2756 2757 2758 <span class="icon icon-arrow-medium-down icon-xs" aria-hidden="true"> 2759 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"><use xlink:href="#icons-solid-arrow-medium-down" fill="#758CA3" fill-rule="evenodd" /></svg> 2760 </span> 2761 2762 </a> 2763 2764 </li> 2765 2766 2767 2768 2769 2770 2771 <li class="nav-item nav-item-ba89017658744acabb36f8815637dfbd dropdown "> 2772 <a class="nav-link nav-item-ba89017658744acabb36f8815637dfbd-link root main-navigation-link dropdown-toggle" 2773 href="https://www.tekoplan-planen.shop/Rollenware/" 2774 itemprop="url" 2775 title="Rollenware" 2776 > 2777 <span itemprop="name" class="main-navigation-link-text">Rollenware</span> 2778 2779 2780 2781 2782 2783 2784 2785 2786 <span class="icon icon-arrow-medium-down icon-xs" aria-hidden="true"> 2787 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"><use xlink:href="#icons-solid-arrow-medium-down" fill="#758CA3" fill-rule="evenodd" /></svg> 2788 </span> 2789 2790 </a> 2791 2792 </li> 2793 2794 2795 2796 2797 2798 2799 <li class="nav-item nav-item-1433189901ef416396e572aec410bad2 dropdown "> 2800 <a class="nav-link nav-item-1433189901ef416396e572aec410bad2-link root main-navigation-link dropdown-toggle" 2801 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/" 2802 itemprop="url" 2803 title="Garten / Bau / Industrie" 2804 > 2805 <sp
2805an itemprop="name" class="main-navigation-link-text">Garten / Bau / Industrie</span> 2806 2807 2808 2809 2810 2811 2812 2813 2814 <span class="icon icon-arrow-medium-down icon-xs" aria-hidden="true"> 2815 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"><use xlink:href="#icons-solid-arrow-medium-down" fill="#758CA3" fill-rule="evenodd" /></svg> 2816 </span> 2817 2818 </a> 2819 2820 </li> 2821 2822 2823 2824 2825 2826 2827 <li class="nav-item nav-item-dcbd334ebc314f4e946cf30d5a51b971 dropdown "> 2828 <a class="nav-link nav-item-dcbd334ebc314f4e946cf30d5a51b971-link root main-navigation-link no-dropdown" 2829 href="https://www.tekoplan-planen.shop/Sonnensegel/" 2830 itemprop="url" 2831 title="Sonnensegel" 2832 > 2833 <span itemprop="name" class="main-navigation-link-text">Sonnensegel</span> 2834 2835 2836 </a> 2837 2838 </li> 2839 2840 </ul> 2841 </div> 2842 </nav> 2843 </div> 2844 2845 </div> 2846 2847 2848 2849 2850 2851 2852 <div class="twt-top-navigation-flyout-wrapper" data-top-navigation-flyout> 2853 2854 2855 2856 2857 2858 <div class="twt-top-navigation-flyout twt-top-navigation-flyout--default nav-item-dropdown-cafb42b7d7fa4d9c9160de5f078ef0ec dropdown-menu w-100 p-4 d-none"> 2859 <div class="twt-top-navigation-flyout-container container"> 2860 2861 <div class="row"> 2862 <div class="col"> 2863 <div class="navigation-flyout-category-link"> 2864 <a href="https://www.tekoplan-planen.shop/Abdeckplane/" 2865 itemprop="url" 2866 title="Abdeckplane"> 2867 Zur Kategorie Abdeckplane 2868 </a> 2869 </div> 2870 </div> 2871 2872 <div class="col-auto"> 2873 <button class="navigation-flyout-close js-close-flyout-menu btn-close" aria-label="Menü schlieÃen"> 2874 </button> 2875 </div> 2876 </div> 2877 2878 2879 2880 <div class="row navigation-flyout-content"> 2881 <div class="col-8 col-xl-9"> 2882 <div class=""> 2883 2884 2885 2886 <div class="row navigation-flyout-categories is-level-0"> 2887 2888 <div class="col-4 "> 2889 <a class="nav-item nav-item-5178f21997764651843dea343be852f0 nav-link nav-item-5178f21997764651843dea343be852f0-link navigation-flyout-link is-level-0" 2890 href="https://www.tekoplan-planen.shop/Abdeckplane/Abdeckplane-mit-Tuer-und-Fenster-konfigurieren/" 2891 itemprop="url" 2892 title="Abdeckplane mit Tür und Fenster konfigurieren" 2893 >
2894 <span itemprop="name">Abdeckplane mit Tür und Fenster konfigurieren</span> 2895 2896 </a> 2897 2898 2899 2900 2901 <div class="navigation-flyout-categories is-level-1"> 2902 </div> 2903 2904 </div> 2905 2906 <div class="col-4 navigation-flyout-col"> 2907 <a class="nav-item nav-item-373f3d51d452453191593fa1ffbbbdb1 nav-link nav-item-373f3d51d452453191593fa1ffbbbdb1-link navigation-flyout-link is-level-0" 2908 href="https://www.tekoplan-planen.shop/Abdeckplane/Abdeckplane-rechteckig-konfigurieren/" 2909 itemprop="url" 2910 title="Abdeckplane rechteckig konfigurieren" 2911 > 2912 <span itemprop="name">Abdeckplane rechteckig konfigurieren</span> 2913 2914 </a> 2915 2916 2917 2918 2919 <div class="navigation-flyout-categories is-level-1"> 2920 </div> 2921 2922 </div> 2923 2924 <div class="col-4 navigation-flyout-col"> 2925 <a class="nav-item nav-item-fdd60408f8e34cb6b6741ce61436232c nav-link nav-item-fdd60408f8e34cb6b6741ce61436232c-link navigation-flyout-link is-level-0" 2926 href="https://www.tekoplan-planen.shop/Abdeckplane/Abdeckplane-mit-schraeger-Seite-links-rechts-konfigurieren/" 2927 itemprop="url" 2928 title="Abdeckplane mit schräger Seite (links/rechts) konfigurieren" 2929 > 2930 <span itemprop="name">Abdeckplane mit schräger Seite (links/rechts) konfigurieren</span> 2931 2932 </a> 2933 2934 2935 2936 2937 <div class="navigation-flyout-categories is-level-1"> 2938 </div> 2939 2940 </div> 2941 2942 <div class="col-4 "> 2943 <a class="nav-item nav-item-f182b8728e764de7939200d552abebf4 nav-link nav-item-f182b8728e764de7939200d552abebf4-link navigation-flyout-link is-level-0" 2944 href="https://www.tekoplan-planen.shop/Abdeckplane/Abdeckplane-rund-konfigurieren/" 2945 itemprop="url" 2946 title="Abdeckplane rund konfigurieren" 2947 > 2948 <span itemprop="name">Abdeckplane rund konfigurieren</span> 2949 2950 </a> 2951 2952 2953 2954 2955 <div class="navigation-flyout-categories is-level-1"> 2956 </div> 2957 2958 </div> 2959 2960 <div class="col-4 navigation-flyout-col"> 2961 <a class="nav-item nav-item-1363c26aa4254fecbc4d285ca46b7600 nav-link nav-item-1363c26aa4254fecbc4d285ca46b7600-link navigation-flyout-link is-level-0" 2962 href="https://www.tekoplan-planen.shop/Abdeckplane/Abdeckplane-dreieckig-konfigurieren/" 2963 itemprop="url" 2964 title="Abdeckplane dreieckig konfigurieren" 2965 > 2966 <span itemprop="name">Abdeckplane dreieckig konfigurieren</span> 2967 2968 </a> 2969 2970 2971 2972 2973 <div class="navigation-flyout-categories is-level-1"> 2974 </div> 2975 2976 </div> 2977 2978 <div class="col-4 navigation-flyout-col"> 2979 <a class="nav-item nav-item-faf322e2f15d4a4682ff2fc04794aceb nav-link nav-item-faf322e2f15d4a4682ff2fc04794aceb-link navigation-flyout-link is-level-0" 2980 href="https://www.tekoplan-planen.shop/Abdeckplane/Abdeckplane-oval-konfigurieren/" 2981 itemprop="url" 2982 title="Abdeckplane oval konfigurieren" 2983 >
2984 <span itemprop="name">Abdeckplane oval konfigurieren</span> 2985 2986 </a> 2987 2988 2989 2990 2991 <div class="navigation-flyout-categories is-level-1"> 2992 </div> 2993 2994 </div> 2995 </div> 2996 2997 </div> 2998 </div> 2999 3000 <div class="col-4 col-xl-3"> 3001 <div class="navigation-flyout-teaser"> 3002 <a class="navigation-flyout-teaser-image-container" 3003 href="https://www.tekoplan-planen.shop/Abdeckplane/" 3004 title="Abdeckplane"> 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 <img src="https://www.tekoplan-planen.shop/media/f0/5a/78/1671288802/abdeckplane_ohne.jpg?ts=1750679926" srcset="https://www.tekoplan-planen.shop/thumbnail/f0/5a/78/1671288802/abdeckplane_ohne_400x400.jpg?ts=1671288806 400w, https://www.tekoplan-planen.shop/thumbnail/f0/5a/78/1671288802/abdeckplane_ohne_800x800.jpg?ts=1671288806 800w, https://www.tekoplan-planen.shop/thumbnail/f0/5a/78/1671288802/abdeckplane_ohne_1920x1920.jpg?ts=1671288806 1920w" sizes="310px" 3028 class="navigation-flyout-teaser-image img-fluid" alt="Abdeckplane Holz" title="Abdeckplane Holz" data-object-fit="cover" loading="lazy" /> 3029 </a> 3030 </div> 3031 </div> 3032 </div> 3033 </div> 3034 </div> 3035 3036 3037 3038 3039 <div class="twt-top-navigation-flyout twt-top-navigation-flyout--default nav-item-dropdown-f3bcdc7c0bd84d569d4a3fdc2d30dc3c dropdown-menu w-100 p-4 d-none"> 3040 <div class="twt-top-navigation-flyout-container container"> 3041 3042 <div class="row"> 3043 <div class="col"> 3044 <div class="navigation-flyout-category-link"> 3045 <a href="https://www.tekoplan-planen.shop/Terrassenplane/" 3046 itemprop="url" 3047 title="Terrassenplane"> 3048 Zur Kategorie Terrassenplane 3049 </a> 3050 </div> 3051 </div> 3052 3053 <div class="col-auto"> 3054 <button class="navigation-flyout-close js-close-flyout-menu btn-close" aria-label="Menü schlieÃen"> 3055 </button> 3056 </div> 3057 </div> 3058 3059 3060 3061 <div class="row navigation-flyout-content"> 3062 <div class="col-8 col-xl-9"> 3063 <div class=""> 3064 3065 3066 3067 <div class="row navigation-flyout-categories is-level-0"> 3068 3069 <div class="col-4 "> 3070 <a class="nav-item nav-item-7c04307e2da94c4c8e7b9eda2e8a28ac nav-link nav-item-7c04307e2da94c4c8e7b9eda2e8a28ac-link navigation-flyout-link is-level-0" 3071 href="https://www.tekoplan-planen.shop/Terrassenplane/Terrassenplane-mit-Tuer-und-Fenster-konfigurieren/" 3072 itemprop="url" 3073 title="Terrassenplane mit Tür und Fenster konfigurieren" 3074 >
3075 <span itemprop="name">Terrassenplane mit Tür und Fenster konfigurieren</span> 3076 3077 </a> 3078 3079 3080 3081 3082 <div class="navigation-flyout-categories is-level-1"> 3083 </div> 3084 3085 </div> 3086 3087 <div class="col-4 navigation-flyout-col"> 3088 <a class="nav-item nav-item-794c4f4c3e1a48a2b7c5b6eeb950ce5b nav-link nav-item-794c4f4c3e1a48a2b7c5b6eeb950ce5b-link navigation-flyout-link is-level-0" 3089 href="https://www.tekoplan-planen.shop/Terrassenplane/Terrassenplane-rechteckig-konfigurieren/" 3090 itemprop="url" 3091 title="Terrassenplane rechteckig konfigurieren" 3092 > 3093 <span itemprop="name">Terrassenplane rechteckig konfigurieren</span> 3094 3095 </a> 3096 3097 3098 3099 3100 <div class="navigation-flyout-categories is-level-1"> 3101 </div> 3102 3103 </div> 3104 3105 <div class="col-4 navigation-flyout-col"> 3106 <a class="nav-item nav-item-101188826592436d9a0b13e9ca654561 nav-link nav-item-101188826592436d9a0b13e9ca654561-link navigation-flyout-link is-level-0" 3107 href="https://www.tekoplan-planen.shop/Terrassenplane/Terrassenplane-mit-schraeger-Seite-links-rechts-konfigurieren/" 3108 itemprop="url" 3109 title="Terrassenplane mit schräger Seite (links/rechts) konfigurieren" 3110 > 3111 <span itemprop="name">Terrassenplane mit schräger Seite (links/rechts) konfigurieren</span> 3112 3113 </a> 3114 3115 3116 3117 3118 <div class="navigation-flyout-categories is-level-1"> 3119 </div> 3120 3121 </div> 3122 3123 <div class="col-4 "> 3124 <a class="nav-item nav-item-53e417f4c0f44a6bbcffe2d78c7f3da6 nav-link nav-item-53e417f4c0f44a6bbcffe2d78c7f3da6-link navigation-flyout-link is-level-0" 3125 href="https://www.tekoplan-planen.shop/Terrassenplane/Terrassenplane-rund-konfigurieren/" 3126 itemprop="url" 3127 title="Terrassenplane rund konfigurieren" 3128 > 3129 <span itemprop="name">Terrassenplane rund konfigurieren</span> 3130 3131 </a> 3132 3133 3134 3135 3136 <div class="navigation-flyout-categories is-level-1"> 3137 </div> 3138 3139 </div> 3140 3141 <div class="col-4 navigation-flyout-col"> 3142 <a class="nav-item nav-item-ec7345ea97184751a7cc4e8b8fbce4d9 nav-link nav-item-ec7345ea97184751a7cc4e8b8fbce4d9-link navigation-flyout-link is-level-0" 3143 href="https://www.tekoplan-planen.shop/Terrassenplane/Terrassenplane-dreieckig-konfigurieren/" 3144 itemprop="url" 3145 title="Terrassenplane dreieckig konfigurieren" 3146 > 3147 <span itemprop="name">Terrassenplane dreieckig konfigurieren</span> 3148 3149 </a> 3150 3151 3152 3153 3154 <div class="navigation-flyout-categories is-level-1"> 3155 </div> 3156 3157 </div> 3158 3159 <div class="col-4 navigation-flyout-col"> 3160 <a class="nav-item nav-item-2cec13453cf044d5b4d8401fc779ad2d nav-link nav-item-2cec13453cf044d5b4d8401fc779ad2d-link navigation-flyout-link is-level-0" 3161 href="https://www.tekoplan-planen.shop/Terrassenplane/Terrassenplane-oval-konfigurieren/" 3162 itemprop="url" 3163 title="Terrassenplane oval konfigurieren" 3164 >
3165 <span itemprop="name">Terrassenplane oval konfigurieren</span> 3166 3167 </a> 3168 3169 3170 3171 3172 <div class="navigation-flyout-categories is-level-1"> 3173 </div> 3174 3175 </div> 3176 </div> 3177 3178 </div> 3179 </div> 3180 3181 <div class="col-4 col-xl-3"> 3182 <div class="navigation-flyout-teaser"> 3183 <a class="navigation-flyout-teaser-image-container" 3184 href="https://www.tekoplan-planen.shop/Terrassenplane/" 3185 title="Terrassenplane"> 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 <img src="https://www.tekoplan-planen.shop/media/43/a9/5d/1682582625/terrassenplane_ohne_text.jpg?ts=1750681015" srcset="https://www.tekoplan-planen.shop/thumbnail/43/a9/5d/1682582625/terrassenplane_ohne_text_1920x1920.jpg?ts=1682582639 1920w, https://www.tekoplan-planen.shop/thumbnail/43/a9/5d/1682582625/terrassenplane_ohne_text_400x400.jpg?ts=1682582639 400w, https://www.tekoplan-planen.shop/thumbnail/43/a9/5d/1682582625/terrassenplane_ohne_text_800x800.jpg?ts=1682582639 800w" sizes="310px" 3209 class="navigation-flyout-teaser-image img-fluid" alt="Terrassenplane" title="Terrassenplane" data-object-fit="cover" loading="lazy" /> 3210 </a> 3211 </div> 3212 </div> 3213 </div> 3214 </div> 3215 </div> 3216 3217 3218 3219 3220 <div class="twt-top-navigation-flyout twt-top-navigation-flyout--default nav-item-dropdown-f914d8099fe74bec8f4aecd5c3a906b6 dropdown-menu w-100 p-4 d-none"> 3221 <div class="twt-top-navigation-flyout-container container"> 3222 3223 <div class="row"> 3224 <div class="col"> 3225 <div class="navigation-flyout-category-link"> 3226 <a href="https://www.tekoplan-planen.shop/Carportplane/" 3227 itemprop="url" 3228 title="Carportplane"> 3229 Zur Kategorie Carportplane 3230 </a> 3231 </div> 3232 </div> 3233 3234 <div class="col-auto"> 3235 <button class="navigation-flyout-close js-close-flyout-menu btn-close" aria-label="Menü schlieÃen"> 3236 </button> 3237 </div> 3238 </div> 3239 3240 3241 3242 <div class="row navigation-flyout-content"> 3243 <div class="col-8 col-xl-9"> 3244 <div class=""> 3245 3246 3247 3248 <div class="row navigation-flyout-categories is-level-0"> 3249 3250 <div class="col-4 "> 3251 <a class="nav-item nav-item-26772b7f2a57449d92a70880a5c85de2 nav-link nav-item-26772b7f2a57449d92a70880a5c85de2-link navigation-flyout-link is-level-0" 3252 href="https://www.tekoplan-planen.shop/Carportplane/Carportplane-mit-Tuer-und-Fenster-konfigurieren/" 3253 itemprop="url" 3254 title="Carportplane mit Tür und Fenster konfigurieren" 3255 >
3256 <span itemprop="name">Carportplane mit Tür und Fenster konfigurieren</span> 3257 3258 </a> 3259 3260 3261 3262 3263 <div class="navigation-flyout-categories is-level-1"> 3264 </div> 3265 3266 </div> 3267 3268 <div class="col-4 navigation-flyout-col"> 3269 <a class="nav-item nav-item-ccc333cd4e804b2f9bd283fb65f8e816 nav-link nav-item-ccc333cd4e804b2f9bd283fb65f8e816-link navigation-flyout-link is-level-0" 3270 href="https://www.tekoplan-planen.shop/Carportplane/Carportplane-rechteckig-konfigurieren/" 3271 itemprop="url" 3272 title="Carportplane rechteckig konfigurieren" 3273 > 3274 <span itemprop="name">Carportplane rechteckig konfigurieren</span> 3275 3276 </a> 3277 3278 3279 3280 3281 <div class="navigation-flyout-categories is-level-1"> 3282 </div> 3283 3284 </div> 3285 3286 <div class="col-4 navigation-flyout-col"> 3287 <a class="nav-item nav-item-b7441b0d60584acf8296217e737a5c99 nav-link nav-item-b7441b0d60584acf8296217e737a5c99-link navigation-flyout-link is-level-0" 3288 href="https://www.tekoplan-planen.shop/Carportplane/Carportplane-mit-schraeger-Seite-links-rechts-konfigurieren/" 3289 itemprop="url" 3290 title="Carportplane mit schräger Seite (links/rechts) konfigurieren" 3291 > 3292 <span itemprop="name">Carportplane mit schräger Seite (links/rechts) konfigurieren</span> 3293 3294 </a> 3295 3296 3297 3298 3299 <div class="navigation-flyout-categories is-level-1"> 3300 </div> 3301 3302 </div> 3303 3304 <div class="col-4 "> 3305 <a class="nav-item nav-item-2d58ea94a3b44683b2dd102e89be5ed0 nav-link nav-item-2d58ea94a3b44683b2dd102e89be5ed0-link navigation-flyout-link is-level-0" 3306 href="https://www.tekoplan-planen.shop/Carportplane/Carportplane-rund-konfigurieren/" 3307 itemprop="url" 3308 title="Carportplane rund konfigurieren" 3309 > 3310 <span itemprop="name">Carportplane rund konfigurieren</span> 3311 3312 </a> 3313 3314 3315 3316 3317 <div class="navigation-flyout-categories is-level-1"> 3318 </div> 3319 3320 </div> 3321 3322 <div class="col-4 navigation-flyout-col"> 3323 <a class="nav-item nav-item-06e24e3cb01549c4832c8506e18ad13b nav-link nav-item-06e24e3cb01549c4832c8506e18ad13b-link navigation-flyout-link is-level-0" 3324 href="https://www.tekoplan-planen.shop/Carportplane/Carportplane-dreieckig-konfigurieren/" 3325 itemprop="url" 3326 title="Carportplane dreieckig konfigurieren" 3327 > 3328 <span itemprop="name">Carportplane dreieckig konfigurieren</span> 3329 3330 </a> 3331 3332 3333 3334 3335 <div class="navigation-flyout-categories is-level-1"> 3336 </div> 3337 3338 </div> 3339 3340 <div class="col-4 navigation-flyout-col"> 3341 <a class="nav-item nav-item-d916137e628441a1b5e662fcfc4a77d8 nav-link nav-item-d916137e628441a1b5e662fcfc4a77d8-link navigation-flyout-link is-level-0" 3342 href="https://www.tekoplan-planen.shop/Carportplane/Carportplane-oval-konfigurieren/" 3343 itemprop="url" 3344 title="Carportplane oval konfigurieren" 3345 >
3346 <span itemprop="name">Carportplane oval konfigurieren</span> 3347 3348 </a> 3349 3350 3351 3352 3353 <div class="navigation-flyout-categories is-level-1"> 3354 </div> 3355 3356 </div> 3357 </div> 3358 3359 </div> 3360 </div> 3361 3362 <div class="col-4 col-xl-3"> 3363 <div class="navigation-flyout-teaser"> 3364 <a class="navigation-flyout-teaser-image-container" 3365 href="https://www.tekoplan-planen.shop/Carportplane/" 3366 title="Carportplane"> 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 <img src="https://www.tekoplan-planen.shop/media/67/f2/dd/1671196907/carportplane_nach_mass.jpg?ts=1750680348" srcset="https://www.tekoplan-planen.shop/thumbnail/67/f2/dd/1671196907/carportplane_nach_mass_800x800.jpg?ts=1671196923 800w, https://www.tekoplan-planen.shop/thumbnail/67/f2/dd/1671196907/carportplane_nach_mass_1920x1920.jpg?ts=1671196923 1920w, https://www.tekoplan-planen.shop/thumbnail/67/f2/dd/1671196907/carportplane_nach_mass_400x400.jpg?ts=1671196923 400w" sizes="310px" 3390 class="navigation-flyout-teaser-image img-fluid" alt="Carportplane für Carport" title="Carportplane für Carport" data-object-fit="cover" loading="lazy" /> 3391 </a> 3392 </div> 3393 </div> 3394 </div> 3395 </div> 3396 </div> 3397 3398 3399 3400 3401 <div class="twt-top-navigation-flyout twt-top-navigation-flyout--default nav-item-dropdown-ce9fcfe3c3844c87bceccd35916c9b35 dropdown-menu w-100 p-4 d-none"> 3402 <div class="twt-top-navigation-flyout-container container"> 3403 3404 <div class="row"> 3405 <div class="col"> 3406 <div class="navigation-flyout-category-link"> 3407 <a href="https://www.tekoplan-planen.shop/Poolplane/" 3408 itemprop="url" 3409 title="Poolplane"> 3410 Zur Kategorie Poolplane 3411 </a> 3412 </div> 3413 </div> 3414 3415 <div class="col-auto"> 3416 <button class="navigation-flyout-close js-close-flyout-menu btn-close" aria-label="Menü schlieÃen"> 3417 </button> 3418 </div> 3419 </div> 3420 3421 3422 3423 <div class="row navigation-flyout-content"> 3424 <div class="col-8 col-xl-9"> 3425 <div class=""> 3426 3427 3428 3429 <div class="row navigation-flyout-categories is-level-0"> 3430 3431 <div class="col-4 "> 3432 <a class="nav-item nav-item-606a7af590a44df9bce87ccddb15eed1 nav-link nav-item-606a7af590a44df9bce87ccddb15eed1-link navigation-flyout-link is-level-0" 3433 href="https://www.tekoplan-planen.shop/Poolplane/Rechteckige-Poolplane/" 3434 itemprop="url" 3435 title="Rechteckige Poolplane" 3436 >
3437 <span itemprop="name">Rechteckige Poolplane</span> 3438 3439 </a> 3440 3441 3442 3443 3444 <div class="navigation-flyout-categories is-level-1"> 3445 </div> 3446 3447 </div> 3448 3449 <div class="col-4 navigation-flyout-col"> 3450 <a class="nav-item nav-item-37b7ddf77d41484c80a86bd7a9675064 nav-link nav-item-37b7ddf77d41484c80a86bd7a9675064-link navigation-flyout-link is-level-0" 3451 href="https://www.tekoplan-planen.shop/Poolplane/Runde-Poolplane/" 3452 itemprop="url" 3453 title="Runde Poolplane" 3454 > 3455 <span itemprop="name">Runde Poolplane</span> 3456 3457 </a> 3458 3459 3460 3461 3462 <div class="navigation-flyout-categories is-level-1"> 3463 </div> 3464 3465 </div> 3466 </div> 3467 3468 </div> 3469 </div> 3470 3471 <div class="col-4 col-xl-3"> 3472 <div class="navigation-flyout-teaser"> 3473 <a class="navigation-flyout-teaser-image-container" 3474 href="https://www.tekoplan-planen.shop/Poolplane/" 3475 title="Poolplane"> 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 <img src="https://www.tekoplan-planen.shop/media/d6/47/13/1690458814/Poolplane.jpg?ts=1750683007" srcset="https://www.tekoplan-planen.shop/thumbnail/d6/47/13/1690458814/Poolplane_1920x1920.jpg?ts=1690458835 1920w, https://www.tekoplan-planen.shop/thumbnail/d6/47/13/1690458814/Poolplane_400x400.jpg?ts=1690458835 400w, https://www.tekoplan-planen.shop/thumbnail/d6/47/13/1690458814/Poolplane_800x800.jpg?ts=1690458835 800w" sizes="310px" 3499 class="navigation-flyout-teaser-image img-fluid" alt="Poolplane" title="Poolplane" data-object-fit="cover" loading="lazy" /> 3500 </a> 3501 </div> 3502 </div> 3503 </div> 3504 </div> 3505 </div> 3506 3507 3508 3509 3510 3511 3512 3513 <div class="twt-top-navigation-flyout twt-top-navigation-flyout--default nav-item-dropdown-d05b4c474f724b19a2224872ed386373 dropdown-menu w-100 p-4 d-none"> 3514 <div class="twt-top-navigation-flyout-container container"> 3515 3516 <div class="row"> 3517 <div class="col"> 3518 <div class="navigation-flyout-category-link"> 3519 <a href="https://www.tekoplan-planen.shop/Reptilienschutzzaun-GTH/" 3520 itemprop="url" 3521 title="Reptilienschutzzaun GTH"> 3522 Zur Kategorie Reptilienschutzzaun GTH 3523 </a> 3524 </div> 3525 </div> 3526 3527 <div class="col-auto"> 3528 <button class="navigation-flyout-close js-close-flyout-menu btn-close" aria-label="Menü schlieÃen"> 3529 </button> 3530 </div> 3531 </div> 3532 3533 3534 3535 <div class="row navigation-flyout-content"> 3536 <div class="col-8 col-xl-9"> 3537 <div class=""> 3538 3539 3540 3541 <div class="row navigation-flyout-categories is-level-0"> 3542 3543 <div class="col-4 "> 3544 <a class="nav-item nav-item-ec89c0540f7b47c5935e5a830a4b1498 nav-link nav-item-ec89c0540f7b47c5935e5a830a4b1498-link navigation-flyout-link is-level-0" 3545 href="https://www.tekoplan-planen.shop/Reptilienschutzzaun-GTH/Tekotex-PVC-freier-Reptilienschutzzaun-GTH-TX/" 3546 itemprop="url" 3547 title="Tekotex PVC-freier Reptilienschutzzaun GTH-TX" 3548 >
3549 <span itemprop="name">Tekotex PVC-freier Reptilienschutzzaun GTH-TX</span> 3550 3551 </a> 3552 3553 3554 3555 3556 <div class="navigation-flyout-categories is-level-1"> 3557 </div> 3558 3559 </div> 3560 3561 <div class="col-4 navigation-flyout-col"> 3562 <a class="nav-item nav-item-69bef1579f62461e9a415766aa810dcd nav-link nav-item-69bef1579f62461e9a415766aa810dcd-link navigation-flyout-link is-level-0" 3563 href="https://www.tekoplan-planen.shop/Reptilienschutzzaun-GTH/Premium-Reptilienschutzzaun-GTH-P-mit-OEsen-Kederverbindung-und-Clips/" 3564 itemprop="url" 3565 title="Premium Reptilienschutzzaun GTH-P mit Ãsen, Kederverbindung und Clips" 3566 > 3567 <span itemprop="name">Premium Reptilienschutzzaun GTH-P mit Ãsen, Kederverbindung und Clips</span> 3568 3569 </a> 3570 3571 3572 3573 3574 <div class="navigation-flyout-categories is-level-1"> 3575 </div> 3576 3577 </div> 3578 3579 <div class="col-4 navigation-flyout-col"> 3580 <a class="nav-item nav-item-9772ddefeef74f66bf7d3f286f6c6a3d nav-link nav-item-9772ddefeef74f66bf7d3f286f6c6a3d-link navigation-flyout-link is-level-0" 3581 href="https://www.tekoplan-planen.shop/Reptilienschutzzaun-GTH/Standard-Reptilienschutzzaun-GTH-S-mit-OEsen-und-Kederverbindung/" 3582 itemprop="url" 3583 title="Standard Reptilienschutzzaun GTH-S mit Ãsen und Kederverbindung" 3584 > 3585 <span itemprop="name">Standard Reptilienschutzzaun GTH-S mit Ãsen und Kederverbindung</span> 3586 3587 </a> 3588 3589 3590 3591 3592 <div class="navigation-flyout-categories is-level-1"> 3593 </div> 3594 3595 </div> 3596 3597 <div class="col-4 "> 3598 <a class="nav-item nav-item-e7eb8da69d724514b5f1a3e51caf76d8 nav-link nav-item-e7eb8da69d724514b5f1a3e51caf76d8-link navigation-flyout-link is-level-0" 3599 href="https://www.tekoplan-planen.shop/Reptilienschutzzaun-GTH/Hamsterschutzzaun-GTH-HS/" 3600 itemprop="url" 3601 title="Hamsterschutzzaun GTH-HS" 3602 > 3603 <span itemprop="name">Hamsterschutzzaun GTH-HS</span> 3604 3605 </a> 3606 3607 3608 3609 3610 <div class="navigation-flyout-categories is-level-1"> 3611 </div> 3612 3613 </div> 3614 3615 <div class="col-4 navigation-flyout-col"> 3616 <a class="nav-item nav-item-715c79614f7d48b0810d9e0c6533ef9f nav-link nav-item-715c79614f7d48b0810d9e0c6533ef9f-link navigation-flyout-link is-level-0" 3617 href="https://www.tekoplan-planen.shop/Reptilienschutzzaun-GTH/Reptilienschutzzaun-fuer-Standfuss-GTH-S-ST/" 3618 itemprop="url" 3619 title="Reptilienschutzzaun für Standfuà GTH-S-ST" 3620 > 3621 <span itemprop="name">Reptilienschutzzaun für Standfuà GTH-S-ST</span> 3622 3623 </a> 3624 3625 3626 3627 3628 <div class="navigation-flyout-categories is-level-1"> 3629 </div> 3630 3631 </div> 3632 3633 <div class="col-4 navigation-flyout-col"> 3634 <a class="nav-item nav-item-ca92792076e74904bc55bbff8aee5dfb nav-link nav-item-ca92792076e74904bc55bbff8aee5dfb-link navigation-flyout-link is-level-0" 3635 href="https://www.tekoplan-planen.shop/Reptilienschutzzaun-GTH/Reptilienschutzzaun-GTH-O-ohne-OEsen/" 3636 itemprop="url" 3637 title="Reptilienschutzzaun GTH-O ohne Ãsen" 3638 >
3639 <span itemprop="name">Reptilienschutzzaun GTH-O ohne Ãsen</span> 3640 3641 </a> 3642 3643 3644 3645 3646 <div class="navigation-flyout-categories is-level-1"> 3647 </div> 3648 3649 </div> 3650 3651 <div class="col-4 "> 3652 <a class="nav-item nav-item-437bf29f53fc4738b209fa9de15cc774 nav-link nav-item-437bf29f53fc4738b209fa9de15cc774-link navigation-flyout-link is-level-0" 3653 href="https://www.tekoplan-planen.shop/Reptilienschutzzaun-GTH/HDPE-Reptilien-Amphibienschutzzaun/" 3654 itemprop="url" 3655 title="HDPE Reptilien-/Amphibienschutzzaun" 3656 > 3657 <span itemprop="name">HDPE Reptilien-/Amphibienschutzzaun</span> 3658 3659 </a> 3660 3661 3662 3663 3664 <div class="navigation-flyout-categories is-level-1"> 3665 </div> 3666 3667 </div> 3668 </div> 3669 3670 </div> 3671 </div> 3672 3673 <div class="col-4 col-xl-3"> 3674 <div class="navigation-flyout-teaser"> 3675 <a class="navigation-flyout-teaser-image-container" 3676 href="https://www.tekoplan-planen.shop/Reptilienschutzzaun-GTH/" 3677 title="Reptilienschutzzaun GTH"> 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 <img src="https://www.tekoplan-planen.shop/media/e9/56/ca/1671631439/reptilienschutzzaun_nach_mass.jpg?ts=1750677211" class="navigation-flyout-teaser-image img-fluid" alt="Reptilienschutzzaun nach MaÃ" title="Reptilienschutzzaun nach MaÃ" data-object-fit="cover" loading="lazy" /> 3688 </a> 3689 </div> 3690 </div> 3691 </div> 3692 </div> 3693 </div> 3694 3695 3696 3697 3698 <div class="twt-top-navigation-flyout twt-top-navigation-flyout--default nav-item-dropdown-ba89017658744acabb36f8815637dfbd dropdown-menu w-100 p-4 d-none"> 3699 <div class="twt-top-navigation-flyout-container container"> 3700 3701 <div class="row"> 3702 <div class="col"> 3703 <div class="navigation-flyout-category-link"> 3704 <a href="https://www.tekoplan-planen.shop/Rollenware/" 3705 itemprop="url" 3706 title="Rollenware"> 3707 Zur Kategorie Rollenware 3708 </a> 3709 </div> 3710 </div> 3711 3712 <div class="col-auto"> 3713 <button class="navigation-flyout-close js-close-flyout-menu btn-close" aria-label="Menü schlieÃen"> 3714 </button> 3715 </div> 3716 </div> 3717 3718 3719 3720 <div class="row navigation-flyout-content"> 3721 <div class="col"> 3722 <div class=""> 3723 3724 3725 3726 <div class="row navigation-flyout-categories is-level-0"> 3727 3728 <div class="col-3 "> 3729 <a class="nav-item nav-item-b66b7d63a9514c4280e443704a19d09a nav-link nav-item-b66b7d63a9514c4280e443704a19d09a-link navigation-flyout-link is-level-0" 3730 href="https://www.tekoplan-planen.shop/Rollenware/Rollenware-PVC-exklusiv-matt/" 3731 itemprop="url" 3732 title="Rollenware PVC exklusiv matt" 3733 >
3734 <span itemprop="name">Rollenware PVC exklusiv matt</span> 3735 3736 </a> 3737 3738 3739 3740 3741 <div class="navigation-flyout-categories is-level-1"> 3742 </div> 3743 3744 </div> 3745 3746 <div class="col-3 navigation-flyout-col"> 3747 <a class="nav-item nav-item-52ef8ee226c647738cb63434205efbb3 nav-link nav-item-52ef8ee226c647738cb63434205efbb3-link navigation-flyout-link is-level-0" 3748 href="https://www.tekoplan-planen.shop/Rollenware/Rollenware-PVC-glaenzend/" 3749 itemprop="url" 3750 title="Rollenware PVC glänzend" 3751 > 3752 <span itemprop="name">Rollenware PVC glänzend</span> 3753 3754 </a> 3755 3756 3757 3758 3759 <div class="navigation-flyout-categories is-level-1"> 3760 </div> 3761 3762 </div> 3763 3764 <div class="col-3 navigation-flyout-col"> 3765 <a class="nav-item nav-item-edebb22f2df24adc81f46eb505133391 nav-link nav-item-edebb22f2df24adc81f46eb505133391-link navigation-flyout-link is-level-0" 3766 href="https://www.tekoplan-planen.shop/Rollenware/Rollenware-PVC-Netz/" 3767 itemprop="url" 3768 title="Rollenware PVC Netz" 3769 > 3770 <span itemprop="name">Rollenware PVC Netz</span> 3771 3772 </a> 3773 3774 3775 3776 3777 <div class="navigation-flyout-categories is-level-1"> 3778 </div> 3779 3780 </div> 3781 3782 <div class="col-3 navigation-flyout-col"> 3783 <a class="nav-item nav-item-f67e545b9e48495da3e7a53dc08c16b6 nav-link nav-item-f67e545b9e48495da3e7a53dc08c16b6-link navigation-flyout-link is-level-0" 3784 href="https://www.tekoplan-planen.shop/Rollenware/Rollenware-PVC-transparent/" 3785 itemprop="url" 3786 title="Rollenware PVC transparent" 3787 > 3788 <span itemprop="name">Rollenware PVC transparent</span> 3789 3790 </a> 3791 3792 3793 3794 3795 <div class="navigation-flyout-categories is-level-1"> 3796 </div> 3797 3798 </div> 3799 3800 <div class="col-3 "> 3801 <a class="nav-item nav-item-32d7243cd36b4b888e530695db15ccdc nav-link nav-item-32d7243cd36b4b888e530695db15ccdc-link navigation-flyout-link is-level-0" 3802 href="https://www.tekoplan-planen.shop/Rollenware/PVC-Rollen-B1-60-Meter/" 3803 itemprop="url" 3804 title="PVC-Rollen B1 / 60 Meter" 3805 > 3806 <span itemprop="name">PVC-Rollen B1 / 60 Meter</span> 3807 3808 </a> 3809 3810 3811 3812 3813 <div class="navigation-flyout-categories is-level-1"> 3814 </div> 3815 3816 </div> 3817 </div> 3818 3819 </div> 3820 </div> 3821 3822 </div> 3823 </div> 3824 </div> 3825 3826 3827 3828 3829 <div class="twt-top-navigation-flyout twt-top-navigation-flyout--default nav-item-dropdown-1433189901ef416396e572aec410bad2 dropdown-menu w-100 p-4 d-none"> 3830 <div class="twt-top-navigation-flyout-container container"> 3831 3832 <div class="row"> 3833 <div class="col"> 3834 <div class="navigation-flyout-category-link"> 3835 <a href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/" 3836 itemprop="url" 3837 title="Garten / Bau / Industrie"> 3838 Zur Kategorie Garten / Bau / Industrie 3839 </a> 3840 </div> 3841 </div> 3842 3843 <div class="col-auto"> 3844 <button class="navigation-flyout-close js-close-flyout-menu btn-close" aria-label="Menü schlieÃen"> 3845 </button> 3846 </div> 3847 </div> 3848 3849 3850 3851 <div class="row navigation-flyout-content"> 3852 <div class="col"> 3853 <div class=""> 3854 3855 3856 3857 <div class="row navigation-flyout-categories is-level-0"> 3858 3859 <div class="col-3 "> 3860 <a class="nav-item nav-item-7b55a8f8011a4c5e9cb3d4d6e46a25d4 nav-link nav-item-7b55a8f8011a4c5e9cb3d4d6e46a25d4-link navigation-flyout-link is-level-0" 3861 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Sichtschutz-Windschutz/" 3862 itemprop="url" 3863 title="Sichtschutz/Windschutz" 3864 >
3865 <span itemprop="name">Sichtschutz/Windschutz</span> 3866 3867 </a> 3868 3869 3870 3871 3872 <div class="navigation-flyout-categories is-level-1"> 3873 </div> 3874 3875 </div> 3876 3877 <div class="col-3 navigation-flyout-col"> 3878 <a class="nav-item nav-item-39244f1bb20e4083a42dc9edcb275c3e nav-link nav-item-39244f1bb20e4083a42dc9edcb275c3e-link navigation-flyout-link is-level-0" 3879 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Baumbewaesserungssack/" 3880 itemprop="url" 3881 title="Baumbewässerungssack" 3882 > 3883 <span itemprop="name">Baumbewässerungssack</span> 3884 3885 </a> 3886 3887 3888 3889 3890 <div class="navigation-flyout-categories is-level-1"> 3891 </div> 3892 3893 </div> 3894 3895 <div class="col-3 navigation-flyout-col"> 3896 <a class="nav-item nav-item-e7194ba9d414493bac26d20358601559 nav-link nav-item-e7194ba9d414493bac26d20358601559-link navigation-flyout-link is-level-0" 3897 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Saecke/" 3898 itemprop="url" 3899 title="Säcke" 3900 > 3901 <span itemprop="name">Säcke</span> 3902 3903 </a> 3904 3905 3906 3907 3908 <div class="navigation-flyout-categories is-level-1"> 3909 </div> 3910 3911 </div> 3912 3913 <div class="col-3 navigation-flyout-col"> 3914 <a class="nav-item nav-item-d35e21a0067743a9bb30f24692409610 nav-link nav-item-d35e21a0067743a9bb30f24692409610-link navigation-flyout-link is-level-0" 3915 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Anhaenger-Containernetze/" 3916 itemprop="url" 3917 title="Anhänger-/Containernetze" 3918 > 3919 <span itemprop="name">Anhänger-/Containernetze</span> 3920 3921 </a> 3922 3923 3924 3925 3926 <div class="navigation-flyout-categories is-level-1"> 3927 </div> 3928 3929 </div> 3930 3931 <div class="col-3 "> 3932 <a class="nav-item nav-item-e950afa47a8747ae87897e9b37872877 nav-link nav-item-e950afa47a8747ae87897e9b37872877-link navigation-flyout-link is-level-0" 3933 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Bauzaunplanen/" 3934 itemprop="url" 3935 title="Bauzaunplanen" 3936 > 3937 <span itemprop="name">Bauzaunplanen</span> 3938 3939 </a> 3940 3941 3942 3943 3944 <div class="navigation-flyout-categories is-level-1"> 3945 </div> 3946 3947 </div> 3948 3949 <div class="col-3 navigation-flyout-col"> 3950 <a class="nav-item nav-item-d757e665130b4b86aa959d34e4347b8d nav-link nav-item-d757e665130b4b86aa959d34e4347b8d-link navigation-flyout-link is-level-0" 3951 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Fangzaeune/" 3952 itemprop="url" 3953 title="Fangzäune" 3954 >
3955 <span itemprop="name">Fangzäune</span> 3956 3957 </a> 3958 3959 3960 3961 3962 <div class="navigation-flyout-categories is-level-1"> 3963 </div> 3964 3965 </div> 3966 3967 <div class="col-3 navigation-flyout-col"> 3968 <a class="nav-item nav-item-ff1f61ff60e2403bb043549449155e62 nav-link nav-item-ff1f61ff60e2403bb043549449155e62-link navigation-flyout-link is-level-0" 3969 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Laterneneisen/" 3970 itemprop="url" 3971 title="Laterneneisen" 3972 > 3973 <span itemprop="name">Laterneneisen</span> 3974 3975 </a> 3976 3977 3978 3979 3980 <div class="navigation-flyout-categories is-level-1"> 3981 </div> 3982 3983 </div> 3984 3985 <div class="col-3 navigation-flyout-col"> 3986 <a class="nav-item nav-item-c1d3686c2453406ba5e6f108fc9c5ad3 nav-link nav-item-c1d3686c2453406ba5e6f108fc9c5ad3-link navigation-flyout-link is-level-0" 3987 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Untersetzer/" 3988 itemprop="url" 3989 title="Untersetzer" 3990 > 3991 <span itemprop="name">Untersetzer</span> 3992 3993 </a> 3994 3995 3996 3997 3998 <div class="navigation-flyout-categories is-level-1"> 3999 </div> 4000 4001 </div> 4002 4003 <div class="col-3 "> 4004 <a class="nav-item nav-item-4ebdf3f7841b457496ddd3b74d8da913 nav-link nav-item-4ebdf3f7841b457496ddd3b74d8da913-link navigation-flyout-link is-level-0" 4005 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Tropfschlauch-Bewaesserungssystem/" 4006 itemprop="url" 4007 title="Tropfschlauch-Bewässerungssystem" 4008 > 4009 <span itemprop="name">Tropfschlauch-Bewässerungssystem</span> 4010 4011 </a> 4012 4013 4014 4015 4016 <div class="navigation-flyout-categories is-level-1"> 4017 </div> 4018 4019 </div> 4020 4021 <div class="col-3 navigation-flyout-col"> 4022 <a class="nav-item nav-item-f51e8029d38c4af0978264a3b852dd79 nav-link nav-item-f51e8029d38c4af0978264a3b852dd79-link navigation-flyout-link is-level-0" 4023 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Bodengewebe/" 4024 itemprop="url" 4025 title="Bodengewebe" 4026 > 4027 <span itemprop="name">Bodengewebe</span> 4028 4029 </a> 4030 4031 4032 4033 4034 <div class="navigation-flyout-categories is-level-1"> 4035 </div> 4036 4037 </div> 4038 4039 <div class="col-3 navigation-flyout-col"> 4040 <a class="nav-item nav-item-01995b9e1a627e2ba10c204d1a91c6a5 nav-link nav-item-01995b9e1a627e2ba10c204d1a91c6a5-link navigation-flyout-link is-level-0" 4041 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Lamellenvorhang/" 4042 itemprop="url" 4043 title="Lamellenvorhang" 4044 >
4045 <span itemprop="name">Lamellenvorhang</span> 4046 4047 </a> 4048 4049 4050 4051 4052 <div class="navigation-flyout-categories is-level-1"> 4053 </div> 4054 4055 </div> 4056 4057 <div class="col-3 navigation-flyout-col"> 4058 <a class="nav-item nav-item-019ed9cb7cc57827944a22439c8b7cdf nav-link nav-item-019ed9cb7cc57827944a22439c8b7cdf-link navigation-flyout-link is-level-0" 4059 href="https://www.tekoplan-planen.shop/Garten-Bau-Industrie/Schweissvorhang-Schweisserschutzvorhang/" 4060 itemprop="url" 4061 title="SchweiÃvorhang /SchweiÃerschutzvorhang" 4062 > 4063 <span itemprop="name">SchweiÃvorhang /SchweiÃerschutzvorhang</span> 4064 4065 </a> 4066 4067 4068 4069 4070 <div class="navigation-flyout-categories is-level-1"> 4071 </div> 4072 4073 </div> 4074 </div> 4075 4076 </div> 4077 </div> 4078 4079 </div> 4080 </div> 4081 </div> 4082 4083 4084 4085 4086 4087 </div> 4088 4089 <div class="search-container"> 4090 4091 <div class="collapse" 4092 id="searchCollapse"> 4093 <div class="header-search my-2 m-sm-auto"> 4094 <form action="/search" 4095 method="get" 4096 data-search-widget="true" 4097 data-search-widget-options="{"searchWidgetMinChars":2}" 4098 data-url="/suggest?search=" 4099 class="header-search-form js-search-form"> 4100 <div class="input-group"> 4101 <input 4102 type="search" 4103 id="header-main-search-input" 4104 name="search" 4105 class="form-control header-search-input" 4106 autocomplete="off" 4107 autocapitalize="off" 4108 placeholder="Suchbegriff eingeben ..." 4109 aria-label="Suchbegriff eingeben ..." 4110 role="combobox" 4111 aria-autocomplete="list" 4112 aria-expanded="false" 4113 value=""> 4114 4115 <button type="submit" 4116 class="btn header-search-btn" 4117 aria-label="Suchen" 4118 > 4119 <span class="header-search-icon"> 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 <span class="icon icon-themeware icon-search icon-solid" aria-hidden="true"><?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.34,1A8.52,8.52,0,0,0,7.77,15L1.43,21.29a1,1,0,0,0,0,1.42,1,1,0,0,0,.71.29,1,1,0,0,0,.71-.29l6.38-6.38A8.52,8.52,0,1,0,14.34,1Zm0,15a6.52,6.52,0,1,1,6.52-6.52A6.53,6.53,0,0,1,14.34,16Z"/></svg></span> 4141 4142 4143 4144 4145 </span> 4146 </button> 4147 4148 <button class="btn header-close-btn js-search-close-btn" 4149 type="button" 4150 aria-label="Die Dropdown-Suche schlieÃen"> 4151 <span class="header-close-icon"> 4152 4153 4154 4155 4156 4157 4158 <span class="icon icon-x" aria-hidden="true"> 4159 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-x" fill="#758CA3" fill-rule="evenodd" /></svg> 4160 </span> 4161 4162 </span> 4163 </button> 4164 </div> 4165 4166 4167 </form> 4168 </div> 4169 </div> 4170 </div> 4171 4172 4173 <div class="d-none js-navigation-offcanvas-initial-content"> 4174 4175 4176 4177 <div class="offcanvas-header"> 4178 <button class="btn btn-secondary offcanvas-close js-offcanvas-close"> 4179 4180 4181 4182 4183 4184
4185 <span class="icon icon-x icon-sm" aria-hidden="true"> 4186 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-x" fill="#758CA3" fill-rule="evenodd" /></svg> 4187 </span> 4188 4189 4190 Menü schlieÃen 4191 </button> 4192 </div> 4193 4194 <div class="offcanvas-body"> 4195 <nav class="nav navigation-offcanvas-actions"> 4196 4197 4198 4199 </nav> 4200 4201 4202 4203 <div class="navigation-offcanvas-container"></div> 4204 </div> 4205 </div> 4206 4207 4208 4209 4210 4211 4212 4213 4214 <main class="content-main" id="content-main"> 4215 <div class="flashbags container"> 4216 </div> 4217 4218 4219 <div class="container"> 4220 <div class="container-main"> 4221 4222 4223 4224 <div class="account-register"> 4225 <h1>Anmelden oder Konto erstellen</h1> 4226 4227 <div class="row"> 4228 <div class="col-lg-4"> 4229 <div class="card login-card mb-3"> 4230 <div class="card-body"> 4231 <h2 class="card-title"> 4232 Ich bin bereits Kunde 4233 </h2> 4234 4235 <form class="login-form" 4236 action="/account/login" 4237 method="post" 4238 data-form-handler="true"> 4239 <input type="hidden" 4240 name="redirectTo" 4241 value="frontend.account.profile.page"> 4242 4243 <input type="hidden" 4244 name="redirectParameters" 4245 value="{"_noStore":true}"> 4246 4247 4248 4249 4250 <div class="row g-2"> 4251 4252 4253 4254 4255 4256 4257 4258 <div class="form-group col-sm-6 col-lg-12"> 4259 <label class="form-label" for="loginMail"> 4260 Ihre E-Mail-Adresse 4261 4262 <span class="form-required-label" aria-hidden="true">*</span> 4263 </label> 4264 4265 4266 4267 4268 <input type="email" 4269 class="form-control" 4270 id="loginMail" 4271 name="username" 4272 aria-describedby="loginMail-feedback" 4273 autocomplete="username webauthn" data-validation="required,email" aria-required="true" > 4274 4275 4276 <div id="loginMail-feedback" class="form-field-feedback"> 4277 </div> 4278 </div> 4279 4280 4281 4282 4283 4284 4285 4286 4287 <div class="form-group col-sm-6 col-lg-12"> 4288 <label class="form-label" for="loginPassword"> 4289 Ihr Passwort 4290
4291 <span class="form-required-label" aria-hidden="true">*</span> 4292 </label> 4293 4294 4295 4296 4297 <input type="password" 4298 class="form-control" 4299 id="loginPassword" 4300 name="password" 4301 aria-describedby="loginPassword-feedback" 4302 autocomplete="current-password" data-validation="required" aria-required="true" > 4303 4304 4305 <div id="loginPassword-feedback" class="form-field-feedback"> 4306 </div> 4307 </div> 4308 </div> 4309 4310 <div class="login-password-recover mb-3"> 4311 <a href="https://www.tekoplan-planen.shop/account/recover"> 4312 Ich habe mein Passwort vergessen. 4313 </a> 4314 </div> 4315 4316 <div class="login-submit"> 4317 <button type="submit" 4318 class="btn btn-primary"> 4319 Anmelden 4320 </button> 4321 </div> 4322 </form> 4323 </div> 4324 </div> 4325 4326 <div class="login-advantages"> 4327 <div class="h5 login-advantages-header"> 4328 Vorteile einer Registrierung: 4329 </div> 4330 4331 <ul> 4332 <li>Schnelles Einkaufen</li> 4333 4334 <li>Speichern Sie Ihre Daten und Einstellungen.</li> 4335 4336 <li>Bestellübersicht und Versandinformationen</li> 4337 4338 <li>Verwalten Sie Ihr Newsletter-Abonnement</li> 4339 </ul> 4340 </div> 4341 </div> 4342 4343 <div class="col-lg-8"> 4344 4345 <div class="card register-card"> 4346 <div class="card-body"> 4347 <h2 class="card-title"> 4348 Schnell bestellen â kein Kundenkonto erforderlich. 4349 </h2> 4350 4351 <form action="/account/register" 4352 class="register-form" 4353 method="post" 4354 data-form-handler="true"> 4355 <input type="hidden" 4356 name="redirectTo" 4357 value="frontend.account.profile.page"> 4358 4359 <input type="hidden" 4360 name="redirectParameters" 4361 value="{"_noStore":true}"> 4362 4363 <input type="hidden" 4364 name="createCustomerAccount" 4365 value="1"> 4366 4367 <input type="hidden" 4368 name="errorRoute" 4369 value="frontend.account.login.page"> 4370 4371 <input type="hidden" 4372 name="errorParameters" 4373 value=""> 4374 4375 <fieldset class="register-personal mb-3"> 4376 <legend class="register-personal-title visually-hidden"> 4377 Persönliche Informationen 4378 </legend> 4379 4380 4381 <div class="row g-2"> 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 <div class="form-group col-md-6 contact-type"> 4395 <label class="form-label" for="-accountType"> 4396 Kontotyp 4397
4398 <span class="form-required-label" aria-hidden="true">*</span> 4399 </label> 4400 4401 4402 4403 4404 <select class="form-select contact-select" 4405 id="-accountType" 4406 name="accountType" 4407 aria-describedby="-accountType-feedback" 4408 autocomplete="off" data-validation="required" aria-required="true" data-form-field-toggle="true" data-form-field-toggle-target=".js-field-toggle-contact-type-company" data-form-field-toggle-value="business" data-form-field-toggle-scope="all" data-form-field-toggle-parent-selector > 4409 <option disabled="disabled" 4410 selected="selected" 4411 value=""> 4412 Auswählen ... 4413 </option> 4414 4415 <option value="private" 4416 > 4417 Privat 4418 </option> 4419 4420 <option value="business" 4421 > 4422 Gewerblich 4423 </option> 4424 4425 </select> 4426 4427 4428 <div id="-accountType-feedback" class="form-field-feedback"> 4429 </div> 4430 </div> 4431 4432 4433 </div> 4434 4435 <div class="row g-2"> 4436 4437 4438 4439 4440 4441 <div class="form-group col-md-3 col-sm-6"> 4442 <label class="form-label" for="personalSalutation"> 4443 Anrede 4444 4445 </label> 4446 4447 4448 4449 4450 <select class="form-select" 4451 id="personalSalutation" 4452 name="salutationId" 4453 aria-describedby="personalSalutation-feedback" 4454 autocomplete="section-personal honorific-prefix" > 4455 <option value="163207496779436f8ba5057e52df5b70"> 4456 Keine Angabe 4457 </option> 4458 <option value="a9897d36beb845aab39fd45a453cfb3b"> 4459 Frau 4460 </option> 4461 <option value="335866c3dab64ad9949d275c50b65369"> 4462 Herr 4463 </option> 4464 4465 </select> 4466 4467 4468 <div id="personalSalutation-feedback" class="form-field-feedback"> 4469 </div> 4470 </div> 4471 4472 4473 </div> 4474 4475 <div class="row g-2"> 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 <div class="form-group col-sm-6"> 4486 <label class="form-label" for="billingAddress-personalFirstName"> 4487 Vorname 4488
4489 <span class="form-required-label" aria-hidden="true">*</span> 4490 </label> 4491 4492 4493 4494 4495 <input type="text" 4496 class="form-control" 4497 id="billingAddress-personalFirstName" 4498 name="billingAddress[firstName]" 4499 aria-describedby="billingAddress-personalFirstName-feedback" 4500 autocomplete="section-personal given-name" data-validation="required" aria-required="true" > 4501 4502 4503 <div id="billingAddress-personalFirstName-feedback" class="form-field-feedback"> 4504 </div> 4505 </div> 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 <div class="form-group col-sm-6"> 4517 <label class="form-label" for="billingAddress-personalLastName"> 4518 Nachname 4519 4520 <span class="form-required-label" aria-hidden="true">*</span> 4521 </label> 4522 4523 4524 4525 4526 <input type="text" 4527 class="form-control" 4528 id="billingAddress-personalLastName" 4529 name="billingAddress[lastName]" 4530 aria-describedby="billingAddress-personalLastName-feedback" 4531 autocomplete="section-personal family-name" data-validation="required" aria-required="true" > 4532 4533 4534 <div id="billingAddress-personalLastName-feedback" class="form-field-feedback"> 4535 </div> 4536 </div> 4537 </div> 4538 4539 4540 4541 4542 4543 <div class="js-field-toggle-contact-type-company d-none"> 4544 <div class="row g-2"> 4545 4546 4547 4548 4549 4550 4551 4552 4553 <div class="form-group col-12"> 4554 <label class="form-label" for="billingAddresscompany"> 4555 Firma 4556 4557 <span class="form-required-label" aria-hidden="true">*</span> 4558 </label> 4559 4560 4561 4562 4563 <input type="text" 4564 class="form-control" 4565 id="billingAddresscompany" 4566 name="billingAddress[company]" 4567 aria-describedby="billingAddresscompany-feedback" 4568 autocomplete="section-personal organization" data-validation="required" aria-required="true" > 4569 4570 4571 <div id="billingAddresscompany-feedback" class="form-field-feedback"> 4572 </div> 4573 </div> 4574 </div> 4575 <div class="row g-2"> 4576 4577 4578 4579 4580 4581 4582 4583 4584 <div class="form-group col-md-6"> 4585 <label class="form-label" for="billingAddressdepartment"> 4586 Abteilung 4587 4588 </label> 4589 4590 4591 4592 4593 <input type="text" 4594 class="form-control" 4595 id="billingAddressdepartment" 4596 name="billingAddress[department]" 4597 aria-describedby="billingAddressdepartment-feedback" 4598 autocomplete="off" > 4599 4600 4601 <div id="billingAddressdepartment-feedback" class="form-field-feedback"> 4602 </div> 4603 </div> 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 <div class="form-group col-md-6"> 4615 <label class="form-label" for="vatIds"> 4616 Umsatzsteuer-ID 4617 4618 </label> 4619 4620 4621 4622 4623 <input type="text" 4624 class="form-control" 4625 id="vatIds" 4626 name="vatIds[]" 4627 aria-describedby="vatIds-feedback" 4628 autocomplete="off" > 4629 4630 4631 <div id="vatIds-feedback" class="form-field-feedback"> 4632 </div> 4633 </div> 4634 </div> 4635 </div> 4636 4637 4638 4639 4640 4641 <div class="row g-2"> 4642 4643 4644 4645 4646 4647 4648 4649 <div class="form-group col-sm-6"> 4650 <label class="form-label" for="personalMail"> 4651 E-Mail-Adresse 4652
4653 <span class="form-required-label" aria-hidden="true">*</span> 4654 </label> 4655 4656 4657 4658 4659 <input type="email" 4660 class="form-control" 4661 id="personalMail" 4662 name="email" 4663 aria-describedby="personalMail-feedback" 4664 autocomplete="section-personal email" data-validation="required,email" aria-required="true" > 4665 4666 4667 <div id="personalMail-feedback" class="form-field-feedback"> 4668 </div> 4669 </div> 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 <div class="form-group col-sm-6 js-form-field-toggle-guest-mode"> 4683 <label class="form-label" for="personalPassword"> 4684 Passwort 4685 4686 <span class="form-required-label" aria-hidden="true">*</span> 4687 </label> 4688 4689 4690 4691 4692 <input type="password" 4693 class="form-control" 4694 id="personalPassword" 4695 name="password" 4696 aria-describedby="personalPassword-description personalPassword-feedback" 4697 autocomplete="new-password" minlength="8" data-validation="required,minLength" aria-required="true" > 4698 4699 <small id="personalPassword-description" class="form-text">Das Passwort muss mindestens 8 Zeichen lang sein.</small> 4700 4701 <div id="personalPassword-feedback" class="form-field-feedback"> 4702 </div> 4703 </div> 4704 4705 4706 </div> 4707 </fieldset> 4708 4709 <div class="register-address mb-5"> 4710 <fieldset class="register-billing"> 4711 <legend class="card-title"> 4712 Ihre Adresse 4713 </legend> 4714 4715 4716 4717 4718 4719 4720 <div class="row g-2"> 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 <div class="form-group col-md-6"> 4732 <label class="form-label" for="billingAddress-AddressStreet"> 4733 StraÃe und Hausnummer 4734 4735 <span class="form-required-label" aria-hidden="true">*</span> 4736 </label> 4737 4738 4739 4740 4741 <input type="text" 4742 class="form-control" 4743 id="billingAddress-AddressStreet" 4744 name="billingAddress[street]" 4745 aria-describedby="billingAddress-AddressStreet
4745-feedback" 4746 autocomplete="billing address-line1" data-validation="required" aria-required="true" > 4747 4748 4749 <div id="billingAddress-AddressStreet-feedback" class="form-field-feedback"> 4750 </div> 4751 </div> 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 <div class="form-group col-md-3 col-4"> 4769 <label class="form-label" for="billingAddressAddressZipcode"> 4770 PLZ 4771 4772 </label> 4773 4774 4775 4776 4777 <input type="text" 4778 class="form-control" 4779 id="billingAddressAddressZipcode" 4780 name="billingAddress[zipcode]" 4781 aria-describedby="billingAddressAddressZipcode-feedback" 4782 autocomplete="billing postal-code" data-input-name="zipcodeInput" > 4783 4784 4785 <div id="billingAddressAddressZipcode-feedback" class="form-field-feedback"> 4786 </div> 4787 </div> 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 <div class="form-group col-md-3 col-8"> 4800 <label class="form-label" for="billingAddressAddressCity"> 4801 Ort 4802 4803 <span class="form-required-label" aria-hidden="true">*</span> 4804 </label> 4805 4806 4807 4808 4809 <input type="text" 4810 class="form-control" 4811 id="billingAddressAddressCity" 4812 name="billingAddress[city]" 4813 aria-describedby="billingAddressAddressCity-feedback" 4814 autocomplete="billing address-level2" data-validation="required" aria-required="true" > 4815 4816 4817 <div id="billingAddressAddressCity-feedback" class="form-field-feedback"> 4818 </div> 4819 </div> 4820 4821 4822 4823 </div> 4824 4825 4826 <div 4827 class="row g-2 country-and-state-form-elements" 4828 data-country-state-select="true" 4829 data-country-state-select-options="{"scopeElementSelector":".register-billing","prefix":"billingAddress"}" 4830 > 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 <div class="form-group col-md-6"> 4842 <label class="form-label" for="billingAddressAddressCountry"> 4843 Land 4844
4845 <span class="form-required-label" aria-hidden="true">*</span> 4846 </label> 4847 4848 4849 4850 4851 <select class="form-select country-select" 4852 id="billingAddressAddressCountry" 4853 name="billingAddress[countryId]" 4854 aria-describedby="billingAddressAddressCountry-feedback" 4855 autocomplete="billing country-name" data-validation="required" aria-required="true" data-initial-country-id="3b847cc222df44f3af8f6bbb80b97d03" > 4856 <option value="3b847cc222df44f3af8f6bbb80b97d03" 4857 selected="selected" data-zipcode-required="1" 4858 data-vat-id-required="" 4859 data-state-required="" 4860 > 4861 4862 Deutschland 4863 4864 </option> 4865 <option value="5bf955947f6f48b5be9b5e2a64c6c223" 4866 data-zipcode-required="" 4867 data-vat-id-required="" 4868 data-state-required="" 4869 > 4870 4871 Ãsterreich 4872 4873 </option> 4874 <option value="74d47c48987548c2b3653dc76381d124" 4875 data-zipcode-required="" 4876 data-vat-id-required="" 4877 data-state-required="" 4878 > 4879 4880 Schweiz 4881 4882 </option> 4883 <option value="356fb7e3827c4e45af8bdc9216c154f8" 4884 data-zipcode-required="1" 4885 data-vat-id-required="" 4886 data-state-required="" 4887 > 4888 4889 Niederlande 4890 4891 </option> 4892 <option value="3dc01b81569e4099bf9125807d9413e5" 4893 data-zipcode-required="1" 4894 data-vat-id-required="" 4895 data-state-required="" 4896 > 4897 4898 Belgien 4899 4900 </option> 4901 <option value="f596edb059da42b78e8eae797b71fb09" 4902 data-zipcode-required="1" 4903 data-vat-id-required="" 4904 data-state-required="" 4905 > 4906 4907 Frankreich 4908 4909 </option> 4910 <option value="cb7dcea897ce4cd9859e3bc0949860d7" 4911 data-zipcode-required="1" 4912 data-vat-id-required="" 4913 data-state-required="" 4914 > 4915 4916 Italien 4917 4918 </option> 4919 <option value="2c6dc7978f1b449d8aa44b86a7f6da15" 4920 data-zipcode-required="1" 4921 data-vat-id-required="" 4922 data-state-required="" 4923 > 4924 4925 Liechtenstein 4926 4927 </option> 4928 <option value="bf3c5b0cbf694935b9405acd1d78f307" 4929 data-zipcode-required="1" 4930 data-vat-id-required="" 4931 data-state-required="" 4932 > 4933 4934 Luxemburg 4935 4936 </option> 4937 <option value="b10d6883e46b498193983132b83a887c" 4938 data-zipcode-required="1" 4939 data-vat-id-required="" 4940 data-state-required="" 4941 > 4942 4943 Polen 4944 4945 </option> 4946 <option value="9d8764d2300c45c2a4917556a147cc50" 4947 data-zipcode-required="1" 4948 data-vat-id-required="" 4949 data-state-required="" 4950 > 4951 4952 Tschechische Republik 4953 4954 </option> 4955 4956 </select> 4957 4958 4959 <div id="billingAddressAddressCountry-feedback" class="form-field-feedback"> 4960 </div> 4961 </div> 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 <div class="form-group col-md-6 d-none"> 4973 <label class="form-label" for="billingAddressAddressCountryState"> 4974 Bundesland 4975 4976 </label> 4977 4978 4979 4980 4981 <select class="form-select country-state-select" 4982 id="billingAddressAddressCountryState" 4983 name="billingAddress[countryStateId]" 4984 aria-describedby="billingAddressAddressCountryState-feedback" 4985 autocomplete="billing address-level1" data-initial-country-state-id > 4986 <option value="" 4987 selected="selected" 4988 data-placeholder-option="true"> 4989 Bundesland auswählen ... 4990 </option> 4991 4992 </select> 4993 4994 4995 <div id="billingAddressAddressCountryState-feedback" class="form-field-feedback"> 4996 </div> 4997 </div> 4998 4999 </div> 5000 5001 <div class="row g-2"> 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 <div class="form-group col-md-6"> 5013 <label class="form-label" for="billingAddressAddressPhoneNumber"> 5014 Telefonnummer 5015 5016 </label> 5017 5018 5019 5020 5021 <input type="text" 5022 class="form-control" 5023 id="billingAddressAddressPhoneNumber"
5024 name="billingAddress[phoneNumber]" 5025 aria-describedby="billingAddressAddressPhoneNumber-feedback" 5026 autocomplete="billing tel" > 5027 5028 5029 <div id="billingAddressAddressPhoneNumber-feedback" class="form-field-feedback"> 5030 </div> 5031 </div> 5032 </div> 5033 </fieldset> 5034 5035 <div> 5036 <div class="form-check register-different-shipping mb-3"> 5037 <input type="checkbox" 5038 class="form-check-input js-different-shipping-checkbox" 5039 name="differentShippingAddress" 5040 value="1" 5041 id="differentShippingAddress" 5042 data-form-field-toggle="true" 5043 data-form-field-toggle-target=".js-form-field-toggle-shipping-address" 5044 data-form-field-toggle-value="true" 5045 data-form-field-toggle-trigger-nested="true"> 5046 5047 <label class="custom-control-label no-validation" 5048 for="differentShippingAddress"> 5049 Lieferadresse weicht von Rechnungsadresse ab. 5050 </label> 5051 </div> 5052 5053 <fieldset class="register-shipping js-form-field-toggle-shipping-address d-none mb-4"> 5054 <legend class="card-title"> 5055 Abweichende Lieferadresse 5056 </legend> 5057 5058 5059 <div class="row g-2"> 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 <div class="form-group col-md-6 contact-type"> 5073 <label class="form-label" for="shippingAddress-accountType"> 5074 Kontotyp 5075 5076 <span class="form-required-label" aria-hidden="true">*</span> 5077 </label> 5078 5079 5080 5081 5082 <select class="form-select contact-select" 5083 id="shippingAddress-accountType" 5084 name="shippingAddress[accountType]" 5085 aria-describedby="shippingAddress-accountType-feedback" 5086 autocomplete="off" data-validation="required" aria-required="true" data-form-field-toggle="true" data-form-field-toggle-target=".js-field-toggle-contact-type-company-shippingAddress" data-form-field-toggle-value="business" data-form-field-toggle-scope="all" data-form-field-toggle-parent-selector > 5087 <option disabled="disabled" 5088 selected="selected" 5089 value=""> 5090 Auswählen ... 5091 </option> 5092 5093 <option value="private" 5094 > 5095 Privat 5096 </option> 5097 5098 <option value="business" 5099 > 5100 Gewerblich 5101 </option> 5102 5103 </select> 5104 5105 5106 <div id="shippingAddress-accountType-feedback" class="form-field-feedback"> 5107 </div> 5108 </div> 5109 5110 5111 </div> 5112 5113 <div class="row g-2"> 5114 5115 5116 5117 5118 5119 <div class="form-group col-md-3 col-sm-6"> 5120 <label class="form-label" for="shippingAddresspers
5120onalSalutation"> 5121 Anrede 5122 5123 </label> 5124 5125 5126 5127 5128 <select class="form-select" 5129 id="shippingAddresspersonalSalutation" 5130 name="shippingAddress[salutationId]" 5131 aria-describedby="shippingAddresspersonalSalutation-feedback" 5132 autocomplete="section-personal honorific-prefix" > 5133 <option value="163207496779436f8ba5057e52df5b70"> 5134 Keine Angabe 5135 </option> 5136 <option value="a9897d36beb845aab39fd45a453cfb3b"> 5137 Frau 5138 </option> 5139 <option value="335866c3dab64ad9949d275c50b65369"> 5140 Herr 5141 </option> 5142 5143 </select> 5144 5145 5146 <div id="shippingAddresspersonalSalutation-feedback" class="form-field-feedback"> 5147 </div> 5148 </div> 5149 5150 5151 </div> 5152 5153 <div class="row g-2"> 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 <div class="form-group col-sm-6"> 5164 <label class="form-label" for="shippingAddress-personalFirstName"> 5165 Vorname 5166 5167 <span class="form-required-label" aria-hidden="true">*</span> 5168 </label> 5169 5170 5171 5172 5173 <input type="text" 5174 class="form-control" 5175 id="shippingAddress-personalFirstName" 5176 name="shippingAddress[firstName]" 5177 aria-describedby="shippingAddress-personalFirstName-feedback" 5178 autocomplete="section-personal given-name" data-validation="required" aria-required="true" > 5179 5180 5181 <div id="shippingAddress-personalFirstName-feedback" class="form-field-feedback"> 5182 </div> 5183 </div> 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 <div class="form-group col-sm-6"> 5195 <label class="form-label" for="shippingAddress-personalLastName"> 5196 Nachname 5197 5198 <span class="form-required-label" aria-hidden="true">*</span> 5199 </label> 5200 5201 5202 5203 5204 <input type="text" 5205 class="form-control" 5206 id="shippingAddress-personalLastName" 5207 name="shippingAddress[lastName]" 5208 aria-describedby="shippingAddress-personalLastName-feedback" 5209 autocomplete="section-personal family-name" data-validation="required" aria-required="true" > 5210 5211 5212 <div id="shippingAddress-personalLastName-feedback" class="form-field-feedback"> 5213 </div> 5214 </div> 5215 </div> 5216 5217 5218 5219 5220 5221 <div class="js-field-toggle-contact-type-company-shippingAddress d-none"> 5222 <div class="row g-2"> 5223 5224 5225 5226 5227 5228 5229 5230 5231 <div class="form-group col-12"> 5232 <label class="form-label" for="shippingAddresscompany"> 5233 Firma 5234
5235 <span class="form-required-label" aria-hidden="true">*</span> 5236 </label> 5237 5238 5239 5240 5241 <input type="text" 5242 class="form-control" 5243 id="shippingAddresscompany" 5244 name="shippingAddress[company]" 5245 aria-describedby="shippingAddresscompany-feedback" 5246 autocomplete="section-personal organization" data-validation="required" aria-required="true" > 5247 5248 5249 <div id="shippingAddresscompany-feedback" class="form-field-feedback"> 5250 </div> 5251 </div> 5252 </div> 5253 <div class="row g-2"> 5254 5255 5256 5257 5258 5259 5260 5261 5262 <div class="form-group col-md-6"> 5263 <label class="form-label" for="shippingAddressdepartment"> 5264 Abteilung 5265 5266 </label> 5267 5268 5269 5270 5271 <input type="text" 5272 class="form-control" 5273 id="shippingAddressdepartment" 5274 name="shippingAddress[department]" 5275 aria-describedby="shippingAddressdepartment-feedback" 5276 autocomplete="off" > 5277 5278 5279 <div id="shippingAddressdepartment-feedback" class="form-field-feedback"> 5280 </div> 5281 </div> 5282 5283 </div> 5284 </div> 5285 5286 5287 5288 5289 5290 5291 <div class="row g-2"> 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 <div class="form-group col-md-6"> 5303 <label class="form-label" for="shippingAddress-AddressStreet"> 5304 StraÃe und Hausnummer 5305 5306 <span class="form-required-label" aria-hidden="true">*</span> 5307 </label> 5308 5309 5310 5311 5312 <input type="text" 5313 class="form-control" 5314 id="shippingAddress-AddressStreet" 5315 name="shippingAddress[street]" 5316 aria-describedby="shippingAddress-AddressStreet-feedback" 5317 autocomplete="shipping address-line1" data-validation="required" aria-required="true" > 5318 5319 5320 <div id="shippingAddress-AddressStreet-feedback" class="form-field-feedback"> 5321 </div> 5322 </div> 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 <div class="form-group col-md-3 col-4"> 5340 <label class="form-label" for="shippingAddressAddressZipcode"> 5341 PLZ 5342 5343 </label> 5344 5345 5346 5347 5348 <input type="text" 5349 class="form-control" 5350 id="shippingAddressAddressZipcode" 5351 name="shippingAddress[zipcode]" 5352 aria-describedby="shippingAddressAddressZipcode-feedback" 5353 autocomplete="shipping postal-code" data-input-name="zipcodeInput" > 5354 5355 5356 <div id="shippingAddressAddressZipcode-feedback" class="form-field-feedback"> 5357 </div> 5358 </div> 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 <div class="form-group col-md-3 col-8"> 5371 <label class="form-label" for="shippingAddressAddressCity"> 5372 Ort 5373
5374 <span class="form-required-label" aria-hidden="true">*</span> 5375 </label> 5376 5377 5378 5379 5380 <input type="text" 5381 class="form-control" 5382 id="shippingAddressAddressCity" 5383 name="shippingAddress[city]" 5384 aria-describedby="shippingAddressAddressCity-feedback" 5385 autocomplete="shipping address-level2" data-validation="required" aria-required="true" > 5386 5387 5388 <div id="shippingAddressAddressCity-feedback" class="form-field-feedback"> 5389 </div> 5390 </div> 5391 5392 5393 5394 </div> 5395 5396 5397 <div 5398 class="row g-2 country-and-state-form-elements" 5399 data-country-state-select="true" 5400 data-country-state-select-options="{"scopeElementSelector":".register-shipping","prefix":"shippingAddress"}" 5401 > 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 <div class="form-group col-md-6"> 5413 <label class="form-label" for="shippingAddressAddressCountry"> 5414 Land 5415 5416 <span class="form-required-label" aria-hidden="true">*</span> 5417 </label> 5418 5419 5420 5421 5422 <select class="form-select country-select" 5423 id="shippingAddressAddressCountry" 5424 name="shippingAddress[countryId]" 5425 aria-describedby="shippingAddressAddressCountry-feedback" 5426 autocomplete="shipping country-name" data-validation="required" aria-required="true" data-initial-country-id="3b847cc222df44f3af8f6bbb80b97d03" > 5427 <option value="3b847cc222df44f3af8f6bbb80b97d03" 5428 selected="selected" data-zipcode-required="1" 5429 data-vat-id-required="" 5430 data-state-required="" 5431 > 5432 5433 Deutschland 5434 5435 </option> 5436 <option value="5bf955947f6f48b5be9b5e2a64c6c223" 5437 data-zipcode-required="" 5438 data-vat-id-required="" 5439 data-state-required="" 5440 > 5441 5442 Ãsterreich 5443 5444 </option> 5445 <option value="74d47c48987548c2b3653dc76381d124" 5446 data-zipcode-required="" 5447 data-vat-id-required="" 5448 data-state-required="" 5449 > 5450 5451 Schweiz 5452 5453 </option> 5454 <option value="356fb7e3827c4e45af8bdc9216c154f8" 5455 data-zipcode-required="1" 5456 data-vat-id-required="" 5457 data-state-required="" 5458 > 5459 5460 Niederlande 5461 5462 </option> 5463 <option value="3dc01b81569e4099bf9125807d9413e5" 5464 data-zipcode-required="1" 5465 data-vat-id-required="" 5466 data-state-required="" 5467 > 5468 5469 Belgien 5470 5471 </option> 5472 <option value="f596edb059da42b78e8eae797b71fb09" 5473 data-zipcode-required="1" 5474 data-vat-id-required="" 5475 data-state-required="" 5476 > 5477 5478 Frankreich 5479 5480 </option> 5481 <option value="cb7dcea897ce4cd9859e3bc0949860d7" 5482 data-zipcode-required="1" 5483 data-vat-id-required="" 5484 data-state-required="" 5485 > 5486 5487 Italien 5488 5489 </option> 5490 <option value="2c6dc7978f1b449d8aa44b86a7f6da15" 5491 data-zipcode-required="1" 5492 data-vat-id-required="" 5493 data-state-required="" 5494 > 5495 5496 Liechtenstein 5497 5498 </option> 5499 <option value="bf3c5b0cbf694935b9405acd1d78f307" 5500 data-zipcode-required="1" 5501 data-vat-id-required="" 5502 data-state-required="" 5503 > 5504 5505 Luxemburg 5506 5507 </option> 5508 <option value="b10d6883e46b498193983132b83a887c" 5509 data-zipcode-required="1" 5510 data-vat-id-required="" 5511 data-state-required="" 5512 > 5513 5514 Polen 5515 5516 </option> 5517 <option value="9d8764d2300c45c2a4917556a147cc50" 5518 data-zipcode-required="1" 5519 data-vat-id-required="" 5520 data-state-required="" 5521 > 5522 5523 Tschechische Republik 5524 5525 </option> 5526 5527 </select> 5528 5529 5530 <div id="shippingAddressAddressCountry-feedback" class="form-field-feedback"> 5531 </div> 5532 </div> 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 <div class="form-group col-md-6 d-none"> 5544 <label class="form-label" for="shippingAddressAddressCountryState"> 5545 Bundesland 5546 5547 </label> 5548 5549 5550 5551 5552 <select class="form-select country-state-select" 5553 id="shippingAddressAddressCountryState" 5554 name="shippingAddress[countryStateId]" 5555 aria-describedby="shippingAddressAddressCountryState-feedback" 5556 autocomplete="shipping address-level1" data-initial-country-state-id > 5557 <option value="" 5558 selected="selected" 5559 data-placeholder-option="true"> 5560 Bundesland auswählen ... 5561 </option> 5562 5563 </select> 5564 5565 5566 <div id="shippingAddressAddressCountryState-feedback" class="form-field-feedback"> 5567 </div> 5568 </div> 5569 5570 </div> 5571 5572 <div class="row g-2"> 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 <div class="form-group col-md-6"> 5584 <label class="form-label" for="shippingAddressAddressPhoneNumber"> 5585 Telefonnummer 5586 5587 </label> 5588 5589 5590 5591 5592 <input type="text" 5593 class="form-control" 5594 id="shippingAddressAddressPhoneNumber"
5595 name="shippingAddress[phoneNumber]" 5596 aria-describedby="shippingAddressAddressPhoneNumber-feedback" 5597 autocomplete="shipping tel" > 5598 5599 5600 <div id="shippingAddressAddressPhoneNumber-feedback" class="form-field-feedback"> 5601 </div> 5602 </div> 5603 </div> 5604 </fieldset> 5605 </div> 5606 </div> 5607 5608 5609 5610 <div class="shopware_surname_confirm"> 5611 <input type="text" 5612 name="shopware_surname_confirm" 5613 class="d-none" 5614 value="" 5615 tabindex="-1" 5616 autocapitalize="off" 5617 spellcheck="false" 5618 autocorrect="off" 5619 autocomplete="new-password" 5620 > 5621 </div> 5622 5623 5624 <div class="captcha-google-re-captcha-v3" 5625 data-google-re-captcha-v3="true" 5626 data-google-re-captcha-v3-options="{"siteKey":"6Le3G4AtAAAAABkM5gpgmXVYSjCN1VMIBaqf-TaF"}"> 5627 <input 5628 type="hidden" 5629 class="grecaptcha_v3-input" 5630 name="_grecaptcha_v3" 5631 data-validation="grecaptcha" 5632 data-validate-hidden="true" 5633 aria-describedby="form-1202557733-grecaptcha-v3-feedback"> 5634 5635 <div class="data-protection-information grecaptcha-protection-information"> 5636 Diese Seite ist durch reCAPTCHA geschützt und es gelten die <a href="https://policies.google.com/privacy?hl=de">Datenschutzrichtlinie</a> und <a href="https://policies.google.com/terms?hl=de">Nutzungsbedingungen</a>. 5637 </div> 5638 5639 <div id="form-1202557733-grecaptcha-v3-feedback" class="form-field-feedback"></div> 5640 </div> 5641 5642 <fieldset class="form-text privacy-notice"> 5643 <legend class="form-text privacy-notice-title"> 5644 <strong>Datenschutz</strong> 5645 </legend> 5646 <br> 5647 5648 5649 5650 5651 5652 <div class="form-group form-check"> 5653 5654 5655 5656 <input type="checkbox" 5657 class="form-check-input" 5658 id="acceptedDataProtection" 5659 name="acceptedDataProtection" 5660 value="1" 5661 aria-describedby="acceptedDataProtection-feedback" 5662 data-validation="required" aria-required="true" > 5663 5664 <label class="custom-control-label" 5665 for="acceptedDataProtection"> 5666 Ich habe die <button type="button" class="btn btn-link-inline" aria-haspopup="dialog" data-ajax-modal="true" data-url="/widgets/cms">Datenschutzbestimmungen</button> zur Kenntnis genommen und die <button type="button" class="btn btn-link-inline" aria-haspopup="dialog" data-ajax-modal="true" data-url="/widgets/cms">AGB</button> gelesen und bin mit ihnen einverstanden. 5667 5668 <span class="form-required-label" aria-hidden="true">*</span> 5669 </label> 5670 5671 <div id="acceptedDataProtection-feedback" class="form-field-feedback"> 5672 </div> 5673 </div> 5674 </fieldset> 5675 5676 <p class="register-required-info"> 5677 Die mit einem Stern (*) markierten Felder sind Pflichtfelder. 5678 </p> 5679 5680 <div class="register-submit d-grid col-md-6 offset-md-6"> 5681 <button type="submit" 5682 class="btn btn-primary btn-lg"> 5683 Weiter 5684 </button> 5685 </div> 5686 </form> 5687 </div> 5688 </div> 5689 </div> 5690 </div> 5691 </div> 5692 </div> 5693 </div> 5694 </main> 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 <section class="twt-usp-bar is-footer is-small layout-1" 5721 data-twt-usp-bar-usps="5" 5722 role="region" 5723 aria-label="Noch unentschlossen? Diese Vorteile sprechen für uns" 5724 > 5725 5726 <div class="twt-usp-bar-container container"> 5727 <div class="row h-100 align-items-center"> 5728 <div class="twt-usp-bar-items col px-0"> 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 <div class="twt-usp-bar-item twt-usp-1 item-1"> 5745 <div class="item-icon"> 5746 5747 5748 5749 5750 5751 5752 5753 5754
5755 <span class="icon icon-rocket" aria-hidden="true"> 5756 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M5.2213 14.4042a12.7324 12.7324 0 0 0-3.4638-1.434c-.7541-.1886-1.0142-1.1277-.4646-1.6773l1.8284-1.8284A5 5 0 0 1 6.657 8h2.47l.47-.6462A13 13 0 0 1 20.1107 2H21c.5523 0 1 .4477 1 1v.8893a13 13 0 0 1-5.3538 10.5136l-.4355.3167.2102.8407a5 5 0 0 1-1.3152 4.7482l-2.3986 2.3986c-.5496.5496-1.4887.2895-1.6772-.4646a12.7324 12.7324 0 0 0-1.434-3.4638 41.8718 41.8718 0 0 1-5.2797 2.17c-.7817.2606-1.5255-.4832-1.2649-1.265a41.8718 41.8718 0 0 1 2.17-5.2795zm.9287-1.7747A41.8718 41.8718 0 0 1 7.7358 10h-1.079a3 3 0 0 0-2.1213.8787l-.661.661c.794.2997 1.5546.665 2.2755 1.0898zm8.309 3.33a41.8717 41.8717 0 0 1-3.0885 1.8905 14.7187 14.7187 0 0 1 1.0897 2.2755l1.2313-1.2312a3 3 0 0 0 .789-2.849l-.0214-.0858zm-4.2242.2328a39.8717 39.8717 0 0 0 4.292-2.721l.943-.6859a11 11 0 0 0 4.5296-8.7848A11 11 0 0 0 11.2146 8.53l-.686.9432a39.8717 39.8717 0 0 0-2.721 4.2919 14.762 14.762 0 0 1 2.4272 2.4271zm-1.8172.936a12.7602 12.7602 0 0 0-1.5459-1.5459c-.4347.9-.8358 1.8167-1.202 2.748a39.8718 39.8718 0 0 0 2.7479-1.2021z" id="icons-default-rocket" /></defs><use xlink:href="#icons-default-rocket" fill="#758CA3" fill-rule="evenodd" /></svg> 5757 </span> 5758 5759 5760 </div> 5761 <div class="item-label"> 5762 <div class="item-title">Versand per GLS und Spedition</div> 5763 </div> 5764 </div> 5765 5766 5767 5768 <div class="twt-usp-bar-item twt-usp-2 item-2"> 5769 <div class="item-icon"> 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 <span class="icon icon-clock" aria-hidden="true"> 5780 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M13 11V6c0-.5523-.4477-1-1-1s-1 .4477-1 1v6c0 .5523.4477 1 1 1h4c.5523 0 1-.4477 1-1s-.4477-1-1-1h-3zm-1 13C5.3726 24 0 18.6274 0 12S5.3726 0 12 0s12 5.3726 12 12-5.3726 12-12 12zm0-2c5.5228 0 10-4.4772 10-10S17.5228 2 12 2 2 6.4772 2 12s4.4772 10 10 10z" id="icons-default-clock" /></defs><use xlink:href="#icons-default-clock" fill="#758CA3" fill-rule="evenodd" /></svg> 5781 </span> 5782 5783 5784 </div> 5785 <div class="item-label"> 5786 <div class="item-title">Kundenservice von 8-17 Uhr</div> 5787 </div> 5788 </div> 5789 5790 5791 5792 <div class="twt-usp-bar-item twt-usp-3 item-3"> 5793 <div class="item-icon"> 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 <span class="icon icon-thumb-up" aria-hidden="true"> 5804 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M4 9c.5523 0 1 .4477 1 1s-.4477 1-1 1-1-.4477-1-1 .4477-1 1-1zm4-2h.2457a1 1 0 0 0 .9615-.7253l1.1711-4.0989A3 3 0 0 1 13.263 0h1.76c1.6568 0 3 1.3431 3 3a3 3 0 0 1-.1155.8242L17 7h4c1.6569 0 3 1.3431 3 3v5c0 4.4183-3.5817 8-8 8H8c0 .5523-.4477 1-1 1H1c-.5523 0-1-.4477-1-1V7c0-.5523.4477-1 1-1h6c.5523 0 1 .4477 1 1zM6 8H2v14h4V8zm2 1v12h8c3.3137 0 6-2.6863 6-6v-5c0-.5523-.4477-1-1-1h-6.6515l1.6358-5.7253A1 1 0 0 0 16.0228 3c0-.5523-.4477-1-1-1H13.263a1 1 0 0 0-.9615.7253l-1.1711 4.0989A3 3 0 0 1 8.2457 9H8z" id="icons-default-thumb-up" /></defs><use xlink:href="#icons-default-thumb-up" fill="#758CA3" fill-rule="evenodd" /></svg> 5805 </span> 5806 5807 5808 </div> 5809 <div class="item-label"> 5810 <div class="item-title">Käuferschutz über Trusted Shops</div> 5811 </div> 5812 </div> 5813 5814 5815 5816 <div class="twt-usp-bar-item twt-usp-4 item-4"> 5817 <div class="item-icon"> 5818 5819 5820 5821 5822 5823 5824 5825 5826
5827 <span class="icon icon-briefcase" aria-hidden="true"> 5828 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M20 8v1c0 .5523-.4477 1-1 1s-1-.4477-1-1V8H6v1c0 .5523-.4477 1-1 1s-1-.4477-1-1V8H3c-.5523 0-1 .4477-1 1v10c0 .5523.4477 1 1 1h18c.5523 0 1-.4477 1-1V9c0-.5523-.4477-1-1-1h-1zM7 6V4c0-1.1046.8954-2 2-2h6c1.1046 0 2 .8954 2 2v2h4c1.6569 0 3 1.3431 3 3v10c0 1.6569-1.3431 3-3 3H3c-1.6569 0-3-1.3431-3-3V9c0-1.6569 1.3431-3 3-3h4zm2 0h6V4H9v2z" id="icons-default-briefcase" /></defs><use xlink:href="#icons-default-briefcase" fill="#758CA3" fill-rule="evenodd" /></svg> 5829 </span> 5830 5831 5832 </div> 5833 <div class="item-label"> 5834 <div class="item-title">Bequemer Kauf auf Rechnung</div> 5835 </div> 5836 </div> 5837 5838 5839 5840 5841 <div class="twt-usp-bar-item twt-usp-5 item-6"> 5842 <div class="item-icon"> 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 <span class="icon icon-headset" aria-hidden="true"> 5853 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M2 11v4h2v-4H2zm20-2c1.1046 0 2 .8954 2 2v4c0 1.1046-.8954 2-2 2v3c0 1.6569-1.3431 3-3 3h-1c0 .5523-.4477 1-1 1h-2c-.5523 0-1-.4477-1-1v-2c0-.5523.4477-1 1-1h2c.5523 0 1 .4477 1 1h1c.5523 0 1-.4477 1-1v-3c-1.1046 0-2-.8954-2-2v-4c0-1.1046.8954-2 2-2 0-3.866-3.134-7-7-7h-2C7.134 2 4 5.134 4 9c1.1046 0 2 .8954 2 2v4c0 1.1046-.8954 2-2 2H2c-1.1046 0-2-.8954-2-2v-4c0-1.1046.8954-2 2-2 0-4.9706 4.0294-9 9-9h2c4.9706 0 9 4.0294 9 9zm-2 2v4h2v-4h-2z" id="icons-default-headset" /></defs><use xlink:href="#icons-default-headset" fill="#758CA3" fill-rule="evenodd" /></svg> 5854 </span> 5855 5856 5857 </div> 5858 <div class="item-label"> 5859 <div class="item-title">Beratung unter: +49 (0)6681 9678446</div> 5860 </div> 5861 </div> 5862 5863 </div> 5864 5865 5866 </div> 5867 </div> 5868 5869 </section> 5870 5871 <footer class="footer-main"> 5872 <div class="container"> 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 <div 5923 id="footerColumnsTop" 5924 class="row footer-columns first" 5925 data-collapse-footer-columns="true" 5926 role="list" 5927 > 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 <div class="twt-footer-column-newsletter col-md-6 footer-column-newsletter footer-column js-footer-column twt-element-newsletter twt-element-6 first last"> 5942 <div class="twt-anchor" id="newsletterSubscription"></div> 5943 5944 <div class="footer-column-headline footer-headline js-footer-column-headline" 5945 id="collapseFooterNewsletterTitle" 5946 role="listitem" 5947 > 5948 Newsletter 5949 5950 <button class="footer-column-toggle btn btn-link btn-link-inline js-collapse-footer-column-trigger" 5951 data-bs-target="#collapseFooterNewsletter" 5952 data-bs-toggle="collapse" 5953 aria-controls="collapseFooterNewsletter" 5954 aria-labelledby="collapseFooterNewsletterTitle" 5955 aria-expanded="true" 5956 > 5957 5958 5959 5960 5961 5962
5963 <span class="icon icon-plus icon-footer-plus" aria-hidden="true"> 5964 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M11 11V3c0-.5523.4477-1 1-1s1 .4477 1 1v8h8c.5523 0 1 .4477 1 1s-.4477 1-1 1h-8v8c0 .5523-.4477 1-1 1s-1-.4477-1-1v-8H3c-.5523 0-1-.4477-1-1s.4477-1 1-1h8z" id="icons-default-plus" /></defs><use xlink:href="#icons-default-plus" fill="#758CA3" fill-rule="evenodd" /></svg> 5965 </span> 5966 5967 5968 5969 5970 5971 5972 5973 5974 <span class="icon icon-minus icon-footer-minus" aria-hidden="true"> 5975 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path id="icons-default-minus" d="M3 13h18c.5523 0 1-.4477 1-1s-.4477-1-1-1H3c-.5523 0-1 .4477-1 1s.4477 1 1 1z" /></defs><use xlink:href="#icons-default-minus" fill="#758CA3" fill-rule="evenodd" /></svg> 5976 </span> 5977 5978 </button> 5979 5980 </div> 5981 5982 <div id="collapseFooterNewsletter" 5983 class="footer-column-content js-footer-column-content collapse" 5984 aria-labelledby="collapseFooterNewsletterTitle" 5985 role="listitem" 5986 > 5987 <div class="footer-column-content-inner"> 5988 5989 5990 5991 5992 5993 5994 <div class="twt-widget-newsletter twt-newsletter is-footer"> 5995 <p class="twt-newsletter-text mb-3"> 5996 Abonnieren Sie jetzt einfach unseren regelmäÃig erscheinenden Newsletter und Sie werden stets unter den Ersten sein, über neue Produkte und Angebote informiert werden. 5997 </p> 5998 5999 <div class="cms-block cms-block-form"> <div class="cms-element-form"> 6000 <form action="/form/newsletter" 6001 method="post" 6002 data-form-handler="true" 6003 id="twt-form-newsletter" 6004 aria-label="Newsletter abonnieren" 6005 > 6006 <div class="form-content"> 6007 <div class="twt-form-newsletter-subscribe row g-2 mb-2 ms-0 me-0 d-none"> 6008 6009 6010 6011 6012 6013 <div class="form-group col-12"> 6014 <label class="form-label" for="newsletterAction"> 6015 Aktion 6016 6017 <span class="form-required-label" aria-hidden="true">*</span> 6018 </label> 6019 6020 6021 6022 6023 <select class="form-select contact-select" 6024 id="newsletterAction" 6025 name="option" 6026 aria-describedby="newsletterAction-feedback" 6027 data-validation="required" aria-required="true" data-form-field-toggle="true" data-form-field-toggle-value="subscribe" hidden="hidden" aria-hidden="true" tabindex="-1" > 6028 <option selected="selected" 6029 value="subscribe"> 6030 Newsletter abonnieren 6031 </option> 6032 6033 <option value="unsubscribe"> 6034 Newsletter abbestellen 6035 </option> 6036 6037 </select> 6038 6039 6040 <div id="newsletterAction-feedback" class="form-field-feedback"> 6041 </div> 6042 </div> 6043 6044 </div> 6045 6046 6047 <div class="twt-form-newsletter-email-submit row g-2 mb-2 ms-0 me-0"> 6048 <div class="col-12"> 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 <div class="form-group"> 6060 <label class="form-label" for="twt-form-newsletter-form-email"> 6061 E-Mail-Adresse 6062
6063 <span class="form-required-label" aria-hidden="true">*</span> 6064 </label> 6065 6066 6067 6068 6069 <input type="email" 6070 class="form-control" 6071 id="twt-form-newsletter-form-email" 6072 name="email" 6073 aria-describedby="twt-form-newsletter-form-email-feedback" 6074 placeholder="E-Mail-Adresse eingeben ..." autocomplete="email" data-validation="required,email" aria-required="true" > 6075 6076 6077 <div id="twt-form-newsletter-form-email-feedback" class="form-field-feedback"> 6078 </div> 6079 </div> 6080 6081 <button type="submit" class="btn btn-primary" aria-label="Submit"> 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 <span class="icon icon-themeware icon-envelope icon-solid" aria-hidden="true"><?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22,3.69H2a1,1,0,0,0-1,1V18.31a2,2,0,0,0,2,2H21a2,2,0,0,0,2-2V4.69A1,1,0,0,0,22,3.69ZM3,7.07l7,4.57L3,17.56Zm9.09,4.41L3.17,5.69H21Zm-1,.87.62.4a.63.63,0,0,0,.68,0l.46-.3,7,5.86H4.06ZM14,11.74l7-4.57V17.65Z"/></svg></span> 6103 6104 6105 6106 6107 </button> 6108 6109 </div> 6110 </div> 6111 6112 6113 6114 6115 6116 <div class="shopware_surname_confirm"> 6117 <input type="text" 6118 name="shopware_surname_confirm" 6119 class="d-none" 6120 value="" 6121 tabindex="-1" 6122 autocapitalize="off" 6123 spellcheck="false" 6124 autocorrect="off" 6125 autocomplete="new-password" 6126 > 6127 </div> 6128 6129 6130 <div class="captcha-google-re-captcha-v3" 6131 data-google-re-captcha-v3="true" 6132 data-google-re-captcha-v3-options="{"siteKey":"6Le3G4AtAAAAABkM5gpgmXVYSjCN1VMIBaqf-TaF"}"> 6133 <input 6134 type="hidden" 6135 class="grecaptcha_v3-input" 6136 name="_grecaptcha_v3" 6137 data-validation="grecaptcha" 6138 data-validate-hidden="true" 6139 aria-describedby="form-742018179-grecaptcha-v3-feedback"> 6140 6141 <div class="data-protection-information grecaptcha-protection-information"> 6142 Diese Seite ist durch reCAPTCHA geschützt und es gelten die <a href="https://policies.google.com/privacy?hl=de">Datenschutzrichtlinie</a> und <a href="https://policies.google.com/terms?hl=de">Nutzungsbedingungen</a>. 6143 </div> 6144 6145 <div id="form-742018179-grecaptcha-v3-feedback" class="form-field-feedback"></div> 6146 </div> 6147 6148 <div class="twt-form-newsletter-privacy"> 6149 6150 <fieldset class="form-text privacy-notice"> 6151 <legend class="form-text privacy-notice-title"> 6152 <strong>Datenschutz</strong> 6153 </legend> 6154 <br> 6155 6156 6157 6158 6159 6160 <div class="form-group form-check"> 6161 6162 6163 6164 <input type="checkbox" 6165 class="form-check-input" 6166 id="acceptedDataProtection" 6167 name="acceptedDataProtection" 6168 value="1" 6169 aria-describedby="acceptedDataProtection-feedback" 6170 data-validation="required" aria-required="true" > 6171 6172 <label class="custom-control-label" 6173 for="acceptedDataProtection"> 6174 Ich habe die <button type="button" class="btn btn-link-inline" aria-haspopup="dialog" data-ajax-modal="true" data-url="/widgets/cms">Datenschutzbestimmungen</button> zur Kenntnis genommen und die <button type="button" class="btn btn-link-inline" aria-haspopup="dialog" data-ajax-modal="true" data-url="/widgets/cms">AGB</button> gelesen und bin mit ihnen einverstanden. 6175
6176 <span class="form-required-label" aria-hidden="true">*</span> 6177 </label> 6178 6179 <div id="acceptedDataProtection-feedback" class="form-field-feedback"> 6180 </div> 6181 </div> 6182 </fieldset> 6183 </div> 6184 6185 </div> 6186 6187 <div class="form-hidden-fields"> 6188 <input type="submit" class="submit--hidden d-none"> 6189 </div> 6190 </form> 6191 </div> 6192 </div> 6193 6194 </div> 6195 </div> 6196 </div> 6197 6198 </div> 6199 </div> 6200 6201 <div 6202 id="footerColumns" 6203 class="row footer-columns" 6204 data-collapse-footer-columns="true" 6205 role="list" 6206 > 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 <div class="twt-footer-column-about col-md-6 footer-column-about footer-column js-footer-column twt-element-about twt-element-1 first"> 6221 6222 <div class="footer-column-headline footer-headline js-footer-column-headline" 6223 id="collapseFooterAboutTitle" 6224 role="listitem" 6225 > 6226 Wir fertigen Ihre PVC-Plane nach Maà - Sattler Qualität made in Germany! 6227 6228 <button class="footer-column-toggle btn btn-link btn-link-inline js-collapse-footer-column-trigger" 6229 data-bs-target="#collapseFooterAbout" 6230 data-bs-toggle="collapse" 6231 aria-controls="collapseFooterAbout" 6232 aria-labelledby="collapseFooterAboutTitle" 6233 aria-expanded="true" 6234 > 6235 6236 6237 6238 6239 6240 6241 <span class="icon icon-plus icon-footer-plus" aria-hidden="true"> 6242 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-plus" fill="#758CA3" fill-rule="evenodd" /></svg> 6243 </span> 6244 6245 6246 6247 6248 6249 6250 6251 6252 <span class="icon icon-minus icon-footer-minus" aria-hidden="true"> 6253 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-minus" fill="#758CA3" fill-rule="evenodd" /></svg> 6254 </span> 6255 6256 </button> 6257 6258 </div> 6259 6260 <div id="collapseFooterAbout" 6261 class="footer-column-content js-footer-column-content collapse" 6262 aria-labelledby="collapseFooterAboutTitle" 6263 role="listitem" 6264 > 6265 <div class="footer-column-content-inner"> 6266 6267 6268 6269 <div class="twt-widget-about twt-about is-footer"> 6270 <p> Bei <strong>Tekoplan</strong> wird jede <strong>Abdeckplane von Hand maÃgefertigt</strong> â in echter <strong>Sattlerqualität Made in Germany</strong>. Als erfahrener Hersteller für <strong>PVC-Planen nach MaÃ</strong> bieten wir langlebige, wetterfeste und individuell gefertigte Lösungen für private, gewerbliche und industrielle Anwendungen. </p> <p> Unsere <strong>Abdeckplanen</strong> sind in zahlreichen <strong>Ausführungen, Farben, Formen und GröÃen</strong> erhältlich und lassen sich flexibel anpassen. Je nach Einsatzzweck fertigen wir Planen <strong>mit Saum und Ãsen im Abstand von 50 cm oder 100 cm</strong>, mit verstärktem Rand, mit oder ohne Ãsen sowie mit individuell abgestimmten Befestigungslösungen. </p> <p> In unserem <strong>Online-Shop für PVC-Planen</strong> finden Sie auÃerdem ein umfangreiches Sortiment an <strong>Planenzubehör</strong> wie Planenspanner, Expanderhaken, Expanderseile und weiteres Befestigungsmaterial. Für einfache Anwendungen stehen auch <strong>PVC-Planen in Standardabmessungen</strong> in der Kategorie Abdeckplanen zur Verfügung. </p> <p> Wenn Sie hingegen eine <strong>PVC-Plane nach MaÃ</strong> benötigen, nutzen Sie unseren <strong>Planenkonfigurator / Planenkalkulator</strong>. Damit konfigurieren Sie Ihre Abdeckplane präzise nach Ihren Anforderungen und stellen sicher, dass <strong>MaÃe, Ausstattung und Verarbeitung exakt passen</strong>. </p> 6271 </div> 6272 </div>
6273 </div> 6274 6275 </div> 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 <div class="col-md-4 col-xl-3 footer-column-footernav footer-column js-footer-column twt-element-footernav twt-element-2"> 6291 6292 <div class="footer-column-headline footer-headline js-footer-column-headline" 6293 id="collapseFooterTitle1" 6294 role="listitem" 6295 > 6296 6297 <a href="" 6298 title="Nützliche Links" 6299 > 6300 Nützliche Links 6301 </a> 6302 6303 <button class="footer-column-toggle btn btn-link btn-link-inline js-collapse-footer-column-trigger" 6304 data-bs-target="#collapseFooter1" 6305 data-bs-toggle="collapse" 6306 aria-controls="collapseFooter1" 6307 aria-labelledby="collapseFooterTitle1" 6308 aria-expanded="true" 6309 > 6310 6311 6312 6313 6314 6315 6316 <span class="icon icon-plus icon-footer-plus" aria-hidden="true"> 6317 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-plus" fill="#758CA3" fill-rule="evenodd" /></svg> 6318 </span> 6319 6320 6321 6322 6323 6324 6325 6326 6327 <span class="icon icon-minus icon-footer-minus" aria-hidden="true"> 6328 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-minus" fill="#758CA3" fill-rule="evenodd" /></svg> 6329 </span> 6330 6331 </button> 6332 6333 </div> 6334 6335 <div id="collapseFooter1" 6336 class="footer-column-content js-footer-column-content collapse" 6337 aria-labelledby="collapseFooterTitle1" 6338 role="listitem" 6339 > 6340 <div class="footer-column-content-inner"> 6341 6342 <ul class="list-unstyled"> 6343 6344 <li class="footer-link-item"> 6345 <a class="footer-link" 6346 href="https://www.tekoplan-planen.shop/Nuetzliche-Links/Angebotsformular/" 6347 title="Angebotsformular" 6348 > 6349 Angebotsformular 6350 </a> 6351 6352 </li> 6353 6354 6355 <li class="footer-link-item"> 6356 <a class="footer-link" 6357 href="https://www.tekoplan-planen.shop/Nuetzliche-Links/Impressum/" 6358 title="Impressum" 6359 > 6360 Impressum 6361 </a> 6362 6363 </li> 6364 6365 6366 <li class="footer-link-item"> 6367 <a class="footer-link" 6368 href="https://www.tekoplan-planen.shop/Nuetzliche-Links/Datenschutz/" 6369 title="Datenschutz" 6370 > 6371 Datenschutz 6372 </a> 6373 6374 </li> 6375 6376 6377 <li class="footer-link-item"> 6378 <a class="footer-link" 6379 href="https://www.tekoplan-planen.shop/Nuetzliche-Links/Downloads/" 6380 title="Downloads" 6381 > 6382 Downloads 6383 </a> 6384 6385 </li> 6386 6387 6388 <li class="footer-link-item"> 6389 <a class="footer-link" 6390 href="https://www.tekoplan-planen.shop/Nuetzliche-Links/Wiederrufserklaerung/" 6391 title="Wiederrufserklärung" 6392 > 6393 Wiederrufserklärung 6394 </a> 6395 6396 </li> 6397 6398 6399 <li class="footer-link-item"> 6400 <a class="footer-link" 6401 href="https://www.tekoplan-planen.shop/Nuetzliche-Links/AGB/" 6402 title="AGB" 6403 > 6404 AGB 6405 </a> 6406 6407 </li> 6408 6409 </ul> 6410 6411 </div> 6412 </div> 6413 6414 </div> 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 <div class="col-md-4 col-xl-3 footer-column-footernav footer-column js-footer-column twt-element-footernav twt-element-2"> 6425 6426 <div class="footer-column-headline footer-headline js-footer-column-headline" 6427 id="collapseFooterTitle2" 6428 role="listitem" 6429 > 6430 6431 Planenkonfigurator 6432 6433 <button class="footer-column-toggle btn btn-link btn-link-inline js-collapse-footer-column-trigger" 6434 data-bs-target="#collapseFooter2" 6435 data-bs-toggle="collapse" 6436 aria-controls="collapseFooter2" 6437 aria-labelledby="collapseFooterTitle2" 6438 aria-expanded="true" 6439 > 6440 6441 6442 6443 6444 6445
6446 <span class="icon icon-plus icon-footer-plus" aria-hidden="true"> 6447 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-plus" fill="#758CA3" fill-rule="evenodd" /></svg> 6448 </span> 6449 6450 6451 6452 6453 6454 6455 6456 6457 <span class="icon icon-minus icon-footer-minus" aria-hidden="true"> 6458 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-minus" fill="#758CA3" fill-rule="evenodd" /></svg> 6459 </span> 6460 6461 </button> 6462 6463 </div> 6464 6465 <div id="collapseFooter2" 6466 class="footer-column-content js-footer-column-content collapse" 6467 aria-labelledby="collapseFooterTitle2" 6468 role="listitem" 6469 > 6470 <div class="footer-column-content-inner"> 6471 6472 <ul class="list-unstyled"> 6473 </ul> 6474 6475 </div> 6476 </div> 6477 6478 </div> 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 <div class="twt-footer-column-hotline col-md-4 col-xl-3 footer-column-hotline footer-column js-footer-column twt-element-hotline twt-element-3"> 6497 6498 <div class="footer-column-headline footer-headline js-footer-column-headline" 6499 id="collapseFooterHotlineTitle" 6500 role="listitem" 6501 > 6502 Kundenservice 6503 6504 <button class="footer-column-toggle btn btn-link btn-link-inline js-collapse-footer-column-trigger" 6505 data-bs-target="#collapseFooterHotline" 6506 data-bs-toggle="collapse" 6507 aria-controls="collapseFooterHotline" 6508 aria-labelledby="collapseFooterHotlineTitle" 6509 aria-expanded="true" 6510 > 6511 6512 6513 6514 6515 6516 6517 <span class="icon icon-plus icon-footer-plus" aria-hidden="true"> 6518 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-plus" fill="#758CA3" fill-rule="evenodd" /></svg> 6519 </span> 6520 6521 6522 6523 6524 6525 6526 6527 6528 <span class="icon icon-minus icon-footer-minus" aria-hidden="true"> 6529 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-minus" fill="#758CA3" fill-rule="evenodd" /></svg> 6530 </span> 6531 6532 </button> 6533 6534 </div> 6535 6536 <div id="collapseFooterHotline" 6537 class="footer-column-content js-footer-column-content collapse" 6538 aria-labelledby="collapseFooterHotlineTitle" 6539 role="listitem" 6540 > 6541 <div class="footer-column-content-inner"> 6542 6543 6544 6545 6546 6547 6548 6549 6550 <div class="twt-widget-hotline twt-hotline is-footer"> 6551 <div class="twt-widget-hotline-content"> 6552 <p class="twt-widget-hotline-contact-text footer-contact-hotline"> 6553 <p> <strong>Persönliche Fachberatung rund um PVC-Planen & Abdeckplanen nach MaÃ</strong><br /> Telefonisch erreichen Sie uns unter <a href="tel:+4966819678446">+49 (0)6681 9678446</a><br /> Montag bis Freitag von <strong>08:00 bis 17:00 Uhr</strong><br />
6553oder per E-Mail <a href="mailto:[email protected]"></a>. </p> 6554 </p> 6555 </div> 6556 6557 6558 6559 6560 6561 6562 6563 <div class="twt-widget-hotline-revocation-button footer-revocation-button"> 6564 <a class="btn btn-primary" href="/page/cms/019ede90e50e7317901aa6737c0f8370" title="Vertrag widerrufen">Vertrag widerrufen</a> 6565 </div> 6566 </div> 6567 </div> 6568 </div> 6569 6570 </div> 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 <div class="twt-footer-column-benefits col-md-4 col-xl-3 footer-column-benefits footer-column js-footer-column twt-element-benefits twt-element-4"> 6585 6586 <div class="footer-column-headline footer-headline js-footer-column-headline" 6587 id="collapseFooterBenefitsTitle" 6588 role="listitem" 6589 > 6590 Das bieten wir Ihnen 6591 6592 <button class="footer-column-toggle btn btn-link btn-link-inline js-collapse-footer-column-trigger" 6593 data-bs-target="#collapseFooterBenefits" 6594 data-bs-toggle="collapse" 6595 aria-controls="collapseFooterBenefits" 6596 aria-labelledby="collapseFooterBenefitsTitle" 6597 aria-expanded="true" 6598 > 6599 6600 6601 6602 6603 6604 6605 <span class="icon icon-plus icon-footer-plus" aria-hidden="true"> 6606 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-plus" fill="#758CA3" fill-rule="evenodd" /></svg> 6607 </span> 6608 6609 6610 6611 6612 6613 6614 6615 6616 <span class="icon icon-minus icon-footer-minus" aria-hidden="true"> 6617 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-minus" fill="#758CA3" fill-rule="evenodd" /></svg> 6618 </span> 6619 6620 </button> 6621 6622 </div> 6623 6624 <div id="collapseFooterBenefits" 6625 class="footer-column-content js-footer-column-content collapse" 6626 aria-labelledby="collapseFooterBenefitsTitle" 6627 role="listitem" 6628 > 6629 <div class="footer-column-content-inner"> 6630 6631 6632 6633 6634 6635 6636 <div class="twt-widget-benefits twt-benefits is-footer"> 6637 6638 6639 <div class="twt-widget-benefits-list benefits-list"> 6640 <ul> 6641 <li> 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 <span class="icon icon-checkmark" aria-hidden="true"> 6652 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path id="icons-default-checkmark" d="M2.7071 10.2929c-.3905-.3905-1.0237-.3905-1.4142 0-.3905.3905-.3905 1.0237 0 1.4142l7 7c.3905.3905 1.0237.3905 1.4142 0l13-13c.3905-.3905.3905-1.0237 0-1.4142-.3905-.3905-1.0237-.3905-1.4142 0L9 16.5858l-6.2929-6.293z" /></defs><use xlink:href="#icons-default-checkmark" fill="#758CA3" fill-rule="evenodd" /></svg> 6653 </span> 6654 6655 6656 6657 Versicherter Versand per GLS und Spedition 6658 </li> 6659 <li> 6660 6661 6662 6663 6664 6665 6666 6667 6668
6669 <span class="icon icon-checkmark" aria-hidden="true"> 6670 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-checkmark" fill="#758CA3" fill-rule="evenodd" /></svg> 6671 </span> 6672 6673 6674 6675 bequemer Kauf auf Rechnung 6676 </li> 6677 <li> 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 <span class="icon icon-checkmark" aria-hidden="true"> 6688 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-checkmark" fill="#758CA3" fill-rule="evenodd" /></svg> 6689 </span> 6690 6691 6692 6693 direkt vom Hersteller â maÃgefertigte PVC-Planen in Sattlerqualität Made in Germany 6694 </li> 6695 <li> 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 <span class="icon icon-checkmark" aria-hidden="true"> 6706 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-checkmark" fill="#758CA3" fill-rule="evenodd" /></svg> 6707 </span> 6708 6709 6710 6711 Käuferschutz über Trusted Shops 6712 </li> 6713 <li> 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 <span class="icon icon-checkmark" aria-hidden="true"> 6724 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-checkmark" fill="#758CA3" fill-rule="evenodd" /></svg> 6725 </span> 6726 6727 6728 6729 kompetente Fachberatung rund um PVC-Planen nach Maà 6730 </li> 6731 </ul> 6732 </div> 6733 6734 6735 </div> 6736 </div> 6737 </div> 6738 6739 </div> 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 <div class="col-md-4 col-xl-3 footer-column-paymentshipping footer-column js-footer-column twt-element-paymentshipping twt-element-5"> 6754 6755 <div class="twt-footer-column-paymentshipping footer-column-headline footer-headline js-footer-column-headline" 6756 id="collapseFooterPaymentshippingTitle" 6757 role="listitem" 6758 > 6759 Zahlungsarten und Versandländer: 6760 6761 <button class="footer-column-toggle btn btn-link btn-link-inline js-collapse-footer-column-trigger" 6762 data-bs-target="#collapseFooterPaymentshipping" 6763 data-bs-toggle="collapse" 6764 aria-controls="collapseFooterPaymentshipping" 6765 aria-labelledby="collapseFooterPaymentshippingTitle" 6766 aria-expanded="true" 6767 > 6768 6769 6770 6771 6772 6773
6774 <span class="icon icon-plus icon-footer-plus" aria-hidden="true"> 6775 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-plus" fill="#758CA3" fill-rule="evenodd" /></svg> 6776 </span> 6777 6778 6779 6780 6781 6782 6783 6784 6785 <span class="icon icon-minus icon-footer-minus" aria-hidden="true"> 6786 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-minus" fill="#758CA3" fill-rule="evenodd" /></svg> 6787 </span> 6788 6789 </button> 6790 6791 </div> 6792 6793 <div id="collapseFooterPaymentshipping" 6794 class="footer-column-content js-footer-column-content collapse footer-logos-column" 6795 aria-labelledby="collapseFooterPaymentshippingTitle" 6796 role="listitem" 6797 > 6798 <div class="footer-column-content-inner"> 6799 6800 6801 6802 <div class="twt-widget-paymentshipping is-footer d-flex"> 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 <div class="footer-logo is-payment-logo twt-order-1"> 6818 <a href="/#payment" 6819 title="PayPal" 6820 > 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 <img src="https://www.tekoplan-planen.shop/media/b5/af/44/1765461579/swag_paypal_paypal.svg?ts=1765461579" class="footer-logo-image" alt="" height="45" loading="lazy" /> 6832 6833 <span class="visually-hidden">PayPal</span> 6834 6835 </a> 6836 </div> 6837 6838 <div class="footer-logo is-payment-logo twt-order-1"> 6839 <a href="/#payment" 6840 title="Apple Pay" 6841 > 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 <img src="https://www.tekoplan-planen.shop/media/a5/15/5e/1787736492/applepay-icon.svg?ts=1787736492" class="footer-logo-image" alt="" height="45" loading="lazy" /> 6853 6854 <span class="visually-hidden">Apple Pay</span> 6855 6856 </a> 6857 </div> 6858 6859 <div class="footer-logo is-payment-logo twt-order-1"> 6860 <a href="/#payment" 6861 title="Klarna" 6862 > 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 <img src="https://www.tekoplan-planen.shop/media/1f/c6/76/1787736495/klarna-icon.svg?ts=1787736495" class="footer-logo-image" alt="" height="45" loading="lazy" /> 6874 6875 <span class="visually-hidden">Klarna</span> 6876 6877 </a> 6878 </div> 6879 6880 <div class="footer-logo is-payment-logo is-fallback-badge twt-order-1"> 6881 <a href="/#payment" 6882 title="CrefoPay - Vorkasse" 6883 > 6884 <span>CrefoPay - Vorkasse</span> 6885 </a> 6886 6887 </div> 6888 6889 <div class="footer-logo is-payment-logo is-fallback-badge twt-order-1"> 6890 <a href="/#payment" 6891 title="Rechnung" 6892 > 6893 <span>Rechnung</span> 6894 </a> 6895 6896 </div> 6897 6898 <div class="footer-logo is-payment-logo is-fallback-badge twt-order-1"> 6899 <a href="/#payment" 6900 title="CrefoPay - Sofort" 6901 > 6902 <span>CrefoPay - Sofort</span> 6903 </a> 6904 6905 </div> 6906 6907 <div class="footer-logo is-payment-logo twt-order-2"> 6908 <a href="/#payment" 6909 title="Später bezahlen" 6910 > 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 <img src="https://www.tekoplan-planen.shop/media/b5/af/44/1765461579/swag_paypal_paypal.svg?ts=1765461579" class="footer-logo-image" alt="" height="45" loading="lazy" /> 6922 6923 <span class="visually-hidden">Später bezahlen</span> 6924 6925 </a> 6926 </div> 6927 6928 <div class="footer-logo is-payment-logo twt-order-3"> 6929 <a href="/#payment" 6930 title="Kredit- oder Debitkarte" 6931 > 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 <img src="https://www.tekoplan-planen.shop/media/eb/34/66/1765461579/swag_paypal_card.svg?ts=1765461579" class="footer-logo-image" alt="" height="45" loading="lazy" /> 6943 6944 <span class="visually-hidden">Kredit- oder Debitkarte</span> 6945 6946 </a> 6947 </div> 6948 6949 <div class="footer-logo is-payment-logo is-fallback-badge twt-order-8"> 6950 <a href="/#payment" 6951 title="Vorkasse" 6952 > 6953 <span>Vorkasse</span> 6954 </a> 6955 6956 </div> 6957 6958 6959 <div class="footer-logo is-payment-logo is-custom-logo"> 6960 <a href="/#payment" 6961 title="Benutzerdefiniertes Bild 1" 6962 > 6963 <img src="https://www.tekoplan-planen.shop/media/d3/51/69/1667994205/twt-amazon-pay.svg?ts=1667994205" 6964 class="footer-logo-image" 6965 alt="" 6966 height="45" 6967 loading="lazy" 6968 > 6969 <span class="visually-hidden">Benutzerdefiniertes Bild 1</span> 6970 </a> 6971 </div> 6972 6973 <div class="footer-logo is-payment-logo is-custom-logo"> 6974 <a href="/#payment" 6975 title="Benutzerdefiniertes Bild 2" 6976 > 6977 <img src="https://www.tekoplan-planen.shop/media/00/c1/e3/1667994227/twt-paypal.svg?ts=1667994227" 6978 class="footer-logo-image" 6979 alt="" 6980 height="45" 6981 loading="lazy" 6982 > 6983 <span class="visually-hidden">Benutzerdefiniertes Bild 2</span> 6984 </a> 6985 </div> 6986 6987 <div class="footer-logo is-payment-logo is-custom-logo"> 6988 <a href="/#payment" 6989 title="Benutzerdefiniertes Bild 3" 6990 > 6991 <img src="https://www.tekoplan-planen.shop/media/0a/de/59/1667994240/twt-custom-invoice.svg?ts=1667994240" 6992 class="footer-logo-image" 6993 alt="" 6994 height="45" 6995 loading="lazy" 6996 > 6997 <span class="visually-hidden">Benutzerdefiniertes Bild 3</span> 6998 </a> 6999 </div> 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 <div class="footer-logo is-shipping-logo twt-order-1"> 7015 <a href="/#shipping" 7016 title="Standard GLS Versand" 7017 > 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 <img src="https://www.tekoplan-planen.shop/media/91/47/bc/1769677553/deutsc
7028hland.svg?ts=1769677553" class="footer-logo-image" alt="" height="45" loading="lazy" /> 7029 7030 <span class="visually-hidden">Standard GLS Versand</span> 7031 7032 </a> 7033 </div> 7034 7035 <div class="footer-logo is-shipping-logo twt-order-3"> 7036 <a href="/#shipping" 7037 title="Standard GLS Versand Ãsterreich" 7038 > 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 <img src="https://www.tekoplan-planen.shop/media/53/49/1a/1769677498/oesterreich.svg?ts=1769677498" class="footer-logo-image" alt="" height="45" loading="lazy" /> 7050 7051 <span class="visually-hidden">Standard GLS Versand Ãsterreich</span> 7052 7053 </a> 7054 </div> 7055 7056 <div class="footer-logo is-shipping-logo twt-order-4"> 7057 <a href="/#shipping" 7058 title="Standard GLS Versand Schweiz" 7059 > 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 <img src="https://www.tekoplan-planen.shop/media/1e/c6/01/1769677482/schweiz.svg?ts=1769677482" class="footer-logo-image" alt="" height="45" loading="lazy" /> 7071 7072 <span class="visually-hidden">Standard GLS Versand Schweiz</span> 7073 7074 </a> 7075 </div> 7076 7077 <div class="footer-logo is-shipping-logo twt-order-6"> 7078 <a href="/#shipping" 7079 title="Standard GLS Versand Niederlande" 7080 > 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 <img src="https://www.tekoplan-planen.shop/media/27/b4/ef/1769677508/niederlande.svg?ts=1769677508" class="footer-logo-image" alt="" height="45" loading="lazy" /> 7092 7093 <span class="visually-hidden">Standard GLS Versand Niederlande</span> 7094 7095 </a> 7096 </div> 7097 7098 <div class="footer-logo is-shipping-logo twt-order-7"> 7099 <a href="/#shipping" 7100 title="Standard GLS Versand Belgien" 7101 > 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 <img src="https://www.tekoplan-planen.shop/media/6b/97/b6/1769677545/belgien.svg?ts=1769677545" class="footer-logo-image" alt="" height="45" loading="lazy" /> 7113 7114 <span class="visually-hidden">Standard GLS Versand Belgien</span> 7115 7116 </a> 7117 </div> 7118 7119 <div class="footer-logo is-shipping-logo twt-order-8"> 7120 <a href="/#shipping" 7121 title="Standard GLS Versand Frankreich" 7122 > 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 <img src="https://www.tekoplan-planen.shop/media/9c/e5/8c/1769677538/frankreich.svg?ts=1769677538" class="footer-logo-image" alt="" height="45" loading="lazy" /> 7134 7135 <span class="visually-hidden">Standard GLS Versand Frankreich</span> 7136 7137 </a> 7138 </div> 7139 7140 <div class="footer-logo is-shipping-logo twt-order-9"> 7141 <a href="/#shipping" 7142 title="Standard GLS Versand Italien" 7143 > 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 <img src="https://www.tekoplan-planen.shop/media/48/2e/9f/1769677530/italien.svg?ts=1769677530" class="footer-logo-image" alt="" height="45" loading="lazy" /> 7155 7156 <span class="visually-hidden">Standard GLS Versand Italien</span> 7157 7158 </a> 7159 </div> 7160 7161 <div class="footer-logo is-shipping-logo twt-order-10"> 7162 <a href="/#shipping" 7163 title="Standard GLS Versand Liechtenstein" 7164 > 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 <img src="https://www.tekoplan-planen.shop/media/17/02/8f/1769677522/liechtenstein.svg?ts=1769677522" class="footer-logo-image" alt="" height="45" loading="lazy" /> 7176 7177 <span class="visually-hidden">Standard GLS Versand Liechtenstein</span> 7178 7179 </a> 7180 </div> 7181 7182 <div class="footer-logo is-shipping-logo twt-order-11"> 7183 <a href="/#shipping" 7184 title="Standard GLS Versand Luxemburg" 7185 > 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 <img src="https://www.tekoplan-planen.shop/media/2a/84/ac/1769677516/luxemburg.svg?ts=1769677516" class="footer-logo-image" alt="" height="45" loading="lazy" /> 7197 7198 <span class="visually-hidden">Standard GLS Versand Luxemburg</span> 7199 7200 </a> 7201 </div> 7202 7203 <div class="footer-logo is-shipping-logo twt-order-12"> 7204 <a href="/#shipping" 7205 title="Standard GLS Versand Polen" 7206 > 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 <img src="https://www.tekoplan-planen.shop/media/0e/46/9b/1769677489/polen.svg?ts=1769677489" class="footer-logo-image" alt="" height="45" loading="lazy" /> 7218 7219 <span class="visually-hidden">Standard GLS Versand Polen</span> 7220 7221 </a> 7222 </div> 7223 7224 <div class="footer-logo is-shipping-logo twt-order-12"> 7225 <a href="/#shipping" 7226 title="Standard GLS Versand Tschechien" 7227 > 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 <img src="https://www.tekoplan-planen.shop/media/b8/a1/42/1769677470/tschechien.svg?ts=1769677470" class="footer-logo-image" alt="" height="45" loading="lazy" /> 7239 7240 <span class="visually-hidden">Standard GLS Versand Tschechien</span> 7241 7242 </a> 7243 </div> 7244 7245 7246 7247 <div class="footer-logo is-shipping-logo is-custom-logo"> 7248 <a href="/#shipping" 7249 title="Benutzerdefiniertes Bild 2" 7250 > 7251 <img src="https://www.tekoplan-planen.shop/media/60/1e/a2/1667994292/twt-dhl.svg?ts=1667994292" 7252 class="footer-logo-image" 7253 alt="" 7254 height="45" 7255 loading="lazy" 7256 > 7257 <span class="visually-hidden">Benutzerdefiniertes Bild 2</span> 7258 </a> 7259 </div> 7260 7261 <div class="footer-logo is-shipping-logo is-custom-logo"> 7262 <a href="/#shipping" 7263 title="Benutzerdefiniertes Bild 3" 7264 > 7265 <img src="https://www.tekoplan-planen.shop/media/3d/79/26/1667994298/twt-dachser.svg?ts=1667994298" 7266 class="footer-logo-image" 7267 alt="" 7268 height="45" 7269 loading="lazy" 7270 > 7271 <span class="visually-hidden">Benutzerdefiniertes Bild 3</span> 7272 </a> 7273 </div>
7274 </div> 7275 </div> 7276 </div> 7277 7278 </div> 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 <div class="twt-footer-column-awards col-md-4 col-xl-3 footer-column-awards footer-column js-footer-column twt-element-awards twt-element-7 last"> 7293 7294 <div class="footer-column-headline footer-headline js-footer-column-headline" 7295 id="collapseFooterAwardsTitle" 7296 role="listitem" 7297 > 7298 Bewusst Einkaufen 7299 7300 <button class="footer-column-toggle btn btn-link btn-link-inline js-collapse-footer-column-trigger" 7301 data-bs-target="#collapseFooterAwards" 7302 data-bs-toggle="collapse" 7303 aria-controls="collapseFooterAwards" 7304 aria-labelledby="collapseFooterAwardsTitle" 7305 aria-expanded="true" 7306 > 7307 7308 7309 7310 7311 7312 7313 <span class="icon icon-plus icon-footer-plus" aria-hidden="true"> 7314 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-plus" fill="#758CA3" fill-rule="evenodd" /></svg> 7315 </span> 7316 7317 7318 7319 7320 7321 7322 7323 7324 <span class="icon icon-minus icon-footer-minus" aria-hidden="true"> 7325 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-minus" fill="#758CA3" fill-rule="evenodd" /></svg> 7326 </span> 7327 7328 </button> 7329 7330 </div> 7331 7332 <div id="collapseFooterAwards" 7333 class="footer-column-content js-footer-column-content collapse" 7334 aria-labelledby="collapseFooterAwardsTitle" 7335 role="listitem" 7336 > 7337 <div class="footer-column-content-inner"> 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 <div class="twt-widget-awards twt-awards is-"> 7359 7360 7361 <div class="twt-awards-container"> 7362 7363 <span class="twt-awards-custom-image-container"> 7364 <img src="https://www.tekoplan-planen.shop/theme/b5da4f959c9c4fa9afc26b2924556339/assets/awards/twt-ssl-siegel.png?1790330373" 7365 alt="twt.widget.awards.sslSeal.alt" 7366 title="twt.widget.awards.sslSeal.title" 7367 class="twt-awards-ssl-secure-image" 7368 width="200" 7369 height="200" 7370 loading="lazy" 7371 > 7372 7373 </span> 7374 7375 7376 7377 7378 7379 7380 </div> 7381 7382 </div> 7383 </div> 7384 </div> 7385 7386 </div> 7387 </div> 7388 7389 7390 <div 7391 id="footerColumnsBottom" 7392 class="row footer-columns last" 7393 data-collapse-footer-columns="true" 7394 role="list" 7395 > 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 <div class="twt-footer-column-communities col-md-12 footer-column-communities footer-column js-footer-column twt-element-communities twt-element-8 first last"> 7410 7411 <div class="footer-column-headline footer-headline js-footer-column-headline" 7412 id="collapseFooterCommunitiesTitle" 7413 role="listitem" 7414 > 7415 Unsere Communities 7416 7417 <button class="footer-column-toggle btn btn-link btn-link-inline js-collapse-footer-column-trigger" 7418 data-bs-target="#collapseFooterCommunities" 7419 data-bs-toggle="collapse" 7420 aria-controls="collapseFooterCommunities" 7421 aria-labelledby="collapseFooterCommunitiesTitle" 7422 aria-expanded="true" 7423 > 7424 7425 7426 7427 7428 7429
7430 <span class="icon icon-plus icon-footer-plus" aria-hidden="true"> 7431 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-plus" fill="#758CA3" fill-rule="evenodd" /></svg> 7432 </span> 7433 7434 7435 7436 7437 7438 7439 7440 7441 <span class="icon icon-minus icon-footer-minus" aria-hidden="true"> 7442 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><use xlink:href="#icons-default-minus" fill="#758CA3" fill-rule="evenodd" /></svg> 7443 </span> 7444 7445 </button> 7446 7447 </div> 7448 7449 <div id="collapseFooterCommunities" 7450 class="footer-column-content js-footer-column-content collapse" 7451 aria-labelledby="collapseFooterCommunitiesTitle" 7452 role="listitem" 7453 > 7454 <div class="footer-column-content-inner"> 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 <div class="twt-widget-communities twt-communities"> 7466 <div class="twt-communities-additional-text"> 7467 <p>Ãber unsere Social-Media-Kanäle halten wir Sie regelmäÃig über Neuigkeiten, Produktinformationen und Entwicklungen rund um PVC-Planen, Abdeckplanen nach MaÃ, Zubehör sowie unseren Planenkonfigurator auf dem Laufenden. <br />Folgen Sie uns und erhalten Sie Einblicke in Projekte, Anwendungen und maÃgeschneiderte Lösungen aus unserer Planenfertigung.</p> 7468 </div> 7469 7470 <ul class="twt-communities-list"> 7471 <li class="twt-communities-item item-facebook"> 7472 <a href="/#facebook" 7473 class="twt-communities-link link-facebook" 7474 title="Besuche uns auf Facebook" 7475 aria-label="Besuche uns auf Facebook" 7476 target="_blank" 7477 rel="noopener nofollow" 7478 > 7479 7480 7481 7482 <span class="twt-social-icon icon icon-themeware icon-facebook icon-square"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40"><g class="color1"><rect x="4" y="4" width="32" height="32" fill="#1877f2"/></g><g class="color2"><path d="M30.13,24l.74-4.84H26.23V16A2.42,2.42,0,0,1,29,13.39h2.11V9.28A25.6,25.6,0,0,0,27.32,9C23.5,9,21,11.26,21,15.46v3.68H16.76V24H21V36h5.23V24Z" fill="#fff"/></g></svg></span> <span class="twt-communities-label visually-hidden"> 7483 Facebook 7484 </span> 7485 </a> 7486 </li> 7487 7488 <li class="twt-communities-item item-instagram"> 7489 <a href="/#instagram" 7490 class="twt-communities-link link-instagram" 7491 title="Schau auf Instagram vorbei" 7492 aria-label="Schau auf Instagram vorbei" 7493 target="_blank" 7494 rel="noopener nofollow" 7495 > 7496 7497 7498 7499 <span class="twt-social-icon icon icon-themeware icon-instagram icon-square"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40"><g class="color1"><rect x="4" y="4" width="32" height="32" fill="#dd2a7b"/></g><g class="color2"><path d="M20,11.8c2.67,0,3,0,4,.06a5.61,5.61,0,0,1,1.86.34,3.33,3.33,0,0,1,1.9,1.9A5.61,5.61,0,0,1,28.14,16c.05,1.05.06,1.37.06,4s0,3-.06,4a5.61,5.61,0,0,1-.34,1.86,3.33,3.33,0,0,1-1.9,1.9,5.61,5.61,0,0,1-1.86.34c-1.05.05-1.37.06-4,.06s-3,0-4-.06a5.61,5.61,0,0,1-1.86-.34,3.33,3.33,0,0,1-1.9-1.9A5.61,5.61,0,0,1,11.86,24c0-1.05-.06-1.37-.06-4s0-3,.06-4a5.61,5.61,0,0,1,.34-1.86,3.33,3.33,0,0,1,1.9-1.9A5.61,5.61,0,0,1,16,11.86c1.05,0,1.37-.06,4-.06M20,10c-2.72,0-3.06,0-4.12.06a7.59,7.59,0,0,0-2.43.46,5.19,5.19,0,0,0-2.93,2.93,7.59,7.59,0,0,0-.46,2.43C10,16.94,10,17.28,10,20s0,3.06.06,4.12a7.59,7.59,0,0,0,.46,2.43,5.19,5.19,0,0,0,2.93,2.93,7.59,7.59,0,0,0,2.43.46c1.06,0,1.4.06,4.12.06s3.06,0,4.12-.06a7.59,7.59,0,0,0,2.43-.46,5.19,5.19,0,0,0,2.93-2.93,7.59,7.59,0,0,0,.46-2.43c0-1.06.06-1.4.06-4.12s0-3.06-.06-4.12a7.59,7.59,0,0,0-.46-2.43,5.19,5.19,0,0,0-2.93-2.93,7.59,7.59,0,0,0-2.43-.46C23.06,10,22.72,10,20,10Z" fill="#fff"/><path d="M20,14.86A5.14,5.14,0,1,0,25.14,20,5.14,5.14,0,0,0,20,14.86Zm0,8.47A3.33,3.33,0,1,1,23.33,20,3.33,3.33,0,0,1,20,23.33Z" fill="#fff"/><circle cx="25.34" cy="14.66" r="1.2" fill="#fff"/></g></svg></span> <span class="twt-communities-label visually-hidden"> 7500 Instagram 7501 </span> 7502 </a> 7503 </li> 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 </ul> 7521 7522 </div> 7523 </div>
7524 </div> 7525 7526 </div> 7527 </div> 7528 7529 7530 </div> 7531 7532 <div class="footer-bottom"> 7533 7534 <div class="container"> 7535 <ul class="footer-service-menu list-unstyled"> <li class="footer-service-menu-item"> 7536 <a class="footer-service-menu-link" 7537 href="" 7538 title="Nützliche Links" 7539 > 7540 Nützliche Links 7541 </a> 7542 </li> 7543 <li class="footer-service-menu-item"> 7544 <a class="footer-service-menu-link" 7545 href="" 7546 title="Planenkonfigurator" 7547 > 7548 Planenkonfigurator 7549 </a> 7550 </li> 7551 </ul> 7552 </div> 7553 7554 7555 <div class="footer-vat"> 7556 7557 7558 7559 7560 <p> 7561 Alle Preise inkl. gesetzl. Mehrwertsteuer zzgl. <a href="/page/cms/92e6d79ac7a14f00a64c1c0d8ccc536e">Versandkosten</a> und ggf. Nachnahmegebühren, wenn nicht anders angegeben. 7562 </p> 7563 </div> 7564 7565 <div class="footer-copyright"> 7566 7567 7568 7569© 2026 Tekoplan GmbH - Der PVC Planen Online Shop - Ihr Spezialist für Planenbau, LKW-Planen, Anhängerplanen, Industrieplanen und individuelle Sonderanfertigungen. Website & Online-Marketing von <a href="https://www.msisdesign.de/">msisdesign â Die Markenagentur</a>. Theme by <a href="https://themeware.design" title="ThemeWare® Shopware Theme" rel="dofollow noopener" target="_blank">ThemeWare®</a> 7570 </div> 7571 </div> 7572 </footer> 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 <div class="scroll-up-container" data-scroll-up="true"> 7584 <div class="scroll-up-button js-scroll-up-button"> 7585 <button class="btn btn-primary" aria-label="Zurück zum Anfang der Seite springen"> 7586 7587 7588 7589 7590 7591 7592 <span class="icon icon-arrow-up icon-sm" aria-hidden="true"> 7593 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="M13 3.4142V23c0 .5523-.4477 1-1 1s-1-.4477-1-1V3.4142l-4.2929 4.293c-.3905.3904-1.0237.3904-1.4142 0-.3905-.3906-.3905-1.0238 0-1.4143l6-6c.3905-.3905 1.0237-.3905 1.4142 0l6 6c.3905.3905.3905 1.0237 0 1.4142-.3905.3905-1.0237.3905-1.4142 0L13 3.4142z" id="icons-default-arrow-up" /></defs><use xlink:href="#icons-default-arrow-up" fill="#758CA3" fill-rule="evenodd" /></svg> 7594 </span> 7595 7596 </button> 7597 </div> 7598 </div> 7599 7600 7601 7602 7603 <div 7604 class="cookie-permission-container" 7605 data-cookie-permission="true" 7606 data-cookie-permission-options="{"autoFocus":true}" 7607 role="region" 7608 tabindex="-1" 7609 aria-label="Cookie-Voreinstellungen"> 7610 <div class="container"> 7611 <div class="row align-items-center"> 7612 <div class="col cookie-permission-content"> 7613 7614 Diese Website verwendet Cookies, um eine bestmögliche Erfahrung bieten zu können. <a href="/page/cms/" title="Mehr Informationen">Mehr Informationen ...</a> 7615 </div> 7616 7617 <div class="col-12 col-md-auto d-flex justify-content-center flex-wrap cookie-permission-actions pe-2">
7618 <span class="cookie-permission-button js-cookie-permission-button order-0"> 7619 <button 7620 type="submit" 7621 class="btn btn-primary"> 7622 Nur technisch notwendige 7623 </button> 7624 </span> 7625 7626 <span class="js-cookie-configuration-button order-1"> 7627 <button 7628 type="submit" 7629 class="btn btn-primary"> 7630 Konfigurieren 7631 </button> 7632 </span> 7633 7634 </div> 7635 </div> 7636 </div> 7637 </div> 7638 7639 7640 7641 7642 <div class="js-pseudo-modal-template"> 7643 <div class="modal modal-lg fade" 7644 tabindex="-1" 7645 role="dialog" 7646 aria-modal="true" 7647 aria-hidden="true" 7648 aria-labelledby="pseudo-modal-title"> 7649 <div class="modal-dialog"> 7650 <div class="modal-content js-pseudo-modal-template-root-element"> 7651 <div class="modal-header only-close"> 7652 <div id="pseudo-modal-title" class="modal-title js-pseudo-modal-template-title-element h5"></div> 7653 7654 <button type="button" 7655 class="btn-close close" 7656 data-bs-dismiss="modal" 7657 aria-label="SchlieÃen"> 7658 </button> 7659 </div> 7660 7661 <div class="modal-body js-pseudo-modal-template-content-element"> 7662 </div> 7663 </div> 7664 </div> 7665 7666 <template class="js-pseudo-modal-back-btn-template"> 7667 7668 <button class="js-pseudo-modal-back-btn btn btn-outline-primary" data-ajax-modal="true" data-url="#" href="#"> 7669 7670 7671 7672 7673 7674 7675 <span class="icon icon-arrow-left icon-sm icon-me-1" aria-hidden="true"> 7676 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><path d="m3.4142 13 4.293 4.2929c.3904.3905.3904 1.0237 0 1.4142-.3906.3905-1.0238.3905-1.4143 0l-6-6c-.3905-.3905-.3905-1.0237 0-1.4142l6-6c.3905-.3905 1.0237-.3905 1.4142 0 .3905.3905.3905 1.0237 0 1.4142L3.4142 11H23c.5523 0 1 .4477 1 1s-.4477 1-1 1H3.4142z" id="icons-default-arrow-left" /></defs><use xlink:href="#icons-default-arrow-left" fill="#758CA3" fill-rule="evenodd" /></svg> 7677 </span> 7678 7679 Zurück 7680 </button> 7681 </template> 7682 </div> 7683 </div> 7684 7685 7686 7687 <div id="twt-data-attributes" class="invisible d-none" 7688 7689 data-twt-header-type="4" 7690 data-twt-header-phone-type="1" 7691 data-twt-top-navigation-type="2" 7692 data-twt-search-type="2" 7693 7694 data-twt-sticky-header="4" data-twt-sticky-breakpoint="6" 7695 data-twt-sticky-cart="2" 7696 data-twt-sticky-container-width="1900" 7697 data-twt-sticky-scroll-top="0" 7698 data-twt-sticky-search="1" 7699 data-twt-sticky-type="1" 7700 7701 7702 7703 7704 data-twt-mobile-sticky-header="2" 7705 7706 ></div> 7707 7708 7709
7709<script> 7710 window.twtCookiePermissionPositioned = false; 7711 </script>
7711 7712 7713 7714 7715 7716 7717 7718 7719 <!-- Custom js code --> 7720 <!-- Google Tag Manager -->
7721<script>
vendor: 327 bytes, lines 7721-7725
7721(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 7722new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 7723j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 7724'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 7725})(window,document,'script','dataLayer','
7725GTM-54RLN39
vendor: 3 bytes, line 7725
7725');
7725</script>
7725 7726<!-- End Google Tag Manager --> 7727 7728<!-- msisdesign: Supportbox niemals auf der Startseite anzeigen -->
7729<script> 7730(function () { 7731 'use strict'; 7732 7733 const path = (window.location.pathname || '/').replace(/\/+$/, '') || '/'; 7734 if (path !== '/') return; 7735 7736 document.documentElement.classList.add('msis-homepage-hide-support'); 7737 7738 const selector = '.msisdesign-configurator-support-v127, section[class*="msisdesign-configurator-support-"]'; 7739 7740 function removeSupport(root) { 7741 if (!root) return; 7742 7743 if (root.nodeType === 1 && root.matches && root.matches(selector)) { 7744 root.remove(); 7745 return; 7746 } 7747 7748 if (root.querySelectorAll) { 7749 root.querySelectorAll(selector).forEach(function (section) { 7750 section.remove(); 7751 }); 7752 } 7753 } 7754 7755 function activateGuard() { 7756 removeSupport(document); 7757 7758 const observer = new MutationObserver(function (mutations) { 7759 mutations.forEach(function (mutation) { 7760 mutation.addedNodes.forEach(function (node) { 7761 removeSupport(node); 7762 }); 7763 }); 7764 }); 7765 7766 observer.observe(document.documentElement, { childList: true, subtree: true }); 7767 7768 /* Nach dem initialen Cookie-/Theme-Rendering ist der Guard nicht mehr noetig. */ 7769 window.setTimeout(function () { 7770 observer.disconnect(); 7771 removeSupport(document); 7772 }, 15000); 7773 } 7774 7775 if (document.readyState === 'loading') { 7776 document.addEventListener('DOMContentLoaded', activateGuard, { once: true }); 7777 } else { 7778 activateGuard(); 7779 } 7780})(); 7781</script>
7781 7782 7783 7784
7785<script> (function(w,d,t,r,u) { var f,n,i; w[u]=w[u]||[],f=function() { var o={ti:"343057985"}; o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad") }, n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function() { var s=this.readyState; s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null) }, i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i) }) (window,document,"script","//bat.bing.com/bat.js","uetq");</script>
7785 7786
7787<script type='module' src='https://widget.accessgo.de/accessGoWidget.js'></script>
7787 7788 7789<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 7789-7790
7789 7790<script async src="https://www.googletagmanager.com/gtag/js?id=
7790G-FEF73WJ5MK
vendor: 12 bytes, line 7790
7790"></script>
7791<script> 7792
vendor: 134 bytes, lines 7792-7796
7792window.dataLayer = window.dataLayer || []; 7793 function gtag(){dataLayer.push(arguments);} 7794 gtag('js', new Date()); 7795 7796 gtag('config', '
7796G-FEF73WJ5MK
vendor: 4 bytes, line 7796
7796');
7797</script>
7797 7798<!-- Matomo -->
7799<script> 7800 var _paq = window._paq = window._paq || []; 7801 7802 (function () { 7803 var u = "https://tekoplanplanenshop.matomo.cloud/"; 7804 _paq.push(['setTrackerUrl', u + 'matomo.php']); 7805 _paq.push(['setSiteId', '1']); 7806 7807 var p = new URLSearchParams(location.search); 7808 7809 function getLower(key){ 7810 var v = p.get(key); 7811 return v ? (""+v).toLowerCase() : ""; 7812 } 7813 7814 // ===== Paid-Erkennung (Google/Microsoft + Matomo Tag Manager mtm_ Parameter) ===== 7815 var utmMedium = getLower('utm_medium'); 7816 var mtmMedium = getLower('mtm_medium'); 7817 7818 var isPaid = 7819 // Click-IDs 7820 p.has('gclid') || p.has('wbraid') || p.has('gbraid') || p.has('msclkid') || 7821 p.has('mtm_gclid') || p.has('mtm_msclkid') || 7822 // Medium (klassisch + MTM) 7823 /^(cpc|ppc|paid|paidsearch|display|remarketing|retargeting|pmax|shopping|affiliate|social_paid)$/i.test(utmMedium) || 7824 /^(cpc|ppc|paid|paidsearch|display|remarketing|retargeting|pmax|shopping|affiliate|social_paid)$/i.test(mtmMedium); 7825 7826 var hint = isPaid ? "SEA (Google Ads / Paid)" : "organische SEO über Agentur"; 7827 7828 // Dimension-ID anpassen (bei dir aktuell 1) 7829 _paq.push(['setCustomDimension', 1, hint]); 7830 7831 _paq.push(['trackPageView']); 7832 _paq.push(['enableLinkTracking']); 7833 7834 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; 7835 g.async=true; g.src='https://cdn.matomo.cloud/tekoplanplanenshop.matomo.cloud/matomo.js'; 7836 s.parentNode.insertBefore(g,s); 7837 })(); 7838</script>
7838 7839<!-- End Matomo Code --> 7840
7841<script> 7842document.addEventListener('DOMContentLoaded', function () { 7843 function markFreeShipping() { 7844 document.querySelectorAll('*').forEach(function (label) { 7845 if (label.children.length > 0) { 7846 return; 7847 } 7848 7849 if (label.textContent.trim() !== 'Versandkosten') { 7850 return; 7851 } 7852 7853 const row = label.parentElement; 7854 7855 if (!row) { 7856 return; 7857 } 7858 7859 const elements = row.querySelectorAll('*'); 7860 7861 elements.forEach(function (element) { 7862 const value = element.textContent 7863 .replace(/\s/g, '') 7864 .replace(',', '.'); 7865 7866 if (value === '0.00â¬' || value === '0.00EUR') { 7867 element.textContent = 'Kostenlos'; 7868 element.classList.add('msis-free-shipping'); 7869 } 7870 }); 7871 }); 7872 } 7873 7874 markFreeShipping(); 7875 7876 const observer = new MutationObserver(function () { 7877 markFreeShipping(); 7878 }); 7879 7880 observer.observe(document.body, { 7881 childList: true, 7882 subtree: true 7883 }); 7884}); 7885</script>
7885 7886
7887<script> 7888document.addEventListener('DOMContentLoaded', function () { 7889 7890 function addPayPalGuestHeadline() { 7891 if (document.getElementById('msis-paypal-guest-headline')) { 7892 return; 7893 } 7894 7895 const buttons = Array.from( 7896 document.querySelectorAll('button, a, [role="button"]') 7897 ); 7898 7899 const paypalButton = buttons.find(function (element) { 7900 return /Direkt\s+zu\s+PayPal/i.test(element.textContent || ''); 7901 }); 7902 7903 if (!paypalButton) { 7904 return; 7905 } 7906 7907 const headline = document.createElement('div'); 7908 headline.id = 'msis-paypal-guest-headline'; 7909 headline.className = 'msis-paypal-guest-headline'; 7910 7911 headline.innerHTML = ` 7912 <div class="msis-paypal-guest-headline__title"> 7913 Schneller zahlen â ohne Registrierung 7914 </div> 7915 <div class="msis-paypal-guest-headline__text"> 7916 Direkt mit PayPal bezahlen, ohne ein Kundenkonto anzulegen. 7917 </div> 7918 `; 7919 7920 paypalButton.insertAdjacentElement('beforebegin', headline); 7921 } 7922 7923 addPayPalGuestHeadline(); 7924 7925 const observer = new MutationObserver(function () { 7926 addPayPalGuestHeadline(); 7927 }); 7928 7929 observer.observe(document.body, { 7930 childList: true, 7931 subtree: true 7932 }); 7933}); 7934</script>
7934 7935
7936<script> 7937document.addEventListener('DOMContentLoaded', function () { 7938 7939 if (!document.body.classList.contains('is-act-cartpage')) { 7940 return; 7941 } 7942 7943 /* ---------------------------------------- 7944 1. Nur echte Produkte im Warenkorb zählen 7945 ---------------------------------------- */ 7946 const productCount = document.querySelectorAll( 7947 '.checkout-product-table .line-item-product' 7948 ).length; 7949 7950 const itemCounter = document.querySelector( 7951 '.cart-main-header-item-counter' 7952 ); 7953 7954 if (itemCounter && productCount > 0) { 7955 itemCounter.textContent = 7956 '(' + productCount + ' Artikel)'; 7957 } 7958 7959 7960 /* ---------------------------------------- 7961 2. Automatischen 5%-Rabatt markieren 7962 ---------------------------------------- */ 7963 document.querySelectorAll('.line-item-promotion').forEach(function (item) { 7964 const label = item.querySelector('.line-item-label'); 7965 7966 if ( 7967 label && 7968 /5\s*%\s*Rabatt/i.test(label.textContent.trim()) 7969 ) { 7970 item.classList.add('msis-fixed-promotion'); 7971 } 7972 }); 7973 7974 7975 /* ---------------------------------------- 7976 3. Produktnummer erst nach Klick anzeigen 7977 ---------------------------------------- */ 7978 const addProductContainer = document.querySelector( 7979 '.cart-add-product-container' 7980 ); 7981 7982 if (addProductContainer) { 7983 const form = addProductContainer.querySelector('form'); 7984 7985 if ( 7986 form && 7987 !addProductContainer.querySelector('.msis-cart-add-toggle') 7988 ) { 7989 form.classList.add('msis-cart-add-product-form'); 7990 7991 const toggle = document.createElement('button'); 7992 7993 toggle.type = 'button'; 7994 toggle.className = 'msis-cart-add-toggle'; 7995 toggle.setAttribute('aria-expanded', 'false'); 7996 toggle.textContent = '+ Artikel per Produktnummer hinzufügen'; 7997 7998 toggle.addEventListener('click', function () { 7999 const isOpen = form.classList.toggle('is-open'); 8000 8001 toggle.setAttribute( 8002 'aria-expanded', 8003 isOpen ? 'true' : 'false' 8004 ); 8005 8006 toggle.textContent = isOpen 8007 ? 'â Produktnummer-Eingabe schlieÃen' 8008 : '+ Artikel per Produktnummer hinzufügen'; 8009 8010 if (isOpen) { 8011 const input = form.querySelector('#addProductInput'); 8012 8013 if (input) { 8014 setTimeout(function () { 8015 input.focus(); 8016 }, 50); 8017 } 8018 } 8019 }); 8020 8021 addProductContainer.insertBefore(toggle, form); 8022 } 8023 } 8024 8025 8026 /* ---------------------------------------- 8027 4. Versanddetails verständlicher benennen 8028 ---------------------------------------- */ 8029 const shippingButton = document.querySelector( 8030 '.cart-shipping-costs-btn' 8031 ); 8032 8033 if (shippingButton) { 8034 const freeShipping = 8035 document.querySelector('.msis-free-shipping'); 8036 8037 if (freeShipping) { 8038 shippingButton.textContent = 8039 'â Kostenloser Standardversand â Details'; 8040 8041 shippingButton.classList.add( 8042 'msis-shipping-free-link' 8043 ); 8044 } else { 8045 shippingButton.textContent = 8046 'Versandinformationen'; 8047 } 8048 } 8049 8050 8051 /* ---------------------------------------- 8052 5. GroÃen PayPal-Ratenbanner links entfernen 8053 ---------------------------------------- */ 8054 document.querySelectorAll( 8055 '.checkout-product-table [data-swag-paypal-installment-banner="true"]' 8056 ).forEach(function (banner) { 8057 const row = banner.closest('.form-row'); 8058 8059 if (row) { 8060 row.classList.add( 8061 'msis-hide-cart-paypal-banner' 8062 ); 8063 } 8064 }); 8065 8066 8067 /* ---------------------------------------- 8068 6. PayPal rechts klar als Gast-Expressweg 8069 kennzeichnen 8070 ---------------------------------------- */ 8071 const paypalExpress = document.querySelector( 8072 '[data-swag-paypal-express-button="true"]' 8073 ); 8074 8075 if ( 8076 paypalExpress && 8077 !document.querySelector('.msis-cart-paypal-headline') 8078 ) { 8079 const headline = document.createElement('div'); 8080 8081 headline.className = 'msis-cart-paypal-headline'; 8082 8083 headline.innerHTML = 8084 '<div class="msis-cart-paypal-headline__title">' + 8085 'Schnell bezahlen â kein Kundenkonto erforderlich.' + 8086 '</div>' + 8087 '<div class="msis-cart-paypal-headline__text">' + 8088 'Direkt mit PayPal bezahlen und ohne Registrierung fortfahren.' + 8089 '</div>'; 8090 8091 paypalExpress.insertAdjacentElement( 8092 'beforebegin', 8093 headline 8094 ); 8095 } 8096 8097}); 8098</script>
8098 8099
8100<script> 8101document.addEventListener('DOMContentLoaded', function () { 8102 8103 if (!document.body.classList.contains('is-act-cartpage')) { 8104 return; 8105 } 8106 8107 if (document.querySelector('.msis-cart-delivery-headline')) { 8108 return; 8109 } 8110 8111 const elements = Array.from( 8112 document.querySelectorAll('div, p, span') 8113 ); 8114 8115 const countdownText = elements.find(function (element) { 8116 return /Bestellen Sie innerhalb von/i.test( 8117 element.textContent || '' 8118 ); 8119 }); 8120 8121 if (!countdownText) { 8122 return; 8123 } 8124 8125 const countdownBox = 8126 countdownText.closest('.alert') || 8127 countdownText.parentElement; 8128 8129 if (!countdownBox) { 8130 return; 8131 } 8132 8133 const headline = document.createElement('div'); 8134 8135 headline.className = 'msis-cart-delivery-headline'; 8136 headline.textContent = 'Schnell geliefert'; 8137 8138 countdownBox.insertAdjacentElement( 8139 'beforebegin', 8140 headline 8141 ); 8142}); 8143</script>
8143 8144
8145<script> 8146(function () { 8147 8148 function cleanText(el) { 8149 return (el.textContent || '') 8150 .replace(/\u00a0/g, ' ') 8151 .replace(/\s+/g, ' ') 8152 .trim(); 8153 } 8154 8155 function isLeaf(el) { 8156 return el && el.children.length === 0; 8157 } 8158 8159 function fixTekoplanOffcanvas() { 8160 8161 const offcanvas = document.querySelector( 8162 '.offcanvas.show, .offcanvas.is-open, .offcanvas' 8163 ); 8164 8165 if (!offcanvas) { 8166 return; 8167 } 8168 8169 /* Nur ausführen, wenn es wirklich der Warenkorb ist */ 8170 if (!/Warenkorb/i.test(offcanvas.textContent || '')) { 8171 return; 8172 } 8173 8174 8175 /* ======================================== 8176 1. Nur echte Produkte zählen 8177 ======================================== */ 8178 8179 let productCount = offcanvas.querySelectorAll( 8180 '.line-item-product' 8181 ).length; 8182 8183 /* Fallback */ 8184 if (!productCount) { 8185 productCount = Array.from( 8186 offcanvas.querySelectorAll('*') 8187 ).filter(function (el) { 8188 return isLeaf(el) && 8189 /^Produkt-Nr\.:/i.test(cleanText(el)); 8190 }).length; 8191 } 8192 8193 if (productCount > 0) { 8194 8195 Array.from(offcanvas.querySelectorAll('*')) 8196 .filter(isLeaf) 8197 .forEach(function (el) { 8198 8199 const text = cleanText(el); 8200 8201 if (/^\d+\s+(Position|Positionen)$/i.test(text)) { 8202 el.textContent = 8203 productCount + ' ' + 8204 (productCount === 1 ? 'Artikel' : 'Artikel'); 8205 } 8206 }); 8207 } 8208 8209 8210 /* ======================================== 8211 2. Rabatt grün + Haken 8212 ======================================== */ 8213 8214 Array.from(offcanvas.querySelectorAll('*')) 8215 .filter(isLeaf) 8216 .forEach(function (el) { 8217 8218 const text = cleanText(el); 8219 8220 if (/^5\s*%\s*Rabatt$/i.test(text)) { 8221 8222 el.textContent = 'â 5% Rabatt'; 8223 8224 el.style.color = '#2f8d52'; 8225 el.style.fontWeight = '700'; 8226 } 8227 }); 8228 8229 8230 /* ======================================== 8231 3. Versandkosten GLS-Text entfernen 8232 ======================================== */ 8233 8234 Array.from(offcanvas.querySelectorAll('*')) 8235 .filter(isLeaf) 8236 .forEach(function (el) { 8237 8238 const text = cleanText(el); 8239 8240 if ( 8241 /^Versandkosten\s*\(Standard GLS Versand\)$/i.test(text) 8242 ) { 8243 el.textContent = 'Versandkosten'; 8244 } 8245 }); 8246 8247 8248 /* ======================================== 8249 4. 0,00 ⬠Versand -> â Kostenlos 8250 ======================================== */ 8251 8252 const shippingLabels = Array.from( 8253 offcanvas.querySelectorAll('*') 8254 ).filter(function (el) { 8255 return isLeaf(el) && 8256 cleanText(el) === 'Versandkosten'; 8257 }); 8258
8259 shippingLabels.forEach(function (label) { 8260 8261 const row = 8262 label.closest('dl, .row, .summary-value, .cart-aside-summary') || 8263 label.parentElement; 8264 8265 if (!row) { 8266 return; 8267 } 8268 8269 Array.from(row.querySelectorAll('*')) 8270 .filter(isLeaf) 8271 .forEach(function (el) { 8272 8273 const text = cleanText(el); 8274 8275 if (/^\+?\s*0,00\s*â¬$/.test(text)) { 8276 8277 el.textContent = 'â Kostenlos'; 8278 8279 el.style.color = '#2f8d52'; 8280 el.style.fontWeight = '700'; 8281 } 8282 }); 8283 }); 8284 } 8285 8286 8287 /* Offcanvas wird dynamisch geladen */ 8288 let timer = null; 8289 8290 function scheduleFix() { 8291 clearTimeout(timer); 8292 8293 timer = setTimeout(function () { 8294 fixTekoplanOffcanvas(); 8295 }, 100); 8296 } 8297 8298 document.addEventListener('DOMContentLoaded', scheduleFix); 8299 8300 const observer = new MutationObserver(scheduleFix); 8301 8302 observer.observe(document.body, { 8303 childList: true, 8304 subtree: true 8305 }); 8306 8307})(); 8308</script>
8308 8309
8310<script> 8311(function () { 8312 8313 function cleanText(el) { 8314 return (el.textContent || '') 8315 .replace(/\u00a0/g, ' ') 8316 .replace(/\s+/g, ' ') 8317 .trim(); 8318 } 8319 8320 function getCartOffcanvas() { 8321 return Array.from(document.querySelectorAll('.offcanvas')) 8322 .find(function (el) { 8323 return /Warenkorb/i.test(el.textContent || ''); 8324 }); 8325 } 8326 8327 function isVisible(el) { 8328 if (!el) { 8329 return false; 8330 } 8331 8332 const rect = el.getBoundingClientRect(); 8333 8334 return rect.width > 100 && 8335 rect.right > 0 && 8336 rect.left < window.innerWidth; 8337 } 8338 8339 8340 function optimizeOffcanvas() { 8341 8342 const offcanvas = getCartOffcanvas(); 8343 8344 if (!offcanvas) { 8345 document.body.classList.remove( 8346 'msis-cart-offcanvas-open' 8347 ); 8348 return; 8349 } 8350 8351 8352 /* ===================================== 8353 1. Rabatt kompakt 8354 ===================================== */ 8355 8356 Array.from(offcanvas.querySelectorAll('*')).forEach(function (el) { 8357 8358 if ( 8359 el.children.length === 0 && 8360 /^â?\s*5\s*%\s*Rabatt$/i.test(cleanText(el)) 8361 ) { 8362 8363 el.textContent = 'â 5 % Rabatt'; 8364 el.classList.add('msis-offcanvas-discount'); 8365 8366 const promotion = 8367 el.closest('.line-item-promotion') || 8368 el.closest('.line-item'); 8369 8370 if (promotion) { 8371 8372 const image = promotion.querySelector( 8373 '.line-item-info-img' 8374 ); 8375 8376 const remove = promotion.querySelector( 8377 '.line-item-remove' 8378 ); 8379 8380 if (image) { 8381 image.style.display = 'none'; 8382 } 8383 8384 if (remove) { 8385 remove.style.display = 'none'; 8386 } 8387 8388 promotion.classList.add( 8389 'msis-offcanvas-promotion-compact' 8390 ); 8391 } 8392 } 8393 }); 8394 8395 8396 /* ===================================== 8397 2. "Standard GLS Versand" entfernen 8398 ===================================== */ 8399 8400 Array.from(offcanvas.querySelectorAll('*')).forEach(function (el) { 8401 8402 if ( 8403 el.children.length === 0 && 8404 /Standard GLS Versand/i.test(cleanText(el)) 8405 ) { 8406 el.style.display = 'none'; 8407 } 8408 }); 8409 8410 8411 /* ===================================== 8412 3. Kostenlos direkt neben Versandkosten 8413 ===================================== */ 8414 8415 const shippingLabel = Array.from( 8416 offcanvas.querySelectorAll('*') 8417 ).find(function (el) { 8418 8419 return el.children.length === 0 && 8420 cleanText(el) === 'Versandkosten'; 8421 }); 8422 8423 const freeValue = Array.from( 8424 offcanvas.querySelectorAll('*') 8425 ).find(function (el) { 8426 8427 return el.children.length === 0 && 8428 /^â?\s*Kostenlos$/i.test(cleanText(el)); 8429 }); 8430 8431 8432 if (shippingLabel && freeValue) { 8433 8434 const labelHost = shippingLabel.parentElement; 8435 8436 if (labelHost) { 8437 8438 labelHost.classList.add( 8439 'msis-offcanvas-shipping-row' 8440 ); 8441 8442 let inlineFree = labelHost.querySelector( 8443 '.msis-offcanvas-free-inline' 8444 ); 8445 8446 if (!inlineFree) { 8447 8448 inlineFree = document.createElement('span'); 8449 8450 inlineFree.className = 8451 'msis-offcanvas-free-inline'; 8452 8453 inlineFree.textContent = 'â Kostenlos'; 8454 8455 labelHost.appendChild(inlineFree); 8456 } 8457 8458 /* 8459 * ursprüngliche untere Kostenlos-Zeile 8460 * nur ausblenden, wenn sie nicht unser 8461 * neues Inline-Element ist 8462 */ 8463 if ( 8464 !freeValue.classList.contains( 8465 'msis-offcanvas-free-inline' 8466 ) 8467 ) {
8468 freeValue.style.display = 'none'; 8469 } 8470 } 8471 } 8472 8473 8474 /* ===================================== 8475 4. Trusted Shops nur bei offenem 8476 Warenkorb ausblenden 8477 ===================================== */ 8478 8479 if (isVisible(offcanvas)) { 8480 document.body.classList.add( 8481 'msis-cart-offcanvas-open' 8482 ); 8483 } else { 8484 document.body.classList.remove( 8485 'msis-cart-offcanvas-open' 8486 ); 8487 } 8488 } 8489 8490 8491 let timer; 8492 8493 function scheduleOptimization() { 8494 8495 clearTimeout(timer); 8496 8497 timer = setTimeout( 8498 optimizeOffcanvas, 8499 100 8500 ); 8501 } 8502 8503 8504 document.addEventListener( 8505 'DOMContentLoaded', 8506 scheduleOptimization 8507 ); 8508 8509 document.addEventListener( 8510 'click', 8511 scheduleOptimization 8512 ); 8513 8514 const observer = new MutationObserver( 8515 scheduleOptimization 8516 ); 8517 8518 observer.observe(document.body, { 8519 childList: true, 8520 subtree: true, 8521 attributes: true, 8522 attributeFilter: ['class', 'style'] 8523 }); 8524 8525})(); 8526</script>
8526 8527
8528<script> 8529(function () { 8530 8531 function addDeliveryHeadlines() { 8532 8533 /* 8534 * 1. Normaler Warenkorb 8535 */ 8536 if (document.body.classList.contains('is-act-cartpage')) { 8537 8538 document.querySelectorAll( 8539 '.checkout-aside .netzhirsch-order-countdown' 8540 ).forEach(function (countdown) { 8541 8542 if ( 8543 countdown.previousElementSibling && 8544 countdown.previousElementSibling.classList.contains( 8545 'msis-cart-delivery-headline' 8546 ) 8547 ) { 8548 return; 8549 } 8550 8551 const headline = document.createElement('div'); 8552 8553 headline.className = 8554 'msis-cart-delivery-headline'; 8555 8556 headline.textContent = 8557 'Schnell geliefert'; 8558 8559 countdown.insertAdjacentElement( 8560 'beforebegin', 8561 headline 8562 ); 8563 }); 8564 } 8565 8566 8567 /* 8568 * 2. Offcanvas-Warenkorb 8569 */ 8570 document.querySelectorAll( 8571 '.offcanvas .netzhirsch-order-countdown' 8572 ).forEach(function (countdown) { 8573 8574 if ( 8575 countdown.previousElementSibling && 8576 countdown.previousElementSibling.classList.contains( 8577 'msis-offcanvas-delivery-headline' 8578 ) 8579 ) { 8580 return; 8581 } 8582 8583 const headline = document.createElement('div'); 8584 8585 headline.className = 8586 'msis-offcanvas-delivery-headline'; 8587 8588 headline.textContent = 8589 'Schnell geliefert'; 8590 8591 countdown.insertAdjacentElement( 8592 'beforebegin', 8593 headline 8594 ); 8595 }); 8596 } 8597 8598 8599 let timer; 8600 8601 function scheduleDeliveryHeadlines() { 8602 clearTimeout(timer); 8603 8604 timer = setTimeout(function () { 8605 addDeliveryHeadlines(); 8606 }, 100); 8607 } 8608 8609 8610 if (document.readyState === 'loading') { 8611 document.addEventListener( 8612 'DOMContentLoaded', 8613 scheduleDeliveryHeadlines 8614 ); 8615 } else { 8616 scheduleDeliveryHeadlines(); 8617 } 8618 8619 /* 8620 * Offcanvas wird von Shopware dynamisch geladen 8621 */ 8622 const observer = new MutationObserver( 8623 scheduleDeliveryHeadlines 8624 ); 8625 8626 observer.observe(document.body, { 8627 childList: true, 8628 subtree: true 8629 }); 8630 8631})(); 8632</script>
vendor: 1 bytes, line 8632
8632
8633<script> 8634(function () { 8635 const k3Cache = new Map(); 8636 8637 const FIELD_DEFS = [ 8638 { key: 'Welche Ausführung wünschen Sie?', label: 'Ausführung' }, 8639 { key: 'Breite', label: 'Breite', unit: 'cm' }, 8640 { key: 'Höhe links', label: 'Höhe links', unit: 'cm' }, 8641 { key: 'Höhe rechts', label: 'Höhe rechts', unit: 'cm' }, 8642 { key: 'Einrückung links', label: 'Einrückung links', unit: 'cm' }, 8643 { key: 'Einrückung rechts', label: 'Einrückung rechts', unit: 'cm' }, 8644 { key: 'Welches Material wünschen Sie sich?', label: 'Material' }, 8645 { key: 'Farbe', label: 'Farbe' }, 8646 { key: 'Saum & Ãsen', label: 'Saum & Ãsen' }, 8647 { key: 'Ãsenart', label: 'Ãsenart' }, 8648 { key: 'Ãsenabstand', label: 'Ãsenabstand', unit: 'cm' }, 8649 { key: 'Hohlsaum', label: 'Hohlsaum' }, 8650 { key: 'Faulstreifen', label: 'Faulstreifen' }, 8651 { key: 'Aufrollriemen', label: 'Aufrollriemen' }, 8652 { key: 'Aufrollriemen Farbe', label: 'Farbe Aufrollriemen' }, 8653 { key: 'Haben Sie noch weitere Wünsche?', label: 'Weitere Wünsche' }, 8654 { key: 'Fläche', label: 'Fläche', unit: 'm²' }, 8655 { key: 'Gewicht', label: 'Gewicht', unit: 'kg' }, 8656 { key: 'Versandart', label: 'Versandart' } 8657 ]; 8658 8659 function cleanText(value) { 8660 return String(value || '') 8661 .replace(/\u00a0/g, ' ') 8662 .replace(/\s+/g, ' ') 8663 .trim(); 8664 } 8665 8666 function nodeText(el) { 8667 return cleanText(el && el.textContent); 8668 } 8669 8670 function containsK3(root) { 8671 return !!root && /(?:Produkt-Nr\.|Produktnummer)?\s*:?\s*K3_/i.test(nodeText(root)); 8672 } 8673 8674 function getK3LineItems() { 8675 const products = Array.from(document.querySelectorAll('.line-item-product')) 8676 .filter(containsK3); 8677 8678 if (products.length) { 8679 return products; 8680 } 8681 8682 return Array.from(document.querySelectorAll('.line-item')) 8683 .filter(function (item) { 8684 return containsK3(item) && !item.querySelector('.line-item-product'); 8685 }); 8686 } 8687 8688 function shippingIsFree() { 8689 const scopes = Array.from(document.querySelectorAll( 8690 '.checkout-aside, .cart-aside, .offcanvas, .checkout-main, .checkout' 8691 )); 8692 8693 return scopes.some(function (scope) { 8694 const t = nodeText(scope); 8695 return /Versandkosten[\s\S]{0,80}(?:â\s*)?Kostenlos/i.test(t) || 8696 /Versandkosten[\s\S]{0,80}\+?\s*0,00\s*â¬/i.test(t); 8697 }); 8698 } 8699 8700 function formatValue(def, value) { 8701 let result = cleanText(value) 8702 .replace(/^[:\-ââ]+\s*/, '') 8703 .replace(/\s*[|;]+\s*$/, ''); 8704 8705 if (!result || result === '-' || result === 'â') { 8706 return ''; 8707 } 8708 8709 if (def.unit && /^-?\d+(?:[.,]\d+)?$/.test(result)) { 8710 const number = Number(result.replace(',', '.')); 8711 8712 if (Number.isFinite(number)) { 8713 if (def.unit === 'kg') { 8714 result = number.toLocaleString('de-DE', { 8715 minimumFractionDigits: 0, 8716 maximumFractionDigits: 2 8717 }); 8718 } else if (def.unit === 'm²') { 8719 result = number.toLocaleString('de-DE', { 8720 minimumFractionDigits: 0, 8721 maximumFractionDigits: 3 8722 }); 8723 } else { 8724 result = number.toLocaleString('de-DE', { 8725 maximumFractionDigits: 2 8726 }); 8727 } 8728 } 8729 8730 result += ' ' + def.unit; 8731 } 8732 8733 return result; 8734 } 8735 8736 function fixK3ProductRows() {
8737 getK3LineItems().forEach(function (item) { 8738 item.classList.add('msis-k3-line-item'); 8739 8740 Array.from(item.querySelectorAll('*')).forEach(function (el) { 8741 if (el.children.length !== 0) { 8742 return; 8743 } 8744 8745 if (/^Lieferzeitraum\s*:/i.test(nodeText(el))) { 8746 el.textContent = 'Lieferzeit: ca. 5â10 Werktage'; 8747 el.classList.add('msis-k3-delivery-time'); 8748 } 8749 }); 8750 }); 8751 } 8752 8753 function ensureK3ProductHeadline(box) { 8754 if (!box || box.closest('.checkout-aside, .offcanvas')) { 8755 return; 8756 } 8757 8758 const prev = box.previousElementSibling; 8759 if (prev && prev.classList.contains('msis-k3-product-delivery-headline')) { 8760 return; 8761 } 8762 8763 const headline = document.createElement('div'); 8764 headline.className = 'msis-k3-product-delivery-headline'; 8765 headline.textContent = 'Individuell gefertigt'; 8766 box.insertAdjacentElement('beforebegin', headline); 8767 } 8768 8769 function fixK3DeliveryNotice() { 8770 const productDetail = document.querySelector('.product-detail, .product-detail-buy, main'); 8771 const k3OnProductPage = productDetail && containsK3(productDetail); 8772 8773 const cartItems = Array.from(document.querySelectorAll('.line-item-product')); 8774 const k3Items = cartItems.filter(function (item) { 8775 return containsK3(item); 8776 }); 8777 const normalItems = cartItems.filter(function (item) { 8778 return !containsK3(item); 8779 }); 8780 8781 const k3InCart = k3Items.length > 0; 8782 const mixedCart = k3InCart && normalItems.length > 0; 8783 const hasK3 = !!(k3OnProductPage || k3InCart); 8784 const freeShipping = shippingIsFree(); 8785 8786 document.querySelectorAll( 8787 '.msis-cart-delivery-headline, .msis-offcanvas-delivery-headline' 8788 ).forEach(function (headline) { 8789 if (!headline.dataset.msisOriginalText) { 8790 headline.dataset.msisOriginalText = headline.textContent || 'Schnell geliefert'; 8791 } 8792 8793 if (hasK3) { 8794 const desiredHeadline = mixedCart 8795 ? 'Unterschiedliche Lieferzeiten' 8796 : 'Individuell gefertigt'; 8797 if (headline.textContent !== desiredHeadline) { 8798 headline.textContent = desiredHeadline; 8799 } 8800 headline.classList.add('msis-k3-delivery-headline'); 8801 } else { 8802 if (headline.textContent !== headline.dataset.msisOriginalText) { 8803 headline.textContent = headline.dataset.msisOriginalText; 8804 } 8805 headline.classList.remove('msis-k3-delivery-headline'); 8806 } 8807 }); 8808 8809 document.querySelectorAll('.netzhirsch-order-countdown').forEach(function (box) { 8810 if (hasK3) { 8811 box.classList.add('msis-k3-countdown'); 8812 8813 if (k3OnProductPage && !box.closest('.checkout-aside, .offcanvas')) { 8814 ensureK3ProductHeadline(box); 8815 } 8816 8817 let custom = box.querySelector('.msis-k3-countdown-text'); 8818 if (!custom) { 8819 custom = document.createElement('div'); 8820 custom.className = 'msis-k3-countdown-text'; 8821 box.appendChild(custom); 8822 } 8823 8824 let desiredHtml; 8825 if (mixedCart) { 8826 desiredHtml = 8827 '<span>Ihre Wunschplane wird individuell gefertigt.</span> ' + 8828 '<strong>Lieferzeit ca. 5â10 Werktage.</strong> ' + 8829 '<span>Weitere Artikel können früher geliefert werden.</span>' + 8830 (freeShipping ? ' <span>Der Versand ist kostenfrei.</span>' : ''); 8831 } else { 8832 desiredHtml = 8833 '<span>Ihre Wunschplane wird nach Ihrer Konfiguration gefertigt.</span> ' + 8834 '<strong>Lieferzeit ca. 5â10 Werktage.</strong>' + 8835 (freeShipping 8836 ? ' <span>Und anschlieÃend kostenfrei zu Ihnen nach Hause geliefert.</span>' 8837 : ''); 8838 } 8839 8840 if (custom.innerHTML !== desiredHtml) { 8841 custom.innerHTML = desiredHtml; 8842 } 8843 } else if (box.classList.contains('msis-k3-countdown')) { 8844 box.classList.remove('msis-k3-countdown'); 8845 const custom = box.querySelector('.msis-k3-countdown-text'); 8846 if (custom) { 8847 custom.remove(); 8848 } 8849 } 8850 }); 8851 } 8852 8853 function getK3ProductLink(item) { 8854 const preferred = item.querySelector( 8855 'a.line-item-label[href], .line-item-label a[href], .line-item-info a[href]' 8856 ); 8857 8858 if (preferred && !/checkout|cart|warenkorb|line-item/i.test(preferred.href || '')) { 8859 return preferred; 8860 } 8861 8862 return Array.from(item.querySelectorAll('a[href]')).find(function (link) { 8863 const href = link.href || ''; 8864 return href && !/checkout|cart|warenkorb|line-item/i.test(href); 8865 }) || null; 8866 } 8867 8868 function configurationSourceCandidates(doc) { 8869 const set = new Set(); 8870 8871 doc.querySelectorAll( 8872 '.product-detail-description-text, ' + 8873 '.product-detail-description, ' + 8874 '.product-detail-tabs-content, ' + 8875 '.tab-pane, ' + 8876 '[itemprop="description"], ' + 8877 '.cms-element-text' 8878 ).forEach(function (el) { 8879 set.add(el); 8880 }); 8881 8882 Array.from(doc.querySelectorAll('h1,h2,h3,h4,h5,h6')).forEac
8882h(function (heading) { 8883 if (!/Produktinformationen/i.test(nodeText(heading))) { 8884 return; 8885 } 8886 8887 let parent = heading.parentElement; 8888 for (let i = 0; parent && i < 4; i += 1, parent = parent.parentElement) { 8889 set.add(parent); 8890 } 8891 }); 8892 8893 return Array.from(set).filter(function (el) { 8894 const t = nodeText(el); 8895 const score = FIELD_DEFS.reduce(function (sum, def) { 8896 return sum + (t.toLowerCase().includes(def.key.toLowerCase()) ? 1 : 0); 8897 }, 0); 8898 return score >= 4; 8899 }).sort(function (a, b) { 8900 return nodeText(a).length - nodeText(b).length; 8901 }); 8902 } 8903 8904 function sourceToLines(source) { 8905 const clone = source.cloneNode(true); 8906 8907 clone.querySelectorAll( 8908 'script, style, .product-detail-review, .product-detail-reviews, ' + 8909 '.review-container, [data-review], .product-detail-tabs, ' + 8910 '.product-detail-tab-navigation' 8911 ).forEach(function (el) { 8912 el.remove(); 8913 }); 8914 8915 clone.querySelectorAll('br').forEach(function (br) { 8916 br.replaceWith(clone.ownerDocument.createTextNode('\n')); 8917 }); 8918 8919 clone.querySelectorAll('p,div,li,tr,td,th,dt,dd').forEach(function (el) { 8920 el.appendChild(clone.ownerDocument.createTextNode('\n')); 8921 }); 8922 8923 return (clone.textContent || '') 8924 .replace(/\r/g, '') 8925 .split('\n') 8926 .map(cleanText) 8927 .filter(Boolean) 8928 .filter(function (line) { 8929 return !/^Produktinformationen\b/i.test(line) && 8930 !/^Beschreibung$/i.test(line) && 8931 !/^Bewertungen$/i.test(line); 8932 }); 8933 } 8934 8935 function parseFromLines(lines) { 8936 const values = new Map(); 8937 const defs = FIELD_DEFS.slice().sort(function (a, b) { 8938 return b.key.length - a.key.length; 8939 }); 8940 8941 for (let i = 0; i < lines.length; i += 1) { 8942 const line = lines[i]; 8943 const def = defs.find(function (entry) { 8944 return line.toLowerCase().startsWith(entry.key.toLowerCase()); 8945 }); 8946 8947 if (!def) { 8948 continue; 8949 } 8950 8951 let value = cleanText(line.slice(def.key.length)); 8952 8953 if (!value) { 8954 for (let j = i + 1; j < lines.length; j += 1) { 8955 const next = lines[j]; 8956 const isNextLabel = defs.some(function (entry) { 8957 return next.toLowerCase().startsWith(entry.key.toLowerCase()); 8958 }); 8959 8960 if (isNextLabel) { 8961 break; 8962 } 8963 8964 value = next; 8965 i = j; 8966 break; 8967 } 8968 } 8969 8970 value = formatValue(def, value); 8971 if (value && !values.has(def.key)) { 8972 values.set(def.key, value); 8973 } 8974 } 8975 8976 return values; 8977 } 8978 8979 function parseFromFlatText(source, current) { 8980 const values = current || new Map(); 8981 const flat = nodeText(source); 8982 const occurrences = []; 8983 8984 FIELD_DEFS.forEach(function (def) { 8985 const index = flat.toLowerCase().indexOf(def.key.toLowerCase()); 8986 if (index >= 0) { 8987 occurrences.push({ def: def, index: index }); 8988 } 8989 }); 8990 8991 occurrences.sort(function (a, b) { 8992 return a.index - b.index; 8993 }); 8994 8995 occurrences.forEach(function (entry, index) { 8996 if (values.has(entry.def.key)) { 8997 return; 8998 } 8999 9000 const start = entry.index + entry.def.key.length; 9001 const end = index + 1 < occurrences.length 9002 ? occurrences[index + 1].index 9003 : flat.length; 9004 9005 const value = formatValue(entry.def, flat.slice(start, end)); 9006 if (value) { 9007 values.set(entry.def.key, value); 9008 } 9009 }); 9010 9011 return values; 9012 } 9013 9014 function extractConfiguration(doc) { 9015 const candidates = configurationSourceCandidates(doc); 9016 const source = candidates[0] || doc.body; 9017 if (!source) { 9018 return []; 9019 } 9020
9021 let values = parseFromLines(sourceToLines(source)); 9022 values = parseFromFlatText(source, values); 9023 9024 /* Fallback: wenn der Theme-Container die Beschreibung nicht sauber 9025 trennt, noch einmal den gesamten Body auswerten. */ 9026 if (values.size < 3 && doc.body && source !== doc.body) { 9027 values = parseFromLines(sourceToLines(doc.body)); 9028 values = parseFromFlatText(doc.body, values); 9029 } 9030 9031 return FIELD_DEFS.map(function (def) { 9032 const value = values.get(def.key); 9033 return value ? { label: def.label, value: value } : null; 9034 }).filter(Boolean); 9035 } 9036 9037 async function fetchK3Configuration(url) { 9038 if (k3Cache.has(url)) { 9039 return k3Cache.get(url); 9040 } 9041 9042 try { 9043 const response = await fetch(url, { 9044 credentials: 'same-origin', 9045 }); 9046 9047 if (!response.ok) { 9048 console.warn('K3-Konfiguration: Produktseite nicht erreichbar', response.status, url); 9049 return []; 9050 } 9051 9052 const html = await response.text(); 9053 const doc = new DOMParser().parseFromString(html, 'text/html'); 9054 const rows = extractConfiguration(doc); 9055 9056 if (!rows.length) { 9057 console.warn('K3-Konfiguration: keine Konfigurationsdaten gefunden', url); 9058 } 9059 9060 k3Cache.set(url, rows); 9061 return rows; 9062 } catch (error) { 9063 console.warn('K3-Konfiguration konnte nicht geladen werden', error); 9064 return []; 9065 } 9066 } 9067 9068 function renderConfiguration(rows, isOffcanvas) { 9069 const values = {}; 9070 9071 rows.forEach(function (row) { 9072 values[row.label] = row.value; 9073 }); 9074 9075 /* --------------------------------------- 9076 Kompakte Hauptinformationen 9077 --------------------------------------- */ 9078 const summaryRows = []; 9079 9080 if (values['Ausführung']) { 9081 summaryRows.push({ 9082 label: 'Ausführung', 9083 value: values['Ausführung'] 9084 }); 9085 } 9086 9087 /* MaÃe eindeutig und kundenfreundlich zusammenfassen */ 9088 if (values['Breite'] || values['Höhe links'] || values['Höhe rechts']) { 9089 const dimensions = []; 9090 9091 if (values['Breite']) { 9092 dimensions.push('Breite ' + values['Breite']); 9093 } 9094 9095 if (values['Höhe links']) { 9096 dimensions.push('Höhe links ' + values['Höhe links']); 9097 } 9098 9099 if (values['Höhe rechts']) { 9100 dimensions.push('Höhe rechts ' + values['Höhe rechts']); 9101 } 9102 9103 summaryRows.push({ 9104 label: 'MaÃe', 9105 value: dimensions.join(' · ') 9106 }); 9107 } 9108 9109 if (values['Material']) { 9110 summaryRows.push({ 9111 label: 'Material', 9112 value: values['Material'] 9113 }); 9114 } 9115 9116 if (values['Farbe']) { 9117 summaryRows.push({ 9118 label: 'Farbe', 9119 value: values['Farbe'] 9120 }); 9121 } 9122 9123 if (values['Saum & Ãsen']) { 9124 summaryRows.push({ 9125 label: 'Saum & Ãsen', 9126 value: values['Saum & Ãsen'] 9127 }); 9128 } 9129 9130 const summaryHtml = summaryRows.map(function (row) { 9131 return '<div class="msis-k3-config-main-row">' + 9132 '<span class="msis-k3-config-main-label">' + escapeHtml(row.label) + '</span>' + 9133 '<strong class="msis-k3-config-main-value">' + escapeHtml(row.value) + '</strong>' + 9134 '</div>'; 9135 }).join(''); 9136 9137 /* Bereits oben gezeigte Werte aus dem Detailbereich herausnehmen */ 9138 const hiddenInDetails = [ 9139 'Ausführung', 9140 'Breite', 9141 'Höhe links', 9142 'Höhe rechts', 9143 'Material', 9144 'Farbe', 9145 'Saum & Ãsen' 9146 ]; 9147 9148 const detailRows = rows.filter(function (row) {
9149 return !hiddenInDetails.includes(row.label); 9150 }); 9151 9152 const detailsHtml = detailRows.map(function (row) { 9153 return '<div class="msis-k3-config-detail-row">' + 9154 '<span class="msis-k3-config-detail-label">' + escapeHtml(row.label) + '</span>' + 9155 '<strong class="msis-k3-config-detail-value">' + escapeHtml(row.value) + '</strong>' + 9156 '</div>'; 9157 }).join(''); 9158 9159 return '<div class="msis-k3-config-card">' + 9160 '<div class="msis-k3-configuration-title">Ihre Konfiguration</div>' + 9161 '<div class="msis-k3-config-main">' + summaryHtml + '</div>' + 9162 (detailRows.length 9163 ? '<details class="msis-k3-config-details">' + 9164 '<summary>Weitere Konfigurationsdetails anzeigen</summary>' + 9165 '<div class="msis-k3-config-detail-grid">' + detailsHtml + '</div>' + 9166 '</details>' 9167 : '') + 9168 '</div>'; 9169 } 9170 9171 function escapeHtml(value) { 9172 const div = document.createElement('div'); 9173 div.textContent = value; 9174 return div.innerHTML; 9175 } 9176 9177 async function addConfigurations() { 9178 const items = getK3LineItems(); 9179 9180 for (const item of items) { 9181 if (item.dataset.msisK3ConfigurationLoading === '1' || 9182 item.querySelector('.msis-k3-configuration')) { 9183 continue; 9184 } 9185 9186 const link = getK3ProductLink(item); 9187 if (!link) { 9188 console.warn('K3-Konfiguration: kein Produktlink im Warenkorb gefunden', item); 9189 continue; 9190 } 9191 9192 item.dataset.msisK3ConfigurationLoading = '1'; 9193 9194 try { 9195 const rows = await fetchK3Configuration(link.href); 9196 if (!rows.length) { 9197 continue; 9198 } 9199 9200 const details = item.querySelector('.line-item-details') || 9201 item.querySelector('.line-item-info') || 9202 item; 9203 9204 const wrapper = document.createElement('div'); 9205 wrapper.className = 'msis-k3-configuration'; 9206 wrapper.innerHTML = renderConfiguration(rows, !!item.closest('.offcanvas')); 9207 details.appendChild(wrapper); 9208 } finally { 9209 item.dataset.msisK3ConfigurationLoading = '0'; 9210 } 9211 } 9212 } 9213 9214 function run() { 9215 fixK3ProductRows(); 9216 fixK3DeliveryNotice(); 9217 addConfigurations(); 9218 } 9219 9220 let timer = null; 9221 function schedule() { 9222 if (timer !== null) { 9223 return; 9224 } 9225 timer = setTimeout(function () { 9226 timer = null; 9227 run(); 9228 }, 120); 9229 } 9230 9231 if (document.readyState === 'loading') { 9232 document.addEventListener('DOMContentLoaded', schedule); 9233 } else { 9234 schedule(); 9235 } 9236 9237 const observer = new MutationObserver(schedule); 9238 observer.observe(document.body, { 9239 childList: true, 9240 subtree: true 9241 }); 9242})(); 9243</script>
9243 9244 9245<!-- msisdesign. Warenkorb CRO Feinschliff 2026-08 -->
9246<script> 9247(function () { 9248 'use strict'; 9249 9250 function cleanText(el) { 9251 return (el && el.textContent ? el.textContent : '') 9252 .replace(/\u00a0/g, ' ') 9253 .replace(/\s+/g, ' ') 9254 .trim(); 9255 } 9256 9257 function pushCartEvent(eventName, extra) { 9258 window.dataLayer = window.dataLayer || []; 9259 window.dataLayer.push(Object.assign({ event: eventName }, extra || {})); 9260 } 9261 9262 function scopeHasFreeShipping(scope) { 9263 const root = scope || document; 9264 const text = cleanText(root); 9265 return /Versandkosten[\s\S]{0,100}(?:â\s*)?Kostenlos/i.test(text) || 9266 /Versandkosten[\s\S]{0,100}\+?\s*0,00\s*â¬/i.test(text); 9267 } 9268 9269 /* ------------------------------------------------- 9270 1. Gutscheincode einklappen 9271 ------------------------------------------------- */ 9272 function initCouponToggles(root) { 9273 (root || document).querySelectorAll('form.cart-add-promotion').forEach(function (form) { 9274 if (form.dataset.msisCouponReady === '1') { 9275 return; 9276 } 9277 9278 form.dataset.msisCouponReady = '1'; 9279 form.classList.add('msis-cart-coupon'); 9280 9281 const label = form.querySelector('label[for="addPromotionInput"], label'); 9282 const input = form.querySelector('#addPromotionInput, input[name="code"]'); 9283 const inputGroup = form.querySelector('.checkout-aside-add-code, .input-group'); 9284 9285 if (!input || !inputGroup) { 9286 return; 9287 } 9288 9289 if (label) { 9290 label.classList.add('msis-cart-coupon-label'); 9291 } 9292 inputGroup.classList.add('msis-cart-coupon-fields'); 9293 9294 const toggle = document.createElement('button'); 9295 toggle.type = 'button'; 9296 toggle.className = 'msis-cart-coupon-toggle'; 9297 toggle.setAttribute('aria-expanded', 'false'); 9298 toggle.textContent = '+ Gutscheincode einlösen'; 9299 9300 form.insertBefore(toggle, label || inputGroup); 9301 9302 const mustOpen = !!cleanText(input) || 9303 input.classList.contains('is-invalid') || 9304 !!form.querySelector('.invalid-feedback:not(:empty), .alert-danger'); 9305 9306 function setOpen(open, track) { 9307 form.classList.toggle('is-open', open); 9308 toggle.setAttribute('aria-expanded', open ? 'true' : 'false'); 9309 toggle.textContent = open 9310 ? 'â Gutscheincode schlieÃen' 9311 : '+ Gutscheincode einlösen'; 9312 9313 if (open) { 9314 inputGroup.removeAttribute('aria-hidden'); 9315 if (track) { 9316 pushCartEvent('msis_cart_coupon_open'); 9317 } 9318 } else { 9319 inputGroup.setAttribute('aria-hidden', 'true'); 9320 } 9321 } 9322 9323 setOpen(mustOpen, false); 9324 9325 toggle.addEventListener('click', function () { 9326 const open = !form.classList.contains('is-open'); 9327 setOpen(open, open); 9328 if (open) { 9329 window.setTimeout(function () { input.focus(); }, 50); 9330 } 9331 }); 9332 }); 9333 } 9334 9335 /* ------------------------------------------------- 9336 2. K3-Zusatzdetails beim ersten Rendern schlieÃen 9337 ------------------------------------------------- */ 9338 function closeK3DetailsInitially(root) { 9339 (root || document).querySelectorAll('.msis-k3-config-details').forEach(function (details) { 9340 if (details.dataset.msisInitialStateSet === '1') { 9341 return; 9342 } 9343 9344 details.dataset.msisInitialStateSet = '1'; 9345 details.removeAttribute('open'); 9346 9347 details.addEventListener('toggle', function () { 9348 if (details.open) { 9349 pushCartEvent('msis_cart_config_details_open', { 9350 product_type: 'K3' 9351 }); 9352 } 9353 }); 9354 }); 9355 } 9356 9357 /* ------------------------------------------------- 9358 3. Servicebox im groÃen Warenkorb kompakter 9359 ------------------------------------------------- */ 9360 function compactCartService() { 9361 if (!document.body.classList.contains('is-act-cartpage')) { 9362 return; 9363 } 9364 9365 const sections = Array.from(document.querySelectorAll('section')); 9366 const section = sections.find(function (el) { 9367 return /Probleme beim Bestellen|Fragen zum Produkt/i.test(cleanText(el)); 9368 }); 9369 9370 if (!section || section.dataset.msisCartCompact === '1') { 9371 return; 9372 } 9373 9374 section.dataset.msisCartCompact = '1'; 9375 section.classList.add('msis-cart-service-compact'); 9376 9377 const title = Array.from(section.querySelectorAll('h1,h2,h3,h4,div')).find(function (el) { 9378 return el.children.length === 0 && /Probleme beim Bestellen|Fragen zum Produkt/i.test(cleanText(el)); 9379 }); 9380 if (title) { 9381 title.textContent = 'Fragen zur Bestellung? Wir helfen sofort.'; 9382 title.classList.add('msis-cart-service-title'); 9383 } 9384 9385 const intro = Array.from(section.querySelectorAll('p')).find(function (el) { 9386 return /Kundenservice unterstützt|Fragen zum Produkt|Ihrer Bestellung/i.test(cleanText(el)); 9387 }); 9388 if (intro) { 9389 intro.classList.add('msis-cart-service-hide'); 9390 } 9391 9392 const items = Array.from(section.querySelectorAll('div')).filter(function (el) { 9393 return el.children.length > 0; 9394 }); 9395
9396 items.forEach(function (item) { 9397 const text = cleanText(item); 9398 if (/^Servicezeiten\b/i.test(text) || /Senden Sie uns eine E-Mail/i.test(text)) { 9399 const candidate = item.closest('[class*="__item"]') || item; 9400 candidate.classList.add('msis-cart-service-hide'); 9401 } 9402 }); 9403 9404 section.querySelectorAll('a[href^="mailto:"]').forEach(function (link) { 9405 const item = link.closest('[class*="__item"]'); 9406 if (item) { 9407 item.classList.add('msis-cart-service-hide'); 9408 } 9409 }); 9410 9411 section.querySelectorAll('a').forEach(function (link) { 9412 if (/Individuelles Angebot anfordern/i.test(cleanText(link))) { 9413 const cell = link.closest('[class*="__offer-cell"]') || link; 9414 cell.classList.add('msis-cart-service-hide'); 9415 } 9416 }); 9417 9418 const portrait = section.querySelector('img[alt="Kundenservice"], img'); 9419 if (portrait) { 9420 portrait.classList.add('msis-cart-service-portrait'); 9421 } 9422 9423 const phone = section.querySelector('a[href^="tel:"]'); 9424 if (phone) { 9425 const phoneItem = phone.closest('[class*="__item"]') || phone.parentElement; 9426 if (phoneItem) { 9427 phoneItem.classList.add('msis-cart-service-phone'); 9428 } 9429 } 9430 } 9431 9432 /* ------------------------------------------------- 9433 4. Vorteile direkt unter "Zur Kasse" 9434 ------------------------------------------------- */ 9435 function addCheckoutBenefits(root) { 9436 (root || document).querySelectorAll('.begin-checkout-btn').forEach(function (button) { 9437 const action = button.parentElement; 9438 if (!action) { 9439 return; 9440 } 9441 9442 let benefits = action.nextElementSibling; 9443 if (!benefits || !benefits.classList.contains('msis-checkout-benefits')) { 9444 benefits = document.createElement('div'); 9445 benefits.className = 'msis-checkout-benefits'; 9446 action.insertAdjacentElement('afterend', benefits); 9447 } 9448 9449 const context = button.closest('.checkout-aside-container, .offcanvas, .cart-offcanvas') || document; 9450 const parts = [ 9451 '<span>â Gastbestellung möglich</span>' 9452 ]; 9453 9454 if (scopeHasFreeShipping(context)) { 9455 parts.push('<span>â Kostenloser Versand</span>'); 9456 } 9457 9458 parts.push('<span>â Sichere Zahlung</span>'); 9459 const benefitsHtml = parts.join('<span class="msis-benefit-separator">·</span>'); 9460 if (benefits.innerHTML !== benefitsHtml) { 9461 benefits.innerHTML = benefitsHtml; 9462 } 9463 9464 if (button.dataset.msisCheckoutTracked !== '1') { 9465 button.dataset.msisCheckoutTracked = '1'; 9466 button.addEventListener('click', function () { 9467 pushCartEvent('msis_cart_checkout_click'); 9468 }); 9469 } 9470 }); 9471 } 9472 9473 function runCartCro() { 9474 initCouponToggles(document); 9475 closeK3DetailsInitially(document); 9476 compactCartService(); 9477 addCheckoutBenefits(document); 9478 } 9479 9480 let timer = null; 9481 function scheduleCartCro() { 9482 if (timer !== null) { 9483 return; 9484 } 9485 timer = window.setTimeout(function () { 9486 timer = null; 9487 runCartCro(); 9488 }, 100); 9489 } 9490 9491 if (document.readyState === 'loading') { 9492 document.addEventListener('DOMContentLoaded', scheduleCartCro); 9493 } else { 9494 scheduleCartCro(); 9495 } 9496 9497 const observer = new MutationObserver(scheduleCartCro); 9498 observer.observe(document.body, { 9499 childList: true, 9500 subtree: true 9501 }); 9502})(); 9503</script>
9503 9504 9505 9506<!-- msisdesign. Warenkorb Stabilisierung V3 -->
9507<script> 9508(function () { 9509 'use strict'; 9510 9511 function cleanText(el) { 9512 return (el && el.textContent ? el.textContent : '') 9513 .replace(/\u00a0/g, ' ') 9514 .replace(/\s+/g, ' ') 9515 .trim(); 9516 } 9517 9518 function reconcileCartPage() { 9519 if (!document.body || !document.body.classList.contains('is-act-cartpage')) { 9520 return; 9521 } 9522 9523 const productTable = document.querySelector('.checkout-product-table'); 9524 9525 /* 1. Nur echte Produktpositionen zaehlen */ 9526 if (productTable) { 9527 const productCount = productTable.querySelectorAll('.line-item-product').length; 9528 const counter = document.querySelector('.cart-main-header-item-counter'); 9529 if (counter && productCount > 0) { 9530 const desired = '(' + productCount + ' Artikel)'; 9531 if (cleanText(counter) !== desired) { 9532 counter.textContent = desired; 9533 } 9534 } 9535 9536 /* 2. Automatischen Rabatt kompakt markieren */ 9537 productTable.querySelectorAll('.line-item-promotion').forEach(function (item) { 9538 const label = item.querySelector('.line-item-label'); 9539 if (label && /5\s*%\s*Rabatt/i.test(cleanText(label))) { 9540 item.classList.add('msis-fixed-promotion'); 9541 } 9542 }); 9543 9544 /* 3. Grossen PayPal-Ratenbanner links ausblenden */ 9545 productTable.querySelectorAll('[data-swag-paypal-installment-banner="true"]').forEach(function (banner) { 9546 const row = banner.closest('.form-row') || banner.parentElement; 9547 if (row) { 9548 row.classList.add('msis-hide-cart-paypal-banner'); 9549 } 9550 }); 9551 } 9552 9553 /* 4. Produktnummer-Eingabe einklappen */ 9554 const addProductContainer = document.querySelector('.cart-add-product-container'); 9555 if (addProductContainer) { 9556 const form = addProductContainer.querySelector('form'); 9557 if (form) { 9558 form.classList.add('msis-cart-add-product-form'); 9559 9560 let toggle = addProductContainer.querySelector('.msis-cart-add-toggle'); 9561 if (!toggle) { 9562 toggle = document.createElement('button'); 9563 toggle.type = 'button'; 9564 toggle.className = 'msis-cart-add-toggle'; 9565 toggle.setAttribute('aria-expanded', 'false'); 9566 toggle.textContent = '+ Artikel per Produktnummer hinzufügen'; 9567 addProductContainer.insertBefore(toggle, form); 9568 9569 toggle.addEventListener('click', function () { 9570 const isOpen = form.classList.toggle('is-open'); 9571 toggle.setAttribute('aria-expanded', isOpen ? 'true' : 'false'); 9572 toggle.textContent = isOpen 9573 ? 'â Produktnummer-Eingabe schlieÃen' 9574 : '+ Artikel per Produktnummer hinzufügen'; 9575 9576 if (isOpen) { 9577 const input = form.querySelector('#addProductInput, input'); 9578 if (input) { 9579 window.setTimeout(function () { input.focus(); }, 50); 9580 } 9581 } 9582 }); 9583 } 9584 } 9585 } 9586 9587 /* 5. Versandkosten 0,00 EUR -> Kostenlos */ 9588 const aside = document.querySelector('.checkout-aside, .cart-aside'); 9589 if (aside) { 9590 Array.from(aside.querySelectorAll('*')).forEach(function (label) { 9591 if (label.children.length !== 0 || cleanText(label) !== 'Versandkosten') { 9592 return; 9593 } 9594 9595 const row = label.parentElement; 9596 if (!row) { 9597 return; 9598 } 9599 9600 Array.from(row.querySelectorAll('*')).forEach(function (valueEl) { 9601 if (valueEl.children.length !== 0) { 9602 return; 9603 } 9604 const value = cleanText(valueEl).replace(/\s/g, ''); 9605 if (/^\+?0,00â¬$/i.test(value) || /^\+?0\.00â¬$/i.test(value)) { 9606 valueEl.textContent = 'Kostenlos'; 9607 valueEl.classList.add('msis-free-shipping'); 9608 } 9609 }); 9610 }); 9611 9612 /* 6. Lieferbox immer mit kleiner Ueberschrift versehen */ 9613 aside.querySelectorAll('.netzhirsch-order-countdown').forEach(function (countdown) { 9614 const prev = countdown.previousElementSibling; 9615 if (!prev || !prev.classList.contains('msis-cart-delivery-headline')) { 9616 const headline = document.createElement('div'); 9617 headline.className = 'msis-cart-delivery-headline'; 9618 headline.textContent = 'Schnell geliefert'; 9619 countdown.insertAdjacentElement('beforebegin', headline); 9620 } 9621 }); 9622 } 9623 } 9624 9625 let scheduled = false;
9626 function scheduleReconcile() { 9627 if (scheduled) { 9628 return; 9629 } 9630 scheduled = true; 9631 window.setTimeout(function () { 9632 scheduled = false; 9633 reconcileCartPage(); 9634 }, 80); 9635 } 9636 9637 if (document.readyState === 'loading') { 9638 document.addEventListener('DOMContentLoaded', scheduleReconcile); 9639 } else { 9640 scheduleReconcile(); 9641 } 9642 9643 document.addEventListener('click', scheduleReconcile, true); 9644 9645 const observer = new MutationObserver(scheduleReconcile); 9646 observer.observe(document.documentElement, { 9647 childList: true, 9648 subtree: true 9649 }); 9650})(); 9651</script>
9651 9652 9653<!-- ========================================== 9654 TEKOPLAN Checkout CRO V6 - 24.08.2026 9655 Bundesland bleibt bewusst unveraendert. 9656 ========================================== -->
9657<script> 9658(function () { 9659 'use strict'; 9660 9661 const TEKOPLAN_PHONE_TEXT = '+49 (0)6681 9678446'; 9662 const TEKOPLAN_PHONE_HREF = 'tel:+4966819678446'; 9663 9664 function cleanText(el) { 9665 return (el && el.textContent ? el.textContent : '') 9666 .replace(/\u00a0/g, ' ') 9667 .replace(/\s+/g, ' ') 9668 .trim(); 9669 } 9670 9671 function isCheckoutRegister() { 9672 return window.activeRoute === 'frontend.checkout.register.page' || 9673 /\/checkout\/register(?:[/?#]|$)/i.test(window.location.pathname + window.location.search + window.location.hash); 9674 } 9675 9676 function fixTelephoneNumbers(root) { 9677 (root || document).querySelectorAll('a[href^="tel:"]').forEach(function (link) { 9678 link.setAttribute('href', TEKOPLAN_PHONE_HREF); 9679 9680 const walker = document.createTreeWalker( 9681 link, 9682 NodeFilter.SHOW_TEXT, 9683 null 9684 ); 9685 9686 const nodes = []; 9687 while (walker.nextNode()) { 9688 nodes.push(walker.currentNode); 9689 } 9690 9691 let changed = false; 9692 nodes.forEach(function (node) { 9693 const original = node.nodeValue || ''; 9694 const replaced = original.replace( 9695 /(?:\+49\s*\(?0?\)?\s*|0)[0-9()\s\/-]{7,}/g, 9696 TEKOPLAN_PHONE_TEXT 9697 ); 9698 9699 if (replaced !== original) { 9700 node.nodeValue = replaced; 9701 changed = true; 9702 } 9703 }); 9704 9705 if (!changed && link.children.length === 0) { 9706 link.textContent = TEKOPLAN_PHONE_TEXT; 9707 } 9708 }); 9709 } 9710 9711 function optimizeLoginBlock() { 9712 const heading = document.querySelector('.twt-checkout-header-login'); 9713 if (heading) { 9714 heading.textContent = 'Schon Kunde?'; 9715 heading.classList.add('msis-checkout-login-title'); 9716 } 9717 9718 const toggle = document.querySelector('.register-login-collapse-toogle'); 9719 if (!toggle) { 9720 return; 9721 } 9722 9723 toggle.classList.add('msis-checkout-login-toggle'); 9724 9725 const action = toggle.querySelector('.login-collapse-toggle, a, button, [role="button"]'); 9726 if (action) { 9727 /* Link selbst erhalten, damit Shopwares Collapse weiter funktioniert. */ 9728 if (cleanText(action) !== 'Einloggen') { 9729 action.innerHTML = '<strong>Einloggen</strong>'; 9730 } 9731 action.setAttribute('aria-label', 'Als bestehender Kunde einloggen'); 9732 } 9733 } 9734 9735 function optimizePaypalHeading() { 9736 const checkoutMain = document.querySelector('.checkout-main') || document; 9737 9738 /* PayPal rendert den eigentlichen Button spaeter/intern. Deshalb am 9739 stabilen Shopware-PayPal-Container ansetzen und nicht am Buttontext. */ 9740 const expressContainer = checkoutMain.querySelector( 9741 '[data-swag-paypal-express-button="true"]' 9742 ); 9743 9744 if (!expressContainer) { 9745 return; 9746 } 9747 9748 const paypalRow = expressContainer.closest('.row') || expressContainer; 9749 9750 let headline = document.getElementById('msis-paypal-guest-headline'); 9751 if (!headline) { 9752 headline = document.createElement('div'); 9753 headline.id = 'msis-paypal-guest-headline'; 9754 headline.className = 'msis-paypal-guest-headline'; 9755 paypalRow.insertAdjacentElement('beforebegin', headline); 9756 } 9757 9758 headline.classList.add('msis-checkout-paypal-headline'); 9759 headline.innerHTML = 9760 '<div class="msis-paypal-guest-headline__title">Schnell mit PayPal bestellen</div>' + 9761 '<div class="msis-paypal-guest-headline__text">Ohne Kundenkonto und ohne erneute Eingabe Ihrer Daten.</div>'; 9762 9763 /* Ratenhinweis bewusst behalten, aber unter BEIDE PayPal-Buttons 9764 verschieben. So wirkt er wie eine Zusatzinfo und nicht wie ein 9765 dritter Zahlungsweg. */ 9766 const installment = paypalRow.querySelector( 9767 '[data-swag-paypal-installment-banner="true"]' 9768 ) || checkoutMain.querySelector( 9769 '[data-swag-paypal-installment-banner="true"]' 9770 ); 9771 9772 if (installment) { 9773 installment.classList.add('msis-checkout-paypal-installment-bottom'); 9774 9775 if (installment.parentElement !== paypalRow || paypalRow.lastElementChild !== installment) { 9776 paypalRow.appendChild(installment); 9777 } 9778 } 9779 } 9780 9781 function compactCheckoutService() { 9782 if (!isCheckoutRegister()) { 9783 return; 9784 } 9785 9786 const checkoutMain = document.querySelector('.checkout-main') || document; 9787 let section = checkoutMain.querySelector('.msisdesign-configurator-support-v127'); 9788 9789 if (!section) { 9790 section = Array.from(checkoutMain.querySelectorAll('section, div')).find(function (el) { 9791 const text = cleanText(el); 9792 return /Probleme beim Bestellen|Fragen zum Produkt|Fragen zur Bestellung/i.test(text) && 9793 el.querySelector && el.querySelector('a[href^="tel:"]'); 9794 }); 9795 } 9796 9797 if (!section) { 9798 return; 9799 } 9800 9801 section.classList.add('msis-checkout-service-compact'); 9802 9803 const title = Array.from(section.querySelectorAll('h1,h2,h3,h4,div')).find(function (el) { 9804 return el.children.length === 0 && 9805 /Probleme beim Bestellen|Fragen zum Produkt|Fragen zur Bestellung/i.test(cleanText(el)); 9806 }); 9807 if (title) { 9808 title.textContent = 'Fragen beim Bestellen? Wir helfen sofort.'; 9809 title.classList.add('msis-checkout-service-title'); 9810 } 9811
9812 Array.from(section.querySelectorAll('p')).forEach(function (p) { 9813 if (/Kundenservice unterstuetzt|Kundenservice unterstützt|Fragen zum Produkt|Ihrer Bestellung/i.test(cleanText(p))) { 9814 p.classList.add('msis-checkout-service-hide'); 9815 } 9816 }); 9817 9818 section.querySelectorAll('a[href^="mailto:"]').forEach(function (link) { 9819 const item = link.closest('[class*="__item"]') || link.parentElement; 9820 if (item) { 9821 item.classList.add('msis-checkout-service-hide'); 9822 } 9823 }); 9824 9825 Array.from(section.querySelectorAll('a')).forEach(function (link) { 9826 if (/Individuelles Angebot anfordern/i.test(cleanText(link))) { 9827 const item = link.closest('[class*="__offer-cell"], [class*="__item"]') || link; 9828 item.classList.add('msis-checkout-service-hide'); 9829 } 9830 }); 9831 9832 Array.from(section.querySelectorAll('[class*="__item"], div')).forEach(function (item) { 9833 if (/^Servicezeiten\b/i.test(cleanText(item))) { 9834 const host = item.closest('[class*="__item"]') || item; 9835 host.classList.add('msis-checkout-service-hide'); 9836 } 9837 }); 9838 9839 const phone = section.querySelector('a[href^="tel:"]'); 9840 if (phone) { 9841 phone.setAttribute('href', TEKOPLAN_PHONE_HREF); 9842 phone.textContent = TEKOPLAN_PHONE_TEXT; 9843 const phoneItem = phone.closest('[class*="__item"]') || phone.parentElement; 9844 if (phoneItem) { 9845 phoneItem.classList.add('msis-checkout-service-phone'); 9846 } 9847 } 9848 } 9849 9850 function compactCheckoutAsideProducts() { 9851 const aside = document.querySelector('.checkout-aside'); 9852 if (!aside) { 9853 return; 9854 } 9855 9856 /* Im Checkout bestaetigt die rechte Spalte nur noch die Bestellung. */ 9857 const cartHeadline = Array.from( 9858 aside.querySelectorAll('h1, h2, h3, h4') 9859 ).find(function (el) { 9860 return /^Warenkorb$/i.test(cleanText(el)); 9861 }); 9862 9863 if (cartHeadline) { 9864 cartHeadline.textContent = 'Ihre Bestellung'; 9865 cartHeadline.classList.add('msis-checkout-order-title'); 9866 } 9867 9868 aside.querySelectorAll('.line-item-product').forEach(function (item) { 9869 item.classList.add('msis-checkout-product-compact'); 9870 9871 const details = item.querySelector('.line-item-details-container') || 9872 item.querySelector('.line-item-details'); 9873 9874 if (!details) { 9875 return; 9876 } 9877 9878 let priceLine = details.querySelector('.msis-checkout-line-price'); 9879 if (!priceLine) { 9880 priceLine = document.createElement('div'); 9881 priceLine.className = 'msis-checkout-line-price'; 9882 9883 const config = details.querySelector('.msis-k3-configuration'); 9884 if (config) { 9885 details.insertBefore(priceLine, config); 9886 } else { 9887 details.appendChild(priceLine); 9888 } 9889 } 9890 9891 const quantity = cleanText( 9892 item.querySelector('.line-item-quantity-select-wrapper') 9893 ) || '1'; 9894 9895 const totalPrice = cleanText( 9896 item.querySelector('.line-item-total-price-value') 9897 ) || cleanText( 9898 item.querySelector('.line-item-unit-price-value') 9899 ); 9900 9901 const expected = quantity + ' à ' + totalPrice; 9902 if (cleanText(priceLine) !== expected) { 9903 priceLine.textContent = ''; 9904 9905 const qty = document.createElement('span'); 9906 qty.className = 'msis-checkout-line-qty'; 9907 qty.textContent = quantity + ' Ã'; 9908 9909 const price = document.createElement('strong'); 9910 price.className = 'msis-checkout-line-total'; 9911 price.textContent = totalPrice; 9912 9913 priceLine.appendChild(qty); 9914 priceLine.appendChild(price); 9915 } 9916 }); 9917 } 9918 9919 function optimizePersonalTopRow() { 9920 const account = document.getElementById('-accountType'); 9921 const salutation = document.getElementById('personalSalutation'); 9922 9923 if (!account || !salutation) { 9924 return; 9925 } 9926 9927 const accountGroup = account.closest('.form-group'); 9928 const salutationGroup = salutation.closest('.form-group'); 9929 9930 if (!accountGroup || !salutationGroup) { 9931 return; 9932 } 9933 9934 let row = document.querySelector('.msis-checkout-personal-top-row'); 9935 if (!row) { 9936 row = document.createElement('div'); 9937 row.className = 'row g-2 msis-checkout-personal-top-row'; 9938 accountGroup.parentElement.insertAdjacentElement('beforebegin', row); 9939 } 9940
9941 [accountGroup, salutationGroup].forEach(function (group) { 9942 group.classList.remove('col-md-3', 'col-md-6', 'col-sm-6'); 9943 group.classList.add('col-md-6', 'col-sm-6'); 9944 if (group.parentElement !== row) { 9945 row.appendChild(group); 9946 } 9947 }); 9948 9949 document.querySelectorAll('.register-personal > .row.g-2').forEach(function (oldRow) { 9950 if (oldRow !== row && oldRow.children.length === 0) { 9951 oldRow.remove(); 9952 } 9953 }); 9954 } 9955 9956 function optimizePhoneFields() { 9957 document.querySelectorAll( 9958 '#billingAddressAddressPhoneNumber, #shippingAddressAddressPhoneNumber' 9959 ).forEach(function (input) { 9960 const group = input.closest('.form-group'); 9961 if (!group) { 9962 return; 9963 } 9964 9965 const label = group.querySelector('label[for="' + input.id + '"]'); 9966 if (label) { 9967 label.textContent = 'Telefonnummer (optional)'; 9968 } 9969 9970 let hint = group.querySelector('.msis-checkout-phone-hint'); 9971 if (!hint) { 9972 hint = document.createElement('div'); 9973 hint.className = 'msis-checkout-phone-hint'; 9974 hint.id = input.id + '-msis-hint'; 9975 9976 const feedback = group.querySelector('.form-field-feedback'); 9977 if (feedback) { 9978 feedback.insertAdjacentElement('afterend', hint); 9979 } else { 9980 input.insertAdjacentElement('afterend', hint); 9981 } 9982 } 9983 9984 hint.textContent = 'Gerne angeben â bei Speditionslieferungen kann die Zustellung besser mit Ihnen abgestimmt werden.'; 9985 9986 const describedBy = (input.getAttribute('aria-describedby') || '') 9987 .split(/\s+/) 9988 .filter(Boolean); 9989 if (!describedBy.includes(hint.id)) { 9990 describedBy.push(hint.id); 9991 input.setAttribute('aria-describedby', describedBy.join(' ')); 9992 } 9993 }); 9994 } 9995 9996 function makeCheckoutAsideSticky() { 9997 const aside = document.querySelector('.checkout-aside'); 9998 if (aside) { 9999 aside.classList.add('msis-checkout-aside-sticky'); 10000 } 10001 } 10002 10003 function optimizeGuestAccountOption() { 10004 const control = document.querySelector('.register-guest-control'); 10005 if (!control) { 10006 return; 10007 } 10008 10009 control.classList.add('msis-checkout-account-option'); 10010 10011 const input = control.querySelector('#personalGuest, input[type="checkbox"]'); 10012 if (input) { 10013 input.classList.add('msis-checkout-account-checkbox'); 10014 } 10015 10016 const label = control.querySelector('label'); 10017 if (label) { 10018 label.classList.add('msis-checkout-account-label'); 10019 label.innerHTML = 10020 '<span class="msis-checkout-account-badge">Optional</span>' + 10021 '<span class="msis-checkout-account-text">Kostenloses Kundenkonto anlegen</span>'; 10022 } 10023 10024 const billing = document.querySelector('.register-billing'); 10025 if (billing && control.previousElementSibling !== billing) { 10026 billing.insertAdjacentElement('afterend', control); 10027 } 10028 } 10029 10030 function optimizeCheckoutDiscount() { 10031 document.querySelectorAll('.checkout-aside .line-item-promotion').forEach(function (item) { 10032 const label = item.querySelector('.line-item-label'); 10033 if (!label || !/5\s*%\s*Rabatt/i.test(cleanText(label))) { 10034 return; 10035 } 10036 10037 item.classList.add('msis-checkout-promotion-compact'); 10038 label.textContent = 'â 5 % Rabatt'; 10039 10040 const valueElement = item.querySelector('.line-item-total-price-value'); 10041 const valueText = cleanText(valueElement); 10042 10043 let compactRow = item.querySelector('.msis-checkout-discount-row'); 10044 if (!compactRow) { 10045 compactRow = document.createElement('div'); 10046 compactRow.className = 'msis-checkout-discount-row'; 10047 item.appendChild(compactRow); 10048 } 10049 10050 compactRow.textContent = ''; 10051 10052 const compactLabel = document.createElement('span'); 10053 compactLabel.className = 'msis-checkout-discount-label'; 10054 compactLabel.textContent = 'â 5 % Rabatt'; 10055 10056 const compactValue = document.createElement('strong'); 10057 compactValue.className = 'msis-checkout-discount-value';
10058 compactValue.textContent = valueText; 10059 10060 compactRow.appendChild(compactLabel); 10061 compactRow.appendChild(compactValue); 10062 }); 10063 } 10064 10065 function optimizeSubmitButton() { 10066 let button = document.querySelector('.register-submit button, .register-submit .btn'); 10067 10068 if (!button) { 10069 const form = document.querySelector('form.register-form'); 10070 if (form) { 10071 button = Array.from(form.querySelectorAll('button[type="submit"], input[type="submit"]')).find(function (el) { 10072 return /^Weiter$/i.test(cleanText(el) || el.value || ''); 10073 }); 10074 } 10075 } 10076 10077 if (!button) { 10078 return; 10079 } 10080 10081 if (button.tagName === 'INPUT') { 10082 button.value = 'Weiter zur Bestellübersicht â'; 10083 } else { 10084 button.textContent = 'Weiter zur Bestellübersicht â'; 10085 } 10086 button.classList.add('msis-checkout-continue-btn'); 10087 10088 const host = button.closest('.register-submit') || button.parentElement; 10089 if (host) { 10090 host.classList.remove('offset-md-6'); 10091 host.classList.add('msis-checkout-submit-left'); 10092 } 10093 10094 const existingNote = host ? host.querySelector('.msis-checkout-continue-note') : null; 10095 if (existingNote) { 10096 existingNote.textContent = 'â Noch keine Bestellung â im nächsten Schritt prüfen Sie alle Angaben und Zahlungsarten.'; 10097 } 10098 if (host && !existingNote) { 10099 const note = document.createElement('div'); 10100 note.className = 'msis-checkout-continue-note'; 10101 note.textContent = 'â Noch keine Bestellung â im nächsten Schritt prüfen Sie alle Angaben und Zahlungsarten.'; 10102 host.appendChild(note); 10103 } 10104 } 10105 10106 function markCheckout() { 10107 if (!isCheckoutRegister()) { 10108 return; 10109 } 10110 10111 document.body.classList.add('msis-checkout-register-cro'); 10112 fixTelephoneNumbers(document); 10113 optimizeLoginBlock(); 10114 optimizePaypalHeading(); 10115 compactCheckoutService(); 10116 compactCheckoutAsideProducts(); 10117 optimizePersonalTopRow(); 10118 optimizePhoneFields(); 10119 optimizeGuestAccountOption(); 10120 optimizeCheckoutDiscount(); 10121 makeCheckoutAsideSticky(); 10122 optimizeSubmitButton(); 10123 10124 /* Bundesland bleibt absichtlich unveraendert. */ 10125 } 10126 10127 let scheduled = false; 10128 function schedule() { 10129 if (scheduled) { 10130 return; 10131 } 10132 scheduled = true; 10133 window.setTimeout(function () { 10134 scheduled = false; 10135 markCheckout(); 10136 }, 80); 10137 } 10138 10139 if (document.readyState === 'loading') { 10140 document.addEventListener('DOMContentLoaded', schedule); 10141 } else { 10142 schedule(); 10143 } 10144 10145 const observer = new MutationObserver(schedule); 10146 observer.observe(document.documentElement, { 10147 childList: true, 10148 subtree: true 10149 }); 10150})(); 10151</script>
vendor: 1 bytes, line 10151
10151
10152<script> 10153(function () { 10154 'use strict'; 10155 10156 function optimizeCookieButtons() { 10157 document.querySelectorAll( 10158 '.cookie-permission-container .js-cookie-accept-all-button .btn' 10159 ).forEach(function (button) { 10160 if (button.textContent.trim() !== 'Alle akzeptieren') { 10161 button.textContent = 'Alle akzeptieren'; 10162 } 10163 10164 button.setAttribute( 10165 'aria-label', 10166 'Alle Cookies akzeptieren' 10167 ); 10168 }); 10169 } 10170 10171 if (document.readyState === 'loading') { 10172 document.addEventListener( 10173 'DOMContentLoaded', 10174 optimizeCookieButtons 10175 ); 10176 } else { 10177 optimizeCookieButtons(); 10178 } 10179 10180 const observer = new MutationObserver( 10181 optimizeCookieButtons 10182 ); 10183 10184 observer.observe(document.documentElement, { 10185 childList: true, 10186 subtree: true 10187 }); 10188})(); 10189</script>
10189 10190 10191 10192 10193 10194 <div data-swag-paypal-funding-eligibility="true" 10195 data-swag-paypal-funding-eligibility-options="{"extensions":[],"clientId":"AXOOioYuVgdRSTEEMAB_MBC7t6VALOJxEHmGR9cpTAl2ERdmgm6j4ur7QBkT2LxAO4Yh8Y_wa1znfika","merchantPayerId":"ZY6B65EHBJGGJ","partnerAttributionId":"shopwareAG_Cart_Shopware6_PPCP","languageIso":"de_DE","currency":"EUR","intent":"capture","filteredPaymentMethods":[],"methodEligibilityUrl":"\/paypal\/payment-method-eligibility"}"> 10196 </div> 10197 10198
10198<script> 10199 (() => { 10200 'use strict'; 10201 const endpoint = '/msis-tracking/event'; 10202 const now = () => Date.now(); 10203 const randomId = () => (window.crypto && crypto.randomUUID ? crypto.randomUUID().replaceAll('-', '') : Math.random().toString(36).slice(2) + now().toString(36)); 10204 const getCookie = name => document.cookie.split('; ').find(v => v.startsWith(name + '='))?.split('=')[1] || ''; 10205 let sid = getCookie('tct_sid'); 10206 if (!sid) { 10207 sid = randomId(); 10208 document.cookie = `tct_sid=${sid}; Path=/; Max-Age=2592000; SameSite=Lax`; 10209 } 10210 10211 const params = new URLSearchParams(location.search); 10212 const decodeTrackingValue = value => { 10213 let out = String(value || '').trim(); 10214 for (let i = 0; i < 2; i++) { 10215 const before = out; 10216 try { out = decodeURIComponent(out.replace(/\+/g, ' ')); } catch (_) { out = out.replace(/\+/g, ' '); } 10217 if (out === before) break; 10218 } 10219 return out.trim(); 10220 }; 10221 const storedUtm = (() => { 10222 try { return JSON.parse(localStorage.getItem('tct_utm') || '{}'); } catch (_) { return {}; } 10223 })(); 10224 ['utm_source','utm_medium','utm_campaign','utm_term','utm_content'].forEach(k => { 10225 if (params.get(k)) storedUtm[k] = decodeTrackingValue(params.get(k)); 10226 }); 10227 // Matomo-Kampagnenparameter (mtm_*) werden bei Bedarf in die vorhandenen UTM-Felder gespiegelt. 10228 // Wir spiegeln sie in die vorhandenen UTM-Felder, damit die Herkunft ohne Schema-Ãnderung erhalten bleibt. 10229 if (!storedUtm.utm_source && params.get('mtm_source')) storedUtm.utm_source = decodeTrackingValue(params.get('mtm_source')); 10230 if (!storedUtm.utm_medium && params.get('mtm_medium')) storedUtm.utm_medium = decodeTrackingValue(params.get('mtm_medium')); 10231 if (!storedUtm.utm_campaign && params.get('mtm_campaign')) storedUtm.utm_campaign = decodeTrackingValue(params.get('mtm_campaign')); 10232 if (!storedUtm.utm_content && params.get('mtm_content')) storedUtm.utm_content = decodeTrackingValue(params.get('mtm_content')); 10233 if (!storedUtm.utm_term && params.get('mtm_kwd')) storedUtm.utm_term = decodeTrackingValue(params.get('mtm_kwd')); 10234 try { localStorage.setItem('tct_utm', JSON.stringify(storedUtm)); } catch (_) {} 10235 10236 // Google-Ads-Detailzuordnung (ValueTrack + lesbare msisdesign-Tags). 10237 // First-touch innerhalb der Browser-Speicherung: vorhandene Werte werden nicht von spaeteren Seitenaufrufen ueberschrieben. 10238 const storedAds = (() => { 10239 try { return JSON.parse(localStorage.getItem('tct_ads') || '{}'); } catch (_) { return {}; } 10240 })(); 10241 const adsParamMap = { 10242 msis_campaign: 'msisCampaign', msis_adgroup: 'msisAdgroup', msis_adgroup_id: 'msisAdgroupId', 10243 msis_keyword: 'msisKeyword', msis_match: 'msisMatchtype', msis_matchtype: 'msisMatchtype', msis_device: 'msisDevice' 10244 }; 10245 Object.entries(adsParamMap).forEach(([queryKey, storageKey]) => { 10246 const value = params.get(queryKey); 10247 if (value && !storedAds[storageKey]) storedAds[storageKey] = decodeTrackingValue(value); 10248 }); 10249 try { localStorage.setItem('tct_ads', JSON.stringify(storedAds)); } catch (_) {} 10250 10251 // Meta Ads (Facebook / Instagram): First-touch Kampagnen- und Anzeigenparameter. 10252 // Der automatische fbclid reicht bereits fuer die Erkennung von Meta-Traffic; die 10253 // msis_meta_* Parameter ermoeglichen zusaetzlich eine belastbare Kampagnen-/Creative-Auswertung. 10254 const storedMetaAds = (() => { 10255 try { return JSON.parse(localStorage.getItem('tct_meta_ads') || '{}'); } catch (_) { return {}; } 10256 })(); 10257 const metaParamMap = { 10258 msis_meta_campaign: 'metaCampaign', msis_meta_campaign_name: 'metaCampaignName', 10259 msis_meta_adset: 'metaAdset', msis_meta_adset_name: 'metaAdsetName', 10260 msis_meta_ad: 'metaAd', msis_meta_ad_name: 'metaAdName', 10261 msis_meta_placement: 'metaPlacement', msis_meta_platform: 'metaPlatform' 10262 };
10263 Object.entries(metaParamMap).forEach(([queryKey, storageKey]) => { 10264 const value = params.get(queryKey); 10265 if (value && !storedMetaAds[storageKey]) storedMetaAds[storageKey] = decodeTrackingValue(value).slice(0, 255); 10266 }); 10267 if (params.get('fbclid') && !storedMetaAds.metaClickId) storedMetaAds.metaClickId = params.get('fbclid').slice(0, 255); 10268 const metaSource = (params.get('utm_source') || storedUtm.utm_source || '').toLowerCase(); 10269 if (!storedMetaAds.metaPlatform) { 10270 if (['ig','instagram'].includes(metaSource)) storedMetaAds.metaPlatform = 'Instagram'; 10271 else if (['fb','facebook'].includes(metaSource)) storedMetaAds.metaPlatform = 'Facebook'; 10272 else if (['msg','messenger'].includes(metaSource)) storedMetaAds.metaPlatform = 'Messenger'; 10273 else if (metaSource === 'an') storedMetaAds.metaPlatform = 'Audience Network'; 10274 else if (['meta','meta_ads','meta-ads'].includes(metaSource)) storedMetaAds.metaPlatform = 'Meta'; 10275 } 10276 try { localStorage.setItem('tct_meta_ads', JSON.stringify(storedMetaAds)); } catch (_) {} 10277 10278 // Eigene externe Landingpages: explizite msis_* Parameter bleiben fuer die gesamte Journey erhalten. 10279 // Dadurch ist die Zuordnung auch dann belastbar, wenn der Browser spaeter keinen Referrer mehr mitsendet. 10280 const storedLanding = (() => { 10281 try { return JSON.parse(localStorage.getItem('tct_landing') || '{}'); } catch (_) { return {}; } 10282 })(); 10283 const landingParamMap = { 10284 msis_source: 'landingSource', msis_landing: 'landingId', msis_target: 'landingTarget', msis_cta: 'landingCta' 10285 }; 10286 Object.entries(landingParamMap).forEach(([queryKey, storageKey]) => { 10287 const value = params.get(queryKey); 10288 if (value && !storedLanding[storageKey]) storedLanding[storageKey] = decodeTrackingValue(value).slice(0, 255); 10289 }); 10290 if ((storedLanding.landingSource || '').toLowerCase() === 'landingpage' && !storedLanding.landingReferrer && document.referrer) { 10291 storedLanding.landingReferrer = document.referrer.slice(0, 1000); 10292 } 10293 try { localStorage.setItem('tct_landing', JSON.stringify(storedLanding)); } catch (_) {} 10294 10295 const text = sel => document.querySelector(sel)?.textContent?.trim() || null; 10296 const currentPathLower = location.pathname.toLowerCase(); 10297 const isK3ConfiguratorPage = currentPathLower.includes('/planenkonfigurator'); 10298 const isProductPage = document.body.classList.contains('is-ctl-product') || !!document.querySelector('.product-detail, .product-detail-buy'); 10299 const productNumber = isProductPage ? (text('.product-detail-ordernumber, .product-detail-ordernumber-container, [itemprop="sku"]')?.replace(/^.*?:\s*/, '') || null) : null; 10300 const productName = isProductPage ? (text('h1.product-detail-name, h1') || document.title) : null; 10301 const productId = isProductPage ? (document.querySelector('input[name^="lineItems"][name$="[referencedId]"]')?.value || null) : null; 10302 10303 function visible(el) { 10304 return !!el && el.offsetParent !== null; 10305 } 10306 10307 const isK3Product = !!productNumber && productNumber.toUpperCase().startsWith('K3'); 10308 10309 function hasOldConfiguratorMarkers() { 10310 if (!isProductPage || !productNumber || isK3Product || isK3ConfiguratorPage) return false; 10311 10312 const root = document.querySelector('.product-detail-buy, .product-detail, main') || document.body; 10313 const bodyText = (root.innerText || '').toLowerCase(); 10314 const markers = ['breite', 'höhe', 'konfektionsart', 'sonderausführung', 'zwischensumme', 'gesamtpreis', 'endpreis']; 10315 const markerCount = markers.filter(m => bodyText.includes(m)).length; 10316 const controls = root.querySelectorAll('input:not([type="hidden"]):not([type="submit"]), select, textarea').length; 10317 10318 // Pixeleys/alter Konfigurator: mehrere echte Konfigurationsfelder plus typische Kalkulationsbegriffe. 10319 // So werden normale Produkt-, Kategorie- und CMS-Seiten nicht mehr als "old" markiert. 10320 return markerCount >= 4 && controls >= 3; 10321 } 10322 10323 const oldConfigurator = hasOldConfiguratorMarkers(); 10324 // K3 ist shopuebergreifend der neue Konfigurator. Zusaetzlich gilt die kanonische 10325 // CMS-/Konfiguratorroute /Planenkonfigurator/ als neuer Konfigurator, auch wenn auf 10326 // der Einstiegsseite noch keine Produktnummer im DOM vorhanden ist. 10327 const configuratorType = (isK3Product || isK3ConfiguratorPage) ? 'new' : (oldConfigurator ? 'old' : null); 10328 const startedAt = now(); 10329 let configStarted = false;
10330 let interactionCount = 0; 10331 let cartIntent = false; 10332 let lastPrice = null; 10333 let lastPriceText = null; 10334 10335 function parsePrice(raw) { 10336 if (!raw || !raw.includes('â¬')) return null; 10337 const cleaned = raw.replace(/\u00a0/g, ' '); 10338 const matches = cleaned.match(/(?:\d{1,3}(?:\.\d{3})*|\d+),\d{2}\s*â¬|(?:\d{1,3}(?:,\d{3})*|\d+)\.\d{2}\s*â¬/g); 10339 if (!matches || !matches.length) return null; 10340 10341 const values = matches.map(m => { 10342 const s = m.replace(/\s*â¬/, '').replace(/\s/g, ''); 10343 const normalized = s.includes(',') && s.lastIndexOf(',') > s.lastIndexOf('.') 10344 ? s.replace(/\./g, '').replace(',', '.') 10345 : s.replace(/,/g, ''); 10346 const n = Number(normalized); 10347 return Number.isFinite(n) && n > 0 ? n : null; 10348 }).filter(v => v !== null); 10349 10350 return values.length ? Math.max(...values) : null; 10351 } 10352 10353 function oldConfiguratorPrice() { 10354 if (!oldConfigurator) return null; 10355 const root = document.querySelector('.product-detail-buy, .product-detail, main') || document.body; 10356 const candidates = []; 10357 10358 root.querySelectorAll('div, span, p, td, th, strong, b, label').forEach(el => { 10359 if (!visible(el)) return; 10360 const own = (el.textContent || '').trim(); 10361 if (!/endpreis|gesamtpreis/i.test(own)) return; 10362 10363 const containers = [el, el.parentElement, el.closest('tr'), el.closest('.row'), el.nextElementSibling].filter(Boolean); 10364 containers.forEach(c => { 10365 const t = (c.textContent || '').trim(); 10366 // Nur Kandidaten mit echtem Euro-Zeichen akzeptieren. KG, MaÃe, Prozentwerte etc. sind damit ausgeschlossen. 10367 if (t && t.includes('â¬') && t.length < 800) candidates.push(t); 10368 }); 10369 }); 10370 10371 for (const raw of candidates) { 10372 const p = parsePrice(raw); 10373 if (p !== null) { 10374 lastPriceText = raw.slice(0, 300); 10375 return p; 10376 } 10377 } 10378 return null; 10379 } 10380 10381 function standardProductPrice() { 10382 const selectors = ['.product-detail-price', '[itemprop="price"]', '.product-detail-price-container']; 10383 for (const sel of selectors) { 10384 for (const el of document.querySelectorAll(sel)) { 10385 if (!visible(el)) continue; 10386 const p = parsePrice(el.textContent || el.getAttribute('content') || ''); 10387 if (p !== null) { 10388 lastPriceText = (el.textContent || '').trim().slice(0, 300); 10389 return p; 10390 } 10391 } 10392 } 10393 return null; 10394 } 10395 10396 // 2.0.51: K3/neue Konfiguratoren zeigen den berechneten Preis nicht zwingend 10397 // in Shopwares .product-detail-price. Deshalb zuerst typische Ergebnis-/Summenfelder 10398 // des gerenderten Konfigurators pruefen und erst danach auf den Produktpreis fallen. 10399 function dynamicConfiguratorPrice() { 10400 if (configuratorType !== 'new') return null; 10401 const root = document.querySelector('[class*="configurator"], [class*="konfigurator"], .product-detail-buy, .product-detail, main') || document.body; 10402 const directSelectors = [ 10403 '[class*="total-price"]','[class*="totalPrice"]','[class*="gesamtpreis"]','[class*="endpreis"]', 10404 '[data-total-price]','[data-configurator-price]','[data-price]' 10405 ]; 10406 for (const sel of directSelectors) { 10407 for (const el of root.querySelectorAll(sel)) { 10408 if (!visible(el)) continue; 10409 const raw = (el.textContent || el.getAttribute('data-total-price') || el.getAttribute('data-configurator-price') || el.getAttribute('data-price') || '').trim(); 10410 const p = raw.includes('â¬') ? parsePrice(raw) : (Number(String(raw).replace(',', '.')) || null); 10411 if (p !== null && Number.isFinite(Number(p)) && Number(p) > 0) { 10412 lastPriceText = raw.slice(0,300); 10413 return Number(p); 10414 } 10415 } 10416 } 10417 const candidates = []; 10418 root.querySelectorAll('div,span,p,td,th,strong,b,label').forEach(el => { 10419 if (!visible(el)) return; 10420 const own=(el.textContent||'').replace(/\s+/g,' ').trim(); 10421 if (!/(gesamtpreis|endpreis|gesamtsumme|gesamtbetrag|konfigurationspreis)/i.test(own)) return; 10422 [el,el.parentElement,el.closest('tr'),el.closest('.row'),el.nextElementSibling].filter(
10422Boolean).forEach(c=>{ 10423 const t=(c.textContent||'').replace(/\s+/g,' ').trim(); 10424 if(t.includes('â¬') && t.length<900) candidates.push(t); 10425 }); 10426 }); 10427 for (const raw of candidates) { 10428 const p=parsePrice(raw); 10429 if(p!==null){ lastPriceText=raw.slice(0,300); return p; } 10430 } 10431 return null; 10432 } 10433 10434 function currentPrice() { 10435 if (configuratorType === 'old') return oldConfiguratorPrice(); 10436 if (configuratorType === 'new') return dynamicConfiguratorPrice() ?? standardProductPrice(); 10437 return null; 10438 } 10439 10440 function configurationFieldSnapshot() { 10441 if (!configuratorType) return []; 10442 const root = document.querySelector('.product-detail-buy, .product-detail, main') || document.body; 10443 const allowedLabel = /(breite|width|hoehe|höhe|height|laenge|länge|length|mass|maÃ|groesse|gröÃe|farbe|color|material|qualität|qualitaet|gewicht|gramm|ösen|oesen|saum|rand|konfektion|ausführung|ausfuehrung|art|typ|type|variante|option|ausstattung|befestigung|form|seil|abstand|tür|tuer|fenster|seite|menge|quantity|stück|stueck)/i; 10444 const blocked = /(name|email|e-mail|mail|telefon|phone|adresse|address|strasse|straÃe|ort|city|plz|postal|nachricht|message|firma|company|passwort|password)/i; 10445 const rows = []; 10446 const seen = new Set(); 10447 10448 function labelFor(el) { 10449 const id = el.id || ''; 10450 let label = id ? document.querySelector(`label[for="${CSS.escape(id)}"]`)?.textContent?.trim() : ''; 10451 if (!label) label = el.closest('.form-group, .form-row, .row, .configurator, [class*="config"]')?.querySelector('label')?.textContent?.trim() || ''; 10452 if (!label) label = el.getAttribute('aria-label') || el.getAttribute('data-label') || el.getAttribute('name') || ''; 10453 return label.replace(/\s+/g, ' ').replace(/[:*]+\s*$/, '').trim().slice(0, 100); 10454 } 10455 function valueFor(el) { 10456 if (el instanceof HTMLSelectElement) return el.selectedOptions[0]?.textContent?.trim() || el.value || ''; 10457 if (el instanceof HTMLInputElement && (el.type === 'checkbox' || el.type === 'radio')) { 10458 if (!el.checked) return ''; 10459 const ownLabel = labelFor(el); 10460 return ownLabel || el.value || 'Ja'; 10461 } 10462 return (el.value || '').trim(); 10463 } 10464 10465 root.querySelectorAll('input, select, textarea').forEach(el => { 10466 if (!visible(el)) return; 10467 if (el instanceof HTMLInputElement && ['hidden','submit','button','reset','file','email','tel','password'].includes(el.type)) return; 10468 const label = labelFor(el); 10469 const name = (el.getAttribute('name') || '').trim(); 10470 if (!label || blocked.test(label) || blocked.test(name)) return; 10471 if (!allowedLabel.test(label) && !allowedLabel.test(name)) return; 10472 const value = valueFor(el).replace(/\s+/g, ' ').trim().slice(0, 160); 10473 if (!value || value === '0' || value === '-') return; 10474 const key = `${label.toLowerCase()}|${value.toLowerCase()}`; 10475 if (seen.has(key)) return; 10476 seen.add(key); 10477 rows.push({label, value}); 10478 }); 10479 return rows.slice(0, 30); 10480 } 10481 10482 function serializedConfiguration() { 10483 try { 10484 const rows = configurationFieldSnapshot(); 10485 return rows.length ? JSON.stringify(rows) : null; 10486 } catch (_) { return null; } 10487 } 10488 10489 function saveLastConfiguration(configurationSnapshot = null, priceSnapshot = null) { 10490 if (!configuratorType || !productNumber) return; 10491 try { 10492 localStorage.setItem('tct_last_config', JSON.stringify({ 10493 productId, productNumber, productName, configuratorType, 10494 price: priceSnapshot ?? lastPrice, 10495 configuration: configurationSnapshot ?? serializedConfiguration(), 10496 timestamp: now() 10497 })); 10498 } catch (_) {} 10499 } 10500 10501 function getLastConfiguration() { 10502 try { 10503 const c = JSON.parse(localStorage.getItem('tct_last_config') || 'null'); 10504 if (!c || !c.timestamp || now() - c.timestamp > 86400000) return null; 10505 return c; 10506 } catch (_) { return null; } 10507 } 10508 10509 function payload(event, metadata = {}) { 10510 const configurationSnapshot = configuratorType ? serializedConfiguration() : null; 10511 const p = currentPrice(); 10512 if (p !== null) lastPrice = p; 10513 if (configStarted) saveLastConfiguration(configurationSnapshot, lastPrice); 10514 const contextualEvent = ['offer_form_view','offer_form_submit_attempt','offer_form_validation_error','offer_form_submit_success','offer_form_submit_error','email_click','phone_click','service_phone_click','checkout_click','paypal_express_click','coupon_open','coupon_submit','config_details_open','product_remove','quantity_change','checkout_start','checkout_submit_attempt','checkout_error','order_success','payment_method_snapshot','payment_method_changed'].includes(event); 10515 const prior = contextualEvent ? getLastConfiguration() : null; 10516 return { 10517 event, sessionId: sid, 10518 productId: productId || prior?.productId || null, 10519 productNumber: productNumber || prior?.productNumber || null, 10520 productName: productName || prior?.productName || null, 10521 configuratorType: configuratorType || prior?.configuratorType || null, 10522 price: event === 'order_success' && Number.isFinite(Number(metadata.orderTotal)) 10523 ? Number(metadata.orderTotal) 10524 : (lastPrice ?? prior?.price ?? null), 10525 pageUrl: location.href, referrer: document.referrer || null, 10526 utmSource: storedUtm.utm_source || null, utmMedium: storedUtm.utm_medium || null, 10527 utmCampaign: storedUtm.utm_campaign || null, utmTerm: storedUtm.utm_term || null, 10528 utmContent: storedUtm.utm_content || null, 10529 metadata: Object.assign({ 10530 durationSeconds: Math.round((now() - startedAt) / 1000), 10531 interactionCount, 10532 lastPriceText, 10533 configuration: configuratorType ? (configurationSnapshot || prior?.configuration || null) : (prior?.configuration || null) 10534 }, storedAds, storedMetaAds, storedLanding, metadata) 10535 }; 10536 } 10537 10538 function track(event, metadata = {}, beacon = false) { 10539 const body = JSON.stringify(payload(event, metadata)); 10540 if (beacon && navigator.sendBeacon) { 10541 navigator.sendBeacon(endpoint, new Blob([body], {type:'application/json'})); 10542 return; 10543 } 10544 fetch(endpoint, {method:'POST', headers:{'Content-Type':'application/json','X-Requested-With':'XMLHttpRequest'}, body, keepalive:true, credentials:'same-origin'}).catch(() => {}); 10545 } 10546 10547 // 2.0.87: Shopware-Consent gezielt und datensparsam als Journey-Ereignis erfassen.
10548 // Es werden keine Cookie-Inhalte gespeichert, nur Entscheidung, Quelle und Zeitpunkt. 10549 const consentKey = 'tct_consent_state'; 10550 const consentBannerSelector = '.cookie-permission-container[data-cookie-permission], .cookie-permission-container, .cookie-permission, [data-cookie-permission]'; 10551 function visibleConsentBanner() { 10552 const banner = document.querySelector(consentBannerSelector); 10553 return !!(banner && banner.getClientRects().length && getComputedStyle(banner).display !== 'none'); 10554 } 10555 function detectConsentState() { 10556 const cookie = document.cookie || ''; 10557 // Cookie-Werte werden nur lokal ausgewertet und niemals an den Tracker uebertragen. 10558 if (/(cookie[-_]?preferences|cookie[-_]?consent|consent[-_]?status|cookie[-_]?allowed)/i.test(cookie)) { 10559 if (/(deny|denied|reject|rejected|essential|necessary|technically|required|false|=0)/i.test(cookie)) return 'rejected'; 10560 return 'accepted'; 10561 } 10562 return visibleConsentBanner() ? 'pending' : 'unknown'; 10563 } 10564 function consentSource(el) { 10565 if (!el) return 'auto'; 10566 // Shopware Standard: "Nur technisch notwendige". Der Wrapper ist stabiler als der Buttontext. 10567 if (el.closest && el.closest('.js-cookie-permission-button')) return 'shopware-essential-button'; 10568 if (el.closest && el.closest('.js-cookie-configuration-button')) return 'shopware-configure-button'; 10569 const classes = String(el.className || '').toLowerCase(); 10570 const text = String(el.textContent || el.value || el.getAttribute('aria-label') || '').toLowerCase().replace(/\s+/g, ' ').trim(); 10571 if (/cookie.*(accept.*all|all.*accept)|accept.*all/.test(classes)) return 'accept-button'; 10572 if (/cookie.*(save|confirm)/.test(classes)) return 'configuration-save'; 10573 if (/(nur\s+(technisch\s+)?notwendige|technisch\s+notwendige|nur\s+erforderliche|ablehnen|reject|deny|essential\s+only|necessary\s+only)/.test(text)) return 'shopware-essential-button'; 10574 if (/(alle\s+(cookies\s+)?akzeptieren|alle\s+akzeptieren|akzeptieren|accept\s+all|allow\s+all|zustimmen)/.test(text)) return 'accept-button'; 10575 if (/(konfigurieren|einstellungen|preferences|settings)/.test(text)) return 'shopware-configure-button'; 10576 if (/(auswahl\s+speichern|einstellungen\s+speichern|speichern|save\s+selection|save\s+preferences)/.test(text)) return 'configuration-save'; 10577 return 'consent-control'; 10578 } 10579 function emitConsent(state, source, changed) { 10580 if (!['accepted','rejected','pending'].includes(state)) return; 10581 let previous = ''; try { previous = sessionStorage.getItem(consentKey) || ''; } catch (_) {} 10582 if (previous === state && !changed) return; 10583 const eventName = state === 'accepted' ? 'consent_accepted' : (state === 'rejected' ? 'consent_rejected' : 'consent_banner_seen'); 10584 track(eventName, {consentState:state, consentSource:source || 'auto'}); 10585 if (changed && previous && previous !== state) track('consent_changed', {consentState:state, consentSource:source || 'control'}); 10586 try { sessionStorage.setItem(consentKey, state); } catch (_) {} 10587 } 10588 function inspectConsentBanner(source) { 10589 if (visibleConsentBanner()) emitConsent('pending', source || 'shopware-banner', false); 10590 } 10591 const initialConsent = detectConsentState(); 10592 if (initialConsent === 'pending') emitConsent('pending', 'shopware-banner', false); 10593 else if (initialConsent === 'accepted' || initialConsent === 'rejected') emitConsent(initialConsent, 'existing-consent', false); 10594 // Shopware setzt/blendet den Banner teils erst nach Initialisierung des Storefront-JS ein. 10595 if (document.documentElement && typeof MutationObserver !== 'undefined') { 10596 const consentObserver = new MutationObserver(() => inspectConsentBanner('shopware-banner')); 10597 consentObserver.observe(document.documentElement, {childList:true, subtree:true, attributes:true, attributeFilter:['style','class']}); 10598 window.setTimeout(() => consentObserver.disconnect(), 10000); 10599 } 10600 document.addEventListener('click', ev => { 10601 const el = ev.target && ev.target.closest ? ev.target.closest('button,a,[role=button],input[type=button],input[type=submit]') : null; 10602 if (!el) return; 10603 const src = consentSource(el); 10604 if (src === 'consent-control') return; 10605 if (src === 'shopware-configure-button') { 10606 track('consent_config_opened', {consentState:'pending', consentSource:src}); 10607 return; 10608 } 10609 if (src === 'shopware-essential-button') { 10610 // Dieser Shopware-Button bedeutet bewusst: nur technisch notwendige Cookies. 10611 emitConsent('rejected', src, true); 10612 return; 10613 } 10614 window.setTimeout(() => { 10615 let state = detectConsentState(); 10616 if (state === 'unknown' || state === 'pending') state = src === 'accept-button' ? 'accepted' : 'rejected'; 10617 emitConsent(state, src, true); 10618 }, 120); 10619 }, true); 10620 10621 // 2.0.85: Checkout-Fortschritt datensparsam erfassen. Keine Feldinhalte, nur der erreichte Bereich. 10622 if (location.pathname.toLowerCase().includes('/checkout/')) { 10623 const checkoutStepSeen = new Set(); 10624 function emitCheckoutStep(step, source) { 10625 if (!step || checkoutStepSeen.has(step)) return; 10626 checkoutStepSeen.add(step); 10627 track('checkout_step', {checkoutStep:step, reason:source || 'dom'}); 10628 } 10629 const checkoutPath = location.pathname.toLowerCase(); 10630 if (checkoutPath.includes('/checkout/cart')) emitCheckoutStep('cart', 'route'); 10631 else if (checkoutPath.includes('/checkout/confirm')) emitCheckoutStep('confirm', 'route'); 10632 else if (checkoutPath.includes('/checkout/finish')) emitCheckoutStep('finish', 'route'); 10633 document.addEventListener('focusin', ev => { 10634 const el = ev.target; 10635 if (!el || !el.matches || !el.matches('input,select,textarea')) return;
10636 const key = String((el.name || '') + ' ' + (el.id || '')).toLowerCase(); 10637 if (/(street|zipcode|city|country|address|billing|shippingaddress)/.test(key)) emitCheckoutStep('address', 'field'); 10638 else if (/(shipping|delivery)/.test(key)) emitCheckoutStep('shipping', 'field'); 10639 else if (/(payment)/.test(key)) emitCheckoutStep('payment', 'field'); 10640 }, true); 10641 } 10642 10643 track('page_view'); 10644 if (isProductPage) track('product_view'); 10645 if (isK3ConfiguratorPage && configuratorType === 'new') { 10646 // K3 laeuft in einem fremden iframe. Ein Seitenaufruf ist nur ein Einstieg und 10647 // darf nicht als gestartete/abgeschlossene Konfiguration gewertet werden. 10648 // Die erste belastbare K3-Konfiguration wird serverseitig beim /k3/cart-Handoff erfasst. 10649 track('k3_entry', {entryRoute:'planenkonfigurator', measurementModel:'iframe_entry_only'}); 10650 } 10651 10652 // msisdesign.-Banner/Support-Plugin: gesonderte Wirksamkeitsmessung. 10653 // Die Erkennung erfolgt ausschliesslich ueber die vom Banner-Plugin ausgegebenen 10654 // DOM-Klassen. Ist das Plugin nicht aktiv/gerendert, entstehen keine Events. 10655 const msisBanner = document.querySelector('[class*="msisdesign-configurator-banner-v"]'); 10656 const msisSupport = document.querySelector('[class*="msisdesign-configurator-support-v"]'); 10657 function msisComponentVersion(el) { 10658 if (!el) return null; 10659 const cls = String(el.className || ''); 10660 const m = cls.match(/msisdesign-configurator-(?:banner|support)-v(\d+)/i); 10661 return m ? m[1] : null; 10662 } 10663 function trackMsisImpression(el, eventName, component) { 10664 if (!el || typeof IntersectionObserver === 'undefined') return; 10665 const key = 'tct_' + eventName + '_' + location.pathname; 10666 try { if (sessionStorage.getItem(key) === '1') return; } catch (_) {} 10667 let timer = null; 10668 const io = new IntersectionObserver(entries => { 10669 const entry = entries[0]; 10670 if (entry && entry.isIntersecting && entry.intersectionRatio >= 0.5) { 10671 if (!timer) timer = setTimeout(() => { 10672 track(eventName, { 10673 component, 10674 componentVersion: msisComponentVersion(el), 10675 visibilityThreshold: 0.5, 10676 visibleMilliseconds: 600 10677 }); 10678 try { sessionStorage.setItem(key, '1'); } catch (_) {} 10679 io.disconnect(); 10680 timer = null; 10681 }, 600); 10682 } else if (timer) { 10683 clearTimeout(timer); 10684 timer = null; 10685 } 10686 }, {threshold:[0,0.5,1]}); 10687 io.observe(el); 10688 } 10689 trackMsisImpression(msisBanner, 'msis_banner_impression', 'configurator_switch_banner'); 10690 trackMsisImpression(msisSupport, 'msis_support_impression', 'configurator_support'); 10691 10692 // msisdesign.-Rescue-Popups in Warenkorb und Checkout. Nur wenn das separate 10693 // Banner/Conversion-Plugin die Komponente wirklich ausgibt, entstehen Events. 10694 const msisCartRescue = document.querySelector('[class*="msisdesign-cart-rescue-v"]'); 10695 const msisCheckoutRescue = document.querySelector('[class*="msisdesign-checkout-rescue-v"]'); 10696 function msisRescueVersion(el, kind) { 10697 if (!el) return null; 10698 const cls = String(el.className || ''); 10699 const re = kind === 'checkout' ? /msisdesign-checkout-rescue-v(\d+)/i : /msisdesign-cart-rescue-v(\d+)/i; 10700 const m = cls.match(re); 10701 return m ? m[1] : null; 10702 } 10703 function rescueVisible(el) { 10704 if (!el) return false; 10705 return el.classList.contains('is-visible') && el.getAttribute('aria-hidden') !== 'true'; 10706 } 10707 function watchRescuePopup(el, kind) { 10708 if (!el) return; 10709 const storageKey = 'tct_msis_' + kind + '_rescue_seen_' + location.pathname; 10710 let wasVisible = false;
10711 const evaluate = () => { 10712 const isVisibleNow = rescueVisible(el); 10713 if (isVisibleNow && !wasVisible) { 10714 let already = false; 10715 try { already = sessionStorage.getItem(storageKey) === '1'; } catch (_) {} 10716 if (!already) { 10717 track(kind === 'checkout' ? 'msis_checkout_rescue_impression' : 'msis_cart_rescue_impression', { 10718 component: kind + '_rescue_popup', 10719 componentVersion: msisRescueVersion(el, kind) 10720 }); 10721 try { sessionStorage.setItem(storageKey, '1'); } catch (_) {} 10722 } 10723 } 10724 wasVisible = isVisibleNow; 10725 }; 10726 evaluate(); 10727 new MutationObserver(evaluate).observe(el, {attributes:true, attributeFilter:['class','aria-hidden']}); 10728 } 10729 watchRescuePopup(msisCartRescue, 'cart'); 10730 watchRescuePopup(msisCheckoutRescue, 'checkout'); 10731 10732 const pathLower = currentPathLower; 10733 const contactPathPatterns = ['/contact', '/kontakt', '/kontaktformular', '/nuetzliche-links/kontaktformular', '/form/contact', '/angebotsformular']; 10734 const isOfferPage = contactPathPatterns.some(p => pathLower.includes(p)); 10735 const isCheckoutCart = pathLower.includes('/checkout/cart'); 10736 const isCheckoutRegister = pathLower.includes('/checkout/register'); 10737 const isCheckoutConfirm = pathLower.includes('/checkout/confirm'); 10738 const isCheckoutFinish = pathLower.includes('/checkout/finish'); 10739 // Shopware fuehrt Gast-/nicht eingeloggte Besucher zunaechst ueber /checkout/register. 10740 // Erst danach folgt /checkout/confirm. Beide Seiten gehoeren zum echten Checkout-Einstieg; 10741 // /checkout/cart ist dagegen weiterhin nur Warenkorb und darf nicht als Checkout-Start zaehlen. 10742 const isCheckoutEntry = isCheckoutRegister || isCheckoutConfirm; 10743 const serverPaymentSnapshot = { 10744 paymentMethodId: "c2c55d8740024632aedc065ac99f548e", 10745 paymentMethodName: "PayPal" 10746 }; 10747 10748 function paymentMethodSnapshot() { 10749 let id = String(serverPaymentSnapshot?.paymentMethodId || '').trim(); 10750 let name = String(serverPaymentSnapshot?.paymentMethodName || '').trim(); 10751 const candidates = Array.from(document.querySelectorAll('input[type="radio"], input[type="checkbox"], select')).filter(el => { 10752 const n = (el.getAttribute('name') || '').toLowerCase(); 10753 const i = (el.id || '').toLowerCase(); 10754 return n.includes('payment') || n.includes('zahl') || i.includes('payment') || i.includes('zahl'); 10755 }); 10756 for (const el of candidates) { 10757 let selected = false; 10758 let value = ''; 10759 if (el instanceof HTMLSelectElement) { selected = true; value = el.value || ''; } 10760 else if (el instanceof HTMLInputElement) { selected = el.checked; value = el.value || ''; } 10761 if (!selected) continue; 10762 if (value) id = value.slice(0, 80); 10763 const label = (el.id ? document.querySelector(`label[for="${CSS.escape(el.id)}"]`) : null) 10764 || el.closest('.payment-method, .payment-method-input, .form-check, .confirm-payment')?.querySelector('label, .payment-method-label, .form-check-label'); 10765 const labelText = (label?.textContent || '').replace(/\s+/g, ' ').trim(); 10766 if (labelText) name = labelText.slice(0, 160); 10767 break; 10768 } 10769 return {paymentMethodId: id || null, paymentMethodName: name || null}; 10770 } 10771 10772 function withPayment(metadata = {}) { 10773 return Object.assign({}, paymentMethodSnapshot(), metadata); 10774 } 10775 10776 const finishOrder = null; 10777 if (isOfferPage) track('offer_form_view'); 10778 10779 function pendingGet(key) { 10780 try { return JSON.parse(sessionStorage.getItem(key) || 'null'); } catch (_) { return null; } 10781 } 10782 function pendingSet(key, value) { 10783 try { sessionStorage.setItem(key, JSON.stringify(value)); } catch (_) {} 10784 } 10785 function pendingRemove(key) { 10786 try { sessionStorage.removeItem(key); } catch (_) {} 10787 }
10788 function invalidFieldNames(form) { 10789 return Array.from(form.querySelectorAll(':invalid')) 10790 .map(el => el.getAttribute('name') || el.getAttribute('id') || el.tagName.toLowerCase()) 10791 .filter(Boolean).slice(0, 12).join(','); 10792 } 10793 function hasVisible(selector) { 10794 return Array.from(document.querySelectorAll(selector)).some(visible); 10795 } 10796 function evaluatePendingResponses() { 10797 const offerPending = pendingGet('tct_offer_pending'); 10798 if (offerPending && offerPending.at) { 10799 const age = Math.round((now() - offerPending.at) / 1000); 10800 if (isOfferPage) { 10801 if (hasVisible('.alert-success, .flashbags .alert-success, .form-success')) { 10802 track('offer_form_submit_success', {pendingAgeSeconds: age, reason:'success_message'}); 10803 pendingRemove('tct_offer_pending'); 10804 } else if (hasVisible('.alert-danger, .alert-error, .flashbags .alert-danger, .form-error-message')) { 10805 track('offer_form_submit_error', {errorType:'server_response', pendingAgeSeconds: age}); 10806 pendingRemove('tct_offer_pending'); 10807 } 10808 } else { 10809 const referrerLower = (document.referrer || '').toLowerCase(); 10810 const cameFromOfferForm = contactPathPatterns.some(p => referrerLower.includes(p)); 10811 // Ein direkter Same-Origin-Redirect nach einem zuvor markierten Kontaktformular-Submit 10812 // gilt als Erfolgssignal. Es werden dabei keine Formulardaten gespeichert. 10813 if (age >= 0 && age <= 180 && cameFromOfferForm) { 10814 track('offer_form_submit_success', {pendingAgeSeconds: age, reason:'post_submit_redirect'}); 10815 pendingRemove('tct_offer_pending'); 10816 } else if (age > 600) { 10817 pendingRemove('tct_offer_pending'); 10818 } 10819 } 10820 } 10821 10822 const checkoutPending = pendingGet('tct_checkout_pending'); 10823 if (isCheckoutFinish) { 10824 track('order_success', withPayment(Object.assign({checkoutStep:'finish'}, finishOrder || {}))); 10825 pendingRemove('tct_checkout_pending'); 10826 try { sessionStorage.removeItem('tct_checkout_started'); } catch (_) {} 10827 } else if (isCheckoutConfirm && checkoutPending && checkoutPending.at) { 10828 const age = Math.round((now() - checkoutPending.at) / 1000); 10829 if (hasVisible('.alert-danger, .alert-error, .flashbags .alert-danger, .checkout-error, .payment-error')) { 10830 track('checkout_error', withPayment({errorType:'server_response', checkoutStep:'confirm', pendingAgeSeconds: age})); 10831 pendingRemove('tct_checkout_pending'); 10832 } 10833 } 10834 } 10835 10836 document.addEventListener('click', e => { 10837 const target = e.target instanceof Element ? e.target : null; 10838 if (!target) return; 10839 10840 const cartRescueRoot = target.closest('[class*="msisdesign-cart-rescue-v"]'); 10841 const checkoutRescueRoot = target.closest('[class*="msisdesign-checkout-rescue-v"]'); 10842 const rescueRoot = checkoutRescueRoot || cartRescueRoot; 10843 if (rescueRoot) { 10844 const kind = checkoutRescueRoot ? 'checkout' : 'cart'; 10845 const eventPrefix = kind === 'checkout' ? 'msis_checkout_rescue_' : 'msis_cart_rescue_'; 10846 const clickable = target.closest('a,button,[data-msis-checkout-rescue-close],[data-msis-cart-rescue-close]') || target; 10847 const cls = String(clickable.className || ''); 10848 const text = (clickable.textContent || clickable.getAttribute?.('aria-label') || '').replace(/\s+/g, ' ').trim(); 10849 const hrefRescue = clickable.getAttribute?.('href') || ''; 10850 const normalizedRescue = hrefRescue.toLowerCase().replace(/[\s()-]/g, ''); 10851 const meta = {component:kind + '_rescue_popup', componentVersion:msisRescueVersion(rescueRoot, kind)}; 10852 10853 if (kind === 'checkout' && clickable.closest('[class*="__reasons"]')) { 10854 let reason = 'other'; 10855 const low = text.toLowerCase(); 10856 if (low.includes('produkt')) reason = 'product'; 10857 else if (low.includes('versand') || low.includes('liefer')) reason = 'shipping_delivery'; 10858 else if (low.includes('zahlung')) reason = 'payment'; 10859 track(eventPrefix + 'reason', Object.assign({}, meta, {reason, label:text.slice(0,120)}), true); 10860 } else if (normalizedRescue.startsWith('tel:')) { 10861 track(eventPrefix + 'phone_click', Object.assign({}, meta, {link:hrefRescue}), true); 10862 } else if (hrefRescue.toLowerCase().startsWith('mailto:')) { 10863 track(eventPrefix + 'email_click', Object.assign({}, meta, {link:hrefRescue}), true); 10864 } else if (cls.includes('__offer') || clickable.closest('[class*="__offer"]')) { 10865 track(eventPrefix + 'offer_click', meta, true); 10866 } else if (cls.includes('__checkout') || (kind === 'checkout' && cls.includes('__continue'))) { 10867 track(eventPrefix + 'continue', meta, true); 10868 }
10868 else if (cls.includes('__dismiss')) { 10869 track(eventPrefix + 'dismiss', meta, true); 10870 } else if (clickable.hasAttribute?.('data-msis-checkout-rescue-close') || clickable.hasAttribute?.('data-msis-cart-rescue-close') || cls.includes('__close')) { 10871 track(eventPrefix + 'close', meta, true); 10872 } 10873 } 10874 10875 // 2.1.6: Warenkorb-Mikrointeraktionen messen, damit der Abbruch zwischen 10876 // Warenkorb und Checkout nicht mehr nur als pauschaler Funnel-Verlust sichtbar ist. 10877 const clickableControl = target.closest('a,button,[role="button"],summary'); 10878 const controlText = (clickableControl?.textContent || clickableControl?.getAttribute?.('aria-label') || clickableControl?.getAttribute?.('title') || '').replace(/\s+/g,' ').trim(); 10879 const controlClass = String(clickableControl?.className || '').toLowerCase(); 10880 const controlHref = String(clickableControl?.getAttribute?.('href') || '').toLowerCase(); 10881 const onCart = pathLower.includes('/checkout/cart'); 10882 10883 if (onCart && clickableControl) { 10884 const checkoutLike = /zur\s*kasse|checkout|kasse/.test(controlText.toLowerCase()) || /checkout/.test(controlClass + ' ' + controlHref); 10885 const paypalLike = /paypal/.test((controlText + ' ' + controlClass + ' ' + controlHref).toLowerCase()) && /(express|paypal)/.test((controlText + ' ' + controlClass).toLowerCase()); 10886 const couponLike = /gutschein|coupon|voucher|promotion/.test((controlText + ' ' + controlClass).toLowerCase()); 10887 const detailsLike = /versanddetails|konfigurationsdetails|konfiguration|details\s*(öffnen|anzeigen)|config.*details/.test((controlText + ' ' + controlClass).toLowerCase()); 10888 const removeLike = /entfernen|löschen|remove|delete/.test((controlText + ' ' + controlClass).toLowerCase()) || !!target.closest('.line-item-remove-button, [class*="line-item-remove"], [data-line-item-remove]'); 10889 if (paypalLike) track('paypal_express_click', {label:controlText.slice(0,160), cartContext:true}, true); 10890 else if (checkoutLike) track('checkout_click', {label:controlText.slice(0,160), cartContext:true}, true); 10891 if (couponLike) track('coupon_open', {label:controlText.slice(0,160)}, true); 10892 if (detailsLike) track('config_details_open', {label:controlText.slice(0,160)}, true); 10893 if (removeLike) track('product_remove', {label:controlText.slice(0,160), action:'remove'}, true); 10894 } 10895 10896 const a = target.closest('a[href]'); 10897 if (!a) return; 10898 const href = a.getAttribute('href') || ''; 10899 const normalized = href.toLowerCase().replace(/[\s()-]/g, ''); 10900 if (normalized.startsWith('tel:')) { track('phone_click', {link: href}); if (onCart || isCheckoutConfirm) track('service_phone_click', {link:href, context:onCart?'cart':'checkout'}, true); } 10901 if (href.toLowerCase().startsWith('mailto:')) track('email_click', {link: href}); 10902 10903 const bannerRoot = a.closest('[class*="msisdesign-configurator-banner-v"]'); 10904 if (bannerRoot) { 10905 const label = (a.textContent || a.getAttribute('title') || a.getAttribute('aria-label') || '').trim(); 10906 track('msis_banner_click', { 10907 component:'configurator_switch_banner', 10908 componentVersion:msisComponentVersion(bannerRoot), 10909 link:href, 10910 title:label.slice(0,300) 10911 }, true); 10912 } 10913 10914 const supportRoot = a.closest('[class*="msisdesign-configurator-support-v"]'); 10915 if (supportRoot) { 10916 const supportMeta = {component:'configurator_support', componentVersion:msisComponentVersion(supportRoot), link:href}; 10917 if (normalized.startsWith('tel:')) track('msis_support_phone_click', supportMeta, true); 10918 else if (href.toLowerCase().startsWith('mailto:')) track('msis_support_email_click', supportMeta, true); 10919 else if (String(a.className || '').includes('__offer') || a.closest('[class*="__offer"]')) {
10920 track('msis_support_offer_click', supportMeta, true); 10921 } 10922 } 10923 10924 // Wechsel von einem erkannten alten Konfigurator zu einem neuen/anderen Konfigurator. 10925 // Nur Inhaltslinks/Banner zaehlen, nicht die globale Navigation. 10926 if (oldConfigurator && /(konfigurator|configurator)/i.test(href) && !a.closest('header, nav, .header-main, .main-navigation, .navigation-main')) { 10927 const label = (a.textContent || a.getAttribute('title') || a.getAttribute('aria-label') || a.querySelector('img')?.getAttribute('alt') || '').trim(); 10928 track('switch_to_new_configurator', {link: href, title: label.slice(0, 300)}); 10929 } 10930 }, true); 10931 10932 // Warenkorb-Mengen und Gutschein-Eingaben separat erfassen. Keine Gutschein-Codes oder 10933 // sonstigen Feldwerte werden gespeichert; nur die Interaktionsart und bei Mengen numerische Alt/Neu-Werte. 10934 const qtyPrevious = new WeakMap(); 10935 document.addEventListener('focusin', e => { 10936 const el=e.target; 10937 if (!(el instanceof HTMLInputElement)) return; 10938 if (pathLower.includes('/checkout/cart') && /quantity|qty|anzahl/.test((el.name+' '+el.className).toLowerCase())) qtyPrevious.set(el, el.value); 10939 }, true); 10940 document.addEventListener('change', e => { 10941 const el=e.target; 10942 if (!(el instanceof HTMLInputElement || el instanceof HTMLSelectElement)) return; 10943 if (!pathLower.includes('/checkout/cart')) return; 10944 const marker=(String(el.name||'')+' '+String(el.className||'')+' '+String(el.id||'')).toLowerCase(); 10945 if (/quantity|qty|anzahl/.test(marker)) { 10946 const oldValue=Number(qtyPrevious.get(el)); const newValue=Number(el.value); 10947 track('quantity_change', {oldQuantity:Number.isFinite(oldValue)?oldValue:null,newQuantity:Number.isFinite(newValue)?newValue:null}, true); 10948 qtyPrevious.set(el, el.value); 10949 } 10950 }, true); 10951 document.addEventListener('submit', e => { 10952 const form=e.target; 10953 if (!(form instanceof HTMLFormElement) || !pathLower.includes('/checkout/cart')) return; 10954 const marker=(String(form.className||'')+' '+String(form.action||'')+' '+String(form.id||'')).toLowerCase(); 10955 if (/gutschein|coupon|voucher|promotion/.test(marker) || form.querySelector('input[name*="promotion"],input[name*="coupon"],input[name*="voucher"]')) { 10956 track('coupon_submit', {action:'submit'}, true); 10957 } 10958 }, true); 10959 10960 // Kontaktformular wirklich begonnen: erst bei einer echten Eingabe/Auswahl, nicht schon beim Fokus. 10961 // Es werden keine Feldwerte gespeichert. Pro Session wird dieses Signal nur einmal gesendet. 10962 let offerStarted = false; 10963 try { offerStarted = sessionStorage.getItem('tct_offer_started') === '1'; } catch (_) {} 10964 function markOfferStarted(e) { 10965 if (!isOfferPage || offerStarted) return; 10966 const el = e.target; 10967 if (!(el instanceof HTMLInputElement || el instanceof HTMLSelectElement || el instanceof HTMLTextAreaElement)) return; 10968 if (el instanceof HTMLInputElement && ['hidden','submit','button','reset','file'].includes(el.type)) return; 10969 const form = el.closest('form'); 10970 if (!(form instanceof HTMLFormElement)) return; 10971 if (e.type === 'input') { 10972 const value = typeof el.value === 'string' ? el.value.trim() : ''; 10973 if (!value && !(el instanceof HTMLInputElement && ['checkbox','radio'].includes(el.type) && el.checked)) return; 10974 } 10975 offerStarted = true; 10976 try { sessionStorage.setItem('tct_offer_started', '1'); } catch (_) {} 10977 track('offer_form_started', {reason:'first_field_interaction'}); 10978 } 10979 document.addEventListener('input', markOfferStarted, true); 10980 document.addEventListener('change', markOfferStarted, true); 10981 10982 let lastValidationErrorAt = 0; 10983 document.addEventListener('invalid', e => { 10984 if (!isOfferPage) return; 10985 const form = e.target instanceof Element ? e.target.closest('form') : null; 10986 if (!(form instanceof HTMLFormElement)) return; 10987 if (now() - lastValidationErrorAt < 1200) return;
10988 lastValidationErrorAt = now(); 10989 setTimeout(() => track('offer_form_validation_error', { 10990 errorType:'browser_validation', 10991 fields: invalidFieldNames(form) 10992 }), 0); 10993 }, true); 10994 10995 document.addEventListener('submit', e => { 10996 const form = e.target; 10997 if (!(form instanceof HTMLFormElement)) return; 10998 const action = (form.getAttribute('action') || '').toLowerCase(); 10999 if (action.includes('line-item/add') || form.querySelector('button[name="redirectTo"][value*="cart"]') || form.closest('.product-detail-buy')) { 11000 cartIntent = true; 11001 saveLastConfiguration(); 11002 track('add_to_cart_intent'); 11003 } 11004 if (isOfferPage) { 11005 track('offer_form_submit_attempt'); 11006 pendingSet('tct_offer_pending', {at: now()}); 11007 } 11008 if (isCheckoutConfirm && (action.includes('/checkout/order') || action.includes('checkout.finish.order') || form.closest('.checkout-confirm-page, .confirm-main-header, .checkout'))) { 11009 track('checkout_submit_attempt', withPayment({checkoutStep:'confirm'})); 11010 pendingSet('tct_checkout_pending', {at: now()}); 11011 } 11012 }, true); 11013 11014 // Zahlungsart-Wechsel als eigenes Conversion-Signal. Es werden nur Shopware-ID und Anzeigename gespeichert. 11015 // Ein vorselektierter Context-Wert gilt nicht automatisch als aktive Nutzerentscheidung. 11016 let paymentInitialized = false; 11017 function rememberPaymentMethod(snapshot) { 11018 try { 11019 if (snapshot.paymentMethodId) sessionStorage.setItem('tct_payment_method_id', snapshot.paymentMethodId); 11020 if (snapshot.paymentMethodName) sessionStorage.setItem('tct_payment_method_name', snapshot.paymentMethodName); 11021 } catch (_) {} 11022 } 11023 if (isCheckoutConfirm) { 11024 const initialPayment = paymentMethodSnapshot(); 11025 try { 11026 const previousId = sessionStorage.getItem('tct_payment_method_id') || ''; 11027 const previousName = sessionStorage.getItem('tct_payment_method_name') || ''; 11028 if (previousId && initialPayment.paymentMethodId && previousId !== initialPayment.paymentMethodId) { 11029 track('payment_method_changed', Object.assign({}, initialPayment, { 11030 previousPaymentMethodId: previousId, previousPaymentMethodName: previousName || null, reason:'checkout_reload_or_context_change' 11031 })); 11032 } 11033 } catch (_) {} 11034 rememberPaymentMethod(initialPayment); 11035 paymentInitialized = true; 11036 track('payment_method_snapshot', Object.assign({checkoutStep:'confirm'}, initialPayment)); 11037 } 11038 document.addEventListener('change', e => { 11039 if (!isCheckoutConfirm) return; 11040 const el = e.target; 11041 if (!(el instanceof HTMLInputElement || el instanceof HTMLSelectElement)) return; 11042 const marker = ((el.getAttribute('name') || '') + ' ' + (el.id || '')).toLowerCase(); 11043 if (!marker.includes('payment') && !marker.includes('zahl')) return; 11044 const current = paymentMethodSnapshot(); 11045 let previousId = '', previousName = ''; 11046 try { previousId = sessionStorage.getItem('tct_payment_method_id') || ''; previousName = sessionStorage.getItem('tct_payment_method_name') || ''; } catch (_) {} 11047 if (paymentInitialized && previousId && current.paymentMethodId && previousId !== current.paymentMethodId) { 11048 track('payment_method_changed', Object.assign({}, current, { 11049 previousPaymentMethodId: previousId, previousPaymentMethodName: previousName || null, reason:'user_change' 11050 })); 11051 } 11052 rememberPaymentMethod(current); 11053 paymentInitialized = true; 11054 }, true); 11055 11056 const ignoredTypes = new Set(['hidden','submit','button','reset','file']); 11057 const configuratorNumericState = new Map(); 11058 11059 function parseConfiguratorNumber(value) { 11060 let raw = String(value || '').trim().replace(/\s+/g, ''); 11061 if (!raw) return null; 11062 raw = raw.replace(/[^0-9,.-]/g, ''); 11063 if (!raw || raw === '-' || raw === ',' || raw === '.') return null; 11064 if (raw.includes(',') && raw.includes('.')) { 11065 raw = raw.lastIndexOf(',') > raw.lastIndexOf('.') ? raw.replace(/\./g, '').replace(',', '.') : raw.replace(/,/g, ''); 11066 } else if (raw.includes(',')) { 11067 raw = raw.replace(',', '.'); 11068 }
11069 const n = Number(raw); 11070 return Number.isFinite(n) ? n : null; 11071 } 11072 11073 function configuratorFieldIdentity(el) { 11074 const id = el.id || ''; 11075 let label = id ? document.querySelector(`label[for="${CSS.escape(id)}"]`)?.textContent?.trim() : ''; 11076 if (!label) label = el.getAttribute('aria-label') || el.getAttribute('data-label') || el.getAttribute('name') || ''; 11077 label = String(label || '').replace(/\s+/g, ' ').replace(/[:*]+\s*$/, '').trim().slice(0, 100); 11078 const name = String(el.getAttribute('name') || '').trim().slice(0, 100); 11079 return {label, name, key:(name || label || id || 'field').toLowerCase()}; 11080 } 11081 11082 function maybeTrackConfiguratorAnomaly(el) { 11083 const ident = configuratorFieldIdentity(el); 11084 const dimensionLike = /(breite|width|hoehe|höhe|height|laenge|länge|length|mass|maÃ|durchmesser|diameter|radius|tiefe|depth|pool|anhaenger|anhänger)/i.test(`${ident.label} ${ident.name}`); 11085 if (!dimensionLike) return; 11086 const current = parseConfiguratorNumber(el.value); 11087 if (current === null || current <= 0) return; 11088 const previous = configuratorNumericState.get(ident.key); 11089 configuratorNumericState.set(ident.key, current); 11090 11091 let anomalyType = null; 11092 let severity = 'warning'; 11093 let ratio = null; 11094 if (previous !== undefined && previous > 0) { 11095 ratio = Math.max(current / previous, previous / current); 11096 if (ratio >= 8 && ratio <= 120 && Math.max(current, previous) >= 1000) anomalyType = 'dimension_jump'; 11097 } 11098 if (!anomalyType && current >= 10000) { 11099 anomalyType = 'extreme_dimension'; 11100 severity = current >= 50000 ? 'high' : 'warning'; 11101 } 11102 if (!anomalyType) return; 11103 11104 const priceBefore = lastPrice; 11105 window.setTimeout(() => { 11106 const priceAfter = currentPrice(); 11107 if (priceAfter !== null) lastPrice = priceAfter; 11108 track('configurator_input_anomaly', { 11109 anomalyType, anomalySeverity: severity, 11110 fieldLabel: ident.label || null, fieldName: ident.name || null, 11111 previousValue: previous ?? null, currentValue: current, 11112 valueRatio: ratio !== null ? Math.round(ratio * 100) / 100 : null, 11113 unitHint: /cm|zentimeter/i.test(`${ident.label} ${ident.name}`) ? 'cm' : null, 11114 priceBefore: priceBefore ?? null, priceAfter: priceAfter ?? null 11115 }); 11116 }, 700); 11117 } 11118 11119 let priceSnapshotTimer = null; 11120 function scheduleConfiguratorPriceSnapshot(reason = 'field_change') { 11121 if (!configuratorType) return; 11122 if (priceSnapshotTimer) clearTimeout(priceSnapshotTimer); 11123 const attempts=[300,800,1600]; 11124 let idx=0; 11125 const run=()=>{ 11126 const p=currentPrice(); 11127 if(p!==null && p>0){ 11128 const changed=lastPrice===null || Math.abs(Number(lastPrice)-Number(p))>0.009; 11129 lastPrice=p; 11130 saveLastConfiguration(serializedConfiguration(), p); 11131 if(changed || idx===attempts.length-1) track('configurator_price_snapshot',{reason,priceSource:configuratorType==='new'?'dynamic_or_shopware':'old_total'}); 11132 return; 11133 } 11134 idx++; 11135 if(idx<attempts.length) priceSnapshotTimer=setTimeout(run,attempts[idx]); 11136 }; 11137 priceSnapshotTimer=setTimeout(run,attempts[0]); 11138 } 11139 11140 document.addEventListener('change', e => { 11141 if (!configuratorType) return; 11142 const el = e.target; 11143 if (!(el instanceof HTMLInputElement || el instanceof HTMLSelectElement || el instanceof HTMLTextAreaElement)) return; 11144 if (el instanceof HTMLInputElement && ignoredTypes.has(el.type)) return; 11145 const inProductArea = !!el.closest('.product-detail, .product-detail-buy, .buy-widget, form[action*="line-item"]'); 11146 const inK3ConfiguratorArea = isK3ConfiguratorPage && !!el.closest('main, form, [class*="configurator"], [class*="konfigurator"]'); 11147 if (!inProductArea && !inK3ConfiguratorArea) return; 11148 maybeTrackConfiguratorAnomaly(el); 11149 interactionCount++; 11150 if (!configStarted) { 11151 configStarted = true; 11152 track('configurator_start'); 11153 } 11154 if (interactionCount === 1 || interactionCount % 5 === 0) track('configurator_interaction'); 11155 saveLastConfiguration(); 11156 scheduleConfiguratorPriceSnapshot('field_change'); 11157 }, true); 11158 11159 let mutationTimer; 11160 const observer = new MutationObserver(() => { 11161 if (!configStarted || !configuratorType) return; 11162 clearTimeout(mutationTimer); 11163 mutationTimer = setTimeout(() => { 11164 const p = currentPrice(); 11165 if (p !== null && p !== lastPrice) { 11166 lastPrice = p; 11167 saveLastConfiguration(); 11168 track('configurator_interaction'); 11169 } 11170 }, 500); 11171 }); 11172 observer.observe(document.body, {subtree:true, childList:true, characterData:true}); 11173 11174 const serverCartSnapshot = null; 11175 11176 function trackCartHealth() { 11177 if (!pathLower.includes('/checkout/cart') && !isCheckoutConfirm) return; 11178 const positionTotal = Number(serverCartSnapshot?.positionTotal ?? 0); 11179 const totalPrice = Number(serverCartSnapshot?.totalPrice ?? 0); 11180 const shippingTotal = Number.isFinite(positionTotal) && Number.isFinite(totalPrice) 11181 ? Math.max(0, totalPrice - positionTotal) : 0; 11182 const shippingRatio = positionTotal > 0 ? shippingTotal / positionTotal : 0; 11183 const shippingRatioPercent = Math.round(shippingRatio * 1000) / 10; 11184 const shippingMethodId = String(serverCartSnapshot?.shippingMethodId || '').trim(); 11185 const shippingMethodName = String(serverCartSnapshot?.shippingMethodName || '').trim(); 11186 const shippingCountry = String(serverCartSnapshot?.shippingCountry || '').trim(); 11187 const shippingCountryIso = String(serverCartSnapshot?.shippingCountryIso || '').trim(); 11188 const deliveryCount = Number(serverCartSnapshot?.deliveryCount || 0); 11189 const activeRuleIds = String(serverCartSnapshot?.activeRuleIds || '').trim(); 11190 const checkoutStep = pathLower.includes('/checkout/cart') ? 'cart' : 'confirm'; 11191 const shippingRatioBand = shippingRatio < 0.10 ? '<10%' 11192 : shippingRatio < 0.20 ? '10-20%' 11193 : shippingRatio < 0.30 ? '20-30%' 11194 : shippingRatio < 0.50 ? '30-50%'
11195 : shippingRatio < 0.70 ? '50-70%' 11196 : '>=70%'; 11197 const signature = [positionTotal.toFixed(2), shippingTotal.toFixed(2), shippingMethodId, checkoutStep].join('|'); 11198 const freeShippingExperimentStart = '2026-08-20T14:00:00+02:00'; 11199 const freeShippingExperiment = Date.now() >= Date.parse(freeShippingExperimentStart); 11200 const shippingMeta = { 11201 cartValue: positionTotal, 11202 shippingTotal, 11203 shippingRatio: Math.round(shippingRatio * 10000) / 10000, 11204 shippingRatioPercent, 11205 shippingRatioBand, 11206 shippingMethodId: shippingMethodId || null, 11207 shippingMethodName: shippingMethodName || null, 11208 shippingCountry: shippingCountry || null, 11209 shippingCountryIso: shippingCountryIso || null, 11210 deliveryCount, 11211 activeRuleIds: activeRuleIds || null, 11212 checkoutStep, 11213 freeShippingExperiment, 11214 freeShippingExperimentStart 11215 }; 11216 11217 try { 11218 if (sessionStorage.getItem('tct_cart_health_signature') !== signature) { 11219 track('cart_shipping_snapshot', shippingMeta); 11220 sessionStorage.setItem('tct_cart_health_signature', signature); 11221 } 11222 if (freeShippingExperiment && positionTotal > 0 && shippingTotal <= 0.01) { 11223 const freeKey = 'tct_free_shipping_' + signature; 11224 if (!sessionStorage.getItem(freeKey)) { 11225 track('free_shipping_seen', shippingMeta); 11226 sessionStorage.setItem(freeKey, '1'); 11227 } 11228 } 11229 11230 const persistedRaw = localStorage.getItem('tct_cart_persistence'); 11231 let persisted = null; 11232 try { persisted = persistedRaw ? JSON.parse(persistedRaw) : null; } catch (_) {} 11233 if (positionTotal > 0) { 11234 if (persisted && Number(persisted.value || 0) > 0 && Number(persisted.at || 0) > 0 && (Date.now() - Number(persisted.at)) >= 30 * 60 * 1000) { 11235 const restoreKey = 'tct_cart_restored_' + String(persisted.at); 11236 if (!sessionStorage.getItem(restoreKey)) { 11237 track('cart_restored', Object.assign({}, shippingMeta, {previousCartValue:Number(persisted.value), previousCartSeenAt:String(persisted.at), cartAgeHours:Math.round((Date.now()-Number(persisted.at))/360000)/10})); 11238 sessionStorage.setItem(restoreKey, '1'); 11239 } 11240 } 11241 localStorage.setItem('tct_cart_persistence', JSON.stringify({value:positionTotal, at:Date.now()})); 11242 } else if (pathLower.includes('/checkout/cart') && persisted && Number(persisted.value || 0) > 0 && Number(persisted.at || 0) > 0 && (Date.now() - Number(persisted.at)) >= 30 * 60 * 1000) { 11243 const missingKey = 'tct_cart_missing_' + String(persisted.at); 11244 if (!sessionStorage.getItem(missingKey)) { 11245 track('cart_missing_on_return', Object.assign({}, shippingMeta, {previousCartValue:Number(persisted.value), previousCartSeenAt:String(persisted.at), cartAgeHours:Math.round((Date.now()-Number(persisted.at))/360000)/10})); 11246 sessionStorage.setItem(missingKey, '1'); 11247 } 11248 } 11249 11250 const previousMethodId = sessionStorage.getItem('tct_shipping_method_id') || ''; 11251 const previousMethodName = sessionStorage.getItem('tct_shipping_method_name') || ''; 11252 if (shippingMethodId && previousMethodId && previousMethodId !== shippingMethodId) { 11253 track('shipping_method_changed', Object.assign({}, shippingMeta, { 11254 previousShippingMethodId: previousMethodId, 11255 previousShippingMethodName: previousMethodName || null 11256 })); 11257 } 11258 if (shippingMethodId) { 11259 sessionStorage.setItem('tct_shipping_method_id', shippingMethodId); 11260 sessionStorage.setItem('tct_shipping_method_name', shippingMethodName); 11261 } 11262 } catch (_) {} 11263 11264 // Kein technischer Fehler: Preis-/UX-Signal. Bereits 20 % koennen auffaellig sein. 11265 if (positionTotal > 0 && shippingTotal >= 10 && shippingRatio >= 0.20) { 11266 try { 11267 const highKey = 'tct_shipping_high_' + signature; 11268 if (!sessionStorage.getItem(highKey)) { 11269 track('shipping_cost_high', shippingMeta); 11270 sessionStorage.setItem(highKey, '1'); 11271 } 11272 } catch (_) {} 11273 } 11274 11275 // Ab 50 % des Warenwertes behandeln wir Versandkosten als starkes Abbruchrisiko. 11276 // 70 %+ wird in der Agenturanalyse separat ausgewiesen. 11277 if (positionTotal > 0 && shippingTotal >= 10 && shippingRatio >= 0.50) { 11278 try { 11279 const extremeKey = 'tct_shipping_extreme_' + signature; 11280 if (!sessionStorage.getItem(extremeKey)) { 11281 track('shipping_cost_extreme', shippingMeta); 11282 sessionStorage.setItem(extremeKey, '1'); 11283 } 11284 } catch (_) {} 11285 } 11286 11287 const errorText = Array.from(document.querySelectorAll('.alert-danger, .alert-error, .flashbags .alert-danger, .cart-error, .checkout-error')) 11288 .filter(visible).map(el => (el.textContent || '').toLowerCase()).join(' '); 11289 const shippingError = /(versand|versandart|lieferung|lieferart|shipping|delivery)/.test(errorText) 11290 && /(nicht verfuegbar|nicht verfügbar|nicht moeglich|nicht möglich|keine|cannot|unavailable|not available|no shipping|no delivery)/.test(errorText); 11291 if (shippingError) { 11292 try { 11293 const errorKey = 'tct_shipping_unavailable_' + checkoutStep + '_' + (shippingMethodId || 'none'); 11294 if (!sessionStorage.getItem(errorKey)) { 11295 track('shipping_unavailable', Object.assign({}, shippingMeta, {errorType:'shipping_rule_or_method_unavailable'})); 11296 sessionStorage.setItem(errorKey, '1'); 11297 } 11298 } catch (_) {} 11299 } 11300 } 11301
11302 if (isCheckoutCart) track('cart_view'); 11303 trackCartHealth(); 11304 if (isCheckoutEntry) { 11305 const checkoutStep = isCheckoutConfirm ? 'confirm' : 'register'; 11306 track('checkout_start', isCheckoutConfirm ? withPayment({checkoutStep}) : {checkoutStep}); 11307 pendingSet('tct_checkout_started', {at: now(), step: checkoutStep}); 11308 } 11309 11310 // Antworten können serverseitig nach Reload oder dynamisch im DOM erscheinen. 11311 evaluatePendingResponses(); 11312 let responseTimer; 11313 const responseObserver = new MutationObserver(() => { 11314 if (!isOfferPage && !isCheckoutConfirm && !pathLower.includes('/checkout/cart')) return; 11315 clearTimeout(responseTimer); 11316 responseTimer = setTimeout(() => { 11317 evaluatePendingResponses(); 11318 trackCartHealth(); 11319 }, 250); 11320 }); 11321 responseObserver.observe(document.body, {subtree:true, childList:true}); 11322 11323 window.addEventListener('pagehide', () => { 11324 if (configStarted && !cartIntent) { 11325 saveLastConfiguration(); 11326 track('configurator_abandoned', {reason:'pagehide'}, true); 11327 } 11328 }); 11329 })(); 11330 </script>
11330 11331 11332 11333 11334 11335 <!-- added by Trusted Shops app: Start --> 11336
11336<script async data-desktop-y-offset="-5" data-mobile-y-offset="-5" data-desktop-disable-reviews="false" data-desktop-enable-custom="false" data-desktop-position="right" data-desktop-custom-width="156" data-desktop-enable-fadeout="false" data-disable-mobile="false" data-disable-trustbadge="false" data-mobile-custom-width="156" data-mobile-disable-reviews="false" data-mobile-enable-custom="false" data-mobile-position="right" charset="UTF-8" src="//widgets.trustedshops.com/js/X06C512A9B986093C625E5D8C6C782354.js"></script>
11336 11337 <!-- End --> 11338 </body> 11339</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.