PageSourceSearch

https://www.laufshirt-bedrucken.de/checkout/cart/

html laufshirt-bedrucken.de collected 2026-10-03 00:21:20 UTC 375,149 bytes, 6,412 lines download raw bytes

1<!doctype html>
2<html lang="de">
3<head >
4    <meta charset="utf-8"/>
5<meta name="title" content="Warenkorb"/>
6<meta name="robots" content="NOINDEX, FOLLOW"/>
7<meta name="viewport" content="width=device-width, initial-scale=1"/>
8<title>Warenkorb</title>
9        <link rel="stylesheet" type="text/css" media="all" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/css/styles.css" />
10<link rel="stylesheet" type="text/css" media="all" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/css/footer-widerruf-button.css" />
11<link rel="stylesheet" type="text/css" media="all" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/Algolia_AlgoliaSearch/css/autocomplete.css" />
12<link rel="stylesheet" type="text/css" media="all" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/Algolia_AlgoliaSearch/css/grid.css" />
13<link rel="stylesheet" type="text/css" media="all" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/Algolia_AlgoliaSearch/css/algolia-reset.css" />
14<link rel="stylesheet" type="text/css" media="all" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/Algolia_AlgoliaSearch/css/instantsearch.css" />
15<link rel="stylesheet" type="text/css" media="all" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/Algolia_AlgoliaSearch/css/recommend.css" />
16<link rel="stylesheet" type="text/css" media="all" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/Algolia_CustomAlgolia/css/custom-autocomplete.css" />
17<link rel="stylesheet" type="text/css" media="all" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/Algolia_CustomAlgolia/css/custom-instant-page.css" />
18<link rel="preload" as="font" crossorigin="anonymous" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/frontend/Hyva/custom/web/fonts/Roboto-Thin.ttf" />
19<link rel="preload" as="font" crossorigin="anonymous" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/frontend/Hyva/custom/web/fonts/Roboto-Light.ttf" />
20<link rel="preload" as="font" crossorigin="anonymous" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/frontend/Hyva/custom/web/fonts/Roboto-Regular.ttf" />
21<link rel="preload" as="font" crossorigin="anonymous" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/frontend/Hyva/custom/web/fonts/Roboto-Medium.ttf" />
22<link rel="preload" as="font" crossorigin="anonymous" href="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/frontend/Hyva/custom/web/fonts/Roboto-Bold.ttf" />
23<link rel="icon" type="image/x-icon" href="https://www.laufshirt-bedrucken.de/media/favicon/default/faicon.png" />
24<link rel="shortcut icon" type="image/x-icon" href="https://www.laufshirt-bedrucken.de/media/favicon/default/faicon.png" />
25<style>div.description-box.size-instructions.halfwidth{display: none !important}</style>
26<script>
27	window.fwSettings={
28	'widget_id':103000002553
29	};
30	!function(){if("function"!=typeof window.FreshworksWidget){var n=function(){n.q.push(arguments)};n.q=[],window.FreshworksWidget=n}}() 
31</script>
vendor: 2 bytes, line 31
31
32<script type='text/javascript' src='https://euc-widget.freshworks.com/widgets/103000002553.js' async defer></script>
vendor: 2 bytes, line 32
32
33<script src="https://public.analyze.shirtracer.gmbh/plugins/whatsapp/whatsapp.js"></script>
vendor: 2 bytes, line 33
33
34<script src="https://cloud.ccm19.de/app.js?apiKey=8cc2152652e82c0c4a5d1c4dd040ff6de7b8a865e2077f19&amp;domain=6886025de7a25324db074702" referrerpolicy="origin"></script>
34
35<!-- Meta Pixel Code -->
36<script>
vendor: 408 bytes, lines 36-45
36
37!function(f,b,e,v,n,t,s)
38{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
39n.callMethod.apply(n,arguments):n.queue.push(arguments)};
40if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
41n.queue=[];t=b.createElement(e);t.async=!0;
42t.src=v;s=b.getElementsByTagName(e)[0];
43s.parentNode.insertBefore(t,s)}(window, document,'script',
44'https://connect.facebook.net/en_US/fbevents.js');
45fbq('init', '
451063173096054465
vendor: 32 bytes, lines 45-46
45');
46fbq('track', 'PageView');
47</script>
47
48<noscript><img height="1" width="1" style="display:none"
49src="https://www.facebook.com/tr?id=1063173096054465&ev=PageView&noscript=1"
50/></noscript>
51<!-- End Meta Pixel Code -->            
51<script>
52        window.getWpGA4Cookie = function(name) {
53            match = document.cookie.match(new RegExp(name + '=([^;]+)'));
54            if (match) return decodeURIComponent(match[1].replace(/\+/g, ' ')) ;
55        };
56
57        window.dataLayer = window.dataLayer || [];
58                var dl4Objects = [{"pageName":"Warenkorb","pageType":"cart","event":"view_cart","cart_total":"0.00","total":"0.00","currency":"EUR","ecommerce":{"items":[]}}];
59        for (var i in dl4Objects) {
60            window.dataLayer.push({ecommerce: null});
61            window.dataLayer.push(dl4Objects[i]);
62        }
63                var wpGA4Cookies = ['wp_ga4_user_id','wp_ga4_customerGroup'];
64        wpGA4Cookies.map(function(cookieName) {
65            var cookieValue = window.getWpGA4Cookie(cookieName);
66            if (cookieValue) {
67                var dl4Object = {};
68                dl4Object[cookieName.replace('wp_ga4_', '')] = cookieValue;
69                window.dataLayer.push(dl4Object);
70            }
71        });
72    </script>
72
73
74    <!-- Google Tag Manager -->
75<script>
vendor: 331 bytes, lines 75-79
75(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
76new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
77j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
78'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
79})(window,document,'script','dataLayer','
79GTM-T74P3V5K
vendor: 3 bytes, line 79
79');
79</script>
79
80<!-- End Google Tag Manager -->    
81
82<script>
83    var BASE_URL = 'https://www.laufshirt-bedrucken.de/';
84    var THEME_PATH = 'https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE';
85    var COOKIE_CONFIG = {
86        "expires": null,
87        "path": "\u002F",
88        "domain": ".www.laufshirt\u002Dbedrucken.de",
89        "secure": true,
90        "lifetime": "86400",
91        "cookie_restriction_enabled": false    };
92    var CURRENT_STORE_CODE = 'dede';
93    var CURRENT_WEBSITE_ID = '1';
94
95    window.hyva = window.hyva || {}
96
97    window.cookie_consent_groups = window.cookie_consent_groups || {}
98    window.cookie_consent_groups['necessary'] = true;
99
100    window.cookie_consent_config = window.cookie_consent_config || {};
101    window.cookie_consent_config['necessary'] = [].concat(
102        window.cookie_consent_config['necessary'] || [],
103        [
104            'user_allowed_save_cookie',
105            'form_key',
106            'mage-messages',
107            'private_content_version',
108            'mage-cache-sessid',
109            'last_visited_store',
110            'section_data_ids'
111        ]
112    );
113    //# sourceURL=hyva-variables.js
114</script>
vendor: 1 bytes, line 114
114
115<script>
116    (function( hyva, undefined ) {
117
118        function lifetimeToExpires(options, defaults) {
119
120            const lifetime = options.lifetime || defaults.lifetime;
121
122            if (lifetime) {
123                const date = new Date;
124                date.setTime(date.getTime() + lifetime * 1000);
125                return date;
126            }
127
128            return null;
129        }
130
131        function generateRandomString() {
132
133            const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
134                length = 16;
135
136            let formKey = '',
137                charactersLength = allowedCharacters.length;
138
139            for (let i = 0; i < length; i++) {
140                formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))]
141            }
142
143            return formKey;
144        }
145
146        const sessionCookieMarker = {noLifetime: true}
147
148        const cookieTempStorage = {};
149
150        const internalCookie = {
151            get(name) {
152                const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
153                return v ? v[2] : null;
154            },
155            set(name, value, days, skipSetDomain) {
156                let expires,
157                    path,
158                    domain,
159                    secure,
160                    samesite;
161
162                const defaultCookieConfig = {
163                    expires: null,
164                    path: '/',
165                    domain: null,
166                    secure: false,
167                    lifetime: null,
168                    samesite: 'lax'
169                };
170
171                const cookieConfig = window.COOKIE_CONFIG || {};
172
173                expires = days && days !== sessionCookieMarker
174                    ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig)
175                    : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires;
176
177                path = cookieConfig.path || defaultCookieConfig.path;
178                domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain);
179                secure = cookieConfig.secure || defaultCookieConfig.secure;
180                samesite = cookieConfig.samesite || defaultCookieConfig.samesite;
181
182                document.cookie = name + "=" + encodeURIComponent(value) +
183                    (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') +
184                    (path ? '; path=' + path : '') +
185                    (domain ? '; domain=' + domain : '') +
186                    (secure ? '; secure' : '') +
187                    (samesite ? '; samesite=' + samesite : 'lax');
188            },
189            isWebsiteAllowedToSaveCookie() {
190                const allowedCookies = this.get('user_allowed_save_cookie');
191                if (allowedCookies) {
192                    const allowedWebsites = JSON.parse(unescape(allowedCookies));
193
194                    return allowedWebsites[CURRENT_WEBSITE_ID] === 1;
195                }
196                return false;
197            },
198            getGroupByCookieName(name) {
199                const cookieConsentConfig = window.cookie_consent_config || {};
200                let group = null;
201                for (let prop in cookieConsentConfig) {
202                    if (!cookieConsentConfig.hasOwnProperty(prop)) continue;
203                    if (cookieConsentConfig[prop].includes(name)) {
204                        group = prop;
205                        break;
206                    }
207                }
208                return group;
209            },
210            isCookieAllowed(name) {
211                const cookieGroup = this.getGroupByCookieName(name);
212                return cookieGroup
213                    ? window.cookie_consent_groups[cookieGroup]
214                    : this.isWebsiteAllowedToSaveCookie();
215            },
216            saveTempStorageCookies() {
217                for (const [name, data] of Object.entries(cookieTempStorage)) {
218                    if (this.isCookieAllowed(name)) {
219                        this.set(name, data['value'], data['days'], data['skipSetDomain']);
220                        delete cookieTempStorage[name];
221                    }
222                }
223            }
224        };
225
226        hyva.getCookie = (name) => {
227            const cookieConfig = window.COOKIE_CONFIG || {};
228
229            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
230                return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null;
231            }
232
233            return internalCookie.get(name);
234        }
235
236        hyva.setCookie = (name, value, days, skipSetDomain) => {
237            const cookieConfig = window.COOKIE_CONFIG || {};
238
239            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
240                cookieTempStorage[name] = {value, days, skipSetDomain};
241                return;
242            }
243            return internalCookie.set(name, value, days, skipSetDomain);
244        }
245
246
247        hyva.setSessionCookie = (name, value, skipSetDomain) => {
248            return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain)
249        }
250
251        hyva.getBrowserStorage = () => {
252            const browserStorage = window.localStorage || window.sessionStorage;
253            if (!browserStorage) {
254                console.warn('Browser Storage is unavailable');
255                return false;
256            }
257            try {
258                browserStorage.setItem('storage_test', '1');
259                browserStorage.removeItem('storage_test');
260            } catch (error) {
261                console.warn('Browser Storage is not accessible', error);
262                return false;
263            }
264            return browserStorage;
265        }
266
267        hyva.postForm = (postParams) => {
268            const form = document.createElement("form");
269
270            let data = postParams.data;
271
272            if (! postParams.skipUenc && ! data.uenc) {
273                data.uenc = btoa(window.location.href);
274            }
275            form.method = "POST";
276            form.action = postParams.action;
277
278            Object.keys(postParams.data).map(key => {
279                const field = document.createElement("input");
280                field.type = 'hidden'
281                field.value = postParams.data[key];
282                field.name = key;
283                form.appendChild(field);
284            });
285
286            const form_key = document.createElement("input");
287            form_key.type = 'hidden';
288            form_key.value = hyva.getFormKey();
289            form_key.name="form_key";
290            form.appendChild(form_key);
291
292            document.body.appendChild(form);
293
294            form.submit();
295        }
296
297        hyva.getFormKey = function () {
298            let formKey = hyva.getCookie('form_key');
299
300            if (!formKey) {
301                formKey = generateRandomString();
302                hyva.setCookie('form_key', formKey);
303            }
304
305            return formKey;
306        }
307
308        hyva.formatPrice = (value, showSign, options = {}) => {
309            const groupSeparator = options.groupSeparator;
310            const decimalSeparator = options.decimalSeparator
311            delete options.groupSeparator;
312            delete options.decimalSeparator;
313            const formatter = new Intl.NumberFormat(
314                'de\u002DDE',
315                Object.assign({
316                    style: 'currency',
317                    currency: 'EUR',
318                    signDisplay: showSign ? 'always' : 'auto'
319                }, options)
320            );
321            return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ?
322                formatter.formatToParts(value).map(({type, value}) => {
323                    switch (type) {
324                        case 'currency':
325                            return '\u20AC' || value;
326                        case 'minusSign':
327                            return '- ';
328                        case 'plusSign':
329                            return '+ ';
330                        case 'group':
331                            return groupSeparator !== undefined ? groupSeparator : value;
332                        case 'decimal':
333                            return decimalSeparator !== undefined ? decimalSeparator : value;
334                        default :
335                            return value;
336                    }
337                }).reduce((string, part) => string + part) :
338                formatter.format(value);
339        }
340
341        const formatStr = function (str, nStart) {
342            const args = Array.from(arguments).slice(2);
343
344            return str.replace(/(%+)([0-9]+)/g, (m, p, n) => {
345                const idx = parseInt(n) - nStart;
346
347                if (args[idx] === null || args[idx] === void 0) {
348                    return m;
349                }
350                return p.length % 2
351                    ? p.slice(0, -1).replace('%%', '%') + args[idx]
352                    : p.replace('%%', '%') + n;
353            })
354        }
355
356        hyva.str = function (string) {
357            const args = Array.from(arguments);
358            args.splice(1, 0, 1);
359
360            return formatStr.apply(undefined, args);
361        }
362
363        hyva.strf = function () {
364            const args = Array.from(arguments);
365            args.splice(1, 0, 0);
366
367            return formatStr.apply(undefined, args);
368        }
369
370        /**
371         * Take a html string as `content` parameter and
372         * extract an element from the DOM to replace in
373         * the current page under the same selector,
374         * defined by `targetSelector`
375         */
376        hyva.replaceDomElement = (targetSelector, content) => {
377            // Parse the content and extract the DOM node using the `targetSelector`
378            const parser = new DOMParser();
379            const doc = parser.parseFromString(content, 'text/html');
380            const contentNode = doc.querySelector(targetSelector);
381
382            // Bail if content or target can't be found
383            if (!contentNode || !document.querySelector(targetSelector)) {
384                return;
385            }
386
387                        hyva.activateScripts(contentNode);
388            
389            // Replace the old DOM node with the new content
390            document.querySelector(targetSelector).replaceWith(contentNode);
391
392            // Reload customerSectionData and display cookie-messages if present
393            window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
394            hyva.initMessages();
395        }
396
397        hyva.removeScripts = (contentNode) => {
398            const scripts = contentNode.getElementsByTagName('script');
399            for (let i = 0; i < scripts.length; i++) {
400                scripts[i].parentNode.removeChild(scripts[i]);
401            }
402            const templates = contentNode.getElementsByTagName('template');
403            for (let i = 0; i < templates.length; i++) {
404                const container = document.createElement('div');
405                container.innerHTML = templates[i].innerHTML;
406                hyva.removeScripts(container);
407                templates[i].innerHTML = container.innerHTML;
408            }
409        }
410
411        hyva.activateScripts = (contentNode) => {
412            // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM.
413            const scripts = Array.from(contentNode.getElementsByTagName('script'));
414
415            // Iterate over all script tags to duplicate+inject each into the head
416            for (const original of scripts) {
417                const script = document.createElement('script');
418                original.type && (script.type = original.type);
419                script.innerHTML = original.innerHTML;
420
421                // Remove the original (non-executing) script from the contentNode
422                original.parentNode.removeChild(original)
423
424                // Add script to head
425                document.head.appendChild(script);
426            }
427
428            return contentNode;
429        }
430
431        const replace = {['+']: '-', ['/']: '_', ['=']: ','};
432        hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]);
433
434        let currentTrap;
435
436        const focusableElements = (rootElement) => {
437            const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]';
438            return Array.from(rootElement.querySelectorAll(selector))
439                .filter(el => {
440                    return el.style.display !== 'none'
441                        && !el.disabled
442                        && el.tabIndex !== -1
443                        && (el.offsetWidth || el.offsetHeight || el.getClientRects().length)
444                })
445        }
446
447        const focusTrap = (e) => {
448            const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
449            if (!isTabPressed) return;
450
451            const focusable = focusableElements(currentTrap)
452            const firstFocusableElement = focusable[0]
453            const lastFocusableElement = focusable[focusable.length - 1]
454
455            e.shiftKey
456                ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault())
457                : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault())
458        };
459
460        hyva.releaseFocus = (rootElement) => {
461            if (currentTrap && (!rootElement || rootElement === currentTrap)) {
462                currentTrap.removeEventListener('keydown', focusTrap)
463                currentTrap = null
464            }
465        }
466        hyva.trapFocus = (rootElement) => {
467            if (!rootElement) return;
468            hyva.releaseFocus()
469            currentTrap = rootElement
470            rootElement.addEventListener('keydown', focusTrap)
471            const firstElement = focusableElements(rootElement)[0]
472            firstElement && firstElement.focus()
473        }
474
475        hyva.safeParseNumber = (rawValue) => {
476            const number = rawValue ? parseFloat(rawValue) : null;
477
478            return Array.isArray(number) || isNaN(number) ? rawValue : number;
479        }
480
481        const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');
482        hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => {
483
484            const camelCase = toCamelCase(name);
485            const key = '__hyva_bool_' + name
486
487            return new Proxy(Object.assign(
488                additionalMethods,
489                {
490                    [key]: !!value,
491                    [name]() {return !!this[key]},
492                    ['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine
493                    ['not' + camelCase]() {return !this[key]},
494                    ['toggle' + camelCase]() {this[key] = !this[key]},
495                    [`set${camelCase}True`]() {this[key] = true},
496                    [`set${camelCase}False`]() {this[key] = false},
497                }
498            ), {
499                set(target, prop, value) {
500                    return prop === name
501                        ? (target[key] = !!value)
502                        : Reflect.set(...arguments);
503                }
504            })
505        }
506
507                hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true})
508        window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true});
509                window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies())
510
511    }( window.hyva = window.hyva || {} ));
512    //# sourceURL=hyva.js
513</script>
vendor: 1 bytes, line 513
513
514<script type="speculationrules">
515{
516    "tag": "Hyva Theme",
517    "prefetch": [{
518        "source": "document",
519        "where": {
520            "and": [
521                { "href_matches": "/*" },
522                { "not": {
523                    "href_matches": ["/customer/*","/search/*","/sales/*","/wishlist/*","/checkout/*","/paypal/*","/newsletter/*","/stores/store/redirect/*"]                }},
524                { "not": {
525                    "selector_matches": [".no-preload", ".do-not-prerender", "[download]", "[rel~=nofollow]", "[target]"]
526                }}
527            ]
528        },
529        "eagerness": "moderate"
530    }]
531}
532</script>
532
533
534<script>
535    const viewTransitionToGalleryPageStorage = 'view-transition-to-gallery-page-type';
536    const setTransitionNameBetweenGallery = async (url, promise) => {
537        if (window.matchMedia('(prefers-reduced-motion)').matches) return;
538
539        const productGallery = document.getElementById('gallery-main');
540        const productListItem = document.querySelector(`.product-item-photo[href="${url}"]`);
541        const targetElement = productListItem || productGallery;
542
543        if (targetElement) {
544            targetElement.style.viewTransitionName = 'view-transition-to-gallery';
545
546            await promise;
547            targetElement.style.viewTransitionName = '';
548        }
549    };
550
551    const getViewTransitionToGalleryPageIsProduct = () => {
552        return document.body.classList.contains('catalog-product-view') ? 'product-page' : 'other'
553    }
554
555    window.addEventListener('pageswap', async (e) => {
556        if (!e.viewTransition) return;
557        const pageType = getViewTransitionToGalleryPageIsProduct();
558        const target = new URL(e.activation.entry.url);
559
560        sessionStorage.setItem(viewTransitionToGalleryPageStorage, pageType);
561        setTransitionNameBetweenGallery(target.href, e.viewTransition.finished);
562    });
563
564    window.addEventListener('pagereveal', async (e) => {
565        if (!e.viewTransition || (window.navigation && !window.navigation.activation.from)) return;
566        const previousPageType = sessionStorage.getItem(viewTransitionToGalleryPageStorage);
567        const pageType = getViewTransitionToGalleryPageIsProduct();
568        sessionStorage.removeItem(viewTransitionToGalleryPageStorage);
569
570        if (previousPageType === pageType) return;
571        const target = new URL(window.navigation.activation.from.url);
572        setTransitionNameBetweenGallery(target.href, e.viewTransition.ready);
573    });
574</script>
574
575    
576    
576<script>window.algoliaConfig = JSON.parse('\u007B\u0022instant\u0022\u003A\u007B\u0022enabled\u0022\u003Atrue,\u0022selector\u0022\u003A\u0022.columns\u0022,\u0022isAddToCartEnabled\u0022\u003Afalse,\u0022addToCartParams\u0022\u003A\u007B\u0022action\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.laufshirt\u002Dbedrucken.de\u005C\u002Fcheckout\u005C\u002Fcart\u005C\u002Fadd\u005C\u002F\u0022,\u0022formKey\u0022\u003A\u0022HujNZleQ4X9NXZCR\u0022,\u0022redirectUrlParam\u0022\u003A\u0022uenc\u0022\u007D,\u0022infiniteScrollEnabled\u0022\u003Atrue,\u0022urlTrackedParameters\u0022\u003A\u005B\u0022query\u0022,\u0022attribute\u003A\u002A\u0022,\u0022index\u0022\u005D,\u0022isSearchBoxEnabled\u0022\u003Atrue,\u0022isVisualMerchEnabled\u0022\u003Afalse,\u0022categorySeparator\u0022\u003A\u0022\u0020\u005C\u002F\u005C\u002F\u005C\u002F\u0020\u0022,\u0022categoryPageIdAttribute\u0022\u003A\u0022categoryPageId\u0022,\u0022isCategoryNavigationEnabled\u0022\u003Afalse,\u0022hidePagination\u0022\u003Afalse,\u0022isDynamicFacetsEnabled\u0022\u003Afalse,\u0022redirects\u0022\u003A\u007B\u0022enabled\u0022\u003Afalse,\u0022onPageLoad\u0022\u003Atrue,\u0022onSearchAsYouType\u0022\u003Afalse,\u0022showSelectableRedirect\u0022\u003Atrue,\u0022openInNewWindow\u0022\u003Afalse\u007D\u007D,\u0022autocomplete\u0022\u003A\u007B\u0022enabled\u0022\u003Atrue,\u0022selector\u0022\u003A\u0022.algolia\u002Dsearch\u002Dinput\u0022,\u0022sections\u0022\u003A\u005B\u005D,\u0022nbOfProductsSuggestions\u0022\u003A4,\u0022nbOfCategoriesSuggestions\u0022\u003A3,\u0022nbOfQueriesSuggestions\u0022\u003A3,\u0022isDebugEnabled\u0022\u003Afalse,\u0022isNavigatorEnabled\u0022\u003Atrue,\u0022debounceMilliseconds\u0022\u003A300,\u0022minimumCharacters\u0022\u003A0,\u0022redirects\u0022\u003A\u007B\u0022enabled\u0022\u003Atrue,\u0022showSelectableRedirect\u0022\u003Atrue,\u0022showHitsWithRedirect\u0022\u003Afalse,\u0022openInNewWindow\u0022\u003Afalse\u007D\u007D,\u0022landingPage\u0022\u003A\u007B\u0022query\u0022\u003A\u0022\u0022,\u0022configuration\u0022\u003A\u0022\u005B\u005D\u0022\u007D,\u0022recommend\u0022\u003A\u007B\u0022enabledFBT\u0022\u003Afalse,\u0022enabledRelated\u0022\u003Afalse,\u0022enabledFBTInCart\u0022\u003Afalse,\u0022enabledRelatedInCart\u0022\u003Afalse,\u0022enabledLookingSimilar\u0022\u003A0,\u0022limitFBTProducts\u0022\u003A6,\u0022limitRelatedProducts\u0022\u003A6,\u0022limitTrendingItems\u0022\u003A6,\u0022limitLookingSimilar\u0022\u003A6,\u0022enabledTrendItems\u0022\u003A0,\u0022trendItemFacetName\u0022\u003Anull,\u0022trendItemFacetValue\u0022\u003Anull,\u0022isTrendItemsEnabledInPDP\u0022\u003A0,\u0022isTrendItemsEnabledInCartPage\u0022\u003A0,\u0022isAddToCartEnabledInFBT\u0022\u003Afalse,\u0022isAddToCartEnabledInRelatedProduct\u0022\u003Afalse,\u0022isAddToCartEnabledInTrendsItem\u0022\u003Afalse,\u0022isAddToCartEnabledInLookingSimilar\u0022\u003Afalse,\u0022FBTTitle\u0022\u003A\u0022Frequently\u0020bought\u0020together\u0022,\u0022relatedProductsTitle\u0022\u003A\u0022Related\u0020products\u0022,\u0022trendingItemsTitle\u0022\u003A\u0022Trending\u0020items\u0022,\u0022addToCartParams\u0022\u003A\u007B\u0022action\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.laufshirt\u002Dbedrucken.de\u005C\u002Fcheckout\u005C\u002Fcart\u005C\u002Fadd\u005C\u002F\u0022,\u0022formKey\u0022\u003A\u0022HujNZleQ4X9NXZCR\u0022,\u0022redirectUrlParam\u0022\u003A\u0022uenc\u0022\u007D,\u0022isLookingSimilarEnabledInPDP\u0022\u003A0,\u0022isLookingSimilarEnabledInCartPage\u0022\u003A0,\u0022lookingSimilarTitle\u0022\u003A\u0022Looking\u0020Similar\u0022\u007D,\u0022extensionVersion\u0022\u003A\u00223.17.2\u0022,\u0022applicationId\u0022\u003A\u0022J515FLU351\u0022,\u0022indexName\u0022\u003A\u0022live_dede\u0022,\u0022baseIndexName\u0022\u003A\u0022live_dede\u0022,\u0022apiKey\u0022\u003A\u0022ZTY1NzliZTcwYTQ3MDI4ZDAzMzlmYjA1ZmYwYTQ2MGQ4NjczNjk2Yzk0NzgzOWFlNTgwNjE1ZjgxYzdjZjRiZHRhZ0ZpbHRlcnM9JnZhbGlkVW50aWw9MTc5MTA3MzI3OQ\u003D\u003D\u0022,\u0022attributeFilter\u0022\u003A\u005B\u005D,\u0022facets\u0022\u003A\u005B\u007B\u0022attribute\u0022\u003A\u0022price\u0022,\u0022type\u0022\u003A\u0022slider\u0022,\u0022label\u0022\u003A\u0022Preis\u0022,\u0022searchable\u0022\u003A\u00222\u0022,\u0022create_rule\u0022\u003A\u00222\u0022\u007D,\u007B\u0022attribute\u0022\u003A\u0022categories\u0022,\u0022type\u0022\u003A\u0022conjunctive\u0022,\u0022label\u0022\u003A\u0022Kategorien\u0022,\u0022searchable\u0022\u003A\u00222\u0022,\u0022create_rule\u0022\u003A\u00222\u0022\u007D,\u007B\u0022attribute\u0022\u003A\u0022color\u0022,\u0022type\u0022\u003A\u0022disjunctive\u0022,\u0022label\u0022\u003A\u0022Farben\u0022,\u0022searchable\u0022\u003A\u00221\u0022,\u0022create_rule\u0022\u003A\u00222\u0022\u007D\u005D,\u0022areCategoriesInFacets\u0022\u003Atrue,\u0022hitsPerPage\u0022\u003A9,\u0022sortingIndices\u0022\u003A\u005B\u005D,\u0022isSearchPage\u0022\u003Afalse,\u0022isCategoryPage\u0022\u003Afalse,\u0022isLandingPage\u0022\u003Afalse,\u0022removeBranding\u0022\u003Atrue,\u0022productId\u0022\u003Anull,\u0022priceKey\u0022\u003A\u0022.EUR.default\u0022,\u0022priceGroup\u0022\u003Anull,\u0022origFormatedVar\u0022\u003A\u0022price.EUR.default_original_formated\u0022,\u0022tierFormatedVar\u0022\u003A\u0022price.EUR.default_tier_formated\u0022,\u0022currencyCode\u0022\u003A\u0022EUR\u0022,\u0022currencySymbol\u0022\u003A\u0022\u005Cu20ac\u0022,\u0022priceFormat\u0022\u003A\u007B\u0022pattern\u0022\u003A\u0022\u0025s\u005Cu00a0\u005Cu20ac\u0022,\u0022precision\u0022\u003A\u00222\u0022,\u0022requiredPrecision\u0022\u003A\u00222\u0022,\u0022decimalSymbol\u0022\u003A\u0022,\u0022,\u0022groupSymbol\u0022\u003A\u0022.\u0022,\u0022groupLength\u0022\u003A3,\u0022integerRequired\u0022\u003Afalse,\u0022currencyCode\u0022\u003Anull,\u0022showMinus\u0022\u003A\u0022before_symbol\u0022,\u0022symbol\u0022\u003A\u0022\u005Cu20ac\u0022,\u0022minu
576sSign\u0022\u003A\u0022\u0022\u007D,\u0022maxValuesPerFacet\u0022\u003A10,\u0022autofocus\u0022\u003Atrue,\u0022resultPageUrl\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.laufshirt\u002Dbedrucken.de\u005C\u002Fcatalogsearch\u005C\u002Fresult\u005C\u002F\u0022,\u0022request\u0022\u003A\u007B\u0022query\u0022\u003A\u0022\u0022,\u0022refinementKey\u0022\u003A\u0022\u0022,\u0022refinementValue\u0022\u003A\u0022\u0022,\u0022categoryId\u0022\u003A\u0022\u0022,\u0022landingPageId\u0022\u003A\u0022\u0022,\u0022path\u0022\u003A\u0022\u0022,\u0022level\u0022\u003A\u0022\u0022,\u0022parentCategory\u0022\u003A\u0022\u0022,\u0022childCategories\u0022\u003A\u005B\u005D,\u0022url\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.laufshirt\u002Dbedrucken.de\u005C\u002Fcheckout\u005C\u002Fcart\u005C\u002Findex\u005C\u002F\u0022\u007D,\u0022showCatsNotIncludedInNavigation\u0022\u003Afalse,\u0022showSuggestionsOnNoResultsPage\u0022\u003Afalse,\u0022baseUrl\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.laufshirt\u002Dbedrucken.de\u0022,\u0022popularQueries\u0022\u003A\u005B\u005D,\u0022useAdaptiveImage\u0022\u003Atrue,\u0022urls\u0022\u003A\u007B\u0022logo\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.laufshirt\u002Dbedrucken.de\u005C\u002Fstatic\u005C\u002Fversion1789730667\u005C\u002Ffrontend\u005C\u002FHyva\u005C\u002Fcustom\u005C\u002Fde_DE\u005C\u002FAlgolia_AlgoliaSearch\u005C\u002Fjs\u005C\u002Fimages\u005C\u002Falgolia\u002Dlogo\u002Dblue.svg\u0022\u007D,\u0022cookieConfiguration\u0022\u003A\u007B\u0022customerTokenCookie\u0022\u003A\u0022_ALGOLIA_MAGENTO_AUTH\u0022,\u0022consentCookieName\u0022\u003A\u0022user_allowed_save_cookie\u0022,\u0022cookieAllowButtonSelector\u0022\u003A\u0022\u0023btn\u002Dcookie\u002Dallow\u0022,\u0022cookieRestrictionModeEnabled\u0022\u003Afalse,\u0022cookieDuration\u0022\u003A\u002215552000000\u0022\u007D,\u0022ccAnalytics\u0022\u003A\u007B\u0022enabled\u0022\u003Atrue,\u0022ISSelector\u0022\u003A\u0022.ais\u002DHits\u002Ditem\u0020a.result,\u0020.ais\u002DInfiniteHits\u002Ditem\u0020a.result,\u0020.ais\u002DInfiniteHits\u002Ditem\u0020.actions\u0020a\u0022,\u0022conversionAnalyticsMode\u0022\u003A\u0022disable\u0022,\u0022addToCartSelector\u0022\u003A\u0022.action.primary.tocart\u0022,\u0022orderedProductIds\u0022\u003A\u005B\u005D\u007D,\u0022isPersonalizationEnabled\u0022\u003Afalse,\u0022personalization\u0022\u003A\u007B\u0022enabled\u0022\u003Afalse,\u0022viewedEvents\u0022\u003A\u007B\u0022viewProduct\u0022\u003A\u007B\u0022eventName\u0022\u003A\u0022Viewed\u0020Product\u0022,\u0022enabled\u0022\u003Afalse,\u0022method\u0022\u003A\u0022viewedObjectIDs\u0022\u007D\u007D,\u0022clickedEvents\u0022\u003A\u007B\u0022productClicked\u0022\u003A\u007B\u0022eventName\u0022\u003A\u0022Product\u0020Clicked\u0022,\u0022enabled\u0022\u003Afalse,\u0022selector\u0022\u003A\u0022.ais\u002DHits\u002Ditem\u0020a.result,\u0020.ais\u002DInfiniteHits\u002Ditem\u0020a.result\u0022,\u0022method\u0022\u003A\u0022clickedObjectIDs\u0022\u007D,\u0022productRecommended\u0022\u003A\u007B\u0022eventName\u0022\u003A\u0022Recommended\u0020Product\u0020Clicked\u0022,\u0022enabled\u0022\u003Afalse,\u0022selector\u0022\u003A\u0022.products\u002Dupsell\u0020.product\u002Ditem\u0022,\u0022method\u0022\u003A\u0022clickedObjectIDs\u0022\u007D\u007D,\u0022filterClicked\u0022\u003A\u007B\u0022eventName\u0022\u003A\u0022Filter\u0020Clicked\u0022,\u0022enabled\u0022\u003Afalse,\u0022method\u0022\u003A\u0022clickedFilters\u0022\u007D\u007D,\u0022analytics\u0022\u003A\u007B\u0022enabled\u0022\u003Afalse,\u0022delay\u0022\u003A\u00223000\u0022,\u0022triggerOnUiInteraction\u0022\u003A\u00221\u0022,\u0022pushInitialSearch\u0022\u003A\u00220\u0022\u007D,\u0022now\u0022\u003A1790985600,\u0022queue\u0022\u003A\u007B\u0022isEnabled\u0022\u003Atrue,\u0022nbOfJobsToRun\u0022\u003A10,\u0022retryLimit\u0022\u003A3,\u0022nbOfElementsPerIndexingJob\u0022\u003A1000\u007D,\u0022isPreventBackendRenderingEnabled\u0022\u003Afalse,\u0022translations\u0022\u003A\u007B\u0022to\u0022\u003A\u0022bis\u0022,\u0022or\u0022\u003A\u0022oder\u0022,\u0022go\u0022\u003A\u0022Los\u0022,\u0022popularQueries\u0022\u003A\u0022Probieren\u0020Sie\u0020einen\u0020beliebten\u0020Suchbegriff\u0022,\u0022seeAll\u0022\u003A\u0022Alle\u0020Produkte\u0020ansehen\u0022,\u0022allDepartments\u0022\u003A\u0022allen\u0020Kategorien\u0022,\u0022seeIn\u0022\u003A\u0022Produkte\u0020anzeigen\u0020in\u0022,\u0022orIn\u0022\u003A\u0022oder\u0020in\u0022,\u0022noProducts\u0022\u003A\u0022Keine\u0020Produkte\u0020f\u005Cu00fcr\u0020diesen\u0020Suchbegriff\u0022,\u0022noResults\u0022\u003A\u0022Keine\u0020Ergebnisse\u0022,\u0022refine\u0022\u003A\u0022Verbessern\u0022,\u0022selectedFilters\u0022\u003A\u0022Ausgew\u005Cu00e4hlte\u0020Filter\u0022,\u0022clearAll\u0022\u003A\u0022Alles\u0020l\u005Cu00f6schen\u0022,\u0022previousPage\u0022\u003A\u0022Vorherige\u0020Seite\u0022,\u0022nextPage\u0022\u003A\u0022N\u005Cu00e4chste\u0020Seite\u0022,\u0022searchFor\u0022\u003A\u0022Suche\u0020nach\u0020Produkten\u0022,\u0022relevance\u0022\u003A\u0022Relevanz\u0022,\u0022categories\u0022\u003A\u0022Kategorien\u0022,\u0022products\u0022\u003A\u0022Artikel\u0022,\u0022suggestions\u0022\u003A\u0022Vorschl\u005Cu00e4ge\u
5760022,\u0022searchBy\u0022\u003A\u0022Suche\u0020von\u0022,\u0022redirectSearchPrompt\u0022\u003A\u0022Continue\u0020search\u0020for\u0022,\u0022searchForFacetValuesPlaceholder\u0022\u003A\u0022Suche\u0020nach\u0020weiteren\u0020...\u0022,\u0022showMore\u0022\u003A\u0022Zeige\u0020mehr\u0020Produkte\u0022,\u0022searchTitle\u0022\u003A\u0022Search\u0020results\u0020for\u0022,\u0022placeholder\u0022\u003A\u0022Suchen\u0022,\u0022addToCart\u0022\u003A\u0022In\u0020den\u0020Warenkorb\u0022\u007D\u007D')</script>
576
577
578</head>
579<body id="html-body" class="checkout-cart-index page-layout-1column">
580<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 580-581
580
581<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
581GTM-T74P3V5K
vendor: 85 bytes, lines 581-582
581"
582height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
583<!-- End Google Tag Manager (noscript) -->
583<script>
584    'use strict';
585
586    (function () {
587        window.fbqCompatiilityGdprCookie = {
588            allowedCookies: null,
589            disallowedCookies: null,
590            isAllowedToRunScript: null,
591            facebookPixelCookieName: '_fbp',
592            listeners: [
593                "cookiebar-action-accept-finish",
594                "cookiebar-action-allow-finish"
595            ],
596
597            /**
598             * @public
599             * @params {Object} config
600             * @returns {void}
601             */
602            init(config) {
603                this.listeners.forEach(listener => {
604                    window.addEventListener(listener, () =>
605                        this.sendFbq(config),
606                        {once:true}
607                    );
608                });
609
610                this.sendFbq(config);
611            },
612
613            /**
614             * @private
615             * @params {Object} config
616             * @returns {void}
617             */
618            sendFbq: function (config) {
619                this.disallowedCookies = hyva.getCookie('amcookie_disallowed') || '';
620                this.allowedCookies = hyva.getCookie('amcookie_allowed') || '';
621                this.isAllowedToRunScript = !!this.allowedCookies.length
622                    && (!this.disallowedCookies || this.disallowedCookies.indexOf(this.facebookPixelCookieName) === -1)
623
624                if (this.isAllowedToRunScript) {
625                    fbq(config.callMethod, config.arguments, config.advancedInfo ?? {});
626                }
627            }
628        }
629    })();
630</script>
630
631    
631<script>
632        !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
633            n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
634            n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];
635            t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];
636            s.parentNode.insertBefore(t,s)}(window,
637            document,'script','https://connect.facebook.net/en_US/fbevents.js');
638    </script>
638
639                            <!-- Facebook Pixel Code -->
640        <noscript>
641            <img height="1" width="1" style="display:none" alt="Facebook Pixel"
642                 src="https://www.facebook.com/tr?id=1063173096054465&ev=PageView&noscript=1"
643            />
644        </noscript>
645                <!-- End Facebook Pixel Code -->
646                        
646<script>fbq('init', 1063173096054465, {})</script>
646
647                
647<script> fbq('track', 'PageView') </script>
647
648    <input name="form_key" type="hidden" value="HujNZleQ4X9NXZCR" />
649    <noscript>
650        <section
651            class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"
652            aria-labelledby="messageGlobalNoScriptMessage"
653        >
654            <div class="container text-center">
655                <p id="messageGlobalNoScriptMessage">
656                    <strong>JavaScript scheint in Ihrem Browser deaktiviert zu sein.</strong>
657                    <span>
658                        Um unsere Website in bester Weise zu erfahren, aktivieren Sie Javascript in Ihrem Browser.                    </span>
659                </p>
660            </div>
661        </section>
662    </noscript>
663
664
665<script>
666    document.body.addEventListener('touchstart', () => {}, {passive: true})
667</script>
667
668<div class="page-wrapper"><header class="page-header"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white
669   contentarea"
670   href="#contentarea">
671    <span>
672        Zum Inhalt springen    </span>
673</a>
674<script>
675    function initHeader () {
676        return {
677            cart: {},
678            isCartOpen: false,
679            getData(data) {
680                if (data.cart) { this.cart = data.cart }
681            },
682            isCartEmpty() {
683                return !this.cart.summary_count
684            },
685            toggleCart(event) {
686                if (event.detail && event.detail.isOpen !== undefined) {
687                    this.isCartOpen = event.detail.isOpen
688                    if (!this.isCartOpen && this.$refs && this.$refs.cartButton) {
689                        this.$refs.cartButton.focus()
690                    }
691                } else {
692                                        this.isCartOpen = true
693                }
694            }
695        }
696    }
697    function initCompareHeader() {
698        return {
699            compareProducts: null,
700            itemCount: 0,
701            receiveCompareData(data) {
702                if (data['compare-products']) {
703                    this.compareProducts = data['compare-products'];
704                    this.itemCount = this.compareProducts.count;
705                }
706            }
707        }
708    }
709</script>
709
710<div id="header"
711     class="relative z-30 w-full border-b shadow bg-container-lighter border-container-lighter"
712     x-data="initHeader()"
713     @private-content-loaded.window="getData(event.detail.data)"
714>
715    <div class="container flex flex-wrap lg:flex-nowrap items-center justify-between w-full px-6 py-3 mx-auto mt-0">
716        <!--Logo-->
717        <div class="logo-wrapper">
718    <div class="burger-container">
719        <div id="burger">
720            <div class="bar topBar"></div>
721            <div class="bar ctrBar"></div>
722            <div class="bar btmBar"></div>
723        </div>
724    </div>
725    <a
726        class="logo"
727        href="https://www.laufshirt-bedrucken.de/"
728        title="de"
729        aria-label="store logo">
730        <img class="logo-desktop" src="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/LaufshirtBedrucken_HyvaCheckout/images/logo/store-logo-de.svg"
731             title="de"
732             alt="de"
733            width="189"            height="64"        />
734        <img class="logo-mobile"
735             title="de"
736             src="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/images/logo/logo-mobile-de.svg"
737        />
738    </a>
739
740</div>
741
742        <!--Main Navigation-->
743        <nav
744    x-data="initMenuMobile_6ac04a7f575ba()"
745    @load.window="setActiveMenu($root)"
746    @keydown.window.escape="closeMenu()"
747    class="z-20 order-2 sm:order-1 lg:order-2 navigation hidden w-12 h-12"
748    aria-label="Site&#x20;navigation"
749    role="navigation"
750>
751    <!-- mobile -->
752    <button
753        x-ref="mobileMenuTrigger"
754        @click="openMenu()"
755        :class="{'overflow-x-hidden overflow-y-auto fixed top-0 left-0 w-full' : open}"
756        type="button"
757        aria-label="Open&#x20;menu"
758        aria-haspopup="menu"
759        :aria-expanded="open"
760        :hidden="open"
761    >
762        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="p-3" width="48" height="48" :class="{ 'hidden' : open, 'block': !open }" aria-hidden="true">
763  <path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"/>
764</svg>
765    </button>
766    <div
767        x-ref="mobileMenuNavLinks"
768        class="
769            fixed top-0 right-0 w-full h-full p-1 hidden
770            flex-col border-t border-container bg-container-lighter
771            overflow-y-auto overflow-x-hidden
772        "
773        :class="{ 'flex': open, 'hidden': !open }"
774        :aria-hidden="open ? 'false' : 'true'"
775        role="dialog"
776        aria-modal="true"
777    >
778        <ul
779            class="border-t flex flex-col gap-y-1 mt-16"
780            aria-label="Site&#x20;navigation&#x20;links"
781        >
782                            <li
783                    data-child-id="category-node-60-main"
784                    class="level-0"
785                >
786                    <div
787                        class="flex items-center transition-transform duration-150 ease-in-out transform"
788                        :class="{
789                            '-translate-x-full' : mobilePanelActiveId,
790                            'translate-x-0' : !mobilePanelActiveId
791                        }"
792                    >
793                        <a
794                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
795                                bg-container-lighter border-container level-0
796                            "
797                            href="https://www.laufshirt-bedrucken.de/laufshirts/"
798                            title="Laufshirts"
799                        >
800                            Laufshirts                        </a>
801                                                    <button
802                                @click="openSubcategory('category-node-60')"
803                                class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer
804                                bg-container-lighter border-container"
805                                aria-label="Open&#x20;Laufshirts&#x20;subcategories"
806                                aria-haspopup="true"
807                                :aria-expanded="mobilePanelActiveId === 'category-node-60'"
808                            >
809                                <div class="w-8 h-8 border rounded">
810                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true">
811  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
812</svg>
813                                </div>
814                            </button>
815                                            </div>
816                                            <div
817                            data-child-id="category-node-60"
818                            class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter"
819                            :class="{
820                                'hidden': mobilePanelActiveId !== 'category-node-60'
821                            }"
822                        >
823                            <ul
824                                class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform"
825                                :class="{
826                                    'translate-x-full' : mobilePanelActiveId !== 'category-node-60',
827                                    'translate-x-0' : mobilePanelActiveId === 'category-node-60',
828                                }"
829                                aria-label="Subcategories"
830                            >
831                                <li>
832                                    <button
833                                        type="button"
834                                        class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t"
835                                        @click="backToMainCategories('category-node-60-main')"
836                                        aria-label="Back&#x20;to&#x20;main&#x20;categories"
837                                    >
838                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
839  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
840</svg>
841                                        <span class="ml-4">
842                                            Laufshirts                                        </span>
843                                    </button>
844                                </li>
845                                <li>
846                                    <a
847                                        href="https://www.laufshirt-bedrucken.de/laufshirts/"
848                                        title="Laufshirts"
849                                        class="flex items-center w-full px-8 py-4 border-b cursor-pointer
850                                            bg-container-lighter border-container
851                                        "
852                                    >
853                                        <span class="ml-10">
854                                            Alle anzeigen                                        </span>
855                                    </a>
856                                </li>
857                                                                    <li>
858                                        <a
859                                            href="https://www.laufshirt-bedrucken.de/laufshirts/angebote/"
860                                            title="Angebote"
861                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
862                                                bg-container-lighter border-container
863                                            "
864                                        >
865                                            <span class="ml-10 text-base text-gray-700">
866                                                Angebote                                            </span>
867                                        </a>
868                                    </li>
869                                                                    <li>
870                                        <a
871                                            href="https://www.laufshirt-bedrucken.de/laufshirts/damen-laufshirts-bedrucken/"
872                                            title="Damen"
873                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
874                                                bg-container-lighter border-container
875                                            "
876                                        >
877                                            <span class="ml-10 text-base text-gray-700">
878                                                Damen                                            </span>
879                                        </a>
880                                    </li>
881                                                                    <li>
882                                        <a
883                                            href="https://www.laufshirt-bedrucken.de/laufshirts/herren-laufshirts-bedrucken/"
884                                            title="Herren"
885                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
886                                                bg-container-lighter border-container
887                                            "
888                                        >
889                                            <span class="ml-10 text-base text-gray-700">
890                                                Herren                                            </span>
891                                        </a>
892                                    </li>
893                                                                    <li>
894                                        <a
895                                            href="https://www.laufshirt-bedrucken.de/laufshirts/kinder-laufshirts-bedrucken/"
896                                            title="Kinder"
897                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
898                                                bg-container-lighter border-container
899                                            "
900                                        >
901                                            <span class="ml-10 text-base text-gray-700">
902                                                Kinder                                            </span>
903                                        </a>
904                                    </li>
905                                                            </ul>
906                            <button
907                                @click="closeMenu()"
908                                class="absolute flex justify-end w-16 self-end mb-1 transition-none"
909                                aria-label="Close&#x20;menu"
910                            >
911                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true">
912  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
913</svg>
914                            </button>
915                        </div>
916                                    </li>
917                            <li
918                    data-child-id="category-node-498-main"
919                    class="level-0"
920                >
921                    <div
922                        class="flex items-center transition-transform duration-150 ease-in-out transform"
923                        :class="{
924                            '-translate-x-full' : mobilePanelActiveId,
925                            'translate-x-0' : !mobilePanelActiveId
926                        }"
927                    >
928                        <a
929                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
930                                bg-container-lighter border-container level-0
931                            "
932                            href="https://www.laufshirt-bedrucken.de/manner-20689/"
933                            title="M&#xE4;nner"
934                        >
935                            Männer                        </a>
936                                                    <button
937                                @click="openSubcategory('category-node-498')"
938                                class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer
939                                bg-container-lighter border-container"
940                                aria-label="Open&#x20;M&#xE4;nner&#x20;subcategories"
941                                aria-haspopup="true"
942                                :aria-expanded="mobilePanelActiveId === 'category-node-498'"
943                            >
944                                <div class="w-8 h-8 border rounded">
945                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true">
946  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
947</svg>
948                                </div>
949                            </button>
950                                            </div>
951                                            <div
952                            data-child-id="category-node-498"
953                            class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter"
954                            :class="{
955                                'hidden': mobilePanelActiveId !== 'category-node-498'
956                            }"
957                        >
958                            <ul
959                                class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform"
960                                :class="{
961                                    'translate-x-full' : mobilePanelActiveId !== 'category-node-498',
962                                    'translate-x-0' : mobilePanelActiveId === 'category-node-498',
963                                }"
964                                aria-label="Subcategories"
965                            >
966                                <li>
967                                    <button
968                                        type="button"
969                                        class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t"
970                                        @click="backToMainCategories('category-node-498-main')"
971                                        aria-label="Back&#x20;to&#x20;main&#x20;categories"
972                                    >
973                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
974  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
975</svg>
976                                        <span class="ml-4">
977                                            Männer                                        </span>
978                                    </button>
979                                </li>
980                                <li>
981                                    <a
982                                        href="https://www.laufshirt-bedrucken.de/manner-20689/"
983                                        title="M&#xE4;nner"
984                                        class="flex items-center w-full px-8 py-4 border-b cursor-pointer
985                                            bg-container-lighter border-container
986                                        "
987                                    >
988                                        <span class="ml-10">
989                                            Alle anzeigen                                        </span>
990                                    </a>
991                                </li>
992                                                                    <li>
993                                        <a
994                                            href="https://www.laufshirt-bedrucken.de/manner-20689/mpullover-20690/"
995                                            title="MPullover"
996                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
997                                                bg-container-lighter border-container
998                                            "
999                                        >
1000                                            <span class="ml-10 text-base text-gray-700">
1001                                                MPullover                                            </span>
1002                                        </a>
1003                                    </li>
1004                                                            </ul>
1005                            <button
1006                                @click="closeMenu()"
1007                                class="absolute flex justify-end w-16 self-end mb-1 transition-none"
1008                                aria-label="Close&#x20;menu"
1009                            >
1010                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true">
1011  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1012</svg>
1013                            </button>
1014                        </div>
1015                                    </li>
1016                            <li
1017                    data-child-id="category-node-86-main"
1018                    class="level-0"
1019                >
1020                    <div
1021                        class="flex items-center transition-transform duration-150 ease-in-out transform"
1022                        :class="{
1023                            '-translate-x-full' : mobilePanelActiveId,
1024                            'translate-x-0' : !mobilePanelActiveId
1025                        }"
1026                    >
1027                        <a
1028                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1029                                bg-container-lighter border-container level-0
1030                            "
1031                            href="https://www.laufshirt-bedrucken.de/langarm-laufshirts/"
1032                            title="Langarm&#x20;Laufshirts"
1033                        >
1034                            Langarm Laufshirts                        </a>
1035                                                    <button
1036                                @click="openSubcategory('category-node-86')"
1037                                class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer
1038                                bg-container-lighter border-container"
1039                                aria-label="Open&#x20;Langarm&#x20;Laufshirts&#x20;subcategories"
1040                                aria-haspopup="true"
1041                                :aria-expanded="mobilePanelActiveId === 'category-node-86'"
1042                            >
1043                                <div class="w-8 h-8 border rounded">
1044                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true">
1045  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1046</svg>
1047                                </div>
1048                            </button>
1049                                            </div>
1050                                            <div
1051                            data-child-id="category-node-86"
1052                            class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter"
1053                            :class="{
1054                                'hidden': mobilePanelActiveId !== 'category-node-86'
1055                            }"
1056                        >
1057                            <ul
1058                                class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform"
1059                                :class="{
1060                                    'translate-x-full' : mobilePanelActiveId !== 'category-node-86',
1061                                    'translate-x-0' : mobilePanelActiveId === 'category-node-86',
1062                                }"
1063                                aria-label="Subcategories"
1064                            >
1065                                <li>
1066                                    <button
1067                                        type="button"
1068                                        class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t"
1069                                        @click="backToMainCategories('category-node-86-main')"
1070                                        aria-label="Back&#x20;to&#x20;main&#x20;categories"
1071                                    >
1072                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
1073  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
1074</svg>
1075                                        <span class="ml-4">
1076                                            Langarm Laufshirts                                        </span>
1077                                    </button>
1078                                </li>
1079                                <li>
1080                                    <a
1081                                        href="https://www.laufshirt-bedrucken.de/langarm-laufshirts/"
1082                                        title="Langarm&#x20;Laufshirts"
1083                                        class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1084                                            bg-container-lighter border-container
1085                                        "
1086                                    >
1087                                        <span class="ml-10">
1088                                            Alle anzeigen                                        </span>
1089                                    </a>
1090                                </li>
1091                                                                    <li>
1092                                        <a
1093                                            href="https://www.laufshirt-bedrucken.de/langarm-laufshirts/herren-langarm-laufshirts-bedrucken/"
1094                                            title="Herren"
1095                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1096                                                bg-container-lighter border-container
1097                                            "
1098                                        >
1099                                            <span class="ml-10 text-base text-gray-700">
1100                                                Herren                                            </span>
1101                                        </a>
1102                                    </li>
1103                                                                    <li>
1104                                        <a
1105                                            href="https://www.laufshirt-bedrucken.de/langarm-laufshirts/damen-langarm-laufshirts-bedrucken/"
1106                                            title="Damen"
1107                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1108                                                bg-container-lighter border-container
1109                                            "
1110                                        >
1111                                            <span class="ml-10 text-base text-gray-700">
1112                                                Damen                                            </span>
1113                                        </a>
1114                                    </li>
1115                                                                    <li>
1116                                        <a
1117                                            href="https://www.laufshirt-bedrucken.de/langarm-laufshirts/kinder-langarm-laufshirts-bedrucken/"
1118                                            title="Kinder"
1119                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1120                                                bg-container-lighter border-container
1121                                            "
1122                                        >
1123                                            <span class="ml-10 text-base text-gray-700">
1124                                                Kinder                                            </span>
1125                                        </a>
1126                                    </li>
1127                                                            </ul>
1128                            <button
1129                                @click="closeMenu()"
1130                                class="absolute flex justify-end w-16 self-end mb-1 transition-none"
1131                                aria-label="Close&#x20;menu"
1132                            >
1133                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true">
1134  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1135</svg>
1136                            </button>
1137                        </div>
1138                                    </li>
1139                            <li
1140                    data-child-id="category-node-116-main"
1141                    class="level-0"
1142                >
1143                    <div
1144                        class="flex items-center transition-transform duration-150 ease-in-out transform"
1145                        :class="{
1146                            '-translate-x-full' : mobilePanelActiveId,
1147                            'translate-x-0' : !mobilePanelActiveId
1148                        }"
1149                    >
1150                        <a
1151                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1152                                bg-container-lighter border-container level-0
1153                            "
1154                            href="https://www.laufshirt-bedrucken.de/softshelljacken-16934/"
1155                            title="Softshelljacken"
1156                        >
1157                            Softshelljacken                        </a>
1158                                                    <button
1159                                @click="openSubcategory('category-node-116')"
1160                                class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer
1161                                bg-container-lighter border-container"
1162                                aria-label="Open&#x20;Softshelljacken&#x20;subcategories"
1163                                aria-haspopup="true"
1164                                :aria-expanded="mobilePanelActiveId === 'category-node-116'"
1165                            >
1166                                <div class="w-8 h-8 border rounded">
1167                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true">
1168  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1169</svg>
1170                                </div>
1171                            </button>
1172                                            </div>
1173                                            <div
1174                            data-child-id="category-node-116"
1175                            class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter"
1176                            :class="{
1177                                'hidden': mobilePanelActiveId !== 'category-node-116'
1178                            }"
1179                        >
1180                            <ul
1181                                class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform"
1182                                :class="{
1183                                    'translate-x-full' : mobilePanelActiveId !== 'category-node-116',
1184                                    'translate-x-0' : mobilePanelActiveId === 'category-node-116',
1185                                }"
1186                                aria-label="Subcategories"
1187                            >
1188                                <li>
1189                                    <button
1190                                        type="button"
1191                                        class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t"
1192                                        @click="backToMainCategories('category-node-116-main')"
1193                                        aria-label="Back&#x20;to&#x20;main&#x20;categories"
1194                                    >
1195                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
1196  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
1197</svg>
1198                                        <span class="ml-4">
1199                                            Softshelljacken                                        </span>
1200                                    </button>
1201                                </li>
1202                                <li>
1203                                    <a
1204                                        href="https://www.laufshirt-bedrucken.de/softshelljacken-16934/"
1205                                        title="Softshelljacken"
1206                                        class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1207                                            bg-container-lighter border-container
1208                                        "
1209                                    >
1210                                        <span class="ml-10">
1211                                            Alle anzeigen                                        </span>
1212                                    </a>
1213                                </li>
1214                                                                    <li>
1215                                        <a
1216                                            href="https://www.laufshirt-bedrucken.de/softshelljacken-16934/herren-16937/"
1217                                            title="Herren&#x20;Softshelljacken&#x20;bedrucken"
1218                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1219                                                bg-container-lighter border-container
1220                                            "
1221                                        >
1222                                            <span class="ml-10 text-base text-gray-700">
1223                                                Herren Softshelljacken bedrucken                                            </span>
1224                                        </a>
1225                                    </li>
1226                                                                    <li>
1227                                        <a
1228                                            href="https://www.laufshirt-bedrucken.de/softshelljacken-16934/damen-16936/"
1229                                            title="Damen&#x20;Softshelljacken&#x20;bedrucken"
1230                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1231                                                bg-container-lighter border-container
1232                                            "
1233                                        >
1234                                            <span class="ml-10 text-base text-gray-700">
1235                                                Damen Softshelljacken bedrucken                                            </span>
1236                                        </a>
1237                                    </li>
1238                                                                    <li>
1239                                        <a
1240                                            href="https://www.laufshirt-bedrucken.de/softshelljacken-16934/kinder-16935/"
1241                                            title="Kinder&#x20;Softshelljacken&#x20;bedrucken"
1242                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1243                                                bg-container-lighter border-container
1244                                            "
1245                                        >
1246                                            <span class="ml-10 text-base text-gray-700">
1247                                                Kinder Softshelljacken bedrucken                                            </span>
1248                                        </a>
1249                                    </li>
1250                                                            </ul>
1251                            <button
1252                                @click="closeMenu()"
1253                                class="absolute flex justify-end w-16 self-end mb-1 transition-none"
1254                                aria-label="Close&#x20;menu"
1255                            >
1256                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true">
1257  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1258</svg>
1259                            </button>
1260                        </div>
1261                                    </li>
1262                            <li
1263                    data-child-id="category-node-35-main"
1264                    class="level-0"
1265                >
1266                    <div
1267                        class="flex items-center transition-transform duration-150 ease-in-out transform"
1268                        :class="{
1269                            '-translate-x-full' : mobilePanelActiveId,
1270                            'translate-x-0' : !mobilePanelActiveId
1271                        }"
1272                    >
1273                        <a
1274                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1275                                bg-container-lighter border-container level-0
1276                            "
1277                            href="https://www.laufshirt-bedrucken.de/tanktops-und-singlets/"
1278                            title="Tanktops&#x20;und&#x20;Singlets"
1279                        >
1280                            Tanktops und Singlets                        </a>
1281                                                    <button
1282                                @click="openSubcategory('category-node-35')"
1283                                class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer
1284                                bg-container-lighter border-container"
1285                                aria-label="Open&#x20;Tanktops&#x20;und&#x20;Singlets&#x20;subcategories"
1286                                aria-haspopup="true"
1287                                :aria-expanded="mobilePanelActiveId === 'category-node-35'"
1288                            >
1289                                <div class="w-8 h-8 border rounded">
1290                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true">
1291  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1292</svg>
1293                                </div>
1294                            </button>
1295                                            </div>
1296                                            <div
1297                            data-child-id="category-node-35"
1298                            class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter"
1299                            :class="{
1300                                'hidden': mobilePanelActiveId !== 'category-node-35'
1301                            }"
1302                        >
1303                            <ul
1304                                class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform"
1305                                :class="{
1306                                    'translate-x-full' : mobilePanelActiveId !== 'category-node-35',
1307                                    'translate-x-0' : mobilePanelActiveId === 'category-node-35',
1308                                }"
1309                                aria-label="Subcategories"
1310                            >
1311                                <li>
1312                                    <button
1313                                        type="button"
1314                                        class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t"
1315                                        @click="backToMainCategories('category-node-35-main')"
1316                                        aria-label="Back&#x20;to&#x20;main&#x20;categories"
1317                                    >
1318                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
1319  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
1320</svg>
1321                                        <span class="ml-4">
1322                                            Tanktops und Singlets                                        </span>
1323                                    </button>
1324                                </li>
1325                                <li>
1326                                    <a
1327                                        href="https://www.laufshirt-bedrucken.de/tanktops-und-singlets/"
1328                                        title="Tanktops&#x20;und&#x20;Singlets"
1329                                        class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1330                                            bg-container-lighter border-container
1331                                        "
1332                                    >
1333                                        <span class="ml-10">
1334                                            Alle anzeigen                                        </span>
1335                                    </a>
1336                                </li>
1337                                                                    <li>
1338                                        <a
1339                                            href="https://www.laufshirt-bedrucken.de/tanktops-und-singlets/herren-tanktops-und-singlets-bedrucken/"
1340                                            title="Herren"
1341                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1342                                                bg-container-lighter border-container
1343                                            "
1344                                        >
1345                                            <span class="ml-10 text-base text-gray-700">
1346                                                Herren                                            </span>
1347                                        </a>
1348                                    </li>
1349                                                                    <li>
1350                                        <a
1351                                            href="https://www.laufshirt-bedrucken.de/tanktops-und-singlets/damen-tanktops-und-singlets-bedrucken/"
1352                                            title="Damen"
1353                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1354                                                bg-container-lighter border-container
1355                                            "
1356                                        >
1357                                            <span class="ml-10 text-base text-gray-700">
1358                                                Damen                                            </span>
1359                                        </a>
1360                                    </li>
1361                                                                    <li>
1362                                        <a
1363                                            href="https://www.laufshirt-bedrucken.de/tanktops-und-singlets/kinder-tanktops-und-singlets-bedrucken/"
1364                                            title="Kinder"
1365                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1366                                                bg-container-lighter border-container
1367                                            "
1368                                        >
1369                                            <span class="ml-10 text-base text-gray-700">
1370                                                Kinder                                            </span>
1371                                        </a>
1372                                    </li>
1373                                                            </ul>
1374                            <button
1375                                @click="closeMenu()"
1376                                class="absolute flex justify-end w-16 self-end mb-1 transition-none"
1377                                aria-label="Close&#x20;menu"
1378                            >
1379                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true">
1380  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1381</svg>
1382                            </button>
1383                        </div>
1384                                    </li>
1385                            <li
1386                    data-child-id="category-node-55-main"
1387                    class="level-0"
1388                >
1389                    <div
1390                        class="flex items-center transition-transform duration-150 ease-in-out transform"
1391                        :class="{
1392                            '-translate-x-full' : mobilePanelActiveId,
1393                            'translate-x-0' : !mobilePanelActiveId
1394                        }"
1395                    >
1396                        <a
1397                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1398                                bg-container-lighter border-container level-0
1399                            "
1400                            href="https://www.laufshirt-bedrucken.de/accessoires/"
1401                            title="Accessoires&#x20;bedrucken"
1402                        >
1403                            Accessoires bedrucken                        </a>
1404                                                    <button
1405                                @click="openSubcategory('category-node-55')"
1406                                class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer
1407                                bg-container-lighter border-container"
1408                                aria-label="Open&#x20;Accessoires&#x20;bedrucken&#x20;subcategories"
1409                                aria-haspopup="true"
1410                                :aria-expanded="mobilePanelActiveId === 'category-node-55'"
1411                            >
1412                                <div class="w-8 h-8 border rounded">
1413                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true">
1414  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1415</svg>
1416                                </div>
1417                            </button>
1418                                            </div>
1419                                            <div
1420                            data-child-id="category-node-55"
1421                            class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter"
1422                            :class="{
1423                                'hidden': mobilePanelActiveId !== 'category-node-55'
1424                            }"
1425                        >
1426                            <ul
1427                                class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform"
1428                                :class="{
1429                                    'translate-x-full' : mobilePanelActiveId !== 'category-node-55',
1430                                    'translate-x-0' : mobilePanelActiveId === 'category-node-55',
1431                                }"
1432                                aria-label="Subcategories"
1433                            >
1434                                <li>
1435                                    <button
1436                                        type="button"
1437                                        class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t"
1438                                        @click="backToMainCategories('category-node-55-main')"
1439                                        aria-label="Back&#x20;to&#x20;main&#x20;categories"
1440                                    >
1441                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
1442  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
1443</svg>
1444                                        <span class="ml-4">
1445                                            Accessoires bedrucken                                        </span>
1446                                    </button>
1447                                </li>
1448                                <li>
1449                                    <a
1450                                        href="https://www.laufshirt-bedrucken.de/accessoires/"
1451                                        title="Accessoires&#x20;bedrucken"
1452                                        class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1453                                            bg-container-lighter border-container
1454                                        "
1455                                    >
1456                                        <span class="ml-10">
1457                                            Alle anzeigen                                        </span>
1458                                    </a>
1459                                </li>
1460                                                                    <li>
1461                                        <a
1462                                            href="https://www.laufshirt-bedrucken.de/accessoires/badelatschen-online-bedrucken-lassen/"
1463                                            title="Badelatschen"
1464                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1465                                                bg-container-lighter border-container
1466                                            "
1467                                        >
1468                                            <span class="ml-10 text-base text-gray-700">
1469                                                Badelatschen                                            </span>
1470                                        </a>
1471                                    </li>
1472                                                            </ul>
1473                            <button
1474                                @click="closeMenu()"
1475                                class="absolute flex justify-end w-16 self-end mb-1 transition-none"
1476                                aria-label="Close&#x20;menu"
1477                            >
1478                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true">
1479  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1480</svg>
1481                            </button>
1482                        </div>
1483                                    </li>
1484                            <li
1485                    data-child-id="category-node-90-main"
1486                    class="level-0"
1487                >
1488                    <div
1489                        class="flex items-center transition-transform duration-150 ease-in-out transform"
1490                        :class="{
1491                            '-translate-x-full' : mobilePanelActiveId,
1492                            'translate-x-0' : !mobilePanelActiveId
1493                        }"
1494                    >
1495                        <a
1496                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1497                                bg-container-lighter border-container level-0
1498                            "
1499                            href="https://www.laufshirt-bedrucken.de/marken-15945/"
1500                            title="Marken"
1501                        >
1502                            Marken                        </a>
1503                                                    <button
1504                                @click="openSubcategory('category-node-90')"
1505                                class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer
1506                                bg-container-lighter border-container"
1507                                aria-label="Open&#x20;Marken&#x20;subcategories"
1508                                aria-haspopup="true"
1509                                :aria-expanded="mobilePanelActiveId === 'category-node-90'"
1510                            >
1511                                <div class="w-8 h-8 border rounded">
1512                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true">
1513  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1514</svg>
1515                                </div>
1516                            </button>
1517                                            </div>
1518                                            <div
1519                            data-child-id="category-node-90"
1520                            class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter"
1521                            :class="{
1522                                'hidden': mobilePanelActiveId !== 'category-node-90'
1523                            }"
1524                        >
1525                            <ul
1526                                class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform"
1527                                :class="{
1528                                    'translate-x-full' : mobilePanelActiveId !== 'category-node-90',
1529                                    'translate-x-0' : mobilePanelActiveId === 'category-node-90',
1530                                }"
1531                                aria-label="Subcategories"
1532                            >
1533                                <li>
1534                                    <button
1535                                        type="button"
1536                                        class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t"
1537                                        @click="backToMainCategories('category-node-90-main')"
1538                                        aria-label="Back&#x20;to&#x20;main&#x20;categories"
1539                                    >
1540                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
1541  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
1542</svg>
1543                                        <span class="ml-4">
1544                                            Marken                                        </span>
1545                                    </button>
1546                                </li>
1547                                <li>
1548                                    <a
1549                                        href="https://www.laufshirt-bedrucken.de/marken-15945/"
1550                                        title="Marken"
1551                                        class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1552                                            bg-container-lighter border-container
1553                                        "
1554                                    >
1555                                        <span class="ml-10">
1556                                            Alle anzeigen                                        </span>
1557                                    </a>
1558                                </li>
1559                                                                    <li>
1560                                        <a
1561                                            href="https://www.laufshirt-bedrucken.de/marken-15945/erima-18967/"
1562                                            title="erima"
1563                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1564                                                bg-container-lighter border-container
1565                                            "
1566                                        >
1567                                            <span class="ml-10 text-base text-gray-700">
1568                                                erima                                            </span>
1569                                        </a>
1570                                    </li>
1571                                                                    <li>
1572                                        <a
1573                                            href="https://www.laufshirt-bedrucken.de/marken-15945/puma-18139/"
1574                                            title="PUMA"
1575                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1576                                                bg-container-lighter border-container
1577                                            "
1578                                        >
1579                                            <span class="ml-10 text-base text-gray-700">
1580                                                PUMA                                            </span>
1581                                        </a>
1582                                    </li>
1583                                                                    <li>
1584                                        <a
1585                                            href="https://www.laufshirt-bedrucken.de/marken-15945/adidas-18140/"
1586                                            title="adidas"
1587                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1588                                                bg-container-lighter border-container
1589                                            "
1590                                        >
1591                                            <span class="ml-10 text-base text-gray-700">
1592                                                adidas                                            </span>
1593                                        </a>
1594                                    </li>
1595                                                                    <li>
1596                                        <a
1597                                            href="https://www.laufshirt-bedrucken.de/marken-15945/jako-15947/"
1598                                            title="JAKO"
1599                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1600                                                bg-container-lighter border-container
1601                                            "
1602                                        >
1603                                            <span class="ml-10 text-base text-gray-700">
1604                                                JAKO                                            </span>
1605                                        </a>
1606                                    </li>
1607                                                                    <li>
1608                                        <a
1609                                            href="https://www.laufshirt-bedrucken.de/marken-15945/nike-17999/"
1610                                            title="NIKE"
1611                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1612                                                bg-container-lighter border-container
1613                                            "
1614                                        >
1615                                            <span class="ml-10 text-base text-gray-700">
1616                                                NIKE                                            </span>
1617                                        </a>
1618                                    </li>
1619                                                                    <li>
1620                                        <a
1621                                            href="https://www.laufshirt-bedrucken.de/marken-15945/under-armour-15946/"
1622                                            title="Under&#x20;Armour"
1623                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1624                                                bg-container-lighter border-container
1625                                            "
1626                                        >
1627                                            <span class="ml-10 text-base text-gray-700">
1628                                                Under Armour                                            </span>
1629                                        </a>
1630                                    </li>
1631                                                                    <li>
1632                                        <a
1633                                            href="https://www.laufshirt-bedrucken.de/marken-15945/build-your-brand-16209/"
1634                                            title="Build&#x20;Your&#x20;Brand"
1635                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1636                                                bg-container-lighter border-container
1637                                            "
1638                                        >
1639                                            <span class="ml-10 text-base text-gray-700">
1640                                                Build Your Brand                                            </span>
1641                                        </a>
1642                                    </li>
1643                                                                    <li>
1644                                        <a
1645                                            href="https://www.laufshirt-bedrucken.de/marken-15945/just-cool-16210/"
1646                                            title="Just&#x20;Cool"
1647                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1648                                                bg-container-lighter border-container
1649                                            "
1650                                        >
1651                                            <span class="ml-10 text-base text-gray-700">
1652                                                Just Cool                                            </span>
1653                                        </a>
1654                                    </li>
1655                                                                    <li>
1656                                        <a
1657                                            href="https://www.laufshirt-bedrucken.de/marken-15945/gildan-16212/"
1658                                            title="Gildan"
1659                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1660                                                bg-container-lighter border-container
1661                                            "
1662                                        >
1663                                            <span class="ml-10 text-base text-gray-700">
1664                                                Gildan                                            </span>
1665                                        </a>
1666                                    </li>
1667                                                                    <li>
1668                                        <a
1669                                            href="https://www.laufshirt-bedrucken.de/marken-15945/cona-sports-16629/"
1670                                            title="CONA&#x20;SPORTS"
1671                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1672                                                bg-container-lighter border-container
1673                                            "
1674                                        >
1675                                            <span class="ml-10 text-base text-gray-700">
1676                                                CONA SPORTS                                            </span>
1677                                        </a>
1678                                    </li>
1679                                                                    <li>
1680                                        <a
1681                                            href="https://www.laufshirt-bedrucken.de/marken-15945/james-nicholson-16211/"
1682                                            title="James&#x20;&amp;&#x20;Nicholson"
1683                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1684                                                bg-container-lighter border-container
1685                                            "
1686                                        >
1687                                            <span class="ml-10 text-base text-gray-700">
1688                                                James &amp; Nicholson                                            </span>
1689                                        </a>
1690                                    </li>
1691                                                                    <li>
1692                                        <a
1693                                            href="https://www.laufshirt-bedrucken.de/marken-15945/fruit-of-the-loom-16205/"
1694                                            title="Fruit&#x20;of&#x20;the&#x20;Loom"
1695                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1696                                                bg-container-lighter border-container
1697                                            "
1698                                        >
1699                                            <span class="ml-10 text-base text-gray-700">
1700                                                Fruit of the Loom                                            </span>
1701                                        </a>
1702                                    </li>
1703                                                                    <li>
1704                                        <a
1705                                            href="https://www.laufshirt-bedrucken.de/marken-15945/halfar-16208/"
1706                                            title="Halfar"
1707                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1708                                                bg-container-lighter border-container
1709                                            "
1710                                        >
1711                                            <span class="ml-10 text-base text-gray-700">
1712                                                Halfar                                            </span>
1713                                        </a>
1714                                    </li>
1715                                                                    <li>
1716                                        <a
1717                                            href="https://www.laufshirt-bedrucken.de/marken-15945/kustom-kit-gamegear-16206/"
1718                                            title="Kustom&#x20;Kit&#x20;Gamegear"
1719                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1720                                                bg-container-lighter border-container
1721                                            "
1722                                        >
1723                                            <span class="ml-10 text-base text-gray-700">
1724                                                Kustom Kit Gamegear                                            </span>
1725                                        </a>
1726                                    </li>
1727                                                                    <li>
1728                                        <a
1729                                            href="https://www.laufshirt-bedrucken.de/marken-15945/mr-socks-19915/"
1730                                            title="Mr.&#x20;Socks"
1731                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1732                                                bg-container-lighter border-container
1733                                            "
1734                                        >
1735                                            <span class="ml-10 text-base text-gray-700">
1736                                                Mr. Socks                                            </span>
1737                                        </a>
1738                                    </li>
1739                                                                    <li>
1740                                        <a
1741                                            href="https://www.laufshirt-bedrucken.de/marken-15945/quadra-18260/"
1742                                            title="Quadra"
1743                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1744                                                bg-container-lighter border-container
1745                                            "
1746                                        >
1747                                            <span class="ml-10 text-base text-gray-700">
1748                                                Quadra                                            </span>
1749                                        </a>
1750                                    </li>
1751                                                                    <li>
1752                                        <a
1753                                            href="https://www.laufshirt-bedrucken.de/marken-15945/beechfield-16207/"
1754                                            title="Beechfield"
1755                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1756                                                bg-container-lighter border-container
1757                                            "
1758                                        >
1759                                            <span class="ml-10 text-base text-gray-700">
1760                                                Beechfield                                            </span>
1761                                        </a>
1762                                    </li>
1763                                                                    <li>
1764                                        <a
1765                                            href="https://www.laufshirt-bedrucken.de/marken-15945/teejays-16990/"
1766                                            title="TeeJays"
1767                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1768                                                bg-container-lighter border-container
1769                                            "
1770                                        >
1771                                            <span class="ml-10 text-base text-gray-700">
1772                                                TeeJays                                            </span>
1773                                        </a>
1774                                    </li>
1775                                                                    <li>
1776                                        <a
1777                                            href="https://www.laufshirt-bedrucken.de/marken-15945/myrtle-beach-18261/"
1778                                            title="Myrtle&#x20;Beach"
1779                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1780                                                bg-container-lighter border-container
1781                                            "
1782                                        >
1783                                            <span class="ml-10 text-base text-gray-700">
1784                                                Myrtle Beach                                            </span>
1785                                        </a>
1786                                    </li>
1787                                                                    <li>
1788                                        <a
1789                                            href="https://www.laufshirt-bedrucken.de/marken-15945/roly-16687/"
1790                                            title="Roly"
1791                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1792                                                bg-container-lighter border-container
1793                                            "
1794                                        >
1795                                            <span class="ml-10 text-base text-gray-700">
1796                                                Roly                                            </span>
1797                                        </a>
1798                                    </li>
1799                                                                    <li>
1800                                        <a
1801                                            href="https://www.laufshirt-bedrucken.de/marken-15945/russell-17249/"
1802                                            title="Russell"
1803                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1804                                                bg-container-lighter border-container
1805                                            "
1806                                        >
1807                                            <span class="ml-10 text-base text-gray-700">
1808                                                Russell                                            </span>
1809                                        </a>
1810                                    </li>
1811                                                                    <li>
1812                                        <a
1813                                            href="https://www.laufshirt-bedrucken.de/marken-15945/sol-s-18257/"
1814                                            title="Sol&#x27;s"
1815                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1816                                                bg-container-lighter border-container
1817                                            "
1818                                        >
1819                                            <span class="ml-10 text-base text-gray-700">
1820                                                Sol&#039;s                                            </span>
1821                                        </a>
1822                                    </li>
1823                                                            </ul>
1824                            <button
1825                                @click="closeMenu()"
1826                                class="absolute flex justify-end w-16 self-end mb-1 transition-none"
1827                                aria-label="Close&#x20;menu"
1828                            >
1829                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true">
1830  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1831</svg>
1832                            </button>
1833                        </div>
1834                                    </li>
1835                            <li
1836                    data-child-id="category-node-93-main"
1837                    class="level-0"
1838                >
1839                    <div
1840                        class="flex items-center transition-transform duration-150 ease-in-out transform"
1841                        :class="{
1842                            '-translate-x-full' : mobilePanelActiveId,
1843                            'translate-x-0' : !mobilePanelActiveId
1844                        }"
1845                    >
1846                        <a
1847                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1848                                bg-container-lighter border-container level-0
1849                            "
1850                            href="https://www.laufshirt-bedrucken.de/s
1850horts-tights-16196/"
1851                            title="Shorts&#x20;&amp;&#x20;Tights"
1852                        >
1853                            Shorts &amp; Tights                        </a>
1854                                                    <button
1855                                @click="openSubcategory('category-node-93')"
1856                                class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer
1857                                bg-container-lighter border-container"
1858                                aria-label="Open&#x20;Shorts&#x20;&amp;&#x20;Tights&#x20;subcategories"
1859                                aria-haspopup="true"
1860                                :aria-expanded="mobilePanelActiveId === 'category-node-93'"
1861                            >
1862                                <div class="w-8 h-8 border rounded">
1863                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true">
1864  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1865</svg>
1866                                </div>
1867                            </button>
1868                                            </div>
1869                                            <div
1870                            data-child-id="category-node-93"
1871                            class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter"
1872                            :class="{
1873                                'hidden': mobilePanelActiveId !== 'category-node-93'
1874                            }"
1875                        >
1876                            <ul
1877                                class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform"
1878                                :class="{
1879                                    'translate-x-full' : mobilePanelActiveId !== 'category-node-93',
1880                                    'translate-x-0' : mobilePanelActiveId === 'category-node-93',
1881                                }"
1882                                aria-label="Subcategories"
1883                            >
1884                                <li>
1885                                    <button
1886                                        type="button"
1887                                        class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t"
1888                                        @click="backToMainCategories('category-node-93-main')"
1889                                        aria-label="Back&#x20;to&#x20;main&#x20;categories"
1890                                    >
1891                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
1892  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
1893</svg>
1894                                        <span class="ml-4">
1895                                            Shorts &amp; Tights                                        </span>
1896                                    </button>
1897                                </li>
1898                                <li>
1899                                    <a
1900                                        href="https://www.laufshirt-bedrucken.de/shorts-tights-16196/"
1901                                        title="Shorts&#x20;&amp;&#x20;Tights"
1902                                        class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1903                                            bg-container-lighter border-container
1904                                        "
1905                                    >
1906                                        <span class="ml-10">
1907                                            Alle anzeigen                                        </span>
1908                                    </a>
1909                                </li>
1910                                                                    <li>
1911                                        <a
1912                                            href="https://www.laufshirt-bedrucken.de/s
1912horts-tights-16196/damen-16199/"
1913                                            title="Damen&#x20;Shorts&#x20;&amp;&#x20;Tights&#x20;bedrucken"
1914                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1915                                                bg-container-lighter border-container
1916                                            "
1917                                        >
1918                                            <span class="ml-10 text-base text-gray-700">
1919                                                Damen Shorts &amp; Tights bedrucken                                            </span>
1920                                        </a>
1921                                    </li>
1922                                                                    <li>
1923                                        <a
1924                                            href="https://www.laufshirt-bedrucken.de/shorts-tights-16196/kinder-16503/"
1925                                            title="Kinder&#x20;Shorts&#x20;&amp;&#x20;Tights&#x20;bedrucken"
1926                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1927                                                bg-container-lighter border-container
1928                                            "
1929                                        >
1930                                            <span class="ml-10 text-base text-gray-700">
1931                                                Kinder Shorts &amp; Tights bedrucken                                            </span>
1932                                        </a>
1933                                    </li>
1934                                                                    <li>
1935                                        <a
1936                                            href="https://www.laufshirt-bedrucken.de/shorts-tights-16196/herren-16197/"
1937                                            title="Herren&#x20;Shorts&#x20;&amp;&#x20;Tights&#x20;bedrucken"
1938                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1939                                                bg-container-lighter border-container
1940                                            "
1941                                        >
1942                                            <span class="ml-10 text-base text-gray-700">
1943                                                Herren Shorts &amp; Tights bedrucken                                            </span>
1944                                        </a>
1945                                    </li>
1946                                                            </ul>
1947                            <button
1948                                @click="closeMenu()"
1949                                class="absolute flex justify-end w-16 self-end mb-1 transition-none"
1950                                aria-label="Close&#x20;menu"
1951                            >
1952                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true">
1953  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1954</svg>
1955                            </button>
1956                        </div>
1957                                    </li>
1958                            <li
1959                    data-child-id="category-node-133-main"
1960                    class="level-0"
1961                >
1962                    <div
1963                        class="flex items-center transition-transform duration-150 ease-in-out transform"
1964                        :class="{
1965                            '-translate-x-full' : mobilePanelActiveId,
1966                            'translate-x-0' : !mobilePanelActiveId
1967                        }"
1968                    >
1969                        <a
1970                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
1971                                bg-container-lighter border-container level-0
1972                            "
1973                            href="https://www.laufshirt-bedrucken.de/specials-18487/"
1974                            title="Specials"
1975                        >
1976                            Specials                        </a>
1977                                                    <button
1978                                @click="openSubcategory('category-node-133')"
1979                                class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer
1980                                bg-container-lighter border-container"
1981                                aria-label="Open&#x20;Specials&#x20;subcategories"
1982                                aria-haspopup="true"
1983                                :aria-expanded="mobilePanelActiveId === 'category-node-133'"
1984                            >
1985                                <div class="w-8 h-8 border rounded">
1986                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true">
1987  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1988</svg>
1989                                </div>
1990                            </button>
1991                                            </div>
1992                                            <div
1993                            data-child-id="category-node-133"
1994                            class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter"
1995                            :class="{
1996                                'hidden': mobilePanelActiveId !== 'category-node-133'
1997                            }"
1998                        >
1999                            <ul
2000                                class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform"
2001                                :class="{
2002                                    'translate-x-full' : mobilePanelActiveId !== 'category-node-133',
2003                                    'translate-x-0' : mobilePanelActiveId === 'category-node-133',
2004                                }"
2005                                aria-label="Subcategories"
2006                            >
2007                                <li>
2008                                    <button
2009                                        type="button"
2010                                        class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t"
2011                                        @click="backToMainCategories('category-node-133-main')"
2012                                        aria-label="Back&#x20;to&#x20;main&#x20;categories"
2013                                    >
2014                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
2015  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
2016</svg>
2017                                        <span class="ml-4">
2018                                            Specials                                        </span>
2019                                    </button>
2020                                </li>
2021                                <li>
2022                                    <a
2023                                        href="https://www.laufshirt-bedrucken.de/specials-18487/"
2024                                        title="Specials"
2025                                        class="flex items-center w-full px-8 py-4 border-b cursor-pointer
2026                                            bg-container-lighter border-container
2027                                        "
2028                                    >
2029                                        <span class="ml-10">
2030                                            Alle anzeigen                                        </span>
2031                                    </a>
2032                                </li>
2033                                                                    <li>
2034                                        <a
2035                                            href="https://www.laufshirt-bedrucken.de/specials-18487/firmenlauf-18533/"
2036                                            title="Firmenlauf-Shirts&#x20;bedrucken&#x20;f&#xFC;r&#x20;Damen&#x20;und&#x20;Herren"
2037                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
2038                                                bg-container-lighter border-container
2039                                            "
2040                                        >
2041                                            <span class="ml-10 text-base text-gray-700">
2042                                                Firmenlauf-Shirts bedrucken für Damen und Herren                                            </span>
2043                                        </a>
2044                                    </li>
2045                                                                    <li>
2046                                        <a
2047                                            href="https://www.laufshirt-bedrucken.de/specials-18487/berufsbekleidung-physiotherapeuten-online-bedrucken-lassen-18488/"
2048                                            title="Physiotherapeuten&#x20;Bekleidung&#x20;-&#x20;Team-Shirts&#x20;&amp;&#x20;Hosen&#x20;online&#x20;bedrucken&#x20;lassen"
2049                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
2050                                                bg-container-lighter border-container
2051                                            "
2052                                        >
2053                                            <span class="ml-10 text-base text-gray-700">
2054                                                Physiotherapeuten Bekleidung - Team-Shirts &amp; Hosen online bedrucken lassen                                            </span>
2055                                        </a>
2056                                    </li>
2057                                                                    <li>
2058                                        <a
2059                                            href="https://www.laufshirt-bedrucken.de/specials-18487/dtf-transfer-online-bestellen/"
2060                                            title="DTF&#x20;Transfer"
2061                                            class="flex items-center w-full px-8 py-4 border-b cursor-pointer
2062                                                bg-container-lighter border-container
2063                                            "
2064                                        >
2065                                            <span class="ml-10 text-base text-gray-700">
2066                                                DTF Transfer                                            </span>
2067                                        </a>
2068                                    </li>
2069                                                            </ul>
2070                            <button
2071                                @click="closeMenu()"
2072                                class="absolute flex justify-end w-16 self-end mb-1 transition-none"
2073                                aria-label="Close&#x20;menu"
2074                            >
2075                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true">
2076  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
2077</svg>
2078                            </button>
2079                        </div>
2080                                    </li>
2081                    </ul>
2082        <button
2083            @click="closeMenu()"
2084            class="absolute flex justify-end w-16 self-end mb-1"
2085            aria-label="Close&#x20;menu"
2086            type="button"
2087        >
2088            <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true">
2089  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
2090</svg>
2091        </button>
2092    </div>
2093</nav>
2094<script>
2095    'use strict';
2096
2097    const initMenuMobile_6ac04a7f575ba = () => {
2098        return {
2099            mobilePanelActiveId: null,
2100            open: false,
2101            setActiveMenu(menuNode) {
2102                Array.from(menuNode.querySelectorAll('a')).filter(link => {
2103                    return link.href === window.location.href.split('?')[0];
2104                }).map(item => {
2105                    item.classList.add('underline');
2106                    item.closest('li.level-0') &&
2107                    item.closest('li.level-0').querySelector('a.level-0').classList.add('underline');
2108                });
2109            },
2110            openMenu() {
2111                this.open = true
2112                this.$nextTick(() => hyva.trapFocus(this.$refs['mobileMenuNavLinks']));
2113                // Prevent from body scrolling while mobile menu opened
2114                document.body.style.position = 'fixed';
2115            },
2116            closeMenu() {
2117                document.body.style.position = '';
2118
2119                if (this.open) {
2120                    this.$nextTick(() => this.$refs['mobileMenuTrigger'].focus() || hyva.releaseFocus());
2121                }
2122
2123                this.open = false
2124                this.mobilePanelActiveId = null
2125            },
2126            openSubcategory(index) {
2127                const menuNodeRef = document.querySelector('[data-child-id=' + index + ']')
2128                this.mobilePanelActiveId = this.mobilePanelActiveId === index ? 0 : index
2129                this.$nextTick(() => hyva.trapFocus(menuNodeRef))
2130            },
2131            backToMainCategories(index) {
2132                const menuNodeRef = document.querySelector('[data-child-id=' + index + ']')
2133                this.mobilePanelActiveId = 0
2134                this.$nextTick(() => {
2135                    hyva.trapFocus(this.$refs['mobileMenuNavLinks'])
2136                    menuNodeRef.querySelector('a').focus()
2137                })
2138            }
2139        }
2140    }
2141</script>
2141
2142<div x-data="initMenuDesktop_6ac04a7f5f21b()"
2143     class="z-20 order-2 sm:order-1 lg:order-2 navigation hidden"
2144>
2145    <!-- desktop -->
2146    <div x-ref="nav-desktop"
2147         @load.window="setActiveMenu($root)"
2148         class="hidden lg:block lg:px-8">
2149        <nav
2150            class="relative"
2151            aria-label="Main&#x20;menu"
2152        >
2153            <ul class="flex justify-start flex-wrap gap-x-7 py-4">
2154                                    <li class="relative level-0 border-b-2 border-transparent hover:border-primary data-[active]:border-primary"
2155                        @mouseenter="hoverPanelActiveId = 'category-node-60'"
2156                        @mouseleave="hoverPanelActiveId = 0"
2157                        @keyup.escape="hoverPanelActiveId = 0"
2158                    >
2159                        <span class="flex items-center text-md">
2160                            <a class="w-full text-base text-gray-700 level-0 py-2 px-0.5"
2161                               href="https://www.laufshirt-bedrucken.de/laufshirts/"
2162                               title="Laufshirts"
2163                               @focus="hoverPanelActiveId = 0"
2164                            >
2165                                Laufshirts                            </a>
2166                                                            <button
2167                                    type="button"
2168                                    data-sr-button-id="category-node-60"
2169                                    :aria-expanded="hoverPanelActiveId === 'category-node-60' ? 'true' : 'false'"
2170                                    @click="openMenuOnClick('category-node-60')"
2171                                    class="rounded p-1 text-gray-500"
2172                                >
2173                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true">
2174  <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/>
2175</svg>
2176                                    <span class="sr-only">
2177                                        Show submenu for Laufshirts category                                    </span>
2178                                </button>
2179                                                    </span>
2180                                                    <ul
2181                                class="absolute top-full z-10 hidden px-6 py-4 mt-0.5 -ml-6 shadow-lg bg-container-lighter/95"
2182                                :class="{
2183                                    'hidden' : hoverPanelActiveId !== 'category-node-60',
2184                                    'block' : hoverPanelActiveId === 'category-node-60'
2185                                }"
2186                            >
2187                                                                    <li>
2188                                        <a href="https://www.laufshirt-bedrucken.de/laufshirts/angebote/"
2189                                           title="Angebote"
2190                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2191                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D60]').focus())"
2192                                        >
2193                                            <span class="text-base text-gray-700">
2194                                                Angebote                                            </span>
2195                                        </a>
2196                                    </li>
2197                                                                    <li>
2198                                        <a href="https://www.laufshirt-bedrucken.de/laufshirts/damen-laufshirts-bedrucken/"
2199                                           title="Damen"
2200                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2201                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D60]').focus())"
2202                                        >
2203                                            <span class="text-base text-gray-700">
2204                                                Damen                                            </span>
2205                                        </a>
2206                                    </li>
2207                                                                    <li>
2208                                        <a href="https://www.laufshirt-bedrucken.de/laufshirts/herren-laufshirts-bedrucken/"
2209                                           title="Herren"
2210                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2211                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D60]').focus())"
2212                                        >
2213                                            <span class="text-base text-gray-700">
2214                                                Herren                                            </span>
2215                                        </a>
2216                                    </li>
2217                                                                    <li>
2218                                        <a href="https://www.laufshirt-bedrucken.de/laufshirts/kinder-laufshirts-bedrucken/"
2219                                           title="Kinder"
2220                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2221                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D60]').focus())"
2222                                        >
2223                                            <span class="text-base text-gray-700">
2224                                                Kinder                                            </span>
2225                                        </a>
2226                                    </li>
2227                                                            </ul>
2228                                            </li>
2229                                    <li class="relative level-0 border-b-2 border-transparent hover:border-primary data-[active]:border-primary"
2230                        @mouseenter="hoverPanelActiveId = 'category-node-498'"
2231                        @mouseleave="hoverPanelActiveId = 0"
2232                        @keyup.escape="hoverPanelActiveId = 0"
2233                    >
2234                        <span class="flex items-center text-md">
2235                            <a class="w-full text-base text-gray-700 level-0 py-2 px-0.5"
2236                               href="https://www.laufshirt-bedrucken.de/manner-20689/"
2237                               title="M&#xE4;nner"
2238                               @focus="hoverPanelActiveId = 0"
2239                            >
2240                                Männer                            </a>
2241                                                            <button
2242                                    type="button"
2243                                    data-sr-button-id="category-node-498"
2244                                    :aria-expanded="hoverPanelActiveId === 'category-node-498' ? 'true' : 'false'"
2245                                    @click="openMenuOnClick('category-node-498')"
2246                                    class="rounded p-1 text-gray-500"
2247                                >
2248                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true">
2249  <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/>
2250</svg>
2251                                    <span class="sr-only">
2252                                        Show submenu for Männer category                                    </span>
2253                                </button>
2254                                                    </span>
2255                                                    <ul
2256                                class="absolute top-full z-10 hidden px-6 py-4 mt-0.5 -ml-6 shadow-lg bg-container-lighter/95"
2257                                :class="{
2258                                    'hidden' : hoverPanelActiveId !== 'category-node-498',
2259                                    'block' : hoverPanelActiveId === 'category-node-498'
2260                                }"
2261                            >
2262                                                                    <li>
2263                                        <a href="https://www.laufshirt-bedrucken.de/manner-20689/mpullover-20690/"
2264                                           title="MPullover"
2265                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2266                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D498]').focus())"
2267                                        >
2268                                            <span class="text-base text-gray-700">
2269                                                MPullover                                            </span>
2270                                        </a>
2271                                    </li>
2272                                                            </ul>
2273                                            </li>
2274                                    <li class="relative level-0 border-b-2 border-transparent hover:border-primary data-[active]:border-primary"
2275                        @mouseenter="hoverPanelActiveId = 'category-node-86'"
2276                        @mouseleave="hoverPanelActiveId = 0"
2277                        @keyup.escape="hoverPanelActiveId = 0"
2278                    >
2279                        <span class="flex items-center text-md">
2280                            <a class="w-full text-base text-gray-700 level-0 py-2 px-0.5"
2281                               href="https://www.laufshirt-bedrucken.de/langarm-laufshirts/"
2282                               title="Langarm&#x20;Laufshirts"
2283                               @focus="hoverPanelActiveId = 0"
2284                            >
2285                                Langarm Laufshirts                            </a>
2286                                                            <button
2287                                    type="button"
2288                                    data-sr-button-id="category-node-86"
2289                                    :aria-expanded="hoverPanelActiveId === 'category-node-86' ? 'true' : 'false'"
2290                                    @click="openMenuOnClick('category-node-86')"
2291                                    class="rounded p-1 text-gray-500"
2292                                >
2293                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true">
2294  <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/>
2295</svg>
2296                                    <span class="sr-only">
2297                                        Show submenu for Langarm Laufshirts category                                    </span>
2298                                </button>
2299                                                    </span>
2300                                                    <ul
2301                                class="absolute top-full z-10 hidden px-6 py-4 mt-0.5 -ml-6 shadow-lg bg-container-lighter/95"
2302                                :class="{
2303                                    'hidden' : hoverPanelActiveId !== 'category-node-86',
2304                                    'block' : hoverPanelActiveId === 'category-node-86'
2305                                }"
2306                            >
2307                                                                    <li>
2308                                        <a href="https://www.laufshirt-bedrucken.de/langarm-laufshirts/herren-langarm-laufshirts-bedrucken/"
2309                                           title="Herren"
2310                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2311                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D86]').focus())"
2312                                        >
2313                                            <span class="text-base text-gray-700">
2314                                                Herren                                            </span>
2315                                        </a>
2316                                    </li>
2317                                                                    <li>
2318                                        <a href="https://www.laufshirt-bedrucken.de/langarm-laufshirts/damen-langarm-laufshirts-bedrucken/"
2319                                           title="Damen"
2320                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2321                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D86]').focus())"
2322                                        >
2323                                            <span class="text-base text-gray-700">
2324                                                Damen                                            </span>
2325                                        </a>
2326                                    </li>
2327                                                                    <li>
2328                                        <a href="https://www.laufshirt-bedrucken.de/langarm-laufshirts/kinder-langarm-laufshirts-bedrucken/"
2329                                           title="Kinder"
2330                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2331                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D86]').focus())"
2332                                        >
2333                                            <span class="text-base text-gray-700">
2334                                                Kinder                                            </span>
2335                                        </a>
2336                                    </li>
2337                                                            </ul>
2338                                            </li>
2339                                    <li class="relative level-0 border-b-2 border-transparent hover:border-primary data-[active]:border-primary"
2340                        @mouseenter="hoverPanelActiveId = 'category-node-116'"
2341                        @mouseleave="hoverPanelActiveId = 0"
2342                        @keyup.escape="hoverPanelActiveId = 0"
2343                    >
2344                        <span class="flex items-center text-md">
2345                            <a class="w-full text-base text-gray-700 level-0 py-2 px-0.5"
2346                               href="https://www.laufshirt-bedrucken.de/softshelljacken-16934/"
2347                               title="Softshelljacken"
2348                               @focus="hoverPanelActiveId = 0"
2349                            >
2350                                Softshelljacken                            </a>
2351                                                            <button
2352                                    type="button"
2353                                    data-sr-button-id="category-node-116"
2354                                    :aria-expanded="hoverPanelActiveId === 'category-node-116' ? 'true' : 'false'"
2355                                    @click="openMenuOnClick('category-node-116')"
2356                                    class="rounded p-1 text-gray-500"
2357                                >
2358                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true">
2359  <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/>
2360</svg>
2361                                    <span class="sr-only">
2362                                        Show submenu for Softshelljacken category                                    </span>
2363                                </button>
2364                                                    </span>
2365                                                    <ul
2366                                class="absolute top-full z-10 hidden px-6 py-4 mt-0.5 -ml-6 shadow-lg bg-container-lighter/95"
2367                                :class="{
2368                                    'hidden' : hoverPanelActiveId !== 'category-node-116',
2369                                    'block' : hoverPanelActiveId === 'category-node-116'
2370                                }"
2371                            >
2372                                                                    <li>
2373                                        <a href="https://www.laufshirt-bedrucken.de/softshelljacken-16934/herren-16937/"
2374                                           title="Herren&#x20;Softshelljacken&#x20;bedrucken"
2375                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2376                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D116]').focus())"
2377                                        >
2378                                            <span class="text-base text-gray-700">
2379                                                Herren Softshelljacken bedrucken                                            </span>
2380                                        </a>
2381                                    </li>
2382                                                                    <li>
2383                                        <a href="https://www.laufshirt-bedrucken.de/softshelljacken-16934/damen-16936/"
2384                                           title="Damen&#x20;Softshelljacken&#x20;bedrucken"
2385                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2386                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D116]').focus())"
2387                                        >
2388                                            <span class="text-base text-gray-700">
2389                                                Damen Softshelljacken bedrucken                                            </span>
2390                                        </a>
2391                                    </li>
2392                                                                    <li>
2393                                        <a href="https://www.laufshirt-bedrucken.de/softshelljacken-16934/kinder-16935/"
2394                                           title="Kinder&#x20;Softshelljacken&#x20;bedrucken"
2395                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2396                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D116]').focus())"
2397                                        >
2398                                            <span class="text-base text-gray-700">
2399                                                Kinder Softshelljacken bedrucken                                            </span>
2400                                        </a>
2401                                    </li>
2402                                                            </ul>
2403                                            </li>
2404                                    <li class="relative level-0 border-b-2 border-transparent hover:border-primary data-[active]:border-primary"
2405                        @mouseenter="hoverPanelActiveId = 'category-node-35'"
2406                        @mouseleave="hoverPanelActiveId = 0"
2407                        @keyup.escape="hoverPanelActiveId = 0"
2408                    >
2409                        <span class="flex items-center text-md">
2410                            <a class="w-full text-base text-gray-700 level-0 py-2 px-0.5"
2411                               href="https://www.laufshirt-bedrucken.de/tanktops-und-singlets/"
2412                               title="Tanktops&#x20;und&#x20;Singlets"
2413                               @focus="hoverPanelActiveId = 0"
2414                            >
2415                                Tanktops und Singlets                            </a>
2416                                                            <button
2417                                    type="button"
2418                                    data-sr-button-id="category-node-35"
2419                                    :aria-expanded="hoverPanelActiveId === 'category-node-35' ? 'true' : 'false'"
2420                                    @click="openMenuOnClick('category-node-35')"
2421                                    class="rounded p-1 text-gray-500"
2422                                >
2423                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true">
2424  <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/>
2425</svg>
2426                                    <span class="sr-only">
2427                                        Show submenu for Tanktops und Singlets category                                    </span>
2428                                </button>
2429                                                    </span>
2430                                                    <ul
2431                                class="absolute top-full z-10 hidden px-6 py-4 mt-0.5 -ml-6 shadow-lg bg-container-lighter/95"
2432                                :class="{
2433                                    'hidden' : hoverPanelActiveId !== 'category-node-35',
2434                                    'block' : hoverPanelActiveId === 'category-node-35'
2435                                }"
2436                            >
2437                                                                    <li>
2438                                        <a href="https://www.laufshirt-bedrucken.de/tanktops-und-singlets/herren-tanktops-und-singlets-bedrucken/"
2439                                           title="Herren"
2440                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2441                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D35]').focus())"
2442                                        >
2443                                            <span class="text-base text-gray-700">
2444                                                Herren                                            </span>
2445                                        </a>
2446                                    </li>
2447                                                                    <li>
2448                                        <a href="https://www.laufshirt-bedrucken.de/tanktops-und-singlets/damen-tanktops-und-singlets-bedrucken/"
2449                                           title="Damen"
2450                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2451                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D35]').focus())"
2452                                        >
2453                                            <span class="text-base text-gray-700">
2454                                                Damen                                            </span>
2455                                        </a>
2456                                    </li>
2457                                                                    <li>
2458                                        <a href="https://www.laufshirt-bedrucken.de/tanktops-und-singlets/kinder-tanktops-und-singlets-bedrucken/"
2459                                           title="Kinder"
2460                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2461                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D35]').focus())"
2462                                        >
2463                                            <span class="text-base text-gray-700">
2464                                                Kinder                                            </span>
2465                                        </a>
2466                                    </li>
2467                                                            </ul>
2468                                            </li>
2469                                    <li class="relative level-0 border-b-2 border-transparent hover:border-primary data-[active]:border-primary"
2470                        @mouseenter="hoverPanelActiveId = 'category-node-55'"
2471                        @mouseleave="hoverPanelActiveId = 0"
2472                        @keyup.escape="hoverPanelActiveId = 0"
2473                    >
2474                        <span class="flex items-center text-md">
2475                            <a class="w-full text-base text-gray-700 level-0 py-2 px-0.5"
2476                               href="https://www.laufshirt-bedrucken.de/accessoires/"
2477                               title="Accessoires&#x20;bedrucken"
2478                               @focus="hoverPanelActiveId = 0"
2479                            >
2480                                Accessoires bedrucken                            </a>
2481                                                            <button
2482                                    type="button"
2483                                    data-sr-button-id="category-node-55"
2484                                    :aria-expanded="hoverPanelActiveId === 'category-node-55' ? 'true' : 'false'"
2485                                    @click="openMenuOnClick('category-node-55')"
2486                                    class="rounded p-1 text-gray-500"
2487                                >
2488                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true">
2489  <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/>
2490</svg>
2491                                    <span class="sr-only">
2492                                        Show submenu for Accessoires bedrucken category                                    </span>
2493                                </button>
2494                                                    </span>
2495                                                    <ul
2496                                class="absolute top-full z-10 hidden px-6 py-4 mt-0.5 -ml-6 shadow-lg bg-container-lighter/95"
2497                                :class="{
2498                                    'hidden' : hoverPanelActiveId !== 'category-node-55',
2499                                    'block' : hoverPanelActiveId === 'category-node-55'
2500                                }"
2501                            >
2502                                                                    <li>
2503                                        <a href="https://www.laufshirt-bedrucken.de/accessoires/badelatschen-online-bedrucken-lassen/"
2504                                           title="Badelatschen"
2505                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2506                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D55]').focus())"
2507                                        >
2508                                            <span class="text-base text-gray-700">
2509                                                Badelatschen                                            </span>
2510                                        </a>
2511                                    </li>
2512                                                            </ul>
2513                                            </li>
2514                                    <li class="relative level-0 border-b-2 border-transparent hover:border-primary data-[active]:border-primary"
2515                        @mouseenter="hoverPanelActiveId = 'category-node-90'"
2516                        @mouseleave="hoverPanelActiveId = 0"
2517                        @keyup.escape="hoverPanelActiveId = 0"
2518                    >
2519                        <span class="flex items-center text-md">
2520                            <a class="w-full text-base text-gray-700 level-0 py-2 px-0.5"
2521                               href="https://www.laufshirt-bedrucken.de/marken-15945/"
2522                               title="Marken"
2523                               @focus="hoverPanelActiveId = 0"
2524                            >
2525                                Marken                            </a>
2526                                                            <button
2527                                    type="button"
2528                                    data-sr-button-id="category-node-90"
2529                                    :aria-expanded="hoverPanelActiveId === 'category-node-90' ? 'true' : 'false'"
2530                                    @click="openMenuOnClick('category-node-90')"
2531                                    class="rounded p-1 text-gray-500"
2532                                >
2533                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true">
2534  <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/>
2535</svg>
2536                                    <span class="sr-only">
2537                                        Show submenu for Marken category                                    </span>
2538                                </button>
2539                                                    </span>
2540                                                    <ul
2541                                class="absolute top-full z-10 hidden px-6 py-4 mt-0.5 -ml-6 shadow-lg bg-container-lighter/95"
2542                                :class="{
2543                                    'hidden' : hoverPanelActiveId !== 'category-node-90',
2544                                    'block' : hoverPanelActiveId === 'category-node-90'
2545                                }"
2546                            >
2547                                                                    <li>
2548                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/erima-18967/"
2549                                           title="erima"
2550                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2551                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2552                                        >
2553                                            <span class="text-base text-gray-700">
2554                                                erima                                            </span>
2555                                        </a>
2556                                    </li>
2557                                                                    <li>
2558                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/puma-18139/"
2559                                           title="PUMA"
2560                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2561                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2562                                        >
2563                                            <span class="text-base text-gray-700">
2564                                                PUMA                                            </span>
2565                                        </a>
2566                                    </li>
2567                                                                    <li>
2568                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/adidas-18140/"
2569                                           title="adidas"
2570                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2571                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2572                                        >
2573                                            <span class="text-base text-gray-700">
2574                                                adidas                                            </span>
2575                                        </a>
2576                                    </li>
2577                                                                    <li>
2578                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/jako-15947/"
2579                                           title="JAKO"
2580                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2581                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2582                                        >
2583                                            <span class="text-base text-gray-700">
2584                                                JAKO                                            </span>
2585                                        </a>
2586                                    </li>
2587                                                                    <li>
2588                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/nike-17999/"
2589                                           title="NIKE"
2590                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2591                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2592                                        >
2593                                            <span class="text-base text-gray-700">
2594                                                NIKE                                            </span>
2595                                        </a>
2596                                    </li>
2597                                                                    <li>
2598                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/under-armour-15946/"
2599                                           title="Under&#x20;Armour"
2600                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2601                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2602                                        >
2603                                            <span class="text-base text-gray-700">
2604                                                Under Armour                                            </span>
2605                                        </a>
2606                                    </li>
2607                                                                    <li>
2608                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/build-your-brand-16209/"
2609                                           title="Build&#x20;Your&#x20;Brand"
2610                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2611                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2612                                        >
2613                                            <span class="text-base text-gray-700">
2614                                                Build Your Brand                                            </span>
2615                                        </a>
2616                                    </li>
2617                                                                    <li>
2618                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/just-cool-16210/"
2619                                           title="Just&#x20;Cool"
2620                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2621                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2622                                        >
2623                                            <span class="text-base text-gray-700">
2624                                                Just Cool                                            </span>
2625                                        </a>
2626                                    </li>
2627                                                                    <li>
2628                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/gildan-16212/"
2629                                           title="Gildan"
2630                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2631                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2632                                        >
2633                                            <span class="text-base text-gray-700">
2634                                                Gildan                                            </span>
2635                                        </a>
2636                                    </li>
2637                                                                    <li>
2638                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/cona-sports-16629/"
2639                                           title="CONA&#x20;SPORTS"
2640                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2641                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2642                                        >
2643                                            <span class="text-base text-gray-700">
2644                                                CONA SPORTS                                            </span>
2645                                        </a>
2646                                    </li>
2647                                                                    <li>
2648                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/james-nicholson-16211/"
2649                                           title="James&#x20;&amp;&#x20;Nicholson"
2650                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2651                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2652                                        >
2653                                            <span class="text-base text-gray-700">
2654                                                James &amp; Nicholson                                            </span>
2655                                        </a>
2656                                    </li>
2657                                                                    <li>
2658                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/fruit-of-the-loom-16205/"
2659                                           title="Fruit&#x20;of&#x20;the&#x20;Loom"
2660                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2661                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2662                                        >
2663                                            <span class="text-base text-gray-700">
2664                                                Fruit of the Loom                                            </span>
2665                                        </a>
2666                                    </li>
2667                                                                    <li>
2668                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/halfar-16208/"
2669                                           title="Halfar"
2670                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2671                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2672                                        >
2673                                            <span class="text-base text-gray-700">
2674                                                Halfar                                            </span>
2675                                        </a>
2676                                    </li>
2677                                                                    <li>
2678                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/kustom-kit-gamegear-16206/"
2679                                           title="Kustom&#x20;Kit&#x20;Gamegear"
2680                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2681                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2682                                        >
2683                                            <span class="text-base text-gray-700">
2684                                                Kustom Kit Gamegear                                            </span>
2685                                        </a>
2686                                    </li>
2687                                                                    <li>
2688                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/mr-socks-19915/"
2689                                           title="Mr.&#x20;Socks"
2690                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2691                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2692                                        >
2693                                            <span class="text-base text-gray-700">
2694                                                Mr. Socks                                            </span>
2695                                        </a>
2696                                    </li>
2697                                                                    <li>
2698                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/quadra-18260/"
2699                                           title="Quadra"
2700                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2701                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2702                                        >
2703                                            <span class="text-base text-gray-700">
2704                                                Quadra                                            </span>
2705                                        </a>
2706                                    </li>
2707                                                                    <li>
2708                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/beechfield-16207/"
2709                                           title="Beechfield"
2710                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2711                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2712                                        >
2713                                            <span class="text-base text-gray-700">
2714                                                Beechfield                                            </span>
2715                                        </a>
2716                                    </li>
2717                                                                    <li>
2718                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/teejays-16990/"
2719                                           title="TeeJays"
2720                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2721                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2722                                        >
2723                                            <span class="text-base text-gray-700">
2724                                                TeeJays                                            </span>
2725                                        </a>
2726                                    </li>
2727                                                                    <li>
2728                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/myrtle-beach-18261/"
2729                                           title="Myrtle&#x20;Beach"
2730                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2731                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2732                                        >
2733                                            <span class="text-base text-gray-700">
2734                                                Myrtle Beach                                            </span>
2735                                        </a>
2736                                    </li>
2737                                                                    <li>
2738                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/roly-16687/"
2739                                           title="Roly"
2740                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2741                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2742                                        >
2743                                            <span class="text-base text-gray-700">
2744                                                Roly                                            </span>
2745                                        </a>
2746                                    </li>
2747                                                                    <li>
2748                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/russell-17249/"
2749                                           title="Russell"
2750                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2751                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2752                                        >
2753                                            <span class="text-base text-gray-700">
2754                                                Russell                                            </span>
2755                                        </a>
2756                                    </li>
2757                                                                    <li>
2758                                        <a href="https://www.laufshirt-bedrucken.de/marken-15945/sol-s-18257/"
2759                                           title="Sol&#x27;s"
2760                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2761                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D90]').focus())"
2762                                        >
2763                                            <span class="text-base text-gray-700">
2764                                                Sol&#039;s                                            </span>
2765                                        </a>
2766                                    </li>
2767                                                            </ul>
2768                                            </li>
2769                                    <li class="relative level-0 border-b-2 border-transparent hover:border-primary data-[active]:border-primary"
2770                        @mouseenter="hoverPanelActiveId = 'category-node-93'"
2771                        @mouseleave="hoverPanelActiveId = 0"
2772                        @keyup.escape="hoverPanelActiveId = 0"
2773                    >
2774                        <span class="flex items-center text-md">
2775                            <a class="w-full text-base text-gray-700 level-0 py-2 px-0.5"
2776                               href="https://www.laufshirt-bedrucken.de/shorts-tights-16196/"
2777                               title="Shorts&#x20;&amp;&#x20;Tights"
2778                               @focus="hoverPanelActiveId = 0"
2779                            >
2780                                Shorts &amp; Tights                            </a>
2781                                                            <button
2782                                    type="button"
2783                                    data-sr-button-id="category-node-93"
2784                                    :aria-expanded="hoverPanelActiveId === 'category-node-93' ? 'true' : 'false'"
2785                                    @click="openMenuOnClick('category-node-93')"
2786                                    class="rounded p-1 text-gray-500"
2787                                >
2788                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true">
2789  <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/>
2790</svg>
2791                                    <span class="sr-only">
2792                                        Show submenu for Shorts &amp; Tights category                                    </span>
2793                                </button>
2794                                                    </span>
2795                                                    <ul
2796                                class="absolute top-full z-10 hidden px-6 py-4 mt-0.5 -ml-6 shadow-lg bg-container-lighter/95"
2797                                :class="{
2798                                    'hidden' : hoverPanelActiveId !== 'category-node-93',
2799                                    'block' : hoverPanelActiveId === 'category-node-93'
2800                                }"
2801                            >
2802                                                                    <li>
2803                                        <a href="https://www.laufshirt-bedrucken.de/shorts-tights-16196/damen-16199/"
2804                                           title="Damen&#x20;Shorts&#x20;&amp;&#x20;Tights&#x20;bedrucken"
2805                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2806                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D93]').focus())"
2807                                        >
2808                                            <span class="text-base text-gray-700">
2809                                                Damen Shorts &amp; Tights bedrucken                                            </span>
2810                                        </a>
2811                                    </li>
2812                                                                    <li>
2813                                        <a href="https://www.laufshirt-bedrucken.de/shorts-tights-16196/kinder-16503/"
2814                                           title="Kinder&#x20;Shorts&#x20;&amp;&#x20;Tights&#x20;bedrucken"
2815                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2816                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D93]').focus())"
2817                                        >
2818                                            <span class="text-base text-gray-700">
2819                                                Kinder Shorts &amp; Tights bedrucken                                            </span>
2820                                        </a>
2821                                    </li>
2822                                                                    <li>
2823                                        <a href="https://www.laufshirt-bedrucken.de/shorts-tights-16196/herren-16197/"
2824                                           title="Herren&#x20;Shorts&#x20;&amp;&#x20;Tights&#x20;bedrucken"
2825                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2826                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D93]').focus())"
2827                                        >
2828                                            <span class="text-base text-gray-700">
2829                                                Herren Shorts &amp; Tights bedrucken                                            </span>
2830                                        </a>
2831                                    </li>
2832                                                            </ul>
2833                                            </li>
2834                                    <li class="relative level-0 border-b-2 border-transparent hover:border-primary data-[active]:border-primary"
2835                        @mouseenter="hoverPanelActiveId = 'category-node-133'"
2836                        @mouseleave="hoverPanelActiveId = 0"
2837                        @keyup.escape="hoverPanelActiveId = 0"
2838                    >
2839                        <span class="flex items-center text-md">
2840                            <a class="w-full text-base text-gray-700 level-0 py-2 px-0.5"
2841                               href="https://www.laufshirt-bedrucken.de/specials-18487/"
2842                               title="Specials"
2843                               @focus="hoverPanelActiveId = 0"
2844                            >
2845                                Specials                            </a>
2846                                                            <button
2847                                    type="button"
2848                                    data-sr-button-id="category-node-133"
2849                                    :aria-expanded="hoverPanelActiveId === 'category-node-133' ? 'true' : 'false'"
2850                                    @click="openMenuOnClick('category-node-133')"
2851                                    class="rounded p-1 text-gray-500"
2852                                >
2853                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true">
2854  <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/>
2855</svg>
2856                                    <span class="sr-only">
2857                                        Show submenu for Specials category                                    </span>
2858                                </button>
2859                                                    </span>
2860                                                    <ul
2861                                class="absolute top-full z-10 hidden px-6 py-4 mt-0.5 -ml-6 shadow-lg bg-container-lighter/95"
2862                                :class="{
2863                                    'hidden' : hoverPanelActiveId !== 'category-node-133',
2864                                    'block' : hoverPanelActiveId === 'category-node-133'
2865                                }"
2866                            >
2867                                                                    <li>
2868                                        <a href="https://www.laufshirt-bedrucken.de/specials-18487/firmenlauf-18533/"
2869                                           title="Firmenlauf-Shirts&#x20;bedrucken&#x20;f&#xFC;r&#x20;Damen&#x20;und&#x20;Herren"
2870                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2871                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D133]').focus())"
2872                                        >
2873                                            <span class="text-base text-gray-700">
2874                                                Firmenlauf-Shirts bedrucken für Damen und Herren                                            </span>
2875                                        </a>
2876                                    </li>
2877                                                                    <li>
2878                                        <a href="https://www.laufshirt-bedrucken.de/specials-18487/berufsbekleidung-physiotherapeuten-online-bedrucken-lassen-18488/"
2879                                           title="Physiotherapeuten&#x20;Bekleidung&#x20;-&#x20;Team-Shirts&#x20;&amp;&#x20;Hosen&#x20;online&#x20;bedrucken&#x20;lassen"
2880                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2881                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D133]').focus())"
2882                                        >
2883                                            <span class="text-base text-gray-700">
2884                                                Physiotherapeuten Bekleidung - Team-Shirts &amp; Hosen online bedrucken lassen                                            </span>
2885                                        </a>
2886                                    </li>
2887                                                                    <li>
2888                                        <a href="https://www.laufshirt-bedrucken.de/specials-18487/dtf-transfer-online-bestellen/"
2889                                           title="DTF&#x20;Transfer"
2890                                           class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline aria-[current=page]:underline"
2891                                           @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D133]').focus())"
2892                                        >
2893                                            <span class="text-base text-gray-700">
2894                                                DTF Transfer                                            </span>
2895                                        </a>
2896                                    </li>
2897                                                            </ul>
2898                                            </li>
2899                            </ul>
2900        </nav>
2901    </div>
2902</div>
2903<script>
2904    'use strict';
2905
2906    const initMenuDesktop_6ac04a7f5f21b = () => {
2907        return {
2908            hoverPanelActiveId: null,
2909            setActiveMenu(menuNode) {
2910                Array.from(menuNode.querySelectorAll('a')).filter(link => {
2911                    return link.href === window.location.href.split('?')[0];
2912                }).map(item => {
2913                    item.setAttribute('aria-current', 'page');
2914                    item.closest('li.level-0').setAttribute('data-active', 'true');
2915                });
2916            },
2917            openMenuOnClick(menuNode) {
2918                if (menuNode === this.hoverPanelActiveId) {
2919                    this.hoverPanelActiveId = 0;
2920                } else {
2921                    this.hoverPanelActiveId = menuNode
2922                }
2923            }
2924        }
2925    }
2926</script>
2926
2927
2928        <div class="flex items-center gap-2 md:gap-1 order-3 md:-mr-1">
2929            <!--Compare Icon-->
2930            <a id="compare-link"
2931               class="relative inline-block rounded p-1 hover:bg-primary/10 outline-offset-2 invisible"
2932               :class="{ 'invisible': !(itemCount > 0) }"
2933               href="https://www.laufshirt-bedrucken.de/catalog/product_compare/index/"
2934               title="Produkte&#x20;vergleichen"
2935               x-data="initCompareHeader()"
2936               @private-content-loaded.window="receiveCompareData($event.detail.data)"
2937               :aria-label="`
2938                    Produkte&#x20;vergleichen,
2939                    ${itemCount > 1
2940                        ? hyva.str('\u00251\u0020Elemente', itemCount)
2941                        : hyva.str('\u00251\u0020Artikel', itemCount)
2942                    }`"
2943            >
2944                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="md:h-6 md:w-6" width="28" height="28" aria-hidden="true">
2945  <path stroke-linecap="round" stroke-linejoin="round" d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3"/>
2946</svg>
2947                <span
2948                    x-text="itemCount"
2949                    class="absolute -top-1.5 -right-1.5 h-5 px-2 py-1 rounded-full bg-yellow-500 text-white
2950                        text-xs font-semibold leading-none text-center uppercase tabular-nums"
2951                    aria-hidden="true"
2952                ></span>
2953            </a>
2954
2955            <!-- Additional Header Elements -->
2956            
2957            <!--Customer Icon & Dropdown-->
2958            
2959<div
2960    class="relative inline-block"
2961    x-data="initCustomerMenu"
2962    x-bind="eventListeners"
2963>
2964    <button
2965        type="button"
2966        id="customer-menu"
2967        class="btn bg-transparent border-transparent p-1 text-gray-900"
2968        @click="toggleOpen"
2969        :aria-expanded="open"
2970        aria-label="Mein&#x20;Konto"
2971        aria-haspopup="true"
2972    >
2973        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewBox="0 0 24 24" aria-hidden="true"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
2974    </button>
2975    <nav
2976        class="z-10 absolute right-0 w-40 sm:w-48 mt-2 lg:mt-3 -me-4 py-2 px-1 rounded-md shadow-lg bg-white overflow-auto"
2977        aria-labelledby="customer-menu"
2978        x-show="open"
2979        x-transition
2980        x-cloak
2981    >
2982                    
2983<a id="customer.header.sign.in.link"
2984   class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100"
2985   onclick="hyva.setCookie && hyva.setCookie(
2986       'login_redirect',
2987       window.location.href,
2988       1
2989   )"
2990   href="https://www.laufshirt-bedrucken.de/customer/account/index/"
2991   title="EINLOGGEN"
2992>
2993    EINLOGGEN</a>
2994
2995    <a id="customer.header.register.link"
2996       class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100"
2997       href="https://www.laufshirt-bedrucken.de/customer/account/create/"
2998       title="KONTO&#x20;ERSTELLEN"
2999    >
3000        KONTO ERSTELLEN    </a>
3001            </nav>
3002</div>
3003<script>
3004    function initCustomerMenu() {
3005        return hyva.createBooleanObject('open', false, {
3006            eventListeners: {
3007                ['@pageshow.window'](event) {
3008                    if (event.persisted) {
3009                        this.setOpenFalse()
3010                    }
3011                },
3012                ['@keyup.escape']() {
3013                    this.setOpenFalse()
3014                },
3015                ['@click.outside']() {
3016                    this.setOpenFalse()
3017                }
3018            }
3019        })
3020    }
3021    window.addEventListener('alpine:init', () => Alpine.data('initCustomerMenu', initCustomerMenu), {once: true})
3022</script>
3022
3023
3024
3025            <!--Cart Icon-->
3026                            <button
3027                            id="menu-cart-icon"
3028                class="relative inline-block rounded p-1 hover:bg-primary/10 outline-offset-2"
3029                x-ref="cartButton"
3030                :aria-disabled="isCartEmpty()"
3031                :aria-label="`
3032                    Toggle&#x20;minicart,
3033                    ${isCartEmpty()
3034                        ? 'Warenkorb&#x20;ist&#x20;leer'
3035                        : cart.summary_count > 1
3036                            ? hyva.str('&#x25;1&#x20;Artikel', cart.summary_count)
3037                            : hyva.str('&#x25;1&#x20;item', cart.summary_count)
3038                    }`"
3039                                    @click.prevent="() => {
3040                        $dispatch('toggle-cart', { isOpen: true })
3041                    }"
3042                    @toggle-cart.window="toggleCart($event)"
3043                    :aria-expanded="isCartOpen"
3044                    aria-haspopup="dialog"
3045                            >
3046                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="md:h-6 md:w-6" width="28" height="28" aria-hidden="true">
3047  <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/>
3048</svg>
3049                <span
3050                    x-text="cart.summary_count"
3051                    x-show="!isCartEmpty()"
3052                    x-cloak
3053                    class="absolute -top-1.5 -right-1.5 h-5 px-2 py-1 rounded-full bg-primary text-white                        text-xs font-semibold leading-none text-center uppercase tabular-nums"
3054                    aria-hidden="true"
3055                ></span>
3056                                    </button>
3057                        </div>
3058    </div>
3059
3060
3061    <!--Cart Drawer-->
3062    
3062<script>
3063    function initCartDrawer() {
3064        return {
3065            open: false,
3066            isLoading: false,
3067            cart: {},
3068            maxItemsToDisplay: 10,
3069            itemsCount: 0,
3070            getData(data) {
3071                if (data.cart) {
3072                    this.cart = data.cart;
3073                    this.itemsCount = data.cart.items && data.cart.items.length || 0;
3074                    this.setCartItems();
3075                }
3076                this.isLoading = false;
3077            },
3078            cartItems: [],
3079            getItemCountTitle() {
3080                return hyva.strf('\u00250\u0020of\u0020\u00251\u0020products\u0020in\u0020cart\u0020displayed', this.maxItemsToDisplay, this.itemsCount)
3081            },
3082            setCartItems() {
3083                this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || [];
3084
3085                if (this.maxItemsToDisplay > 0) {
3086                    this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10));
3087                }
3088
3089                this.$nextTick(() => {
3090                    this.cartItems.forEach(item => this.getItemImages(item));
3091                });
3092            },
3093            getItemImages(item) {
3094                const postUrl = BASE_URL + 'hyvacheckout/ajax/getItemsImages/';
3095                const formKey = hyva.getFormKey();
3096
3097                fetch(postUrl, {
3098                    "headers": {
3099                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
3100                    },
3101                    "body": "form_key=" + formKey + "&item_id=" + item.item_id,
3102                    "method": "POST",
3103                    "mode": "cors",
3104                    "credentials": "include"
3105                }).then(response => {
3106                    if (response.redirected) {
3107                        window.location.href = response.url;
3108                    } else if (response.ok) {
3109                        return response.json();
3110                    } else {
3111                    }
3112                }).then(result => {
3113                    item.product_image.src = result.image;
3114                });
3115            },
3116            deleteItemFromCart(itemId) {
3117                this.isLoading = true;
3118
3119                const formKey = hyva.getFormKey();
3120                const postUrl = BASE_URL + 'checkout/sidebar/removeItem/';
3121
3122                fetch(postUrl, {
3123                    "headers": {
3124                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
3125                    },
3126                    "body": "form_key=" + formKey + "&item_id=" + itemId,
3127                    "method": "POST",
3128                    "mode": "cors",
3129                    "credentials": "include"
3130                }).then(response => {
3131                    if (response.redirected) {
3132                        window.location.href = response.url;
3133                    } else if (response.ok) {
3134                        return response.json();
3135                    } else {
3136                        window.dispatchMessages && window.dispatchMessages([{
3137                            type: 'warning',
3138                            text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.'
3139                        }]);
3140                        this.isLoading = false;
3141                    }
3142                }).then(result => {
3143                    window.dispatchMessages && window.dispatchMessages([{
3144                        type: result.success ? 'success' : 'error',
3145                        text: result.success
3146                            ? 'Sie\u0020haben\u0020den\u0020Artikel\u0020entfernt.'
3147                            : result.error_message
3148                    }], result.success ? 5000 : 0)
3149                    window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
3150                });
3151            },
3152            scrollLock(use = true) {
3153                document.body.style.overflow = use ? "hidden" : "";
3154            },
3155            toggleCartDrawer(event) {
3156                if (event.detail && event.detail.isOpen !== undefined) {
3157                    if (event.detail.isOpen) {
3158                        this.openCartDrawer();
3159                    } else {
3160                        this.open = false;
3161                        this.scrollLock(false);
3162                        this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent);
3163                    }
3164                } else {
3165                                        this.openCartDrawer()
3166                }
3167            },
3168            openCartDrawer() {
3169                this.open = true;
3170                this.scrollLock(true);
3171                this.$nextTick(() => {
3172                    this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent)
3173                })
3174            },
3175            closeCartDrawer() {
3176                this.$dispatch('toggle-cart', { isOpen: false })
3177            },
3178            getSectionDataExtraActions() {
3179                if (!this.cart.extra_actions) {
3180                    return '';
3181                }
3182
3183                const contentNode = document.createElement('div');
3184                contentNode.innerHTML = this.cart.extra_actions;
3185
3186                hyva.activateScripts(contentNode);
3187
3188                return contentNode.innerHTML;
3189            }
3190        }
3191    }
3192</script>
3192
3193<section x-cloak
3194         x-show="cart"
3195         id="cart-drawer"
3196         x-data="initCartDrawer()"
3197         @private-content-loaded.window="getData($event.detail.data)"
3198         @toggle-cart.window="toggleCartDrawer($event)"
3199         @keydown.escape="closeCartDrawer"
3200>
3201    <div role="dialog"
3202         aria-labelledby="cart-drawer-title"
3203         aria-modal="true"
3204         :aria-hidden="!open"
3205         class="fixed inset-y-0 right-0 z-30 flex max-w-full">
3206        <div class="backdrop"
3207             x-show="open"
3208             x-transition:enter="ease-in-out duration-500"
3209             x-transition:enter-start="opacity-0"
3210             x-transition:enter-end="opacity-100"
3211             x-transition:leave="ease-in-out duration-500"
3212             x-transition:leave-start="opacity-100"
3213             x-transition:leave-end="opacity-0"
3214             role="button"
3215             @click="closeCartDrawer"
3216             aria-label="Close&#x20;minicart"></div>
3217        <div class="minicart-container relative w-screen max-w-md shadow-2xl"
3218             x-show="open"
3219             x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
3220             x-transition:enter-start="translate-x-full"
3221             x-transition:enter-end="translate-x-0"
3222             x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
3223             x-transition:leave-start="translate-x-0"
3224             x-transition:leave-end="translate-x-full"
3225             x-ref="cartDialogContent"
3226             role="region"
3227             :tabindex="open ? 0 : -1"
3228             aria-label="Warenkorb"
3229
3230        >
3231            <div class="flex flex-col h-full max-h-screen bg-white shadow-xl">
3232                
3233                <header class="relative px-4 py-6 sm:px-6">
3234                    <p id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900">
3235                        <strong>Warenkorb</strong>
3236                        <span class="items-total text-xs"
3237                              x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount"
3238                              x-text="getItemCountTitle()">
3239                        </span>
3240                    </p>
3241                </header>
3242
3243                
3244                <template x-if="!itemsCount">
3245                    <div class="relative px-4 py-6 bg-white border-bs sm:px-6 border-container">
3246                        Warenkorb ist leer                    </div>
3247                </template>
3248
3249                <template x-if="itemsCount">
3250                    <div class="relative grid gap-6 sm:gap-8 px-1 py-3 sm:px-3 bg-white border-b border-container overflow-y-auto overscroll-y-contain">
3251                        <template x-for="item in cartItems">
3252                            <div class="flex items-start p-3 space-x-4 transition duration-150 ease-in-out rounded-lg hover:bg-gray-100">
3253                                <a :href="item.product_url"
3254                                   class="w-1/4"
3255                                   :aria-label="hyva.strf('Product\u0020\u0022\u00250\u0022', item.product_name)"
3256                                >
3257                                    <img
3258                                        :src="item.product_image.src"
3259                                        :width="90"
3260                                        :height="120"
3261                                        loading="lazy"
3262                                        alt=""
3263                                        style="max-height: 9rem; object-fit:contain;"
3264                                    />
3265                                </a>
3266                                <div class="w-3/4 space-y-2">
3267                                    <div>
3268                                        <p class="text-lg">
3269                                            <span x-html="item.qty"></span> x <span x-html="item.product_name"></span>
3270                                        </p>
3271                                        <p class="text-sm text-gray-500"><span x-html="item.product_sku"></span></p>
3272                                    </div>
3273                                    <template x-for="option in item.options">
3274                                        <div class="flex">
3275                                            <p class="font-semibold mr-3" x-text="option.label + ':'"></p>
3276                                            <p class="text-secondary" x-html="option.value"></p>
3277                                        </div>
3278                                    </template>
3279                                    <p class="text-lg"><span x-html="item.product_price"></span></p>
3280                                    <div class="pt-4">
3281                                        <a :href="item.configure_url"
3282                                           x-show="item.product_type !== 'grouped' && item.is_visible_in_site_visibility"
3283                                           class="inline-flex p-2 mr-2 btn btn-primary "
3284                                           :aria-label="hyva.strf('Edit\u0020product\u
32840020\u0022\u00250\u0022', item.product_name)"
3285                                        >
3286                                            <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true">
3287  <path stroke-linecap="round" stroke-linejoin="round" d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"/>
3288</svg>
3289                                        </a>
3290                                        <button type="button"
3291                                                class="inline-flex p-2 btn btn-primary "
3292                                                @click="deleteItemFromCart(item.item_id)"
3293                                                :aria-label="hyva.strf('Remove\u0020product\u0020\u0022\u00250\u0022\u0020from\u0020cart', item.product_name)"
3294                                        >
3295                                            <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true">
3296  <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
3297</svg>
3298                                        </button>
3299                                    </div>
3300
3301                                </div>
3302                            </div>
3303                        </template>
3304                    </div>
3305                </template>
3306
3307                <template x-if="itemsCount">
3308                    <div>
3309                        
3310                        <div class="relative grid py-3 px-1 sm:px-3 bg-white text-center">
3311                            <div class="font-bold w-full p-3 space-x-4 transition duration-150 ease-in-out rounded-lg hover:bg-gray-100">
3312                                <p>Zwischensumme: <span x-html="cart.subtotal"></span></p>
3313                            </div>
3314                            <div class="w-full p-3 space-x-4 transition duration-150 ease-in-out rounded-lg hover:bg-gray-100 contents">
3315                                <a @click.prevent.stop="closeCartDrawer; $dispatch('toggle-authentication',
3316                                    {url: 'https://www.laufshirt-bedrucken.de/checkout/'});"
3317                                   href="https://www.laufshirt-bedrucken.de/checkout/"
3318                                   class="block btn btn-primary mx-4 "
3319                                >
3320                                    Kasse                                </a>
3321                                <span>oder</span>
3322                                <a href="https://www.laufshirt-bedrucken.de/checkout/cart/"
3323                                   class="underline"
3324                                >
3325                                    Warenkorb anzeigen und bearbeiten                                </a>
3326                            </div>
3327                            <div x-html="getSectionDataExtraActions()"></div>
3328                                                    </div>
3329                    </div>
3330                </template>
3331
3332                            </div>
3333
3334            <button
3335                type="button"
3336                @click="closeCartDrawer"
3337                aria-label="Close&#x20;minicart"
3338                class="absolute top-0 right-2 p-4 mt-2 text-gray-300 transition-colors hover:text-black"
3339            >
3340                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
3341  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
3342</svg>
3343            </button>
3344        </div>
3345        <div
3346    class="z-50 fixed inset-0 flex justify-center items-center bg-white/70 select-none"
3347    x-show="isLoading"
3348    x-cloak
3349    x-transition.opacity.duration.200ms
3350>
3351    <div class="flex items-center">
3352        <svg xmlns="http://www.w3.org/2000/svg" width="54" height="54" viewBox="0 0 24 24" stroke="currentColor" fill="none" stroke-width="2" stroke-linecap="round" class="animate-spin" aria-hidden="true">
3353    <circle style="opacity: .3;" cx="12" cy="12" r="10"/>
3354    <path fill="none" stroke-width="2" d="M12,2 a10,10 0 0,1 10,10"/>
3355</svg>
3356        <div class="ml-10 text-xl">
3357            Wird geladen …        </div>
3358    </div>
3359</div>
3360    </div>
3361
3362</section>
3363
3364    <!--Authentication Pop-Up-->
3365    
3365<script>
3366    function initAuthentication() {
3367        return {
3368            open: false,
3369            close() {
3370                this.open = false;
3371            },
3372            forceAuthentication: false,
3373            checkoutUrl: 'https://www.laufshirt-bedrucken.de/checkout/index/',
3374            errors: 0,
3375            hasCaptchaToken: 0,
3376            displayErrorMessage: false,
3377            errorMessages: [],
3378            setErrorMessages(message) {
3379                this.errorMessages = [message];
3380                this.displayErrorMessage = true;
3381            },
3382            submitForm() {
3383                // Do not rename $form, the variable is expected to be declared in the recaptcha output
3384                const $form = document.querySelector('#login-form');
3385                
3386                if (this.errors === 0) {
3387                    this.dispatchLoginRequest($form);
3388                }
3389            },
3390            onPrivateContentLoaded() {
3391                const data = this.$event.detail.data;
3392                const isLoggedIn = data.customer && data.customer.firstname;
3393                if (data.cart && !isLoggedIn) {
3394                    this.forceAuthentication = !data.cart.isGuestCheckoutAllowed;
3395                }
3396            },
3397            redirectIfAuthenticated() {
3398                const event = this.$event;
3399                this.open = this.forceAuthentication;
3400
3401                if (event.detail && event.detail.url) {
3402                    this.checkoutUrl = event.detail.url;
3403                }
3404                if (!this.forceAuthentication) {
3405                    window.location.href = this.checkoutUrl;
3406                }
3407            },
3408            resetErrors() {
3409                this.errors = 0;
3410            },
3411            dispatchLoginRequest(form) {
3412                this.isLoading = true;
3413                const username = this.$refs['customer-email'].value;
3414                const password = this.$refs['customer-password'].value;
3415                const formKey = hyva.getFormKey();
3416                const bodyFields = {
3417                    'username': username,
3418                    'password': password,
3419                    'formKey': formKey
3420                };
3421                                const fieldName = 'g\u002Drecaptcha\u002Dresponse';
3422                const recaptchaField = fieldName && form[fieldName];
3423                if (recaptchaField) {
3424                    bodyFields[fieldName] = recaptchaField.value;
3425                }
3426                fetch('https://www.laufshirt-bedrucken.de/customer/ajax/login/', {
3427                        method: 'POST',
3428                        headers: {
3429                            'Content-Type': 'application/json',
3430                            'X-Requested-With': 'XMLHttpRequest'
3431                        },
3432                        body: JSON.stringify(bodyFields)
3433                    }
3434                ).then(response => {
3435                        return response.json()
3436                    }
3437                ).then(data => {
3438                    this.isLoading = false;
3439                    if (data.errors) {
3440                        this.setErrorMessages(data.message);
3441                        this.errors = 1;
3442                        this.hasCaptchaToken = 0;
3443                    } else {
3444                        window.location.href = this.checkoutUrl;
3445                    }
3446                });
3447            },
3448            eventListeners: {
3449                ['@private-content-loaded.window']() {
3450                    this.onPrivateContentLoaded();
3451                },
3452                ['@toggle-authentication.window']() {
3453                    this.redirectIfAuthenticated();
3454                },
3455                ['@pageshow.window'](event) {
3456                    if (event.persisted) {
3457                        this.close();
3458                    };
3459                }
3460            }
3461        }
3462    }
3463
3464    window.addEventListener('alpine:init', () => Alpine.data('initAuthentication', initAuthentication), {once: true})
3465</script>
3465
3466
3467<dialog
3468    id="authentication-popup"
3469    aria-labelledby="cart-drawer-title"
3470    class="open:flex flex-col transition ease-out duration-300 motion-reduce:duration-0 p-0"
3471    x-data="initAuthentication"
3472    x-bind="eventListeners"
3473    x-show="open"
3474    x-htmldialog="close"
3475    closeby="any"
3476    x-transition
3477>
3478    <div class="pt-8 px-8">
3479        <div class="flex gap-2 justify-between items-center">
3480            <p class="text-xl">
3481                <strong>Kundenlogin</strong>
3482            </p>
3483            <button
3484                type="button"
3485                class="btn bg-transparent border-transparent p-2"
3486                @click="close"
3487                aria-label="Panel&#x20;schlie&#xDF;en"
3488            >
3489                <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewBox="0 0 24 24" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12"/></svg>
3490            </button>
3491        </div>
3492
3493        <div class="message error" x-show="errors" x-cloak>
3494            <template x-for="(message, index) in errorMessages" :key="index">
3495                <div>
3496                    <template x-if="message">
3497                        <span x-html="message"></span>
3498                    </template>
3499                </div>
3500            </template>
3501        </div>
3502    </div>
3503
3504    <div class="block-customer-login p-8">
3505        <p id="authenticate-customer-login" class="text-lg mb-2">
3506            <strong>Mit Ihrem Konto bestellen</strong>
3507        </p>
3508
3509        <form
3510            id="login-form"
3511            class="form form-login"
3512            method="post"
3513            @submit.prevent="submitForm"
3514        >
3515                        <input name="context" type="hidden" value="checkout">
3516
3517            <div class="flex flex-col gap-4">
3518                <div class="field email required">
3519                    <label for="form-login-username">
3520                        <span>E-Mail</span>
3521                    </label>
3522                    <div class="control">
3523                        <input
3524                            id="form-login-username"
3525                            name="username"
3526                            type="email"
3527                            class="form-input w-full"
3528                            required
3529                            autocomplete="off"
3530                            x-ref="customer-email"
3531                            @change="resetErrors"
3532                        >
3533                    </div>
3534                </div>
3535                <div class="field password required">
3536                    <label for="form-login-password">
3537                        <span>Passwort</span>
3538                    </label>
3539                    <div class="control">
3540                        <input
3541                            id="form-login-password"
3542                            name="password"
3543                            type="password"
3544                            class="form-input w-full"
3545                            required
3546                            autocomplete="off"
3547                            x-ref="customer-password"
3548                            @change="resetErrors"
3549                        >
3550                    </div>
3551                </div>
3552            </div>
3553
3554            <div class="actions-toolbar">
3555                <button
3556                    type="submit"
3557                                        class="btn btn-primary"
3558                >
3559                    EINLOGGEN                </button>
3560                <a
3561                    href="https://www.laufshirt-bedrucken.de/customer/account/forgotpassword/"
3562                    class="underline hover:no-underline"
3563                >
3564                    Passwort vergessen?                </a>
3565            </div>
3566        </form>
3567            </div>
3568    <div class="block-new-customer p-8 border-t border-gray-300">
3569        <p id="authenticate-new-customer" class="text-lg mb-2">
3570            <strong>Als neuer Kunde bestellen</strong>
3571        </p>
3572
3573        <div class="block-content">
3574            <p class="mb-1">
3575                Das Erstellen eines Kontos hat viele Vorteile:            </p>
3576            <ul class="list-disc pl-5">
3577                <li> Bestell- und Versandstatus ansehen</li>
3578                <li> Bestellverlauf verfolgen</li>
3579                <li> Schneller bestellen</li>
3580            </ul>
3581            <div class="actions-toolbar mt-6 mb-2">
3582                <a href="https://www.laufshirt-bedrucken.de/customer/account/create/"
3583                    class="inline-flex btn btn-primary">
3584                    KONTO ERSTELLEN                </a>
3585            </div>
3586        </div>
3587    </div>
3588</dialog>
3589</div>
3590
3591</header>
3591<main id="maincontent" class="page-main"> <!--
3592DEPRECATED: This template will be removed in version 3.17
3593If you're overriding or referencing this file, please update your layout and customizations accordingly.
3594--><div id="contentarea" tabindex="-1"></div>
3595<div class="page messages">
3595<script>
3596        function initMessages() {
3597        "use strict";
3598        return {
3599            messages: window.mageMessages || [],
3600            isEmpty() {
3601                return this.messages.reduce(
3602                    function (isEmpty, message) {
3603                        return isEmpty && message === undefined
3604                    }, true
3605                )
3606            },
3607            hasMessages() {
3608                return !this.isEmpty();
3609            },
3610            hasMessage() {
3611                return !!this.message;
3612            },
3613            removeMessage() {
3614                this.messages[this.index] = undefined;
3615            },
3616            addMessages(messages, hideAfter) {
3617                messages.map((message) => {
3618                    this.messages = this.messages.concat(message);
3619                    if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) {
3620                        hideAfter = window.defaultSuccessMessageTimeout;
3621                    }
3622                    if (hideAfter) {
3623                        this.setHideTimeOut(this.messages.length -1, hideAfter);
3624                    }
3625                });
3626            },
3627            setHideTimeOut(messageIndex, hideAfter) {
3628                setTimeout((messageIndex) => {
3629                    this.messages[messageIndex] = undefined;
3630                }, hideAfter, messageIndex);
3631            },
3632            eventListeners: {
3633                ['@messages-loaded.window'](event) {
3634                    this.addMessages(event.detail.messages, event.detail.hideAfter)
3635                },
3636                ['@private-content-loaded.window'](event) {
3637                    const data = event.detail.data;
3638                    if (
3639                        data.messages &&
3640                        data.messages.messages &&
3641                        data.messages.messages.length
3642                    ) {
3643                        this.addMessages(data.messages.messages);
3644                    }
3645                },
3646                ['@clear-messages.window']() {
3647                    this.messages = [];
3648                },
3649                ['@pageshow.window'](event) {
3650                    if (event.persisted) {
3651                        this.messages = [];
3652                    };
3653                }
3654            },
3655            getMessageUiId() {
3656                return 'message-' + this.message.type;
3657            }
3658        }
3659    }
3660
3661    window.addEventListener('alpine:init', () => Alpine.data('initMessages', initMessages), {once: true})
3662</script>
3662
3663<section id="messages"
3664         x-data="initMessages"
3665         x-bind="eventListeners"
3666         role="alert"
3667>
3668    <template x-if="hasMessages">
3669        <div class="w-full">
3670            <div class="messages container mx-auto py-3">
3671                <template x-for="(message, index) in messages" :key="index">
3672                    <div>
3673                        <template x-if="hasMessage">
3674                            <div class="message"
3675                                 :class="message.type"
3676                                 :ui-id="getMessageUiId"
3677                            >
3678                                <span x-html="message.text"></span>
3679                                <button
3680                                    type="button"
3681                                    class="text-gray-600 hover:text-black"
3682                                    aria-label="Close message"
3683                                    @click.prevent="removeMessage"
3684                                >
3685                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-current" width="18" height="18" aria-hidden="true">
3686  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
3687</svg>
3688                                </button>
3689                            </div>
3690                        </template>
3691                    </div>
3692                </template>
3693            </div>
3694        </div>
3695    </template>
3696</section>
3697</div>    <div class="container&#x20;flex&#x20;flex-col&#x20;md&#x3A;flex-row&#x20;flex-wrap">
3698        <h1            class="page-title text-3xl&#x20;font-bold&#x20;mb-6"
3699                        data-ui-id="page-title-wrapper"
3700        >
3701            Dein warenkorb        </h1>
3702            </div>
3703<div class="columns"><div class="column main"><style>
3704    :root {
3705        --theme-color: #86BD41;
3706    }
3707</style>
3708
3709<script>
3710    window.checkoutConfig = false;
3711    window.customerData = window.checkoutConfig.customerData;
3712    window.isCustomerLoggedIn = window.checkoutConfig.isCustomerLoggedIn;
3713</script>
3713
3714
3715<script>
3716    'use strict';
3717    (function( hyva, undefined ) {
3718
3719        let controller = new AbortController();
3720
3721        /**
3722         * Takes a form element and submits it through fetch,
3723         * then replaces the result into the document without
3724         * refreshing the page
3725         */
3726        hyva.postCart = (form) => {
3727            if (!form.action) {
3728                return;
3729            }
3730            controller.abort();
3731            controller = new AbortController();
3732
3733            const action = form.action;
3734            const formData = new FormData(form);
3735
3736            if (!formData.uenc) {
3737                formData.append('uenc', hyva.getUenc());
3738            }
3739
3740            formData.append('form_key', hyva.getFormKey());
3741
3742            window.fetch(action, {
3743                method: 'POST',
3744                body: formData,
3745                signal: controller.signal
3746            }).then((result) => {
3747                return result.text()
3748            }).then((content) => {
3749
3750                hyva.replaceDomElement('#maincontent', content)
3751
3752            }).catch((error) => {
3753                if (error.name !== 'AbortError') {
3754                    console.error(error);
3755                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
3756                        [{
3757                            type: "error",
3758                            text: "Es\u0020ist\u0020ein\u0020Fehler\u0020aufgetreten.\u0020Bitte\u0020versuchen\u0020Sie\u0020es\u0020erneut."
3759                        }], 10000
3760                    );
3761                }
3762            })
3763        }
3764    }( window.hyva = window.hyva || {} ));
3765</script>
3765
3766
3767<script>
3768
3769    function initCartForm(){
3770        return {
3771            cartIsEmpty: !!window.checkoutConfig,
3772            checkCartShouldUpdate(data) {
3773                const cart = data.cart;
3774
3775                if (this.cartIsEmpty !== !!window.checkoutConfig) {
3776                    this.cartIsEmpty = !!window.checkoutConfig;
3777                    this.reloadCartContent();
3778                    return;
3779                }
3780
3781                if (cart) {
3782                    if (!window.checkoutConfig) {
3783                        if (cart.items.length) {
3784                            this.reloadCartContent();
3785                        }
3786                        return;
3787                    }
3788
3789                    const roundUp = (number) => {
3790                        return Math.round(number * 100);
3791                    }
3792
3793                    const decimalNumbersAreEqual = (number1, number2) => {
3794                        return roundUp(number1) === roundUp(number2);
3795                    }
3796
3797                    if (window.checkoutConfig && cart) {
3798                        if (decimalNumbersAreEqual(
3799                                cart.items.reduce((totalQty, cartItem) => totalQty + cartItem.qty, 0),
3800                                window.checkoutConfig.quoteData.items_qty
3801                            ) &&
3802                            decimalNumbersAreEqual(
3803                                cart.subtotalAmount,
3804                                window.checkoutConfig.totalsData.total_segments.find((segment) => segment.code === "subtotal").value
3805                            )
3806                        ) {
3807                            return;
3808                        }
3809                    }
3810                }
3811                this.reloadCartContent();
3812            },
3813            reloadCartContent() {
3814                window.fetch(window.location.href, {
3815                    method: "GET"
3816                }).then((result) => {
3817                    return result.text()
3818
3819                }).then((body) => {
3820                    hyva.setCookie('mage-cache-sessid', '', -1, true);
3821                    window.checkoutConfig = null;
3822                    hyva.replaceDomElement('#maincontent', body)
3823
3824                }).catch((error) => {
3825                    console.error(error);
3826                    window.location.reload()
3827                })
3828            },
3829            onStorageChange(event) {
3830                if (event.key === 'private_content_version') {
3831                    window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
3832                }
3833            }
3834        }
3835    }
3836</script>
3836
3837<!-- TODO phase 2 -->
3838<!--    <div class="print-cart-button lg:w-2/3 text-right">-->
3839<!--        <button onclick="window.print()">--><!--            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">-->
3840<!--                <g clip-path="url(#clip0_1426_220)">-->
3841<!--                    <path d="M19 8H5C3.34 8 2 9.34 2 11V15C2 16.1 2.9 17 4 17H6V19C6 20.1 6.9 21 8 21H16C17.1 21 18 20.1 18 19V17H20C21.1 17 22 16.1 22 15V11C22 9.34 20.66 8 19 8ZM15 19H9C8.45 19 8 18.55 8 18V14H16V18C16 18.55 15.55 19 15 19ZM19 12C18.45 12 18 11.55 18 11C18 10.45 18.45 10 19 10C19.55 10 20 10.45 20 11C20 11.55 19.55 12 19 12ZM17 3H7C6.45 3 6 3.45 6 4V6C6 6.55 6.45 7 7 7H17C17.55 7 18 6.55 18 6V4C18 3.45 17.55 3 17 3Z" fill="black"/>-->
3842<!--                </g>-->
3843<!--                <defs>-->
3844<!--                    <clipPath id="clip0_1426_220">-->
3845<!--                        <rect width="24" height="24" fill="white"/>-->
3846<!--                    </clipPath>-->
3847<!--                </defs>-->
3848<!--            </svg>-->
3849<!--            <button>-->
3850<!--    </div>-->
3851<div x-data="initCartForm()"
3852     class="cart-form clearfix"
3853     @private-content-loaded.window="checkCartShouldUpdate($event.detail.data)"
3854     @storage.window="onStorageChange($event)"
3855>
3856            <div class="cart-empty">
3857        <p>Du hast keine Artikel in deinem Warenkorb.</p>
3858    <p>Klicke <a href="https://www.laufshirt-bedrucken.de/"><b>hier</b></a> um weiter einzukaufen.    </p>
3859    </div>
3860    </div>
3861</div></div></main><footer class="page-footer"><div class="footer content"><div class="bg-footer-main text-white body-font border-t border-container-darker shadow">
3862    <div class="container py-8 my-8 mx-auto">
3863        <div class="flex flex-wrap order-first gap-y-16">
3864                            <div class="w-full flex flex-wrap pr-4">
3865    <div class="footer-items-block text-lg w-full flex gap-8 xl:col-span-2">
3866        <div class="footer-item footer-logo-block">
3867            <img src="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/LaufshirtBedrucken_HyvaCheckout/images/logo/footer-logo-de.svg" alt="Footer logo" width="245" height="100"/>
3868            <div class="socials my-6">
3869                <ul class="flex">
3870                    <li>
3871                        <a class="fa-stack" title="Facebook" href="https://www.facebook.com/LaufshirtBedrucken/" target="_blank">
3872                            <img title="Facebook" src="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/LaufshirtBedrucken_HyvaCheckout/images/social/facebook.svg" alt="Facebook" width="27" height="27" />
3873                        </a>
3874                    </li>
3875                    <li>
3876                        <a class="fa-stack" title="Instagram" href="https://www.instagram.com/laufshirt_bedrucken/" target="_blank">
3877                            <img title="Instagram" src="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/LaufshirtBedrucken_HyvaCheckout/images/social/instagram.svg" alt="Instagram" width="27" height="27" />
3878                        </a>
3879                    </li>
3880                </ul>
3881            </div>
3882        </div>
3883        <div class="footer-item">
3884            <h2 class="text-md text-xl pb-2 leading-5 font-semibold tracking-wider uppercase">
3885                Service            </h2>
3886            	<div class="block ves-menu mgm-widget  ves-megamenu-mobile" id="footer-menu-31790986879765251605-menu">
3887								<div class="navigation">
3888			<ul id="footer-menu-31790986879765251605" class="ves-megamenu menu-hover accordion-menu ves-vertical ves-vertical-left"    data-toggle-mobile-nav="false">
3889				<li id=vesitem-266117909868791731938223 class=" nav-item level0 nav-0 submenu-left subhover  dropdown level-top "  ><a href="https://www.laufshirt-bedrucken.de/musterservice/" target="_self"   class=" nav-anchor"><span>Musterservice</span></a></li><li id=vesitem-26621790986879571357018 class=" nav-item level0 nav-0 submenu-left subhover  dropdown level-top "  ><a href="https://www.laufshirt-bedrucken.de/b2b-textildruck-grossbestellungen/" target="_self"   class=" nav-anchor"><span>Angebotsservice</span></a></li><li id=vesitem-266317909868791001836626 class=" nav-item level0 nav-0 submenu-left subhover  dropdown level-top "  ><a href="https://www.laufshirt-bedrucken.de/grafikservice/" target="_self"   class=" nav-anchor"><span>Grafikservice</span></a></li><li id=vesitem-26641790986879828513627 class=" nav-item level0 nav-0 submenu-left subhover  dropdown level-top "  ><a href="https://www.laufshirt-bedrucken.de/mengenrabatte/" target="_self"   class=" nav-anchor"><span>Mengenrabatte</span></a></li><li id=vesitem-266517909868791918872881 class=" nav-item level0 nav-0 submenu-left subhover  dropdown level-top "  ><a href="https://www.laufshirt-bedrucken.de/faq-bestellung/" target="_self"   class=" nav-anchor"><span>FAQs</span></a></li>			</ul>
3890		</div>
3891				
3891<script type="text/javascript">
3892		if(typeof(initedToggleMenu) == 'undefined') {
3893			var initedToggleMenu = false;
3894		}
3895		require(['jquery',
3896						'Ves_Megamenu/js/megamenuGeneral'
3897			],function($){
3898				$('.price-box.price-final_price', $("#footer-menu-31790986879765251605")).each(function(){
3899					$(this).removeClass('price-box').addClass('price-box1');
3900					$(this).attr('data-role','priceBox1');
3901				})
3902				if(typeof(playMegamenuJs) == 'function') {
3903					jQuery(document).ready(function($) {
3904						playMegamenuJs($, 'footer-menu-31790986879765251605', 1, 'hover', 0);
3905
3906					});
3907				} else {
3908					jQuery(document).ready(function($) {
3909													jQuery('#footer-menu-31790986879765251605-menu .ves-megamenu .level0').hover(function() {
3910								var mParentTop = jQuery(this).parents('.ves-megamenu').offset().top;
3911								var mParentHeight = $(this).parent().height();
3912								var mTop =  $(this).height();
3913								var mHeight = $(this).height();
3914								var mParent = $(this).parent();
3915								if (mHeight < mParentHeight) {
3916									mTop = $(this).offset().top - mParent.offset().top + mHeight;
3917								}
3918								$(this).children('.submenu').css({top:mTop});
3919							});
3920															jQuery('p').each(function() {
3921									var $this = $(this);
3922									if ($this.html().replace(/\s|&nbsp;/g, '').length == 0)
3923									$this.remove();
3924								});
3925							});
3926					var toggle_nav = $("#footer-menu-31790986879765251605").attr("data-toggle-mobile-nav");
3927					if(toggle_nav == true || toggle_nav == 'true' || toggle_nav==1){
3928						if(!initedToggleMenu) {
3929							var menuToogle = function () {
3930								if ($('html').hasClass('nav-open')) {
3931									$('html').removeClass('nav-open');
3932									setTimeout(function () {
3933										$('html').removeClass('nav-before-open');
3934									}, 300);
3935								} else {
3936									$('body').append('<div class="ves-overlay ves-overlayfooter-menu-31790986879765251605"></div>');
3937									$('html').addClass('nav-before-open');
3938									setTimeout(function () {
3939										$('html').addClass('nav-open');
3940									}, 42);
3941								}
3942							}
3943							$(document).on("click", ".action.nav-toggle", menuToogle);
3944							initedToggleMenu = true;
3945						}
3946						$(document).on("click", ".ves-overlayfooter-menu-31790986879765251605", function(){
3947							$('#footer-menu-31790986879765251605').css("left","");
3948							$('html').removeClass('ves-navopen');
3949							setTimeout(function () {
3950								$('html').removeClass('ves-nav-before-open');
3951							}, 300);
3952							$(this).remove();
3953							return false;
3954						});
3955					}
3956
3957					$("#footer-menu-31790986879765251605 .dynamic-items li").hover(function(){
3958						$(this).parents(".dynamic-items").find("li").removeClass("dynamic-active");
3959						$(this).addClass("dynamic-active");
3960						var id = $(this).data("dynamic-id");
3961						$("#footer-menu-31790986879765251605 ."+id).parent().find(".dynamic-item").removeClass("dynamic-active");
3962						$("#footer-menu-31790986879765251605 ."+id).addClass("dynamic-active");
3963					});
3964					var mImg = '';
3965					$("#footer-menu-31790986879765251605 img").hover(function(){
3966						mImg = '';
3967						mImg = $(this).attr('src');
3968						if ($(this).data('hoverimg')){
3969							$(this).attr('src',$(this).data('hoverimg'));
3970						}
3971					},function(){
3972						$(this).attr('src',mImg);
3973					});
3974					$("#footer-menu-31790986879765251605 li a").hover(function(){
3975						$(this).css({
3976							"background-color": $(this).data("hover-bgcolor"),
3977							"color": $(this).data("hover-color")
3978						});
3979					}, function(){
3980						$(this).css({
3981							"background-color": $(this).data("bgcolor"),
3982							"color": $(this).data("color")
3983						});
3984					});
3985					$(window).on("resize load", function(){
3986
3987						if($("#footer-menu-31790986879765251605").data("disable-bellow") && $("#footer-menu-31790986879765251605").data("disable-above")){
3988
3989							if (($(window).width() <= $("#footer-menu-31790986879765251605").data("disable-bellow")) || ($(window).width() >= $("#footer-menu-31790986879765251605").data("disable-above"))){
3990								$("#footer-menu-31790986879765251605-menu").hide();
3991							}else{
3992								$("#footer-menu-31790986879765251605-menu").show();
3993							}
3994
3995							$("#footer-menu-31790986879765251605").find("li").each(function(index, element){
3996								if (($(window).width() <= $(this).data("disable-bellow")) || ($(window).width() >= $(this).data("disable-above"))){
3997									$(this).addClass("hidden");
3998								} else if ($(this).hasClass("hidden")){
3999									$(this).removeClass("hidden");
4000								}
4001							});
4002
4003						} else if($("#footer-menu-31790986879765251605").data("disable-bellow") && !$("#footer-menu-31790986879765251605").data("disable-above")) {
4004							if ($(window).width() <= $("#footer-menu-31790986879765251605").data("disable-bellow")){
4005								$("#footer-menu-31790986879765251605-menu").hide();
4006							}else{
4007								$("#footer-menu-31790986879765251605-menu").show();
4008							}
4009
4010							$("#footer-menu-31790986879765251605").find("li").each(function(index, element){
4011								if ($(window).width() <= $(this).data("disable-bellow")){
4012									$(this).addClass("hidden");
4013								}else if ($(this).hasClass("hidden")){
4014									$(this).removeClass("hidden");
4015								}
4016							});
4017						} else if($("#footer-menu-31790986879765251605").data("disable-above") && !$("#footer-menu-31790986879765251605").data("disable-bellow")) {
4018							if ($(window).width() >= $("#footer-menu-31790986879765251605").data("disable-above")){
4019								$("#footer-menu-31790986879765251605-menu").hide();
4020							}else{
4021								$("#footer-menu-31790986879765251605-menu").show();
4022							}
4023
4024							$("#footer-menu-31790986879765251605").find("li").each(function(index, element){
4025								if($(window).width() >= $(this).data("disable-above")) {
4026									$(this).addClass("hidden");
4027								} else if ($(this).hasClass("hidden")){
4028									$(this).removeClass("hidden");
4029								}
4030							});
4031						}
4032
4033						if ($(window).width() >= 768 && $(window).width() <= 1024){
4034							$("#footer-menu-31790986879765251605 .nav-anchor").off().click(function(){
4035								var iParent = $(this).parent('.nav-item');
4036								iParent.addClass("clicked");
4037								if ($(iParent).children('.submenu').length == 1){
4038									iParent.trigger('hover');
4039									if (iParent.hasClass('submenu-alignleft') || iParent.hasClass('submenu-alignright')){
4040										if ((iParent.offset().left + iParent.find('.submenu').eq(0).width()) > $(window).width()){
4041											iParent.find('.submenu').eq(0).css('max-width','100%');
4042											iParent.css('position','static');
4043										}
4044									}
4045									return false;
4046								}
4047							});
4048						}else{
4049							$("#footer-menu-31790986879765251605").find('.submenu').css('max-width','');
4050							$("#footer-menu-31790986879765251605").find('.submenu-alignleft').css('position','relative');
4051						}
4052						if ($(window).width() <= 768){
4053							$('.sections.nav-sections').removeAttr( "style" )
4054							$("#footer-menu-31790986879765251605").addClass("nav-mobile");
4055
4056							/*
4057							$("#footer-menu-31790986879765251605 .nav-anchor").off().click(function(){
4058
4059								$("#footer-menu-31790986879765251605 .nav-item").removeClass("item-active");
4060								var parent = $(this).parents(".nav-item").eq(0);
4061								$(this).toggleClass('item-active');
4062								$(parent).find(".submenu").eq(0).slideToggle();
4063								return false;
4064							});
4065							*/
4066
4067						}else{
4068							$("#footer-menu-31790986879765251605").find(".submenu").css({'display':''});
4069							$("#footer-menu-31790986879765251605").find("div").removeClass("mbactive");
4070							$("#footer-menu-31790986879765251605").removeClass("nav-mobile");
4071
4072							/*
4073							$("#footer-menu-31790986879765251605 .nav-anchor").off().click(function(){
4074								if("#" != $(this).attr("href"))
4075									window.location.url = $(this).attr("href");
4076								return true;
4077							});
4078							*/
4079
4080						}
4081					}).resize();
4082					//Toggle mobile menu
4083					$('.ves-megamenu-mobile #footer-menu-31790986879765251605 .opener').on('click', function(e) {
4084						e.preventDefault();
4085						$("#footer-menu-31790986879765251605 .nav-item").removeClass("item-active");
4086						var parent = $(this).parents(".nav-item").eq(0);
4087						$(this).toggleClass('item-active');
4088						$(parent).find(".submenu").eq(0).slideToggle();
4089						$(parent).find(".submenu").eq(0).toggleClass('submenu-active');
4090						return false;
4091					});
4092
4093
4094					
4095									}
4096			});
4097	</script>
4097
4098</div>
4099            <a href="/vertrag-widerrufen" class="widerruf-footer-link" style="display:inline-flex;align-items:center;gap:8px;background-color:#6b7280;color:#fff;border-radius:10px;padding:8px 14px;margin-top:12px;text-decoration:none;font-size:15px;font-weight:400;transition:background-color 0.2s ease;">
4100                <svg style="width:1em;height:1em;flex-shrink:0;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor">
4101                    <path fill-rule="evenodd" d="M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z"/>
4102                    <path d="M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z"/>
4103                    <circle cx="8" cy="8" r="1.2"/>
4104                </svg>
4105                Vertrag widerrufen            </a>
4106        </div>
4107        <div class="footer-item">
4108            <h2 class="text-md text-xl pb-2 leading-5 font-semibold tracking-wider uppercase">
4109                Über Uns            </h2>
4110            	<div class="block ves-menu mgm-widget  ves-megamenu-mobile" id="footer-menu-4179098687950733874-menu">
4111								<div class="navigation">
4112			<ul id="footer-menu-4179098687950733874" class="ves-megamenu menu-hover accordion-menu ves-vertical ves-vertical-left"    data-toggle-mobile-nav="false">
4113				<li id=vesitem-269017909868791971847690 class=" nav-item level0 nav-0 submenu-left subhover  dropdown level-top "  ><a href="https://www.laufshirt-bedrucken.de/impressum/" target="_self"   class=" nav-anchor"><span>Impressum</span></a></li><li id=vesitem-26911790986879878209208 class=" nav-item level0 nav-0 submenu-left subhover  dropdown level-top "  ><a href="https://www.laufshirt-bedrucken.de/agbs/" target="_self"   class=" nav-anchor"><span>AGBs</span></a></li><li id=vesitem-26921790986879979022394 class=" nav-item level0 nav-0 submenu-left subhover  dropdown level-top "  ><a href="https://www.laufshirt-bedrucken.de/datenschutzerklarung/" target="_self"   class=" nav-anchor"><span>Datenschutzerklärung</span></a></li><li id=vesitem-26931790986879176475179 class=" nav-item level0 nav-0 submenu-left subhover  dropdown level-top "  ><a href="https://www.laufshirt-bedrucken.de/widerrufsbelehrung/" target="_self"   class=" nav-anchor"><span>Widerrufsbelehrung</span></a></li><li id=vesitem-26941790986879573553232 class=" nav-item level0 nav-0 submenu-left subhover  dropdown level-top "  ><a href="https://www.laufshirt-bedrucken.de/contact/" target="_self"   class=" nav-anchor"><span>Kontakt</span></a></li><li id=vesitem-26961790986879646870806 class=" nav-item level0 nav-0 submenu-left subhover  dropdown level-top "  ><a href="https://www.laufshirt-bedrucken.de/ueber-uns/" target="_self"   class=" nav-anchor"><span>Das sind wir</span></a></li>			</ul>
4114		</div>
4115				
4115<script type="text/javascript">
4116		if(typeof(initedToggleMenu) == 'undefined') {
4117			var initedToggleMenu = false;
4118		}
4119		require(['jquery',
4120						'Ves_Megamenu/js/megamenuGeneral'
4121			],function($){
4122				$('.price-box.price-final_price', $("#footer-menu-4179098687950733874")).each(function(){
4123					$(this).removeClass('price-box').addClass('price-box1');
4124					$(this).attr('data-role','priceBox1');
4125				})
4126				if(typeof(playMegamenuJs) == 'function') {
4127					jQuery(document).ready(function($) {
4128						playMegamenuJs($, 'footer-menu-4179098687950733874', 1, 'hover', 0);
4129
4130					});
4131				} else {
4132					jQuery(document).ready(function($) {
4133													jQuery('#footer-menu-4179098687950733874-menu .ves-megamenu .level0').hover(function() {
4134								var mParentTop = jQuery(this).parents('.ves-megamenu').offset().top;
4135								var mParentHeight = $(this).parent().height();
4136								var mTop =  $(this).height();
4137								var mHeight = $(this).height();
4138								var mParent = $(this).parent();
4139								if (mHeight < mParentHeight) {
4140									mTop = $(this).offset().top - mParent.offset().top + mHeight;
4141								}
4142								$(this).children('.submenu').css({top:mTop});
4143							});
4144															jQuery('p').each(function() {
4145									var $this = $(this);
4146									if ($this.html().replace(/\s|&nbsp;/g, '').length == 0)
4147									$this.remove();
4148								});
4149							});
4150					var toggle_nav = $("#footer-menu-4179098687950733874").attr("data-toggle-mobile-nav");
4151					if(toggle_nav == true || toggle_nav == 'true' || toggle_nav==1){
4152						if(!initedToggleMenu) {
4153							var menuToogle = function () {
4154								if ($('html').hasClass('nav-open')) {
4155									$('html').removeClass('nav-open');
4156									setTimeout(function () {
4157										$('html').removeClass('nav-before-open');
4158									}, 300);
4159								} else {
4160									$('body').append('<div class="ves-overlay ves-overlayfooter-menu-4179098687950733874"></div>');
4161									$('html').addClass('nav-before-open');
4162									setTimeout(function () {
4163										$('html').addClass('nav-open');
4164									}, 42);
4165								}
4166							}
4167							$(document).on("click", ".action.nav-toggle", menuToogle);
4168							initedToggleMenu = true;
4169						}
4170						$(document).on("click", ".ves-overlayfooter-menu-4179098687950733874", function(){
4171							$('#footer-menu-4179098687950733874').css("left","");
4172							$('html').removeClass('ves-navopen');
4173							setTimeout(function () {
4174								$('html').removeClass('ves-nav-before-open');
4175							}, 300);
4176							$(this).remove();
4177							return false;
4178						});
4179					}
4180
4181					$("#footer-menu-4179098687950733874 .dynamic-items li").hover(function(){
4182						$(this).parents(".dynamic-items").find("li").removeClass("dynamic-active");
4183						$(this).addClass("dynamic-active");
4184						var id = $(this).data("dynamic-id");
4185						$("#footer-menu-4179098687950733874 ."+id).parent().find(".dynamic-item").removeClass("dynamic-active");
4186						$("#footer-menu-4179098687950733874 ."+id).addClass("dynamic-active");
4187					});
4188					var mImg = '';
4189					$("#footer-menu-4179098687950733874 img").hover(function(){
4190						mImg = '';
4191						mImg = $(this).attr('src');
4192						if ($(this).data('hoverimg')){
4193							$(this).attr('src',$(this).data('hoverimg'));
4194						}
4195					},function(){
4196						$(this).attr('src',mImg);
4197					});
4198					$("#footer-menu-4179098687950733874 li a").hover(function(){
4199						$(this).css({
4200							"background-color": $(this).data("hover-bgcolor"),
4201							"color": $(this).data("hover-color")
4202						});
4203					}, function(){
4204						$(this).css({
4205							"background-color": $(this).data("bgcolor"),
4206							"color": $(this).data("color")
4207						});
4208					});
4209					$(window).on("resize load", function(){
4210
4211						if($("#footer-menu-4179098687950733874").data("disable-bellow") && $("#footer-menu-4179098687950733874").data("disable-above")){
4212
4213							if (($(window).width() <= $("#footer-menu-4179098687950733874").data("disable-bellow")) || ($(window).width() >= $("#footer-menu-4179098687950733874").data("disable-above"))){
4214								$("#footer-menu-4179098687950733874-menu").hide();
4215							}else{
4216								$("#footer-menu-4179098687950733874-menu").show();
4217							}
4218
4219							$("#footer-menu-4179098687950733874").find("li").each(function(index, element){
4220								if (($(window).width() <= $(this).data("disable-bellow")) || ($(window).width() >= $(this).data("disable-above"))){
4221									$(this).addClass("hidden");
4222								} else if ($(this).hasClass("hidden")){
4223									$(this).removeClass("hidden");
4224								}
4225							});
4226
4227						} else if($("#footer-menu-4179098687950733874").data("disable-bellow") && !$("#footer-menu-4179098687950733874").data("disable-above")) {
4228							if ($(window).width() <= $("#footer-menu-4179098687950733874").data("disable-bellow")){
4229								$("#footer-menu-4179098687950733874-menu").hide();
4230							}else{
4231								$("#footer-menu-4179098687950733874-menu").show();
4232							}
4233
4234							$("#footer-menu-4179098687950733874").find("li").each(function(index, element){
4235								if ($(window).width() <= $(this).data("disable-bellow")){
4236									$(this).addClass("hidden");
4237								}else if ($(this).hasClass("hidden")){
4238									$(this).removeClass("hidden");
4239								}
4240							});
4241						} else if($("#footer-menu-4179098687950733874").data("disable-above") && !$("#footer-menu-4179098687950733874").data("disable-bellow")) {
4242							if ($(window).width() >= $("#footer-menu-4179098687950733874").data("disable-above")){
4243								$("#footer-menu-4179098687950733874-menu").hide();
4244							}else{
4245								$("#footer-menu-4179098687950733874-menu").show();
4246							}
4247
4248							$("#footer-menu-4179098687950733874").find("li").each(function(index, element){
4249								if($(window).width() >= $(this).data("disable-above")) {
4250									$(this).addClass("hidden");
4251								} else if ($(this).hasClass("hidden")){
4252									$(this).removeClass("hidden");
4253								}
4254							});
4255						}
4256
4257						if ($(window).width() >= 768 && $(window).width() <= 1024){
4258							$("#footer-menu-4179098687950733874 .nav-anchor").off().click(function(){
4259								var iParent = $(this).parent('.nav-item');
4260								iParent.addClass("clicked");
4261								if ($(iParent).children('.submenu').length == 1){
4262									iParent.trigger('hover');
4263									if (iParent.hasClass('submenu-alignleft') || iParent.hasClass('submenu-alignright')){
4264										if ((iParent.offset().left + iParent.find('.submenu').eq(0).width()) > $(window).width()){
4265											iParent.find('.submenu').eq(0).css('max-width','100%');
4266											iParent.css('position','static');
4267										}
4268									}
4269									return false;
4270								}
4271							});
4272						}else{
4273							$("#footer-menu-4179098687950733874").find('.submenu').css('max-width','');
4274							$("#footer-menu-4179098687950733874").find('.submenu-alignleft').css('position','relative');
4275						}
4276						if ($(window).width() <= 768){
4277							$('.sections.nav-sections').removeAttr( "style" )
4278							$("#footer-menu-4179098687950733874").addClass("nav-mobile");
4279
4280							/*
4281							$("#footer-menu-4179098687950733874 .nav-anchor").off().click(function(){
4282
4283								$("#footer-menu-4179098687950733874 .nav-item").removeClass("item-active");
4284								var parent = $(this).parents(".nav-item").eq(0);
4285								$(this).toggleClass('item-active');
4286								$(parent).find(".submenu").eq(0).slideToggle();
4287								return false;
4288							});
4289							*/
4290
4291						}else{
4292							$("#footer-menu-4179098687950733874").find(".submenu").css({'display':''});
4293							$("#footer-menu-4179098687950733874").find("div").removeClass("mbactive");
4294							$("#footer-menu-4179098687950733874").removeClass("nav-mobile");
4295
4296							/*
4297							$("#footer-menu-4179098687950733874 .nav-anchor").off().click(function(){
4298								if("#" != $(this).attr("href"))
4299									window.location.url = $(this).attr("href");
4300								return true;
4301							});
4302							*/
4303
4304						}
4305					}).resize();
4306					//Toggle mobile menu
4307					$('.ves-megamenu-mobile #footer-menu-4179098687950733874 .opener').on('click', function(e) {
4308						e.preventDefault();
4309						$("#footer-menu-4179098687950733874 .nav-item").removeClass("item-active");
4310						var parent = $(this).parents(".nav-item").eq(0);
4311						$(this).toggleClass('item-active');
4312						$(parent).find(".submenu").eq(0).slideToggle();
4313						$(parent).find(".submenu").eq(0).toggleClass('submenu-active');
4314						return false;
4315					});
4316
4317
4318					
4319									}
4320			});
4321	</script>
4321
4322</div>
4323        </div>
4324        <div class="footer-item payment-proven">
4325            <h2 class="text-md text-xl pb-2 leading-5 font-semibold tracking-wider uppercase">
4326                Zahlungsart            </h2>
4327            <div class="mt-3 mb-6 payment-method">
4328                <img src="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/LaufshirtBedrucken_HyvaCheckout/images/payment/footer-payment.svg" alt="Payments logo" width="270" height="100"/>
4329            </div>
4330            <div class="proven-expert">
4331                <!-- ProvenExpert Bewertungssiegel -->
4332                <a style="text-decoration: none;" title="Kundenbewertungen &amp; Erfahrungen zu Shirtracer GmbH. Mehr Infos anzeigen." href="https://www.provenexpert.com/shirtracer-gmbh/?utm_source=Widget&amp;utm_medium=Widget&amp;utm_campaign=Widget" target="_blank">
4333                    <img style="border: 0;" src="https://images.provenexpert.com/bb/94/8689cb433027b7d3173aac800813/widget_landscape_180_de_0.png" alt="Erfahrungen &amp; Bewertungen zu Shirtracer GmbH" width="180" height="150" />
4334                </a>
4335                <!-- ProvenExpert Bewertungssiegel -->
4336            </div>
4337        </div>
4338    </div>
4339</div>
4340                                                                                                                                                                </div>
4341    </div>
4342    <div class="footer-copyright-block bg-container border-container max-h-3.5">
4343        <div class="container py-1 max-w-full items-center justify-center">
4344            <p>
4345                <div class="trustpilot-widget pt-1" data-locale="de-DE" data-template-id="5419b732fbfb950b10de65e5" data-businessunit-id="61bbbcef110c36119ee0c60a" data-style-height="24px" data-style-width="100%" data-theme="dark">
4346    <a href="https://de.trustpilot.com/review/www.laufshirt-bedrucken.de" target="_blank" rel="noopener">Trustpilot</a>
4347</div>
4348<!--<svg role="img" viewBox="0 0 126 31" xmlns="http://www.w3.org/2000/svg" style="height: 1.5rem; width: 4.5rem; left: 0; top: 0; margin-left:-2rem">-->
4349<!--    <title id="trustpilotLogo-ccjirm1zrbf">Trustpilot</title>-->
4350<!--   </svg>-->
4351
4352<!-- TrustBox script --> 
4352<script type="text/javascript" src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js" async></script>
4352 <!-- End TrustBox script -->
4353
4354
4355            </p>
4356        </div>
4357    </div>
4358</div>
4359
4360</div></footer>
4361<script>
4362    'use strict';
4363
4364    (function () {
4365        window.AmFB = {
4366            fbSectionName: 'amfacebook-pixel',
4367            options: {
4368                eventCode: '',
4369                url: 'https://www.laufshirt-bedrucken.de/amasty_fbpixel/pageView/processPageView/',
4370                eventsData: {},
4371                isLogEnabled: '',
4372                loggingUrl: 'https://www.laufshirt-bedrucken.de/amasty_fbpixel/logEvent/log/'
4373            },
4374
4375            /**
4376             * @private
4377             * @param {object} body
4378             * @param {string} param
4379             * @param {object} object
4380             * @returns {void}
4381             */
4382            prepareObjectData: function (body, param, object) {
4383                for (const [key, value] of Object.entries(object)) {
4384
4385                    if (typeof value === 'object') {
4386                        this.prepareObjectData(body, param + `[${key}]`, value);
4387                    } else {
4388                        body.append(param + `[${key}]`, value);
4389                    }
4390
4391                }
4392            },
4393
4394            /**
4395             * @private
4396             * @returns {Promise}
4397             */
4398            setDataToSection: function () {
4399                const body = new URLSearchParams({
4400                    form_key: hyva.getFormKey(),
4401                    uenc: hyva.getUenc(),
4402                    event_code: this.options.eventCode
4403                });
4404
4405                this.prepareObjectData(body, 'event_data', this.options.eventsData);
4406
4407                return fetch(this.options.url, {
4408                        method: 'POST',
4409                        headers: {
4410                            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
4411                        },
4412                        body: body
4413                    }).catch(error => {
4414                        typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([
4415                            {
4416                                type: "error",
4417                                text: error
4418                            }
4419                        ]);
4420                    });
4421            },
4422
4423            /**
4424             * @private
4425             * @param {string} eventsData
4426             * @returns {void}
4427             */
4428            logEventData: function (eventsData) {
4429                const body = new URLSearchParams({
4430                    form_key: hyva.getFormKey(),
4431                    uenc: hyva.getUenc()
4432                });
4433
4434                this.prepareObjectData(body, 'events', eventsData);
4435
4436                fetch(this.options.loggingUrl, {
4437                        method: 'POST',
4438                        headers: {
4439                            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
4440                        },
4441                        body: body
4442                    }).catch(error => {
4443                        typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([
4444                            {
4445                                type: "error",
4446                                text: error
4447                            }
4448                        ]);
4449                    });
4450            },
4451
4452            /**
4453             * @private
4454             * @param {Object} event
4455             * @returns {void}
4456             */
4457            afterLoadSectionData: function (event) {
4458                const eventsData = event.detail?.data[this.fbSectionName]?.events;
4459
4460                !!eventsData && this.setFbqData(eventsData);
4461            },
4462
4463            /**
4464             * @private
4465             * @param {array} eventsData
4466             * @returns {void}
4467             */
4468            setFbqData: function(eventsData) {
4469                eventsData.forEach((data) => {
4470                    const id = Object.keys(data)[0];
4471
4472                    !!id && fbq(data[id].event_action, id, data[id].event_type, data[id].event_data, {eventID: data[id].event_id});
4473                });
4474
4475                if (this.options.loggingUrl && this.options.isLogEnabled) {
4476                    this.logEventData(eventsData);
4477                }
4478            },
4479
4480            /**
4481             * @public
4482             * @returns {void}
4483             */
4484            initFB: function () {
4485                window.addEventListener("private-content-loaded", (event) => this.afterLoadSectionData(event));
4486
4487                if (this.options.eventCode && this.options.url) {
4488                    this.setDataToSection().then(() => {
4489                        this.reloadCustomerData();
4490                    });
4491                } else {
4492                    this.reloadCustomerData();
4493                }
4494            },
4495
4496            /**
4497             * @private
4498             * @returns {void}
4499             */
4500            reloadCustomerData() {
4501                this.resetSessionCookie();
4502                window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
4503            },
4504
4505            /**
4506             * @private
4507             * @returns {void}
4508             */
4509            resetSessionCookie() {
4510                hyva.setCookie('mage-cache-sessid', '', -1, true);
4511            },
4512        };
4513
4514        window.AmFB.initFB();
4515    })();
4516</script>
vendor: 1 bytes, line 4516
4516
4517<script type="text/x-magento-init"  nonce="NDQwZm9qcHZvanloeWVrZnh5cnNuN2h3ZXNrMjFmZHo=">
4518{"*":{"Mirasvit_Banner\/js\/loader":{"url":"https:\/\/www.laufshirt-bedrucken.de\/mst_banner\/placeholder\/loader\/","params":{"page_type":"checkout_cart_index","product_id":null,"category_id":null,"uri":"https:\/\/www.laufshirt-bedrucken.de\/checkout\/cart\/"}},"Mirasvit_Banner\/js\/analytics":{"url":"https:\/\/www.laufshirt-bedrucken.de\/mst_banner\/banner\/track\/","params":{"uri":"\/checkout\/cart\/"}}}}</script>
vendor: 1 bytes, line 4518
4518
4519<script type="text/javascript" async>
4520    var w = document.createElement("script");
4521    w.type = "text/javascript";
4522    w.src = "//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js";
4523    w.async = true;
4524    document.head.appendChild(w);
4525</script>
vendor: 1 bytes, line 4525
4525
4526<script type="text/javascript">
4527    (function(w,d,s,r,n){w.TrustpilotObject=n;w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)};
4528    a=d.createElement(s);a.async=1;a.src=r;a.type='text/java'+s;f=d.getElementsByTagName(s)[0];
4529    f.parentNode.insertBefore(a,f)})(window,document,'script', 'https://invitejs.trustpilot.com/tp.min.js', 'tp');
4530    tp('register','1GSDmQKDUT48SaHJ');
4531</script>
vendor: 1 bytes, line 4531
4531
4532<script type="text/javascript">
4533    function inIframe () {
4534        try {
4535            return window.self !== window.top;
4536        } catch (e) {
4537            return false;
4538        }
4539    }
4540
4541    function tryParseJson(str) {
4542        if (typeof str === 'string') {
4543            try {
4544                return JSON.parse(str);
4545            } catch (e) {
4546                return false;
4547            }
4548        }
4549        return false;
4550    }
4551
4552    if (inIframe()) {
4553        window.addEventListener('message', function(e) {
4554            var adminOrign = new URL(window.location).hostname;
4555            var eventOriginHostname = new URL(e.origin).hostname;
4556            if (!e.data || adminOrign !== eventOriginHostname) {
4557                return;
4558            }
4559            if (typeof TrustpilotPreview !== 'undefined') {
4560                if (typeof e.data === 'string' && e.data === 'submit') {
4561                    TrustpilotPreview.sendTrustboxes();
4562                } else {
4563                    jsonData = tryParseJson(e.data);
4564                    if (jsonData.trustbox) {
4565                        TrustpilotPreview.setSettings(jsonData.trustbox);
4566                    } else if (jsonData.customised) {
4567                        TrustpilotPreview.updateActive(jsonData.customised);
4568                    }
4569                }
4570            } else {
4571                var settings = tryParseJson(e.data);
4572                if (settings) {
4573                    var p = document.createElement("script");
4574                    p.type = "text/javascript";
4575                    p.onload = function () {
4576                        const iFrame = e.source.parent.document.getElementById('configuration_iframe').contentWindow;
4577                        TrustpilotPreview.init(['//ecommplugins-scripts.trustpilot.com/v2.1/css/preview.min.css'], settings, iFrame, e.source);
4578                    };
4579                    p.src = '//ecommplugins-scripts.trustpilot.com/v2.1/js/preview.min.js';
4580                    document.head.appendChild(p);
4581                }
4582            }
4583        });
4584    }
4585</script>
4585<script type="text/javascript" async>
4586    const trustpilot_trustbox_settings = {"trustboxes":[]};
4587    if (trustpilot_trustbox_settings) {
4588        document.addEventListener('DOMContentLoaded', function() {
4589            tp('trustBox', trustpilot_trustbox_settings);
4590        });
4591    }
4592</script>
4592<script type="text/javascript">
4593	require([
4594		'jquery'], function ($) {
4595			$(document).ready(function(){
4596				if(jQuery(".megamenuowl-play").length > 0 ) {
4597					require([
4598						'jquery',
4599												"Ves_All/lib/bootstrap/js/bootstrap.min",
4600															'megamenuowlcarousel'
4601								], function ($) {
4602					var owlItems = [];
4603					jQuery(".megamenuowl-play").each( function(){
4604						var owlCarousel = jQuery(this).find(".owl-carousel");
4605						var owlId = jQuery(owlCarousel).attr("id");
4606						jQuery(this).addClass("hasOwl");
4607						var config = [];
4608						owlItems[jQuery(owlCarousel).attr("id")] = true;
4609						if(typeof(jQuery(owlCarousel).data('nav'))!='underfined'){
4610							config['nav'] = jQuery(owlCarousel).data('nav');
4611						}
4612						if(typeof(jQuery(owlCarousel).data('dot'))!='underfined'){
4613							config['dot'] = jQuery(owlCarousel).data('dot');
4614						}
4615						if(typeof(jQuery(owlCarousel).data('autoplay'))!='underfined'){
4616							config['autoplay'] = jQuery(owlCarousel).data('autoplay');
4617						}
4618						if(jQuery(owlCarousel).data('autoplay-timeout')){
4619							config['autoplayTimeout'] = jQuery(owlCarousel).data('autoplay-timeout');
4620						}
4621						if(jQuery(owlCarousel).data('autoplay-pauonhover')){
4622							config['autoplayHoverPause'] = jQuery(owlCarousel).data('autoplay-pauonhover');
4623						}
4624						if(typeof(jQuery(owlCarousel).data('rtl'))!='underfined'){
4625							config['rtl'] = jQuery(owlCarousel).data('rtl');
4626						}
4627						if(jQuery(owlCarousel).data('items')){
4628							
4629							config['items'] = jQuery(owlCarousel).data('items');
4630						}
4631						if(typeof(jQuery(owlCarousel).data('loop'))!='underfined'){
4632							config['loop'] = jQuery(owlCarousel).data('loop');
4633						}
4634						if(typeof(jQuery(owlCarousel).data('mousedrag'))!='underfined'){
4635							config['mouseDrag'] = jQuery(owlCarousel).data('mousedrag');
4636						}
4637						if(typeof(jQuery(owlCarousel).data('pulldrag'))!='underfined'){
4638							config['pullDrag'] = jQuery(owlCarousel).data('pulldrag');
4639						}
4640						if(typeof(jQuery(owlCarousel).data('freedrag'))!='underfined'){
4641							config['freeDrag'] = jQuery(owlCarousel).data('freedrag');
4642						}
4643						if(typeof(jQuery(owlCarousel).data('stagepadding'))!='underfined'){
4644							config['stagePadding'] = jQuery(owlCarousel).data('stagepadding');
4645						}
4646						if(typeof(jQuery(owlCarousel).data('lazyload'))!='underfined'){
4647							config['lazyLoad'] = jQuery(owlCarousel).data('lazyload');
4648						}
4649						if(jQuery(owlCarousel).data('margin')){
4650							config['margin'] = jQuery(owlCarousel).data('margin');
4651						}
4652						var mobile_items = 1;
4653						if(jQuery(owlCarousel).data('mobile-items')){
4654							mobile_items = jQuery(owlCarousel).data('mobile-items');
4655						}
4656						var tablet_small_items = 3;
4657						if(jQuery(owlCarousel).data('tablet-small-items')){
4658							tablet_small_items = jQuery(owlCarousel).data('tablet-small-items');
4659						}
4660						var tablet_items = 3;
4661						if(jQuery(owlCarousel).data('tablet-items')){
4662							tablet_items = jQuery(owlCarousel).data('tablet-items');
4663						}
4664						var portrait_items = 4;
4665						if(jQuery(owlCarousel).data('portrait-items')){
4666							portrait_items = jQuery(owlCarousel).data('portrait-items');
4667						}
4668						var large_items = 5;
4669						if(jQuery(owlCarousel).data('large-items')){
4670							large_items = jQuery(owlCarousel).data('large-items');
4671						}
4672						var large_max_items = 6;
4673						if(jQuery(owlCarousel).data('large-max-items')){
4674							large_max_items = jQuery(owlCarousel).data('large-max-items');
4675						}
4676						config['responsive'] = {
4677							0 : {items: mobile_items},
4678							480 : {items: tablet_small_items},
4679							640 : {items: tablet_items},
4680							768 : {items: portrait_items},
4681							980 : {items: large_items},
4682							1200 : {items: large_max_items}
4683						};
4684						jQuery(owlCarousel).owlCarousel(config);
4685						jQuery(".owl-left").click(function(){
4686							var owlCarousel = jQuery("#"+jQuery(this).data("owlid"));
4687							owlCarousel.trigger('prev.owl.carousel');
4688							return false;
4689						});
4690						jQuery(".owl-right").click(function(){
4691							var owlCarousel = jQuery("#"+jQuery(this).data("owlid"));
4692							owlCarousel.trigger('next.owl.carousel');
4693							return false;
4694						});
4695					});
4696				});
4697}
4698})
4699});
4700
4701</script>
vendor: 1 bytes, line 4701
4701
4702<script>
4703    let SnapSlider = class {
4704        constructor(el, {
4705            labelSepparator = 'von',
4706            autoPager,
4707            groupPager
4708        } = {}) {
4709            this.el = el;
4710            this.track = this.el.querySelector("[data-track]");
4711            if (!this.track) {
4712                console.warn(
4713                    "No Slider track defined, reverting back to CSS slider.\nPlease create a wrapper for your slides with the attribute data-track",
4714                    this.el
4715                );
4716                return;
4717            }
4718            this.initialLoad = true;
4719            this.slides = [];
4720            this.inViewObserver;
4721            this.mutationObserver;
4722            this.resizeObserver;
4723            this.pager = this.el.querySelector("[data-pager]");
4724            this.navBtns = Array.from(
4725                this.el.querySelectorAll("[data-next], [data-prev]")
4726            );
4727            this.slideLabelSepparator = this.el.dataset.slideLabelSepparator || labelSepparator;
4728            this.useAutoPager = autoPager || this.el.hasAttribute("data-auto-pager") || false;
4729            this.useGroupPager = groupPager || this.el.hasAttribute("data-group-pager") || false;
4730            this.sliderLabel = this.el.hasAttribute("aria-label") && this.el.getAttribute("aria-label").toLowerCase().trim().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
4731            this.sliderId = this.el.id || this.sliderLabel || "slider";
4732            this.markerIdName = "data-target-id";
4733            this.pagerClasses = this.el.dataset.pagerClass || "snap-pager";
4734            this.markerClasses = this.el.dataset.markerClass || "snap-marker";
4735            this.init();
4736        }
4737        init() {
4738            this.setupSlides();
4739            this.setupNav();
4740            if (this.useAutoPager) {
4741                this.createPager();
4742            } else {
4743                this.setupPager();
4744            }
4745            this.setupObservers();
4746            this.setupMutationObserver();
4747            this.setupResizeObserver();
4748            this.el.addEventListener("click", this.eventHandler.bind(this));
4749            this.el.addEventListener("keydown", this.eventHandler.bind(this));
4750        }
4751        destroy() {
4752            this.inViewObserver?.disconnect();
4753            this.mutationObserver?.disconnect();
4754            this.resizeObserver?.disconnect();
4755            this.el.removeEventListener("click", this.eventHandler.bind(this));
4756            this.el.removeEventListener("keydown", this.eventHandler.bind(this));
4757        }
4758        roundUpIfGreaterThan(number, min = 8) {
4759            const decimalPart = number - Math.floor(number);
4760            return decimalPart >= min ? Math.ceil(number) : Math.floor(number);
4761        }
4762        getInViewItems() {
4763            const inViewSlides = this.track.querySelectorAll("[data-in-view]");
4764            const firstInViewSlide = inViewSlides[0] || null;
4765            const lastInViewSlide = inViewSlides[inViewSlides.length - 1] || null;
4766            const isAtStart = firstInViewSlide === this.slides[0];
4767            const isAtEnd = lastInViewSlide === this.slides[this.slides.length - 1];
4768            return {
4769                inViewSlides,
4770                totalInViewSlides: inViewSlides.length,
4771                firstInViewSlide,
4772                lastInViewSlide,
4773                isAtStart,
4774                isAtEnd,
4775                hasNoOverflow: isAtStart && isAtEnd
4776            };
4777        }
4778        groupPagerMarkers() {
4779            if (this.slides.length === 0 || !this.pager || !this.useGroupPager) return;
4780            const totalVisibleSlides = this.roundUpIfGreaterThan(
4781                this.track.offsetWidth / this.slides[0].offsetWidth
4782            );
4783            const markers = Array.from(this.pager.querySelectorAll("a, button"));
4784            markers.forEach((marker, index) => {
4785                marker.style.display = index % totalVisibleSlides === 0 ? null : "none";
4786            });
4787        }
4788        handleInView(entries) {
4789            entries.forEach((entry) => {
4790                const marker = this.pager && (this.pager.querySelector(`[href="#${entry.target.id}"]`) || this.pager.querySelector(
4791                    `[${this.markerIdName}="${entry.target.id}"]`
4792                ));
4793                entry.target.toggleAttribute("data-in-view", entry.isIntersecting);
4794                entry.target.toggleAttribute("inert", !entry.isIntersecting);
4795                marker?.setAttribute("aria-current", entry.isIntersecting);
4796                marker?.setAttribute("tabindex", entry.isIntersecting ? "0" : "-1");
4797            });
4798            const {
4799                isAtStart,
4800                isAtEnd,
4801                hasNoOverflow
4802            } = this.getInViewItems();
4803            this.navBtns.forEach((btn) => {
4804                if (btn.hasAttribute("data-next")) {
4805                    btn.style.visibility = hasNoOverflow ? "hidden" : null;
4806                    isAtEnd ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
4807                }
4808                if (btn.hasAttribute("data-prev")) {
4809                    btn.style.visibility = hasNoOverflow ? "hidden" : null;
4810                    isAtStart ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
4811                }
4812            });
4813            if (this.pager) {
4814                this.pager.style.visibility = hasNoOverflow ? "hidden" : null;
4815            }
4816            if (!this.initialLoad) {
4817                this.el.dispatchEvent(
4818                    new CustomEvent("slideChange", {
4819                        detail: this.getInViewItems()
4820                    })
4821                );
4822            } else {
4823                this.initialLoad = false;
4824            }
4825            if (document.activeElement.parentElement.hasAttribute("data-pager")) {
4826                const activeItems = this.pager.querySelectorAll('[tabindex="0"]');
4827                if (activeItems.length) {
4828                    activeItems[0].focus({ preventScroll: true });
4829                }
4830            }
4831        }
4832        getSlides() {
4833            if (!this.track) return [];
4834            return Array.from(this.track.children).filter(
4835                (child) => child.tagName.toLowerCase() !== "template" && child.tagName.toLowerCase() !== "style" && child.tagName.toLowerCase() !== "script"
4836            );
4837        }
4838        refreshSlides() {
4839            this.initialLoad = true;
4840            this.slides = this.getSlides();
4841            this.setupSlides();
4842            if (this.useAutoPager) {
4843                this.createPager();
4844            } else {
4845                this.setupPager();
4846            }
4847            this.groupPagerMarkers();
4848            this.setupObservers();
4849        }
4850        setupSlides() {
4851            this.slides = this.getSlides();
4852            this.slides.forEach((slide, index) => {
4853                const totalSlides = this.slides.length;
4854                const currentSlide = index + 1;
4855                const existingLabel = slide.getAttribute("aria-label") || "";
4856                const isImage = slide.tagName.toLowerCase() === "img" || slide.tagName.toLowerCase() === "picture";
4857                const slideLabelTag = isImage ? "alt" : "aria-label";
4858                const hasAutoLabel = existingLabel.startsWith(
4859                    `${currentSlide} ${this.slideLabelSepparator} `
4860                );
4861                if (!slide.hasAttribute("id")) {
4862                    slide.setAttribute(
4863                        "id",
4864                        `${this.sliderId}-item-${currentSlide}`
4865                    );
4866                }
4867                if (!slide.hasAttribute(slideLabelTag) || slide.getAttribute(slideLabelTag) === "" || hasAutoLabel) {
4868                    slide.setAttribute(
4869                        slideLabelTag,
4870                        `${currentSlide} ${this.slideLabelSepparator} ${totalSlides}`
4871                    );
4872                }
4873                if (slide.tagName.toLowerCase() === "div" && !slide.hasAttribute("role")) {
4874                    slide.setAttribute("role", "group");
4875                }
4876                if (this.pager && !isImage) {
4877                    slide.setAttribute("role", "tabpanel");
4878                }
4879                if (slide.getAttribute("role") === "group") {
4880                    slide.setAttribute("aria-roledescription", "item");
4881                }
4882            });
4883            if (!this.el.hasAttribute("role") && this.el.tagName !== "SECTION") {
4884                this.el.setAttribute("role", "region");
4885            }
4886            if (!this.el.hasAttribute("aria-roledescription")) {
4887                this.el.setAttribute("aria-roledescription", "carousel");
4888            }
4889            this.track.setAttribute("tabindex", 0);
4890            this.track.setAttribute("aria-live", "polite");
4891        }
4892        setupNav() {
4893            this.navBtns.forEach((btn) => {
4894                btn.setAttribute("disabled", "");
4895                btn.removeAttribute("hidden");
4896                btn.classList.remove("invisible");
4897                btn.style.visibility = null;
4898            });
4899        }
4900        createPager() {
4901            const newPager = document.createElement("nav");
4902            newPager.setAttribute("data-pager", "");
4903            newPager.setAttribute("role", "tablist");
4904            newPager.classList.add(...this.pagerClasses.split(" "));
4905            this.slides.forEach((slide, index) => {
4906                const marker = document.createElement("button");
4907                const slideId = slide.id || `${this.sliderId}-item-${index + 1}`;
4908                marker.setAttribute(this.markerIdName, slideId);
4909                marker.classList.add(...this.markerClasses.split(" "));
4910                this.setupPagerMarker(marker, index);
4911                newPager.appendChild(marker);
4912                if (slide.tagName.toLowerCase() !== "img" && slide.tagName.toLowerCase() !== "picture") {
4913                    slide.removeAttribute("aria-roledescription");
4914                    slide.setAttribute("role", "tabpanel");
4915                }
4916            });
4917            if (this.pager) {
4918                this.pager.setAttribute("role", "tablist");
4919                this.pager.replaceChildren(...newPager.children);
4920            } else {
4921                this.track.after(newPager);
4922                this.pager = this.el.querySelector("[data-pager]");
4923            }
4924        }
4925        setupPager() {
4926            if (!this.pager) return;
4927            this.pager.setAttribute("role", "tablist");
4928            const items = Array.from(this.pager.querySelectorAll("a, button"));
4929            items.forEach((marker, index) => this.setupPagerMarker(marker, index));
4930        }
4931        setupPagerMarker(marker, index) {
4932            const markerId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
4933            const slideId = markerId || `${this.sliderId}-item-${index + 1}`;
4934            if (!markerId) {
4935                marker.setAttribute(this.markerIdName, slideId);
4936            }
4937            marker.setAttribute("role", "tab");
4938            marker.setAttribute("aria-controls", slideId);
4939            marker.setAttribute("aria-posinset", index + 1);
4940            marker.setAttribute("aria-setsize", this.slides.length);
4941            marker.setAttribute("tabindex", "-1");
4942            if (!marker.hasAttribute("aria-label")) {
4943                marker.setAttribute("aria-label", `Slide ${index + 1}`);
4944            }
4945        }
4946        setupObservers() {
4947            if (this.inViewObserver) {
4948                this.inViewObserver.disconnect();
4949            }
4950            this.inViewObserver = new IntersectionObserver(
4951                this.handleInView.bind(this), {
4952                    root: this.track,
4953                    threshold: 0.8
4954                }
4955            );
4956            this.slides.forEach((slide) => this.inViewObserver.observe(slide));
4957        }
4958        setupMutationObserver() {
4959            this.mutationObserver = new MutationObserver(
4960                this.refreshSlides.bind(this)
4961            );
4962            this.mutationObserver.observe(this.track, {
4963                childList: true,
4964                subtree: false
4965            });
4966        }
4967        setupResizeObserver() {
4968            this.resizeObserver = new ResizeObserver(
4969                this.groupPagerMarkers.bind(this)
4970            );
4971            this.resizeObserver.observe(this.el);
4972        }
4973        goToSlideDir(dir = "next") {
4974            const {
4975                firstInViewSlide,
4976                lastInViewSlide
4977            } = this.getInViewItems();
4978            const isPrev = dir === "prev";
4979            let targetSlide = isPrev ? firstInViewSlide?.previousElementSibling : lastInViewSlide?.nextElementSibling;
4980            if (!targetSlide) return;
4981            if (targetSlide.tagName.toLowerCase() === "template") {
4982                targetSlide = isPrev ? targetSlide?.previousElementSibling : targetSlide?.nextElementSibling;
4983            }
4984            targetSlide.scrollIntoView({ block: "nearest", inline: isPrev ? "end" : "start" });
4985        }
4986        pagerToSlide(event) {
4987            if (!event.target.closest("[data-pager]")) return;
4988            const marker = event.target.closest("a, button");
4989            if (!marker) return;
4990            event.preventDefault();
4991            const slideId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
4992            const targetSlide = this.track.querySelector(`#${slideId}`);
4993            targetSlide?.scrollIntoView({ block: "nearest", inline: "start" });
4994        }
4995        eventHandler(event) {
4996            const target = event.target.closest(
4997                "[data-next], [data-prev], [data-pager]"
4998            );
4999            if (!target) return;
5000            if (event.type === "click") {
5001                if (target.hasAttribute("data-next")) {
5002                    this.goToSlideDir("next");
5003                } else if (target.hasAttribute("data-prev")) {
5004                    this.goToSlideDir("prev");
5005                } else if (target.closest("[data-pager]")) {
5006                    this.pagerToSlide(event);
5007                }
5008            }
5009            if (event.type === "keydown" && target.closest("[data-pager]")) {
5010                if (event.key === "ArrowRight") {
5011                    this.goToSlideDir("next");
5012                } else if (event.key === "ArrowLeft") {
5013                    this.goToSlideDir("prev");
5014                }
5015            }
5016        }
5017    };
5018
5019    (() => {
5020        function alpineSnapSlider(Alpine) {
5021            Alpine.directive("snap-slider", (el, {
5022                modifiers
5023            }, {
5024                cleanup
5025            }) => {
5026                const autoPager = modifiers.includes("auto-pager");
5027                const groupPager = modifiers.includes("group-pager");
5028                const slider = new SnapSlider(el, {
5029                    autoPager,
5030                    groupPager
5031                });
5032                cleanup(() => {
5033                    slider.destroy();
5034                });
5035            });
5036        }
5037
5038        document.addEventListener("alpine:init", () => {
5039            window.Alpine.plugin(alpineSnapSlider);
5040        });
5041    })();
5042    //# sourceURL=alpine-snap-slider.js
5043</script>
vendor: 1 bytes, line 5043
5043
5044<script>
5045    (() => {
5046        // src/dialog.js
5047        function dialog_default(Alpine) {
5048            Alpine.directive("htmldialog", fylgjaAlpineDialog);
5049            function fylgjaAlpineDialog(el, { expression, modifiers }, { evaluateLater, cleanup }) {
5050            const evaluate = expression.length ? evaluateLater(expression) : () => {};
5051            const canEvaluate = expression.length > 0;
5052            const lockPageScroll = modifiers.includes("noscroll");
5053            const closeBy = el.getAttribute("closeby") || modifierValue(modifiers, "closeby", "closerequest");
5054            el.style.display = null;
5055            el.style.length === 0 && el.removeAttribute("style");
5056            if (el._x_isShown) {
5057                open();
5058            }
5059            const closeBySupported = (() => {
5060                return "closedBy" in HTMLDialogElement.prototype;
5061            })();
5062            function scrollLock(use = true) {
5063                document.body.style.overflow = use ? "hidden" : "";
5064            }
5065            function dialogSubmit(event) {
5066                if (event.target.getAttribute("method") === "dialog" || event.submitter?.getAttribute("formmethod") === "dialog") {
5067                event.preventDefault();
5068                evaluate();
5069                }
5070            }
5071            function escapeDialog(event) {
5072                if (event.key !== "Escape") return;
5073                event.preventDefault();
5074                if (closeBy === "none") return;
5075                evaluate();
5076            }
5077            function handleCloseByEvent(event) {
5078                if (event.target !== el) return;
5079                const rect = el.getBoundingClientRect();
5080                const isInDialog = rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width;
5081                if (!isInDialog) {
5082                if (closeBy === "any") {
5083                    if (closeBySupported) {
5084                    event.preventDefault();
5085                    }
5086                    evaluate();
5087                }
5088                }
5089            }
5090            function handleCloseEvent() {
5091                evaluate();
5092            }
5093            function open() {
5094                if (el.hasAttribute("open")) return;
5095                el.showModal();
5096                scrollLock(lockPageScroll);
5097            }
5098            function close() {
5099                if (!el.hasAttribute("open")) return;
5100                el.close();
5101                scrollLock(false);
5102            }
5103            el._x_doShow = () => open();
5104            el._x_doHide = () => close();
5105            el.addEventListener("keydown", escapeDialog);
5106            el.addEventListener("submit", dialogSubmit);
5107            el.addEventListener("click", handleCloseByEvent);
5108            el.addEventListener("cancel", handleCloseEvent);
5109            cleanup(() => {
5110                el.removeEventListener("keydown", escapeDialog);
5111                el.removeEventListener("submit", dialogSubmit);
5112                el.removeEventListener("click", handleCloseByEvent);
5113                el.removeEventListener("cancel", handleCloseEvent);
5114                scrollLock(false);
5115            });
5116            }
5117        }
5118        function modifierValue(modifiers, key, fallback) {
5119            if (modifiers.indexOf(key) === -1) return fallback;
5120            const rawValue = modifiers[modifiers.indexOf(key) + 1];
5121            if (!rawValue) return fallback;
5122            if (key === "closeby") {
5123            const allowedValues = ["auto", "none", "closerequest", "any"];
5124            const options = allowedValues.join(", ");
5125            if (!allowedValues.includes(rawValue)) {
5126                console.warn(
5127                `"${rawValue}" is not one of the allowed values for closeby: ${options}`
5128                );
5129                return fallback;
5130            }
5131            }
5132            return rawValue;
5133        }
5134
5135        // src/cdn.js
5136        document.addEventListener("alpine:init", () => {
5137            window.Alpine.plugin(dialog_default);
5138        });
5139    })();
5140    //# sourceURL=alpine-htmldialog.js
5141</script>
vendor: 1 bytes, line 5141
5141
5142<script>
5143    (() => {
5144        function src_default(Alpine) {
5145            Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
5146                let evaluate = evaluateLater(expression);
5147                let options = {
5148                    rootMargin: getRootMargin(modifiers),
5149                    threshold: getThreshold(modifiers)
5150                };
5151                let observer = new IntersectionObserver((entries) => {
5152                    entries.forEach((entry) => {
5153                        if (entry.isIntersecting === (value === "leave"))
5154                            return;
5155                        evaluate();
5156                        modifiers.includes("once") && observer.disconnect();
5157                    });
5158                }, options);
5159                observer.observe(el);
5160                cleanup(() => {
5161                    observer.disconnect();
5162                });
5163            }));
5164        }
5165        function getThreshold(modifiers) {
5166            if (modifiers.includes("full"))
5167                return 0.99;
5168            if (modifiers.includes("half"))
5169                return 0.5;
5170            if (!modifiers.includes("threshold"))
5171                return 0;
5172            let threshold = modifiers[modifiers.indexOf("threshold") + 1];
5173            if (threshold === "100")
5174                return 1;
5175            if (threshold === "0")
5176                return 0;
5177            return Number(`.${threshold}`);
5178        }
5179        function getLengthValue(rawValue) {
5180            let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/);
5181            return match ? match[1] + (match[2] || "px") : void 0;
5182        }
5183        function getRootMargin(modifiers) {
5184            const key = "margin";
5185            const fallback = "0px 0px 0px 0px";
5186            const index = modifiers.indexOf(key);
5187            if (index === -1)
5188                return fallback;
5189            let values = [];
5190            for (let i = 1; i < 5; i++) {
5191                values.push(getLengthValue(modifiers[index + i] || ""));
5192            }
5193            values = values.filter((v) => v !== void 0);
5194            return values.length ? values.join(" ").trim() : fallback;
5195        }
5196
5197        document.addEventListener("alpine:init", () => {
5198            window.Alpine.plugin(src_default);
5199        });
5200    })();
5201    //# sourceURL=alpine-intersect.js
5202</script>
vendor: 1 bytes, line 5202
5202
5203<script>
5204    for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]:not([x-data] [x-data])":"intersect",".product-info [x-data]:not([x-data] [x-data])":"intersect","#filters-content [x-data]:not([x-data] [x-data])":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]:not([x-data] [x-data])":"intersect","#notice-cookie-block":"idle"})) {
5205        document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`));
5206    }
5207    //# sourceURL=alpine-defer-rules.js
5208</script>
vendor: 1 bytes, line 5208
5208
5209<script>
5210    (() => {
5211        const hasAlpine = new Promise(resolve => {
5212            window.addEventListener('alpine:initialized', resolve, {once: true, passive: true});
5213        });
5214
5215        const hasInteract = new Promise(resolve => {
5216            (events => {
5217                const onInteract = () => {
5218                    resolve();
5219                    events.forEach(type => window.removeEventListener(type, onInteract));
5220                }
5221                events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true}))
5222            })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])
5223        });
5224
5225        const onIntersect = (el) => {
5226            return new Promise(resolve => {
5227                const observer = new IntersectionObserver(entries => {
5228                    for (const entry of entries) {
5229                        if (entry.isIntersecting) {
5230                            observer.disconnect()
5231                            resolve();
5232                        }
5233                    }
5234                }, {});
5235                observer.observe(el);
5236            });
5237        }
5238
5239        function runComponent(el) {
5240            hasAlpine.then(() => {
5241                el.removeAttribute('x-ignore');
5242                queueMicrotask(() => Alpine.initTree(el));
5243            });
5244        }
5245
5246        function initDeferredComponents() {
5247            document.querySelectorAll('[x-data][x-defer]').forEach(el => {
5248                el.setAttribute('x-ignore', '');
5249                const deferUntil = (el.getAttribute('x-defer') || '').trim();
5250                switch (deferUntil) {
5251                    case 'interact':
5252                        hasInteract.then(() => runComponent(el));
5253                        break;
5254                    case 'intersect':
5255                        onIntersect(el).then(() => runComponent(el))
5256                        break;
5257                    case 'idle':
5258                        window.requestIdleCallback
5259                            ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000})
5260                            : setTimeout(() => runComponent(el), 4000);
5261                        break;
5262                    case 'eager':
5263                        runComponent(el);
5264                        break;
5265                    default:
5266                        if (deferUntil.startsWith('event:') && deferUntil.length > 6) {
5267                            window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true});
5268                        }
5269                }
5270            });
5271        }
5272
5273        window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true});
5274    })();
5275    //# sourceURL=alpine-defer.js
5276</script>
5276
5277
5278<script type="module"
5279        src="https://www.laufshirt-bedrucken.de/static/version1789730667/frontend/Hyva/custom/de_DE/Hyva_Theme/js/alpine3.min.js"
5280        defer
5281        crossorigin
5282></script>
vendor: 1 bytes, line 5282
5282
5283<script>
5284    function dispatchMessages(messages, hideAfter) {
5285        const messagesEvent = new CustomEvent("messages-loaded", {
5286            detail: {
5287                messages: messages,
5288                hideAfter: hideAfter
5289            }
5290        });
5291        window.dispatchEvent(messagesEvent);
5292    }
5293
5294    if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
5295        console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
5296    }
5297
5298    (function( hyva, undefined ) {
5299
5300        hyva.initFormKey = () => {
5301            const inputSelector = 'input[name="form_key"]',
5302                formKey = hyva.getFormKey();
5303
5304            Array.from(document.querySelectorAll(inputSelector)).map(function (input) {
5305                input.value = formKey
5306            });
5307        }
5308
5309        hyva.initMessages = () => {
5310            try {
5311                const messages = hyva.getCookie('mage-messages');
5312                window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
5313
5314                dispatchMessages(window.mageMessages);
5315
5316                                // empty `mage-messages` cookie
5317                const skipSetDomain = true;
5318                hyva.setCookie('mage-messages','', -1, skipSetDomain);
5319
5320            } catch (error) {
5321                console.warn('Error parsing Cookie Messages:', error);
5322            }
5323        }
5324
5325        window.addEventListener('DOMContentLoaded', hyva.initFormKey);
5326        hyva.alpineInitialized(hyva.initMessages)
5327
5328    }( window.hyva = window.hyva || {} ));
5329    //# sourceURL=hyva-cookies.js
5330</script>
vendor: 1 bytes, line 5330
5330
5331<script>
5332    {
5333        const private_content_key = 'mage-cache-storage';
5334        const private_content_expire_key = 'mage-cache-timeout';
5335        const private_content_version_key = 'private_content_version';
5336        const section_data_ids_key = 'section_data_ids';
5337        const mage_cache_session_id_key = 'mage-cache-sessid';
5338        const last_visited_store_key = 'last_visited_store';
5339
5340        const ttl = 86400;
5341
5342        if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
5343            console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
5344        }
5345
5346        function loadSectionData () {
5347            const browserStorage = hyva.getBrowserStorage();
5348            if (!browserStorage) {
5349                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
5350                    [{
5351                        type: "warning",
5352                        text: "Please enable LocalStorage in your browser."
5353                    }]
5354                );
5355                return;
5356            }
5357            try {
5358                let isInvalid = false;
5359
5360                if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) {
5361                    isInvalid = true;
5362                }
5363                hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false);
5364
5365                if (!hyva.getCookie(mage_cache_session_id_key)) {
5366                    isInvalid = true;
5367                    browserStorage.removeItem(private_content_key);
5368                    const skipSetDomain = true;
5369                    const days = false;
5370                    hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain)
5371                }
5372
5373                const cookieVersion = hyva.getCookie(private_content_version_key);
5374                const storageVersion = browserStorage.getItem(private_content_version_key);
5375
5376                if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) {
5377                    isInvalid = true;
5378                }
5379
5380                const privateContentExpires = browserStorage.getItem(private_content_expire_key);
5381                if (privateContentExpires && new Date(privateContentExpires) < new Date()) {
5382                    browserStorage.removeItem(private_content_key);
5383                }
5384
5385                if (isInvalid && cookieVersion) {
5386                    fetchPrivateContent([]);
5387                } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) {
5388                    const privateContent = JSON.parse(browserStorage.getItem(private_content_key));
5389                    if (
5390                        privateContent &&
5391                        privateContentExpires &&
5392                        privateContent.cart &&
5393                        privateContent.customer
5394                    ) {
5395                        dispatchPrivateContent(privateContent);
5396                    } else {
5397                        fetchPrivateContent([]);
5398                    }
5399                } else {
5400                    if (document.getElementById('default-section-data')) {
5401                        const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim());
5402                        dispatchPrivateContent(privateContent);
5403                    } else {
5404                        dispatchPrivateContent({});
5405                    }
5406                }
5407
5408            } catch (error) {
5409                console.warn('Error retrieving Private Content:', error);
5410            }
5411        }
5412
5413        hyva.alpineInitialized(loadSectionData)
5414        window.addEventListener('reload-customer-section-data', loadSectionData);
5415
5416        window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data);
5417
5418        function dispatchPrivateContent(data) {
5419
5420            const privateContentEvent = new CustomEvent("private-content-loaded", {
5421                detail: {
5422                    data: window.processSectionDataBeforeDispatch(data)
5423                }
5424            });
5425            window.dispatchEvent(privateContentEvent);
5426        }
5427
5428        function fetchPrivateContent(sections) {
5429            fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, {
5430                method: 'GET',
5431                headers: {
5432                    'Content-Type': 'application/json',
5433                    'X-Requested-With': 'XMLHttpRequest'
5434                }
5435            })
5436                .then(response => response.ok && response.json())
5437                .then(
5438                    data => {
5439                        if (data) {
5440                            try {
5441                                const browserStorage = hyva.getBrowserStorage();
5442
5443                                // merge new data preserving non-invalidated sections
5444                                const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {};
5445
5446                                if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) {
5447                                    delete oldSectionData['checkout-data'];
5448                                }
5449                                const newSectionData = Object.assign(oldSectionData, data);
5450
5451                                dispatchPrivateContent(newSectionData);
5452
5453                                // don't persist messages, they've been dispatched already
5454                                if (newSectionData.messages && newSectionData.messages.messages ) {
5455                                    newSectionData.messages.messages = [];
5456                                }
5457
5458                                browserStorage.setItem(private_content_key, JSON.stringify(newSectionData));
5459
5460                                const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString();
5461                                browserStorage.setItem(private_content_expire_key, expiresAt);
5462
5463                                const newCookieVersion = hyva.getCookie(private_content_version_key);
5464                                browserStorage.setItem(private_content_version_key, newCookieVersion);
5465
5466                                // We don't need the section_data_ids in Hyvä, but we store them for compatibility
5467                                // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout
5468                                hyva.setCookie(
5469                                    section_data_ids_key,
5470                                    JSON.stringify(
5471                                        Object.keys(data).reduce((sectionDataIds, sectionKey) => {
5472                                            sectionDataIds[sectionKey] = data[sectionKey]['data_id'];
5473                                            return sectionDataIds;
5474                                        }, {})
5475                                    ),
5476                                    false,
5477                                    true
5478                                );
5479                            } catch (error) {
5480                                console.warn("Couldn't store privateContent", error);
5481                            }
5482                        }
5483                    }
5484                );
5485        }
5486    }
5487    //# sourceURL=hyva-private-content.js
5488</script>
vendor: 1 bytes, line 5488
5488
5489<script>
5490    (() => {
5491        document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc()));
5492    })()
5493</script>
vendor: 1 bytes, line 5493
5493
5494<script>
5495    (events => {
5496        const dispatchUserInteractionEvent = () => {
5497            events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent))
5498            window.dispatchEvent(new Event('init-external-scripts'))
5499        };
5500        events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true}))
5501    })(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown']);
5502    //# sourceURL=hyva-init-external-scripts.js
5503</script>
5503
5504<div id=wa-button></div>
5505<script>
5506    (function () {
5507        const modals = [];
5508        const excludedFromFocusTrapping = new Set();
5509
5510        function trapFocusInNextModalWithOverlay() {
5511            for (let idx = modals.length -1; idx >= 0; idx--) {
5512                const nextOnStack = modals[idx];
5513                const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name];
5514                if (! isOverlayDisabled(nextDialogElement)) {
5515                    hyva.trapFocus(nextDialogElement);
5516                    break;
5517                }
5518            }
5519        }
5520
5521        function focusables(dialogElement) {
5522            const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
5523            return Array.from(dialogElement.querySelectorAll(selector))
5524                .filter(el => !el.hasAttribute('disabled'));
5525        }
5526
5527        function firstVisible(elements) {
5528            const a = Array.from(elements);
5529            for (let i = 0; i < a.length; i++) {
5530                if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i];
5531            }
5532            return null;
5533        }
5534
5535        function isInViewport(element) {
5536            const rect = element && element.getBoundingClientRect();
5537            return rect &&
5538                rect.top >= 0 &&
5539                rect.left >= 0 &&
5540                rect.right <= window.innerWidth &&
5541                rect.bottom <= window.innerHeight;
5542        }
5543
5544        function setFocusAfterTransition(dialogElement, duration) {
5545                        const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]'));
5546            const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]'));
5547            next: for (let candidate of candidates) {
5548                for (let child of nested) {
5549                    if (child.contains(candidate)) continue next;
5550                }
5551                setTimeout(() => candidate.focus(), 50);
5552                break;
5553            }
5554            window.setTimeout(() => {
5555                const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) ||
5556                    focusables(dialogElement)[0] ||
5557                    null;
5558                focusElement && isInViewport(focusElement) && focusElement.focus();
5559            }, Math.max(1, duration));
5560        }
5561
5562        function determineTrigger($refs, dialog, trigger) {
5563                        if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) {
5564                return dialog.target;
5565            }
5566                        if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) {
5567                return trigger.target;
5568            }
5569                        if (typeof trigger === 'string') {
5570                try {
5571                    return $refs[trigger] || document.querySelector(trigger)
5572                } catch (e) {}
5573            }
5574                        if (trigger instanceof Element) {
5575                return trigger;
5576            }
5577
5578                        return null;
5579        }
5580
5581        function isOverlayDisabled(dialog) {
5582            return dialog && dialog.hasAttribute('x-no-overlay')
5583        }
5584
5585        function areRemainingModalsWithoutOverlay(modals)
5586        {
5587            const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled);
5588
5589            return overflowDisabled.length === modals.length;
5590        }
5591
5592        window.hyva.modal = function(options = {}) {
5593                        if (this.$el && this.$el.dataset && this.$el.dataset.options) {
5594                try {
5595                    options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}'));
5596                } catch (e) {
5597                    throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON');
5598                }
5599            }
5600
5601            const config = Object.assign({
5602                dialog: 'dialog',                 duration: 300,                 transitionEnter: 'transition ease-out duration-300',
5603                transitionEnterStart: 'opacity-0',
5604                transitionEnterEnd: 'opacity-100',
5605                transitionLeave: 'transition ease-in duration-300',
5606                transitionLeaveStart: 'opacity-100',
5607                transitionLeaveEnd: 'opacity-0',
5608            }, options);
5609            let lastHide = 0;
5610
5611            return {
5612                opened: {},
5613                show(dialog, trigger) {
5614                    const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger);
5615                    const name = typeof dialog === 'string' ? dialog : config.dialog;
5616                    const dialogElement = this.$refs[name];
5617                    if (! dialogElement) {
5618                                                return;
5619                    }
5620                    const useOverlay = ! dialogElement.hasAttribute('x-no-overlay');
5621
5622                    dialogElement.scrollTop = 0;
5623
5624                                        if (this.opened[name]) {
5625                        return;
5626                    }
5627
5628                    if (focusTargetAfterHide) {
5629                        focusTargetAfterHide.setAttribute('aria-expanded', 'true');
5630                    }
5631
5632                    this.opened[name] = true;
5633                    useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement));
5634                    setFocusAfterTransition(dialogElement, config.duration);
5635
5636                    const frame = {name, instance: this, focusTarget: focu
5636sTargetAfterHide, time: Date.now()};
5637
5638                    modals.push(frame);
5639                    if (useOverlay) {
5640                        document.body.classList.add('overflow-hidden');
5641                    }
5642                    return new Promise(resolve => frame.resolve = resolve);
5643                },
5644                cancel() {
5645                    this.hide(false);
5646                },
5647                ok() {
5648                    this.hide(true);
5649                },
5650                hide(value) {
5651                                        if (Date.now() - lastHide < config.duration) {
5652                        return;
5653                    }
5654                    lastHide = Date.now();
5655
5656                    const modal = modals.pop() || {};
5657                    if (! modal.instance) {
5658                        return;
5659                    }
5660
5661                    const name = modal.name;
5662                    this.opened[name] = false;
5663                    hyva.releaseFocus(modal.instance.$refs[modal.name])
5664                    trapFocusInNextModalWithOverlay();
5665
5666                    const nextFocusAfterHide = modal.focusTarget;
5667                    nextFocusAfterHide && setTimeout(() => {
5668                        nextFocusAfterHide.setAttribute('aria-expanded', 'false');
5669                        nextFocusAfterHide.focus()
5670                    }, config.duration);
5671
5672                    if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) {
5673                        document.body.classList.remove('overflow-hidden');
5674                    }
5675
5676                    modal.resolve(value);
5677                },
5678                overlay(dialog) {
5679                    dialog = this.$el.dataset.dialogRefName || dialog;
5680                    const name = typeof dialog === 'string' ? dialog : config.dialog;
5681                    return {
5682                        ['x-show']() {
5683                            return this.opened[name]
5684                        },
5685                        ['x-transition:enter']: config.transitionEnter,
5686                        ['x-transition:enter-start']: config.transitionEnterStart,
5687                        ['x-transition:enter-end']: config.transitionEnterEnd,
5688                        ['x-transition:leave']: config.transitionLeave,
5689                        ['x-transition:leave-start']: config.transitionLeaveStart,
5690                        ['x-transition:leave-end']: config.transitionLeaveEnd,
5691                        ['@hyva-modal-show.window'](event) {
5692                            event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
5693                        }
5694                    };
5695                },
5696                showDialogOnInit() {
5697                    const parent = this.$el.closest('[data-dialog-ref-name]');
5698                    if (parent && parent.dataset.dialogRefName) {
5699                        this.$dispatch('hyva-modal-show', {dialog: parent.dataset.dialogRefName})
5700                    }
5701                }
5702            };
5703        }
5704
5705        window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1]
5706
5707        window.hyva.modal.pop = function () {
5708            if (modals.length > 0) {
5709                const modal = modals[modals.length -1];
5710                modal.instance.hide();
5711            }
5712        }
5713
5714        window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) {
5715            typeof selectors === 'string' || selectors instanceof String
5716                ? excludedFromFocusTrapping.add(selectors)
5717                : selectors.map(selector => excludedFromFocusTrapping.add(selector));
5718        }
5719
5720        window.hyva.modal.eventListeners = {
5721            keydown: event => {
5722                if (event.key === 'Escape') {
5723                    window.hyva.modal.pop();
5724                }
5725            },
5726                        click: event => {
5727                if (modals.length > 0) {
5728                    const modal = modals[modals.length -1];
5729                    const dialog = modal.instance.$refs[modal.name];
5730                    if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago
5731                        ! isOverlayDisabled(dialog) && // if dialog has overlay
5732                        ! dialog.contains(event.target)) { // if click is outside of dialog
5733                        modal.instance.hide();
5734                    }
5735                }
5736            }
5737        };
5738
5739        document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown);
5740
5741        document.addEventListener('click', window.hyva.modal.eventListeners.click);
5742    })();
5743    window.addEventListener('alpine:init', () => {
5744        Alpine.data('hyvaModal', window.hyva.modal);
5745    }, {once: true});
5746</script>
vendor: 1 bytes, line 5746
5746
5747<script>
5748    function initConfigurableOptions(productId, optionConfig) {
5749
5750        function findPathParam(key) {
5751                        const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL;
5752            const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/');
5753            const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3);
5754            for (let i = 0; i < pathParts.length; i += 2) {
5755                if (pathParts[i] === key && pathParts.length > i) {
5756                    return pathParts[i + 1];
5757                }
5758            }
5759        }
5760
5761        return {
5762            optionConfig,
5763            productId,
5764            itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'),
5765            allowedAttributeOptions: [],
5766            selectedValues: [],
5767            init() {
5768                this.findAllowedAttributeOptions();
5769                this.$nextTick(() => {
5770                    if (typeof this.optionConfig.defaultValues === 'object') {
5771                        for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) {
5772                            this.changeOption(attributeId, value + '');
5773                        }
5774                    }
5775                    this.preselectQuerystringItems();
5776                    this.preselectLocationHashItems();
5777                });
5778            },
5779            productIndex: 0,
5780            productIndexForPrice: 0,
5781            optionIsActive(attributeId, optionId) {
5782                                return !!this.getAllowedAttributeOptions(attributeId).find(
5783                    option => option.id === optionId
5784                )
5785            },
5786            optionIsEnabled(attributeId, optionId) {
5787                                for (const productId in this.optionConfig.index) {
5788                    if (this.optionConfig.index[productId][attributeId] === optionId) {
5789                        return true;
5790                    }
5791                }
5792                return false;
5793            },
5794            findSimpleIndex() {
5795                                this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues);
5796                this.productIndexForPrice = this.findCheapestProductForPartialSelection(this.selectedValues);
5797            },
5798            calculateSimpleIndexForPartialSelection(selectedValues) {
5799                if (selectedValues.length === 0) return 0;
5800                return this.findProductIdsForPartialSelection(selectedValues)[0];
5801            },
5802            calculateSimpleIndexForFullSelection(selectedValues) {
5803                if (! this.isFullSelection(selectedValues)) return false;
5804
5805                const productIndexes = this.optionConfig.index;
5806                return Object.keys(productIndexes).find(productIndex => {
5807                    const productCandidateOptions = productIndexes[productIndex];
5808
5809                    for (const productOption in productCandidateOptions) {
5810                        if (
5811                            !selectedValues[productOption] ||
5812                            selectedValues[productOption] !== productCandidateOptions[productOption]
5813                        ) {
5814                            return false;
5815                        }
5816                    }
5817                    return productIndex;
5818                });
5819            },
5820            findAllowedAttributeOptions() {
5821                                this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues);
5822            },
5823            calculateAllowedAttributeOptions(selectedValues) {
5824                const allAttributes = this.optionConfig.attributes;
5825                const allAttributesSorted = Object.values(allAttributes).sort((a,b) => {
5826                    return a.position - b.position
5827                });
5828
5829                const newAllowedAttributeOptions = [];
5830
5831                allAttributesSorted.forEach(attribute => {
5832                    const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id));
5833                    const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr);
5834                    newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => {
5835                        return !!option.products.find(product => {
5836                            return availableIndexes.includes(product);
5837                        })
5838                    });
5839                });
5840                return newAllowedAttributeOptions;
5841            },
5842            calculateAvailableProductIndexes(selectedOptions) {
5843                if (Object.keys(selectedOptions).length === 0) {
5844                                        if (Object.values(this.optionConfig.salable || {}).length) {
5845                                                return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i)
5846                    }
5847                                        return Object.keys(this.optionConfig.index);
5848                }
5849
5850                                const selectedIds = Object.keys(selectedOptions);
5851                if (Object.values(this.optionConfig.salable || {}).length) {
5852                                        const selectedOptionIndexes = selectedIds.map(attrId => {
5853                        const optionValue = selectedOptions[attrId];
5854                        return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || []
5855                    })
5856                                        return selectedOptionIndexes.reduce((acc, optionIndexes) => {
5857                        return acc.filter(index => optionIndexes.includes(index));
5858                    });
5859                } else {
5860                                        const productIndexes = this.optionConfig.index;
5861                    return Object.keys(productIndexes).filter(index => {
5862                                                for (const attrId of selectedIds) {
5863                            if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false
5864                        }
5865                        return true
5866                    });
5867                }
5868            },
5869            findAttributeByOptionId(optionId) {
5870                for (const attributeId in this.optionConfig.attributes) {
5871                    const attributeOptions = this.optionConfig.attributes[attributeId].options || [];
5872                    if (attributeOptions.find(option => option.id === optionId)) {
5873                        return attributeId;
5874                    }
5875                }
5876            },
5877            getAllowedAttributeOptions(attributeId) {
5878                return this.allowedAttributeOptions[attributeId] || []
5879            },
5880            getAllAttributeOptions(attributeId) {
5881                return (
5882                    this.optionConfig.attributes[attributeId] &&
5883                    this.optionConfig.attributes[attributeId].options
5884                ) || []
5885            },
5886            getProductIdsForOption(option) {
5887                const attributeId = this.findAttributeByOptionId(option.id);
5888                const allOptions = this.optionConfig.attributes[attributeId];
5889                const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id);
5890                return opt && opt.products
5891                    ? opt.products
5892                    : [];
5893            },
5894            findProductIdsForPartialSelection(optionSelection) {
5895                const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => {
5896                    const newCandidates = this.getProductIdsForOption({id: optionId});
5897                    return candidates === null
5898                        ? newCandidates
5899                        : candidates.filter(productId => newCandidates.includes(productId));
5900                }, null);
5901                return candidateProducts || [];
5902            },
5903            findCheapestProductForPartialSelection(optionSelection) {
5904                const candidateProducts = this.findProductIdsForPartialSelection(optionSelection);
5905                return candidateProducts.reduce((cheapest, simpleIdx) => {
5906                    // in the first iteration we start with simpleIdx as the currently cheapest product
5907                    if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx;
5908                    const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount;
5909                    return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount
5910                        ? simpleIdx
5911                        : cheapest;
5912                }, 0)
5913            },
5914            findProductIdToUseForOptionPrice(option) {
5915                // try to find a product for a complete selection
5916                const attributeId = this.findAttributeByOptionId(option.id);
5917                const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id});
5918                const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection);
5919                // if there is no complete selection, use the cheapest product for the option
5920                return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection);
5921            },
5922            getAttributeOptionLabel(option) {
5923                const optionProduct = this.findProductIdToUseForOptionPrice(option);
5924
5925                if ((! optionProduct) || (optionProduct === this.productIndexForPrice)) {
5926                    return option.label;
5927                }
5928
5929                const currentPrice = this.getOptionPriceAdjustmentBasePrice();
5930
5931                if (this.optionConfig.optionPrices[optionProduct]) {
5932                    const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount;
5933                    if (optionPrice !== currentPrice){
5934                        return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true);
5935                    }
5936                }
5937                return option.label;
5938            },
5939            getOptionPriceAdjustmentBasePrice() {
5940                if (this.optionConfig.optionPrices[this.productIndexForPrice]) {
5941                    return this.optionConfig.optionPrices[this.productIndexForPrice].finalPrice.amount
5942                }
5943                return this.optionConfig.prices.finalPrice.amount; // default price if no option selection
5944            },
5945            clearOptionIfActive(optionId, value) {
5946                if (this.selectedValues[optionId] === value) {
5947                    this.blurLabel()
5948                    this.changeOption(optionId, '')
5949                }
5950            },
5951            removeAttrFromSelection(selectedValues, attributeId) {
5952                                attributeId = parseInt(attributeId);
5953                return selectedValues.reduce((newSelection, val, attr) => {
5954                    if (attr !== attributeId) {
5955                        newSelection[attr] = val;
5956                    }
5957                    return newSelection;
5958                }, []);
5959            },
5960            changeOption(attributeId, value) {
5961                if (value === '') {
5962                    this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId)
5963                } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) {
5964                                        this.selectedValues[attributeId] = value;
5965                }
5966                this.findSimpleIndex();
5967                this.findAllowedAttributeOptions();
5968                this.updatePrices();
5969                this.updateGallery();
5970
5971                const candidates = this.findProductIdsForPartialSelection(this.selectedValues);
5972
5973                                window.dispatchEvent(
5974                    new CustomEvent(
5975                        'configurable-selection-changed',
5976                        {
5977                            detail: {
5978                                productId: this.productId,
5979                                optionId: attributeId,
5980                                value: value,
5981                                productIndex: this.productIndex,
5982                                selectedValues: this.selectedValues,
5983                                candidates: candidates,
5984                                skuCandidates: Object.values(candidates).map(id =>
5984 this.optionConfig.sku?.[id] ?? null).filter(Boolean),
5985                            }
5986                        }
5987                    )
5988                );
5989            },
5990            calculateIsMinimalPrice() {
5991                return ! this.isFullSelection(this.selectedValues);
5992            },
5993            isFullSelection(selectedValues) {
5994                return Object.values(selectedValues).length === Object.keys(this.optionConfig.attributes).length;
5995            },
5996            updatePrices() {
5997                const value = this.optionConfig.optionPrices[this.productIndexForPrice] || this.optionConfig.prices;
5998                window.dispatchEvent(
5999                    new CustomEvent(
6000                        "update-prices-" + this.productId,
6001                        {
6002                            detail: Object.assign(
6003                                value,
6004                                { isMinimalPrice: this.calculateIsMinimalPrice() }
6005                            )
6006                        }
6007                    )
6008                );
6009            },
6010            updateGallery () {
6011                if (this.productIndex) {
6012                    const images = this.optionConfig.images[this.productIndex];
6013                    images && window.dispatchEvent(new CustomEvent(
6014                        "update-gallery",
6015                        { detail: this.sortImagesByPosition(images) }
6016                    ));
6017                } else {
6018                    window.dispatchEvent(new Event("reset-gallery"));
6019                }
6020            },
6021            sortImagesByPosition(images) {
6022                return images.sort((x, y) => {
6023                    return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1)
6024                });
6025            },
6026            onGetCartData(data) {
6027                            },
6028            preselectCartItems(data) {
6029                // pre-select options based on cart data for current (quote) itemId
6030                const cart = data && data.cart;
6031                if (cart && cart.items) {
6032                    const cartItem = cart.items.find((item) => {
6033                        return (
6034                            item.item_id === this.itemId
6035                            && item.product_id === this.productId
6036                        )
6037                    });
6038                    if (cartItem && cartItem.options && cartItem.options.length) {
6039                        cartItem.options.map(option => {
6040                            this.changeOption(option.option_id, option.option_value);
6041                        })
6042                    }
6043                }
6044            },
6045            preselectQuerystringItems() {
6046                // pre-select option like ?size=167
6047                const urlQueryParams = new URLSearchParams(window.location.search.replace('?',''));
6048                this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code));
6049            },
6050            preselectLocationHashItems() {
6051                // pre-select option like #144=167
6052                const urlHashParams = new URLSearchParams(window.location.hash.replace('#',''));
6053                this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id));
6054            },
6055            preselectItemsBasedOnLocation(getLocationValue) {
6056                Object.values(this.optionConfig.attributes).map(attribute => {
6057                    const v = getLocationValue(attribute);
6058                    v && this.changeOption(attribute.id, v)
6059                });
6060            }
6061        }
6062    }
6063</script>
vendor: 1 bytes, line 6063
6063
6064<script>
6065    function initSwatchOptions(swatchConfig) {
6066        return {
6067            swatchConfig,
6068            getAttributeSwatchData(attributeId) {
6069                const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]);
6070                swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']);
6071
6072                return swatchConfig;
6073            },
6074            mapSwatchTypeNumberToTypeCode(typeNumber) {
6075                switch ("" + typeNumber) {
6076                    case "1":
6077                        return "color"
6078                    case "2":
6079                        return "image"
6080                    case "3":
6081                        return "empty"
6082                    case "0":
6083                    default:
6084                        return "text"
6085                }
6086            },
6087            getTypeOfFirstOption(attributeId) {
6088                for (const optionId in this.swatchConfig[attributeId]) {
6089                    const option = this.swatchConfig[attributeId][optionId];
6090                    if (typeof option.type !== 'undefined') {
6091                        return this.mapSwatchTypeNumberToTypeCode(option.type);
6092                    }
6093                }
6094            },
6095            getVisualSwatchType(attributeId, targetOptionId) {
6096                // If a type configuration is present for the given option id, use it
6097                const config = this.swatchConfig[attributeId];
6098                if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') {
6099                    return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type);
6100                }
6101
6102                // Otherwise - if no config is present for the target option - use the type of the first option
6103                // with a type property from the attribute, thus assuming its the same type as the target option.
6104                // (This edge case condition can occur on single swatch products if some options are not salable)
6105                return this.getTypeOfFirstOption(attributeId);
6106            },
6107            getSwatchType(attributeId, optionId) {
6108                // Deserialize the attribute details the first time they are used
6109                if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) {
6110                    this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId);
6111                }
6112                const type =  this.swatchConfig[attributeId] &&
6113                    this.swatchConfig[attributeId].details &&
6114                    this.swatchConfig[attributeId].details.swatch_input_type ||
6115                    "empty";
6116                return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type;
6117            },
6118            isTextSwatch(attributeId, optionId) {
6119                return this.getSwatchType(attributeId, optionId) === 'text';
6120            },
6121            isVisualSwatch(attributeId, optionId) {
6122                const type = this.getSwatchType(attributeId, optionId);
6123
6124                return ['image', 'color'].includes(type);
6125            },
6126            getSwatchBackgroundStyle(attributeId, optionId) {
6127                const config = this.getSwatchConfig(attributeId, optionId);
6128                const type = this.getSwatchType(attributeId, optionId);
6129
6130                if (type === "color") {
6131                        return 'background-color:' + config.value;
6132                } else if (type === "image") {
6133                        return "background: #fff url('" + config.value + "') no-repeat center";
6134                } else {
6135                    return '';
6136                }
6137            },
6138            getSwatchText(attributeId, optionId) {
6139                const config = this.getSwatchConfig(attributeId, optionId);
6140                return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId);
6141            },
6142            getOptionLabelFromOptionConfig(attributeId, optionId) {
6143                // Fallback if no value is present in swatchConfig data
6144                // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190
6145                const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId);
6146                return option && option[0] && option[0].label ||'';
6147            },
6148            getSwatchConfig(attributeId, optionId) {
6149                return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId]
6150                    ? this.swatchConfig[attributeId][optionId]
6151                    : false;
6152            },
6153            activeTooltipItem: false,
6154            tooltipPositionElement: false,
6155            isTooltipVisible() {
6156                return this.activeTooltipItem &&
6157                    this.getSwatchConfig(
6158                        this.activeTooltipItem.attribute,
6159                        this.activeTooltipItem.item
6160                    );
6161            },
6162            isFirstItemCol() {
6163                return this.activeTooltipItem.index === 0;
6164            },
6165            getTooltipImageStyle(attributeId, optionId) {
6166                const config = this.getSwatchConfig(attributeId, optionId);
6167                const type = this.getSwatchType(attributeId, optionId);
6168
6169                if (type === "color") {
6170                    return 'background-color:' + config.value + '; width: 110px; height: 90px;';
6171                } else if (type === "image") {
6172                    return "background: #ffffff url('" + config.thumb +
6173                        "') center center no-repeat; width: 110px; height: 90px;";
6174                } else {
6175                    return 'display:none';
6176                }
6177            },
6178            getTooltipPosition() {
6179                return this.tooltipPositionElement ?
6180                    `top: ${this.tooltipPositionElement.offsetTop}px;` +
6181                    `left: ${
6182                        this.tooltipPositionElement.offsetLeft - (
6183                            this.tooltipPositionElement.closest('.snap') &&
6184                            this.tooltipPositionElement.closest('.snap').scrollLeft ||
6185                            0
6186                        )
6187                    }px;` : ''
6188            },
6189            getTooltipLabel() {
6190                return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label
6191            },
6192            focusedLabel: false,
6193            focusLabel(optionId) {
6194                this.focusedLabel = optionId;
6195            },
6196            blurLabel() {
6197                this.focusedLabel = false;
6198            }
6199        }
6200    }
6201</script>
6201
6202
6203<!-- Wrapping template -->
6204<script type="text/template" id="instant_wrapper_template">
6205    {{#findAutocomplete}}
6206    <div id="algolia-autocomplete-container"></div>
6207    {{/findAutocomplete}}
6208
6209    <div id="algolia_instant_selector"
6210         class=" with-facets column main pdc">
6211        <div class="row">
6212            <div class="col-md-3" id="algolia-left-container">
6213                <div id="refine-toggle" class="visible-xs visible-sm">
6214                    + Verbessern                </div>
6215                <div class="hidden-xs hidden-sm" id="instant-search-facets-container">
6216                    <div id="clear-refinements"></div>
6217                    <div id="current-refinements"></div>
6218                </div>
6219            </div>
6220
6221            <div class="col-md-9" id="algolia-right-container">
6222                <div class="row">
6223                    <div class="col-md-12">
6224                        <div>
6225                            {{#second_bar}}
6226                            <div id="instant-search-bar"></div>
6227                            {{/second_bar}}
6228                        </div>
6229                    </div>
6230                </div>
6231                <div class="row">
6232                    <div class="col-md-12">
6233                        <div itemscope itemtype="http://schema.org/ItemList" class="hits">
6234                            <div class="algolia-infos">
6235                                <div class="pull-left" id="algolia-stats"></div>
6236                                <div class="pull-right">
6237                                    <div class="sort-by-label pull-left">
6238                                        SORTIEREN NACH &nbsp;
6239                                    </div>
6240                                    <div class="pull-left" id="algolia-sorts"></div>
6241                                </div>
6242                                <div class="algolia-clearfix"></div>
6243                            </div>
6244                            <div id="algolia-banner"></div>
6245                            <div id="instant-empty-results-container"></div>
6246                            <div id="instant-search-results-container" class="products list items product-items"></div>
6247                        </div>
6248                    </div>
6249                    <div class="algolia-clearfix"></div>
6250                </div>
6251
6252                <div class="text-center">
6253                    <div id="instant-search-pagination-container"></div>
6254                </div>
6255            </div>
6256        </div>
6257    </div>
6258</script>
6258
6259
6260<script type="text/template" id="instant-hit-template">
6261    <li class="item product product-item">
6262        <div class="product-item-info" data-container="product-grid">
6263            <a href="{{{url}}}"
6264               class="product photo product-item-photo result"
6265               data-objectid="{{objectID}}"
6266               data-indexname="{{__indexName}}"
6267               data-position="{{__position}}"
6268               data-queryid="{{__queryID}}"
6269               tabindex="-1"
6270            >
6271                <span class="product-image-container" style="width: 276px;">
6272                    <span class="product-image-wrapper" style="padding-bottom: 125%;">
6273                        <picture>
6274                            <source type="image/png" srcset="{{{image_url}}}">
6275                            <img class="product-image-photo" src="{{{image_url}}}" loading="lazy" width="276" height="345" alt="{{{name}}}" decoding="async">
6276                        </picture>
6277                    </span>
6278                </span>
6279            </a>
6280
6281            <div class="product details product-item-details">
6282                <div class="top-details">
6283                    <strong class="product name product-item-name">
6284                        <a class="product-item-link" href="{{{url}}}">
6285                            {{{ _highlightResult.name.value }}}
6286                        </a>
6287                    </strong>
6288                    <div class="details-wrapper">
6289                        <div class="brand">
6290                            <span>{{{manufacturer}}}</span>
6291                        </div>
6292
6293                        <div class="sizes-wrapper">
6294                            <div class="product-sizes">
6295                                {{#product_sizes}}
6296                                    <span>{{.}}</span>
6297                                {{/product_sizes}}
6298                            </div>
6299                        </div>
6300                        <div class="price-discount">
6301                            {{#discount_percent}}
6302                                <span>- {{discount_percent}} %</span>
6303                            {{/discount_percent}}
6304                        </div>
6305                        <div class="price-uvp">
6306                            {{#uvp_price}}
6307                                <span>{{uvp_price}}</span>
6308                            {{/uvp_price}}
6309                        </div>
6310                        <div class="price-final">
6311                            {{#final_price}}
6312                                <span>{{final_price}}</span>
6313                            {{/final_price}}
6314                        </div>
6315                    </div>
6316                </div>
6317                <div class="actions">
6318                    <a href="{{{url}}}" class="action primary">Jetzt Gestalten</a>
6319                </div>
6320            </div>
6321
6322            {{#shirtplatform_id}}
6323                <div class="product-colors">
6324                    <div class="colors-wrapper">
6325                        {{#availableColors}}
6326                            <ul>
6327                                {{#colors}}
6328                                    <li>
6329                                        <a href="{{productUrl}}?colorId={{options}}" rel="nofollow" class="product-color" style="background: {{value}}; width: 24px; height: 24px;"></a>
6330                                    </li>
6331                                    {{#showExpandControl}}
6332                                        <li class="expand-control">
6333                                            <a href="#" class="expand-colors">
6334                                                <span class="count">+{{remainingColorsCount}}</span>
6335                                            </a>
6336                                        </li>
6337                                    {{/showExpandControl}}
6338                                {{/colors}}
6339                            </ul>
6340                        {{/availableColors}}
6341                    </div>
6342                </div>
6343            {{/shirtplatform_id}}
6344
6345            {{#brand_logo_url}}
6346                <div class="brand-logo">
6347                    <picture>
6348                        <source type="image/png" srcset="{{{brand_logo_url}}}">
6349                        <img src="{{{brand_logo_url}}}"  alt="{{{manufacturer}}}" width="72" loading="lazy">
6350                    </picture>
6351                </div>
6352            {{/brand_logo_url}}
6353
6354            <div class="product-attributes">
6355                {{#usp_1}}
6356                    <div class="attribute-item">{{{usp_1}}}</div>
6357                {{/usp_1}}
6358                {{#usp_2}}
6359                    <div class="attribute-item">{{{usp_2}}}</div>
6360                {{/usp_2}}
6361            </div>
6362        </div>
6363    </li>
6364</script>
vendor: 1 bytes, line 6364
6364
6365<script type="text/template" id="instant-stats-template">
6366    {{#hasOneResult}}<strong>1</strong> Ergebnis found{{/hasOneResult}}
6367
6368    {{#hasManyResults}}
6369        {{^hasNoResults}}{{first}}-{{last}} von{{/hasNoResults}}
6370        <strong>
6371            <span itemprop="numberOfItems">{{nbHits}}</span>
6372            Ergebnisse gefunden        </strong>
6373    {{/hasManyResults}}
6374
6375    {{^hasNoResults}}
6376    in {{seconds}} Sekunden    {{/hasNoResults}}
6377</script>
vendor: 1 bytes, line 6377
6377
6378<script type="text/template" id="refinements-lists-item-template">
6379    <label class="{{cssClasses.label}} {{#isRefined}}checked{{/isRefined}}">
6380        <input class="{{cssClasses.checkbox}}" {{#isRefined}}checked{{/isRefined}} type="checkbox" value="{{value}}" />
6381        {{label}}
6382        <span class="{{cssClasses.count}}">{{count}}</span>
6383    </label>
6384</script>
vendor: 1 bytes, line 6384
6384
6385<script type="text/json" id="default-section-data">
6386    {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"AT":{"name":"\u00d6sterreich","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"BE":{"name":"Belgien","regions":{"577":{"code":"VAN","name":"Antwerpen"},"578":{"code":"WBR","name":"Brabant wallon"},"579":{"code":"BRU","name":"Brussels-Capital Region"},"580":{"code":"WHT","name":"Hainaut"},"582":{"code":"WLG","name":"Li\u00e8ge"},"581":{"code":"VLI","name":"Limburg"},"583":{"code":"WLX","name":"Luxembourg"},"584":{"code":"WNA","name":"Namur"},"585":{"code":"VOV","name":"Oost-Vlaanderen"},"586":{"code":"VBR","name":"Vlaams-Brabant"},"587":{"code":"VWV","name":"West-Vlaanderen"}}},"CH":{"name":"Schweiz","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"DE":{"name":"Deutschland","regions":{"80":{"code":"BAW","name":"Baden-W\u00fcrttemberg"},"81":{"code":"BAY","name":"Bayern"},"82":{"code":"BER","name":"Berlin"},"83":{"code":"BRG","name":"Brandenburg"},"84":{"code":"BRE","name":"Bremen"},"85":{"code":"HAM","name":"Hamburg"},"86":{"code":"HES","name":"Hessen"},"87":{"code":"MEC","name":"Mecklenburg-Vorpommern"},"79":{"code":"NDS","name":"Niedersachsen"},"88":{"code":"NRW","name":"Nordrhein-Westfalen"},"89":{"code":"RHE","name":"Rheinland-Pfalz"},"90":{"code":"SAR","name":"Saarland"},"91":{"code":"SAS","name":"Sachsen"},"92":{"code":"SAC","name":"Sachsen-Anhalt"},"93":{"code":"SCN","name":"Schleswig-Holstein"},"94":{"code":"THE","name":"Th\u00fcringen"}}},"DK":{"name":"D\u00e4nemark","regions":{"908":{"code":"DK-84","name":"Hovedstaden"},"909":{"code":"DK-82","name":"Midtjylland"},"910":{"code":"DK-81","name":"Nordjylland"},"911":{"code":"DK-85","name":"Sj\u00e6lland"},"912":{"code":"DK-83","name":"Syddanmark"}}},"ES":{"name":"Spanien","regions":{"130":{"code":"A Coru\u0441a","name":"A Coru\u00f1a"},"131":{"code":"Alava","name":"Alava"},"132":{"code":"Albacete","name":"Albacete"},"133":{"code":"Alicante","name":"Alicante"},"134":{"code":"Almeria","name":"Almeria"},"135":{"code":"Asturias","name":"Asturias"},"136":{"code":"Avila","name":"Avila"},"137":{"code":"Badajoz","name":"Badajoz"},"138":{"code":"Baleares","name":"Baleares"},"139":{"code":"Barcelona","name":"Barcelona"},"140":{"code":"Burgos","name":"Burgos"},"141":{"code":"Caceres","name":"Caceres"},"142":{"code":"Cadiz","name":"Cadiz"},"143":{"code":"Cantabria","name":"Cantabria"},"144":{"code":"Castellon","name":"Castellon"},"145":{"code":"Ceuta","name":"Ceuta"},"146":{"code":"Ciudad Real","name":"Ciudad Real"},"147":{"code":"Cordoba","name":"Cordoba"},"148":{"code":"Cuenca","name":"Cuenca"},"149":{"code":"Girona","name":"Girona"},"150":{"code":"Granada","name":"Granada"},"151":{"code":"Guadalajara","name":"Guadalajara"},"152":{"code":"Guipuzcoa","name":"Guipuzcoa"},"153":{"code":"Huelva","name":"Huelva"},"154":{"code":"Huesca","name":"Huesca"},"155":{"code":"Jaen","name":"Jaen"},"156":{"code":"La Rioja","name":"La Rioja"},"157":{"code":"Las Palmas","name":"Las Palmas"},"158":{"code":"Leon","name":"Leon"},"159":{"code":"Lleida","name":"Lleida"},"160":{"code":"Lugo","name":"Lugo"},"161":{"code":"Madrid","name":"Madrid"},"162":{"code":"Malaga","name":"Malaga"},"163":{"code":"Melilla","name":"Melilla"},"164":{"code":"Murcia","name":"Murcia"},"165":{"code":"Navarra","name":"Navarra"},"166":{"code":"Ourense","name":"Ourense"},"167":{"code":"Palencia","name":"Palencia"},"168":{"code":"Pontevedra","name":"Pontevedra"},"169":{"code":"Salamanca","name":"Salamanca"},"170":{"code":"Santa Cruz de Tenerife","name":"Santa Cruz de Tenerife"},"171":{"code":"Segovia","name":"Segovia"},"172":{"code":"Sevilla","name":"Sevilla"},"173":{"code":"Soria","name":"Soria"},"174":{"code":"Tarragona","name":"Tarragona"},"175":{"code":"Teruel","name":"Teruel"},"176":{"code":"Toledo","name":"Toledo"},"177":{"code":"Valencia","name":"Valencia"},"178":{"code":"Valladolid","name":"Valladolid"}
6386,"179":{"code":"Vizcaya","name":"Vizcaya"},"180":{"code":"Zamora","name":"Zamora"},"181":{"code":"Zaragoza","name":"Zaragoza"}}},"FI":{"name":"Finnland","regions":{"339":{"code":"Ahvenanmaa","name":"Ahvenanmaa"},"333":{"code":"Etel\u00e4-Karjala","name":"Etel\u00e4-Karjala"},"326":{"code":"Etel\u00e4-Pohjanmaa","name":"Etel\u00e4-Pohjanmaa"},"325":{"code":"Etel\u00e4-Savo","name":"Etel\u00e4-Savo"},"337":{"code":"It\u00e4-Uusimaa","name":"It\u00e4-Uusimaa"},"322":{"code":"Kainuu","name":"Kainuu"},"335":{"code":"Kanta-H\u00e4me","name":"Kanta-H\u00e4me"},"330":{"code":"Keski-Pohjanmaa","name":"Keski-Pohjanmaa"},"331":{"code":"Keski-Suomi","name":"Keski-Suomi"},"338":{"code":"Kymenlaakso","name":"Kymenlaakso"},"320":{"code":"Lappi","name":"Lappi"},"334":{"code":"P\u00e4ij\u00e4t-H\u00e4me","name":"P\u00e4ij\u00e4t-H\u00e4me"},"328":{"code":"Pirkanmaa","name":"Pirkanmaa"},"327":{"code":"Pohjanmaa","name":"Pohjanmaa"},"323":{"code":"Pohjois-Karjala","name":"Pohjois-Karjala"},"321":{"code":"Pohjois-Pohjanmaa","name":"Pohjois-Pohjanmaa"},"324":{"code":"Pohjois-Savo","name":"Pohjois-Savo"},"329":{"code":"Satakunta","name":"Satakunta"},"336":{"code":"Uusimaa","name":"Uusimaa"},"332":{"code":"Varsinais-Suomi","name":"Varsinais-Suomi"}}},"FR":{"name":"Frankreich","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"},"185":{"code":"4","name":"Alpes-de-Haute-Provence"},"187":{"code":"6","name":"Alpes-Maritimes"},"188":{"code":"7","name":"Ard\u00e8che"},"189":{"code":"8","name":"Ardennes"},"190":{"code":"9","name":"Ari\u00e8ge"},"191":{"code":"10","name":"Aube"},"192":{"code":"11","name":"Aude"},"193":{"code":"12","name":"Aveyron"},"249":{"code":"67","name":"Bas-Rhin"},"194":{"code":"13","name":"Bouches-du-Rh\u00f4ne"},"195":{"code":"14","name":"Calvados"},"196":{"code":"15","name":"Cantal"},"197":{"code":"16","name":"Charente"},"198":{"code":"17","name":"Charente-Maritime"},"199":{"code":"18","name":"Cher"},"200":{"code":"19","name":"Corr\u00e8ze"},"201":{"code":"2A","name":"Corse-du-Sud"},"203":{"code":"21","name":"C\u00f4te-d'Or"},"204":{"code":"22","name":"C\u00f4tes-d'Armor"},"205":{"code":"23","name":"Creuse"},"261":{"code":"79","name":"Deux-S\u00e8vres"},"206":{"code":"24","name":"Dordogne"},"207":{"code":"25","name":"Doubs"},"208":{"code":"26","name":"Dr\u00f4me"},"273":{"code":"91","name":"Essonne"},"209":{"code":"27","name":"Eure"},"210":{"code":"28","name":"Eure-et-Loir"},"211":{"code":"29","name":"Finist\u00e8re"},"212":{"code":"30","name":"Gard"},"214":{"code":"32","name":"Gers"},"215":{"code":"33","name":"Gironde"},"250":{"code":"68","name":"Haut-Rhin"},"202":{"code":"2B","name":"Haute-Corse"},"213":{"code":"31","name":"Haute-Garonne"},"225":{"code":"43","name":"Haute-Loire"},"234":{"code":"52","name":"Haute-Marne"},"252":{"code":"70","name":"Haute-Sa\u00f4ne"},"256":{"code":"74","name":"Haute-Savoie"},"269":{"code":"87","name":"Haute-Vienne"},"186":{"code":"5","name":"Hautes-Alpes"},"247":{"code":"65","name":"Hautes-Pyr\u00e9n\u00e9es"},"274":{"code":"92","name":"Hauts-de-Seine"},"216":{"code":"34","name":"H\u00e9rault"},"217":{"code":"35","name":"Ille-et-Vilaine"},"218":{"code":"36","name":"Indre"},"219":{"code":"37","name":"Indre-et-Loire"},"220":{"code":"38","name":"Is\u00e8re"},"221":{"code":"39","name":"Jura"},"222":{"code":"40","name":"Landes"},"223":{"code":"41","name":"Loir-et-Cher"},"224":{"code":"42","name":"Loire"},"226":{"code":"44","name":"Loire-Atlantique"},"227":{"code":"45","name":"Loiret"},"228":{"code":"46","name":"Lot"},"229":{"code":"47","name":"Lot-et-Garonne"},"230":{"code":"48","name":"Loz\u00e8re"},"231":{"code":"49","name":"Maine-et-Loire"},"232":{"code":"50","name":"Manche"},"233":{"code":"51","name":"Marne"},"235":{"code":"53","name":"Mayenne"},"236":{"code":"54","name":"Meurthe-et-Moselle"},"237":{"code":"55","name":"Meuse"},"238":{"code":"56","name":"Morbihan"},"239":{"code":"57","name":"Moselle"},"240":{"code":"58","name":"Ni\u00e8vre"},"241":{"code":"59","name":"Nord"},"242":{"code":"60","name":"Oise"},"243":{"code":"61","name":"Orne"},"257":{"code":"75","name":"Paris"},"244":{"code":"62","name":"Pas-de-Calais"},"245":{"code":"63","name":"Puy-de-D\u00f4me"},"246":{"code":"64","name":"Pyr\u00e9n\u00e9es-Atlantiques"},"248":{"code":"66","name":"Pyr\u00e9n\u00e9es-Orientales"},"251":{"code":"69","name":"Rh\u00f4ne"},"253":{"code":"71","name":"Sa\u00f4ne-et-Loire"},"254":{"code":"72","name":"Sarthe"},"255":{"code":"73","name":"Savoie"},"259":{"code":"77","name":"Seine-et-Marne"},"258":{"code":"76","name":"Seine-Maritime"},"275":{"code":"93","name":"Seine-Saint-Denis"},"262":{"code":"80","name":"Somme"},"263":{"code":"81","name":"Tarn"},"264":{"code":"82","name":"Tarn-et-Garonne"},"272":{"code":"90","name":"Territoire-de-Belfort"},"277":{"code":"95","name":"Val-d'Oise"}
6386,"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"GR":{"name":"Griechenland","regions":{"950":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"937":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"938":{"code":"GR-I","name":"Attik\u00ed"},"939":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"940":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"941":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"942":{"code":"GR-D","name":"\u00cdpeiros"},"943":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"944":{"code":"GR-M","name":"Kr\u00edti"},"945":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"946":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"947":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"},"948":{"code":"GR-E","name":"Thessal\u00eda"},"949":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"HR":{"name":"Kroatien","regions":{"518":{"code":"HR-07","name":"Bjelovarsko-bilogorska \u017eupanija"},"523":{"code":"HR-12","name":"Brodsko-posavska \u017eupanija"},"530":{"code":"HR-19","name":"Dubrova\u010dko-neretvanska \u017eupanija"},"532":{"code":"HR-21","name":"Grad Zagreb"},"529":{"code":"HR-18","name":"Istarska \u017eupanija"},"515":{"code":"HR-04","name":"Karlova\u010dka \u017eupanija"},"517":{"code":"HR-06","name":"Koprivni\u010dko-kri\u017eeva\u010dka \u017eupanija"},"513":{"code":"HR-02","name":"Krapinsko-zagorska \u017eupanija"},"520":{"code":"HR-09","name":"Li\u010dko-senjska \u017eupanija"},"531":{"code":"HR-20","name":"Me\u0111imurska \u017eupanija"},"525":{"code":"HR-14","name":"Osje\u010dko-baranjska \u017eupanija"},"522":{"code":"HR-11","name":"Po\u017ee\u0161ko-slavonska \u017eupanija"},"519":{"code":"HR-08","name":"Primorsko-goranska \u017eupanija"},"526":{"code":"HR-15","name":"\u0160ibensko-kninska \u017eupanija"},"514":{"code":"HR-03","name":"Sisa\u010dko-moslava\u010dka \u017eupanija"},"528":{"code":"HR-17","name":"Splitsko-dalmatinska \u017eupanija"},"516":{"code":"HR-05","name":"Vara\u017edinska \u017eupanija"},"521":{"code":"HR-10","name":"Viroviti\u010dko-podravska \u017eupanija"},"527":{"code":"HR-16","name":"Vukovarsko-srijemska \u017eupanija"},"524":{"code":"HR-13","name":"Zadarska \u017eupanija"},"512":{"code":"HR-01","name":"Zagreba\u010dka \u017eupanija"}}},"IT":{"name":"Italien","regions":{"654":{"code":"AG","name":"Agrigento"},"655":{"code":"AL","name":"Alessandria"},"656":{"code":"AN","name":"Ancona"},"657":{"code":"AO","name":"Aosta"},"659":{"code":"AR","name":"Arezzo"},"660":{"code":"AP","name":"Ascoli-Piceno"},"661":{"code":"AT","name":"Asti"},"662":{"code":"AV","name":"Avellino"},"663":{"code":"BA","name":"Bari"},"664":{"code":"BT","name":"Barletta-Andria-Trani"},"665":{"code":"BL","name":"Belluno"},"666":{"code":"BN","name":"Benevento"},"667":{"code":"BG","name":"Bergamo"},"668":{"code":"BI","name":"Biella"},"669":{"code":"BO","name":"Bologna"},"670":{"code":"BZ","name":"Bolzano"},"671":{"code":"BS","name":"Brescia"},"672":{"code":"BR","name":"Brindisi"},"673":{"code":"CA","name":"Cagliari"},"674":{"code":"CL","name":"Caltanissetta"},"675":{"code":"CB","name":"Campobasso"},"676":{"code":"CI","name":"Carbonia Iglesias"},"677":{"code":"CE","name":"Caserta"},"678":{"code":"CT","name":"Catania"},"679":{"code":"CZ","name":"Catanzaro"},"680":{"code":"CH","name":"Chieti"},"681":{"code":"CO","name":"Como"},"682":{"code":"CS","name":"Cosenza"},"683":{"code":"CR","name":"Cremona"},"684":{"code":"KR","name":"Crotone"},"685":{"code":"CN","name":"Cuneo"},"686":{"code":"EN","name":"Enna"},"687":{"code":"FM","name":"Fermo"},"688":{"code":"FE","name":"Ferrara"},"689":{"code":"FI","name":"Firenze"},"690":{"code":"FG","name":"Foggia"},"691":{"code":"FC","name":"Forli-Cesena"},"692":{"code":"FR","name":"Frosinone"},"693":{"code":"GE","name":"Genova"},"694":{"code":"GO","name":"Gorizia"},"695":{"code":"GR","name":"Grosseto"},"696":{"code":"IM","name":"Imperia"},"697":{"code":"IS","name":"Isernia"},"658":{"code":"AQ","name":"L'Aquila"},"698":{"code":"SP","name":"La-Spezia"},"699":{"code":"LT","name":"Latina"},"700":{"code":"LE","name":"Lecce"},"701":{"code":"LC","name":"Lecco"},"702":{"code":"LI","name":"Livorno"},"703":{"code":"LO","name":"Lodi"},"704":{"code":"LU","name":"Lucca"},"705":{"code":"MC","name":"Macerata"},"706":{"code":"MN","name":"Mantova"},"707":{"code":"MS","name":"Massa-Carrara"},"708":{"code":"MT","name":"Matera"},"709":{"code":"VS","name":"Medio Campidano"},"710":{"code":"ME","name":"Messina"},"711":{"code":"MI","name":"Milano"},"712":{"code":"MO","name":"Modena"},"713":{"code":"MB","name":"Monza-Brianza"},"714":{"code":"NA","name":"Napoli"},"715":{"code":"NO","name":"Novara"},"716":{"code":"NU","name":"Nuoro"},"717":{"code":"OG","name":"Ogliastra"},"718":{"code":"OT","name":"Olbia Tempio"},"719":{"code":"OR","name":"Oristano"},"720":{"code":"PD","name":"Padova"},"721":{"code":"PA","name":"Palermo"},"722":{"code":"PR","name":"Parma"},"723":{"code":"PV","name":"Pavia"},"724":{"code":"PG","name":"Perugia"},"725":{"code":"PU","name":"Pesaro-Urbino"},"726":{"code":"PE","name":"Pescara"},"727":{"code":"PC","name":"Piacenza"},"728":{"code":"PI","name":"Pisa"},"729":{"code":"PT","name":"Pistoia"},"730":{"code":"PN","name":"Pordenone"},"731":{"code":"PZ","name":"Potenza"},"732":{"code":"PO","name":"Prato"},"733":{"code":"RG","name":"Ragusa"},"734":{"code":"RA","name":"Ravenna"},"735":{"code":"RC","name":"Reggio-Calabria"},"736":{"code":"RE","name":"Reggio-Emilia"},"737":{"code":"RI","name":"Rieti"},"738":{"code":"RN","name":"Rimini"},"739":{"code":"RM","name":"Roma"},"740":{"code":"RO","name":"Rovigo"},"741":{"code":"SA","name":"Salerno"},"742":{"code":"SS","name":"Sassari"},"743":{"code":"SV","name":"Savona"},"744":{"code":"SI","name":"Siena"},"745":{"code":"SR","name":"Siracusa"},"746":{"code":"SO","name":"Sondrio"},"747":{"code":"TA","name":"Taranto"},"748":{"code":"TE","name":"Teramo"},"749":{"code":"TR","name":"Terni"},"750":{"code":"TO","name":"Torino"},"751":{"code":"TP","name":"Trapani"},"752":{"code":"TN","name":"Trento"},"753":{"code":"TV","name":"Treviso"},"754":{"code":"TS","name":"Trieste"},"755":{"code":"UD","name":"Udine"},"756":{"code":"VA","name":"Varese"},"757":{"code":"VE","name":"Venezia"},"758":{"code":"VB","name":"Verbania"},"759":{"code":"VC","name":"Vercelli"},"760":{"code":"VR","name":"Verona"}
6386,"761":{"code":"VV","name":"Vibo-Valentia"},"762":{"code":"VI","name":"Vicenza"},"763":{"code":"VT","name":"Viterbo"}}},"LU":{"name":"Luxemburg"},"NL":{"name":"Niederlande"},"PT":{"name":"Portugal","regions":{"1013":{"code":"PT-01","name":"Aveiro"},"1014":{"code":"PT-02","name":"Beja"},"1015":{"code":"PT-03","name":"Braga"},"1016":{"code":"PT-04","name":"Bragan\u00e7a"},"1017":{"code":"PT-05","name":"Castelo Branco"},"1018":{"code":"PT-06","name":"Coimbra"},"1019":{"code":"PT-07","name":"\u00c9vora"},"1020":{"code":"PT-08","name":"Faro"},"1021":{"code":"PT-09","name":"Guarda"},"1022":{"code":"PT-10","name":"Leiria"},"1023":{"code":"PT-11","name":"Lisboa"},"1024":{"code":"PT-12","name":"Portalegre"},"1025":{"code":"PT-13","name":"Porto"},"1032":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"1031":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"1026":{"code":"PT-14","name":"Santar\u00e9m"},"1027":{"code":"PT-15","name":"Set\u00fabal"},"1028":{"code":"PT-16","name":"Viana do Castelo"},"1029":{"code":"PT-17","name":"Vila Real"},"1030":{"code":"PT-18","name":"Viseu"}}},"SE":{"name":"Schweden","regions":{"1043":{"code":"SE-K","name":"Blekinge l\u00e4n"},"1044":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"1046":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"1045":{"code":"SE-I","name":"Gotlands l\u00e4n"},"1047":{"code":"SE-N","name":"Hallands l\u00e4n"},"1048":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"1049":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"1050":{"code":"SE-H","name":"Kalmar l\u00e4n"},"1051":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"1052":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"1062":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"1063":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"1053":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"1055":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"1054":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"1056":{"code":"SE-C","name":"Uppsala l\u00e4n"},"1057":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"1058":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"1059":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"1060":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"1061":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SK":{"name":"Slowakei"},"data_id":1790986879},"captcha":[],"instant-purchase":[],"loggedAsCustomer":[],"persistent":[],"review":[],"payments":[],"wishlist":{"items":[]},"amfacebook-pixel":[],"hyva_checkout":[],"wp_ga4":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"paypal-buyer-country":[],"magepal-gtm-jsdatalayer":[]}</script>
6386
6387</div>    
6387<script>
6388        require(['jquery','weltpixel_ga4_persistentLayer','weltpixel_ga4_gtm', 'Magento_Customer/js/customer-data'],
6389            function ($, wpGa4PersDl ,wpGa4gtm, customerData) {
6390                $( document ).ajaxComplete(function( event, xhr, settings ) {
6391                    if (settings.url.search('/customer\/section\/load/') > 0) {
6392                        var response = xhr.responseJSON;
6393                        if (response.wp_ga4) {
6394                            var dataLayerData = $.parseJSON(response.wp_ga4.datalayer);
6395                            for (index in dataLayerData) {
6396                                window.dataLayer.push({ecommerce: null});
6397                                window.dataLayer.push(dataLayerData[index]);
6398                            }
6399                        }
6400                    }
6401                });
6402                var wpPersDlOptions = {'storageExpiryTime' : 30 };
6403                var wpGtmOptions = {
6404                    'enabled' : 0,
6405                    'persDataLayer' : wpGa4PersDl
6406                };
6407                wpGa4PersDl.init(wpPersDlOptions);
6408                wpGa4gtm.trackPromotion(wpGtmOptions);
6409            });
6410    </script>
vendor: 1 bytes, line 6410
6410
6411<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a447c939dcfcf97d',t:'MTc5MDk4Njg3OQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
6411</body>
6412</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.