1<!doctype html> 2<html lang="de"> 3<head > 4 <meta charset="utf-8"/> 5<meta name="title" content="Modehaus Jost â Ihr Trendmode-Anbieter"/> 6<meta name="description" content="Modehaus Jost ist ein etablierter Anbieter hochwertiger Trendmode für Damen, Herren und Kinder mit fünf Filialen im Rhein-Neckar-Gebiet und der Pfalz."/> 7<meta name="keywords" content="Mode Jost"/> 8<meta name="robots" content="INDEX,FOLLOW"/> 9<meta name="viewport" content="width=device-width, initial-scale=1"/> 10<title>Modehaus Jost â Ihr Trendmode-Anbieter</title> 11 <link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/css/styles.css" /> 12<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/css/mhhyvacore.css" /> 13<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/css/styles.css" /> 14<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_NinjaMenus/css/styles.css" /> 15<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/css/owlcarousel/owl.carousel.min.css" /> 16<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/css/animate.css" /> 17<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/css/fontawesome5.css" /> 18<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/css/mgz_font.css" /> 19<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/css/mgz_bootstrap.css" /> 20<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Builder/css/openiconic.min.css" /> 21<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Builder/css/styles.css" /> 22<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Builder/css/common.css" /> 23<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/css/magnific.css" /> 24<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_PageBuilder/css/styles.css" /> 25<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_PageBuilder/vendor/photoswipe/photoswipe.css" /> 26<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_PageBuilder/vendor/photoswipe/default-skin/default-skin.css" /> 27<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_PageBuilder/vendor/blueimp/css/blueimp-gallery.min.css" /> 28<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/MHinspeya_LibSwiperJs/vendor/swiper/swiper.min.css" /> 29<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/MageArray_News/css/category_sidebar.css" /> 30<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/MageArray_News/css/widget.css" /> 31<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Newsletter/css/styles.css" /> 32<link rel="stylesheet" type="text/css" media="all" href="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_PageBuilderIconBox/css/styles.css" /> 33<link rel="stylesheet" type="text/css" media="all" href="https://use.typekit.net/whb3vhk.css" />
34<script type="text/javascript" src="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/load-script.js"></script>
34 35<link rel="icon" type="image/x-icon" href="https://www.mode-jost.de/media/favicon/stores/1/favicon_jost.png" /> 36<link rel="shortcut icon" type="image/x-icon" href="https://www.mode-jost.de/media/favicon/stores/1/favicon_jost.png" /> 37<!-- Meta Pixel Code -->
38<script>
vendor: 408 bytes, lines 38-47
38 39!function(f,b,e,v,n,t,s) 40{if(f.fbq)return;n=f.fbq=function(){n.callMethod? 41n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 42if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 43n.queue=[];t=b.createElement(e);t.async=!0; 44t.src=v;s=b.getElementsByTagName(e)[0]; 45s.parentNode.insertBefore(t,s)}(window, document,'script', 46'https://connect.facebook.net/en_US/fbevents.js'); 47fbq('init', '
47831400510908046
vendor: 32 bytes, lines 47-48
47'); 48fbq('track', 'PageView');
49</script>
49 50<noscript><img height="1" width="1" style="display:none" 51src="https://www.facebook.com/tr?id=831400510908046&ev=PageView&noscript=1" 52/></noscript> 53<!-- End Meta Pixel Code --> 54 55 56<meta name="facebook-domain-verification" content="9n9mozq3xej12iwtxuapomgdns5bmq" /> 57 58 59 60<meta name="facebook-domain-verification" content="hgacseasub0ntnx4omwheubzel9eu6" /> 61<style> 62@media screen and (max-width: 767px) 63{ 64.customer-welcome .customer-name { 65 cursor: pointer; 66 display:block; 67} 68.customer-welcome .action.switch { 69 background-image: none; 70 background: none; 71 -moz-box-sizing: content-box; 72 border: 0; 73 box-shadow: none; 74 line-height: inherit; 75 margin: 0; 76 padding: 0; 77 text-decoration: none; 78 text-shadow: none; 79 font-weight: 400; 80 color: #ffffff; 81} 82.customer-welcome .customer-menu { 83 display: none; 84 position:relative; 85} 86.customer-welcome .action.switch > span 87{ 88 border: 0; 89 clip: rect(0, 0, 0, 0); 90 height: 1px; 91 margin: -1px; 92 overflow: hidden; 93 padding: 0; 94 position: absolute; 95 width: 1px; 96 97} 98.customer-welcome.active .customer-menu { 99 display: block; 100} 101.customer-welcome ul:before { 102 border: 6px solid; 103 border-color: transparent transparent #ffffff transparent; 104 z-index: 99; 105} 106.customer-welcome ul { 107 margin: 0; 108 padding: 0; 109 list-style: none none; 110 background: #ffffff; 111 border: 1px solid #bbbbbb; 112 margin-top: 4px; 113 min-width: 100%; 114 z-index: 101; 115 box-sizing: border-box; 116 position: absolute; 117 top: 100%; 118 right: 0; 119 box-shadow: 0 3px 3px rgb(0 0 0 / 15%); 120} 121.customer-welcome .header.links { 122 min-width: 175px; 123 z-index: 1000; 124 display:inline-block !important; 125} 126.mh_headerContentWrapper .mh_userMenuWrapper .mh_userActions .header.links { 127 /* display: block; */ 128 margin-right: 41px; 129 margin-top: 0px; 130} 131.customer-welcome ul li { 132 margin: 0; 133 padding: 0; 134} 135.customer-welcome li a { 136 color: #333333; 137 text-decoration: none; 138 display: block; 139 line-height: 1.4; 140 padding: 8px; 141} 142.mh_headerContentWrapper .mh_userMenuWrapper .mh_userActions .minicart-wrapper { 143 top: -10px; 144} 145.mh_headerContentWrapper .mh_userMenuWrapper .mh_userSearch { 146 margin-top: -37px; 147} 148} 149</style> 150 151
152<script type="module" src="https://widget.accessgo.de/accessGoWidget.js"></script>
152 <style> 153 .magezon-builder { 154 z-index: unset; 155 } 156 @media (min-width: 1260px) { 157 .magezon-builder .mgz-container {width: 1260px;} 158 } 159 </style>
160<script> 161 var BASE_URL = 'https://www.mode-jost.de/'; 162 var THEME_PATH = 'https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE'; 163 var COOKIE_CONFIG = { 164 "expires": null, 165 "path": "\u002F", 166 "domain": ".www.mode\u002Djost.de", 167 "secure": true, 168 "lifetime": "3600", 169 "cookie_restriction_enabled": false }; 170 var CURRENT_STORE_CODE = 'default'; 171 var CURRENT_WEBSITE_ID = '1'; 172 173 window.hyva = window.hyva || {} 174 175 window.cookie_consent_groups = window.cookie_consent_groups || {} 176 window.cookie_consent_groups['necessary'] = true; 177 178 window.cookie_consent_config = window.cookie_consent_config || {}; 179 window.cookie_consent_config['necessary'] = [].concat( 180 window.cookie_consent_config['necessary'] || [], 181 [ 182 'user_allowed_save_cookie', 183 'form_key', 184 'mage-messages', 185 'private_content_version', 186 'mage-cache-sessid', 187 'last_visited_store', 188 'section_data_ids' 189 ] 190 ); 191 //# sourceURL=hyva-variables.js 192</script>
vendor: 1 bytes, line 192
192
193<script> 194 (function( hyva, undefined ) { 195 196 function lifetimeToExpires(options, defaults) { 197 198 const lifetime = options.lifetime || defaults.lifetime; 199 200 if (lifetime) { 201 const date = new Date; 202 date.setTime(date.getTime() + lifetime * 1000); 203 return date; 204 } 205 206 return null; 207 } 208 209 function generateRandomString() { 210 211 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 212 length = 16; 213 214 let formKey = '', 215 charactersLength = allowedCharacters.length; 216 217 for (let i = 0; i < length; i++) { 218 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 219 } 220 221 return formKey; 222 } 223 224 const sessionCookieMarker = {noLifetime: true} 225 226 const cookieTempStorage = {}; 227 228 const internalCookie = { 229 get(name) { 230 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 231 return v ? v[2] : null; 232 }, 233 set(name, value, days, skipSetDomain) { 234 let expires, 235 path, 236 domain, 237 secure, 238 samesite; 239 240 const defaultCookieConfig = { 241 expires: null, 242 path: '/', 243 domain: null, 244 secure: false, 245 lifetime: null, 246 samesite: 'lax' 247 }; 248 249 const cookieConfig = window.COOKIE_CONFIG || {}; 250 251 expires = days && days !== sessionCookieMarker 252 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 253 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 254 255 path = cookieConfig.path || defaultCookieConfig.path; 256 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 257 secure = cookieConfig.secure || defaultCookieConfig.secure; 258 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 259 260 document.cookie = name + "=" + encodeURIComponent(value) + 261 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 262 (path ? '; path=' + path : '') + 263 (domain ? '; domain=' + domain : '') + 264 (secure ? '; secure' : '') + 265 (samesite ? '; samesite=' + samesite : 'lax'); 266 }, 267 isWebsiteAllowedToSaveCookie() { 268 const allowedCookies = this.get('user_allowed_save_cookie'); 269 if (allowedCookies) { 270 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 271 272 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 273 } 274 return false; 275 }, 276 getGroupByCookieName(name) { 277 const cookieConsentConfig = window.cookie_consent_config || {}; 278 let group = null; 279 for (let prop in cookieConsentConfig) { 280 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 281 if (cookieConsentConfig[prop].includes(name)) { 282 group = prop; 283 break; 284 } 285 } 286 return group; 287 }, 288 isCookieAllowed(name) { 289 const cookieGroup = this.getGroupByCookieName(name); 290 return cookieGroup 291 ? window.cookie_consent_groups[cookieGroup] 292 : this.isWebsiteAllowedToSaveCookie(); 293 }, 294 saveTempStorageCookies() { 295 for (const [name, data] of Object.entries(cookieTempStorage)) { 296 if (this.isCookieAllowed(name)) { 297 this.set(name, data['value'], data['days'], data['skipSetDomain']); 298 delete cookieTempStorage[name]; 299 } 300 } 301 } 302 }; 303 304 hyva.getCookie = (name) => { 305 const cookieConfig = window.COOKIE_CONFIG || {}; 306 307 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 308 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 309 } 310 311 return internalCookie.get(name); 312 } 313 314 hyva.setCookie = (name, value, days, skipSetDomain) => { 315 const cookieConfig = window.COOKIE_CONFIG || {}; 316 317 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 318 cookieTempStorage[name] = {value, days, skipSetDomain}; 319 return; 320 } 321 return internalCookie.set(name, value, days, skipSetDomain); 322 } 323 324 325 hyva.setSessionCookie = (name, value, skipSetDomain) => { 326 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 327 } 328 329 hyva.getBrowserStorage = () => { 330 const browserStorage = window.localStorage || window.sessionStorage; 331 if (!browserStorage) { 332 console.warn('Browser Storage is unavailable'); 333 return false;
334 } 335 try { 336 browserStorage.setItem('storage_test', '1'); 337 browserStorage.removeItem('storage_test'); 338 } catch (error) { 339 console.warn('Browser Storage is not accessible', error); 340 return false; 341 } 342 return browserStorage; 343 } 344 345 hyva.postForm = (postParams) => { 346 const form = document.createElement("form"); 347 348 let data = postParams.data; 349 350 if (! postParams.skipUenc && ! data.uenc) { 351 data.uenc = btoa(window.location.href); 352 } 353 form.method = "POST"; 354 form.action = postParams.action; 355 356 Object.keys(postParams.data).map(key => { 357 const field = document.createElement("input"); 358 field.type = 'hidden' 359 field.value = postParams.data[key]; 360 field.name = key; 361 form.appendChild(field); 362 }); 363 364 const form_key = document.createElement("input"); 365 form_key.type = 'hidden'; 366 form_key.value = hyva.getFormKey(); 367 form_key.name="form_key"; 368 form.appendChild(form_key); 369 370 document.body.appendChild(form); 371 372 form.submit(); 373 } 374 375 hyva.getFormKey = function () { 376 let formKey = hyva.getCookie('form_key'); 377 378 if (!formKey) { 379 formKey = generateRandomString(); 380 hyva.setCookie('form_key', formKey); 381 } 382 383 return formKey; 384 } 385 386 hyva.formatPrice = (value, showSign, options = {}) => { 387 const groupSeparator = options.groupSeparator; 388 const decimalSeparator = options.decimalSeparator 389 delete options.groupSeparator; 390 delete options.decimalSeparator; 391 const formatter = new Intl.NumberFormat( 392 'de\u002DDE', 393 Object.assign({ 394 style: 'currency', 395 currency: 'EUR', 396 signDisplay: showSign ? 'always' : 'auto' 397 }, options) 398 ); 399 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 400 formatter.formatToParts(value).map(({type, value}) => { 401 switch (type) { 402 case 'currency': 403 return '\u20AC' || value; 404 case 'minusSign': 405 return '- '; 406 case 'plusSign': 407 return '+ '; 408 case 'group': 409 return groupSeparator !== undefined ? groupSeparator : value; 410 case 'decimal': 411 return decimalSeparator !== undefined ? decimalSeparator : value; 412 default : 413 return value; 414 } 415 }).reduce((string, part) => string + part) : 416 formatter.format(value); 417 } 418 419 const formatStr = function (str, nStart) { 420 const args = Array.from(arguments).slice(2); 421 422 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 423 const idx = parseInt(n) - nStart; 424 425 if (args[idx] === null || args[idx] === void 0) { 426 return m; 427 } 428 return p.length % 2 429 ? p.slice(0, -1).replace('%%', '%') + args[idx] 430 : p.replace('%%', '%') + n; 431 }) 432 } 433 434 hyva.str = function (string) { 435 const args = Array.from(arguments); 436 args.splice(1, 0, 1); 437 438 return formatStr.apply(undefined, args); 439 } 440 441 hyva.strf = function () { 442 const args = Array.from(arguments); 443 args.splice(1, 0, 0); 444 445 return formatStr.apply(undefined, args); 446 } 447 448 /** 449 * Take a html string as `content` parameter and 450 * extract an element from the DOM to replace in 451 * the current page under the same selector, 452 * defined by `targetSelector` 453 */ 454 hyva.replaceDomElement = (targetSelector, content) => { 455 // Parse the content and extract the DOM node using the `targetSelector` 456 const parser = new DOMParser(); 457 const doc = parser.parseFromString(content, 'text/html');
458 const contentNode = doc.querySelector(targetSelector); 459 460 // Bail if content or target can't be found 461 if (!contentNode || !document.querySelector(targetSelector)) { 462 return; 463 } 464 465 hyva.activateScripts(contentNode); 466 467 // Replace the old DOM node with the new content 468 document.querySelector(targetSelector).replaceWith(contentNode); 469 470 // Reload customerSectionData and display cookie-messages if present 471 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 472 hyva.initMessages(); 473 } 474 475 hyva.removeScripts = (contentNode) => { 476 const scripts = contentNode.getElementsByTagName('script'); 477 for (let i = 0; i < scripts.length; i++) { 478 scripts[i].parentNode.removeChild(scripts[i]); 479 } 480 const templates = contentNode.getElementsByTagName('template'); 481 for (let i = 0; i < templates.length; i++) { 482 const container = document.createElement('div'); 483 container.innerHTML = templates[i].innerHTML; 484 hyva.removeScripts(container); 485 templates[i].innerHTML = container.innerHTML; 486 } 487 } 488 489 hyva.activateScripts = (contentNode) => { 490 // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM. 491 const scripts = Array.from(contentNode.getElementsByTagName('script')); 492 493 // Iterate over all script tags to duplicate+inject each into the head 494 for (const original of scripts) { 495 const script = document.createElement('script'); 496 original.type && (script.type = original.type); 497 script.innerHTML = original.innerHTML; 498 499 // Remove the original (non-executing) script from the contentNode 500 original.parentNode.removeChild(original) 501 502 // Add script to head 503 document.head.appendChild(script); 504 } 505 506 return contentNode; 507 } 508 509 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 510 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 511 512 let currentTrap; 513 514 const focusableElements = (rootElement) => { 515 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 516 return Array.from(rootElement.querySelectorAll(selector)) 517 .filter(el => { 518 return el.style.display !== 'none' 519 && !el.disabled 520 && el.tabIndex !== -1 521 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 522 }) 523 } 524 525 const focusTrap = (e) => { 526 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 527 if (!isTabPressed) return; 528 529 const focusable = focusableElements(currentTrap) 530 const firstFocusableElement = focusable[0] 531 const lastFocusableElement = focusable[focusable.length - 1] 532 533 e.shiftKey 534 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 535 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 536 }; 537 538 hyva.releaseFocus = (rootElement) => { 539 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 540 currentTrap.removeEventListener('keydown', focusTrap) 541 currentTrap = null 542 } 543 } 544 hyva.trapFocus = (rootElement) => { 545 if (!rootElement) return; 546 hyva.releaseFocus() 547 currentTrap = rootElement 548 rootElement.addEventListener('keydown', focusTrap) 549 const firstElement = focusableElements(rootElement)[0] 550 firstElement && firstElement.focus() 551 } 552 553 hyva.safeParseNumber = (rawValue) => { 554 const number = rawValue ? parseFloat(rawValue) : null; 555 556 return Array.isArray(number) || isNaN(number) ? rawValue : number; 557 } 558 559 const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(''); 560 hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => { 561 562 const camelCase = toCamelCase(name);
563 const key = '__hyva_bool_' + name 564 565 return new Proxy(Object.assign( 566 additionalMethods, 567 { 568 [key]: !!value, 569 [name]() {return !!this[key]}, 570 ['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine 571 ['not' + camelCase]() {return !this[key]}, 572 ['toggle' + camelCase]() {this[key] = !this[key]}, 573 [`set${camelCase}True`]() {this[key] = true}, 574 [`set${camelCase}False`]() {this[key] = false}, 575 } 576 ), { 577 set(target, prop, value) { 578 return prop === name 579 ? (target[key] = !!value) 580 : Reflect.set(...arguments); 581 } 582 }) 583 } 584 585 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 586 window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true}); 587 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 588 589 }( window.hyva = window.hyva || {} )); 590 //# sourceURL=hyva.js 591</script>
vendor: 1 bytes, line 591
591
592<script type="speculationrules"> 593{ 594 "tag": "Hyva Theme", 595 "prefetch": [{ 596 "source": "document", 597 "where": { 598 "and": [ 599 { "href_matches": "/*" }, 600 { "not": { 601 "href_matches": ["/customer/*","/search/*","/sales/*","/wishlist/*","/checkout/*","/paypal/*","/newsletter/*","/stores/store/redirect/*"] }}, 602 { "not": { 603 "selector_matches": [".no-preload", ".do-not-prerender", "[download]", "[rel~=nofollow]", "[target]"] 604 }} 605 ] 606 }, 607 "eagerness": "moderate" 608 }] 609} 610</script>
610 611<style>.bh7cydt-s{margin-bottom:16px !important}.nt3kdv0>.mgz-element-inner{padding:0}.k5t1l91-s{margin-right:0 !important;margin-bottom:16px !important;margin-left:0 !important}.enmcybr{border:16px solid transparent}.enmcybr>.mgz-element-inner{padding:0;margin:0}.crgxcif-s{padding-bottom:32px !important}.mgz-element.crgxcif .mgz-single-image-wrapper{border-radius:0}.mgz-element.crgxcif .image-content{width:100%;text-align:center}.mgz-element.crgxcif img{border-radius:0}.mgz-element.uxn4t2d .mgz-single-image-wrapper{border-radius:0}.mgz-element.uxn4t2d .image-content{width:100%;text-align:center}.mgz-element.uxn4t2d img{border-radius:0}.kxaicg9-s{padding-bottom:32px !important}.mgz-element.kxaicg9 .mgz-single-image-wrapper{border-radius:0}.mgz-element.kxaicg9 .image-content{width:100%;text-align:center}.mgz-element.kxaicg9 img{border-radius:0}.mgz-element.n3atxmv .mgz-single-image-wrapper{border-radius:0}.mgz-element.n3atxmv .image-content{width:100%;text-align:center}.mgz-element.n3atxmv img{border-radius:0}.ixd5jby-s{padding-bottom:32px !important}.mgz-element.ixd5jby .mgz-single-image-wrapper{border-radius:0}.mgz-element.ixd5jby .image-content{width:100%;text-align:center}.mgz-element.ixd5jby img{border-radius:0}.mgz-element.f9qmmxj .mgz-single-image-wrapper{border-radius:0}.mgz-element.f9qmmxj .image-content{width:100%;text-align:center}.mgz-element.f9qmmxj img{border-radius:0}.gf644nr-s{padding-bottom:32px !important}.mgz-element.gf644nr .mgz-single-image-wrapper{border-radius:0}.mgz-element.gf644nr .image-content{width:100%;text-align:center}.mgz-element.gf644nr img{border-radius:0}.mgz-element.ld114oc .mgz-single-image-wrapper{border-radius:0}.mgz-element.ld114oc .image-content{width:100%;text-align:center}.mgz-element.ld114oc img{border-radius:0}.rbecd04-s{margin-right:-16px !important;margin-left:-16px !important}.dd5y50s,.nqx1tbq,.vj9j2ve,.fppo318{border:16px solid transparent}.dd5y50s>.mgz-element-inner,.nqx1tbq>.mgz-element-inner,.vj9j2ve>.mgz-element-inner,.fppo318>.mgz-element-inner{padding:0;margin:0}.mgz-element.atesiee .mgz-carousel .item-content{width:100%}.ojc62w1>.mgz-element-inner{padding:0}.mo2vdm1-s{margin-bottom:32px !important}.dmk9wr6>.mgz-element-inner{padding:0}.ugqvjke .mgz-block-heading-line:before{height:1px;background-color:#cecece}.j3c4x8i>.mgz-element-inner,.tjtqmp1>.mgz-element-inner{padding:0}.m51uv2k-s{margin-top:-20px !important}.b4cb6b6-s{margin-bottom:10px !important}.et3087n-s{margin-top:-25px !important}.fadokag-s{margin-top:5px !important;margin-bottom:5px !important}.b4cb6b6>.mgz-element-inner,.fadokag>.mgz-element-inner{padding:0}.fa-facebook{background:unset;color:unset}.fa-instagram{background:unset;color:unset}.fa-youtube{background:unset;color:unset}.fa-android{background:unset;color:unset}</style></head> 612<body id="html-body" class="cms-startseite cms-index-index page-layout-1column"> 613 <div class="headertopfix" id="myHeadertopfix"> 614 <div class="ourbarfix"> 615 <span> 616 <div class="mh_serviceLinksWrapper"><ul class="mh_panelHeaderList"> 617 <li class="mh_panelHeaderItem"> 618 <a href="/gutschein">Der Jost Gutschein â passt immer!</a> 619 </li> 620</ul></div> 621 </span> 622 </div> 623 </div> 624 <style> 625 /* Style the header */ 626 .headertopfix { 627 padding: 10px 16px; 628 background: #555; 629 color: #f1f1f1; 630 text-align:center; 631 } 632 633 /* Page content */ 634 .contenttopfix { 635 padding: 16px; 636 637 } 638 /* The sticky class is added to the header with JS when it reaches its scroll position */ 639 .stickytopfix { 640 position: fixed; 641 top: 0; 642 width: 100%; 643 z-index: 1000; 644 } 645 646 /* Add some top padding to the page content to prevent sudden quick movement (as the header gets a new position at the top of the page (position:fixed and top:0) */ 647 .stickytopfix + .contenttopfix { 648 padding-top: 102px; 649 } 650 .headertopfix span.topfix-close { 651 background-color: #FAD163; 652 border: 2px solid #735005; 653 cursor: pointer; 654 display: block; 655 float: right; 656 margin-right: 20px; 657 padding-left: 4px; 658 padding-right: 4px; 659 text-decoration: none; 660 } 661 .headertopfix .topfix-close a { 662 text-decoration: none; 663 color: #735005; } 664 .headertopfix .topfix-close a:hover { 665 text-decoration: none; 666 } 667 </style> 668
668<script> 669 670 // require([ 671 // 'jquery', 672 // 'jquery/jquery.cookie' 673 // ], function ($) { 674 // window.onscroll = function () { 675 // topfixFunction() 676 // }; 677 678 // // Get the header 679 // var header = document.getElementById("myHeadertopfix"); 680 // // Get the offset position of the navbar 681 // var sticky = header.offsetTop; 682 // // /* 683 // function readCookie(name) { 684 // var nameEQ = name + '='; 685 // var ca = document.cookie.split(';'); 686 // for (var i = 0; i < ca.length; i++) { 687 // var c = ca[i]; 688 // while (c.charAt(0) == ' ') 689 // c = c.substring(1, c.length); 690 // if (c.indexOf(nameEQ) == 0) 691 // return c.substring(nameEQ.length, c.length); 692 // } 693 // return null; 694 // }*/ 695 // function createCookie(name, value, days) { 696 // if (days) { 697 // var date = new Date(); 698 // date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 699 // var expires = ';expires=' + date.toGMTString(); 700 // } 701 // else 702 // var expires = ''; 703 // document.cookie = name + '=' + value + expires + '; path=/'; 704 // } 705 706 // // Add the sticky class to the header when you reach its scroll position. Remove "sticky" when you leave the scroll position 707 // function topfixFunction() { 708 // if (window.pageYOffset > sticky) { 709 // header.classList.add("stickytopfix"); 710 // } else { 711 // header.classList.remove("stickytopfix"); 712 // } 713 // } 714 // }); 715 716 </script>
716 717<input name="form_key" type="hidden" value="VYIswpNByTPP3EWM" /> 718 <noscript> 719 <section 720 class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal" 721 aria-labelledby="messageGlobalNoScriptMessage" 722 > 723 <div class="container text-center"> 724 <p id="messageGlobalNoScriptMessage"> 725 <strong>JavaScript scheint in Ihrem Browser deaktiviert zu sein.</strong> 726 <span> 727 Um unsere Website in bester Weise zu erfahren, aktivieren Sie Javascript in Ihrem Browser. </span> 728 </p> 729 </div> 730 </section> 731 </noscript> 732 733 734
735<script> 736 'use strict'; 737 738 (function () { 739 window.amGdprCookieBar = { 740 isEnabled: 1, 741 742 /** 743 * @public 744 * @returns {int} 745 */ 746 getIsEnabled() { 747 return this.isEnabled; 748 } 749 } 750 })(); 751</script>
751 752
753<script data-cfasync="false"> 754 window.amastyCookieManager = window.amastyCookieManager || {}; 755</script>
755 756 757<div x-data="initAmastyCookieBar" 758 x-bind="eventListeners" 759 x-cloak 760 id="am-cookie-bar" 761 > 762 <dialog 763 class="m-0 w-full p-4 md:p-2 bg-ambar-background max-w-none inset-y-auto bottom-0 z-50 inset-y-0" 764 data-dialog-ref-name="am-cookie-bar" 765 closeby="any" 766 aria-label="Cookie Bar" 767 x-bind="dialogConfig" 768 x-htmldialog.modeless="hide" 769 x-ref="am-cookie-bar" 770 ><span tabindex="0" class="focus:outline-hidden"></span> 771<div class="flex w-full justify-center"> 772 <div class="flex w-full justify-center flex-col max-w-screen-sm"> 773 <div class="w-full"> 774 <p id="amcookie-bar-content" class="max-h-[30vh] text-sm text-ambar-policy-text" > 775 Wir verwenden Cookies, um unsere Dienste zu verbessern, persönliche Angebote zu machen und Ihre Erfahrung zu verbessern. Wenn Sie unten keine optionalen Cookies akzeptieren, kann dies Ihre Erfahrung beeinträchtigen. Wenn Sie mehr wissen möchten, lesen Sie bitte die <a href="datenschutz" title="Datenschutz"> Datenschutzerklärung </a>. </p> 776 </div> 777 <div class="flex flex-wrap w-full justify-center gap-2 mt-4"> 778 779 780<button 781 type="button" 782 x-data="initAmCookieActionDispatcherBtn" 783 data-dispatch-action="cookiebar-action-allow" 784 @click.prevent="actiondispatchHandler" 785 class="ambar-btn-accept ambar-action-btn w-full justify-center w-full md:max-w-[30%] mb-2" 786> 787 Alle akzeptieren</button> 788 789<button 790 type="button" 791 x-data="initAmCookieActionDispatcherBtn" 792 data-dispatch-action="cookiebar-action-settings" 793 @click.prevent="actiondispatchHandler" 794 class="ambar-btn-settings ambar-action-btn w-full justify-center md:max-w-[30%] mb-2" 795> 796 Einstellungen bearbeiten</button> 797 </div> 798 </div> 799</div> 800 <button @click="closeCookieBarHandler" 801 aria-label="Close Cookie Bar" 802 class="absolute right-2 top-2 text-gray-300 transition 803 hover:text-black focus:drop-shadow-md hover:drop-shadow-md" 804 > 805 <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" 806 stroke="currentColor" stroke-width="2"> 807 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 808 </svg> 809 </button> 810 811</dialog> 812</div> 813
814<script data-cfasync="false"> 815 'use strict'; 816 817 function initAmastyCookieBar() { 818 return { 819 ...hyva.modal({ 820 duration: 150, 821 transitionEnter: 'transform duration-150', 822 transitionLeave: 'transform duration-150' 823 }), 824 eventListeners: { 825 ['@close-cookie-bar']() { 826 this.hide('am-cookie-bar'); 827 }, 828 ['@open-cookie-bar']() { 829 this.show('am-cookie-bar'); 830 this.$nextTick(() => hyva.trapFocus(this.modalElement)); 831 }, 832 ['@amasty-cookie-group-updated.window']() { 833 const lastUpdate = Alpine.store('AmastyCookieGroups').lastUpdate; 834 835 if (this.isShowNotificationBar(this.firstShowProcess, lastUpdate)) { 836 if (!this.opened['am-cookie-bar']) { 837 this.show('am-cookie-bar'); 838 window.dispatchEvent(new CustomEvent('amcookie-show-notification-bar')); 839 } 840 this.$nextTick(() => hyva.trapFocus(this.modalElement)); 841 } else { 842 !!this.opened['am-cookie-bar'] && 843 this.hide('am-cookie-bar'); 844 } 845 } 846 }, 847 848 firstShowProcess: '0', 849 850 /** 851 * @returns {void} 852 */ 853 init: function () { 854 window.isGdprCookieEnabled = true; 855 Alpine.store('AmastyCookieGroups').updateGroupData(); 856 this.modalElement = this.$refs['am-cookie-bar']; 857 this.modalElement.setAttribute('aria-describedby', 'amcookie-bar-content'); 858 }, 859 860 /** 861 * @param {string|number} firstShowProcess 862 * @param {number} lastUpdate 863 * @returns {boolean} 864 */ 865 isShowNotificationBar: function (firstShowProcess, lastUpdate) { 866 return (this.isNeedFirstShow(firstShowProcess, lastUpdate) && !hyva.getCookie('amcookie_allowed') 867 || this.isNeedShowOnUpdate(lastUpdate)); 868 }, 869 870 /** 871 * @param {string|number} firstShowProcess 872 * @param {number} lastUpdate 873 * @returns {boolean} 874 */ 875 isNeedFirstShow: function (firstShowProcess, lastUpdate) { 876 hyva.getBrowserStorage().setItem('amCookieBarFirstShowTime', lastUpdate); 877 878 if (firstShowProcess === '0') { 879 return true; 880 } 881 882 if (hyva.getBrowserStorage().getItem('amCookieBarFirstShow') !== '1') { 883 hyva.getBrowserStorage().setItem('amCookieBarFirstShow', '1'); 884 885 return true; 886 } 887 888 return false; 889 }, 890 891 /** 892 * @param {number} lastUpdate 893 * @returns {boolean} 894 */ 895 isNeedShowOnUpdate: function (lastUpdate) { 896 if (!lastUpdate) { 897 return false; 898 } 899 900 return this.isNeedShowAfterLastVisit(lastUpdate) || this.isNeedShowAfterLastAccept(lastUpdate); 901 }, 902 903 /** 904 * @param {number} lastUpdate 905 * @returns {boolean} 906 */ 907 isNeedShowAfterLastVisit: function (lastUpdate) { 908 let needToShowAfterLastVisit = 909 lastUpdate > hyva.getBrowserStorage().getItem('amCookieBarFirstShowTime'); 910 911 if (needToShowAfterLastVisit) { 912 hyva.getBrowserStorage().setItem('amCookieBarFirstShow', null); 913 this.clearAmCookieAllowed(); 914 } 915 916 return needToShowAfterLastVisit; 917 }, 918 919 /** 920 * @param {number} lastUpdate 921 * @returns {boolean} 922 */ 923 isNeedShowAfterLastAccept: function (lastUpdate) { 924 let needToShowAfterLastAccept = false;
925 926 if (hyva.getBrowserStorage().getItem('am-last-cookie-acceptance')) { 927 needToShowAfterLastAccept = 928 lastUpdate > hyva.getBrowserStorage().getItem('am-last-cookie-acceptance'); 929 } 930 931 if (needToShowAfterLastAccept) { 932 this.clearAmCookieAllowed(needToShowAfterLastAccept); 933 } 934 935 return needToShowAfterLastAccept; 936 }, 937 938 /** 939 * @returns {void} 940 */ 941 closeCookieBarHandler: function () { 942 this.$dispatch('close-cookie-bar'); 943 }, 944 945 /** 946 * @param {boolean} needToShowAfterLastAccept 947 * @returns {void} 948 */ 949 clearAmCookieAllowed: function (needToShowAfterLastAccept = false) { 950 hyva.setCookie('amcookie_allowed', '', -1, true); 951 952 const amastyCookieManager = window.amastyCookieManager ?? {}; 953 const groupData = amastyCookieManager.getAmastyCookieGroupStorage?.()?.groupData ?? []; 954 955 if (needToShowAfterLastAccept && !!groupData.length) { 956 const disallowedCookies = groupData 957 .filter(group => !group.isEssential) 958 .flatMap(group => group.cookies?.map(cookie => cookie.name) ?? []); 959 960 hyva.setCookie('amcookie_disallowed', disallowedCookies.join(',')); 961 962 amastyCookieManager.deleteDisallowedCookie?.(); 963 amastyCookieManager.getAmastyCookieGroupStorage?.()?.updateGroupDataPermanently( 964 groupData.map((group) => { 965 return { 966 ...group, 967 checked: group.isEssential 968 } 969 }) 970 ); 971 } 972 } 973 }; 974 } 975 976 window.addEventListener('alpine:init', () => Alpine.data('initAmastyCookieBar', initAmastyCookieBar), {once: true}); 977</script>
977 978
979<script> 980 (function(hyva) { 981 const formValidationRules = { 982 required(value, options, field, context) { 983 const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, 984 fieldName = getFieldName(field), 985 msg = fieldName 986 ? hyva.str('\u00251\u0020field\u0020is\u0020required.', fieldName) 987 : 'Dies\u0020ist\u0020ein\u0020Pflichtfeld.'; 988 989 if (el.type === 'radio' || el.type === 'checkbox') { 990 return (value === undefined || value.length === 0) ? msg : true; 991 } 992 993 el.setAttribute('required', ''); 994 el.checkValidity(); 995 996 return el.validity.valueMissing ? msg : true; 997 }, 998 maxlength(value, options, field, context) { 999 const n = Number(options) 1000 if (value.length > n) { 1001 const fieldName = getFieldName(field); 1002 return fieldName 1003 ? n === 1 1004 ? hyva.str('\u00251\u0020field\u0020cannot\u0020be\u0020longer\u0020than\u00201\u0020character.', fieldName) 1005 : hyva.str('\u00251\u0020field\u0020cannot\u0020be\u0020longer\u0020than\u0020\u00252\u0020characters.', fieldName, options) 1006 : n === 1 1007 ? 'Bitte\u0020geben\u0020Sie\u0020nicht\u0020mehr\u0020als\u00201\u0020Zeichen\u0020ein.' 1008 : hyva.strf('Bitte\u0020geben\u0020Sie\u0020nicht\u0020mehr\u0020als\u0020\u00250\u0020Zeichen\u0020ein.', options); 1009 } 1010 return true; 1011 }, 1012 minlength(value, options, field, context) { 1013 const n = Number(options) 1014 if (value.length > 0 && value.length < n) { 1015 const fieldName = getFieldName(field); 1016 return fieldName 1017 ? n === 1 1018 ? hyva.str('\u00251\u0020field\u0020must\u0020be\u0020at\u0020least\u00201\u0020character\u0020long.', fieldName) 1019 : hyva.str('\u00251\u0020field\u0020must\u0020be\u0020at\u0020least\u0020\u00252\u0020characters\u0020long.', fieldName, options) 1020 : n === 1 1021 ? 'Bitte\u0020geben\u0020Sie\u0020mindestens\u00201\u0020Zeichen\u0020ein.' 1022 : hyva.strf('Bitte\u0020geben\u0020Sie\u0020mindestens\u0020\u00250\u0020Zeichen\u0020ein.', options); 1023 } 1024 return true; 1025 }, 1026 max(value, options, field, context) { 1027 field.element.setAttribute('max', options); 1028 field.element.checkValidity(); 1029 if (field.element.validity.rangeOverflow) { 1030 const fieldName = getFieldName(field); 1031 return fieldName 1032 ? hyva.str('\u00251\u0020field\u0020must\u0020contain\u0020a\u0020value\u0020less\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00252\u0022.', fieldName, options) 1033 : hyva.strf('Bitte\u0020geben\u0020Sie\u0020einen\u0020Wert\u0020ein,\u0020der\u0020kleiner\u0020oder\u0020gleich\u0020\u0022\u00250\u0022\u0020ist.', options); 1034 } 1035 return true; 1036 }, 1037 min(value, options, field, context) { 1038 field.element.setAttribute('min', options); 1039 field.element.checkValidity(); 1040 if (field.element.validity.rangeUnderflow) { 1041 const fieldName = getFieldName(field); 1042 return fieldName 1043 ? hyva.str('\u00251\u0020field\u0020must\u0020contain\u0020a\u0020value\u0020greater\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00252\u0022.', fieldName, options) 1044 : hyva.strf('Bitte\u0020geben\u0020Sie\u0020einen\u0020Wert\u0020gr\u00F6\u00DFer\u0020oder\u0020gleich\u0020\u0022\u00250\u0022\u0020ein.', options); 1045 } 1046 return true; 1047 }, 1048 step(value, options, field, context) { 1049 field.element.setAttribute('step', options); 1050 field.element.checkValidity(); 1051 if (field.element.validity.stepMismatch) { 1052 const val = Number(value), 1053 step = Number(options), 1054 fieldName = getFieldName(field), 1055 nearestLowerValue = Math.floor(val / step) * step,
1056 nearestUpperValue = Math.ceil(val / step) * step; 1057 return fieldName 1058 ? hyva.str('\u00251\u0020field\u0020is\u0020invalid.\u0020The\u0020two\u0020nearest\u0020valid\u0020values\u0020are\u0020\u0022\u00252\u0022\u0020and\u0020\u0022\u00253\u0022.', fieldName, nearestLowerValue, nearestUpperValue) 1059 : hyva.strf('Bitte\u0020geben\u0020Sie\u0020einen\u0020g\u00FCltigen\u0020Wert\u0020ein.\u0020Die\u0020beiden\u0020n\u00E4chstliegenden\u0020g\u00FCltigen\u0020Werte\u0020sind\u0020\u0022\u00250\u0022\u0020und\u0020\u0022\u00251\u0022.', nearestLowerValue, nearestUpperValue); 1060 } 1061 return true; 1062 }, 1063 pattern(value, options, field, context) { 1064 field.element.setAttribute('pattern', options); 1065 field.element.checkValidity(); 1066 if (field.element.validity.patternMismatch) { 1067 const fieldName = getFieldName(field); 1068 return fieldName 1069 ? field.element.pattern 1070 ? hyva.str('\u00251\u0020field\u0020must\u0020match\u0020the\u0020requested\u0020format\u003A\u0020\u00252.', fieldName, field.element.pattern) 1071 : hyva.str('\u00251\u0020field\u0020must\u0020match\u0020the\u0020requested\u0020format.', fieldName) 1072 : field.element.pattern 1073 ? hyva.strf('Bitte\u0020entsprechen\u0020Sie\u0020dem\u0020gew\u00FCnschten\u0020Format\u003A\u0020\u00250.', field.element.pattern) 1074 : 'Bitte\u0020beachten\u0020Sie\u0020das\u0020gew\u00FCnschte\u0020Format.'; 1075 } 1076 return true; 1077 }, 1078 email(value, options, field, context) { 1079 const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i; 1080 if (value.length > 0 && !rule.test(value)) { 1081 const fieldName = getFieldName(field); 1082 return fieldName 1083 ? hyva.str('\u00251\u0020field\u0020must\u0020contain\u0020a\u0020valid\u0020email\u0020address\u0020\u0028Ex\u003A\u0020johndoe\u0040domain.com\u0029.', fieldName) 1084 : 'Bitte\u0020geben\u0020Sie\u0020eine\u0020g\u00FCltige\u0020E\u002DMail\u002DAdresse\u0020ein\u0020\u0028z.B\u003A\u0020johndoe\u0040domain.com\u0029.'; 1085 } 1086 return true; 1087 }, 1088 password(value, options, field, context) { 1089 const rule = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/; 1090 if (value.length > 0 && !rule.test(value)) { 1091 const fieldName = getFieldName(field); 1092 return fieldName 1093 ? hyva.str('\u00251\u0020field\u0020must\u0020contain\u0020at\u0020least\u0020one\u0020upper\u0020case,\u0020one\u0020lower\u0020case,\u0020one\u0020digit\u0020and\u0020one\u0020special\u0020character\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026\u002A\u002D\u0029', fieldName) 1094 : 'Bitte\u0020geben\u0020Sie\u0020mindestens\u0020einen\u0020Gro\u00DFbuchstaben,\u0020einen\u0020Kleinbuchstaben,\u0020eine\u0020Ziffer\u0020und\u0020ein\u0020Sonderzeichen\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026amp\u003B\u002A\u002D\u0029\u0020an.'; 1095 } 1096 return true; 1097 }, 1098 equalTo(value, options, field, context) { 1099 const dependencyField = context.fields[options].element; 1100 if (value !== dependencyField.value) { 1101 const dependencyFieldName = 1102 dependencyField.label || 1103 dependencyField.title || 1104 (dependencyField.labels && dependencyField.labels[0] && dependencyField.labels[0].innerText) || 1105 dependencyField.name, 1106 fieldName = getFieldName(field); 1107 return fieldName
1108 ? hyva.str('\u00251\u0020field\u0020value\u0020must\u0020be\u0020the\u0020same\u0020as\u0020\u0022\u00252\u0022.', fieldName, dependencyFieldName) 1109 : hyva.strf('Der\u0020Wert\u0020dieses\u0020Feldes\u0020muss\u0020mit\u0020\u0022\u00250\u0022\u0020identisch\u0020sein.', dependencyFieldName); 1110 } 1111 return true; 1112 } 1113 }; 1114 1115 function raceSome(promises, pred) { 1116 return new Promise((resolve, reject) => { 1117 1118 if (promises.length === 0) { 1119 return resolve(); 1120 } 1121 1122 let settled = false, nDone = 0; 1123 1124 const resolveIf = v => { 1125 if (!settled && (pred(v) || ++nDone === promises.length)) { 1126 settled = true; 1127 resolve(v); 1128 } 1129 return v; 1130 } 1131 1132 promises.map(promise => { 1133 promise.then(resolveIf).catch(reason => { 1134 settled = true; 1135 reject(reason) 1136 }); 1137 return promise; 1138 }); 1139 }); 1140 } 1141 1142 const INPUT_ATTRIBUTE_RULES = {min: 'min', max: 'max', required: 'required', minlength: 'minlength', maxlength: 'maxlength', step: 'step', pattern: 'pattern'} 1143 const INPUT_TYPE_RULES = {email: 'email'} 1144 1145 function getRules(element) { 1146 let rules = {}; 1147 Object.keys(INPUT_ATTRIBUTE_RULES).forEach(attrName => { 1148 if (element.hasAttribute(attrName)) { 1149 rules[INPUT_ATTRIBUTE_RULES[attrName]] = element.getAttribute(attrName); 1150 } 1151 }) 1152 if (INPUT_TYPE_RULES[element.type]) { 1153 rules[INPUT_TYPE_RULES[element.type]] = true; 1154 } 1155 1156 if (element.dataset.validate) { 1157 try { 1158 Object.assign(rules, JSON.parse(element.dataset.validate)); 1159 } catch (error) { 1160 console.error('Validator error. Cannot parse data-validate attribute of element:\n', element); 1161 } 1162 } 1163 1164 return rules; 1165 } 1166 1167 function isInvalidRuleResult(ruleState) { 1168 return typeof ruleState === 'string' || !ruleState || (ruleState.type && ruleState.content); 1169 } 1170 1171 async function runValidateFn(rule, options, value, field) { 1172 return formValidationRules[rule](value, options, field, this); 1173 } 1174 1175 function generateId() { 1176 let id; 1177 do { 1178 id = `${this.idPrefix}-${++this.idSeq}`; 1179 } while (document.getElementById(id)); 1180 return id; 1181 } 1182 1183 function isVisible(element) { 1184 const el = element.type !== 'hidden' ? element : (element.parentElement || {}); 1185 return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length) 1186 } 1187 1188 function elementWillValidate(element) { 1189 return (element.willValidate || element.type === 'hidden') 1190 && element.tagName !== 'BUTTON' 1191 && element.disabled === false 1192 && !(element.tagName === 'INPUT' && element.type === 'submit') 1193 && (element.hasAttribute('data-validate-hidden') || isVisible(element)) 1194 } 1195 1196 function createMessageContainer(el, fieldWrapperClassName) { 1197 if (! el.parentElement) { 1198 return; 1199 } 1200 const refocus = document.activeElement === el; 1201 const wrapper = document.createElement('div'); 1202 wrapper.classList.add.apply(wrapper.classList, fieldWrapperClassName.split(' ')); 1203 el.parentElement.insertBefore(wrapper, el); 1204 wrapper.appendChild(el); 1205 refocus && document.activeElement !== el && el.focus(); 1206 return wrapper; 1207 } 1208 1209 function containerNotFound(selector, el) { 1210 const msg = `Cannot find message container element ${selector} of ${el.name}`; 1211 console.error(msg, el); 1212 throw msg; 1213 } 1214 1215 function createTextInputFrom(el) { 1216 const text = document.createElement('INPUT'); 1217 text.type = 'text'; 1218 text.value = el.value; 1219 return text; 1220 } 1221 1222 function classNamesToSelector(classNames) { 1223 return classNames.split(' ') 1224 .filter(className => className.length > 0) 1225 .map(className => `.${className}`) 1226 .join('') 1227 } 1228 1229 function hasMessagesWrapper(field, messagesWrapperClassName) { 1230 return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); 1231 } 1232
1233 function getMessagesWrapper(field, messagesWrapperClassName) { 1234 if (hasMessagesWrapper.call(this, field, messagesWrapperClassName)) { 1235 return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); 1236 } 1237 1238 const msgWrapper = document.createElement('ul'); 1239 const msgId = generateId.call(this); 1240 msgWrapper.id = msgId; 1241 field.element.setAttribute('aria-errormessage', msgId); 1242 field.element.setAttribute('aria-describedby', msgId); 1243 msgWrapper.classList.add.apply(msgWrapper.classList, messagesWrapperClassName.split(' ')); 1244 if (field.validateOnChange) { 1245 msgWrapper.setAttribute('aria-live', 'polite'); 1246 } 1247 this.getMessageContainer(field).appendChild(msgWrapper); 1248 1249 return msgWrapper; 1250 } 1251 1252 function getCheckedValues(field) { 1253 const name = field.element.name.replace(/([\\"])/g, '\\$1'); 1254 const elements = field.element.form.querySelectorAll('input[name="' + name + '"]:checked'); 1255 return Array.from(elements).map(el => el.value); 1256 } 1257 1258 function escapeHtml(s) { 1259 const div = document.createElement('div') 1260 div.innerText = s; 1261 return div.innerHTML; 1262 } 1263 1264 1265 function formValidation(form, options = {}) { 1266 const formElement = form || this.$el; 1267 1268 if (formElement.dataset && formElement.dataset.options) { 1269 try { 1270 options = Object.assign(options, JSON.parse(formElement.dataset.options || '{}')); 1271 } catch (e) { 1272 throw new Error('Cannot read the form options from the data-options attribute: not valid JSON'); 1273 } 1274 } 1275 1276 // Disable browser default validation 1277 if (formElement.tagName === 'FORM') { 1278 formElement.setAttribute('novalidate', ''); 1279 } else { 1280 console.error('formValidation can be initialized only on FORM element', formElement); 1281 return; 1282 } 1283 1284 options = Object.assign({ 1285 fieldWrapperClassName: 'field field-reserved', 1286 messagesWrapperClassName: 'messages', 1287 validClassName: 'field-success', 1288 invalidClassName: 'field-error', 1289 pageMessagesWrapperSelector: null, 1290 scrollToFirstError: true, 1291 }, options || {}); 1292 1293 return { 1294 state: { 1295 valid: false, 1296 }, 1297 isSubmitting: false, 1298 fields: {}, 1299 idSeq: 0, 1300 idPrefix: formElement.id || 'vld-msg', 1301 setupFields(elements) { 1302 this.fields = {}; 1303 Array.from(elements).forEach(element => { 1304 if (elementWillValidate(element)) { 1305 this.setupField(element); 1306 } 1307 }); 1308 }, 1309 setupField(element) { 1310 if (! element) return; 1311 const onChange = !!element.dataset.onChange; 1312 if (elementWillValidate(element)) { 1313 const rules = getRules(element); 1314 if (Object.keys(rules).length > 0) { 1315 if (this.fields[element.name]) { 1316 Object.assign(this.fields[element.name].rules, rules); 1317 } else { 1318 this.fields[element.name] = { 1319 element, 1320 rules: rules, 1321 validateOnChange: onChange, 1322 state: { 1323 valid: null, 1324 rules: {} 1325 } 1326 } 1327 } 1328 } 1329 } else { 1330 console.error('Element will not validate', element); 1331 } 1332 }, 1333 onSubmit(event) { 1334 if (event.target.tagName === 'FORM') { 1335 event.preventDefault(); 1336 1337 if (this.isSubmitting) return; 1338 this.isSubmitting = true; 1339 1340 this.validate() 1341 .then(() => event.target.submit()) 1342 .catch(invalidElements => { 1343 this.isSubmitting = false;
1344 }); 1345 } 1346 }, 1347 onChange(event) { 1348 event.target.dataset.onChange = 'true'; 1349 if (!Object.keys(this.fields).length) { 1350 this.setupFields(formElement.elements); 1351 } 1352 if (!Object.keys(this.fields).includes(event.target.name)) { 1353 this.setupField(event.target); 1354 } 1355 const field = this.fields[event.target.name]; 1356 1357 this.validateField(field); 1358 field && field.element.removeAttribute('data-on-change') 1359 }, 1360 validateSafe() { 1361 return new Promise(resolve => this.validate().then(() => resolve(true)).catch(() => {})) 1362 }, 1363 validate() { 1364 if (!Object.keys(this.fields).length || !Object.keys(this.fields).length !== formElement.elements.length) { 1365 this.setupFields(formElement.elements); 1366 } 1367 return new Promise(async (resolve, reject) => { 1368 if (formElement.elements) { 1369 await raceSome(this.validateFields(), result => result !== true) 1370 const invalidFields = Object.values(this.fields).filter(field => !field.state.valid); 1371 this.state.valid = invalidFields.length === 0; 1372 if (this.state.valid) { 1373 resolve(); 1374 } else { 1375 if (options.scrollToFirstError && invalidFields.length > 0) { 1376 invalidFields[0].element.focus() 1377 invalidFields[0].element.select && invalidFields[0].element.select(); 1378 } 1379 reject(invalidFields.map(field => field.element)); 1380 } 1381 } 1382 }); 1383 }, 1384 validateFields() { 1385 const fields = Object.values(this.fields); 1386 1387 fields.forEach(field => { 1388 this.getMessageContainer(field).classList.remove(options.validClassName, options.invalidClassName) 1389 }); 1390 return fields.map(field => this.validateField(field)) 1391 }, 1392 validateField(field) { 1393 if (! field || ! elementWillValidate(field.element)) { 1394 return new Promise(resolve => resolve(true)) 1395 } 1396 1397 let value; 1398 if (field.element.type === 'checkbox') { 1399 value = getCheckedValues(field); 1400 } else if (field.element.type === 'radio') { 1401 value = getCheckedValues(field)[0] || undefined; 1402 } else if (field.element.tagName === 'SELECT' && field.element.multiple) { 1403 value = Array.from(field.element.selectedOptions).map(opt => opt.value); 1404 } else { 1405 value = field.element.value; 1406 } 1407 1408 const rules = field.rules || {}; 1409 1410 field.state.valid = true; 1411 this.showFieldState(field); 1412 1413 1414 const fieldValidations = Object.keys(rules).filter(rule => formValidationRules[rule]).map(async rule => { 1415 return runValidateFn.call(this, rule, rules[rule], value, field).then(result => { 1416 field.state.rules[rule] = result; 1417 return result; 1418 }) 1419 }); 1420 1421 return new Promise(resolve => { 1422 Promise.all(fieldValidations).then(results => { 1423 field.state.valid = !elementWillValidate(field.element) || rules.length === 0 || !results.some(isInvalidRuleResult)
1424 this.showFieldState(field); 1425 resolve(field.state.valid); 1426 }) 1427 }); 1428 }, 1429 getMessagesByField(field) { 1430 const messages = []; 1431 const invalidRules = Object.keys(field.state.rules).filter(rule => isInvalidRuleResult(field.state.rules[rule])); 1432 1433 field.rules && Object.keys(field.rules).forEach((rule) => { 1434 if (invalidRules.includes(rule)) { 1435 const customMessage = field.element.getAttribute('data-msg-' + rule); 1436 const message = customMessage ? customMessage : field.state.rules[rule]; 1437 const ruleOptions = JSON.parse(JSON.stringify(field.rules[rule])); 1438 1439 if (typeof message === 'undefined' || message === null || (typeof message !== 'string' && ! message.type)) { 1440 messages.push(hyva.strf('Validation rule "%0" failed.', rule)); 1441 } else if (Array.isArray(ruleOptions)) { 1442 ruleOptions.unshift(message.type ? message.content : message); 1443 const content = hyva.strf.apply(null, ruleOptions); 1444 messages.push(message.type ? {type: message.type, content} : content); 1445 } else { 1446 const content = hyva.strf(message.type ? message.content : message, ruleOptions) 1447 messages.push(message.type ? {type: message.type, content} : content); 1448 } 1449 } 1450 }); 1451 return messages; 1452 }, 1453 /** @deprecated */ 1454 getFieldWrapper(field) { 1455 return this.getMessageContainer(field) 1456 }, 1457 getMessageContainer(field) { 1458 let container; 1459 const pageSelector = field.element.getAttribute('data-validation-container') || options.pageMessagesContainerSelector; 1460 if (pageSelector) { 1461 container = document.querySelector(pageSelector) 1462 || containerNotFound(pageSelector, field.element) 1463 } else { 1464 const containerSelector = classNamesToSelector(options.fieldWrapperClassName); 1465 container = field.element.closest(containerSelector) 1466 || createMessageContainer(field.element, options.fieldWrapperClassName) 1467 || containerNotFound(containerSelector, field.element); 1468 } 1469 1470 return container; 1471 }, 1472 showFieldState(field) { 1473 const container = this.getMessageContainer(field), 1474 hasErrorMessages = hasMessagesWrapper.call(this, field, options.messagesWrapperClassName), 1475 messages = this.getMessagesByField(field).map(m => { 1476 return m.type !== 'html' ? escapeHtml(m.type ? m.content : m) : m.content; 1477 }); 1478 container.classList.toggle(options.validClassName, field.state.valid && ! hasErrorMessages); 1479 container.classList.toggle(options.invalidClassName, !field.state.valid || hasErrorMessages); 1480 this.createHtmlErrorMessage(field, messages); 1481 1482 if (field.state.valid) { 1483 field.element.removeAttribute('aria-invalid'); 1484 } else { 1485 field.element.setAttribute('aria-invalid', 'true'); 1486 if (! document.activeElement) { 1487 field.element.focus(); 1488 } 1489 } 1490 }, 1491 removeMessages(field, messagesClass) { 1492 if (! hasMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName)) { 1493 return; 1494 } 1495 1496 const msgWrapper = getMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName); 1497 const messages = msgWrapper.querySelectorAll(`[data-msg-field='${field.element.name}']`);
1498 Array.from(messages).forEach(msg => msg.remove()); 1499 if (msgWrapper && msgWrapper.childElementCount === 0) { 1500 field.element.removeAttribute('aria-errormessage'); 1501 field.element.removeAttribute('aria-describedby'); 1502 msgWrapper.remove(); 1503 } 1504 }, 1505 createErrorMessage(field, messages) { 1506 const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) 1507 this.createHtmlErrorMessage(field, htmlMessages); 1508 }, 1509 createHtmlErrorMessage(field, messages) { 1510 this.removeMessages(field, options.messagesWrapperClassName); 1511 field.element.removeAttribute('aria-errormessage'); 1512 field.element.removeAttribute('aria-describedby'); 1513 1514 if (!field.state.valid) { 1515 const msgWrapper = this.addHtmlMessages(field, options.messagesWrapperClassName, messages); 1516 field.element.setAttribute('aria-errormessage', msgWrapper.id); 1517 field.element.setAttribute('aria-describedby', msgWrapper.id); 1518 } 1519 }, 1520 /** @deprecated */ 1521 createMessage(field, message) { 1522 return this.addMessages(field, options.messagesWrapperClassName, message); 1523 }, 1524 addMessages(field, messagesClass, messages) { 1525 const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) 1526 return this.addHtmlMessages(field, messagesClass, htmlMessages); 1527 }, 1528 addHtmlMessages(field, messagesClass, htmlMessages) { 1529 const msgWrapper = getMessagesWrapper.call(this, field, messagesClass); 1530 1531 (Array.isArray(htmlMessages) ? htmlMessages : [htmlMessages]).forEach((htmlMessage) => { 1532 const li = document.createElement('li'); 1533 li.innerHTML = htmlMessage; 1534 li.setAttribute('data-msg-field', field.element.name); 1535 msgWrapper.appendChild(li); 1536 }); 1537 1538 return msgWrapper; 1539 }, 1540 setField(name, value) { 1541 this.fields[name].element.value = value; 1542 this.fields[name].element.dispatchEvent((new Event('input'))); 1543 this.validateField(this.fields[name]); 1544 } 1545 } 1546 } 1547 1548 function getFieldName(field) { 1549 const fieldName = field.element?.getAttribute('title') 1550 || document.querySelector(`label[for="${field.element?.id}"]`)?.innerText; 1551 1552 return fieldName 1553 ? fieldName.trim() 1554 : ''; 1555 } 1556 1557 hyva.formValidation = formValidation; 1558 hyva.formValidation.rules = formValidationRules; 1559 hyva.formValidation.setInputAttributeRuleName = (attrName, ruleName) => INPUT_ATTRIBUTE_RULES[attrName] = ruleName || attrName; 1560 hyva.formValidation.setInputTypeRuleName = (typeName, ruleName) => INPUT_TYPE_RULES[typeName] = ruleName || typeName; 1561 hyva.formValidation.addRule = (name, validator) => formValidationRules[name] = validator; 1562 hyva.formValidation.getFieldName = getFieldName; 1563 }(window.hyva = window.hyva || {})); 1564 1565 window.addEventListener('alpine:init', () => { 1566 Alpine.data('hyva.formValidation', hyva.formValidation); 1567 Alpine.data('hyva.formValidation($el)', hyva.formValidation); 1568 }, {once: true}); 1569 //# sourceURL=hyva-advanced-form-validation.js 1570</script>
1570 1571<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 1572 contentarea" 1573 href="#contentarea"> 1574 <span> 1575 Direkt zum Inhalt </span> 1576</a>
1577<script> 1578 function initHeader () { 1579 return { 1580 searchOpen: false, 1581 cart: {}, 1582 isCartOpen: false, 1583 stickyHeaderApplied: false, 1584 stickyLogoVisible: false, // Initialize stickyLogoVisible 1585 getData(data) { 1586 if (data.cart) { this.cart = data.cart } 1587 }, 1588 isCartEmpty() { 1589 return !this.cart.summary_count 1590 }, 1591 toggleCart(event) { 1592 if (event.detail && event.detail.isOpen !== undefined) { 1593 this.isCartOpen = event.detail.isOpen 1594 if (!this.isCartOpen && this.$refs && this.$refs.cartButton) { 1595 this.$refs.cartButton.focus() 1596 } 1597 } else { 1598 this.isCartOpen = true 1599 } 1600 } 1601 } 1602 } 1603 1604 function initCompareHeader() { 1605 return { 1606 compareProducts: null, 1607 itemCount: 0, 1608 receiveCompareData(data) { 1609 if (data['compare-products']) { 1610 this.compareProducts = data['compare-products']; 1611 this.itemCount = this.compareProducts.count; 1612 } 1613 } 1614 } 1615 } 1616</script>
1616 1617<div id="header" 1618 class="relative header_inspeya_mobile z-30 w-full border-b bg-container-lighter border-container-lighter" 1619 x-data="initHeader()" 1620 @private-content-loaded.window="getData(event.detail.data)" 1621> 1622 <div class="container flex flex-wrap items-center justify-between w-full px-6 py-3 mx-auto mt-0"> 1623 <!--Logo--> 1624 1625<div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0 headerLogo" 1626 x-data="initStickyHeader()" 1627 x-init="init()" 1628> 1629 <a class="main_modehaus_logo flex items-center justify-center text-xl font-medium tracking-wide text-gray-800 1630 no-underline hover:no-underline font-title sticky_inspeya_mobile" id="mainLogo" 1631 href="https://www.mode-jost.de/" 1632 aria-label="Zur Startseite gehen" 1633 x-bind:class="{ 'sticky_inspeya_mobile': stickyLogoVisible }" 1634 > 1635 <!-- Display the main logo image when stickyLogoVisible is false --> 1636 <img 1637 class="main-header-logo" 1638 src="https://www.mode-jost.de/media/logo/stores/1/Jost-Logo-Web-Standard.png" 1639 alt="Mode Jost Logo" 1640 width="120" height="150" x-show="!stickyLogoVisible" 1641 /> 1642 1643 <!-- Display the sticky logo image when stickyLogoVisible is true --> 1644 <img style="display: none;" src="https://www.mode-jost.de/media/logo/stores/1/Jost-Logo-Web-Standard.png" 1645 alt="Sticky Logo" 1646 x-show="stickyLogoVisible" /> 1647 1648 1649 </a> 1650</div> 1651 1652
1653<script> 1654 function initStickyHeader() { 1655 return { 1656 stickyHeaderApplied: false, 1657 stickyLogoVisible: false, 1658 throttleTimeout: null, // Track the throttle timeout 1659 init() { 1660 // Check if the viewport width matches the criteria for mobile devices 1661 this.detectDevice(); 1662 this.addEventListeners(); 1663 }, 1664 detectDevice() { 1665 const width = window.innerWidth; 1666 const height = window.innerHeight; 1667 const resolution = width * height; 1668 if (width <= 768 ) { 1669 window.addEventListener('scroll', this.handleScrollThrottled.bind(this)); 1670 } else { 1671 this.removeStickyHeader(); 1672 } 1673 }, 1674 addEventListeners() { 1675 // Add event listener to handle viewport width changes 1676 window.addEventListener('resize', () => { 1677 this.detectDevice(); 1678 }); 1679 }, 1680 removeStickyHeader() { 1681 // Remove the sticky header class and hide the sticky logo 1682 const pageHeader = document.querySelector('.page-header'); 1683 if (pageHeader) { 1684 pageHeader.classList.remove('sticky', 'bg-white', 'z-10'); 1685 } 1686 this.stickyHeaderApplied = false; 1687 this.stickyLogoVisible = false; 1688 }, 1689 handleScrollThrottled() { 1690 // Throttle the scroll event to improve performance 1691 if (!this.throttleTimeout) { 1692 this.throttleTimeout = setTimeout(() => { 1693 this.throttleTimeout = null; 1694 this.handleScroll(); 1695 }, 100); // Adjust the throttle interval as needed (in milliseconds) 1696 } 1697 }, 1698 handleScroll() { 1699 const scrollPosition = window.pageYOffset; 1700 // Check if the scroll position reaches a certain threshold (e.g., 100 pixels) 1701 if (scrollPosition >= 60 && !this.stickyHeaderApplied) { 1702 // Add sticky header class and make the sticky logo visible 1703 const pageHeader = document.querySelector('.page-header'); 1704 if (pageHeader) { 1705 pageHeader.classList.add('sticky', 'bg-white', 'z-10'); 1706 } 1707 this.stickyHeaderApplied = true; 1708 this.stickyLogoVisible = true; 1709 } else if (scrollPosition < 60 && this.stickyHeaderApplied) { 1710 // Remove sticky header class and hide the sticky logo 1711 this.removeStickyHeader(); 1712 } 1713 } 1714 }; 1715 } 1716</script>
1716 1717<style> 1718/* Hide sticky logo on tablet & desktop */ 1719@media (min-width: 767px) { 1720 .sticky_inspeya_mobile { 1721 display: none !important; 1722 } 1723} 1724 1725/* Show only on mobile */ 1726@media (max-width: 766px) { 1727 .sticky_inspeya_mobile { 1728 display: flex !important; 1729 } 1730} 1731</style> 1732 1733 <!--Main Navigation--> 1734 <div class="z-20 order-2 sm:order-1 lg:order-2 navigation hidden lg:flex" 1735> 1736 <div class="sections nav-sections"> 1737 <nav class="navigation" data-action="navigation"> 1738 <div id="ninjamenus1" class="ninjamenus ninjamenus-horizontal ninjamenus-mobile-accordion ninjamenus-desktop ninjamenus-top" data-type="horizontal" data-mobile-type="accordion"> 1739 <div class="magezon-builder magezon-builder-preload"><div class="tba77py mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/filialen" ><span class="title">FILIALEN</span> </a> <div class="item-submenu mgz-element-inner tba77py-s"><div class="pna71lm mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner pna71lm-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="gau4rsv mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12"><div class="mgz-element-inner gau4rsv-s meusListBlock_Sub"><div class="y9xvypr mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner y9xvypr-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="wsemtd1 mgz-element mgz-element-column mgz-col-xl-3 mgz-col-lg-3 mgz-col-md-3 mgz-col-sm-12 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner wsemtd1-s"><div class="aa9r2fr mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="https://www.mode-jost.de/filialen/gruenstadt" ><span class="title">GRÃNSTADT</span> </a> <style class="mgz-style">.aa9r2fr>a{font-size:16px;font-weight:600!important;}</style></div></div></div></div>
1739<script> 1740 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1741 .then(() => { 1742 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1743 }) 1744 .then(() => { 1745 const elemId = $('.y9xvypr'); 1746 let mgzBuilder = new MagezonBuilder(elemId); 1747 }) 1748</script>
1748<style class="mgz-style">.y9xvypr-s{margin-bottom:15px !important;}</style></div></div><style class="mgz-style">.gau4rsv-s{padding:0px!important;}</style></div></div><div class="h68u94v mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner h68u94v-s"><div class="ntofreo mgz-element nav-item"><a href="https://www.mode-jost.de/filialen/frankenthal" ><span class="title">FRANKENTHAL</span> </a> <style class="mgz-style">.ntofreo>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="q7ebbev mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner q7ebbev-s"><div class="xnwx1pt mgz-element nav-item"><a href="https://www.mode-jost.de/filialen/landau" ><span class="title">LANDAU</span> </a> <style class="mgz-style">.xnwx1pt>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="uskby9e mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner uskby9e-s"><div class="q2i4x69 mgz-element nav-item"><a href="https://www.mode-jost.de/filialen/worms" ><span class="title">WORMS</span> </a> <style class="mgz-style">.q2i4x69>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="wkqh137 mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner wkqh137-s"><div class="tkxsol9 mgz-element nav-item"><a href="https://www.mode-jost.de/filialen/bruchsal" ><span class="title">BRUCHSAL</span> </a> <style class="mgz-style">.tkxsol9>a{font-size:16px;font-weight:600!important;}</style></div></div></div></div>
1748<script> 1749 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1750 .then(() => { 1751 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1752 }) 1753 .then(() => { 1754 const elemId = $('.pna71lm'); 1755 let mgzBuilder = new MagezonBuilder(elemId); 1756 }) 1757</script>
1757</div></div></div><style class="mgz-style">.tba77py-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.tba77py > .item-submenu{width:100% !important;}</style></div><div class="htd1n13 mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/aktuelles" ><span class="title">AKTUELLES</span> </a> <div class="item-submenu mgz-element-inner htd1n13-s"><div class="j7cj3qr mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner j7cj3qr-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="i3vef5f mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12"><div class="mgz-element-inner i3vef5f-s meusListBlock_Sub"><div class="bppyihm mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner bppyihm-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="viycg1j mgz-element mgz-element-column mgz-col-xl-3 mgz-col-lg-3 mgz-col-md-3 mgz-col-sm-12 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner viycg1j-s"><div class="np5rifo mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="/aktuelles/news" ><span class="title">NEWS</span> </a> <style class="mgz-style">.np5rifo>a{font-size:16px;font-weight:600!important;}</style></div></div></div></div>
1757<script> 1758 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1759 .then(() => { 1760 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1761 }) 1762 .then(() => { 1763 const elemId = $('.bppyihm'); 1764 let mgzBuilder = new MagezonBuilder(elemId); 1765 }) 1766</script>
1766<style class="mgz-style">.bppyihm-s{margin-bottom:15px !important;}</style></div></div><style class="mgz-style">.i3vef5f-s{padding:0px!important;}</style></div></div><div class="gfpwrhy mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner gfpwrhy-s"><div class="dq5u59j mgz-element nav-item"><a href="https://www.mode-jost.de/aktuelles/prospekte" ><span class="title">PROSPEKTE</span> </a> <style class="mgz-style">.dq5u59j>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="rw662uu mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner rw662uu-s"><div class="y23fnn3 mgz-element nav-item"><a href="/aktuelles/termine" ><span class="title">TERMINE</span> </a> <style class="mgz-style">.y23fnn3>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="mshmm1l mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner mshmm1l-s"><div class="cuw4gey mgz-element nav-item"><a href="https://www.mode-jost.de/aktuelles/spenden" ><span class="title">SPENDEN</span> </a> <style class="mgz-style">.cuw4gey>a{font-size:16px;font-weight:600!important;}</style></div></div></div></div>
1766<script> 1767 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1768 .then(() => { 1769 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1770 }) 1771 .then(() => { 1772 const elemId = $('.j7cj3qr'); 1773 let mgzBuilder = new MagezonBuilder(elemId); 1774 }) 1775</script>
1775</div></div></div><style class="mgz-style">.htd1n13-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.htd1n13 > .item-submenu{width:100% !important;}</style></div><div class="mb4ya1r mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/unternehmen" ><span class="title">UNTERNEHMEN</span> </a> <div class="item-submenu mgz-element-inner mb4ya1r-s"><div class="m394bx3 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner m394bx3-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="jkksax4 mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12 mgz-element-column-empty"><div class="mgz-element-inner jkksax4-s meusListBlock_Sub"><style class="mgz-style">.jkksax4-s{padding:0px!important;}</style></div></div><div class="r0dlyg0 mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner r0dlyg0-s"><div class="yplhteh mgz-element nav-item"><a href="https://www.mode-jost.de/unternehmen/ansprechpartner" ><span class="title">ANSPRECHPARTNER</span> </a> <style class="mgz-style">.yplhteh>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="wy83w6g mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner wy83w6g-s"><div class="i15kn5m mgz-element nav-item"><a href="https://www.mode-jost.de/unternehmen/geschichte" ><span class="title">GESCHICHTE</span> </a> <style class="mgz-style">.i15kn5m>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="ylrpy28 mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner ylrpy28-s"></div></div><div class="efdpssw mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner efdpssw-s"></div></div></div>
1775<script> 1776 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1777 .then(() => { 1778 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1779 }) 1780 .then(() => { 1781 const elemId = $('.m394bx3'); 1782 let mgzBuilder = new MagezonBuilder(elemId); 1783 }) 1784</script>
1784</div></div></div><style class="mgz-style">.mb4ya1r-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.mb4ya1r > .item-submenu{width:100% !important;}</style></div><div class="ma6uso2 mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/mode" ><span class="title">MODE</span> </a> <div class="item-submenu mgz-element-inner ma6uso2-s"><div class="ukicd1y mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ukicd1y-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="defmh0u mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12"><div class="mgz-element-inner defmh0u-s meusListBlock_Sub"><div class="by6hqtr mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner by6hqtr-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="q5iebgf mgz-element mgz-element-column mgz-col-xl-8 mgz-col-lg-3 mgz-col-md-3 mgz-col-sm-12 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner q5iebgf-s"><div class="lubtbi3 mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="https://www.mode-jost.de/mode/damen" ><span class="title">DAMEN</span> </a> <style class="mgz-style">.lubtbi3>a{font-size:16px;font-weight:600!important;}</style></div><div class="kqwfxhk mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="/mode/damen/damen-trends" ><span class="title">Damen Trends</span> </a> <style class="mgz-style">.kqwfxhk>a{font-size:16px;font-weight:600!important;}</style></div><div class="viutlrl mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="/mode/damen/young-fashion" ><span class="title">Young Fashion</span> </a> <style class="mgz-style">.viutlrl>a{font-size:16px;font-weight:600!important;}</style></div><div class="pw5hde2 mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="/mode/damen/schuhe" ><span class="title">Schuhe</span> </a> <style class="mgz-style">.pw5hde2>a{font-size:16px;font-weight:600!important;}</style></div></div></div></div>
1784<script> 1785 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1786 .then(() => { 1787 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1788 }) 1789 .then(() => { 1790 const elemId = $('.by6hqtr'); 1791 let mgzBuilder = new MagezonBuilder(elemId); 1792 }) 1793</script>
1793<style class="mgz-style">.by6hqtr-s{margin-bottom:15px !important;}</style></div></div><style class="mgz-style">.defmh0u-s{padding:0px!important;}</style></div></div><div class="u2yci15 mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner u2yci15-s"><div class="si15h38 mgz-element nav-item"><a href="https://www.mode-jost.de/mode/herren" ><span class="title">HERREN</span> </a> <style class="mgz-style">.si15h38>a{font-size:16px;font-weight:600!important;}</style></div><div class="hqcqwa9 mgz-element nav-item"><a href="/mode/herren/herren-trends" ><span class="title">Herren Trends</span> </a> <style class="mgz-style">.hqcqwa9>a{font-size:16px;font-weight:600!important;}</style></div><div class="wc12j4d mgz-element nav-item"><a href="/mode/herren/young-fashion" ><span class="title">Young Fashion</span> </a> <style class="mgz-style">.wc12j4d>a{font-size:16px;font-weight:600!important;}</style></div><div class="tbhux5x mgz-element nav-item"><a href="/mode/herren/schuhe" ><span class="title">Schuhe</span> </a> <style class="mgz-style">.tbhux5x>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="fau1cbj mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner fau1cbj-s"><div class="o3rsicw mgz-element nav-item"><a href="https://www.mode-jost.de/mode/kinder" ><span class="title">KINDER</span> </a> <style class="mgz-style">.o3rsicw>a{font-size:16px;font-weight:600!important;}</style></div><div class="vjh6cwg mgz-element nav-item"><a href="/mode/kinder/kinder-trends" ><span class="title">Kinder Trends</span> </a> <style class="mgz-style">.vjh6cwg>a{font-size:16px;font-weight:600!important;}</style></div><div class="gpwy36p mgz-element nav-item"><a href="https://www.mode-jost.de/service/kinder-service" ><span class="title">Kinder Service</span> </a> <style class="mgz-style">.gpwy36p>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="mw7ilkl mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner mw7ilkl-s"><div class="bkhk5ev mgz-element nav-item"><a href="https://www.mode-jost.de/mode/waesche-bade" ><span class="title">WÃSCHE/BADE</span> </a> <style class="mgz-style">.bkhk5ev>a{font-size:16px;font-weight:600!important;}</style></div><div class="qj8ip30 mgz-element nav-item"><a href="/mode/waesche-bade/tag-und-nachtwaesche-damen" ><span class="title">Tag- und Nachtwäsche Damen</span> </a> <style class="mgz-style">.qj8ip30>a{font-size:16px;font-weight:600!important;}</style></div><div class="i66y4y4 mgz-element nav-item"><a href="/mode/waesche-bade/tag-und-nachtwaesche-herren" ><span class="title">Tag- und Nachtwäsche Herren</span> </a> <style class="mgz-style">.i66y4y4>a{font-size:16px;font-weight:600!important;}</style></div><div class="h1950xn mgz-element nav-item"><a href="/mode/waesche-bade/damen-bademode" ><span class="title">Damen Bademode</span> </a> <style class="mgz-style">.h1950xn>a{font-size:16px;font-weight:600!important;}</style></div><div class="q1s1w75 mgz-element nav-item"><a href="/mode/waesche-bade/herren-bademode" ><span class="title">Herren Bademode</span> </a> <style class="mgz-style">.q1s1w75>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="ghouerk mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner ghouerk-s"></div></div></div>
1793<script> 1794 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1795 .then(() => { 1796 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1797 }) 1798 .then(() => { 1799 const elemId = $('.ukicd1y'); 1800 let mgzBuilder = new MagezonBuilder(elemId); 1801 }) 1802</script>
1802</div></div></div><style class="mgz-style">.ma6uso2-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.ma6uso2 > .item-submenu{width:100% !important;}</style></div><div class="v78blyn mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/service" ><span class="title">SERVICE</span> </a> <div class="item-submenu mgz-element-inner v78blyn-s"><div class="oqwfn7s mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner oqwfn7s-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="qe2xqq2 mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12 mgz-element-column-empty"><div class="mgz-element-inner qe2xqq2-s meusListBlock_Sub"><style class="mgz-style">.qe2xqq2-s{padding:0px!important;}</style></div></div><div class="opf4oif mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner opf4oif-s"><div class="yt5pcfe mgz-element nav-item"><a href="https://www.mode-jost.de/service/jost-app" ><span class="title">JOST APP</span> </a> <style class="mgz-style">.yt5pcfe>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="qyc08qf mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner qyc08qf-s"><div class="boqmwl4 mgz-element nav-item"><a href="https://www.mode-jost.de/service/geschenkgutschein" ><span class="title">GESCHENKGUTSCHEIN</span> </a> <style class="mgz-style">.boqmwl4>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="fo193ij mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner fo193ij-s"><div class="bb7r8ap mgz-element nav-item"><a href="https://www.mode-jost.de/service/kinder-service" ><span class="title">KINDER SERVICE</span> </a> <style class="mgz-style">.bb7r8ap>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="vs9g5xk mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner vs9g5xk-s"></div></div></div>
1802<script> 1803 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1804 .then(() => { 1805 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1806 }) 1807 .then(() => { 1808 const elemId = $('.oqwfn7s'); 1809 let mgzBuilder = new MagezonBuilder(elemId); 1810 }) 1811</script>
1811</div></div><div class="orueqn1 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner orueqn1-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="n91qnf5 mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12 mgz-element-column-empty"><div class="mgz-element-inner n91qnf5-s meusListBlock_Sub"><style class="mgz-style">.n91qnf5-s{padding:0px!important;}</style></div></div><div class="bpwhfsf mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner bpwhfsf-s"><div class="yy792un mgz-element nav-item"><a href="https://www.mode-jost.de/service/kundenkonto" ><span class="title">KUNDENKONTO</span> </a> <style class="mgz-style">.yy792un>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="rmhkl02 mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner rmhkl02-s"><div class="f02ei1y mgz-element nav-item"><a href="https://www.mode-jost.de/service/newsletter-anmeldung" ><span class="title">NEWSLETTER</span> </a> <style class="mgz-style">.f02ei1y>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="ua3552k mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner ua3552k-s"><div class="uih5y8b mgz-element nav-item"><a href="https://www.mode-jost.de/service/braeutigam-and-friends" ><span class="title">BRÃUTIGAM & FRIENDS</span> </a> <style class="mgz-style">.uih5y8b>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="qcyqgeu mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner qcyqgeu-s"></div></div></div>
1811<script> 1812 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1813 .then(() => { 1814 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1815 }) 1816 .then(() => { 1817 const elemId = $('.orueqn1'); 1818 let mgzBuilder = new MagezonBuilder(elemId); 1819 }) 1820</script>
1820</div></div></div><style class="mgz-style">.v78blyn-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.v78blyn > .item-submenu{width:100% !important;}</style></div><div class="to193ky mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/job-und-ausbildung" ><span class="title">JOB & AUSBILDUNG</span> </a> <div class="item-submenu mgz-element-inner to193ky-s"><div class="uw69v7m mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner uw69v7m-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="opjsoys mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12 mgz-element-column-empty"><div class="mgz-element-inner opjsoys-s meusListBlock_Sub"><style class="mgz-style">.opjsoys-s{padding:0px!important;}</style></div></div><div class="ge3wklb mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner ge3wklb-s"><div class="a8rdfv4 mgz-element nav-item"><a href="https://www.mode-jost.de/karriere.html" ><span class="title">JOBS</span> </a> <style class="mgz-style">.a8rdfv4>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="c8kssq2 mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner c8kssq2-s"><div class="n3xdb6v mgz-element nav-item"><a href="https://azubi.mode-jost.de/" ><span class="title">AUSBILDUNG</span> </a> <style class="mgz-style">.n3xdb6v>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="uxber14 mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner uxber14-s"></div></div><div class="emesus3 mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner emesus3-s"></div></div></div>
1820<script> 1821 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1822 .then(() => { 1823 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1824 }) 1825 .then(() => { 1826 const elemId = $('.uw69v7m'); 1827 let mgzBuilder = new MagezonBuilder(elemId); 1828 }) 1829</script>
1829</div></div><div class="sk9fl6e mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner sk9fl6e-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="bs86h7y mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12 mgz-element-column-empty"><div class="mgz-element-inner bs86h7y-s meusListBlock_Sub"><style class="mgz-style">.bs86h7y-s{padding:0px!important;}</style></div></div><div class="jpw2kuk mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner jpw2kuk-s"></div></div><div class="gv1kyru mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner gv1kyru-s"></div></div><div class="un20ke5 mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner un20ke5-s"></div></div><div class="d9fjd4y mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner d9fjd4y-s"></div></div></div>
1829<script> 1830 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1831 .then(() => { 1832 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1833 }) 1834 .then(() => { 1835 const elemId = $('.sk9fl6e'); 1836 let mgzBuilder = new MagezonBuilder(elemId); 1837 }) 1838</script>
1838</div></div></div><style class="mgz-style">.to193ky-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.to193ky > .item-submenu{width:100% !important;}</style></div><div class="y4y5bu6 mgz-element nav-item level0"><a href="https://www.mode-jost.de/kontakt" ><span class="title">KONTAKT</span> </a> <style class="mgz-style">.y4y5bu6-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.y4y5bu6 > .item-submenu{width:100% !important;}</style></div><div class="cvuw344 mgz-element nav-item level0"><a href="https://www.mode-jost.de/catalog/category/view/s/gutscheine/id/413/" ><span class="title">GUTSCHEIN</span> </a> <style class="mgz-style">.cvuw344-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.cvuw344 > .item-submenu{width:100% !important;}</style></div><style class="mgz-style">body #ninjamenus1 .nav-item > a span.title { font-weight: 400 !important; } #am-cookie-bar dialog, #am-cookie-bar .am-cookie-bar, dialog[data-dialog-ref-name="am-cookie-bar"] { position: fixed !important; left: 0; right: 0; bottom: 0 !important; top: auto !important; margin: 0 !important; width: 100%; max-width: 100%; z-index: 9999; } .mgz-single-image-wrapper .mgz-image-link { position: relative; } .mgz-single-image-wrapper .mgz-image-link .image-content { top: 50%; transform: translateY(-50%); } .mgz-single-image-wrapper .mgz-image-link .image-content .image-title { color: #fff; font-size: 30px; text-shadow: 0 0 9px #000; } html body button.ambar-action-btn.rounded-sm { background-color: #e2650c !important; } html body .ambar-btn-accept { background-color: #e2650c !important; } html body button.ambar-btn-settings.ambar-action-btn { background-color: #fff !important; color: #000 !important; font-weight: 800; } html body .ambar-btn-accept:hover { color: #fff; background-color: #e2650c !important; border-color: #e2650c !important; } .ninjamenus.ninjamenus-desktop .left_edge_menu_bar>.item-submenu { max-width: 1490px; background: #eaeaea !important; } .ninjamenus.ninjamenus-desktop .left_edge_menu_bar>.item-submenu .inner-content.mgz-container { display: flex; justify-content: center; } .ninjamenus.ninjamenus-desktop .left_edge_menu_bar>.item-submenu .inner-content.mgz-container>div { width: auto; } #myHeadertopfix .ourbarfix { max-width: 1488px; margin: auto; padding: 10px 10px 0; } .magezon-builder .mgz-element-text a { text-decoration: underline; text-decoration-color: #e2650c; color: unset; } #myHeadertopfix .ourbarfix li.mh_panelHeaderItem { text-align: right; white-space: nowrap; } #myHeadertopfix .ourbarfix li.mh_panelHeaderItem { width: 100%; } @media(max-width:1024px){ .headertopfix .ourbarfix .mh_serviceLinksWrapper .mh_panelHeaderList .mh_panelHeaderItem a { color: #fff; font-size: 15px; font-weight: 600; } #myHeadertopfix { background-color: #3a5674 !important; } #myHeadertopfix .ourbarfix ul.mh_panelHeaderList { justify-content: flex-end; } #myHeadertopfix .ourbarfix { padding: 10px 10px 10px; } }</style></div> </div> 1839
1839<script> 1840 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1841 .then(() => { 1842 return new Promise((resolve) => { 1843 const waitForjQuery = () => { 1844 if (typeof jQuery !== 'undefined') { 1845 window.$ = window.jQuery = jQuery; 1846 resolve(); 1847 } else { 1848 setTimeout(waitForjQuery, 25); 1849 } 1850 }; 1851 waitForjQuery(); 1852 }); 1853 }) 1854 .then(() => loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_NinjaMenus/js/jquery.hoverIntent.min.js', 'hoverIntent')) 1855 .then(() => loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/js/jquery-scrolltofixed-min.js', 'scrolltofixed')) 1856 .then(() => loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonNinjaMenus/js/jquery.drilldown.min.js', 'drilldown')) 1857 .then(() => loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonNinjaMenus/js/menu.js', 'menu')) 1858 .then(() => { 1859 if (typeof $.fn.drilldown === 'undefined') return; 1860 1861 const menuElement = $(".ninjamenus"); 1862 const options = { 1863 "mobileBreakpoint": 1024, 1864 "stick": 0, 1865 "id": "ninjamenus1" 1866 }; 1867 let ninjaMenus = new NinjaMenus(menuElement, options); 1868 1869 $('.ninjamenus-top-overlay').appendTo('.page-wrapper'); 1870 $('.ninjamenus-top').hover(function() { 1871 $('.nav-sections').css('z-index', 999); 1872 $('.ninjamenus-top-overlay').fadeIn(400); 1873 }, function() { 1874 if (!$('.nav-sections').hasClass('scroll-to-fixed-fixed')) { 1875 $('.nav-sections').css('z-index', ''); 1876 } 1877 $('.ninjamenus-top-overlay').fadeOut(400); 1878 }); 1879 }) 1880</script>
1880 </nav> 1881 </div> 1882 </div> 1883<nav 1884 x-data="initMenuMobile_6ab514fede845()" 1885 @load.window="setActiveMenu($root)" 1886 @keydown.window.escape="closeMenu()" 1887 class="flex z-20 order-2 sm:order-1 lg:order-2 navigation lg:hidden w-12 h-12" 1888 aria-label="Navigation der Website" 1889 role="navigation" 1890> 1891 <!-- mobile --> 1892 <button 1893 x-ref="mobileMenuTrigger" 1894 @click="openMenu()" 1895 :class="{'overflow-x-hidden overflow-y-auto fixed top-0 left-0 w-full' : open}" 1896 type="button" 1897 aria-label="Menü öffnen" 1898 aria-haspopup="menu" 1899 :aria-expanded="open" 1900 :hidden="open" 1901 > 1902 <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"> 1903 <path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"/> 1904</svg> 1905 </button> 1906 <!--Search Icon--> 1907 <button 1908 id="menu-search-icon" 1909 class="inline-block ml-1 no-underline sm:ml-3 hover:text-black" 1910 @click="toggleSearchContent()" 1911 > 1912 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6 md:h-6 md:w-6 hover:text-black" width="25" height="25" aria-hidden="true"> 1913 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 1914</svg> 1915 </button> 1916 <div 1917 x-ref="mobileMenuNavLinks" 1918 class=" 1919 fixed top-0 right-0 w-full h-full p-1 flex 1920 flex-col border-t border-container bg-container-lighter 1921 overflow-y-auto overflow-x-hidden 1922 " 1923 :class="{ 'hidden' : !open }" 1924 :aria-hidden="open ? 'false' : 'true'" 1925 role="dialog" 1926 aria-modal="true" 1927 > 1928 <div class="sections nav-sections border-t flex flex-col gap-y-1 mt-16"> 1929 <nav class="navigation" data-action="navigation"> 1930 <div id="ninjamenus1" class="ninjamenus ninjamenus-horizontal ninjamenus-mobile-accordion ninjamenus-desktop ninjamenus-top" data-type="horizontal" data-mobile-type="accordion"> 1931 <div class="magezon-builder magezon-builder-preload"><div class="tba77py mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/filialen" ><span class="title">FILIALEN</span> </a> <div class="item-submenu mgz-element-inner tba77py-s"><div class="pna71lm mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner pna71lm-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="gau4rsv mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12"><div class="mgz-element-inner gau4rsv-s meusListBlock_Sub"><div class="y9xvypr mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner y9xvypr-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="wsemtd1 mgz-element mgz-element-column mgz-col-xl-3 mgz-col-lg-3 mgz-col-md-3 mgz-col-sm-12 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner wsemtd1-s"><div class="aa9r2fr mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="https://www.mode-jost.de/filialen/gruenstadt" ><span class="title">GRÃNSTADT</span> </a> <style class="mgz-style">.aa9r2fr>a{font-size:16px;font-weight:600!important;}</style></div></div></div></div>
1931<script> 1932 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1933 .then(() => { 1934 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1935 }) 1936 .then(() => { 1937 const elemId = $('.y9xvypr'); 1938 let mgzBuilder = new MagezonBuilder(elemId); 1939 }) 1940</script>
1940<style class="mgz-style">.y9xvypr-s{margin-bottom:15px !important;}</style></div></div><style class="mgz-style">.gau4rsv-s{padding:0px!important;}</style></div></div><div class="h68u94v mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner h68u94v-s"><div class="ntofreo mgz-element nav-item"><a href="https://www.mode-jost.de/filialen/frankenthal" ><span class="title">FRANKENTHAL</span> </a> <style class="mgz-style">.ntofreo>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="q7ebbev mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner q7ebbev-s"><div class="xnwx1pt mgz-element nav-item"><a href="https://www.mode-jost.de/filialen/landau" ><span class="title">LANDAU</span> </a> <style class="mgz-style">.xnwx1pt>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="uskby9e mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner uskby9e-s"><div class="q2i4x69 mgz-element nav-item"><a href="https://www.mode-jost.de/filialen/worms" ><span class="title">WORMS</span> </a> <style class="mgz-style">.q2i4x69>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="wkqh137 mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner wkqh137-s"><div class="tkxsol9 mgz-element nav-item"><a href="https://www.mode-jost.de/filialen/bruchsal" ><span class="title">BRUCHSAL</span> </a> <style class="mgz-style">.tkxsol9>a{font-size:16px;font-weight:600!important;}</style></div></div></div></div>
1940<script> 1941 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1942 .then(() => { 1943 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1944 }) 1945 .then(() => { 1946 const elemId = $('.pna71lm'); 1947 let mgzBuilder = new MagezonBuilder(elemId); 1948 }) 1949</script>
1949</div></div></div><style class="mgz-style">.tba77py-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.tba77py > .item-submenu{width:100% !important;}</style></div><div class="htd1n13 mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/aktuelles" ><span class="title">AKTUELLES</span> </a> <div class="item-submenu mgz-element-inner htd1n13-s"><div class="j7cj3qr mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner j7cj3qr-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="i3vef5f mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12"><div class="mgz-element-inner i3vef5f-s meusListBlock_Sub"><div class="bppyihm mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner bppyihm-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="viycg1j mgz-element mgz-element-column mgz-col-xl-3 mgz-col-lg-3 mgz-col-md-3 mgz-col-sm-12 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner viycg1j-s"><div class="np5rifo mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="/aktuelles/news" ><span class="title">NEWS</span> </a> <style class="mgz-style">.np5rifo>a{font-size:16px;font-weight:600!important;}</style></div></div></div></div>
1949<script> 1950 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1951 .then(() => { 1952 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1953 }) 1954 .then(() => { 1955 const elemId = $('.bppyihm'); 1956 let mgzBuilder = new MagezonBuilder(elemId); 1957 }) 1958</script>
1958<style class="mgz-style">.bppyihm-s{margin-bottom:15px !important;}</style></div></div><style class="mgz-style">.i3vef5f-s{padding:0px!important;}</style></div></div><div class="gfpwrhy mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner gfpwrhy-s"><div class="dq5u59j mgz-element nav-item"><a href="https://www.mode-jost.de/aktuelles/prospekte" ><span class="title">PROSPEKTE</span> </a> <style class="mgz-style">.dq5u59j>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="rw662uu mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner rw662uu-s"><div class="y23fnn3 mgz-element nav-item"><a href="/aktuelles/termine" ><span class="title">TERMINE</span> </a> <style class="mgz-style">.y23fnn3>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="mshmm1l mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner mshmm1l-s"><div class="cuw4gey mgz-element nav-item"><a href="https://www.mode-jost.de/aktuelles/spenden" ><span class="title">SPENDEN</span> </a> <style class="mgz-style">.cuw4gey>a{font-size:16px;font-weight:600!important;}</style></div></div></div></div>
1958<script> 1959 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1960 .then(() => { 1961 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1962 }) 1963 .then(() => { 1964 const elemId = $('.j7cj3qr'); 1965 let mgzBuilder = new MagezonBuilder(elemId); 1966 }) 1967</script>
1967</div></div></div><style class="mgz-style">.htd1n13-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.htd1n13 > .item-submenu{width:100% !important;}</style></div><div class="mb4ya1r mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/unternehmen" ><span class="title">UNTERNEHMEN</span> </a> <div class="item-submenu mgz-element-inner mb4ya1r-s"><div class="m394bx3 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner m394bx3-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="jkksax4 mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12 mgz-element-column-empty"><div class="mgz-element-inner jkksax4-s meusListBlock_Sub"><style class="mgz-style">.jkksax4-s{padding:0px!important;}</style></div></div><div class="r0dlyg0 mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner r0dlyg0-s"><div class="yplhteh mgz-element nav-item"><a href="https://www.mode-jost.de/unternehmen/ansprechpartner" ><span class="title">ANSPRECHPARTNER</span> </a> <style class="mgz-style">.yplhteh>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="wy83w6g mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner wy83w6g-s"><div class="i15kn5m mgz-element nav-item"><a href="https://www.mode-jost.de/unternehmen/geschichte" ><span class="title">GESCHICHTE</span> </a> <style class="mgz-style">.i15kn5m>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="ylrpy28 mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner ylrpy28-s"></div></div><div class="efdpssw mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner efdpssw-s"></div></div></div>
1967<script> 1968 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1969 .then(() => { 1970 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1971 }) 1972 .then(() => { 1973 const elemId = $('.m394bx3'); 1974 let mgzBuilder = new MagezonBuilder(elemId); 1975 }) 1976</script>
1976</div></div></div><style class="mgz-style">.mb4ya1r-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.mb4ya1r > .item-submenu{width:100% !important;}</style></div><div class="ma6uso2 mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/mode" ><span class="title">MODE</span> </a> <div class="item-submenu mgz-element-inner ma6uso2-s"><div class="ukicd1y mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ukicd1y-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="defmh0u mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12"><div class="mgz-element-inner defmh0u-s meusListBlock_Sub"><div class="by6hqtr mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner by6hqtr-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="q5iebgf mgz-element mgz-element-column mgz-col-xl-8 mgz-col-lg-3 mgz-col-md-3 mgz-col-sm-12 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner q5iebgf-s"><div class="lubtbi3 mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="https://www.mode-jost.de/mode/damen" ><span class="title">DAMEN</span> </a> <style class="mgz-style">.lubtbi3>a{font-size:16px;font-weight:600!important;}</style></div><div class="kqwfxhk mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="/mode/damen/damen-trends" ><span class="title">Damen Trends</span> </a> <style class="mgz-style">.kqwfxhk>a{font-size:16px;font-weight:600!important;}</style></div><div class="viutlrl mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="/mode/damen/young-fashion" ><span class="title">Young Fashion</span> </a> <style class="mgz-style">.viutlrl>a{font-size:16px;font-weight:600!important;}</style></div><div class="pw5hde2 mgz-element nav-item" data-icon="far mgz-fa-address-card"><a href="/mode/damen/schuhe" ><span class="title">Schuhe</span> </a> <style class="mgz-style">.pw5hde2>a{font-size:16px;font-weight:600!important;}</style></div></div></div></div>
1976<script> 1977 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1978 .then(() => { 1979 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1980 }) 1981 .then(() => { 1982 const elemId = $('.by6hqtr'); 1983 let mgzBuilder = new MagezonBuilder(elemId); 1984 }) 1985</script>
1985<style class="mgz-style">.by6hqtr-s{margin-bottom:15px !important;}</style></div></div><style class="mgz-style">.defmh0u-s{padding:0px!important;}</style></div></div><div class="u2yci15 mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner u2yci15-s"><div class="si15h38 mgz-element nav-item"><a href="https://www.mode-jost.de/mode/herren" ><span class="title">HERREN</span> </a> <style class="mgz-style">.si15h38>a{font-size:16px;font-weight:600!important;}</style></div><div class="hqcqwa9 mgz-element nav-item"><a href="/mode/herren/herren-trends" ><span class="title">Herren Trends</span> </a> <style class="mgz-style">.hqcqwa9>a{font-size:16px;font-weight:600!important;}</style></div><div class="wc12j4d mgz-element nav-item"><a href="/mode/herren/young-fashion" ><span class="title">Young Fashion</span> </a> <style class="mgz-style">.wc12j4d>a{font-size:16px;font-weight:600!important;}</style></div><div class="tbhux5x mgz-element nav-item"><a href="/mode/herren/schuhe" ><span class="title">Schuhe</span> </a> <style class="mgz-style">.tbhux5x>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="fau1cbj mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner fau1cbj-s"><div class="o3rsicw mgz-element nav-item"><a href="https://www.mode-jost.de/mode/kinder" ><span class="title">KINDER</span> </a> <style class="mgz-style">.o3rsicw>a{font-size:16px;font-weight:600!important;}</style></div><div class="vjh6cwg mgz-element nav-item"><a href="/mode/kinder/kinder-trends" ><span class="title">Kinder Trends</span> </a> <style class="mgz-style">.vjh6cwg>a{font-size:16px;font-weight:600!important;}</style></div><div class="gpwy36p mgz-element nav-item"><a href="https://www.mode-jost.de/service/kinder-service" ><span class="title">Kinder Service</span> </a> <style class="mgz-style">.gpwy36p>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="mw7ilkl mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner mw7ilkl-s"><div class="bkhk5ev mgz-element nav-item"><a href="https://www.mode-jost.de/mode/waesche-bade" ><span class="title">WÃSCHE/BADE</span> </a> <style class="mgz-style">.bkhk5ev>a{font-size:16px;font-weight:600!important;}</style></div><div class="qj8ip30 mgz-element nav-item"><a href="/mode/waesche-bade/tag-und-nachtwaesche-damen" ><span class="title">Tag- und Nachtwäsche Damen</span> </a> <style class="mgz-style">.qj8ip30>a{font-size:16px;font-weight:600!important;}</style></div><div class="i66y4y4 mgz-element nav-item"><a href="/mode/waesche-bade/tag-und-nachtwaesche-herren" ><span class="title">Tag- und Nachtwäsche Herren</span> </a> <style class="mgz-style">.i66y4y4>a{font-size:16px;font-weight:600!important;}</style></div><div class="h1950xn mgz-element nav-item"><a href="/mode/waesche-bade/damen-bademode" ><span class="title">Damen Bademode</span> </a> <style class="mgz-style">.h1950xn>a{font-size:16px;font-weight:600!important;}</style></div><div class="q1s1w75 mgz-element nav-item"><a href="/mode/waesche-bade/herren-bademode" ><span class="title">Herren Bademode</span> </a> <style class="mgz-style">.q1s1w75>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="ghouerk mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner ghouerk-s"></div></div></div>
1985<script> 1986 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1987 .then(() => { 1988 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1989 }) 1990 .then(() => { 1991 const elemId = $('.ukicd1y'); 1992 let mgzBuilder = new MagezonBuilder(elemId); 1993 }) 1994</script>
1994</div></div></div><style class="mgz-style">.ma6uso2-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.ma6uso2 > .item-submenu{width:100% !important;}</style></div><div class="v78blyn mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/service" ><span class="title">SERVICE</span> </a> <div class="item-submenu mgz-element-inner v78blyn-s"><div class="oqwfn7s mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner oqwfn7s-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="qe2xqq2 mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12 mgz-element-column-empty"><div class="mgz-element-inner qe2xqq2-s meusListBlock_Sub"><style class="mgz-style">.qe2xqq2-s{padding:0px!important;}</style></div></div><div class="opf4oif mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner opf4oif-s"><div class="yt5pcfe mgz-element nav-item"><a href="https://www.mode-jost.de/service/jost-app" ><span class="title">JOST APP</span> </a> <style class="mgz-style">.yt5pcfe>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="qyc08qf mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner qyc08qf-s"><div class="boqmwl4 mgz-element nav-item"><a href="https://www.mode-jost.de/service/geschenkgutschein" ><span class="title">GESCHENKGUTSCHEIN</span> </a> <style class="mgz-style">.boqmwl4>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="fo193ij mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner fo193ij-s"><div class="bb7r8ap mgz-element nav-item"><a href="https://www.mode-jost.de/service/kinder-service" ><span class="title">KINDER SERVICE</span> </a> <style class="mgz-style">.bb7r8ap>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="vs9g5xk mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner vs9g5xk-s"></div></div></div>
1994<script> 1995 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 1996 .then(() => { 1997 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 1998 }) 1999 .then(() => { 2000 const elemId = $('.oqwfn7s'); 2001 let mgzBuilder = new MagezonBuilder(elemId); 2002 }) 2003</script>
2003</div></div><div class="orueqn1 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner orueqn1-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="n91qnf5 mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12 mgz-element-column-empty"><div class="mgz-element-inner n91qnf5-s meusListBlock_Sub"><style class="mgz-style">.n91qnf5-s{padding:0px!important;}</style></div></div><div class="bpwhfsf mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner bpwhfsf-s"><div class="yy792un mgz-element nav-item"><a href="https://www.mode-jost.de/service/kundenkonto" ><span class="title">KUNDENKONTO</span> </a> <style class="mgz-style">.yy792un>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="rmhkl02 mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner rmhkl02-s"><div class="f02ei1y mgz-element nav-item"><a href="https://www.mode-jost.de/service/newsletter-anmeldung" ><span class="title">NEWSLETTER</span> </a> <style class="mgz-style">.f02ei1y>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="ua3552k mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner ua3552k-s"><div class="uih5y8b mgz-element nav-item"><a href="https://www.mode-jost.de/service/braeutigam-and-friends" ><span class="title">BRÃUTIGAM & FRIENDS</span> </a> <style class="mgz-style">.uih5y8b>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="qcyqgeu mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner qcyqgeu-s"></div></div></div>
2003<script> 2004 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 2005 .then(() => { 2006 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 2007 }) 2008 .then(() => { 2009 const elemId = $('.orueqn1'); 2010 let mgzBuilder = new MagezonBuilder(elemId); 2011 }) 2012</script>
2012</div></div></div><style class="mgz-style">.v78blyn-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.v78blyn > .item-submenu{width:100% !important;}</style></div><div class="to193ky mgz-element nav-item mega left_edge_menu_bar level0"><a href="https://www.mode-jost.de/job-und-ausbildung" ><span class="title">JOB & AUSBILDUNG</span> </a> <div class="item-submenu mgz-element-inner to193ky-s"><div class="uw69v7m mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner uw69v7m-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="opjsoys mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12 mgz-element-column-empty"><div class="mgz-element-inner opjsoys-s meusListBlock_Sub"><style class="mgz-style">.opjsoys-s{padding:0px!important;}</style></div></div><div class="ge3wklb mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner ge3wklb-s"><div class="a8rdfv4 mgz-element nav-item"><a href="https://www.mode-jost.de/karriere.html" ><span class="title">JOBS</span> </a> <style class="mgz-style">.a8rdfv4>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="c8kssq2 mgz-element mgz-element-column mgz-col-md-15"><div class="mgz-element-inner c8kssq2-s"><div class="n3xdb6v mgz-element nav-item"><a href="https://azubi.mode-jost.de/" ><span class="title">AUSBILDUNG</span> </a> <style class="mgz-style">.n3xdb6v>a{font-size:16px;font-weight:600!important;}</style></div></div></div><div class="uxber14 mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner uxber14-s"></div></div><div class="emesus3 mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner emesus3-s"></div></div></div>
2012<script> 2013 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 2014 .then(() => { 2015 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 2016 }) 2017 .then(() => { 2018 const elemId = $('.uw69v7m'); 2019 let mgzBuilder = new MagezonBuilder(elemId); 2020 }) 2021</script>
2021</div></div><div class="sk9fl6e mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner sk9fl6e-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="bs86h7y mgz-element mgz-element-column meusListBlock_ mgz-col-xl-15 mgz-col-lg-8 mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12 mgz-element-column-empty"><div class="mgz-element-inner bs86h7y-s meusListBlock_Sub"><style class="mgz-style">.bs86h7y-s{padding:0px!important;}</style></div></div><div class="jpw2kuk mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner jpw2kuk-s"></div></div><div class="gv1kyru mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner gv1kyru-s"></div></div><div class="un20ke5 mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner un20ke5-s"></div></div><div class="d9fjd4y mgz-element mgz-element-column mgz-col-md-15 mgz-element-column-empty"><div class="mgz-element-inner d9fjd4y-s"></div></div></div>
2021<script> 2022 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 2023 .then(() => { 2024 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 2025 }) 2026 .then(() => { 2027 const elemId = $('.sk9fl6e'); 2028 let mgzBuilder = new MagezonBuilder(elemId); 2029 }) 2030</script>
2030</div></div></div><style class="mgz-style">.to193ky-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.to193ky > .item-submenu{width:100% !important;}</style></div><div class="y4y5bu6 mgz-element nav-item level0"><a href="https://www.mode-jost.de/kontakt" ><span class="title">KONTAKT</span> </a> <style class="mgz-style">.y4y5bu6-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.y4y5bu6 > .item-submenu{width:100% !important;}</style></div><div class="cvuw344 mgz-element nav-item level0"><a href="https://www.mode-jost.de/catalog/category/view/s/gutscheine/id/413/" ><span class="title">GUTSCHEIN</span> </a> <style class="mgz-style">.cvuw344-s{border-color:#d1d0ce !important;border-top-width:5px !important;border-top-style:solid;}.cvuw344 > .item-submenu{width:100% !important;}</style></div><style class="mgz-style">body #ninjamenus1 .nav-item > a span.title { font-weight: 400 !important; } #am-cookie-bar dialog, #am-cookie-bar .am-cookie-bar, dialog[data-dialog-ref-name="am-cookie-bar"] { position: fixed !important; left: 0; right: 0; bottom: 0 !important; top: auto !important; margin: 0 !important; width: 100%; max-width: 100%; z-index: 9999; } .mgz-single-image-wrapper .mgz-image-link { position: relative; } .mgz-single-image-wrapper .mgz-image-link .image-content { top: 50%; transform: translateY(-50%); } .mgz-single-image-wrapper .mgz-image-link .image-content .image-title { color: #fff; font-size: 30px; text-shadow: 0 0 9px #000; } html body button.ambar-action-btn.rounded-sm { background-color: #e2650c !important; } html body .ambar-btn-accept { background-color: #e2650c !important; } html body button.ambar-btn-settings.ambar-action-btn { background-color: #fff !important; color: #000 !important; font-weight: 800; } html body .ambar-btn-accept:hover { color: #fff; background-color: #e2650c !important; border-color: #e2650c !important; } .ninjamenus.ninjamenus-desktop .left_edge_menu_bar>.item-submenu { max-width: 1490px; background: #eaeaea !important; } .ninjamenus.ninjamenus-desktop .left_edge_menu_bar>.item-submenu .inner-content.mgz-container { display: flex; justify-content: center; } .ninjamenus.ninjamenus-desktop .left_edge_menu_bar>.item-submenu .inner-content.mgz-container>div { width: auto; } #myHeadertopfix .ourbarfix { max-width: 1488px; margin: auto; padding: 10px 10px 0; } .magezon-builder .mgz-element-text a { text-decoration: underline; text-decoration-color: #e2650c; color: unset; } #myHeadertopfix .ourbarfix li.mh_panelHeaderItem { text-align: right; white-space: nowrap; } #myHeadertopfix .ourbarfix li.mh_panelHeaderItem { width: 100%; } @media(max-width:1024px){ .headertopfix .ourbarfix .mh_serviceLinksWrapper .mh_panelHeaderList .mh_panelHeaderItem a { color: #fff; font-size: 15px; font-weight: 600; } #myHeadertopfix { background-color: #3a5674 !important; } #myHeadertopfix .ourbarfix ul.mh_panelHeaderList { justify-content: flex-end; } #myHeadertopfix .ourbarfix { padding: 10px 10px 10px; } }</style></div> </div> 2031
2031<script> 2032 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 2033 .then(() => { 2034 return new Promise((resolve) => { 2035 const waitForjQuery = () => { 2036 if (typeof jQuery !== 'undefined') { 2037 window.$ = window.jQuery = jQuery; 2038 resolve(); 2039 } else { 2040 setTimeout(waitForjQuery, 25); 2041 } 2042 }; 2043 waitForjQuery(); 2044 }); 2045 }) 2046 .then(() => loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_NinjaMenus/js/jquery.hoverIntent.min.js', 'hoverIntent')) 2047 .then(() => loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/js/jquery-scrolltofixed-min.js', 'scrolltofixed')) 2048 .then(() => loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonNinjaMenus/js/jquery.drilldown.min.js', 'drilldown')) 2049 .then(() => loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonNinjaMenus/js/menu.js', 'menu')) 2050 .then(() => { 2051 if (typeof $.fn.drilldown === 'undefined') return; 2052 2053 const menuElement = $(".ninjamenus"); 2054 const options = { 2055 "mobileBreakpoint": 1024, 2056 "stick": 0, 2057 "id": "ninjamenus1" 2058 }; 2059 let ninjaMenus = new NinjaMenus(menuElement, options); 2060 2061 $('.ninjamenus-top-overlay').appendTo('.page-wrapper'); 2062 $('.ninjamenus-top').hover(function() { 2063 $('.nav-sections').css('z-index', 999); 2064 $('.ninjamenus-top-overlay').fadeIn(400); 2065 }, function() { 2066 if (!$('.nav-sections').hasClass('scroll-to-fixed-fixed')) { 2067 $('.nav-sections').css('z-index', ''); 2068 } 2069 $('.ninjamenus-top-overlay').fadeOut(400); 2070 }); 2071 }) 2072</script>
2072 </nav> 2073 </div> 2074 <button 2075 @click="closeMenu()" 2076 class="absolute flex justify-end w-16 self-end mb-1" 2077 aria-label="Menü schließen" 2078 type="button" 2079 > 2080 <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"> 2081 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 2082</svg> 2083 </button> 2084 </div> 2085</nav>
2086<script> 2087 'use strict'; 2088 2089 const initMenuMobile_6ab514fede845 = () => { 2090 return { 2091 mobilePanelActiveId: null, 2092 open: false, 2093 setActiveMenu(menuNode) { 2094 Array.from(menuNode.querySelectorAll('a')).filter(link => { 2095 return link.href === window.location.href.split('?')[0]; 2096 }).map(item => { 2097 item.classList.add('underline'); 2098 item.closest('li.level-0') && 2099 item.closest('li.level-0').querySelector('a.level-0').classList.add('underline'); 2100 }); 2101 }, 2102 openMenu() { 2103 this.open = true 2104 this.$nextTick(() => hyva.trapFocus(this.$refs['mobileMenuNavLinks'])); 2105 // Prevent from body scrolling while mobile menu opened 2106 document.body.style.position = 'fixed'; 2107 }, 2108 closeMenu() { 2109 document.body.style.position = ''; 2110 2111 if (this.open) { 2112 this.$nextTick(() => this.$refs['mobileMenuTrigger'].focus() || hyva.releaseFocus()); 2113 } 2114 2115 this.open = false 2116 this.mobilePanelActiveId = null 2117 }, 2118 openSubcategory(index) { 2119 const menuNodeRef = document.querySelector('[data-child-id=' + index + ']') 2120 this.mobilePanelActiveId = this.mobilePanelActiveId === index ? 0 : index 2121 this.$nextTick(() => hyva.trapFocus(menuNodeRef)) 2122 }, 2123 backToMainCategories(index) { 2124 const menuNodeRef = document.querySelector('[data-child-id=' + index + ']') 2125 this.mobilePanelActiveId = 0 2126 this.$nextTick(() => { 2127 hyva.trapFocus(this.$refs['mobileMenuNavLinks']) 2128 menuNodeRef.querySelector('a').focus() 2129 }) 2130 }, 2131 toggleSearchContent() { 2132 // Toggle the visibility of the search content div 2133 const searchContent = document.getElementById('search-content'); 2134 if (searchContent) { 2135 searchContent.style.display = searchContent.style.display === 'none' ? 'block' : 'none'; 2136 } 2137 } 2138 } 2139 } 2140</script>
2140 2141
2142<script> 2143 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 2144 .then(() => { 2145 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_NinjaMenus/js/jquery.drilldown.min.js', 'drilldown'); 2146 }) 2147 .then(() => { 2148 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_NinjaMenus/js/jquery.hoverIntent.min.js', 'hoverIntent'); 2149 }) 2150 .then(() => { 2151 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/js/jquery-scrolltofixed-min.js', 'scrolltofixed'); 2152 }) 2153 .then(() => { 2154 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonNinjaMenus/js/menu.js', 'menu'); 2155 }) 2156 .then(() => { 2157 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonNinjaMenus/js/jquery.drilldown.min.js', 'drilldown'); 2158 }) 2159 .then(() => { 2160 const menuElement = $(".ninjamenus"); 2161 const options = { 2162 "mobileBreakpoint": 1024, 2163 // "stick": true, 2164 }; 2165 let ninjaMenus = new NinjaMenus(menuElement, options); 2166 }) 2167</script>
2167 2168 <div class="flex items-center headerIcons order-3"> 2169 <!--Search Icon--> 2170 <button 2171 id="menu-search-icon" 2172 x-data="{ isMobileOrTablet: window.innerWidth < 768 || (window.innerWidth >= 768 && window.innerWidth < 1024) }" 2173 x-show="!isMobileOrTablet" 2174 class="inline-block ml-1 no-underline sm:ml-3 hover:text-black" 2175 @click.prevent=" 2176 searchOpen = !searchOpen; 2177 $dispatch('search-open'); 2178 " 2179 aria-label="Suchformular umschalten" 2180 aria-haspopup="true" 2181 :aria-expanded="searchOpen" 2182 x-ref="searchButton" 2183 x-on:resize.window=" 2184 isMobileOrTablet = window.innerWidth < 768 || (window.innerWidth >= 768 && window.innerWidth < 1024) 2185 " 2186 > 2187 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6 md:h-6 md:w-6 hover:text-black" width="25" height="25" aria-hidden="true"> 2188 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 2189</svg> 2190 </button> 2191 2192 <!--Customer Icon & Dropdown--> 2193 <!-- BLOCK header.customer --> 2194<div 2195 class="relative inline-block ml-1 sm:ml-3" 2196 x-data="{ open: false }" 2197 @keyup.escape="open = false" 2198> 2199 <button 2200 type="button" 2201 id="customer-menu" 2202 class="block hover:text-black" 2203 @click="open = !open" 2204 @click.outside="open = false" 2205 :aria-expanded="open ? 'true' : 'false'" 2206 aria-label="Mein Konto" 2207 aria-haspopup="true" 2208 > 2209 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6 md:h-6 md:w-6" width="32" height="32" aria-hidden="true"> 2210 <path stroke-linecap="round" stroke-linejoin="round" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"/> 2211</svg> 2212 </button> 2213 <nav 2214 class=" 2215 absolute right-0 z-20 w-40 py-2 mt-2 -mr-4 px-1 overflow-auto origin-top-right rounded-sm 2216 shadow-lg sm:w-48 lg:mt-3 bg-container-lighter 2217 " 2218 x-cloak 2219 x-show="open" 2220 aria-labelledby="customer-menu" 2221 @click.outside="open = false" 2222 > 2223 2224<a id="customer.header.sign.in.link" 2225 class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 2226 onclick="hyva.setCookie && hyva.setCookie( 2227 'login_redirect', 2228 window.location.href, 2229 1 2230 )" 2231 href="https://www.mode-jost.de/customer/account/index/" 2232 title="Anmelden" 2233> 2234 Anmelden</a> 2235 2236 </nav> 2237</div> 2238<!-- /BLOCK header.customer --> 2239 2240 <!--Cart Icon--> 2241 2242 <button 2243 id="menu-cart-icon" 2244 class="relative inline-block ml-1 no-underline sm:ml-3 hover:text-black" 2245 x-ref="cartButton" 2246 :aria-disabled="isCartEmpty()" 2247 title="Warenkorb" 2248 @click.prevent.stop="() => { 2249 $dispatch('toggle-cart', { isOpen: true }) 2250 }" 2251 @toggle-cart.window="toggleCart($event)" 2252 :aria-expanded="isCartOpen" 2253 aria-haspopup="dialog" 2254 > 2255 2256 <span 2257 class="sr-only label" 2258 x-text="` 2259 Mini-Warenkorb umschalten, 2260 ${isCartEmpty() 2261 ? 'Warenkorb ist leer' 2262 : hyva.str( 2263 'You have %1 product%2 in your cart.', 2264 cart.summary_count, 2265 cart.summary_count === 1 ? '' : 's' 2266 )}` 2267 "></span> 2268 2269 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6 md:h-6 md:w-6 hover:text-black" width="25" height="25" role="img"> 2270 <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
22700 014 0z"/> 2271<title>shopping-cart</title></svg> 2272 2273 <span 2274 x-text="cart.summary_count" 2275 x-show="!isCartEmpty()" 2276 x-cloak 2277 class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold leading-none text-center text-white uppercase transform -translate-x-1 translate-y-1/2 rounded-full bg-primary" 2278 aria-hidden="true"> 2279 </span> 2280 2281 </button> 2282 2283 2284 </div> 2285 </div> 2286 <!--Search--> 2287 <div class="absolute z-10 w-full border-t shadow-sm bg-container-lighter border-container-lighter" 2288 id="search-content" 2289 x-cloak x-show="searchOpen" 2290 @click.outside="searchOpen = false" 2291 @keydown.escape=" 2292 searchOpen = false; 2293 $refs.searchButton.focus(); 2294 " 2295 > 2296
2296<script> 2297 'use strict'; 2298 2299 function initMiniSearch() { 2300 return { 2301 minSearchLength: 4, 2302 suggestions: [], 2303 suggest() { 2304 const search = this.$refs.searchInput; 2305 if (search.value.length >= this.minSearchLength) { 2306 search.setCustomValidity(''); 2307 search.reportValidity(); 2308 this.fetchSuggestions(search.value); 2309 } else { 2310 this.suggestions = []; 2311 } 2312 }, 2313 fetchSuggestions(term) { 2314 fetch( 2315 window.BASE_URL + 'search/ajax/suggest?' + new URLSearchParams({q: term}), 2316 { 2317 headers: { 2318 'X-Requested-With': 'XMLHttpRequest' 2319 } 2320 } 2321 ) 2322 .then(response => response.json()) 2323 .then(result => this.suggestions = result); 2324 }, 2325 search(term) { 2326 const search = this.$refs.searchInput; 2327 term = term || search.value; 2328 if (term.length < this.minSearchLength) { 2329 search.setCustomValidity('Minimale\u0020L\u00E4nge\u0020der\u0020Suchanfrage\u0020ist\u00204'); 2330 search.reportValidity(); 2331 } else { 2332 search.setCustomValidity(''); 2333 search.value = term; 2334 this.$refs.form.submit(); 2335 } 2336 }, 2337 focusElement(element) { 2338 if (element && element.nodeName === "DIV") { 2339 element.focus(); 2340 return true; 2341 } else { 2342 return false; 2343 } 2344 } 2345 } 2346 } 2347</script>
2347 2348<div class="container py-2 mx-auto text-black" x-data="initMiniSearch()"> 2349 <form class="form minisearch" id="search_mini_form" x-ref="form" @submit.prevent="search()" 2350 action="https://www.mode-jost.de/catalogsearch/result/" method="get" role="search"> 2351 <label class="hidden" for="search" data-role="minisearch-label"> 2352 <span>Suche</span> 2353 </label> 2354 <input id="search" 2355 x-ref="searchInput" 2356 type="search" 2357 autocomplete="off" 2358 name="q" 2359 value="" 2360 placeholder="Hier den ganzen Shop durchsuchen..." 2361 maxlength="50" 2362 class="w-full p-2 text-lg leading-normal transition appearance-none text-grey-800 2363 focus:outline-none focus:border-transparent lg:text-xl" 2364 @focus.once="suggest" 2365 @input.debounce.300="suggest" 2366 @keydown.arrow-down.prevent="focusElement($root.querySelector('[tabindex]'))" 2367 @search-open.window.debounce.10=" 2368 $el.focus() 2369 $el.select() 2370 " 2371 /> 2372 <input type="hidden" name="product_list_order" value="neuheiten_sortierung"> 2373 <template x-if="suggestions.length > 0"> 2374 <div class="w-full leading-normal transition appearance-none text-grey-800 flex flex-col mt-1"> 2375 <template x-for="suggestion in suggestions"> 2376 <div class="flex justify-between p-2 bg-container-lighter even:bg-container mb-1 cursor-pointer 2377 border border-container hover:bg-container-darker" 2378 tabindex="0" 2379 @click="search(suggestion.title)" 2380 @keydown.enter="search(suggestion.title)" 2381 @keydown.arrow-up.prevent=" 2382 focusElement($event.target.previousElementSibling) || $refs.searchInput.focus() 2383 " 2384 @keydown.arrow-down.prevent="focusElement($event.target.nextElementSibling)" 2385 > 2386 <span x-text="suggestion.title"></span> 2387 <span x-text="suggestion.num_results"></span> 2388 </div> 2389 </template> 2390 </div> 2391 </template> 2392 <button type="submit" 2393 title="Suche" 2394 class="action search sr-only" 2395 aria-label="Search" 2396 > 2397 Suche </button> 2398 </form> 2399</div> 2400 </div> 2401
2402 <!--Cart Drawer--> 2403
2404<script> 2405 function initCartDrawer() { 2406 return { 2407 open: false, 2408 isLoading: false, 2409 cart: {}, 2410 maxItemsToDisplay: 10, 2411 itemsCount: 0, 2412 showSku: true, 2413 getData(data) { 2414 if (data.cart) { 2415 this.cart = data.cart; 2416 this.itemsCount = data.cart.items && data.cart.items.length || 0; 2417 this.setCartItems(); 2418 } 2419 this.isLoading = false; 2420 }, 2421 cartItems: [], 2422 getItemCountTitle() { 2423 return hyva.strf('\u00250\u0020von\u0020\u00251\u0020Produkten\u0020im\u0020Warenkorb\u0020angezeigt', this.maxItemsToDisplay, this.itemsCount) 2424 }, 2425 setCartItems() { 2426 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 2427 2428 if (this.maxItemsToDisplay > 0) { 2429 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 2430 } 2431 }, 2432 updateItemQty(form) { 2433 if (!form.action) return; 2434 this.isLoading = true; 2435 const action = form.action; 2436 const formData = new FormData(form); 2437 formData.append('form_key', hyva.getFormKey()); 2438 2439 if (!formData.uenc) { 2440 formData.append('uenc', hyva.getUenc()); 2441 } 2442 2443 fetch(action, { 2444 body: formData, 2445 method: 'POST', 2446 mode: "cors", 2447 credentials: "include" 2448 }).then((result) => { 2449 return result.text(); 2450 }).then((content) => { 2451 // Replace the DOM first 2452 hyva.replaceDomElement('#maincontent', content); 2453 2454 // Then move the error message â BUT after DOM is updated 2455 setTimeout(() => { 2456 const errorMessage = document.querySelector('.message.error'); 2457 const targetContainer = document.getElementById('custommhinspeyamove'); 2458 2459 if (errorMessage && targetContainer) { 2460 targetContainer.appendChild(errorMessage); 2461 2462 // Start fade-out after 10 seconds 2463 setTimeout(() => { 2464 errorMessage.style.transition = "opacity 3s ease"; 2465 errorMessage.style.opacity = 0; 2466 2467 // Remove the element from DOM after fade-out completes (1s) 2468 setTimeout(() => { 2469 if (errorMessage.parentNode) { 2470 errorMessage.parentNode.removeChild(errorMessage); 2471 } 2472 }, 1000); 2473 }, 3000); 2474 } 2475}, 50); 2476 2477 }).catch((error) => { 2478 window.dispatchMessages && window.dispatchMessages([{ 2479 type: 'error', 2480 text: 'Es\u0020ist\u0020ein\u0020Fehler\u0020aufgetreten.\u0020Bitte\u0020versuchen\u0020Sie\u0020es\u0020erneut.' 2481 }]); 2482 }).finally(() => { 2483 this.isLoading = false; 2484 }); 2485}, 2486 deleteItemFromCart(itemId) { 2487 this.isLoading = true; 2488 2489 const formKey = hyva.getFormKey(); 2490 const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; 2491 2492 fetch(postUrl, { 2493 headers: { 2494 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 2495 }, 2496 body: "form_key=" + formKey + "&item_id=" + itemId, 2497 method: "POST", 2498 mode: "cors", 2499 credentials: "include" 2500 }).then(response => { 2501 if (response.redirected) { 2502 window.location.href = response.url; 2503 } else if (response.ok) { 2504 return response.json(); 2505 } else { 2506 window.dispatchMessages && window.dispatchMessages([{ 2507 type: 'warning', 2508 text: 'Der\u0020Artikel\u0020konnte\u0020nicht\u0020aus\u0020dem\u0020Warenkorb\u0020entfernt\u0020werden.' 2509 }]); 2510 this.isLoading = false; 2511 } 2512 }).then(result => { 2513 window.dispatchMessages && window.dispatchMessages([{ 2514 type: result.success ? 'success' : 'error', 2515 text: result.success 2516 ? 'Sie\u0020haben\u0020die\u0020Artikel\u0020entfernt.' 2517 : result.error_message 2518 }], result.success ? 5000 : 0) 2519 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 2520 }); 2521 }, 2522 scrollLock(use = true) { 2523 document.documentElement.style.scrollbarGutter = use ? "stable" : ""; 2524 document.body.style.overflow = use ? "hidden" : ""; 2525 }, 2526 toggleCartDrawer(event) { 2527 if (event.detail && event.detail.isOpen) { 2528 this.open = event.detail.isOpen; 2529 } else { 2530 this.open = !this.open; 2531 } 2532 2533 if (this.open) { 2534 this.$root.showModal(); 2535 } else { 2536 this.$root.close(); 2537 } 2538 2539 this.scrollLock(this.open); 2540 }, 2541 openCartDrawer() { 2542 this.$root.showModal(); 2543 this.open = true; 2544 this.scrollLock(true); 2545 }, 2546 closeCartDrawer() { 2547 this.$root.close(); 2548 this.open = false;
2549 this.scrollLock(false); 2550 }, 2551 onDialogBackdropClickHelper(event, target) { 2552 const rect = target.getBoundingClientRect(); 2553 const isInDialog = 2554 rect.top <= event.clientY && 2555 event.clientY <= rect.top + rect.height && 2556 rect.left <= event.clientX && 2557 event.clientX <= rect.left + rect.width; 2558 return isInDialog; 2559 }, 2560 cartListeners: { 2561 ['@private-content-loaded.window'](event) { 2562 this.getData(event.detail.data); 2563 }, 2564 ['@click'](event) { 2565 if (this.onDialogBackdropClickHelper(event, this.$root)) return; 2566 this.closeCartDrawer(); 2567 }, 2568 ['@toggle-cart.window'](event) { 2569 this.toggleCartDrawer(event); 2570 }, 2571 ['@keydown.window.escape']() { 2572 this.closeCartDrawer(); 2573 } 2574 } 2575 } 2576 } 2577</script>
2577 2578 2579<dialog 2580 id="cart-drawer" 2581 aria-labelledby="cart-drawer-title" 2582 class="z-30 fixed inset-0 flex flex-col py-6 px-4 [&_>*]:px-2 gap-y-8 max-h-screen max-w-full h-full mr-0 w-[480px] md:w-[640px] 2583 transition ease-in-out shadow-2xl bg-gray-50 text-slate-800 backdrop:bg-black/25 backdrop:backdrop-blur-sm" 2584 x-show="open" 2585 x-transition:enter="duration-700" 2586 x-transition:enter-start="translate-x-full" 2587 x-transition:enter-end="translate-x-0" 2588 x-transition:leave="duration-500" 2589 x-transition:leave-start="translate-x-0" 2590 x-transition:leave-end="translate-x-full" 2591 x-ref="cartDialogContent" 2592 x-data="initCartDrawer()" 2593 x-bind="cartListeners" 2594 x-cloak 2595> 2596 2597 <div class="flex gap-2 justify-between items-center"> 2598 <p id="cart-drawer-title" class="text-2xl"> 2599 <strong>Mein Warenkorb</strong> 2600 <span 2601 class="items-total text-xs" 2602 x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" 2603 x-text="getItemCountTitle()" 2604 ></span> 2605 </p> 2606 <button 2607 type="button" 2608 class="btn justify-center rounded-full p-2.5 text-base shadow-none hover:shadow-lg active:shadow disabled:shadow-none transition 2609 bg-white text-blue-700 border border-blue-400 hover:bg-white focus:ring-blue-200 disabled:bg-white disabled:border-slate-200 disabled:text-slate-600 disabled:opacity-70" 2610 @click="closeCartDrawer" 2611 aria-label="Mini-Warenkorb schließen" 2612 > 2613 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 2614 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 2615</svg> 2616 </button> 2617 </div> 2618 2619 2620 <template x-if="!itemsCount"> 2621 <div class="grow grid place-items-center"> 2622 <div class="text-center"> 2623 <div class="max-w-full max-h-full aspect-square w-44 h-44 inline-flex items-center justify-center rounded-full 2624 bg-sky-100 text-blue-400 outline-2 outline-dashed outline-blue-300 outline-offset-8"> 2625 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="120" height="120" aria-hidden="true"> 2626 <path d="M3 1a1 1 0 000 2h1.22l.305 1.222a.997.997 0 00.01.042l1.358 5.43-.893.892C3.74 11.846 4.632 14 6.414 14H15a1 1 0 000-2H6.414l1-1H14a1 1 0 00.894-.553l3-6A1 1 0 0017 3H6.28l-.31-1.243A1 1 0 005 1H3zM16 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM6.5 18a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"/> 2627</svg> 2628 </div> 2629 <p class="mt-10 text-xl"> 2630 <strong>Ihr Warenkorb ist leer</strong> 2631 </p> 2632 <p class="text-slate-500"> 2633 Sieht so aus, als hätten Sie Ihre Wahl noch nicht getroffen. </p> 2634 </div> 2635 </div> 2636 </template> 2637<!-- Messages container: single place to show messages new --> 2638<div id="custommhinspeyamove" class="mb-4"></div> 2639 <template x-if="itemsCount"> 2640 <ul class="grow flex flex-col overflow-y-auto overscroll-y-contain mask-overflow mask-dir-y"> 2641 <template x-for="item in cartItems"> 2642 <li class="flex gap-4 md:gap-6 items-start py-7 border-b border-slate-200"> 2643 <a 2644 class="block shrink-0 max-w-[25%]" 2645 :href="item.product_url" 2646 :title="hyva.str('Product\u0020\u0022\u00251\u0022', item.product_name)" 2647 > 2648 <img 2649 :src="item.product_image.src" 2650 :width="item.product_image.width" 2651 :height="item.product_image.height" 2652 loading="lazy" 2653 :alt="hyva.str('Product\u0020\u0022\u00251\u0022', item.product_name)" 2654 /> 2655 </a> 2656 <div class="grow space-y-4"> 2657 <div class="flex gap-2 justify-between items-center"> 2658 <p class="text-lg"> 2659 <strong x-html="item.product_name"></strong> 2660 </p>
2661 <span class="[&_.price]:font-normal" x-html="item.product_price"></span> 2662 </div> 2663 <template x-if="item.options && item.options.length || showSku"> 2664 <dl class="table text-sm"> 2665 <template x-if="showSku"> 2666 <div class="table-row"> 2667 <dt class="table-cell font-normal text-slate-500 min-w-[theme(spacing.16)] pr-2 pb-2"> 2668 SKU </dt> 2669 <dd class="table-cell font-bold pb-2" x-html="item.product_sku"></dd> 2670 </div> 2671 </template> 2672 <template x-for="option in item.options"> 2673 <div class="table-row"> 2674 <dt 2675 class="table-cell font-normal text-slate-500 min-w-[theme(spacing.16)] pr-2 pb-2" 2676 x-text="option.label" 2677 ></dt> 2678 <dd class="table-cell font-bold pb-2" x-html="option.value"></dd> 2679 </div> 2680 </template> 2681 </dl> 2682 </template> 2683 <div class="flex flex-wrap gap-2 justify-between items-center"> 2684 <form 2685 action="https://www.mode-jost.de/checkout/cart/updatePost/" 2686 x-data="{ 2687 initQty: item.qty, 2688 itemQty: item.qty, 2689 prevQty: item.qty, 2690 updateQty() { 2691 const submitEvent = new Event('submit', { cancelable: true }); 2692 this.$root.dispatchEvent(submitEvent); 2693 } 2694 }" 2695 @submit.prevent="updateItemQty($event.target);" 2696 x-init="$watch('isLoading', isLoading => { 2697 if (!isLoading) return; 2698 initQty = itemQty; 2699 prevQty = itemQty; 2700 })" 2701 method="post" 2702 class="form form-cart flex gap-1" 2703 > 2704 <input name="form_key" type="hidden" value="VYIswpNByTPP3EWM" /> <label class="mb-0"> 2705 <span class="sr-only">Anzahl</span> 2706 <input 2707 type="number" 2708 class="qty border-slate-300 shadow-none [-moz-appearance:textfield] 2709 form-input w-20 hover:[-moz-appearance:auto] [&::-webkit-inner-spin-button]:invisible hover:[&::-webkit-inner-spin-button]:visible" 2710 required 2711 min="0" 2712 step="any" 2713 x-model.number="itemQty" 2714 :id="`minicart-${item.item_id}-qty`" 2715 :name="`cart[${item.item_id}][qty]`" 2716 > 2717 </label> 2718 <button 2719 type="submit" 2720 class="btn justify-center rounded-md w-11 p-2 text-base shadow-none hover:shadow-lg active:shadow disabled:shadow-none transition 2721 bg-blue-600 text-white border border-transparent hover:bg-blue-700 focus:ring-blue-200 active:bg-blue-700 2722 disabled:bg-slate-600 disabled:text-slate-50 disabled:opacity-70 disabled:invisible" 2723 :disabled="itemQty === initQty || itemQty === null" 2724 :aria-label="hyva.str( 2725 'Update\u0020qty\u0020for\u0020\u0022\u00251\u0022', 2726 item.product_name 2727 )" 2728 > 2729 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 2730 <path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"/> 2731</svg> 2732 </button> 2733 </form> 2734 <div class="inline-flex flex-wrap items-center gap-1"> 2735 <a 2736 :href="item.configure_url" 2737 x-show="item.product_type !== 'grouped'" 2738 class="btn justify-center rounded-full p-2 text-base shadow-none hover:shadow-lg active:shadow transition 2739 bg-blue-100 text-blue-700 border border-transparent hover:bg-blue-200 focus:ring-blue-200 2740 active:bg-blue-200 disabled:bg-slate-50 disabled:text-slate-600 disabled:opacity-70" 2741 :aria-label="hyva.str(
2742 'Edit\u0020product\u0020\u0022\u00251\u0022', 2743 item.product_name 2744 )" 2745 > 2746 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 2747 <path d="M13.586 3.586a2 2 0 112.828 2.828l-.793.793-2.828-2.828.793-.793zM11.379 5.793L3 14.172V17h2.828l8.38-8.379-2.83-2.828z"/> 2748</svg> 2749 </a> 2750 <button 2751 type="button" 2752 class="btn justify-center rounded-full p-2 text-base shadow-none hover:shadow-lg active:shadow disabled:shadow-none transition 2753 bg-white text-slate-700 border border-slate-400 hover:bg-white focus:ring-slate-200 disabled:bg-white disabled:border-slate-200 disabled:text-slate-600 disabled:opacity-70" 2754 @click="deleteItemFromCart(item.item_id)" 2755 :aria-label="hyva.str( 2756 'Remove\u0020product\u0020\u0022\u00251\u0022\u0020from\u0020cart', 2757 item.product_name 2758 )" 2759 > 2760 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 2761 <path fill-rule="evenodd" d="M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z" clip-rule="evenodd"/> 2762</svg> 2763 </button> 2764 </div> 2765 </div> 2766 </div> 2767 </li> 2768 </template> 2769 </ul> 2770 </template> 2771 2772 2773 <template x-if="itemsCount"> 2774 <div> 2775 2776 <dl class="flex gap-2 justify-between items-center text-sm font-bold"> 2777 <dt class="text-slate-500">Zwischensumme</dt> 2778 <dd x-html="cart.subtotal"></dd> 2779 </dl> 2780 2781 <div class="flex flex-col gap-y-4 mt-8"> 2782 <a 2783 @click.prevent.stop="$dispatch( 2784 'toggle-authentication', 2785 { url: 'https://www.mode-jost.de/checkout/' } 2786 );" 2787 href="https://www.mode-jost.de/checkout/" 2788 class="btn justify-center rounded-full py-3 px-6 text-base shadow-none hover:shadow-lg active:shadow transition 2789 bg-black text-white border border-transparent hover:bg-black focus:bg-black active:bg-black rounded-none" 2790 > 2791 Kasse </a> 2792 <a 2793 href="https://www.mode-jost.de/checkout/cart/" 2794 class="rounded-none btn justify-center py-3 px-6 text-base shadow-none hover:shadow-lg active:shadow transition 2795 bg-white text-blue-700 border border-blue-400 hover:bg-white focus:ring-blue-200" 2796 > 2797 Warenkorb ansehen und bearbeiten </a> 2798 </div> 2799 </div> 2800 </template> 2801 2802 <template x-if="!itemsCount"> 2803 <div class="flex flex-col"> 2804 <button 2805 type="button" 2806 @click="closeCartDrawer" 2807 class="btn justify-center rounded-md py-3 px-6 text-base shadow-none hover:shadow-lg active:shadow disabled:shadow-none transition 2808 bg-black rounded-none text-white border border-transparent hover:bg-black focus:ring-black-200 active:bg-black disabled:bg-slate-600 disabled:text-slate-50 disabled:opacity-70" 2809 >Weiter einkaufen</button> 2810 </div> 2811 </template> 2812 2813 2814 <div 2815 class="z-50 fixed inset-0 flex justify-center items-center bg-white/70 select-none" 2816 x-show="isLoading" 2817 x-cloak 2818 x-transition.opacity.duration.200ms 2819> 2820 <div class="flex items-center"> 2821 <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"> 2822 <circle style="opacity: .3;" cx="12" cy="12" r="10"/> 2823 <path fill="none" stroke-width="2" d="M12,2 a10,10 0 0,1 10,10"/> 2824</svg> 2825 <div class="ml-10 text-xl"> 2826 Laden... </div> 2827 </div> 2828</div> 2829</dialog> 2830<style> 2831 #custommhinspeyamove button.text-gray-600.hover\:text-black { 2832 display: none; 2833} 2834</style> 2835 <!--Authentication Pop-Up--> 2836 <!-- BLOCK authentication-popup -->
2836<script> 2837 function initAuthentication() { 2838 return { 2839 open: false, 2840 close() { 2841 this.open = false; 2842 }, 2843 forceAuthentication: false, 2844 checkoutUrl: 'https://www.mode-jost.de/checkout/index/', 2845 errors: 0, 2846 hasCaptchaToken: 0, 2847 displayErrorMessage: false, 2848 errorMessages: [], 2849 setErrorMessages(message) { 2850 this.errorMessages = [message]; 2851 this.displayErrorMessage = true; 2852 }, 2853 submitForm() { 2854 // Do not rename $form, the variable is expected to be declared in the recaptcha output 2855 const $form = document.querySelector('#login-form'); 2856 2857 if (this.errors === 0) { 2858 this.dispatchLoginRequest($form); 2859 } 2860 }, 2861 onPrivateContentLoaded() { 2862 const data = this.$event.detail.data; 2863 const isLoggedIn = data.customer && data.customer.firstname; 2864 if (data.cart && !isLoggedIn) { 2865 this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; 2866 } 2867 }, 2868 redirectIfAuthenticated() { 2869 const event = this.$event; 2870 this.open = this.forceAuthentication; 2871 2872 if (event.detail && event.detail.url) { 2873 this.checkoutUrl = event.detail.url; 2874 } 2875 if (!this.forceAuthentication) { 2876 window.location.href = this.checkoutUrl; 2877 } 2878 }, 2879 resetErrors() { 2880 this.errors = 0; 2881 }, 2882 dispatchLoginRequest(form) { 2883 this.isLoading = true; 2884 const username = this.$refs['customer-email'].value; 2885 const password = this.$refs['customer-password'].value; 2886 const formKey = hyva.getFormKey(); 2887 const bodyFields = { 2888 'username': username, 2889 'password': password, 2890 'formKey': formKey 2891 }; 2892 const fieldName = 'g\u002Drecaptcha\u002Dresponse'; 2893 const recaptchaField = fieldName && form[fieldName]; 2894 if (recaptchaField) { 2895 bodyFields[fieldName] = recaptchaField.value; 2896 } 2897 fetch('https://www.mode-jost.de/customer/ajax/login/', { 2898 method: 'POST', 2899 headers: { 2900 'Content-Type': 'application/json', 2901 'X-Requested-With': 'XMLHttpRequest' 2902 }, 2903 body: JSON.stringify(bodyFields) 2904 } 2905 ).then(response => { 2906 return response.json() 2907 } 2908 ).then(data => { 2909 this.isLoading = false; 2910 if (data.errors) { 2911 this.setErrorMessages(data.message); 2912 this.errors = 1; 2913 this.hasCaptchaToken = 0; 2914 } else { 2915 window.location.href = this.checkoutUrl; 2916 } 2917 }); 2918 }, 2919 eventListeners: { 2920 ['@private-content-loaded.window']() { 2921 this.onPrivateContentLoaded(); 2922 }, 2923 ['@toggle-authentication.window']() { 2924 this.redirectIfAuthenticated(); 2925 }, 2926 ['@pageshow.window'](event) { 2927 if (event.persisted) { 2928 this.close(); 2929 }; 2930 } 2931 } 2932 } 2933 } 2934 2935 window.addEventListener('alpine:init', () => Alpine.data('initAuthentication', initAuthentication), {once: true}) 2936</script>
2936 2937 2938<div x-data="initAuthentication" x-bind="eventListeners"> 2939 <dialog 2940 id="authentication-popup" 2941 aria-labelledby="authentication-popup-title" 2942 class="open:flex flex-col transition ease-out duration-300 motion-reduce:duration-0 w-xl p-0 " 2943 x-show="open" 2944 x-htmldialog="close" 2945 closeby="any" 2946 x-transition 2947 > 2948 <div class="pt-8 px-8"> 2949 <div class="flex gap-2 justify-between items-center"> 2950 <p id="authentication-popup-title" class="text-xl"> 2951 <strong>Kundenlogin</strong> 2952 </p> 2953 <button 2954 type="button" 2955 class="btn bg-transparent border-transparent p-2" 2956 @click="close" 2957 aria-label="Panel schließen" 2958 > 2959 <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> 2960 </button> 2961 </div> 2962 2963 <div class="message error" x-show="errors" x-cloak> 2964 <template x-for="(message, index) in errorMessages" :key="index"> 2965 <div> 2966 <template x-if="message"> 2967 <span x-html="message"></span> 2968 </template> 2969 </div> 2970 </template> 2971 </div> 2972 </div> 2973 2974 <div class="block-customer-login p-8"> 2975 <p id="authenticate-customer-login" class="text-lg mb-2"> 2976 <strong>Auschecken über Ihr Konto</strong> 2977 </p> 2978 2979 <form 2980 id="login-form" 2981 class="form form-login" 2982 method="post" 2983 @submit.prevent="submitForm" 2984 > 2985 <input name="context" type="hidden" value="checkout"> 2986 2987 <div class="flex flex-col gap-4 mb-3"> 2988 <div class="field email required"> 2989 <label for="form-login-username"> 2990 <span>E-Mail-Adresse</span> 2991 </label> 2992 <div class="control"> 2993 <input 2994 id="form-login-username" 2995 name="username" 2996 type="email" 2997 class="form-input w-full" 2998 required 2999 autocomplete="off" 3000 x-ref="customer-email" 3001 @change="resetErrors" 3002 > 3003 </div> 3004 </div> 3005 <div class="field password required"> 3006 <label for="form-login-password"> 3007 <span>Passwort</span> 3008 </label> 3009 <div class="control"> 3010 <input 3011 id="form-login-password" 3012 name="password" 3013 type="password" 3014 class="form-input w-full" 3015 required 3016 autocomplete="off" 3017 x-ref="customer-password" 3018 @change="resetErrors" 3019 > 3020 </div> 3021 </div> 3022 </div> 3023 3024 3025 <div class="actions-toolbar"> 3026 <button 3027 type="submit" 3028 class="btn btn-primary" 3029 > 3030 Anmelden </button> 3031 <a 3032 href="https://www.mode-jost.de/customer/account/forgotpassword/" 3033 class="underline hover:no-underline" 3034 > 3035 Passwort vergessen? </a> 3036 </div> 3037 </form> 3038 3039 </div> 3040 3041 <div class="block-new-customer p-8 border-t border-gray-300">
3042 <p id="authenticate-new-customer" class="text-lg mb-2"> 3043 <strong>Als Neukunde auschecken</strong> 3044 </p> 3045 3046 <div class="block-content"> 3047 <p class="mb-1"> 3048 Ein Konto zu erstellen hat viele Vorteile: </p> 3049 <ul class="list-disc pl-5"> 3050 <li> Bestellungen und Sendungen verfolgen</li> 3051 <li> Alte Bestellungen einsehen</li> 3052 <li> Schneller zur Kasse gehen</li> 3053 </ul> 3054 <div class="actions-toolbar mt-6 mb-2"> 3055 <a href="https://www.mode-jost.de/customer/account/create/" 3056 class="inline-flex btn btn-primary"> 3057 Ein Konto erstellen </a> 3058 </div> 3059 </div> 3060 </div> 3061 </dialog> 3062</div> 3063<!-- /BLOCK authentication-popup --></div> 3064<style> 3065 .catalog-category-view span.shipping-cost-details { 3066 display: none; 3067} 3068 3069.catalog-category-view span.tax-separator { 3070 display: none; 3071} 3072 3073.catalog-category-view span.tax-label { 3074 display: none; 3075} 3076 3077 3078.cart-summary .cart-summary-actions .mhcard-add-code { 3079 width: 100%; 3080} 3081.actions-toolbar .secondary button.btn.btn-secondary { 3082 color: #000 !important; 3083 border: 1px solid #000 !important; 3084} 3085 3086.cart.table-wrapper table.cart.items .iconBlockCart>a.btn { 3087 display: inline-block; 3088} 3089 3090.cart.table-wrapper table.cart.items .iconBlockCart button.btn { 3091 display: inline; 3092} 3093 3094 3095 3096.cart table tbody tr td.item { 3097 min-width: 260px; 3098} 3099.header-custom-btn { 3100 color: #fff!important; 3101 background: #e2650c; 3102 text-transform: uppercase; 3103 font-size: 1rem; 3104 margin: auto; 3105 font-family: din-condensed, sans-serif!important; 3106 padding: 0.7rem; 3107 letter-spacing: normal !important; 3108 font-weight: 400; 3109 border-radius: 0.175rem; 3110 border: 0.08rem solid #e2650c; 3111 line-height: 100% !important; 3112 display: inline-block; 3113} 3114 3115.header-custom-btn:hover { 3116 background: transparent; 3117 color:#e2650c!important; 3118} 3119@media(max-width:767px){ 3120 tr.item-info { 3121 display: flex; 3122 flex-flow: column; 3123} 3124 .cart table tbody tr td.item { 3125 min-width: auto; 3126} 3127} 3128</style> 3129</header><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> 3130<div class="page messages">
3130<script> 3131 function initMessages() { 3132 "use strict"; 3133 return { 3134 messages: window.mageMessages || [], 3135 isEmpty() { 3136 return this.messages.reduce( 3137 function (isEmpty, message) { 3138 return isEmpty && message === undefined 3139 }, true 3140 ) 3141 }, 3142 hasMessages() { 3143 return !this.isEmpty(); 3144 }, 3145 hasMessage() { 3146 return !!this.message; 3147 }, 3148 removeMessage() { 3149 this.messages[this.index] = undefined; 3150 }, 3151 addMessages(messages, hideAfter) { 3152 messages.map((message) => { 3153 if (!message.text || !message.text.trim()) return; 3154 this.messages = this.messages.concat(message); 3155 if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { 3156 hideAfter = window.defaultSuccessMessageTimeout; 3157 } 3158 if (hideAfter) { 3159 this.setHideTimeOut(this.messages.length -1, hideAfter); 3160 } 3161 }); 3162 }, 3163 setHideTimeOut(messageIndex, hideAfter) { 3164 setTimeout((messageIndex) => { 3165 this.messages[messageIndex] = undefined; 3166 }, hideAfter, messageIndex); 3167 }, 3168 eventListeners: { 3169 ['@messages-loaded.window'](event) { 3170 this.addMessages(event.detail.messages, event.detail.hideAfter) 3171 }, 3172 ['@private-content-loaded.window'](event) { 3173 const data = event.detail.data; 3174 if ( 3175 data.messages && 3176 data.messages.messages && 3177 data.messages.messages.length 3178 ) { 3179 this.addMessages(data.messages.messages); 3180 } 3181 }, 3182 ['@clear-messages.window']() { 3183 this.messages = []; 3184 }, 3185 ['@pageshow.window'](event) { 3186 if (event.persisted) { 3187 this.messages = []; 3188 }; 3189 } 3190 }, 3191 getMessageUiId() { 3192 return 'message-' + this.message.type; 3193 } 3194 } 3195 } 3196 3197 window.addEventListener('alpine:init', () => Alpine.data('initMessages', initMessages), {once: true}) 3198</script>
3198 3199<section id="messages" 3200 x-data="initMessages" 3201 x-bind="eventListeners" 3202 role="alert" 3203> 3204 <template x-if="hasMessages"> 3205 <div class="w-full"> 3206 <div class="messages container mx-auto py-3"> 3207 <template x-for="(message, index) in messages" :key="index"> 3208 <div> 3209 <template x-if="hasMessage"> 3210 <div class="message" 3211 :class="message.type" 3212 :ui-id="getMessageUiId" 3213 > 3214 <span x-html="message.text"></span> 3215 <button 3216 type="button" 3217 class="text-gray-600 hover:text-black" 3218 aria-label="Nachricht schlieÃen" 3219 @click.prevent="removeMessage" 3220 > 3221 <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"> 3222 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 3223</svg> 3224 </button> 3225 </div> 3226 </template> 3227 </div> 3228 </template> 3229 </div> 3230 </div> 3231 </template> 3232</section> 3233</div><div class="columns"><div class="column main"><style>*, ::before, ::after { 3234--tw-border-spacing-x: 0; 3235--tw-border-spacing-y: 0; 3236--tw-translate-x: 0; 3237--tw-translate-y: 0; 3238--tw-rotate: 0; 3239--tw-skew-x: 0; 3240--tw-skew-y: 0; 3241--tw-scale-x: 1; 3242--tw-scale-y: 1; 3243--tw-pan-x: ; 3244--tw-pan-y: ; 3245--tw-pinch-zoom: ; 3246--tw-scroll-snap-strictness: proximity; 3247--tw-gradient-from-position: ; 3248--tw-gradient-via-position: ; 3249--tw-gradient-to-position: ; 3250--tw-ordinal: ; 3251--tw-slashed-zero: ; 3252--tw-numeric-figure: ; 3253--tw-numeric-spacing: ; 3254--tw-numeric-fraction: ; 3255--tw-ring-inset: ; 3256--tw-ring-offset-width: 0px; 3257--tw-ring-offset-color: #fff; 3258--tw-ring-color: rgb(59 130 246 / 0.5); 3259--tw-ring-offset-shadow: 0 0 #0000; 3260--tw-ring-shadow: 0 0 #0000; 3261--tw-shadow: 0 0 #0000; 3262--tw-shadow-colored: 0 0 #0000; 3263--tw-blur: ; 3264--tw-brightness: ; 3265--tw-contrast: ; 3266--tw-grayscale: ; 3267--tw-hue-rotate: ; 3268--tw-invert: ; 3269--tw-saturate: ; 3270--tw-sepia: ; 3271--tw-drop-shadow: ; 3272--tw-backdrop-blur: ; 3273--tw-backdrop-brightness: ; 3274--tw-backdrop-contrast: ; 3275--tw-backdrop-grayscale: ; 3276--tw-backdrop-hue-rotate: ; 3277--tw-backdrop-invert: ; 3278--tw-backdrop-opacity: ; 3279--tw-backdrop-saturate: ; 3280--tw-backdrop-sepia: ; 3281--tw-contain-size: ; 3282--tw-contain-layout: ; 3283--tw-contain-paint: ; 3284--tw-contain-style: 3285} 3286::backdrop { 3287--tw-border-spacing-x: 0; 3288--tw-border-spacing-y: 0; 3289--tw-translate-x: 0; 3290--tw-translate-y: 0; 3291--tw-rotate: 0; 3292--tw-skew-x: 0; 3293--tw-skew-y: 0; 3294--tw-scale-x: 1; 3295--tw-scale-y: 1; 3296--tw-pan-x: ; 3297--tw-pan-y: ; 3298--tw-pinch-zoom: ; 3299--tw-scroll-snap-strictness: proximity; 3300--tw-gradient-from-position: ; 3301--tw-gradient-via-position: ; 3302--tw-gradient-to-position: ; 3303--tw-ordinal: ; 3304--tw-slashed-zero: ; 3305--tw-numeric-figure: ; 3306--tw-numeric-spacing: ; 3307--tw-numeric-fraction: ; 3308--tw-ring-inset: ; 3309--tw-ring-offset-width: 0px; 3310--tw-ring-offset-color: #fff; 3311--tw-ring-color: rgb(59 130 246 / 0.5); 3312--tw-ring-offset-shadow: 0 0 #0000; 3313--tw-ring-shadow: 0 0 #0000; 3314--tw-shadow: 0 0 #0000; 3315--tw-shadow-colored: 0 0 #0000; 3316--tw-blur: ; 3317--tw-brightness: ; 3318--tw-contrast: ; 3319--tw-grayscale: ; 3320--tw-hue-rotate: ; 3321--tw-invert: ; 3322--tw-saturate: ; 3323--tw-sepia: ; 3324--tw-drop-shadow: ; 3325--tw-backdrop-blur: ; 3326--tw-backdrop-brightness: ; 3327--tw-backdrop-contrast: ; 3328--tw-backdrop-grayscale: ; 3329--tw-backdrop-hue-rotate: ; 3330--tw-backdrop-invert: ; 3331--tw-backdrop-opacity: ; 3332--tw-backdrop-saturate: ; 3333--tw-backdrop-sepia: ; 3334--tw-contain-size: ; 3335--tw-contain-layout: ; 3336--tw-contain-paint: ; 3337--tw-contain-style: 3338} 3339.cmsp18-block { 3340display: block 3341} 3342.cmsp18-inline { 3343display: inline 3344}</style> 3345<div class="magezon-builder magezon-builder-preload"><div id="Modehaus-BigTeaser" class="bh7cydt mgz-element mgz-element-row modehaus-teaser
3345-page-row full_width_row"><div class="mgz-element-inner bh7cydt-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="nt3kdv0 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner nt3kdv0-s"><div class="kkge6cb mgz-element mgz-child mgz-element-slider"><div class="mgz-element-inner kkge6cb-s"><div id="17902541916ab51c6fe3021" class="mgz-carousel owl-carousel mgz-carousel-dot-inside mgz-carousel-nav-position-top_split mgz-carousel-nav-size-normal" data-slider_height="690"><div id="kkge6cb-slider-item0" class="item mgz-carousel-item " data-src="https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Damen/Trends/Jost-Webseite-Contentwechsel-Bilder-Damen-Trends-Header.jpg" style="background-image:url(https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Damen/Trends/Jost-Webseite-Contentwechsel-Bilder-Damen-Trends-Header.jpg)"><a href="/mode/damen/damen-trends" class="overlay-link" title="Mode Damen" ></a> <div class="slide-background slide-background-image"></div></div><div id="kkge6cb-slider-item1" class="item mgz-carousel-item " data-src="https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Herren/Trends/Jost-Webseite-Contentwechsel-Bilder-Herren-Trends-Header.jpg" style="background-image:url(https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Herren/Trends/Jost-Webseite-Contentwechsel-Bilder-Herren-Trends-Header.jpg)"><a href="/mode/herren/herren-trends" class="overlay-link" title="Mode Herren" ></a> <div class="slide-background slide-background-image"></div></div><div id="kkge6cb-slider-item2" class="item mgz-carousel-item " data-src="https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Kinder/Jost-Webseite-Contentwechsel-Bilder-Kinder-Trends-Header.jpg" style="background-image:url(https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Kinder/Jost-Webseite-Contentwechsel-Bilder-Kinder-Trends-Header.jpg)"><a href="/mode/kinder/kinder-trends" class="overlay-link" title="Kinder Trends" ></a> <div class="slide-background slide-background-image"></div></div><div id="kkge6cb-slider-item3" class="item mgz-carousel-item " data-src="https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Damen/Junge-Mode/Jost-Webseite-Contentwechsel-Bilder-WomenYoungFashion-Header4.jpg" style="background-image:url(https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Damen/Junge-Mode/Jost-Webseite-Contentwechsel-Bilder-WomenYoungFashion-Header4.jpg)"><a href="/mode/damen/young-fashion" class="overlay-link" title="Young Fashion Damen" ></a> <div class="slide-background slide-background-image"></div></div><div id="kkge6cb-slider-item4" class="item mgz-carousel-item " data-src="https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Herren/Junge-Mode/Jost-Webseite-Contentwechsel-Bilder-MenYoungFashion-Header4.jpg" style="background-image:url(https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Herren/Junge-Mode/Jost-Webseite-Contentwechsel-Bilder-MenYoungFashion-Header4.jpg)"><a href="/mode/herren/young-fashion" class="overlay-link" title="Young Fashion Herren" ></a> <div class="slide-background slide-background-image"></div></div><div id="kkge6cb-slider-item5" class="item mgz-carousel-item " data-src="https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Damen/Schuhe/Jost-Webseite-Contentwechsel-Damen-Schuhe-Header.jpg" style="background-image:url(https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Damen/Schuhe/Jost-Webseite-Contentwechsel-Damen-Schuhe-Header.jpg)"><a href="/mode/damen/schuhe" class="overlay-link" title="Schuhe Damen" ></a> <div class="slide-background slide-background-image"></div></div><div id="kkge6cb-slider-item6" class="item mgz-carousel-item " data-src="https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Herren/Schuhe/Jost-Webseite-Contentwechsel-Bilder-Herren-Schuhe-Header2.jpg" style="background-image:url(https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Herren/Schuhe/Jost-Webseite-Contentwechsel-Bilder-Herren-Schuhe-Header2.jpg)"><a href="/mode/herren/schuhe" class="overlay-link" title="Schuhe Herren" ></a> <div class="slide-background slide-background-image"></div></div><div id="kkge6cb-slider-item7" class="item mgz-carousel-item " data-src="https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Damen/Waesche/Jost-Webseite-Contentwechsel-Bilder-Nachtwaesche-Damen-Header2.jpg" style="background-image:url(https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Damen/Waesche/Jost-Webseite-Contentwechsel-Bilder-Nachtwaesche-Damen-Header2.jpg)"><a href="/mode/waesche-bade/tag-und-nachtwaesche-damen" class="overlay-link" title="Nachtwu00e4sche Damen" ></a> <div class="slide-background slide-background-image"></div></div><div id="kkge6cb-slider-item8" class="item mgz-carousel-item " data-src="https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-FS/
3345Damen/Bademode/Jost-Webseite-Contentwechsel-Bilder-Damen-Bademode-Header-Aubade.jpg" style="background-image:url(https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-FS/Damen/Bademode/Jost-Webseite-Contentwechsel-Bilder-Damen-Bademode-Header-Aubade.jpg)"><a href="/mode/waesche-bade/damen-bademode" class="overlay-link" title="Bademode Damen" ></a> <div class="slide-background slide-background-image"></div></div><div id="kkge6cb-slider-item9" class="item mgz-carousel-item " data-src="https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Herren/Waesche/Jost-Webseite-Contentwechsel-HW-2026-Bilder-Nachtwaesche-Herren-Header3.jpg" style="background-image:url(https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-HW/Herren/Waesche/Jost-Webseite-Contentwechsel-HW-2026-Bilder-Nachtwaesche-Herren-Header3.jpg)"><a href="/mode/waesche-bade/tag-und-nachtwaesche-herren" class="overlay-link" title="Tag- und Nachtwu00e4sche Herren" ></a> <div class="slide-background slide-background-image"></div></div><div id="kkge6cb-slider-item10" class="item mgz-carousel-item " data-src="https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-FS/Herren/Bademode/Jost-Webseite-Contentwechsel-Bilder-Herren-Bademode-Header-Schiesser.jpg" style="background-image:url(https://www.mode-jost.de/media/wysiwyg/Header/Mode-2026-FS/Herren/Bademode/Jost-Webseite-Contentwechsel-Bilder-Herren-Bademode-Header-Schiesser.jpg)"><a href="/mode/waesche-bade/herren-bademode" class="overlay-link" title="Herren Bademode" ></a> <div class="slide-background slide-background-image"></div></div></div>
3345<script> 3346 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 3347 .then(() => { 3348 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/js/owl.carousel.min.js', 'carousel'); 3349 }) 3350 .then(() => { 3351 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/slider.min.js', 'slider'); 3352 }) 3353 .then(() => { 3354 $(document).ready(function() { 3355 setTimeout(function() { 3356 $('#17902541916ab51c6fe3021').trigger('destroy.owl.carousel'); 3357 $('#17902541916ab51c6fe3021').slider({"nav":false,"dots":false,"autoplayHoverPause":true,"autoplay":true,"autoplayTimeout":"5000","lazyLoad":true,"loop":true,"margin":0,"autoHeight":false,"rtl":false,"center":false,"slideBy":1,"animateIn":"","animateOut":"","stagePadding":0}); 3358 }, 500); 3359 }); 3360 }) 3361</script>
3361</div></div></div></div></div>
3361<script> 3362 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 3363 .then(() => { 3364 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 3365 }) 3366 .then(() => { 3367 const elemId = $('.bh7cydt'); 3368 let mgzBuilder = new MagezonBuilder(elemId); 3369 }) 3370</script>
3370</div></div><div class="k5t1l91 mgz-element mgz-element-row contained mgz-container mgz-row-equal-height content-middle"><div class="mgz-element-inner k5t1l91-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content "><div class="enmcybr mgz-element mgz-element-column mgz-col-md-12 mgz-row-gap-margin"><div class="mgz-element-inner enmcybr-s"><div class="ndh1159 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ndh1159-s"><h1>Mode Jost</h1><h2 class="p1"><span class="s1">Für Ihren stilvollen Auftritt</span></h2><p class="p1"><span class="s1">Stil beweisen â das ist für Mode Jost nicht nur der wichtigste Anspruch bei der Auswahl unserer Kollektionen. Wir finden: Hochwertige Mode sollte auch in einem stilvollen, einzigartigen Ambiente zur Geltung kommen. Genau das bieten wir unseren Kunden in unseren fünf Filialen: ein erfüllendes Einkaufserlebnis in entspannter Atmosphäre. </span></p><p class="p1"><span class="s1">Wir möchten, dass Sie sich bei uns wohlfühlen. Denn Mode ist unsere groÃe Leidenschaft â und das seit unserer Gründung im Jahr 1892. Das Herzstück unseres inhabergeführten Modehauses ist unser motiviertes Team aus über 300 Mitarbeitern. Unsere Fachkräfte stehen Ihnen jederzeit für eine professionelle und stilsichere Beratung zur Verfügung. Bei Mode Jost sind Ehrlichkeit, Vertrauen und gegenseitige Wertschätzung die wichtigste Basis â sowohl im Kundenkontakt wie auch untereinander. Der Mensch steht bei uns im Vordergrund, als Kunde und als Mitarbeiter. </span></p><p class="p1"><span class="s1">Unser Sortiment umfasst <a href="https://mode-jost.de/mode/damen">Damen-</a>, <a href="https://mode-jost.de/mode/herren">Herren-</a> und <a href="https://mode-jost.de/mode/kinder">Kindermode</a> zahlreicher bekannter Marken. Dank saisonal wechselnder Kollektionen wartet bei jedem Besuch in unseren groÃzügig geschnittenen Filialen neue Trendmode auf stilbewusste Kunden. Wir freuen uns darauf, Sie in unserem Modehaus begrüÃen zu dürfen!</span></p></div></div></div></div></div>
3370<script> 3371 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 3372 .then(() => { 3373 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 3374 }) 3375 .then(() => { 3376 const elemId = $('.k5t1l91'); 3377 let mgzBuilder = new MagezonBuilder(elemId); 3378 }) 3379</script>
3379</div></div><div class="rbecd04 mgz-element mgz-element-row modehaus-teaser-page-row full_width_row mgz-row-equal-height content-middle"><div class="mgz-element-inner rbecd04-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="dd5y50s mgz-element mgz-element-column mgz-col-md-3 mgz-row-gap-margin"><div class="mgz-element-inner dd5y50s-s"><div class="crgxcif mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner crgxcif-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner 8493e19 mgz-flex-position-bottom-center hover-type-zoomin mgz-image-link" x-data="{ currentSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/2026HW/Jost-Webseite-Contentwechsel-Bilder-Damen-Trends-Teaser.jpg', originalSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/2026HW/Jost-Webseite-Contentwechsel-Bilder-Damen-Trends-Teaser.jpg', hoverImage: '', handleHover() { if (this.hoverImage) { this.currentSrc = this.hoverImage; } }, handleLeave() { if (this.hoverImage) { this.currentSrc = this.originalSrc; } } }" @mouseenter="handleHover()" @mouseleave="handleLeave()" ><a class="" href="/mode" data-type="image" data-title="Mode" data-zoom="1" ><img class="mgz-hover-main" src="https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/2026HW/Jost-Webseite-Contentwechsel-Bilder-Damen-Trends-Teaser.jpg" :src="currentSrc" alt="Modehaus Jost | Mode" title="Mode"/></a> <div class="image-content"><div class="image-title">Mode</div></div></div></div></div></div><div class="uxn4t2d mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner uxn4t2d-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner d1b3eac mgz-flex-position-bottom-center hover-type-zoomin mgz-image-link" x-data="{ currentSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/unternehmen-teaser.jpg', originalSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/unternehmen-teaser.jpg', hoverImage: '', handleHover() { if (this.hoverImage) { this.currentSrc = this.hoverImage; } }, handleLeave() { if (this.hoverImage) { this.currentSrc = this.originalSrc; } } }" @mouseenter="handleHover()" @mouseleave="handleLeave()" ><a class="" href="https://www.mode-jost.de/unternehmen" data-type="image" data-title="Unternehmen" data-zoom="1" ><img class="mgz-hover-main" src="https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/unternehmen-teaser.jpg" :src="currentSrc" alt="Modehaus Jost | Unternehmen" title="Unternehmen"/></a> <div class="image-content"><div class="image-title">Unternehmen</div></div></div></div></div></div></div></div><div class="nqx1tbq mgz-element mgz-element-column mgz-col-md-3 mgz-row-gap-margin"><div class="mgz-element-inner nqx1tbq-s"><div class="kxaicg9 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner kxaicg9-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner 8bdb90e mgz-flex-position-bottom-center hover-type-zoomin mgz-image-link" x-data="{ currentSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/filialen-teaser.jpg', originalSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/filialen-teaser.jpg', hoverImage: '', handleHover() { if (this.hoverImage) { this.currentSrc = this.hoverImage; } }, handleLeave() { if (this.hoverImage) { this.currentSrc = this.originalSrc; } } }" @mouseenter="handleHover()" @mouseleave="handleLeave()" ><a class="" href="https://www.mode-jost.de/filialen" data-type="image" data-title="Filialen" data-zoom="1" ><img class="mgz-hover-main" src="https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/filialen-teaser.jpg" :src="currentSrc" alt="Modehaus Jost | Filialen" title="Filialen"/></a> <div class="image-content"><div class="image-title">Filialen</div></div></div></div></div></div><div class="n3atxmv mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner n3atxmv-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner 2fac1e7 mgz-flex-position-bottom-center hover-type-zoomin mgz-image-link" x-data="{ currentSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/job-und-ausbildung-teaser.jpg', originalSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/job-und-ausbildung-teaser.jpg', hoverImage: '', handleHover() { if (this.hoverImage) { this.currentSrc = this.hoverImage; } }, handleLeave() { if (this.hoverImage) { this.currentSrc = this.originalSrc; } } }" @mouseenter="handleHover()" @mouseleave="handleLeave()" ><a class="" href="https://www.mode-jost.de/job-und-ausbildung" data-type="image" data-title="Job & Ausbildung" data-zoom="1" ><img class="mgz-hover-main" src="https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/job-und-ausbildung-teaser.jpg" :src="currentSrc" alt="Modehaus Jost | Job & Ausbildung" title="Job & Ausbildung"/></a> <div class="image-content"><div class="image-title">Job & Ausbildung</div></div></div></div></div></div></div></div><div class="vj9j2ve mgz-element mgz-element-column mgz-col-md-3 mgz-row-gap-margin"><div class="mgz-element-inner vj9j2ve-s"><div class="ixd5jby mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ixd5jby-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner e81ad63 mgz-flex-position-bottom-center hover-type-zoomin mgz-image-link" x-data="{ currentSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/aktuelles-teaser.jpg', originalSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/aktuelles-teaser.jpg', hoverImage: '', handleHover() { if (this.hoverImage) { this.currentSrc = this.hoverImage; } }, handleLeave() { if (this.hoverImage) { this.currentSrc = this.originalSrc; } } }" @mouseenter="handleHover()" @mouseleave="handleLeave()" ><a class="" href="https://www.mode-jost.de/aktuelles" data-type="image" data-title="Aktuelles" data-zoom="1" ><img class="mgz-hover-main" src="https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/aktuelles-teaser.jpg" :src="currentSrc" alt="Modehaus Jost | Aktuelles" title="Aktuelles"/></a> <div class="image-content"><div class="image-title">Aktuelles</div></div></div></div></div></div><div class="f9qmmxj mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner f9qmmxj-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner 82f25ec mgz-flex-position-bottom-center hover-type-zoomin mgz-image-link" x-data="{ currentSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/azubi-webseite.jpg', originalSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/azubi-webseite.jpg', hoverImage: '', handleHover() { if (this.hoverImage) { this.currentSrc = this.hoverImage; } }, handleLeave() { if (this.hoverImage) { this.currentSrc = this.originalSrc; } } }" @mouseenter="handleHover()" @mouseleave="handleLeave()" ><a class="" href="https://azubi.mode-jost.de/startseite/" data-type="image" data-title="Ausbildung bei Jost" data-zoom="1" target="_blank" ><img class="mgz-hover-main" src="https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/azubi-webseite.jpg" :src="currentSrc" alt="Modehaus Jost |Â Ausbildung" title="Ausbildung bei Jost"/></a> <div class="image-content"><div class="image-title">Ausbildung bei Jost</div></div></div></div></div></div></div></div><div class="fppo318 mgz-element mgz-element-column mgz-col-md-3 mgz-row-gap-margin"><div class="mgz-element-inner fppo318-s"><div class="gf644nr mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner gf644nr-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner 93fe622 mgz-flex-position-bottom-center hover-type-zoomin mgz-image-link" x-data="{ currentSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/service-teaser.jpg', originalSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/service-teaser.jpg', hoverImage: '', handleHover() { if (this.hoverImage) { this.currentSrc = this.hoverImage; } }, handleLeave() { if (this.hoverImage) { this.currentSrc = this.originalSrc; } } }" @mouseenter="handleHover()" @mouseleave="handleLeave()" ><a class="" href="https://www.mode-jost.de/service" data-type="image" data-title="Service" data-zoom="1" ><img class="mgz-hover-main" src="https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/service-teaser.jpg" :src="currentSrc" alt="Modehaus Jost | Service" title="Service"/></a> <div class="image-content"><div class="image-title">Service</div></div></div></div></div></div><div class="ld114oc mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ld114oc-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner b7a927d mgz-flex-position-bottom-center hover-type-zoomin mgz-image-link" x-data="{ currentSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/Jost-geschenkgutschein-hauptteil-v2.jpg', originalSrc: 'https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/Jost-geschenkgutschein-hauptteil-v2.jpg', hoverImage: '', handleHover() { if (this.hoverImage) { this.currentSrc = this.hoverImage; } }, handleLeave() { if (this.hoverImage) { this.currentSrc = this.originalSrc; } } }" @mouseenter="handleHover()" @mouseleave="handleLeave()" ><a class="" href="https://jost.modehaus.de/gutscheine" data-type="image" data-title="Geschenkgutschein" data-zoom="1" ><img class="mgz-hover-main" src="https://www.mode-jost.de/media/wysiwyg/Teaser-Unterseiten/Jost-geschenkgutschein-hauptteil-v2.jpg" :src="currentSrc" alt="Modehaus Jost | Geschenkgutschein" title="Geschenkgutschein"/></a> <div class="image-content"><div class="image-title">Geschenkgutschein</div></div></div></div></div></div></div></div></div>
3379<script> 3380 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 3381 .then(() => { 3382 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 3383 }) 3384 .then(() => { 3385 const elemId = $('.rbecd04'); 3386 let mgzBuilder = new MagezonBuilder(elemId); 3387 }) 3388</script>
3388</div></div><div class="mo2vdm1 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner mo2vdm1-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="dmk9wr6 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner dmk9wr6-s"><div class="a8u5k0u mgz-element mgz-child mgz-element-static_block"><div class="mgz-element-inner a8u5k0u-s"><style>*, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: } ::backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: }</style><div class="magezon-builder magezon-builder-preload"><div id="marken_slider" class="gni5fni mgz-element mgz-element-row modehaus-marken-karussel full_width_row"><div class="mgz-element-inner gni5fni-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="ojc62w1 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ojc62w1-s"><div id="marken_slider" class="atesiee mgz-element mgz-child mgz-element-image_carousel modehaus-marken-karussel mgz-element-title-align-center"><div class="mgz-element-inner atesiee-s"><div class="mgz-block"><div class="mgz-block-content"><div id="17902541916ab51c6fe47cb" class="mgz-carousel mgz-image-hovers owl-carousel mgz-carousel-nav-position-center_split mgz-carousel-nav-size-small image-content-mid
3388dle-center" data-type="gallery"><div class="item mgz-carousel-item "><div class="item-inner mgz-flex-position-middle-center"><img class="owl-item-image owl-lazy" data-src="https://www.mode-jost.de/media/wysiwyg/Marken/sw/Marc-Cain.png" src="" alt=""/></div></div><div class="item mgz-carousel-item "><div class="item-inner mgz-flex-position-middle-center"><img class="owl-item-image owl-lazy" data-src="https://www.mode-jost.de/media/wysiwyg/Marken/sw/Boss.png" src="" alt=""/></div></div><div class="item mgz-carousel-item "><div class="item-inner mgz-flex-position-middle-center"><img class="owl-item-image owl-lazy" data-src="https://www.mode-jost.de/media/wysiwyg/Marken/sw/Marie-Jo_1.png" src="" alt=""/></div></div><div class="item mgz-carousel-item "><div class="item-inner mgz-flex-position-middle-center"><img class="owl-item-image owl-lazy" data-src="https://www.mode-jost.de/media/wysiwyg/Marken/sw/Tommy-Jeans.png" src="" alt=""/></div></div><div class="item mgz-carousel-item "><div class="item-inner mgz-flex-position-middle-center"><img class="owl-item-image owl-lazy" data-src="https://www.mode-jost.de/media/wysiwyg/Marken/sw/DrMartens.png" src="" alt=""/></div></div><div class="item mgz-carousel-item "><div class="item-inner mgz-flex-position-middle-center"><img class="owl-item-image owl-lazy" data-src="https://www.mode-jost.de/media/wysiwyg/Marken/sw/Topshop.png" src="" alt=""/></div></div><div class="item mgz-carousel-item "><div class="item-inner mgz-flex-position-middle-center"><img class="owl-item-image owl-lazy" data-src="https://www.mode-jost.de/media/wysiwyg/Marken/sw/New-Balance.png" src="" alt=""/></div></div><div class="item mgz-carousel-item "><div class="item-inner mgz-flex-position-middle-center"><img class="owl-item-image owl-lazy" data-src="https://www.mode-jost.de/media/wysiwyg/Marken/sw/Name-it.png" src="" alt=""/></div></div><div class="item mgz-carousel-item "><div class="item-inner mgz-flex-position-middle-center"><img class="owl-item-image owl-lazy" data-src="https://www.mode-jost.de/media/wysiwyg/Marken/sw/Mey.png" src="" alt=""/></div></div><div class="item mgz-carousel-item "><div class="item-inner mgz-flex-position-middle-center"><img class="owl-item-image owl-lazy" data-src="https://www.mode-jost.de/media/wysiwyg/Marken/sw/Hilfiger.png" src="" alt=""/></div></div><div class="item mgz-carousel-item "><div class="item-inner mgz-flex-position-middle-center"><img class="owl-item-image owl-lazy" data-src="https://www.mode-jost.de/media/wysiwyg/Marken/sw/Camel-Active.png" src="" alt=""/></div></div></div>
3388<script> 3389 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 3390 .then(() => { 3391 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/js/owl.carousel.min.js', 'carousel'); 3392 }) 3393 .then(() => { 3394 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/carousel.min.js', 'image-carousel'); 3395 }) 3396 .then(() => { 3397 $(document).ready(function() { 3398 setTimeout(function() { 3399 $('#17902541916ab51c6fe47cb').trigger('destroy.owl.carousel'); 3400 $('#17902541916ab51c6fe47cb').carousel({"item_xl":"5","item_lg":"4","item_md":"3","item_sm":"2","item_xs":"1","nav":false,"dots":false,"autoplayHoverPause":false,"autoplay":true,"autoplayTimeout":"3000","lazyLoad":true,"loop":true,"margin":10,"autoHeight":true,"rtl":false,"center":false,"slideBy":"1","animateIn":"","animateOut":"","stagePadding":0}); 3401 }, 500); 3402 }); 3403 }) 3404 </script>
3404</div></div></div></div></div></div></div>
3404<script> 3405 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 3406 .then(() => { 3407 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 3408 }) 3409 .then(() => { 3410 const elemId = $('.gni5fni'); 3411 let mgzBuilder = new MagezonBuilder(elemId); 3412 }) 3413</script>
3413</div></div></div></div></div></div></div></div>
3413<script> 3414 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 3415 .then(() => { 3416 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 3417 }) 3418 .then(() => { 3419 const elemId = $('.mo2vdm1'); 3420 let mgzBuilder = new MagezonBuilder(elemId); 3421 }) 3422</script>
3422</div></div><div id="marken_slider" class="g6c7grg mgz-element mgz-element-row modehaus-marken-karussel full_width_row"><div class="mgz-element-inner g6c7grg-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="j3c4x8i mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner j3c4x8i-s"><div class="ugqvjke mgz-element mgz-child mgz-element-product_slider modehaus-teaser-product-slider mgz-element-title-align-center mgz-product-listing"><div class="mgz-element-inner ugqvjke-s"><div class="mgz-block"><div class="mgz-block-content"><div id="17902541436ab51c3fe97fe" class="mgz-carousel owl-carousel mgz-product-items mgz-carousel-nav-position-center_split mgz-carousel-nav-size-normal"><div class="item product product-item "><form method="post" action="https://www.mode-jost.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cubW9kZS1qb3N0LmRlLw~~/product/228768/" class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full " ><input type="hidden" name="product" value="228768"/><a href="https://www.mode-jost.de/gutschein-happy-birthday.html" class="product photo product-item-photo block mx-auto mb-3 " tabindex="-1" ><img class="no-data hover:shadow-sm object-contain product-image-photo" x-data="{ defaultSrc: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder9.jpg', remoteImage: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder9.jpg', preloadedImage: {}, init() { if (this.remoteImage) { const img = new Image(); img.src = this.remoteImage; this.preloadedImage = img; } }, hoverImage() { return this.preloadedImage.src; }, resetImage() { return this.defaultSrc; } }" @update-gallery-228768.window="$root.src = $event.detail" @mouseenter="$event.target.src = hoverImage()" @mouseleave="$event.target.src = resetImage()" loading="eager" fetchpriority="high" src="https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder9.jpg" width="360" height="360" alt="Gutschein Happy Birthday" title="Gutschein Happy Birthday" /><style type="text/css"> .column.main button#mh-wishlist-icon { display: none; } </style></a> <div class="product-info flex flex-col grow p-2"><div class="mt-2 mb-1 items-center justify-center text-primary font-semibold text-lg text-center truncate "><a class="product-item-link" href="https://www.mode-jost.de/gutschein-happy-birthday.html"> Gutschein Happy Birthday </a> </div>
3422<script> 3423 function initPriceBox__6ab51c3fe5091() { 3424 return { 3425 updatePrice(priceData) { 3426 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 3427 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 3428 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 3429 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 3430 regularPriceLabel.classList.add('hidden'); 3431 } else { 3432 regularPriceLabel.classList.remove('hidden'); 3433 } 3434 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 3435 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 3436 } 3437 } 3438 } 3439 </script>
3439<div class="pt-1 text-gray-900" x-data="initPriceBox__6ab51c3fe5091()" @update-prices-228768.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="228768" data-price-box="product-id-228768"><div x-data="dataFinalPriceGiftCard_228768()" x-init="initFinalPriceGiftCard_228768()" x-bind="eventListeners" x-spread="eventListeners" ><template x-if="canShowBlock && customMinAmountCategory && !finalPrice"><div class="flex flex-col"><div class="from-price inline-block mb-2"><span class="price-label xxxx block"> Ab </span> <span id="product-price-228768-from" class="price-wrapper title-font font-medium text-2xl text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmountCategory)"></span> </span> </div></div></template><template x-if="finalPrice || customMaxAmount"><div><template x-if="!finalPrice && customMaxAmount && !customMinAmountCategory"><div class="flex gap-2"><div class="from-price inline-block mb-2"><span class="price-label yyyy block"><!-- Ab --></span> <span id="product-price-228768-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmount)"></span> </span> </div><div class="to-price inline-block"><span class="price-label block"><!-- Bis --></span> <span id="product-price-228768-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMaxAmount)"></span> </span> </div></div></template><template x-if="finalPrice || !customMaxAmount"><div class="final-price inline-block"><span id="product-price-228768" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(finalPrice)"></span> </span> </div></template></div></template></div>
3439<script> 3440 'use strict'; 3441 3442 function dataFinalPriceGiftCard_228768() { 3443 return { 3444 prices: [{"value":10,"convertValue":10,"price":"10,00\u00a0\u20ac"},{"value":20,"convertValue":20,"price":"20,00\u00a0\u20ac"},{"value":50,"convertValue":50,"price":"50,00\u00a0\u20ac"},{"value":100,"convertValue":100,"price":"100,00\u00a0\u20ac"}], 3445 customMinAmount: 0 || 1, customMaxAmount: 0, customMinAmountCategory: 10, finalPrice: 0, canShowBlock: 1, 3446 isOpenAmount: '1', 3447 3448 initFinalPriceGiftCard_228768() { 3449 if (!this.isOpenAmount && this.prices.length > 1) { 3450 this.customMinAmount = this.prices[0].convertValue; 3451 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3452 } 3453 3454 if (this.isOpenAmount && this.prices.length > 1) { 3455 if (this.customMinAmount > this.prices[0].convertValue) { 3456 this.customMinAmount = this.prices[0].convertValue; 3457 } 3458 3459 if (this.customMaxAmount < this.prices[this.prices.length - 1].convertValue) { 3460 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3461 } 3462 } 3463 }, 3464 3465 eventListeners: { 3466 ['@mhgiftcard-update-price.window'](event) { 3467 this.finalPrice = event.detail; 3468 }, 3469 } 3470 } 3471 } 3472</script>
3472<style type="text/css"> .category-gutscheine button.items-center.wishlists_mh_icon { display: none; } </style></div></div><div class="mt-auto pt-3 flex flex-wrap justify-center items-center"></div></div></form></div><div class="item product product-item "><form method="post" action="https://www.mode-jost.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cubW9kZS1qb3N0LmRlLw~~/product/228764/" class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full " ><input type="hidden" name="product" value="228764"/><a href="https://www.mode-jost.de/gutschein-herzlichen-gluckwunsch.html" class="product photo product-item-photo block mx-auto mb-3 " tabindex="-1" ><img class="no-data hover:shadow-sm object-contain product-image-photo" x-data="{ defaultSrc: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder5.jpg', remoteImage: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder5.jpg', preloadedImage: {}, init() { if (this.remoteImage) { const img = new Image(); img.src = this.remoteImage; this.preloadedImage = img; } }, hoverImage() { return this.preloadedImage.src; }, resetImage() { return this.defaultSrc; } }" @update-gallery-228764.window="$root.src = $event.detail" @mouseenter="$event.target.src = hoverImage()" @mouseleave="$event.target.src = resetImage()" loading="eager" fetchpriority="high" src="https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder5.jpg" width="360" height="360" alt="Gutschein Herzlichen Glückwunsch" title="Gutschein Herzlichen Glückwunsch" /><style type="text/css"> .column.main button#mh-wishlist-icon { display: none; } </style></a> <div class="product-info flex flex-col grow p-2"><div class="mt-2 mb-1 items-center justify-center text-primary font-semibold text-lg text-center truncate "><a class="product-item-link" href="https://www.mode-jost.de/gutschein-herzlichen-gluckwunsch.html"> Gutschein Herzlichen Glückwunsch </a> </div>
3472<script> 3473 function initPriceBox__6ab51c3fe5091() { 3474 return { 3475 updatePrice(priceData) { 3476 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 3477 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 3478 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 3479 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 3480 regularPriceLabel.classList.add('hidden'); 3481 } else { 3482 regularPriceLabel.classList.remove('hidden'); 3483 } 3484 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 3485 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 3486 } 3487 } 3488 } 3489 </script>
3489<div class="pt-1 text-gray-900" x-data="initPriceBox__6ab51c3fe5091()" @update-prices-228764.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="228764" data-price-box="product-id-228764"><div x-data="dataFinalPriceGiftCard_228764()" x-init="initFinalPriceGiftCard_228764()" x-bind="eventListeners" x-spread="eventListeners" ><template x-if="canShowBlock && customMinAmountCategory && !finalPrice"><div class="flex flex-col"><div class="from-price inline-block mb-2"><span class="price-label xxxx block"> Ab </span> <span id="product-price-228764-from" class="price-wrapper title-font font-medium text-2xl text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmountCategory)"></span> </span> </div></div></template><template x-if="finalPrice || customMaxAmount"><div><template x-if="!finalPrice && customMaxAmount && !customMinAmountCategory"><div class="flex gap-2"><div class="from-price inline-block mb-2"><span class="price-label yyyy block"><!-- Ab --></span> <span id="product-price-228764-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmount)"></span> </span> </div><div class="to-price inline-block"><span class="price-label block"><!-- Bis --></span> <span id="product-price-228764-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMaxAmount)"></span> </span> </div></div></template><template x-if="finalPrice || !customMaxAmount"><div class="final-price inline-block"><span id="product-price-228764" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(finalPrice)"></span> </span> </div></template></div></template></div>
3489<script> 3490 'use strict'; 3491 3492 function dataFinalPriceGiftCard_228764() { 3493 return { 3494 prices: [{"value":10,"convertValue":10,"price":"10,00\u00a0\u20ac"},{"value":20,"convertValue":20,"price":"20,00\u00a0\u20ac"},{"value":50,"convertValue":50,"price":"50,00\u00a0\u20ac"},{"value":100,"convertValue":100,"price":"100,00\u00a0\u20ac"}], 3495 customMinAmount: 0 || 1, customMaxAmount: 0, customMinAmountCategory: 10, finalPrice: 0, canShowBlock: 1, 3496 isOpenAmount: '1', 3497 3498 initFinalPriceGiftCard_228764() { 3499 if (!this.isOpenAmount && this.prices.length > 1) { 3500 this.customMinAmount = this.prices[0].convertValue; 3501 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3502 } 3503 3504 if (this.isOpenAmount && this.prices.length > 1) { 3505 if (this.customMinAmount > this.prices[0].convertValue) { 3506 this.customMinAmount = this.prices[0].convertValue; 3507 } 3508 3509 if (this.customMaxAmount < this.prices[this.prices.length - 1].convertValue) { 3510 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3511 } 3512 } 3513 }, 3514 3515 eventListeners: { 3516 ['@mhgiftcard-update-price.window'](event) { 3517 this.finalPrice = event.detail; 3518 }, 3519 } 3520 } 3521 } 3522</script>
3522<style type="text/css"> .category-gutscheine button.items-center.wishlists_mh_icon { display: none; } </style></div></div><div class="mt-auto pt-3 flex flex-wrap justify-center items-center"></div></div></form></div><div class="item product product-item "><form method="post" action="https://www.mode-jost.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cubW9kZS1qb3N0LmRlLw~~/product/228767/" class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full " ><input type="hidden" name="product" value="228767"/><a href="https://www.mode-jost.de/gutschein-zum-geburtstag.html" class="product photo product-item-photo block mx-auto mb-3 " tabindex="-1" ><img class="no-data hover:shadow-sm object-contain product-image-photo" x-data="{ defaultSrc: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder8.jpg', remoteImage: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder8.jpg', preloadedImage: {}, init() { if (this.remoteImage) { const img = new Image(); img.src = this.remoteImage; this.preloadedImage = img; } }, hoverImage() { return this.preloadedImage.src; }, resetImage() { return this.defaultSrc; } }" @update-gallery-228767.window="$root.src = $event.detail" @mouseenter="$event.target.src = hoverImage()" @mouseleave="$event.target.src = resetImage()" loading="eager" fetchpriority="high" src="https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder8.jpg" width="360" height="360" alt="Gutschein Zum Geburtstag" title="Gutschein Zum Geburtstag" /><style type="text/css"> .column.main button#mh-wishlist-icon { display: none; } </style></a> <div class="product-info flex flex-col grow p-2"><div class="mt-2 mb-1 items-center justify-center text-primary font-semibold text-lg text-center truncate "><a class="product-item-link" href="https://www.mode-jost.de/gutschein-zum-geburtstag.html"> Gutschein Zum Geburtstag </a> </div>
3522<script> 3523 function initPriceBox__6ab51c3fe5091() { 3524 return { 3525 updatePrice(priceData) { 3526 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 3527 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 3528 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 3529 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 3530 regularPriceLabel.classList.add('hidden'); 3531 } else { 3532 regularPriceLabel.classList.remove('hidden'); 3533 } 3534 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 3535 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 3536 } 3537 } 3538 } 3539 </script>
3539<div class="pt-1 text-gray-900" x-data="initPriceBox__6ab51c3fe5091()" @update-prices-228767.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="228767" data-price-box="product-id-228767"><div x-data="dataFinalPriceGiftCard_228767()" x-init="initFinalPriceGiftCard_228767()" x-bind="eventListeners" x-spread="eventListeners" ><template x-if="canShowBlock && customMinAmountCategory && !finalPrice"><div class="flex flex-col"><div class="from-price inline-block mb-2"><span class="price-label xxxx block"> Ab </span> <span id="product-price-228767-from" class="price-wrapper title-font font-medium text-2xl text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmountCategory)"></span> </span> </div></div></template><template x-if="finalPrice || customMaxAmount"><div><template x-if="!finalPrice && customMaxAmount && !customMinAmountCategory"><div class="flex gap-2"><div class="from-price inline-block mb-2"><span class="price-label yyyy block"><!-- Ab --></span> <span id="product-price-228767-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmount)"></span> </span> </div><div class="to-price inline-block"><span class="price-label block"><!-- Bis --></span> <span id="product-price-228767-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMaxAmount)"></span> </span> </div></div></template><template x-if="finalPrice || !customMaxAmount"><div class="final-price inline-block"><span id="product-price-228767" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(finalPrice)"></span> </span> </div></template></div></template></div>
3539<script> 3540 'use strict'; 3541 3542 function dataFinalPriceGiftCard_228767() { 3543 return { 3544 prices: [{"value":10,"convertValue":10,"price":"10,00\u00a0\u20ac"},{"value":20,"convertValue":20,"price":"20,00\u00a0\u20ac"},{"value":50,"convertValue":50,"price":"50,00\u00a0\u20ac"},{"value":100,"convertValue":100,"price":"100,00\u00a0\u20ac"}], 3545 customMinAmount: 0 || 1, customMaxAmount: 0, customMinAmountCategory: 10, finalPrice: 0, canShowBlock: 1, 3546 isOpenAmount: '1', 3547 3548 initFinalPriceGiftCard_228767() { 3549 if (!this.isOpenAmount && this.prices.length > 1) { 3550 this.customMinAmount = this.prices[0].convertValue; 3551 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3552 } 3553 3554 if (this.isOpenAmount && this.prices.length > 1) { 3555 if (this.customMinAmount > this.prices[0].convertValue) { 3556 this.customMinAmount = this.prices[0].convertValue; 3557 } 3558 3559 if (this.customMaxAmount < this.prices[this.prices.length - 1].convertValue) { 3560 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3561 } 3562 } 3563 }, 3564 3565 eventListeners: { 3566 ['@mhgiftcard-update-price.window'](event) { 3567 this.finalPrice = event.detail; 3568 }, 3569 } 3570 } 3571 } 3572</script>
3572<style type="text/css"> .category-gutscheine button.items-center.wishlists_mh_icon { display: none; } </style></div></div><div class="mt-auto pt-3 flex flex-wrap justify-center items-center"></div></div></form></div><div class="item product product-item "><form method="post" action="https://www.mode-jost.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cubW9kZS1qb3N0LmRlLw~~/product/228773/" class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full " ><input type="hidden" name="product" value="228773"/><a href="https://www.mode-jost.de/gutschein-zum-geburtstag-ii.html" class="product photo product-item-photo block mx-auto mb-3 " tabindex="-1" ><img class="no-data hover:shadow-sm object-contain product-image-photo" x-data="{ defaultSrc: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder14_1_1.jpg', remoteImage: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder14_1_1.jpg', preloadedImage: {}, init() { if (this.remoteImage) { const img = new Image(); img.src = this.remoteImage; this.preloadedImage = img; } }, hoverImage() { return this.preloadedImage.src; }, resetImage() { return this.defaultSrc; } }" @update-gallery-228773.window="$root.src = $event.detail" @mouseenter="$event.target.src = hoverImage()" @mouseleave="$event.target.src = resetImage()" loading="eager" fetchpriority="high" src="https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder14_1_1.jpg" width="360" height="360" alt="Gutschein Zum Geburtstag II" title="Gutschein Zum Geburtstag II" /><style type="text/css"> .column.main button#mh-wishlist-icon { display: none; } </style></a> <div class="product-info flex flex-col grow p-2"><div class="mt-2 mb-1 items-center justify-center text-primary font-semibold text-lg text-center truncate "><a class="product-item-link" href="https://www.mode-jost.de/gutschein-zum-geburtstag-ii.html"> Gutschein Zum Geburtstag II </a> </div>
3572<script> 3573 function initPriceBox__6ab51c3fe5091() { 3574 return { 3575 updatePrice(priceData) { 3576 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 3577 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 3578 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 3579 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 3580 regularPriceLabel.classList.add('hidden'); 3581 } else { 3582 regularPriceLabel.classList.remove('hidden'); 3583 } 3584 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 3585 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 3586 } 3587 } 3588 } 3589 </script>
3589<div class="pt-1 text-gray-900" x-data="initPriceBox__6ab51c3fe5091()" @update-prices-228773.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="228773" data-price-box="product-id-228773"><div x-data="dataFinalPriceGiftCard_228773()" x-init="initFinalPriceGiftCard_228773()" x-bind="eventListeners" x-spread="eventListeners" ><template x-if="canShowBlock && customMinAmountCategory && !finalPrice"><div class="flex flex-col"><div class="from-price inline-block mb-2"><span class="price-label xxxx block"> Ab </span> <span id="product-price-228773-from" class="price-wrapper title-font font-medium text-2xl text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmountCategory)"></span> </span> </div></div></template><template x-if="finalPrice || customMaxAmount"><div><template x-if="!finalPrice && customMaxAmount && !customMinAmountCategory"><div class="flex gap-2"><div class="from-price inline-block mb-2"><span class="price-label yyyy block"><!-- Ab --></span> <span id="product-price-228773-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmount)"></span> </span> </div><div class="to-price inline-block"><span class="price-label block"><!-- Bis --></span> <span id="product-price-228773-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMaxAmount)"></span> </span> </div></div></template><template x-if="finalPrice || !customMaxAmount"><div class="final-price inline-block"><span id="product-price-228773" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(finalPrice)"></span> </span> </div></template></div></template></div>
3589<script> 3590 'use strict'; 3591 3592 function dataFinalPriceGiftCard_228773() { 3593 return { 3594 prices: [{"value":10,"convertValue":10,"price":"10,00\u00a0\u20ac"},{"value":20,"convertValue":20,"price":"20,00\u00a0\u20ac"},{"value":50,"convertValue":50,"price":"50,00\u00a0\u20ac"},{"value":100,"convertValue":100,"price":"100,00\u00a0\u20ac"}], 3595 customMinAmount: 0 || 1, customMaxAmount: 0, customMinAmountCategory: 10, finalPrice: 0, canShowBlock: 1, 3596 isOpenAmount: '1', 3597 3598 initFinalPriceGiftCard_228773() { 3599 if (!this.isOpenAmount && this.prices.length > 1) { 3600 this.customMinAmount = this.prices[0].convertValue; 3601 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3602 } 3603 3604 if (this.isOpenAmount && this.prices.length > 1) { 3605 if (this.customMinAmount > this.prices[0].convertValue) { 3606 this.customMinAmount = this.prices[0].convertValue; 3607 } 3608 3609 if (this.customMaxAmount < this.prices[this.prices.length - 1].convertValue) { 3610 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3611 } 3612 } 3613 }, 3614 3615 eventListeners: { 3616 ['@mhgiftcard-update-price.window'](event) { 3617 this.finalPrice = event.detail; 3618 }, 3619 } 3620 } 3621 } 3622</script>
3622<style type="text/css"> .category-gutscheine button.items-center.wishlists_mh_icon { display: none; } </style></div></div><div class="mt-auto pt-3 flex flex-wrap justify-center items-center"></div></div></form></div><div class="item product product-item "><form method="post" action="https://www.mode-jost.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cubW9kZS1qb3N0LmRlLw~~/product/228765/" class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full " ><input type="hidden" name="product" value="228765"/><a href="https://www.mode-jost.de/gutschein-gonn-dir.html" class="product photo product-item-photo block mx-auto mb-3 " tabindex="-1" ><img class="no-data hover:shadow-sm object-contain product-image-photo" x-data="{ defaultSrc: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder6.jpg', remoteImage: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder6.jpg', preloadedImage: {}, init() { if (this.remoteImage) { const img = new Image(); img.src = this.remoteImage; this.preloadedImage = img; } }, hoverImage() { return this.preloadedImage.src; }, resetImage() { return this.defaultSrc; } }" @update-gallery-228765.window="$root.src = $event.detail" @mouseenter="$event.target.src = hoverImage()" @mouseleave="$event.target.src = resetImage()" loading="eager" fetchpriority="high" src="https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder6.jpg" width="360" height="360" alt="Gutschein Gönn Dir!" title="Gutschein Gönn Dir!" /><style type="text/css"> .column.main button#mh-wishlist-icon { display: none; } </style></a> <div class="product-info flex flex-col grow p-2"><div class="mt-2 mb-1 items-center justify-center text-primary font-semibold text-lg text-center truncate "><a class="product-item-link" href="https://www.mode-jost.de/gutschein-gonn-dir.html"> Gutschein Gönn Dir! </a> </div>
3622<script> 3623 function initPriceBox__6ab51c3fe5091() { 3624 return { 3625 updatePrice(priceData) { 3626 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 3627 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 3628 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 3629 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 3630 regularPriceLabel.classList.add('hidden'); 3631 } else { 3632 regularPriceLabel.classList.remove('hidden'); 3633 } 3634 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 3635 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 3636 } 3637 } 3638 } 3639 </script>
3639<div class="pt-1 text-gray-900" x-data="initPriceBox__6ab51c3fe5091()" @update-prices-228765.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="228765" data-price-box="product-id-228765"><div x-data="dataFinalPriceGiftCard_228765()" x-init="initFinalPriceGiftCard_228765()" x-bind="eventListeners" x-spread="eventListeners" ><template x-if="canShowBlock && customMinAmountCategory && !finalPrice"><div class="flex flex-col"><div class="from-price inline-block mb-2"><span class="price-label xxxx block"> Ab </span> <span id="product-price-228765-from" class="price-wrapper title-font font-medium text-2xl text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmountCategory)"></span> </span> </div></div></template><template x-if="finalPrice || customMaxAmount"><div><template x-if="!finalPrice && customMaxAmount && !customMinAmountCategory"><div class="flex gap-2"><div class="from-price inline-block mb-2"><span class="price-label yyyy block"><!-- Ab --></span> <span id="product-price-228765-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmount)"></span> </span> </div><div class="to-price inline-block"><span class="price-label block"><!-- Bis --></span> <span id="product-price-228765-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMaxAmount)"></span> </span> </div></div></template><template x-if="finalPrice || !customMaxAmount"><div class="final-price inline-block"><span id="product-price-228765" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(finalPrice)"></span> </span> </div></template></div></template></div>
3639<script> 3640 'use strict'; 3641 3642 function dataFinalPriceGiftCard_228765() { 3643 return { 3644 prices: [{"value":10,"convertValue":10,"price":"10,00\u00a0\u20ac"},{"value":20,"convertValue":20,"price":"20,00\u00a0\u20ac"},{"value":50,"convertValue":50,"price":"50,00\u00a0\u20ac"},{"value":100,"convertValue":100,"price":"100,00\u00a0\u20ac"}], 3645 customMinAmount: 0 || 1, customMaxAmount: 0, customMinAmountCategory: 10, finalPrice: 0, canShowBlock: 1, 3646 isOpenAmount: '1', 3647 3648 initFinalPriceGiftCard_228765() { 3649 if (!this.isOpenAmount && this.prices.length > 1) { 3650 this.customMinAmount = this.prices[0].convertValue; 3651 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3652 } 3653 3654 if (this.isOpenAmount && this.prices.length > 1) { 3655 if (this.customMinAmount > this.prices[0].convertValue) { 3656 this.customMinAmount = this.prices[0].convertValue; 3657 } 3658 3659 if (this.customMaxAmount < this.prices[this.prices.length - 1].convertValue) { 3660 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3661 } 3662 } 3663 }, 3664 3665 eventListeners: { 3666 ['@mhgiftcard-update-price.window'](event) { 3667 this.finalPrice = event.detail; 3668 }, 3669 } 3670 } 3671 } 3672</script>
3672<style type="text/css"> .category-gutscheine button.items-center.wishlists_mh_icon { display: none; } </style></div></div><div class="mt-auto pt-3 flex flex-wrap justify-center items-center"></div></div></form></div><div class="item product product-item "><form method="post" action="https://www.mode-jost.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cubW9kZS1qb3N0LmRlLw~~/product/228770/" class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full " ><input type="hidden" name="product" value="228770"/><a href="https://www.mode-jost.de/gutschein-happy-birthday-iii.html" class="product photo product-item-photo block mx-auto mb-3 " tabindex="-1" ><img class="no-data hover:shadow-sm object-contain product-image-photo" x-data="{ defaultSrc: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder-cupcake.jpg', remoteImage: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder-cupcake.jpg', preloadedImage: {}, init() { if (this.remoteImage) { const img = new Image(); img.src = this.remoteImage; this.preloadedImage = img; } }, hoverImage() { return this.preloadedImage.src; }, resetImage() { return this.defaultSrc; } }" @update-gallery-228770.window="$root.src = $event.detail" @mouseenter="$event.target.src = hoverImage()" @mouseleave="$event.target.src = resetImage()" loading="eager" fetchpriority="high" src="https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder-cupcake.jpg" width="360" height="360" alt="Gutschein Happy Birthday III" title="Gutschein Happy Birthday III" /><style type="text/css"> .column.main button#mh-wishlist-icon { display: none; } </style></a> <div class="product-info flex flex-col grow p-2"><div class="mt-2 mb-1 items-center justify-center text-primary font-semibold text-lg text-center truncate "><a class="product-item-link" href="https://www.mode-jost.de/gutschein-happy-birthday-iii.html"> Gutschein Happy Birthday III </a> </div>
3672<script> 3673 function initPriceBox__6ab51c3fe5091() { 3674 return { 3675 updatePrice(priceData) { 3676 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 3677 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 3678 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 3679 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 3680 regularPriceLabel.classList.add('hidden'); 3681 } else { 3682 regularPriceLabel.classList.remove('hidden'); 3683 } 3684 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 3685 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 3686 } 3687 } 3688 } 3689 </script>
3689<div class="pt-1 text-gray-900" x-data="initPriceBox__6ab51c3fe5091()" @update-prices-228770.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="228770" data-price-box="product-id-228770"><div x-data="dataFinalPriceGiftCard_228770()" x-init="initFinalPriceGiftCard_228770()" x-bind="eventListeners" x-spread="eventListeners" ><template x-if="canShowBlock && customMinAmountCategory && !finalPrice"><div class="flex flex-col"><div class="from-price inline-block mb-2"><span class="price-label xxxx block"> Ab </span> <span id="product-price-228770-from" class="price-wrapper title-font font-medium text-2xl text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmountCategory)"></span> </span> </div></div></template><template x-if="finalPrice || customMaxAmount"><div><template x-if="!finalPrice && customMaxAmount && !customMinAmountCategory"><div class="flex gap-2"><div class="from-price inline-block mb-2"><span class="price-label yyyy block"><!-- Ab --></span> <span id="product-price-228770-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmount)"></span> </span> </div><div class="to-price inline-block"><span class="price-label block"><!-- Bis --></span> <span id="product-price-228770-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMaxAmount)"></span> </span> </div></div></template><template x-if="finalPrice || !customMaxAmount"><div class="final-price inline-block"><span id="product-price-228770" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(finalPrice)"></span> </span> </div></template></div></template></div>
3689<script> 3690 'use strict'; 3691 3692 function dataFinalPriceGiftCard_228770() { 3693 return { 3694 prices: [{"value":10,"convertValue":10,"price":"10,00\u00a0\u20ac"},{"value":20,"convertValue":20,"price":"20,00\u00a0\u20ac"},{"value":50,"convertValue":50,"price":"50,00\u00a0\u20ac"},{"value":100,"convertValue":100,"price":"100,00\u00a0\u20ac"}], 3695 customMinAmount: 0 || 1, customMaxAmount: 0, customMinAmountCategory: 10, finalPrice: 0, canShowBlock: 1, 3696 isOpenAmount: '1', 3697 3698 initFinalPriceGiftCard_228770() { 3699 if (!this.isOpenAmount && this.prices.length > 1) { 3700 this.customMinAmount = this.prices[0].convertValue; 3701 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3702 } 3703 3704 if (this.isOpenAmount && this.prices.length > 1) { 3705 if (this.customMinAmount > this.prices[0].convertValue) { 3706 this.customMinAmount = this.prices[0].convertValue; 3707 } 3708 3709 if (this.customMaxAmount < this.prices[this.prices.length - 1].convertValue) { 3710 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3711 } 3712 } 3713 }, 3714 3715 eventListeners: { 3716 ['@mhgiftcard-update-price.window'](event) { 3717 this.finalPrice = event.detail; 3718 }, 3719 } 3720 } 3721 } 3722</script>
3722<style type="text/css"> .category-gutscheine button.items-center.wishlists_mh_icon { display: none; } </style></div></div><div class="mt-auto pt-3 flex flex-wrap justify-center items-center"></div></div></form></div><div class="item product product-item "><form method="post" action="https://www.mode-jost.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cubW9kZS1qb3N0LmRlLw~~/product/228771/" class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full " ><input type="hidden" name="product" value="228771"/><a href="https://www.mode-jost.de/gutschein-alles-liebe-ii.html" class="product photo product-item-photo block mx-auto mb-3 " tabindex="-1" ><img class="no-data hover:shadow-sm object-contain product-image-photo" x-data="{ defaultSrc: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder12.jpg', remoteImage: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder12.jpg', preloadedImage: {}, init() { if (this.remoteImage) { const img = new Image(); img.src = this.remoteImage; this.preloadedImage = img; } }, hoverImage() { return this.preloadedImage.src; }, resetImage() { return this.defaultSrc; } }" @update-gallery-228771.window="$root.src = $event.detail" @mouseenter="$event.target.src = hoverImage()" @mouseleave="$event.target.src = resetImage()" loading="eager" fetchpriority="high" src="https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder12.jpg" width="360" height="360" alt="Gutschein Alles Liebe II" title="Gutschein Alles Liebe II" /><style type="text/css"> .column.main button#mh-wishlist-icon { display: none; } </style></a> <div class="product-info flex flex-col grow p-2"><div class="mt-2 mb-1 items-center justify-center text-primary font-semibold text-lg text-center truncate "><a class="product-item-link" href="https://www.mode-jost.de/gutschein-alles-liebe-ii.html"> Gutschein Alles Liebe II </a> </div>
3722<script> 3723 function initPriceBox__6ab51c3fe5091() { 3724 return { 3725 updatePrice(priceData) { 3726 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 3727 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 3728 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 3729 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 3730 regularPriceLabel.classList.add('hidden'); 3731 } else { 3732 regularPriceLabel.classList.remove('hidden'); 3733 } 3734 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 3735 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 3736 } 3737 } 3738 } 3739 </script>
3739<div class="pt-1 text-gray-900" x-data="initPriceBox__6ab51c3fe5091()" @update-prices-228771.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="228771" data-price-box="product-id-228771"><div x-data="dataFinalPriceGiftCard_228771()" x-init="initFinalPriceGiftCard_228771()" x-bind="eventListeners" x-spread="eventListeners" ><template x-if="canShowBlock && customMinAmountCategory && !finalPrice"><div class="flex flex-col"><div class="from-price inline-block mb-2"><span class="price-label xxxx block"> Ab </span> <span id="product-price-228771-from" class="price-wrapper title-font font-medium text-2xl text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmountCategory)"></span> </span> </div></div></template><template x-if="finalPrice || customMaxAmount"><div><template x-if="!finalPrice && customMaxAmount && !customMinAmountCategory"><div class="flex gap-2"><div class="from-price inline-block mb-2"><span class="price-label yyyy block"><!-- Ab --></span> <span id="product-price-228771-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmount)"></span> </span> </div><div class="to-price inline-block"><span class="price-label block"><!-- Bis --></span> <span id="product-price-228771-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMaxAmount)"></span> </span> </div></div></template><template x-if="finalPrice || !customMaxAmount"><div class="final-price inline-block"><span id="product-price-228771" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(finalPrice)"></span> </span> </div></template></div></template></div>
3739<script> 3740 'use strict'; 3741 3742 function dataFinalPriceGiftCard_228771() { 3743 return { 3744 prices: [{"value":10,"convertValue":10,"price":"10,00\u00a0\u20ac"},{"value":20,"convertValue":20,"price":"20,00\u00a0\u20ac"},{"value":50,"convertValue":50,"price":"50,00\u00a0\u20ac"},{"value":100,"convertValue":100,"price":"100,00\u00a0\u20ac"}], 3745 customMinAmount: 0 || 1, customMaxAmount: 0, customMinAmountCategory: 10, finalPrice: 0, canShowBlock: 1, 3746 isOpenAmount: '1', 3747 3748 initFinalPriceGiftCard_228771() { 3749 if (!this.isOpenAmount && this.prices.length > 1) { 3750 this.customMinAmount = this.prices[0].convertValue; 3751 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3752 } 3753 3754 if (this.isOpenAmount && this.prices.length > 1) { 3755 if (this.customMinAmount > this.prices[0].convertValue) { 3756 this.customMinAmount = this.prices[0].convertValue; 3757 } 3758 3759 if (this.customMaxAmount < this.prices[this.prices.length - 1].convertValue) { 3760 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3761 } 3762 } 3763 }, 3764 3765 eventListeners: { 3766 ['@mhgiftcard-update-price.window'](event) { 3767 this.finalPrice = event.detail; 3768 }, 3769 } 3770 } 3771 } 3772</script>
3772<style type="text/css"> .category-gutscheine button.items-center.wishlists_mh_icon { display: none; } </style></div></div><div class="mt-auto pt-3 flex flex-wrap justify-center items-center"></div></div></form></div><div class="item product product-item "><form method="post" action="https://www.mode-jost.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cubW9kZS1qb3N0LmRlLw~~/product/228775/" class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full " ><input type="hidden" name="product" value="228775"/><a href="https://www.mode-jost.de/gutschein-flugzeug.html" class="product photo product-item-photo block mx-auto mb-3 " tabindex="-1" ><img class="no-data hover:shadow-sm object-contain product-image-photo" x-data="{ defaultSrc: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder16.jpg', remoteImage: 'https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder16.jpg', preloadedImage: {}, init() { if (this.remoteImage) { const img = new Image(); img.src = this.remoteImage; this.preloadedImage = img; } }, hoverImage() { return this.preloadedImage.src; }, resetImage() { return this.defaultSrc; } }" @update-gallery-228775.window="$root.src = $event.detail" @mouseenter="$event.target.src = hoverImage()" @mouseleave="$event.target.src = resetImage()" loading="eager" fetchpriority="high" src="https://www.mode-jost.de/media/catalog/product/cache/67ee89799642c567a71fc92f3699d937/j/o/jost-geschenkgutschein-produktbilder16.jpg" width="360" height="360" alt="Gutschein Flugzeug" title="Gutschein Flugzeug" /><style type="text/css"> .column.main button#mh-wishlist-icon { display: none; } </style></a> <div class="product-info flex flex-col grow p-2"><div class="mt-2 mb-1 items-center justify-center text-primary font-semibold text-lg text-center truncate "><a class="product-item-link" href="https://www.mode-jost.de/gutschein-flugzeug.html"> Gutschein Flugzeug </a> </div>
3772<script> 3773 function initPriceBox__6ab51c3fe5091() { 3774 return { 3775 updatePrice(priceData) { 3776 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 3777 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 3778 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 3779 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 3780 regularPriceLabel.classList.add('hidden'); 3781 } else { 3782 regularPriceLabel.classList.remove('hidden'); 3783 } 3784 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 3785 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 3786 } 3787 } 3788 } 3789 </script>
3789<div class="pt-1 text-gray-900" x-data="initPriceBox__6ab51c3fe5091()" @update-prices-228775.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="228775" data-price-box="product-id-228775"><div x-data="dataFinalPriceGiftCard_228775()" x-init="initFinalPriceGiftCard_228775()" x-bind="eventListeners" x-spread="eventListeners" ><template x-if="canShowBlock && customMinAmountCategory && !finalPrice"><div class="flex flex-col"><div class="from-price inline-block mb-2"><span class="price-label xxxx block"> Ab </span> <span id="product-price-228775-from" class="price-wrapper title-font font-medium text-2xl text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmountCategory)"></span> </span> </div></div></template><template x-if="finalPrice || customMaxAmount"><div><template x-if="!finalPrice && customMaxAmount && !customMinAmountCategory"><div class="flex gap-2"><div class="from-price inline-block mb-2"><span class="price-label yyyy block"><!-- Ab --></span> <span id="product-price-228775-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMinAmount)"></span> </span> </div><div class="to-price inline-block"><span class="price-label block"><!-- Bis --></span> <span id="product-price-228775-from" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(customMaxAmount)"></span> </span> </div></div></template><template x-if="finalPrice || !customMaxAmount"><div class="final-price inline-block"><span id="product-price-228775" class="price-wrapper title-font font-medium text-base text-gray-900" ><span class="price" x-html="hyva.formatPrice(finalPrice)"></span> </span> </div></template></div></template></div>
3789<script> 3790 'use strict'; 3791 3792 function dataFinalPriceGiftCard_228775() { 3793 return { 3794 prices: [{"value":10,"convertValue":10,"price":"10,00\u00a0\u20ac"},{"value":20,"convertValue":20,"price":"20,00\u00a0\u20ac"},{"value":50,"convertValue":50,"price":"50,00\u00a0\u20ac"},{"value":100,"convertValue":100,"price":"100,00\u00a0\u20ac"}], 3795 customMinAmount: 0 || 1, customMaxAmount: 0, customMinAmountCategory: 10, finalPrice: 0, canShowBlock: 1, 3796 isOpenAmount: '1', 3797 3798 initFinalPriceGiftCard_228775() { 3799 if (!this.isOpenAmount && this.prices.length > 1) { 3800 this.customMinAmount = this.prices[0].convertValue; 3801 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3802 } 3803 3804 if (this.isOpenAmount && this.prices.length > 1) { 3805 if (this.customMinAmount > this.prices[0].convertValue) { 3806 this.customMinAmount = this.prices[0].convertValue; 3807 } 3808 3809 if (this.customMaxAmount < this.prices[this.prices.length - 1].convertValue) { 3810 this.customMaxAmount = this.prices[this.prices.length - 1].convertValue; 3811 } 3812 } 3813 }, 3814 3815 eventListeners: { 3816 ['@mhgiftcard-update-price.window'](event) { 3817 this.finalPrice = event.detail; 3818 }, 3819 } 3820 } 3821 } 3822</script>
3822<style type="text/css"> .category-gutscheine button.items-center.wishlists_mh_icon { display: none; } </style></div></div><div class="mt-auto pt-3 flex flex-wrap justify-center items-center"></div></div></form></div></div>
3822<script> 3823 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 3824 .then(() => { 3825 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/js/owl.carousel.min.js', 'carousel'); 3826 }) 3827 .then(() => { 3828 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/carousel.min.js', 'product-slider'); 3829 }) 3830 .then(() => { 3831 $(document).ready(function() { 3832 setTimeout(function() { 3833 $('#17902541436ab51c3fe97fe').trigger('destroy.owl.carousel'); 3834 $('#17902541436ab51c3fe97fe').carousel({"item_xl":"5","item_lg":"4","item_md":"2","item_sm":"2","item_xs":"2","nav":true,"dots":false,"autoplayHoverPause":false,"autoplay":false,"autoplayTimeout":"5000","lazyLoad":true,"loop":false,"margin":0,"autoHeight":true,"rtl":false,"center":false,"slideBy":"1","animateIn":"","animateOut":"","stagePadding":0}); 3835 }, 500); 3836 }); 3837 }) 3838 </script>
3838</div></div></div></div><div class="v63g5tx mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner v63g5tx-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="r0bklbp mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner r0bklbp-s"><div class="xumdvtn mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner xumdvtn-s"></div></div></div></div></div>
3838<script> 3839 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 3840 .then(() => { 3841 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 3842 }) 3843 .then(() => { 3844 const elemId = $('.v63g5tx'); 3845 let mgzBuilder = new MagezonBuilder(elemId); 3846 }) 3847</script>
3847</div></div></div></div><div class="tjtqmp1 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner tjtqmp1-s"></div></div></div>
3847<script> 3848 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 3849 .then(() => { 3850 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 3851 }) 3852 .then(() => { 3853 const elemId = $('.g6c7grg'); 3854 let mgzBuilder = new MagezonBuilder(elemId); 3855 }) 3856</script>
3856</div></div></div></div><aside class="sidebar sidebar-additional"> 3857
3857<script> 3858 function initWishlistOnWishlistSidebar() { 3859 function wishlistSidebarFetchHandler(body, postUrl, isRemoveAction = true) { 3860 const messages = { 3861 "success": isRemoveAction 3862 ? "\u00251\u0020wurde\u0020von\u0020deiner\u0020Wunschliste\u0020entfernt." 3863 : "\u00251\u0020wurde\u0020Ihrem\u0020Wunschzettel\u0020hinzugef\u00FCgt.", 3864 "warning": isRemoveAction 3865 ? "Der\u0020Artikel\u0020konnte\u0020nicht\u0020von\u0020Ihrem\u0020Wunschzettel\u0020entfernt\u0020werden." 3866 : "Der\u0020Artikel\u0020konnte\u0020nicht\u0020zu\u0020Ihrem\u0020Wunschzettel\u0020hinzugef\u00FCgt\u0020werden.", 3867 } 3868 3869 const postHeaders = { 3870 "headers": { 3871 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 3872 }, 3873 body: body, 3874 "method": "POST", 3875 "mode": "cors", 3876 "credentials": "include" 3877 }; 3878 3879 return fetch(postUrl, postHeaders).then(function (response) { 3880 if (response.redirected) { 3881 window.location.href = response.url; 3882 } else if (response.ok) { 3883 return response.json(); 3884 } else { 3885 const message = { type: "warning", text: messages.warning }; 3886 window.dispatchMessages && window.dispatchMessages([message], 5000); 3887 } 3888 }).then(function (response) { 3889 if (!response) return; 3890 const message = { 3891 type: (response.success) ? "success" : "error", 3892 text: (response.success) ? messages.success : response.error_message 3893 } 3894 window.dispatchMessages && window.dispatchMessages([message], 5000); 3895 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 3896 }).catch(function (error) { 3897 const message = { type: "error", text: error }; 3898 window.dispatchMessages && window.dispatchMessages([message], 5000); 3899 }); 3900 } 3901 3902 return { 3903 wishlistProducts: null, 3904 itemCount: 0, 3905 wishlistCountLabel: null, 3906 wishlistItems: {}, 3907 receiveWishlistData: function (data) { 3908 if (data['wishlist']) { 3909 this.wishlistProducts = data['wishlist']; 3910 this.wishlistCountLabel = '(' + this.wishlistProducts.counter + ')'; 3911 this.itemCount = this.wishlistProducts.items.length; 3912 this.wishlistItems = this.wishlistProducts.items; 3913 } 3914 }, 3915 addToCart: function (json) { 3916 const obj = JSON.parse(json); 3917 const postUrl = obj.action; 3918 const body = "form_key=" + hyva.getFormKey() + "&item=" + obj.data.item + "&qty=" + obj.data.qty + "&uenc="
3918+ hyva.getUenc(); 3919 wishlistSidebarFetchHandler(body, postUrl, /* isRemoveAction */ false); 3920 }, 3921 removeFromWishlist: function(json) { 3922 const obj = JSON.parse(json); 3923 const postUrl = obj.action; 3924 const body = "form_key=" + hyva.getFormKey() + "&item=" + obj.data.item+"&uenc=" + hyva.getUenc(); 3925 wishlistSidebarFetchHandler(body, postUrl); 3926 } 3927 } 3928 } 3929 3930 </script>
3930 3931 3932 <div x-data="initWishlistOnWishlistSidebar()" 3933 @private-content-loaded.window="receiveWishlistData($event.detail.data)" 3934 class="wishlist-widget" 3935 > 3936 <template x-if="itemCount"> 3937 <div class="mt-8"> 3938 <h2 class="border-t border-gray-300 mb-6 pt-5" id="wishlist-sidebar"> 3939 <strong class="title font-semibold text-lg">Mein Wunschzettel</strong> 3940 <span class="counter text-xs" x-text="wishlistCountLabel"></span> 3941 </h2> 3942 <ul role="list" class="my-4" aria-labelledby="wishlist-sidebar"> 3943 <template x-for="product in wishlistItems"> 3944 <li class="flex items-start mb-4"> 3945 <a 3946 :href="product.product_url" 3947 class="block mb-3 w-10 h-10 shrink-0 mr-4" 3948 tabindex="-1" 3949 aria-hidden="true" 3950 > 3951 <img 3952 :src="product.image.src" 3953 alt="" 3954 loading="lazy" 3955 > 3956 </a> 3957 <div class="product-item-details"> 3958 <strong class="mr-2 text-sm leading-6 font-normal"> 3959 <a :href="product.product_url" :title="product.product_name" x-text="product.product_name"></a> 3960 </strong> 3961 <div class="mr-2 text-sm leading-6 font-bold" x-html="product.product_price"></div> 3962 <template x-if="product.product_is_saleable_and_visible"> 3963 <div class="actions-primary my-2"> 3964 <template x-if="!product.product_has_required_options"> 3965 <button 3966 type="button" 3967 @click.prevent="addToCart(product.add_to_cart_params)" 3968 class="action tocart primary btn btn-primary text-sm" 3969 :aria-label="hyva.str('Zum\u0020Warenkorb\u0020hinzuf\u00FCgen\u0020\u00251', product.product_name)" 3970 data-addto="cart" 3971 > 3972 In den Warenkorb </button> 3973 </template> 3974 </div> 3975 </template> 3976 </div> 3977 <button 3978 type="button" 3979 @click.prevent="removeFromWishlist(product.delete_item_params)" 3980 :aria-label="hyva.str('Produkt\u0020\u0022\u00251\u0022\u0020von\u0020meiner\u0020Wunschliste\u0020entfernen', product.product_name)" 3981 class=" 3982 p-1 inline-flex shrink-0 items-center 3983 justify-center text-slate-400 hover:text-slate-800 ml-auto 3984 " 3985 > 3986 <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"> 3987 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 3988</svg> 3989 </button> 3990 </li> 3991 </template> 3992 </ul> 3993 <div class="flex flex-wrap items-center md:mt-5 gap-2 text-sm"> 3994 <a href="https://www.mode-jost.de/wishlist/" 3995 aria-label="Zur Seite Wunschliste gehen" 3996 class="btn btn-secondary text-sm" 3997 > 3998 Zum Wunschzettel gehen </a> 3999 </div> 4000 </div> 4001 </template> 4002 </div> 4003</aside></div></main><div class="page-bottom"><div class="content"><!-- BLOCK persistent_initial_configs -->
4003<script type="application/javascript"> 4004 window.persistent = {"expirationLifetime":31536000}; 4005 window.notYouLink = 'href="https://www.mode-jost.de/persistent/index/unsetCookie/"'; 4006</script>
vendor: 1 bytes, line 4006
4006
4007<script type="text/x-magento-init"> 4008 { 4009 "li.greet.welcome > span.not-logged-in": { 4010 "Magento_Persistent/js/view/additional-welcome": {} 4011 } 4012 } 4013</script>
4013 4014<!-- /BLOCK persistent_initial_configs --></div></div><footer class="page-footer"><div class="footer content">
4014<script> 4015 addEventListener('DOMContentLoaded', () => { 4016 for (const [selector, label] of Object.entries({"aside.sidebar-main":"Sidebar Main","aside.sidebar-additional":"Sidebar Additional"})) { 4017 const target = document.querySelector(selector); 4018 target && target.setAttribute('aria-label', label); 4019 } 4020 }, {once: true}) 4021</script>
4021 4022<section class="footer-section footer-section-1"><div class="widget block block-static-block"> 4023 <style>*, ::before, ::after { 4024--tw-border-spacing-x: 0; 4025--tw-border-spacing-y: 0; 4026--tw-translate-x: 0; 4027--tw-translate-y: 0; 4028--tw-rotate: 0; 4029--tw-skew-x: 0; 4030--tw-skew-y: 0; 4031--tw-scale-x: 1; 4032--tw-scale-y: 1; 4033--tw-pan-x: ; 4034--tw-pan-y: ; 4035--tw-pinch-zoom: ; 4036--tw-scroll-snap-strictness: proximity; 4037--tw-gradient-from-position: ; 4038--tw-gradient-via-position: ; 4039--tw-gradient-to-position: ; 4040--tw-ordinal: ; 4041--tw-slashed-zero: ; 4042--tw-numeric-figure: ; 4043--tw-numeric-spacing: ; 4044--tw-numeric-fraction: ; 4045--tw-ring-inset: ; 4046--tw-ring-offset-width: 0px; 4047--tw-ring-offset-color: #fff; 4048--tw-ring-color: rgb(59 130 246 / 0.5); 4049--tw-ring-offset-shadow: 0 0 #0000; 4050--tw-ring-shadow: 0 0 #0000; 4051--tw-shadow: 0 0 #0000; 4052--tw-shadow-colored: 0 0 #0000; 4053--tw-blur: ; 4054--tw-brightness: ; 4055--tw-contrast: ; 4056--tw-grayscale: ; 4057--tw-hue-rotate: ; 4058--tw-invert: ; 4059--tw-saturate: ; 4060--tw-sepia: ; 4061--tw-drop-shadow: ; 4062--tw-backdrop-blur: ; 4063--tw-backdrop-brightness: ; 4064--tw-backdrop-contrast: ; 4065--tw-backdrop-grayscale: ; 4066--tw-backdrop-hue-rotate: ; 4067--tw-backdrop-invert: ; 4068--tw-backdrop-opacity: ; 4069--tw-backdrop-saturate: ; 4070--tw-backdrop-sepia: ; 4071--tw-contain-size: ; 4072--tw-contain-layout: ; 4073--tw-contain-paint: ; 4074--tw-contain-style: 4075} 4076::backdrop { 4077--tw-border-spacing-x: 0; 4078--tw-border-spacing-y: 0; 4079--tw-translate-x: 0; 4080--tw-translate-y: 0; 4081--tw-rotate: 0; 4082--tw-skew-x: 0; 4083--tw-skew-y: 0; 4084--tw-scale-x: 1; 4085--tw-scale-y: 1; 4086--tw-pan-x: ; 4087--tw-pan-y: ; 4088--tw-pinch-zoom: ; 4089--tw-scroll-snap-strictness: proximity; 4090--tw-gradient-from-position: ; 4091--tw-gradient-via-position: ; 4092--tw-gradient-to-position: ; 4093--tw-ordinal: ; 4094--tw-slashed-zero: ; 4095--tw-numeric-figure: ; 4096--tw-numeric-spacing: ; 4097--tw-numeric-fraction: ; 4098--tw-ring-inset: ; 4099--tw-ring-offset-width: 0px; 4100--tw-ring-offset-color: #fff; 4101--tw-ring-color: rgb(59 130 246 / 0.5); 4102--tw-ring-offset-shadow: 0 0 #0000; 4103--tw-ring-shadow: 0 0 #0000; 4104--tw-shadow: 0 0 #0000; 4105--tw-shadow-colored: 0 0 #0000; 4106--tw-blur: ; 4107--tw-brightness: ; 4108--tw-contrast: ; 4109--tw-grayscale: ; 4110--tw-hue-rotate: ; 4111--tw-invert: ; 4112--tw-saturate: ; 4113--tw-sepia: ; 4114--tw-drop-shadow: ; 4115--tw-backdrop-blur: ; 4116--tw-backdrop-brightness: ; 4117--tw-backdrop-contrast: ; 4118--tw-backdrop-grayscale: ; 4119--tw-backdrop-hue-rotate: ; 4120--tw-backdrop-invert: ; 4121--tw-backdrop-opacity: ; 4122--tw-backdrop-saturate: ; 4123--tw-backdrop-sepia: ; 4124--tw-contain-size: ; 4125--tw-contain-layout: ; 4126--tw-contain-paint: ; 4127--tw-contain-style: 4128}</style> 4129<style>*, ::before, ::after { 4130--tw-border-spacing-x: 0; 4131--tw-border-spacing-y: 0; 4132--tw-translate-x: 0; 4133--tw-translate-y: 0; 4134--tw-rotate: 0; 4135--tw-skew-x: 0; 4136--tw-skew-y: 0; 4137--tw-scale-x: 1; 4138--tw-scale-y: 1; 4139--tw-pan-x: ; 4140--tw-pan-y: ; 4141--tw-pinch-zoom: ; 4142--tw-scroll-snap-strictness: proximity; 4143--tw-gradient-from-position: ; 4144--tw-gradient-via-position: ; 4145--tw-gradient-to-position: ; 4146--tw-ordinal: ; 4147--tw-slashed-zero: ; 4148--tw-numeric-figure: ; 4149--tw-numeric-spacing: ; 4150--tw-numeric-fraction: ; 4151--tw-ring-inset: ; 4152--tw-ring-offset-width: 0px; 4153--tw-ring-offset-color: #fff; 4154--tw-ring-color: rgb(59 130 246 / 0.5); 4155--tw-ring-offset-shadow: 0 0 #0000; 4156--tw-ring-shadow: 0 0 #0000; 4157--tw-shadow: 0 0 #0000; 4158--tw-shadow-colored: 0 0 #0000; 4159--tw-blur: ; 4160--tw-brightness: ; 4161--tw-contrast: ; 4162--tw-grayscale: ; 4163--tw-hue-rotate: ; 4164--tw-invert: ; 4165--tw-saturate: ; 4166--tw-sepia: ; 4167--tw-drop-shadow: ; 4168--tw-backdrop-blur: ; 4169--tw-backdrop-brightness: ; 4170--tw-backdrop-contrast: ; 4171--tw-backdrop-grayscale: ; 4172--tw-backdrop-hue-rotate: ; 4173--tw-backdrop-invert: ; 4174--tw-backdrop-opacity: ; 4175--tw-backdrop-saturate: ; 4176--tw-backdrop-sepia: ; 4177--tw-contain-size: ; 4178--tw-contain-layout: ; 4179--tw-contain-paint: ; 4180--tw-contain-style: 4181} 4182::backdrop { 4183--tw-border-spacing-x: 0; 4184--tw-border-spacing-y: 0; 4185--tw-translate-x: 0; 4186--tw-translate-y: 0; 4187--tw-rotate: 0; 4188--tw-skew-x: 0; 4189--tw-skew-y: 0; 4190--tw-scale-x: 1; 4191--tw-scale-y: 1; 4192--tw-pan-x: ; 4193--tw-pan-y: ; 4194--tw-pinch-zoom: ; 4195--tw-scroll-snap-strictness: proximity; 4196--tw-gradient-from-position: ;
4197--tw-gradient-via-position: ; 4198--tw-gradient-to-position: ; 4199--tw-ordinal: ; 4200--tw-slashed-zero: ; 4201--tw-numeric-figure: ; 4202--tw-numeric-spacing: ; 4203--tw-numeric-fraction: ; 4204--tw-ring-inset: ; 4205--tw-ring-offset-width: 0px; 4206--tw-ring-offset-color: #fff; 4207--tw-ring-color: rgb(59 130 246 / 0.5); 4208--tw-ring-offset-shadow: 0 0 #0000; 4209--tw-ring-shadow: 0 0 #0000; 4210--tw-shadow: 0 0 #0000; 4211--tw-shadow-colored: 0 0 #0000; 4212--tw-blur: ; 4213--tw-brightness: ; 4214--tw-contrast: ; 4215--tw-grayscale: ; 4216--tw-hue-rotate: ; 4217--tw-invert: ; 4218--tw-saturate: ; 4219--tw-sepia: ; 4220--tw-drop-shadow: ; 4221--tw-backdrop-blur: ; 4222--tw-backdrop-brightness: ; 4223--tw-backdrop-contrast: ; 4224--tw-backdrop-grayscale: ; 4225--tw-backdrop-hue-rotate: ; 4226--tw-backdrop-invert: ; 4227--tw-backdrop-opacity: ; 4228--tw-backdrop-saturate: ; 4229--tw-backdrop-sepia: ; 4230--tw-contain-size: ; 4231--tw-contain-layout: ; 4232--tw-contain-paint: ; 4233--tw-contain-style: 4234}</style> 4235<h5>Service</h5> 4236<ul> 4237<li><a title="Zur Unterseite App" href="/service/jost-app">App</a></li> 4238<li><a title="Zur Unterseite Kundenkonto" href="/service/kundenkonto">Kundenkonto</a></li> 4239<li><a title="Zur Unterseite Newsletter" href="/service/newsletter-anmeldung">Newsletter</a></li> 4240 4241<li><a title="VERTRAG WIDERRUFEN" href="https://www.mode-jost.de/vertrag-widerrufen">VERTRAG WIDERRUFEN</a></li> 4242<li><a title="Gewährleistung" href="/gewaehrleistung">Gewährleistung</a></li> 4243</ul></div> 4244</section> 4245<section class="footer-section footer-section-2"><div class="widget block block-static-block"> 4246 <style>*, ::before, ::after { 4247--tw-border-spacing-x: 0; 4248--tw-border-spacing-y: 0; 4249--tw-translate-x: 0; 4250--tw-translate-y: 0; 4251--tw-rotate: 0; 4252--tw-skew-x: 0; 4253--tw-skew-y: 0; 4254--tw-scale-x: 1; 4255--tw-scale-y: 1; 4256--tw-pan-x: ; 4257--tw-pan-y: ; 4258--tw-pinch-zoom: ; 4259--tw-scroll-snap-strictness: proximity; 4260--tw-gradient-from-position: ; 4261--tw-gradient-via-position: ; 4262--tw-gradient-to-position: ; 4263--tw-ordinal: ; 4264--tw-slashed-zero: ; 4265--tw-numeric-figure: ; 4266--tw-numeric-spacing: ; 4267--tw-numeric-fraction: ; 4268--tw-ring-inset: ; 4269--tw-ring-offset-width: 0px; 4270--tw-ring-offset-color: #fff; 4271--tw-ring-color: rgb(59 130 246 / 0.5); 4272--tw-ring-offset-shadow: 0 0 #0000; 4273--tw-ring-shadow: 0 0 #0000; 4274--tw-shadow: 0 0 #0000; 4275--tw-shadow-colored: 0 0 #0000; 4276--tw-blur: ; 4277--tw-brightness: ; 4278--tw-contrast: ; 4279--tw-grayscale: ; 4280--tw-hue-rotate: ; 4281--tw-invert: ; 4282--tw-saturate: ; 4283--tw-sepia: ; 4284--tw-drop-shadow: ; 4285--tw-backdrop-blur: ; 4286--tw-backdrop-brightness: ; 4287--tw-backdrop-contrast: ; 4288--tw-backdrop-grayscale: ; 4289--tw-backdrop-hue-rotate: ; 4290--tw-backdrop-invert: ; 4291--tw-backdrop-opacity: ; 4292--tw-backdrop-saturate: ; 4293--tw-backdrop-sepia: ; 4294--tw-contain-size: ; 4295--tw-contain-layout: ; 4296--tw-contain-paint: ; 4297--tw-contain-style: 4298} 4299::backdrop { 4300--tw-border-spacing-x: 0; 4301--tw-border-spacing-y: 0; 4302--tw-translate-x: 0; 4303--tw-translate-y: 0; 4304--tw-rotate: 0; 4305--tw-skew-x: 0; 4306--tw-skew-y: 0; 4307--tw-scale-x: 1; 4308--tw-scale-y: 1; 4309--tw-pan-x: ; 4310--tw-pan-y: ; 4311--tw-pinch-zoom: ; 4312--tw-scroll-snap-strictness: proximity; 4313--tw-gradient-from-position: ; 4314--tw-gradient-via-position: ; 4315--tw-gradient-to-position: ; 4316--tw-ordinal: ; 4317--tw-slashed-zero: ; 4318--tw-numeric-figure: ; 4319--tw-numeric-spacing: ; 4320--tw-numeric-fraction: ; 4321--tw-ring-inset: ; 4322--tw-ring-offset-width: 0px; 4323--tw-ring-offset-color: #fff; 4324--tw-ring-color: rgb(59 130 246 / 0.5); 4325--tw-ring-offset-shadow: 0 0 #0000; 4326--tw-ring-shadow: 0 0 #0000; 4327--tw-shadow: 0 0 #0000; 4328--tw-shadow-colored: 0 0 #0000; 4329--tw-blur: ; 4330--tw-brightness: ; 4331--tw-contrast: ; 4332--tw-grayscale: ; 4333--tw-hue-rotate: ; 4334--tw-invert: ; 4335--tw-saturate: ; 4336--tw-sepia: ; 4337--tw-drop-shadow: ; 4338--tw-backdrop-blur: ; 4339--tw-backdrop-brightness: ; 4340--tw-backdrop-contrast: ; 4341--tw-backdrop-grayscale: ; 4342--tw-backdrop-hue-rotate: ; 4343--tw-backdrop-invert: ; 4344--tw-backdrop-opacity: ; 4345--tw-backdrop-saturate: ; 4346--tw-backdrop-sepia: ; 4347--tw-contain-size: ; 4348--tw-contain-layout: ; 4349--tw-contain-paint: ; 4350--tw-contain-style: 4351}</style> 4352<style>*, ::before, ::after { 4353--tw-border-spacing-x: 0; 4354--tw-border-spacing-y: 0; 4355--tw-translate-x: 0; 4356--tw-translate-y: 0; 4357--tw-rotate: 0; 4358--tw-skew-x: 0; 4359--tw-skew-y: 0; 4360--tw-scale-x: 1; 4361--tw-scale-y: 1; 4362--tw-pan-x: ; 4363--tw-pan-y: ; 4364--tw-pinch-zoom: ; 4365--tw-scroll-snap-strictness: proximity; 4366--tw-gradient-from-position: ;
4367--tw-gradient-via-position: ; 4368--tw-gradient-to-position: ; 4369--tw-ordinal: ; 4370--tw-slashed-zero: ; 4371--tw-numeric-figure: ; 4372--tw-numeric-spacing: ; 4373--tw-numeric-fraction: ; 4374--tw-ring-inset: ; 4375--tw-ring-offset-width: 0px; 4376--tw-ring-offset-color: #fff; 4377--tw-ring-color: rgb(59 130 246 / 0.5); 4378--tw-ring-offset-shadow: 0 0 #0000; 4379--tw-ring-shadow: 0 0 #0000; 4380--tw-shadow: 0 0 #0000; 4381--tw-shadow-colored: 0 0 #0000; 4382--tw-blur: ; 4383--tw-brightness: ; 4384--tw-contrast: ; 4385--tw-grayscale: ; 4386--tw-hue-rotate: ; 4387--tw-invert: ; 4388--tw-saturate: ; 4389--tw-sepia: ; 4390--tw-drop-shadow: ; 4391--tw-backdrop-blur: ; 4392--tw-backdrop-brightness: ; 4393--tw-backdrop-contrast: ; 4394--tw-backdrop-grayscale: ; 4395--tw-backdrop-hue-rotate: ; 4396--tw-backdrop-invert: ; 4397--tw-backdrop-opacity: ; 4398--tw-backdrop-saturate: ; 4399--tw-backdrop-sepia: ; 4400--tw-contain-size: ; 4401--tw-contain-layout: ; 4402--tw-contain-paint: ; 4403--tw-contain-style: 4404} 4405::backdrop { 4406--tw-border-spacing-x: 0; 4407--tw-border-spacing-y: 0; 4408--tw-translate-x: 0; 4409--tw-translate-y: 0; 4410--tw-rotate: 0; 4411--tw-skew-x: 0; 4412--tw-skew-y: 0; 4413--tw-scale-x: 1; 4414--tw-scale-y: 1; 4415--tw-pan-x: ; 4416--tw-pan-y: ; 4417--tw-pinch-zoom: ; 4418--tw-scroll-snap-strictness: proximity; 4419--tw-gradient-from-position: ; 4420--tw-gradient-via-position: ; 4421--tw-gradient-to-position: ; 4422--tw-ordinal: ; 4423--tw-slashed-zero: ; 4424--tw-numeric-figure: ; 4425--tw-numeric-spacing: ; 4426--tw-numeric-fraction: ; 4427--tw-ring-inset: ; 4428--tw-ring-offset-width: 0px; 4429--tw-ring-offset-color: #fff; 4430--tw-ring-color: rgb(59 130 246 / 0.5); 4431--tw-ring-offset-shadow: 0 0 #0000; 4432--tw-ring-shadow: 0 0 #0000; 4433--tw-shadow: 0 0 #0000; 4434--tw-shadow-colored: 0 0 #0000; 4435--tw-blur: ; 4436--tw-brightness: ; 4437--tw-contrast: ; 4438--tw-grayscale: ; 4439--tw-hue-rotate: ; 4440--tw-invert: ; 4441--tw-saturate: ; 4442--tw-sepia: ; 4443--tw-drop-shadow: ; 4444--tw-backdrop-blur: ; 4445--tw-backdrop-brightness: ; 4446--tw-backdrop-contrast: ; 4447--tw-backdrop-grayscale: ; 4448--tw-backdrop-hue-rotate: ; 4449--tw-backdrop-invert: ; 4450--tw-backdrop-opacity: ; 4451--tw-backdrop-saturate: ; 4452--tw-backdrop-sepia: ; 4453--tw-contain-size: ; 4454--tw-contain-layout: ; 4455--tw-contain-paint: ; 4456--tw-contain-style: 4457}</style> 4458<h5>Kontakt</h5> 4459<ul> 4460<li>Jakob Jost GmbH</li> 4461<li><a title="E-Mail an das Modehaus Jost schreiben" href="mailto:[email protected]">[email protected]</a></li> 4462<li><a title="Beim Modehaus Jost anrufen" href="tel:+4963599520">06359 - 95 20</a></li> 4463<li><a title="Zur Unterseite Filialen" href="/filialen">Filialen</a></li> 4464</ul></div> 4465</section> 4466<section class="footer-section footer-section-3"><div class="widget block block-static-block"> 4467 <h5>Rechtliches</h5> 4468<ul> 4469<li><a href="/impressum">Impressum</a></li> 4470<li><a href="/datenschutz">Datenschutz</a></li> 4471<li><a href="/widerruf">Widerrufsrecht</a></li> 4472<li><a href="/agb">AGB</a></li> 4473<li><a href="/barrierefreiheitserklaerung">Barrierefreiheitserklärung</a></li> 4474<li><a href="/" data-amcookie-js="footer-link">Cookie-Einstellungen</a></li> 4475</ul></div> 4476</section> 4477<section class="footer-section footer-section-4"><div class="widget block block-static-block"> 4478 <style>*, ::before, ::after { 4479--tw-border-spacing-x: 0; 4480--tw-border-spacing-y: 0; 4481--tw-translate-x: 0; 4482--tw-translate-y: 0; 4483--tw-rotate: 0; 4484--tw-skew-x: 0; 4485--tw-skew-y: 0; 4486--tw-scale-x: 1; 4487--tw-scale-y: 1; 4488--tw-pan-x: ; 4489--tw-pan-y: ; 4490--tw-pinch-zoom: ; 4491--tw-scroll-snap-strictness: proximity; 4492--tw-gradient-from-position: ; 4493--tw-gradient-via-position: ; 4494--tw-gradient-to-position: ; 4495--tw-ordinal: ; 4496--tw-slashed-zero: ; 4497--tw-numeric-figure: ; 4498--tw-numeric-spacing: ; 4499--tw-numeric-fraction: ; 4500--tw-ring-inset: ; 4501--tw-ring-offset-width: 0px; 4502--tw-ring-offset-color: #fff; 4503--tw-ring-color: rgb(59 130 246 / 0.5); 4504--tw-ring-offset-shadow: 0 0 #0000; 4505--tw-ring-shadow: 0 0 #0000; 4506--tw-shadow: 0 0 #0000; 4507--tw-shadow-colored: 0 0 #0000; 4508--tw-blur: ; 4509--tw-brightness: ; 4510--tw-contrast: ; 4511--tw-grayscale: ; 4512--tw-hue-rotate: ; 4513--tw-invert: ; 4514--tw-saturate: ; 4515--tw-sepia: ; 4516--tw-drop-shadow: ; 4517--tw-backdrop-blur: ; 4518--tw-backdrop-brightness: ; 4519--tw-backdrop-contrast: ; 4520--tw-backdrop-grayscale: ; 4521--tw-backdrop-hue-rotate: ; 4522--tw-backdrop-invert: ; 4523--tw-backdrop-opacity: ; 4524--tw-backdrop-saturate: ; 4525--tw-backdrop-sepia: ; 4526--tw-contain-size: ; 4527--tw-contain-layout: ; 4528--tw-contain-paint: ; 4529--tw-contain-style: 4530} 4531::backdrop { 4532--tw-border-spacing-x: 0; 4533--tw-border-spacing-y: 0; 4534--tw-translate-x: 0; 4535--tw-translate-y: 0; 4536--tw-rotate: 0; 4537--tw-skew-x: 0; 4538--tw-skew-y: 0; 4539--tw-scale-x: 1; 4540--tw-scale-y: 1; 4541--tw-pan-x: ; 4542--tw-pan-y: ; 4543--tw-pinch-zoom: ; 4544--tw-scroll-snap-strictness: proximity; 4545--tw-gradient-from-position: ;
4546--tw-gradient-via-position: ; 4547--tw-gradient-to-position: ; 4548--tw-ordinal: ; 4549--tw-slashed-zero: ; 4550--tw-numeric-figure: ; 4551--tw-numeric-spacing: ; 4552--tw-numeric-fraction: ; 4553--tw-ring-inset: ; 4554--tw-ring-offset-width: 0px; 4555--tw-ring-offset-color: #fff; 4556--tw-ring-color: rgb(59 130 246 / 0.5); 4557--tw-ring-offset-shadow: 0 0 #0000; 4558--tw-ring-shadow: 0 0 #0000; 4559--tw-shadow: 0 0 #0000; 4560--tw-shadow-colored: 0 0 #0000; 4561--tw-blur: ; 4562--tw-brightness: ; 4563--tw-contrast: ; 4564--tw-grayscale: ; 4565--tw-hue-rotate: ; 4566--tw-invert: ; 4567--tw-saturate: ; 4568--tw-sepia: ; 4569--tw-drop-shadow: ; 4570--tw-backdrop-blur: ; 4571--tw-backdrop-brightness: ; 4572--tw-backdrop-contrast: ; 4573--tw-backdrop-grayscale: ; 4574--tw-backdrop-hue-rotate: ; 4575--tw-backdrop-invert: ; 4576--tw-backdrop-opacity: ; 4577--tw-backdrop-saturate: ; 4578--tw-backdrop-sepia: ; 4579--tw-contain-size: ; 4580--tw-contain-layout: ; 4581--tw-contain-paint: ; 4582--tw-contain-style: 4583}</style> 4584<div class="magezon-builder magezon-builder-preload"><div class="lt09grm mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner lt09grm-s"><style> .bfb-element.required .bfb-element-label label > span:after { color: #e22626; content: '*'; font-size: 1.6rem; font-weight: 500; margin-left: 5px; } </style><div class="inner-content mgz-container"><div class="b4cb6b6 mgz-element mgz-element-column social-media mgz-col-xs-12"><div class="mgz-element-inner b4cb6b6-s social-media-sub"><div class="bodcnop mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner bodcnop-s"><h5 style="margin: 0!important;">Social Media</h5></div></div><div class="m51uv2k mgz-element mgz-child mgz-element-raw_html social-media-link"><div class="mgz-element-inner m51uv2k-s social-media-link-sub"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" /><br> <a href="https://www.facebook.com/ModehausJost/" target="_blank"><i class="fa-brands fa-facebook icons" style ="font-size: 28px; margin-right: 10px; "></i></a> <a href="https://www.instagram.com/modejost/?hl=de" target="_blank"><i class="fa-brands fa-instagram icons" style ="font-size: 30px; margin-right: 10px; "></i></a> <a href="https://www.youtube.com/channel/UCuO0mMfOvXiGOcFufPjjRlA"><i class="fa-brands fa-youtube icons" style ="font-size: 30px; margin-right: 10px; "></i></a></div></div></div></div><div class="fadokag mgz-element mgz-element-column social-app mgz-col-xs-12"><div class="mgz-element-inner fadokag-s social-app-sub"><div class="ue3hlag mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ue3hlag-s"><h5>Jost App</h5></div></div><div class="et3087n mgz-element mgz-child mgz-element-raw_html app-link"><div class="mgz-element-inner et3087n-s app-link-sub"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"><br> <a href="https://apps.apple.com/de/app/jost/id1199982892" target="_blank"><i class="fa-brands fa-apple" style ="font-size: 33px; margin-right: 10px; "></i></a> <a href="https://play.google.com/store/apps/details?id=com.modejost.jostapp" target="_blank"><i class="fa fa-android" style ="font-size: 33px; margin-right: 10px; "></i></a></div></div></div></div></div>
4584<script> 4585 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 4586 .then(() => { 4587 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/magezon-builder.js', 'mgzbuilder'); 4588 }) 4589 .then(() => { 4590 const elemId = $('.lt09grm'); 4591 let mgzBuilder = new MagezonBuilder(elemId); 4592 }) 4593</script>
4593</div></div></div></div> 4594</section> 4595<div class="footer-sub"> 4596<div class="footer-sub-inner"><address class="company">Jakob Jost GmbH | BahnhofstraÃe 1a | 67269 Grünstadt | [email protected]</address><address class="developer">Realisiert: <a title="Modehaus.de: System | eCommerce für Modehäuser" href="http://system.modehaus.de" target="_blank" rel="noopener">Modehaus.de</a> | <a title="SOL. Service Online - Magento - TYPO3 - Apps - Print -aus Hameln - SOLdesign.de" href="http://www.soldesign.de" target="_blank" rel="noopener">SOL.Service Online, Hameln</a></address></div> 4597</div></div></footer> 4598<div x-data="initCookieGroupInfo_6ab51c7001580" x-bind="eventListeners"> 4599 <dialog 4600 x-ref="classic-am-cookie-group-info" 4601 data-dialog-ref-name="classic-am-cookie-group-info" 4602 aria-labelledby="amcookie-group-info" 4603 closeby="any" 4604 class="open:flex flex-col max-h-[92vh] max-w-[90vw] overflow-auto 4605 bg-ambar-info-bar-background shadow-xl rounded-lg p-8 text-gray-700 relative backdrop:bg-gray-500/50" 4606 x-bind="dialogConfig" 4607 x-htmldialog="closeHandler" 4608 > 4609 <template x-if="group"> 4610 <div id="amcookie-group-info"> 4611 <button @click.stop="closeHandler" 4612 aria-label="Schließen" 4613 class="absolute right-2 top-2 text-gray-300 transition 4614 hover:text-black focus:drop-shadow-md hover:drop-shadow-md" 4615 > 4616 <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" 4617 stroke="currentColor" 4618 stroke-width="2"> 4619 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 4620 </svg> 4621 </button> 4622 <div class="md:flex md:justify-start pb-4"> 4623 <h3 class="text-xl font-semibold text-ambar-info-bar-title" x-text="group.name"></h3> 4624 </div> 4625 <template x-if="group.description"> 4626 <p class="mb-4 text-ambar-info-bar-description" x-html="group.description"></p> 4627 </template> 4628 <div class="overflow-x-scroll md:overflow-x-auto"> 4629 <table class="table-auto w-full mb-4 text-left"> 4630 <thead class="text-ambar-info-bar-table-header"> 4631 <tr> 4632 <th class="pr-4">Cookie-Name</th> 4633 <th class="pr-4">Cookie-Anbieter</th> 4634 <th class="min-w-[30%] pr-4">Cookie Beschreibung</th> 4635 <th class="pr-4">Cookie-Lebensdauer</th> 4636 <th class="pr-4">Cookie Typ</th> 4637 </tr> 4638 </thead> 4639 <tbody class="text-ambar-info-bar-table-content"> 4640 <template x-for="(item, index) in group.cookies" :key="index"> 4641 <tr> 4642 <td x-text="item.name" class="font-semibold pr-4"></td> 4643 <td x-text="item.provider" class="pr-4"></td> 4644 <td x-html="item.description" class="min-w-[30%] pr-4"></td> 4645 <td x-text="item.lifetime" class="pr-4"></td> 4646 <td x-text="item.type" class="pr-4"></td> 4647 </tr> 4648 </template> 4649 </tbody> 4650 </table> 4651 </div> 4652 </div> 4653 </template> 4654 <button 4655 @click.stop="closeHandler" 4656 aria-label="Fertig" 4657 class="mt-4 w-full text-xs font-semibold text-ambar-info-bar-button-text 4658 hover:text-ambar-info-bar-button-hover-text uppercase bg-ambar-info-bar-button 4659 hover:bg-ambar-info-bar-button-hover ambar-action-btn rounded-sm text-center text-sm transition-colors focus:drop-shadow hover:drop-shadow px-2 py-4" 4660 > 4661 Fertig </button> 4662 </dialog> 4663 4664</div>
4665<script data-cfasync="false"> 4666 'use strict'; 4667 4668 function initCookieGroupInfo_6ab51c7001580() { 4669 return { 4670 ...hyva.modal({ 4671 dialog: 'classic-am-cookie-group-info' 4672 }), 4673 group: null, 4674 eventListeners: { 4675 ['@classic-close-am-cookie-group-info.window']() { 4676 this.closeHandler(); 4677 }, 4678 ['@classic-open-am-cookie-group-info.window'](event) { 4679 this.group = event.detail; 4680 4681 if (!!this.group) { 4682 /* 4683 If modal have big cookies list this can lead to 4684 trigger hide event in hyva.modal.eventListeners.click, 4685 so we should wait till this.group is reassigned 4686 */ 4687 this.$nextTick(() => this.show('classic-am-cookie-group-info')); 4688 } 4689 } 4690 }, 4691 closeHandler: function () { 4692 this.hide('classic-am-cookie-group-info'); 4693 } 4694 } 4695 } 4696 4697 window.addEventListener( 4698 'alpine:init', 4699 () => Alpine.data( 4700 'initCookieGroupInfo_6ab51c7001580', 4701 initCookieGroupInfo_6ab51c7001580 ), 4702 {once: true} 4703 ); 4704</script>
4704 4705 4706 4707<style> 4708 @keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0} 4709 4710 /* Custom additions from the splide.min.css but without the custom style */ 4711 .splide__pagination--ttb { 4712 position: absolute; 4713 display: inline-flex; 4714 flex-direction: column; 4715 top: 0; 4716 bottom: 0; 4717 right: 100%; 4718 } 4719 4720 /* Hide the pagination dots when the input device is a touch based input */ 4721 @media (pointer: coarse) or (max-width: 639px) { 4722 .splide__pagination { display: none } 4723 } 4724</style> 4725
4726<script> 4727 function r(n,t){for(var i=0;i<t.length;i++){var r=t[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(n,r.key,r)}}function Jt(n,t,i){t&&r(n.prototype,t),i&&r(n,i),Object.defineProperty(n,"prototype",{writable:!1})} 4728
vendor: 17,762 bytes, line 4728
4728var n,t;n=this,t=function(){"use strict";var v="(prefers-reduced-motion: reduce)",G=4,rn=5,r={CREATED:1,MOUNTED:2,IDLE:3,MOVING:G,SCROLLING:rn,DRAGGING:6,DESTROYED:7};function D(n){n.length=0}function o(n,t,i){return Array.prototype.slice.call(n,t,i)}function R(n){return n.bind.apply(n,[null].concat(o(arguments,1)))}function on(){}var p=setTimeout;function h(n){return requestAnimationFrame(n)}function u(n,t){return typeof t===n}function un(n){return!c(n)&&u("object",n)}var e=Array.isArray,x=R(u,"function"),C=R(u,"string"),en=R(u,"undefined");function c(n){return null===n}function m(n){try{return n instanceof(n.ownerDocument.defaultView||window).HTMLElement}catch(n){return!1}}function y(n){return e(n)?n:[n]}function g(n,t){y(n).forEach(t)}function b(n,t){return-1<n.indexOf(t)}function k(n,t){return n.push.apply(n,y(t)),n}function A(t,n,i){t&&g(n,function(n){n&&t.classList[i?"add":"remove"](n)})}function M(n,t){A(n,C(t)?t.split(" "):t,!0)}function L(n,t){g(t,n.appendChild.bind(n))}function O(n,i){g(n,function(n){var t=(i||n).parentNode;t&&t.insertBefore(n,i)})}function cn(n,t){return m(n)&&(n.msMatchesSelector||n.matches).call(n,t)}function S(n,t){n=n?o(n.children):[];return t?n.filter(function(n){return cn(n,t)}):n}function fn(n,t){return t?S(n,t)[0]:n.firstElementChild}var E=Object.keys;function w(t,i,n){t&&(n?E(t).reverse():E(t)).forEach(function(n){"__proto__"!==n&&i(t[n],n)})}function an(r){return o(arguments,1).forEach(function(i){w(i,function(n,t){r[t]=i[t]})}),r}function d(i){return o(arguments,1).forEach(function(n){w(n,function(n,t){e(n)?i[t]=n.slice():un(n)?i[t]=d({},un(i[t])?i[t]:{},n):i[t]=n})}),i}function sn(t,n){g(n||E(t),function(n){delete t[n]})}function P(n,i){g(n,function(t){g(i,function(n){t&&t.removeAttribute(n)})})}function I(i,t,r){un(t)?w(t,function(n,t){I(i,t,n)}):g(i,function(n){c(r)||""===r?P(n,t):n.setAttribute(t,String(r))})}function j(n,t,i){n=document.createElement(n);return t&&(C(t)?M:I)(n,t),i&&L(i,n),n}function _(n,t,i){if(en(i))return getComputedStyle(n)[t];c(i)||(n.style[t]=""+i)}function ln(n,t){_(n,"display",t)}function dn(n){n.setActive&&n.setActive()||n.focus({preventScroll:!0})}function z(n,t){return n.getAttribute(t)}function vn(n,t){return n&&n.classList.contains(t)}function N(n){return n.getBoundingClientRect()}function T(n){g(n,function(n){n&&n.parentNode&&n.parentNode.removeChild(n)})}function hn(n){return fn((new DOMParser).parseFromString(n,"text/html").body)}function F(n,t){n.preventDefault(),t&&(n.stopPropagation(),n.stopImmediatePropagation())}function pn(n,t){return n&&n.querySelector(t)}function gn(n,t){return t?o(n.querySelectorAll(t)):[]}function X(n,t){A(n,t,!1)}function mn(n){return n.timeStamp}function W(n){return C(n)?n:n?n+"px":""}var yn="splide",f="data-"+yn;function bn(n,t){if(!n)throw new Error("["+yn+"] "+(t||""))}var Y=Math.min,wn=Math.max,xn=Math.floor,kn=Math.ceil,U=Math.abs;function Sn(n,t,i){return U(n-t)<i}function En(n,t,i,r){var o=Y(t,i),t=wn(t,i);return r?o<n&&n<t:o<=n&&n<=t}function q(n,t,i){var r=Y(t,i),t=wn(t,i);return Y(wn(r,n),t)}function Ln(n){return(0<n)-(n<0)}function On(t,n){return g(n,function(n){t=t.replace("%s",""+n)}),t}function An(n){return n<10?"0"+n:""+n}var _n={};function zn(){var c=[];function i(n,i,r){g(n,function(t){t&&g(i,function(n){n.split(" ").forEach(function(n){n=n.split(".");r(t,n[0],n[1])})})})}return{bind:function(n,t,u,e){i(n,t,function(n,t,i){var r="addEventListener"in n,o=r?n.removeEventListener.bind(n,t,u,e):n.removeListener.bind(n,u);r?n.addEventListener(t,u,e):n.addListener(u),c.push([n,t,i,u,o])})},unbind:function(n,t,o){i(n,t,function(t,i,r){c=c.filter(function(n){return!!(n[0]!==t||n[1]!==i||n[2]!==r||o&&n[3]!==o)||(n[4](),!1)})})},dispatch:function(n,t,i){var r;return"function"==typeof CustomEvent?r=new CustomEvent(t,{bubbles:!0,detail:i}):(r=document.createEvent("CustomEvent")).initCustomEvent(t,!0,!1,i),n.dispatchEvent(r),r},destroy:function(){c.forEach(function(n){n[4]()}),D(c)}}}var B="mounted",H="move",Dn="moved",Mn="click",Pn="active",In="inactive",Rn="visible",Cn="hidden",J="refresh",K="updated",jn="resize",Nn="resized",Tn="scroll",V="scrolled",a="destroy",Gn="navigation:mounted",Fn="autoplay:play",Xn="autoplay:pause",Wn="lazyload:loaded",Yn="sk",Un="sh";function Q(n){var i=n?n.event.bus:document.createDocumentFragment(),r=zn();return n&&n.event.on(a,r.destroy),an(r,{bus:i,on:function(n,t){r.bind(i,y(n).join(" "),function(n){t.apply(t,e(n.detail)?n.detail:[])})},off:R(r.unbind,i),emit:function(n){r.dispatch(i,n,o(arguments,1))}})}function qn(t,n,i,r){var o,u,e=Date.now,c=0,f=!0,a=0;function s(){if(!f){if(c=t?Y((e()-o)/t,1):1,i&&i(c),1<=c&&(n(),o=e(),r&&++a>=r))return l();u=h(s)}}function l(){f=!0}function d(){u&&cancelAnimationFrame(u),f=!(u=c=0)}return{start:function(n){n||d(),o=e()-(n?c*t:0),f=!1,u=h(s)},rewind:function(){o=e(),c=0,i&&i(c)},pause:l,cancel:d,set:function(n){t=n},isPaused:function(){return f}}}function s(n){var t=n;return{set:function(n){t=n},is:function(n){return b(y(n),t)}}}var n="Arrow",Bn=n+"Left",Hn=n+"Right",t=n+"Up",n=n+"Down",Jn="ttb",l={width:["height"],left:["top","right"],right:["bottom","left"],x:["y"],X:["Y"],Y:["X"],ArrowLeft:[t,Hn],ArrowRight:[n,Bn]};var Z="role",$="tabindex",i="aria-",Kn=i+"controls",Vn=i+"current",Qn=i+"selected",nn=i+"label",Zn=i+"labelledby",$n=i+"hidden",nt=i+"orientation",tt=i+"roledescription",it=i+"live",rt=i+"busy",ot=i+"atomic",ut=[Z,$,"disabled",Kn,Vn,nn,Zn,$n,nt,tt],i=yn+"__",et=yn,ct=i+"track",ft=i+"list",at=i+"slide",st=at+"--clone",lt=at+"__container",dt=i+"arrows",vt=i+"arrow",ht=vt+"--prev",pt=vt+"--next",gt=i+"pagination",mt=gt+"__page",yt=i+"progress"+"__bar",bt=i+"toggle",wt=i+"sr",tn="is-active",xt="is-prev",kt="is-next",St="is-visible",Et="is-loading",Lt="is-focus-in",Ot="is-overflow",At=[tn,St,xt,kt,Et,Lt,Ot];var _t="touchstart mousedown",zt="touchmove mousemove",Dt="touchend touchcancel mouseup click";var Mt="slide",Pt="loop",It="fade";function Rt(o,r,t,u){var e,n=Q(o),i=n.on,c=n.emit,f=n.bind,a=o.Components,s=o.root,l=o.options,d=l.isNavigation,v=l.updateOnMove,h=l.i18n,p=l.pagination,g=l.slideFocus,m=a.Direction.resolve,y=z(u,"style"),b=z(u,nn),w=-1<t,x=fn(u,"."+lt);function k(){var n=o.splides.map(function(n){n=n.splide.Components.Slides.getAt(r);return n?n.slide.id:""}).join(" ");I(u,nn,On(h.slideX,(w?t:r)+1)),I(u,Kn,n),I(u,Z,g?"button":""),g&&P(u,tt)}function S(){e||E()}function E(){var n,t,i;e||(n=o.index,(i=L())!==vn(u,tn)&&(A(u,tn,i),I(u,Vn,d&&i||""),c(i?Pn:In,O)),i=function(){if(o.is(It))return L();var n=N(a.Elements.track),t=N(u),i=m("left",!0),r=m("right",!0);return xn(n[i])<=kn(t[i])&&xn(t[r])<=kn(n[r])}(),t=!i&&(!L()||w),o.state.is([G,rn])||I(u,$n,t||""),I(gn(u,l.focusableNodes||""),$,t?-1:""),g&&I(u,$,t?-1:0),i!==vn(u,St)&&(A(u,St,i),c(i?Rn:Cn,O)),i||document.activeElement!==u||(t=a.Slides.getAt(o.index))&&dn(t.slide),A(u,xt,r===n-1),A(u,kt,r===n+1))}function L(){var n=o.index;return n===r||l.cloneStatus&&n===t}var O={index:r,slideIndex:t,slide:u,container:x,isClone:w,mount:function(){w||(u.id=s.id+"-slide"+An(r+1),I(u,Z,p?"tabpanel":"group"),I(u,tt,h.slide),I(u,nn,b||On(h.slideLabel,[r+1,o.length]))),f(u,"click",R(c,Mn,O)),f(u,"keydown",R(c,Yn,O)),i([Dn,Un,V],E),i(Gn,k),v&&i(H,S)},destroy:function(){e=!0,n.destroy(),X(u,At),P(u,ut),I(u,"style",y),I(u,nn,b||"")},update:E,style:function(n,t,i){_(i&&x||u,n,t)},isWithin:function(n,t){return n=U(n-r),(n=w||!l.rewind&&!o.is(Pt)?n:Y(n,o.length-n))<=t}};return O}var Ct=f+"-interval";var jt={passive:!1,capture:!0};var Nt={Spacebar:" ",Right:Hn,Left:Bn,Up:t,Down:n};function Tt(n){return n=C(n)?n:n.key,Nt[n]||n}var Gt="keydown";var Ft=f+"-lazy",Xt=Ft+"-srcset",Wt="["+Ft+"], ["+Xt+"]";var Yt=[" ","Enter"];var Ut=Object.freeze({__proto__:null,Media:function(r,n,o){var u=r.state,t=o.breakpoints||{},e=o.reducedMotion||{},i=zn(),c=[];function f(n){n&&i.destroy()}function a(n,t){t=matchMedia(t);i.bind(t,"change",s),c.push([n,t])}function s(){var n=u.is(7),t=o.direction,i=c.reduce(function(n,t){return d(n,t[1].matches?t[0]:{})},{});sn(o),l(i),o.destroy?r.destroy("completely"===o.destroy):n?(f(!0),r.mount()):t!==o.direction&&r.refresh()}function l(n,t,i){d(o,n),t&&d(Object.getPrototypeOf(o),n),!i&&u.is(1)||r.emit(K,o)}return{setup:function(){var i="min"===o.mediaQuery;E(t).sort(function(n,t){return i?+n-+t:+t-+n}).forEach(function(n){a(t[n],"("+(i?"min":"max")+"-width:"+n+"px)")}),a(e,v),s()},destroy:f,reduce:function(n){matchMedia(v).matches&&(n?d(o,e):sn(o,E(e)))},set:l}},Direction:function(n,t,o){return{resolve:function(n,t,i){var r="rtl"!==(i=i||o.direction)||t?i===Jn?0:-1:1;return l[n]&&l[n][r]||n.replace(/width|left|right/i,function(n,t){n=l[n.toLowerCase()][r]||n;return 0<t?n.charAt(0).toUpperCase()+n.slice(1):n})},orient:function(n){return n*("rtl"===o.direction?1:-1)}}},Elements:function(n,t,i){var r,o,u,e=Q(n),c=e.on,f=e.bind,a=n.root,s=i.i18n,l={},d=[],v=[],h=[];function p(){r=y("."+ct),o=fn(r,"."+ft),bn(r&&o,"A track/list element is missing."),k(d,S(o,"."+at+":not(."+st+")")),w({arrows:dt,pagination:gt,prev:ht,next:pt,bar:yt,toggle:bt},function(n,t){l[t]=y("."+n)}),an(l,{root:a,track:r,list:o,slides:d});var n=a.id||function(n){return""+n+An(_n[n]=(_n[n]||0)+1)}(yn),t=i.role;a.id=n,r.id=r.id||n+"-track",o.id=o.id||n+"-list",!z(a,Z)&&"SECTION"!==a.tagName&&t&&I(a,Z,t),I(a,tt,s.carousel),I(o,Z,"presentation"),m()}function g(n){var t=ut.concat("style");D(d),X(a,v),X(r,h),P([r,o],t),P(a,n?t:["style",tt])}function m(){X(a,v),X(r,h),v=b(et),h=b(ct),M(a,v),M(r,h),I(a,nn,i.label),I(a,Zn,i.labelledby)}function y(n){n=pn(a,n);return n&&function(n,t){if(x(n.closest))return n.closest(t);for(var i=n;i&&1===i.nodeType&&!cn(i,t);)i=i.parentElement;return i}(n,"."+et)===a?n:void 0}function b(n){return[n+"--"+i.type,n+"--"+i.direction,i.drag&&n+"--draggable",i.isNavigation&&n+"--nav",n===et&&tn]}return an(l,{setup:p,mount:function(){c(J,g),c(J,p),c(K,m),f(document,_t+" keydown",function(n){u="keydown"===n.type},{capture:!0}),f(a,"focusin",function(){A(a,Lt,!!u)})},destroy:g})},Slides:function(r,o,u){var n=Q(r),t=n.on,e=n.emit,c=n.bind,f=(n=o.Elements).slides,a=n.list,s=[];function i(){f.forEach(function(n,t){d(n,t,-1)})}function l(){h(function(n){n.destroy()}),D(s)}function d(n,t,i){t=Rt(r,t,i,n);t.mount(),s.push(t),s.sort(function(n,t){return n.index-t.index})}function v(n){return n?p(function(n){return!n.isClone}):s}function h(n,t){v(t).forEach(n)}function p(t){return s.filter(x(t)?t:function(n){return C(t)?cn(n.slide,t):b(y(t),n.index)})}return{mount:function(){i(),t(J,l),t(J,i)},destroy:l,update:function(){h(function(n){n.update()})},register:d,get:v,getIn:function(n){var t=o.Controller,i=t.toIndex(n),r=t.hasFocus()?1:u.perPage;return p(function(n){return En(n.index,i,i+r-1)})},getAt:function(n){return p(n)[0]},add:function(n,o){g(n,function(n){var t,i,r;m(n=C(n)?hn(n):n)&&((t=f[o])?O(n,t):L(a,n),M(n,u.classes.slide),t=n,i=R(e,jn),t=gn(t,"img"),(r=t.length)?t.forEach(function(n){c(n,"load error",function(){--r||i()})}):i())}),e(J)},remove:function(n){T(p(n).map(function(n){return n.slide})),e(J)},forEach:h,filter:p,style:function(t,i,r){h(function(n){n.style(t,i,r)})},getLength:function(n){return(n?f:s).length},isEnough:function(){return s.length>u.perPage}}},Layout:function(t,n,i){var r,o,u,e=(a=Q(t)).on,c=a.bind,f=a.emit,a=n.Slides,s=n.Direction.resolve,l=(n=n.Elements).root,d=n.track,v=n.list,h=a.getAt,p=a.style;function g(){r=i.direction===Jn,_(l,"maxWidth",W(i.width)),_(d,s("paddingLeft"),y(!1)),_(d,s("paddingRight"),y(!0)),m(!0)}function m(n){var t=N(l);!n&&o.width===t.width&&o.height===t.height||(_(d,"height",function(){var n="";r&&(bn(n=b(),"height or heightRatio is missing."),n="calc("+n+" - "+y(!1)+" - "+y(!0)+")");return n}()),p(s("marginRight"),W(i.gap)),p("width",i.autoWidth?null:W(i.fixedWidth)||(r?"":w())),p("height",W(i.fixedHeight)||(r?i.autoHeight?null:w():b()),!0),o=t,f(Nn),u!==(u=O())&&(A(l,Ot,u),f("overflow",u)))}function y(n){var t=i.padding,n=s(n?"right":"left");return t&&W(t[n]||(un(t)?0:t))||"0px"}function b(){return W(i.height||N(v).width*i.heightRatio)}function w(){var n=W(i.gap);return"calc((100%"+(n&&" + "+n)+")/"+(i.perPage||1)+(n&&" - "+n)+")"}function x(){return N(v)[s("width")]}function k(n,t){n=h(n||0);return n?N(n.slide)[s("width")]+(t?0:L()):0}function S(n,t){var i,n=h(n);return n?(n=N(n.slide)[s("right")],i=N(v)[s("left")],U(n-i)+(t?0:L())):0}function E(n){return S(t.length-1)-S(0)+k(0,n)}function L(){var n=h(0);return n&&parseFloat(_(n.slide,s("marginRight")))||0}function O(){return t.is(It)||E(!0)>x()}return{mount:function(){var n,t,i;g(),c(window,"resize load",(n=R(f,jn),i=qn(t||0,n,null,1),function(){i.isPaused()&&i.start()})),e([K,J],g),e(jn,m)},resize:m,listSize:x,slideSize:k,sliderSize:E,totalSize:S,getPadding:function(n){return parseFloat(_(d,s("padding"+(n?"Right":"Left"))))||0},isOverflow:O}},Clones:function(c,i,f){var t,r=Q(c),n=r.on,a=i.Elements,s=i.Slides,o=i.Direction.resolve,l=[];function u(){if(n(J,d),n([K,jn],v),t=h()){var o=t,u=s.get().slice(),e=u.length;if(e){for(;u.length<o;)k(u,u);k(u.slice(-o),u.slice(0,o)).forEach(function(n,t){var i=t<o,r=function(n,t){n=n.cloneNode(!0);return M(n,f.classes.clone),n.id=c.root.id+"-clone"+An(t+1),n}(n.slide,t);i?O(r,u[0].slide):L(a.list,r),k(l,r),s.register(r,t-o+(i?0:e),n.index)})}i.Layout.resize(!0)}}function d(){e(),u()}function e(){T(l),D(l),r.destroy()}function v(){var n=h();t!==n&&(t<n||!n)&&r.emit(J)}function h(){var n,t=f.clones;return c.is(Pt)?en(t)&&(t=(n=f[o("fixedWidth")]&&i.Layout.slideSize(0))&&kn(N(a.track)[o("width")]/n)||f[o("autoWidth")]&&c.length||2*f.perPage):t=0,t}return{mount:u,destroy:e}},Move:function(r,c,o){var e,n=Q(r),t=n.on,f=n.emit,a=r.state.set,u=(n=c.Layout).slideSize,i=n.getPadding,s=n.totalSize,l=n.listSize,d=n.sliderSize,v=(n=c.Direction).resolve,h=n.orient,p=(n=c.Elements).list,g=n.track;function m(){c.Controller.isBusy()||(c.Scroll.cancel(),y(r.index),c.Slides.update())}function y(n){b(S(n,!0))}function b(n,t){r.is(It)||(t=t?n:function(n){{var t,i;r.is(Pt)&&(t=k(n),i=t>c.Controller.getEnd(),(t<0||i)&&(n=w(n,i)))}return n}(n),_(p,"transform","translate"+v("X")+"("+t+"px)"),n!==t&&f(Un))}function w(n,t){var i=n-L(t),r=d();return n-=h(r*(kn(U(i)/r)||1))*(t?1:-1)}function x(){b(E(),!0),e.cancel()}function k(n){for(var t=c.Slides.get(),i=0,r=1/0,o=0;o<t.length;o++){var u=t[o].index,e=U(S(u,!0)-n);if(!(e<=r))break;r=e,i=u}return i}function S(n,t){var i=h(s(n-1)-(n=n,"center"===(i=o.focus)?(l()-u(n,!0))/2:+i*u(n)||0));return t?(n=i,n=o.trimSpace&&r.is(Mt)?q(n,0,h(d(!0)-l())):n):i}function E(){var n=v("left");return N(p)[n]-N(g)[n]+h(i(!1))}function L(n){return S(n?c.Controller.getEnd():0,!!o.trimSpace)}return{mount:function(){e=c.Transition,t([B,Nn,K,J],m)},move:function(n,t,i,r){var o,u;n!==t&&(o=i<n,u=h(w(E(),o)),o?0<=u:u<=p[v("scrollWidth")]-N(g)[v("width")])&&(x(),b(w(E(),i<n),!0)),a(G),f(H,t,i,n),e.start(t,function(){a(3),f(Dn,t,i,n),r&&r()})},jump:y,translate:b,shift:w,cancel:x,toIndex:k,toPosition:S,getPosition:E,getLimit:L,exceededLimit:function(n,t){t=en(t)?E():t;var i=!0!==n&&h(t)<h(L(!1)),n=!1!==n&&h(t)>h(L(!0));return i||n},reposition:m}},Controller:function(o,u,e){var c,f,a,s,n=Q(o),t=n.on,i=n.emit,l=u.Move,d=l.getPosition,r=l.getLimit,v=l.toPosition,h=(n=u.Slides).isEnough,p=n.getLength,g=e.omitEnd,m=o.is(Pt),y=o.is(Mt),b=R(L,!1),w=R(L,!0),x=e.start||0,k=x;function S(){f=p(!0),a=e.perMove,s=e.perPage,c=_();var n=q(x,0,g?c:f-1);n!==x&&(x=n,l.reposition())}function E(){c!==_()&&i("ei")}function L(n,t){var i=a||(P()?1:s),i=O(x+i*(n?-1:1),x,!(a||P()));return-1===i&&y&&!Sn(d(),r(!n),1)?n?0:c:t?i:A(i)}function O(n,t,i){var r;return h()||P()?((r=function(n){if(y&&"move"===e.trimSpace&&n!==x)for(var t=d();t===v(n,!0)&&En(n,0,o.length-1,!e.rewind);)n<x?--n:++n;return n}(n))!==n&&(t=n,n=r,i=!1),n<0||c<n?n=a||!En(0,n,t,!0)&&!En(c,t,n,!0)?m?i?n<0?-(f%s||s):f:n:e.rewind?n<0?c:0:-1:z(D(n)):i&&n!==t&&(n=z(D(t)+(n<t?-1:1)))):n=-1,n}function A(n){return m?(n+f)%f||0:n}function _(){for(var n=f-(P()||m&&a?1:s);g&&0<n--;)if(v(f-1,!0)!==v(n,!0)){n++;break}return q(n,0,f-1)}function z(n){return q(P()?n:s*n,0,c)}function D(n){return P()?Y(n,c):xn((c<=n?f-1:n)/s)}function M(n){n!==x&&(k=x,x=n)}function P(){return!en(e.focus)||e.isNavigation}function I(){return o.state.is([G,rn])&&!!e.waitForTransition}return{mount:function(){S(),t([K,J,"ei"],S),t(Nn,E)},go:function(n,t,i){var r;I()||-1<(r=A(n=function(n){var t=x;{var i,r;C(n)?(r=n.match(/([+\-<>])(\d+)?/)||[],i=r[1],r=r[2],"+"===i||"-"===i?t=O(x+ +(""+i+(+r||1)),x):">"===i?t=r?z(+r):b(!0):"<"===i&&(t=w(!0))):t=m?n:q(n,0,c)}return t}(n)))&&(t||r!==x)&&(M(r),l.move(n,r,k,i))},scroll:function(n,t,i,r){u.Scroll.scroll(n,t,i,function(){var n=A(l.toIndex(d()));M(g?Y(n,c):n),r&&r()})},getNext:b,getPrev:w,getAdjacent:L,getEnd:_,setIndex:M,getIndex:function(n){return n?k:x},toIndex:z,toPage:D,toDest:function(n){return n=l.toIndex(n),y?q(n,0,c):n},hasFocus:P,isBusy:I}},Arrows:function(o,n,t){var i,r,u=Q(o),e=u.on,c=u.bind,f=u.emit,a=t.classes,s=t.i18n,l=n.Elements,d=n.Controller,v=l.arrows,h=l.track,p=v,g=l.prev,m=l.next,y={};function b(){var n=t.arrows;!n||g&&m||(p=v||j("div",a.arrows),g=S(!0),m=S(!1),i=!0,L(p,[g,m]),v||O(p,h)),g&&m&&(an(y,{prev:g,next:m}),ln(p,n?"":"none"),M(p,r=dt+"--"+t.direction),n&&(e([B,Dn,J,V,"ei"],E),c(m,"click",R(k,">")),c(g,"click",R(k,"<")),E(),I([g,m],Kn,h.id),f("arrows:mounted",g,m))),e(K,w)}function w(){x(),b()}function x(){u.destroy(),X(p,r),i?(T(v?[g,m]:p),g=m=null):P([g,m],ut)}function k(n){d.go(n,!0)}function S(n){return hn('<button class="'+a.arrow+" "+(n?a.prev:a.next)+'" type="button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40" width="40" height="40" focusable="false"><path d="'+(t.arrowPath||"m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z")+'"
4728></path
vendor: 10,971 bytes, line 4728
4728>')}function E(){var n,t,i,r;g&&m&&(r=o.index,n=d.getPrev(),t=d.getNext(),i=-1<n&&r<n?s.last:s.prev,r=-1<t&&t<r?s.first:s.next,g.disabled=n<0,m.disabled=t<0,I(g,nn,i),I(m,nn,r),f("arrows:updated",g,m,n,t))}return{arrows:y,mount:b,destroy:x,update:E}},Autoplay:function(n,t,i){var r,o,u=Q(n),e=u.on,c=u.bind,f=u.emit,a=qn(i.interval,n.go.bind(n,">"),function(n){var t=l.bar;t&&_(t,"width",100*n+"%"),f("autoplay:playing",n)}),s=a.isPaused,l=t.Elements,d=(u=t.Elements).root,v=u.toggle,h=i.autoplay,p="pause"===h;function g(){s()&&t.Slides.isEnough()&&(a.start(!i.resetProgress),o=r=p=!1,b(),f(Fn))}function m(n){p=!!(n=void 0===n?!0:n),b(),s()||(a.pause(),f(Xn))}function y(){p||(r||o?m(!1):g())}function b(){v&&(A(v,tn,!p),I(v,nn,i.i18n[p?"play":"pause"]))}function w(n){n=t.Slides.getAt(n);a.set(n&&+z(n.slide,Ct)||i.interval)}return{mount:function(){h&&(i.pauseOnHover&&c(d,"mouseenter mouseleave",function(n){r="mouseenter"===n.type,y()}),i.pauseOnFocus&&c(d,"focusin focusout",function(n){o="focusin"===n.type,y()}),v&&c(v,"click",function(){p?g():m(!0)}),e([H,Tn,J],a.rewind),e(H,w),v&&I(v,Kn,l.track.id),p||g(),b())},destroy:a.cancel,play:g,pause:m,isPaused:s}},Cover:function(n,t,i){var r=Q(n).on;function o(i){t.Slides.forEach(function(n){var t=fn(n.container||n.slide,"img");t&&t.src&&u(i,t,n)})}function u(n,t,i){i.style("background",n?'center/cover no-repeat url("'+t.src+'")':"",!0),ln(t,n?"none":"")}return{mount:function(){i.cover&&(r(Wn,R(u,!0)),r([B,K,J],R(o,!0)))},destroy:R(o,!1)}},Scroll:function(n,c,u){var f,a,t=Q(n),i=t.on,s=t.emit,l=n.state.set,d=c.Move,v=d.getPosition,e=d.getLimit,h=d.exceededLimit,p=d.translate,g=n.is(Mt),m=1;function y(n,t,i,r,o){var u,e=v(),i=(x(),!i||g&&h()||(i=c.Layout.sliderSize(),u=Ln(n)*i*xn(U(n)/i)||0,n=d.toPosition(c.Controller.toDest(n%i))+u),Sn(e,n,1));m=1,t=i?0:t||wn(U(n-e)/1.5,800),a=r,f=qn(t,b,R(w,e,n,o),1),l(rn),s(Tn),f.start()}function b(){l(3),a&&a(),s(V)}function w(n,t,i,r){var o=v(),r=(n+(t-n)*(t=r,(n=u.easingFunc)?n(t):1-Math.pow(1-t,4))-o)*m;p(o+r),g&&!i&&h()&&(m*=.6,U(r)<10&&y(e(h(!0)),600,!1,a,!0))}function x(){f&&f.cancel()}function r(){f&&!f.isPaused()&&(x(),b())}return{mount:function(){i(H,x),i([K,J],r)},destroy:x,scroll:y,cancel:r}},Drag:function(e,o,c){var f,t,u,a,s,l,d,v,n=Q(e),i=n.on,h=n.emit,p=n.bind,g=n.unbind,m=e.state,y=o.Move,b=o.Scroll,w=o.Controller,x=o.Elements.track,k=o.Media.reduce,r=(n=o.Direction).resolve,S=n.orient,E=y.getPosition,L=y.exceededLimit,O=!1;function j(){var n=c.drag;C(!n),a="free"===n}function N(n){var t,i,r;l=!1,d||(t=R(n),i=n.target,r=c.noDrag,cn(i,"."+mt+", ."+vt)||r&&cn(i,r)||!t&&n.button||(w.isBusy()?F(n,!0):(v=t?x:window,s=m.is([G,rn]),u=null,p(v,zt,A,jt),p(v,Dt,_,jt),y.cancel(),b.cancel(),z(n))))}function A(n){var t,i,r,o,u;m.is(6)||(m.set(6),h("drag")),n.cancelable&&(s?(y.translate(f+D(n)/(O&&e.is(Mt)?5:1)),u=200<M(n),t=O!==(O=L()),(u||t)&&z(n),l=!0,h("dragging"),F(n)):U(D(u=n))>U(D(u,!0))&&(t=n,i=c.dragMinThreshold,r=un(i),o=r&&i.mouse||0,r=(r?i.touch:+i)||10,s=U(D(t))>(R(t)?r:o),F(n)))}function _(n){var t,i,r;m.is(6)&&(m.set(3),h("dragged")),s&&(i=function(n){return E()+Ln(n)*Y(U(n)*(c.flickPower||600),a?1/0:o.Layout.listSize()*(c.flickMaxPages||1))}(t=function(n){if(e.is(Pt)||!O){var t=M(n);if(t&&t<200)return D(n)/t}return 0}(t=n)),r=c.rewind&&c.rewindByDrag,k(!1),a?w.scroll(i,0,c.snap):e.is(It)?w.go(S(Ln(t))<0?r?"<":"-":r?">":"+"):e.is(Mt)&&O&&r?w.go(L(!0)?">":"<"):w.go(w.toDest(i),!0),k(!0),F(n)),g(v,zt,A),g(v,Dt,_),s=!1}function T(n){!d&&l&&F(n,!0)}function z(n){u=t,t=n,f=E()}function D(n,t){return I(n,t)-I(P(n),t)}function M(n){return mn(n)-mn(P(n))}function P(n){return t===n&&u||t}function I(n,t){return(R(n)?n.changedTouches[0]:n)["page"+r(t?"Y":"X")]}function R(n){return"undefined"!=typeof TouchEvent&&n instanceof TouchEvent}function C(n){d=n}return{mount:function(){p(x,zt,on,jt),p(x,Dt,on,jt),p(x,_t,N,jt),p(x,"click",T,{capture:!0}),p(x,"dragstart",F),i([B,K],j)},disable:C,isDragging:function(){return s}}},Keyboard:function(t,n,i){var r,o,u=Q(t),e=u.on,c=u.bind,f=u.unbind,a=t.root,s=n.Direction.resolve;function l(){var n=i.keyboard;n&&(r="global"===n?window:a,c(r,Gt,h))}function d(){f(r,Gt)}function v(){var n=o;o=!0,p(function(){o=n})}function h(n){o||((n=Tt(n))===s(Bn)?t.go("<"):n===s(Hn)&&t.go(">"))}return{mount:function(){l(),e(K,d),e(K,l),e(H,v)},destroy:d,disable:function(n){o=n}}},LazyLoad:function(i,n,o){var t=Q(i),r=t.on,u=t.off,e=t.bind,c=t.emit,f="sequential"===o.lazyLoad,a=[Dn,V],s=[];function l(){D(s),n.Slides.forEach(function(r){gn(r.slide,Wt).forEach(function(n){var t=z(n,Ft),i=z(n,Xt);t===n.src&&i===n.srcset||(t=o.classes.spinner,t=fn(i=n.parentElement,"."+t)||j("span",t,i),s.push([n,r,t]),n.src||ln(n,"none"))})}),(f?p:(u(a),r(a,d),d))()}function d(){(s=s.filter(function(n){var t=o.perPage*((o.preloadPages||1)+1)-1;return!n[1].isWithin(i.index,t)||v(n)})).length||u(a)}function v(n){var t=n[0];M(n[1].slide,Et),e(t,"load error",R(h,n)),I(t,"src",z(t,Ft)),I(t,"srcset",z(t,Xt)),P(t,Ft),P(t,Xt)}function h(n,t){var i=n[0],r=n[1];X(r.slide,Et),"error"!==t.type&&(T(n[2]),ln(i,""),c(Wn,i,r),c(jn)),f&&p()}function p(){s.length&&v(s.shift())}return{mount:function(){o.lazyLoad&&(l(),r(J,l))},destroy:R(D,s),check:d}},Pagination:function(l,n,d){var v,h,t=Q(l),p=t.on,g=t.emit,m=t.bind,y=n.Slides,b=n.Elements,w=n.Controller,x=w.hasFocus,r=w.getIndex,e=w.go,c=n.Direction.resolve,k=b.pagination,S=[];function E(){v&&(T(k?o(v.children):v),X(v,h),D(S),v=null),t.destroy()}function L(n){e(">"+n,!0)}function O(n,t){var i=S.length,r=Tt(t),o=A(),u=-1,o=(r===c(Hn,!1,o)?u=++n%i:r===c(Bn,!1,o)?u=(--n+i)%i:"Home"===r?u=0:"End"===r&&(u=i-1),S[u]);o&&(dn(o.button),e(">"+u),F(t,!0))}function A(){return d.paginationDirection||d.direction}function _(n){return S[w.toPage(n)]}function z(){var n,t=_(r(!0)),i=_(r());t&&(X(n=t.button,tn),P(n,Qn),I(n,$,-1)),i&&(M(n=i.button,tn),I(n,Qn,!0),I(n,$,"")),g("pagination:updated",{list:v,items:S},t,i)}return{items:S,mount:function n(){E(),p([K,J,"ei"],n);var t=d.pagination;if(k&&ln(k,t?"":"none"),t){p([H,Tn,V],z);var t=l.length,i=d.classes,r=d.i18n,o=d.perPage,u=x()?w.getEnd()+1:kn(t/o);M(v=k||j("ul",i.pagination,b.track.parentElement),h=gt+"--"+A()),I(v,Z,"tablist"),I(v,nn,r.select),I(v,nt,A()===Jn?"vertical":"");for(var e=0;e<u;e++){var c=j("li",null,v),f=j("button",{class:i.page,type:"button"},c),a=y.getIn(e).map(function(n){return n.slide.id}),s=!x()&&1<o?r.pageX:r.slideX;m(f,"click",R(L,e)),d.paginationKeyboard&&m(f,"keydown",R(O,e)),I(c,Z,"presentation"),I(f,Z,"tab"),I(f,Kn,a.join(" ")),I(f,nn,On(s,e+1)),I(f,$,-1),S.push({li:c,button:f,page:e})}z(),g("pagination:mounted",{list:v,items:S},_(l.index))}},destroy:E,getAt:_,update:z}},Sync:function(i,n,t){var r=t.isNavigation,o=t.slideFocus,u=[];function e(){var n,t;i.splides.forEach(function(n){n.isParent||(f(i,n.splide),f(n.splide,i))}),r&&(n=Q(i),(t=n.on)(Mn,s),t(Yn,l),t([B,K],a),u.push(n),n.emit(Gn,i.splides))}function c(){u.forEach(function(n){n.destroy()}),D(u)}function f(n,r){n=Q(n);n.on(H,function(n,t,i){r.go(r.is(Pt)?i:n)}),u.push(n)}function a(){I(n.Elements.list,nt,t.direction===Jn?"vertical":"")}function s(n){i.go(n.index)}function l(n,t){b(Yt,Tt(t))&&(s(n),F(t))}return{setup:R(n.Media.set,{slideFocus:en(o)?r:o},!0),mount:e,destroy:c,remount:function(){c(),e()}}},Wheel:function(e,c,f){var n=Q(e).bind,a=0;function t(n){var t,i,r,o,u;n.cancelable&&(t=(u=n.deltaY)<0,i=mn(n),r=f.wheelMinThreshold||0,o=f.wheelSleep||0,U(u)>r&&o<i-a&&(e.go(t?"<":">"),a=i),u=t,f.releaseWheel&&!e.state.is(G)&&-1===c.Controller.getAdjacent(u)||F(n))}return{mount:function(){f.wheel&&n(c.Elements.track,"wheel",t,jt)}}},Live:function(n,t,i){var r=Q(n).on,o=t.Elements.track,u=i.live&&!i.isNavigation,e=j("span",wt),c=qn(90,R(f,!1));function f(n){I(o,rt,n),n?(L(o,e),c.start()):(T(e),c.cancel())}function a(n){u&&I(o,it,n?"off":"polite")}return{mount:function(){u&&(a(!t.Autoplay.isPaused()),I(o,ot,!0),e.textContent="â¦",r(Fn,R(a,!0)),r(Xn,R(a,!1)),r([Dn,V],R(f,!0)))},disable:a,destroy:function(){P(o,[it,ot,rt]),T(e)}}}}),qt={type:"slide",role:"region",speed:400,perPage:1,cloneStatus:!0,arrows:!0,pagination:!0,paginationKeyboard:!0,interval:5e3,pauseOnHover:!0,pauseOnFocus:!0,resetProgress:!0,easing:"cubic-bezier(0.25, 1, 0.5, 1)",drag:!0,direction:"ltr",trimSpace:!0,focusableNodes:"a, button, textarea, input, select, iframe",live:!0,classes:{slide:at,clone:st,arrows:dt,arrow:vt,prev:ht,next:pt,pagination:gt,page:mt,spinner:i+"spinner"},i18n:{prev:"Previous slide",next:"Next slide",first:"Go to first slide",last:"Go to last slide",slideX:"Go to slide %s",pageX:"Go to page %s",play:"Start autoplay",pause:"Pause autoplay",carousel:"carousel",slide:"slide",select:"Select a slide to show",slideLabel:"%s of %s"},reducedMotion:{speed:0,rewindSpeed:0,autoplay:"pause"}};function Bt(n,t,i){var r=t.Slides;function o(){r.forEach(function(n){n.style("transform","translateX(-"+100*n.index+"%)")})}return{mount:function(){Q(n).on([B,J],o)},start:function(n,t){r.style("transition","opacity "+i.speed+"ms "+i.easing),p(t)},cancel:on}}function Ht(u,n,e){var c,f=n.Move,a=n.Controller,s=n.Scroll,t=n.Elements.list,l=R(_,t,"transition");function i(){l(""),s.cancel()}return{mount:function(){Q(u).bind(t,"transitionend",function(n){n.target===t&&c&&(i(),c())})},start:function(n,t){var i=f.toPosition(n,!0),r=f.getPosition(),o=function(n){var t=e.rewindSpeed;if(u.is(Mt)&&t){var i=a.getIndex(!0),r=a.getEnd();if(0===i&&r<=n||r<=i&&0===n)return t}return e.speed}(n);1<=U(i-r)&&1<=o?e.useScroll?s.scroll(i,o,!1,t):(l("transform "+o+"ms "+e.easing),f.translate(i,!0),c=t):(f.jump(n),t())},cancel:i}}t=function(){function i(n,t){this.event=Q(),this.Components={},this.state=s(1),this.splides=[],this.n={},this.t={};n=C(n)?pn(document,n):n;bn(n,n+" is invalid."),t=d({label:z(this.root=n,nn)||"",labelledby:z(n,Zn)||""},qt,i.defaults,t||{});try{d(t,JSON.parse(z(n,f)))}catch(n){bn(!1,"Invalid JSON")}this.n=Object.create(d({},t))}var n=i.prototype;return n.mount=function(n,t){var i=this,r=this.state,o=this.Components;return bn(r.is([1,7]),"Already mounted!"),r.set(1),this.i=o,this.r=t||this.r||(this.is(It)?Bt:Ht),this.t=n||this.t,w(an({},Ut,this.t,{Transition:this.r}),function(n,t){n=n(i,o,i.n);(o[t]=n).setup&&n.setup()}),w(o,function(n){n.mount&&n.mount()}),this.emit(B),M(this.root,"is-initialized"),r.set(3),this.emit("ready"),this},n.sync=function(n){return this.splides.push({splide:n}),n.splides.push({splide:this,isParent:!0}),this.state.is(3)&&(this.i.Sync.remount(),n.Components.Sync.remount()),this},n.go=function(n){return this.i.Controller.go(n),this},n.on=function(n,t){return this.event.on(n,t),this},n.off=function(n){return this.event.off(n),this},n.emit=function(n){var t;return(t=this.event).emit.apply(t,[n].concat(o(arguments,1))),this},n.add=function(n,t){return this.i.Slides.add(n,t),this},n.remove=function(n){return this.i.Slides.remove(n),this},n.is=function(n){return this.n.type===n},n.refresh=function(){return this.emit(J),this},n.destroy=function(t){void
vendor: 511 bytes, lines 4728-4729
4728.0===t&&(t=!0);var n=this.event,i=this.state;return i.is(1)?Q(this).on("ready",this.destroy.bind(this,t)):(w(this.i,function(n){n.destroy&&n.destroy(t)},!0),n.emit(a),n.destroy(),t&&D(this.splides),i.set(7)),this},Jt(i,[{key:"options",get:function(){return this.n},set:function(n){this.i.Media.set(n,!0,!0)}},{key:"length",get:function(){return this.i.Slides.getLength(!0)}},{key:"index",get:function(){return this.i.Controller.getIndex()}}]),i}();return t.defaults={},t.STATES=r,t},window.Splide=t(); 4729</script>
4729 4730<style> 4731 @keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0} 4732 4733 /* Custom additions from the splide.min.css but without the custom style */ 4734 .splide__pagination--ttb { 4735 position: absolute; 4736 display: inline-flex; 4737 flex-direction: column; 4738 top: 0; 4739 bottom: 0; 4740 right: 100%; 4741 } 4742 4743 /* Hide the pagination dots when the input device is a touch based input */ 4744 @media (pointer: coarse) or (max-width: 639px) { 4745 .splide__pagination { display: none } 4746 } 4747</style> 4748
4749<script> 4750 function r(n,t){for(var i=0;i<t.length;i++){var r=t[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(n,r.key,r)}}function Jt(n,t,i){t&&r(n.prototype,t),i&&r(n,i),Object.defineProperty(n,"prototype",{writable:!1})} 4751
vendor: 17,761 bytes, line 4751
4751var n,t;n=this,t=function(){"use strict";var v="(prefers-reduced-motion: reduce)",G=4,rn=5,r={CREATED:1,MOUNTED:2,IDLE:3,MOVING:G,SCROLLING:rn,DRAGGING:6,DESTROYED:7};function D(n){n.length=0}function o(n,t,i){return Array.prototype.slice.call(n,t,i)}function R(n){return n.bind.apply(n,[null].concat(o(arguments,1)))}function on(){}var p=setTimeout;function h(n){return requestAnimationFrame(n)}function u(n,t){return typeof t===n}function un(n){return!c(n)&&u("object",n)}var e=Array.isArray,x=R(u,"function"),C=R(u,"string"),en=R(u,"undefined");function c(n){return null===n}function m(n){try{return n instanceof(n.ownerDocument.defaultView||window).HTMLElement}catch(n){return!1}}function y(n){return e(n)?n:[n]}function g(n,t){y(n).forEach(t)}function b(n,t){return-1<n.indexOf(t)}function k(n,t){return n.push.apply(n,y(t)),n}function A(t,n,i){t&&g(n,function(n){n&&t.classList[i?"add":"remove"](n)})}function M(n,t){A(n,C(t)?t.split(" "):t,!0)}function L(n,t){g(t,n.appendChild.bind(n))}function O(n,i){g(n,function(n){var t=(i||n).parentNode;t&&t.insertBefore(n,i)})}function cn(n,t){return m(n)&&(n.msMatchesSelector||n.matches).call(n,t)}function S(n,t){n=n?o(n.children):[];return t?n.filter(function(n){return cn(n,t)}):n}function fn(n,t){return t?S(n,t)[0]:n.firstElementChild}var E=Object.keys;function w(t,i,n){t&&(n?E(t).reverse():E(t)).forEach(function(n){"__proto__"!==n&&i(t[n],n)})}function an(r){return o(arguments,1).forEach(function(i){w(i,function(n,t){r[t]=i[t]})}),r}function d(i){return o(arguments,1).forEach(function(n){w(n,function(n,t){e(n)?i[t]=n.slice():un(n)?i[t]=d({},un(i[t])?i[t]:{},n):i[t]=n})}),i}function sn(t,n){g(n||E(t),function(n){delete t[n]})}function P(n,i){g(n,function(t){g(i,function(n){t&&t.removeAttribute(n)})})}function I(i,t,r){un(t)?w(t,function(n,t){I(i,t,n)}):g(i,function(n){c(r)||""===r?P(n,t):n.setAttribute(t,String(r))})}function j(n,t,i){n=document.createElement(n);return t&&(C(t)?M:I)(n,t),i&&L(i,n),n}function _(n,t,i){if(en(i))return getComputedStyle(n)[t];c(i)||(n.style[t]=""+i)}function ln(n,t){_(n,"display",t)}function dn(n){n.setActive&&n.setActive()||n.focus({preventScroll:!0})}function z(n,t){return n.getAttribute(t)}function vn(n,t){return n&&n.classList.contains(t)}function N(n){return n.getBoundingClientRect()}function T(n){g(n,function(n){n&&n.parentNode&&n.parentNode.removeChild(n)})}function hn(n){return fn((new DOMParser).parseFromString(n,"text/html").body)}function F(n,t){n.preventDefault(),t&&(n.stopPropagation(),n.stopImmediatePropagation())}function pn(n,t){return n&&n.querySelector(t)}function gn(n,t){return t?o(n.querySelectorAll(t)):[]}function X(n,t){A(n,t,!1)}function mn(n){return n.timeStamp}function W(n){return C(n)?n:n?n+"px":""}var yn="splide",f="data-"+yn;function bn(n,t){if(!n)throw new Error("["+yn+"] "+(t||""))}var Y=Math.min,wn=Math.max,xn=Math.floor,kn=Math.ceil,U=Math.abs;function Sn(n,t,i){return U(n-t)<i}function En(n,t,i,r){var o=Y(t,i),t=wn(t,i);return r?o<n&&n<t:o<=n&&n<=t}function q(n,t,i){var r=Y(t,i),t=wn(t,i);return Y(wn(r,n),t)}function Ln(n){return(0<n)-(n<0)}function On(t,n){return g(n,function(n){t=t.replace("%s",""+n)}),t}function An(n){return n<10?"0"+n:""+n}var _n={};function zn(){var c=[];function i(n,i,r){g(n,function(t){t&&g(i,function(n){n.split(" ").forEach(function(n){n=n.split(".");r(t,n[0],n[1])})})})}return{bind:function(n,t,u,e){i(n,t,function(n,t,i){var r="addEventListener"in n,o=r?n.removeEventListener.bind(n,t,u,e):n.removeListener.bind(n,u);r?n.addEventListener(t,u,e):n.addListener(u),c.push([n,t,i,u,o])})},unbind:function(n,t,o){i(n,t,function(t,i,r){c=c.filter(function(n){return!!(n[0]!==t||n[1]!==i||n[2]!==r||o&&n[3]!==o)||(n[4](),!1)})})},dispatch:function(n,t,i){var r;return"function"==typeof CustomEvent?r=new CustomEvent(t,{bubbles:!0,detail:i}):(r=document.createEvent("CustomEvent")).initCustomEvent(t,!0,!1,i),n.dispatchEvent(r),r},destroy:function(){c.forEach(function(n){n[4]()}),D(c)}}}var B="mounted",H="move",Dn="moved",Mn="click",Pn="active",In="inactive",Rn="visible",Cn="hidden",J="refresh",K="updated",jn="resize",Nn="resized",Tn="scroll",V="scrolled",a="destroy",Gn="navigation:mounted",Fn="autoplay:play",Xn="autoplay:pause",Wn="lazyload:loaded",Yn="sk",Un="sh";function Q(n){var i=n?n.event.bus:document.createDocumentFragment(),r=zn();return n&&n.event.on(a,r.destroy),an(r,{bus:i,on:function(n,t){r.bind(i,y(n).join(" "),function(n){t.apply(t,e(n.detail)?n.detail:[])})},off:R(r.unbind,i),emit:function(n){r.dispatch(i,n,o(arguments,1))}})}function qn(t,n,i,r){var o,u,e=Date.now,c=0,f=!0,a=0;function s(){if(!f){if(c=t?Y((e()-o)/t,1):1,i&&i(c),1<=c&&(n(),o=e(),r&&++a>=r))return l();u=h(s)}}function l(){f=!0}function d(){u&&cancelAnimationFrame(u),f=!(u=c=0)}return{start:function(n){n||d(),o=e()-(n?c*t:0),f=!1,u=h(s)},rewind:function(){o=e(),c=0,i&&i(c)},pause:l,cancel:d,set:function(n){t=n},isPaused:function(){return f}}}function s(n){var t=n;return{set:function(n){t=n},is:function(n){return b(y(n),t)}}}var n="Arrow",Bn=n+"Left",Hn=n+"Right",t=n+"Up",n=n+"Down",Jn="ttb",l={width:["height"],left:["top","right"],right:["bottom","left"],x:["y"],X:["Y"],Y:["X"],ArrowLeft:[t,Hn],ArrowRight:[n,Bn]};var Z="role",$="tabindex",i="aria-",Kn=i+"controls",Vn=i+"current",Qn=i+"selected",nn=i+"label",Zn=i+"labelledby",$n=i+"hidden",nt=i+"orientation",tt=i+"roledescription",it=i+"live",rt=i+"busy",ot=i+"atomic",ut=[Z,$,"disabled",Kn,Vn,nn,Zn,$n,nt,tt],i=yn+"__",et=yn,ct=i+"track",ft=i+"list",at=i+"slide",st=at+"--clone",lt=at+"__container",dt=i+"arrows",vt=i+"arrow",ht=vt+"--prev",pt=vt+"--next",gt=i+"pagination",mt=gt+"__page",yt=i+"progress"+"__bar",bt=i+"toggle",wt=i+"sr",tn="is-active",xt="is-prev",kt="is-next",St="is-visible",Et="is-loading",Lt="is-focus-in",Ot="is-overflow",At=[tn,St,xt,kt,Et,Lt,Ot];var _t="touchstart mousedown",zt="touchmove mousemove",Dt="touchend touchcancel mouseup click";var Mt="slide",Pt="loop",It="fade";function Rt(o,r,t,u){var e,n=Q(o),i=n.on,c=n.emit,f=n.bind,a=o.Components,s=o.root,l=o.options,d=l.isNavigation,v=l.updateOnMove,h=l.i18n,p=l.pagination,g=l.slideFocus,m=a.Direction.resolve,y=z(u,"style"),b=z(u,nn),w=-1<t,x=fn(u,"."+lt);function k(){var n=o.splides.map(function(n){n=n.splide.Components.Slides.getAt(r);return n?n.slide.id:""}).join(" ");I(u,nn,On(h.slideX,(w?t:r)+1)),I(u,Kn,n),I(u,Z,g?"button":""),g&&P(u,tt)}function S(){e||E()}function E(){var n,t,i;e||(n=o.index,(i=L())!==vn(u,tn)&&(A(u,tn,i),I(u,Vn,d&&i||""),c(i?Pn:In,O)),i=function(){if(o.is(It))return L();var n=N(a.Elements.track),t=N(u),i=m("left",!0),r=m("right",!0);return xn(n[i])<=kn(t[i])&&xn(t[r])<=kn(n[r])}(),t=!i&&(!L()||w),o.state.is([G,rn])||I(u,$n,t||""),I(gn(u,l.focusableNodes||""),$,t?-1:""),g&&I(u,$,t?-1:0),i!==vn(u,St)&&(A(u,St,i),c(i?Rn:Cn,O)),i||document.activeElement!==u||(t=a.Slides.getAt(o.index))&&dn(t.slide),A(u,xt,r===n-1),A(u,kt,r===n+1))}function L(){var n=o.index;return n===r||l.cloneStatus&&n===t}var O={index:r,slideIndex:t,slide:u,container:x,isClone:w,mount:function(){w||(u.id=s.id+"-slide"+An(r+1),I(u,Z,p?"tabpanel":"group"),I(u,tt,h.slide),I(u,nn,b||On(h.slideLabel,[r+1,o.length]))),f(u,"click",R(c,Mn,O)),f(u,"keydown",R(c,Yn,O)),i([Dn,Un,V],E),i(Gn,k),v&&i(H,S)},destroy:function(){e=!0,n.destroy(),X(u,At),P(u,ut),I(u,"style",y),I(u,nn,b||"")},update:E,style:function(n,t,i){_(i&&x||u,n,t)},isWithin:function(n,t){return n=U(n-r),(n=w||!l.rewind&&!o.is(Pt)?n:Y(n,o.length-n))<=t}};return O}var Ct=f+"-interval";var jt={passive:!1,capture:!0};var Nt={Spacebar:" ",Right:Hn,Left:Bn,Up:t,Down:n};function Tt(n){return n=C(n)?n:n.key,Nt[n]||n}var Gt="keydown";var Ft=f+"-lazy",Xt=Ft+"-srcset",Wt="["+Ft+"], ["+Xt+"]";var Yt=[" ","Enter"];var Ut=Object.freeze({__proto__:null,Media:function(r,n,o){var u=r.state,t=o.breakpoints||{},e=o.reducedMotion||{},i=zn(),c=[];function f(n){n&&i.destroy()}function a(n,t){t=matchMedia(t);i.bind(t,"change",s),c.push([n,t])}function s(){var n=u.is(7),t=o.direction,i=c.reduce(function(n,t){return d(n,t[1].matches?t[0]:{})},{});sn(o),l(i),o.destroy?r.destroy("completely"===o.destroy):n?(f(!0),r.mount()):t!==o.direction&&r.refresh()}function l(n,t,i){d(o,n),t&&d(Object.getPrototypeOf(o),n),!i&&u.is(1)||r.emit(K,o)}return{setup:function(){var i="min"===o.mediaQuery;E(t).sort(function(n,t){return i?+n-+t:+t-+n}).forEach(function(n){a(t[n],"("+(i?"min":"max")+"-width:"+n+"px)")}),a(e,v),s()},destroy:f,reduce:function(n){matchMedia(v).matches&&(n?d(o,e):sn(o,E(e)))},set:l}},Direction:function(n,t,o){return{resolve:function(n,t,i){var r="rtl"!==(i=i||o.direction)||t?i===Jn?0:-1:1;return l[n]&&l[n][r]||n.replace(/width|left|right/i,function(n,t){n=l[n.toLowerCase()][r]||n;return 0<t?n.charAt(0).toUpperCase()+n.slice(1):n})},orient:function(n){return n*("rtl"===o.direction?1:-1)}}},Elements:function(n,t,i){var r,o,u,e=Q(n),c=e.on,f=e.bind,a=n.root,s=i.i18n,l={},d=[],v=[],h=[];function p(){r=y("."+ct),o=fn(r,"."+ft),bn(r&&o,"A track/list element is missing."),k(d,S(o,"."+at+":not(."+st+")")),w({arrows:dt,pagination:gt,prev:ht,next:pt,bar:yt,toggle:bt},function(n,t){l[t]=y("."+n)}),an(l,{root:a,track:r,list:o,slides:d});var n=a.id||function(n){return""+n+An(_n[n]=(_n[n]||0)+1)}(yn),t=i.role;a.id=n,r.id=r.id||n+"-track",o.id=o.id||n+"-list",!z(a,Z)&&"SECTION"!==a.tagName&&t&&I(a,Z,t),I(a,tt,s.carousel),I(o,Z,"presentation"),m()}function g(n){var t=ut.concat("style");D(d),X(a,v),X(r,h),P([r,o],t),P(a,n?t:["style",tt])}function m(){X(a,v),X(r,h),v=b(et),h=b(ct),M(a,v),M(r,h),I(a,nn,i.label),I(a,Zn,i.labelledby)}function y(n){n=pn(a,n);return n&&function(n,t){if(x(n.closest))return n.closest(t);for(var i=n;i&&1===i.nodeType&&!cn(i,t);)i=i.parentElement;return i}(n,"."+et)===a?n:void 0}function b(n){return[n+"--"+i.type,n+"--"+i.direction,i.drag&&n+"--draggable",i.isNavigation&&n+"--nav",n===et&&tn]}return an(l,{setup:p,mount:function(){c(J,g),c(J,p),c(K,m),f(document,_t+" keydown",function(n){u="keydown"===n.type},{capture:!0}),f(a,"focusin",function(){A(a,Lt,!!u)})},destroy:g})},Slides:function(r,o,u){var n=Q(r),t=n.on,e=n.emit,c=n.bind,f=(n=o.Elements).slides,a=n.list,s=[];function i(){f.forEach(function(n,t){d(n,t,-1)})}function l(){h(function(n){n.destroy()}),D(s)}function d(n,t,i){t=Rt(r,t,i,n);t.mount(),s.push(t),s.sort(function(n,t){return n.index-t.index})}function v(n){return n?p(function(n){return!n.isClone}):s}function h(n,t){v(t).forEach(n)}function p(t){return s.filter(x(t)?t:function(n){return C(t)?cn(n.slide,t):b(y(t),n.index)})}return{mount:function(){i(),t(J,l),t(J,i)},destroy:l,update:function(){h(function(n){n.update()})},register:d,get:v,getIn:function(n){var t=o.Controller,i=t.toIndex(n),r=t.hasFocus()?1:u.perPage;return p(function(n){return En(n.index,i,i+r-1)})},getAt:function(n){return p(n)[0]},add:function(n,o){g(n,function(n){var t,i,r;m(n=C(n)?hn(n):n)&&((t=f[o])?O(n,t):L(a,n),M(n,u.classes.slide),t=n,i=R(e,jn),t=gn(t,"img"),(r=t.length)?t.forEach(function(n){c(n,"load error",function(){--r||i()})}):i())}),e(J)},remove:function(n){T(p(n).map(function(n){return n.slide})),e(J)},forEach:h,filter:p,style:function(t,i,r){h(function(n){n.style(t,i,r)})},getLength:function(n){return(n?f:s).length},isEnough:function(){return s.length>u.perPage}}},Layout:function(t,n,i){var r,o,u,e=(a=Q(t)).on,c=a.bind,f=a.emit,a=n.Slides,s=n.Direction.resolve,l=(n=n.Elements).root,d=n.track,v=n.list,h=a.getAt,p=a.style;function g(){r=i.direction===Jn,_(l,"maxWidth",W(i.width)),_(d,s("paddingLeft"),y(!1)),_(d,s("paddingRight"),y(!0)),m(!0)}function m(n){var t=N(l);!n&&o.width===t.width&&o.height===t.height||(_(d,"height",function(){var n="";r&&(bn(n=b(),"height or heightRatio is missing."),n="calc("+n+" - "+y(!1)+" - "+y(!0)+")");return n}()),p(s("marginRight"),W(i.gap)),p("width",i.autoWidth?null:W(i.fixedWidth)||(r?"":w())),p("height",W(i.fixedHeight)||(r?i.autoHeight?null:w():b()),!0),o=t,f(Nn),u!==(u=O())&&(A(l,Ot,u),f("overflow",u)))}function y(n){var t=i.padding,n=s(n?"right":"left");return t&&W(t[n]||(un(t)?0:t))||"0px"}function b(){return W(i.height||N(v).width*i.heightRatio)}function w(){var n=W(i.gap);return"calc((100%"+(n&&" + "+n)+")/"+(i.perPage||1)+(n&&" - "+n)+")"}function x(){return N(v)[s("width")]}function k(n,t){n=h(n||0);return n?N(n.slide)[s("width")]+(t?0:L()):0}function S(n,t){var i,n=h(n);return n?(n=N(n.slide)[s("right")],i=N(v)[s("left")],U(n-i)+(t?0:L())):0}function E(n){return S(t.length-1)-S(0)+k(0,n)}function L(){var n=h(0);return n&&parseFloat(_(n.slide,s("marginRight")))||0}function O(){return t.is(It)||E(!0)>x()}return{mount:function(){var n,t,i;g(),c(window,"resize load",(n=R(f,jn),i=qn(t||0,n,null,1),function(){i.isPaused()&&i.start()})),e([K,J],g),e(jn,m)},resize:m,listSize:x,slideSize:k,sliderSize:E,totalSize:S,getPadding:function(n){return parseFloat(_(d,s("padding"+(n?"Right":"Left"))))||0},isOverflow:O}},Clones:function(c,i,f){var t,r=Q(c),n=r.on,a=i.Elements,s=i.Slides,o=i.Direction.resolve,l=[];function u(){if(n(J,d),n([K,jn],v),t=h()){var o=t,u=s.get().slice(),e=u.length;if(e){for(;u.length<o;)k(u,u);k(u.slice(-o),u.slice(0,o)).forEach(function(n,t){var i=t<o,r=function(n,t){n=n.cloneNode(!0);return M(n,f.classes.clone),n.id=c.root.id+"-clone"+An(t+1),n}(n.slide,t);i?O(r,u[0].slide):L(a.list,r),k(l,r),s.register(r,t-o+(i?0:e),n.index)})}i.Layout.resize(!0)}}function d(){e(),u()}function e(){T(l),D(l),r.destroy()}function v(){var n=h();t!==n&&(t<n||!n)&&r.emit(J)}function h(){var n,t=f.clones;return c.is(Pt)?en(t)&&(t=(n=f[o("fixedWidth")]&&i.Layout.slideSize(0))&&kn(N(a.track)[o("width")]/n)||f[o("autoWidth")]&&c.length||2*f.perPage):t=0,t}return{mount:u,destroy:e}},Move:function(r,c,o){var e,n=Q(r),t=n.on,f=n.emit,a=r.state.set,u=(n=c.Layout).slideSize,i=n.getPadding,s=n.totalSize,l=n.listSize,d=n.sliderSize,v=(n=c.Direction).resolve,h=n.orient,p=(n=c.Elements).list,g=n.track;function m(){c.Controller.isBusy()||(c.Scroll.cancel(),y(r.index),c.Slides.update())}function y(n){b(S(n,!0))}function b(n,t){r.is(It)||(t=t?n:function(n){{var t,i;r.is(Pt)&&(t=k(n),i=t>c.Controller.getEnd(),(t<0||i)&&(n=w(n,i)))}return n}(n),_(p,"transform","translate"+v("X")+"("+t+"px)"),n!==t&&f(Un))}function w(n,t){var i=n-L(t),r=d();return n-=h(r*(kn(U(i)/r)||1))*(t?1:-1)}function x(){b(E(),!0),e.cancel()}function k(n){for(var t=c.Slides.get(),i=0,r=1/0,o=0;o<t.length;o++){var u=t[o].index,e=U(S(u,!0)-n);if(!(e<=r))break;r=e,i=u}return i}function S(n,t){var i=h(s(n-1)-(n=n,"center"===(i=o.focus)?(l()-u(n,!0))/2:+i*u(n)||0));return t?(n=i,n=o.trimSpace&&r.is(Mt)?q(n,0,h(d(!0)-l())):n):i}function E(){var n=v("left");return N(p)[n]-N(g)[n]+h(i(!1))}function L(n){return S(n?c.Controller.getEnd():0,!!o.trimSpace)}return{mount:function(){e=c.Transition,t([B,Nn,K,J],m)},move:function(n,t,i,r){var o,u;n!==t&&(o=i<n,u=h(w(E(),o)),o?0<=u:u<=p[v("scrollWidth")]-N(g)[v("width")])&&(x(),b(w(E(),i<n),!0)),a(G),f(H,t,i,n),e.start(t,function(){a(3),f(Dn,t,i,n),r&&r()})},jump:y,translate:b,shift:w,cancel:x,toIndex:k,toPosition:S,getPosition:E,getLimit:L,exceededLimit:function(n,t){t=en(t)?E():t;var i=!0!==n&&h(t)<h(L(!1)),n=!1!==n&&h(t)>h(L(!0));return i||n},reposition:m}},Controller:function(o,u,e){var c,f,a,s,n=Q(o),t=n.on,i=n.emit,l=u.Move,d=l.getPosition,r=l.getLimit,v=l.toPosition,h=(n=u.Slides).isEnough,p=n.getLength,g=e.omitEnd,m=o.is(Pt),y=o.is(Mt),b=R(L,!1),w=R(L,!0),x=e.start||0,k=x;function S(){f=p(!0),a=e.perMove,s=e.perPage,c=_();var n=q(x,0,g?c:f-1);n!==x&&(x=n,l.reposition())}function E(){c!==_()&&i("ei")}function L(n,t){var i=a||(P()?1:s),i=O(x+i*(n?-1:1),x,!(a||P()));return-1===i&&y&&!Sn(d(),r(!n),1)?n?0:c:t?i:A(i)}function O(n,t,i){var r;return h()||P()?((r=function(n){if(y&&"move"===e.trimSpace&&n!==x)for(var t=d();t===v(n,!0)&&En(n,0,o.length-1,!e.rewind);)n<x?--n:++n;return n}(n))!==n&&(t=n,n=r,i=!1),n<0||c<n?n=a||!En(0,n,t,!0)&&!En(c,t,n,!0)?m?i?n<0?-(f%s||s):f:n:e.rewind?n<0?c:0:-1:z(D(n)):i&&n!==t&&(n=z(D(t)+(n<t?-1:1)))):n=-1,n}function A(n){return m?(n+f)%f||0:n}function _(){for(var n=f-(P()||m&&a?1:s);g&&0<n--;)if(v(f-1,!0)!==v(n,!0)){n++;break}return q(n,0,f-1)}function z(n){return q(P()?n:s*n,0,c)}function D(n){return P()?Y(n,c):xn((c<=n?f-1:n)/s)}function M(n){n!==x&&(k=x,x=n)}function P(){return!en(e.focus)||e.isNavigation}function I(){return o.state.is([G,rn])&&!!e.waitForTransition}return{mount:function(){S(),t([K,J,"ei"],S),t(Nn,E)},go:function(n,t,i){var r;I()||-1<(r=A(n=function(n){var t=x;{var i,r;C(n)?(r=n.match(/([+\-<>])(\d+)?/)||[],i=r[1],r=r[2],"+"===i||"-"===i?t=O(x+ +(""+i+(+r||1)),x):">"===i?t=r?z(+r):b(!0):"<"===i&&(t=w(!0))):t=m?n:q(n,0,c)}return t}(n)))&&(t||r!==x)&&(M(r),l.move(n,r,k,i))},scroll:function(n,t,i,r){u.Scroll.scroll(n,t,i,function(){var n=A(l.toIndex(d()));M(g?Y(n,c):n),r&&r()})},getNext:b,getPrev:w,getAdjacent:L,getEnd:_,setIndex:M,getIndex:function(n){return n?k:x},toIndex:z,toPage:D,toDest:function(n){return n=l.toIndex(n),y?q(n,0,c):n},hasFocus:P,isBusy:I}},Arrows:function(o,n,t){var i,r,u=Q(o),e=u.on,c=u.bind,f=u.emit,a=t.classes,s=t.i18n,l=n.Elements,d=n.Controller,v=l.arrows,h=l.track,p=v,g=l.prev,m=l.next,y={};function b(){var n=t.arrows;!n||g&&m||(p=v||j("div",a.arrows),g=S(!0),m=S(!1),i=!0,L(p,[g,m]),v||O(p,h)),g&&m&&(an(y,{prev:g,next:m}),ln(p,n?"":"none"),M(p,r=dt+"--"+t.direction),n&&(e([B,Dn,J,V,"ei"],E),c(m,"click",R(k,">")),c(g,"click",R(k,"<")),E(),I([g,m],Kn,h.id),f("arrows:mounted",g,m))),e(K,w)}function w(){x(),b()}function x(){u.destroy(),X(p,r),i?(T(v?[g,m]:p),g=m=null):P([g,m],ut)}function k(n){d.go(n,!0)}function S(n){return hn('<button class="'+a.arrow+" "+(n?a.prev:a.next)+'" type="button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40" width="40" height="40" focusable="false"><path d="'+(t.arrowPath||"m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z")+'"
4751></path
vendor: 11,640 bytes, line 4751
4751>')}function E(){var n,t,i,r;g&&m&&(r=o.index,n=d.getPrev(),t=d.getNext(),i=-1<n&&r<n?s.last:s.prev,r=-1<t&&t<r?s.first:s.next,g.disabled=n<0,m.disabled=t<0,I(g,nn,i),I(m,nn,r),f("arrows:updated",g,m,n,t))}return{arrows:y,mount:b,destroy:x,update:E}},Autoplay:function(n,t,i){var r,o,u=Q(n),e=u.on,c=u.bind,f=u.emit,a=qn(i.interval,n.go.bind(n,">"),function(n){var t=l.bar;t&&_(t,"width",100*n+"%"),f("autoplay:playing",n)}),s=a.isPaused,l=t.Elements,d=(u=t.Elements).root,v=u.toggle,h=i.autoplay,p="pause"===h;function g(){s()&&t.Slides.isEnough()&&(a.start(!i.resetProgress),o=r=p=!1,b(),f(Fn))}function m(n){p=!!(n=void 0===n?!0:n),b(),s()||(a.pause(),f(Xn))}function y(){p||(r||o?m(!1):g())}function b(){v&&(A(v,tn,!p),I(v,nn,i.i18n[p?"play":"pause"]))}function w(n){n=t.Slides.getAt(n);a.set(n&&+z(n.slide,Ct)||i.interval)}return{mount:function(){h&&(i.pauseOnHover&&c(d,"mouseenter mouseleave",function(n){r="mouseenter"===n.type,y()}),i.pauseOnFocus&&c(d,"focusin focusout",function(n){o="focusin"===n.type,y()}),v&&c(v,"click",function(){p?g():m(!0)}),e([H,Tn,J],a.rewind),e(H,w),v&&I(v,Kn,l.track.id),p||g(),b())},destroy:a.cancel,play:g,pause:m,isPaused:s}},Cover:function(n,t,i){var r=Q(n).on;function o(i){t.Slides.forEach(function(n){var t=fn(n.container||n.slide,"img");t&&t.src&&u(i,t,n)})}function u(n,t,i){i.style("background",n?'center/cover no-repeat url("'+t.src+'")':"",!0),ln(t,n?"none":"")}return{mount:function(){i.cover&&(r(Wn,R(u,!0)),r([B,K,J],R(o,!0)))},destroy:R(o,!1)}},Scroll:function(n,c,u){var f,a,t=Q(n),i=t.on,s=t.emit,l=n.state.set,d=c.Move,v=d.getPosition,e=d.getLimit,h=d.exceededLimit,p=d.translate,g=n.is(Mt),m=1;function y(n,t,i,r,o){var u,e=v(),i=(x(),!i||g&&h()||(i=c.Layout.sliderSize(),u=Ln(n)*i*xn(U(n)/i)||0,n=d.toPosition(c.Controller.toDest(n%i))+u),Sn(e,n,1));m=1,t=i?0:t||wn(U(n-e)/1.5,800),a=r,f=qn(t,b,R(w,e,n,o),1),l(rn),s(Tn),f.start()}function b(){l(3),a&&a(),s(V)}function w(n,t,i,r){var o=v(),r=(n+(t-n)*(t=r,(n=u.easingFunc)?n(t):1-Math.pow(1-t,4))-o)*m;p(o+r),g&&!i&&h()&&(m*=.6,U(r)<10&&y(e(h(!0)),600,!1,a,!0))}function x(){f&&f.cancel()}function r(){f&&!f.isPaused()&&(x(),b())}return{mount:function(){i(H,x),i([K,J],r)},destroy:x,scroll:y,cancel:r}},Drag:function(e,o,c){var f,t,u,a,s,l,d,v,n=Q(e),i=n.on,h=n.emit,p=n.bind,g=n.unbind,m=e.state,y=o.Move,b=o.Scroll,w=o.Controller,x=o.Elements.track,k=o.Media.reduce,r=(n=o.Direction).resolve,S=n.orient,E=y.getPosition,L=y.exceededLimit,O=!1;function j(){var n=c.drag;C(!n),a="free"===n}function N(n){var t,i,r;l=!1,d||(t=R(n),i=n.target,r=c.noDrag,cn(i,"."+mt+", ."+vt)||r&&cn(i,r)||!t&&n.button||(w.isBusy()?F(n,!0):(v=t?x:window,s=m.is([G,rn]),u=null,p(v,zt,A,jt),p(v,Dt,_,jt),y.cancel(),b.cancel(),z(n))))}function A(n){var t,i,r,o,u;m.is(6)||(m.set(6),h("drag")),n.cancelable&&(s?(y.translate(f+D(n)/(O&&e.is(Mt)?5:1)),u=200<M(n),t=O!==(O=L()),(u||t)&&z(n),l=!0,h("dragging"),F(n)):U(D(u=n))>U(D(u,!0))&&(t=n,i=c.dragMinThreshold,r=un(i),o=r&&i.mouse||0,r=(r?i.touch:+i)||10,s=U(D(t))>(R(t)?r:o),F(n)))}function _(n){var t,i,r;m.is(6)&&(m.set(3),h("dragged")),s&&(i=function(n){return E()+Ln(n)*Y(U(n)*(c.flickPower||600),a?1/0:o.Layout.listSize()*(c.flickMaxPages||1))}(t=function(n){if(e.is(Pt)||!O){var t=M(n);if(t&&t<200)return D(n)/t}return 0}(t=n)),r=c.rewind&&c.rewindByDrag,k(!1),a?w.scroll(i,0,c.snap):e.is(It)?w.go(S(Ln(t))<0?r?"<":"-":r?">":"+"):e.is(Mt)&&O&&r?w.go(L(!0)?">":"<"):w.go(w.toDest(i),!0),k(!0),F(n)),g(v,zt,A),g(v,Dt,_),s=!1}function T(n){!d&&l&&F(n,!0)}function z(n){u=t,t=n,f=E()}function D(n,t){return I(n,t)-I(P(n),t)}function M(n){return mn(n)-mn(P(n))}function P(n){return t===n&&u||t}function I(n,t){return(R(n)?n.changedTouches[0]:n)["page"+r(t?"Y":"X")]}function R(n){return"undefined"!=typeof TouchEvent&&n instanceof TouchEvent}function C(n){d=n}return{mount:function(){p(x,zt,on,jt),p(x,Dt,on,jt),p(x,_t,N,jt),p(x,"click",T,{capture:!0}),p(x,"dragstart",F),i([B,K],j)},disable:C,isDragging:function(){return s}}},Keyboard:function(t,n,i){var r,o,u=Q(t),e=u.on,c=u.bind,f=u.unbind,a=t.root,s=n.Direction.resolve;function l(){var n=i.keyboard;n&&(r="global"===n?window:a,c(r,Gt,h))}function d(){f(r,Gt)}function v(){var n=o;o=!0,p(function(){o=n})}function h(n){o||((n=Tt(n))===s(Bn)?t.go("<"):n===s(Hn)&&t.go(">"))}return{mount:function(){l(),e(K,d),e(K,l),e(H,v)},destroy:d,disable:function(n){o=n}}},LazyLoad:function(i,n,o){var t=Q(i),r=t.on,u=t.off,e=t.bind,c=t.emit,f="sequential"===o.lazyLoad,a=[Dn,V],s=[];function l(){D(s),n.Slides.forEach(function(r){gn(r.slide,Wt).forEach(function(n){var t=z(n,Ft),i=z(n,Xt);t===n.src&&i===n.srcset||(t=o.classes.spinner,t=fn(i=n.parentElement,"."+t)||j("span",t,i),s.push([n,r,t]),n.src||ln(n,"none"))})}),(f?p:(u(a),r(a,d),d))()}function d(){(s=s.filter(function(n){var t=o.perPage*((o.preloadPages||1)+1)-1;return!n[1].isWithin(i.index,t)||v(n)})).length||u(a)}function v(n){var t=n[0];M(n[1].slide,Et),e(t,"load error",R(h,n)),I(t,"src",z(t,Ft)),I(t,"srcset",z(t,Xt)),P(t,Ft),P(t,Xt)}function h(n,t){var i=n[0],r=n[1];X(r.slide,Et),"error"!==t.type&&(T(n[2]),ln(i,""),c(Wn,i,r),c(jn)),f&&p()}function p(){s.length&&v(s.shift())}return{mount:function(){o.lazyLoad&&(l(),r(J,l))},destroy:R(D,s),check:d}},Pagination:function(l,n,d){var v,h,t=Q(l),p=t.on,g=t.emit,m=t.bind,y=n.Slides,b=n.Elements,w=n.Controller,x=w.hasFocus,r=w.getIndex,e=w.go,c=n.Direction.resolve,k=b.pagination,S=[];function E(){v&&(T(k?o(v.children):v),X(v,h),D(S),v=null),t.destroy()}function L(n){e(">"+n,!0)}function O(n,t){var i=S.length,r=Tt(t),o=A(),u=-1,o=(r===c(Hn,!1,o)?u=++n%i:r===c(Bn,!1,o)?u=(--n+i)%i:"Home"===r?u=0:"End"===r&&(u=i-1),S[u]);o&&(dn(o.button),e(">"+u),F(t,!0))}function A(){return d.paginationDirection||d.direction}function _(n){return S[w.toPage(n)]}function z(){var n,t=_(r(!0)),i=_(r());t&&(X(n=t.button,tn),P(n,Qn),I(n,$,-1)),i&&(M(n=i.button,tn),I(n,Qn,!0),I(n,$,"")),g("pagination:updated",{list:v,items:S},t,i)}return{items:S,mount:function n(){E(),p([K,J,"ei"],n);var t=d.pagination;if(k&&ln(k,t?"":"none"),t){p([H,Tn,V],z);var t=l.length,i=d.classes,r=d.i18n,o=d.perPage,u=x()?w.getEnd()+1:kn(t/o);M(v=k||j("ul",i.pagination,b.track.parentElement),h=gt+"--"+A()),I(v,Z,"tablist"),I(v,nn,r.select),I(v,nt,A()===Jn?"vertical":"");for(var e=0;e<u;e++){var c=j("li",null,v),f=j("button",{class:i.page,type:"button"},c),a=y.getIn(e).map(function(n){return n.slide.id}),s=!x()&&1<o?r.pageX:r.slideX;m(f,"click",R(L,e)),d.paginationKeyboard&&m(f,"keydown",R(O,e)),I(c,Z,"presentation"),I(f,Z,"tab"),I(f,Kn,a.join(" ")),I(f,nn,On(s,e+1)),I(f,$,-1),S.push({li:c,button:f,page:e})}z(),g("pagination:mounted",{list:v,items:S},_(l.index))}},destroy:E,getAt:_,update:z}},Sync:function(i,n,t){var r=t.isNavigation,o=t.slideFocus,u=[];function e(){var n,t;i.splides.forEach(function(n){n.isParent||(f(i,n.splide),f(n.splide,i))}),r&&(n=Q(i),(t=n.on)(Mn,s),t(Yn,l),t([B,K],a),u.push(n),n.emit(Gn,i.splides))}function c(){u.forEach(function(n){n.destroy()}),D(u)}function f(n,r){n=Q(n);n.on(H,function(n,t,i){r.go(r.is(Pt)?i:n)}),u.push(n)}function a(){I(n.Elements.list,nt,t.direction===Jn?"vertical":"")}function s(n){i.go(n.index)}function l(n,t){b(Yt,Tt(t))&&(s(n),F(t))}return{setup:R(n.Media.set,{slideFocus:en(o)?r:o},!0),mount:e,destroy:c,remount:function(){c(),e()}}},Wheel:function(e,c,f){var n=Q(e).bind,a=0;function t(n){var t,i,r,o,u;n.cancelable&&(t=(u=n.deltaY)<0,i=mn(n),r=f.wheelMinThreshold||0,o=f.wheelSleep||0,U(u)>r&&o<i-a&&(e.go(t?"<":">"),a=i),u=t,f.releaseWheel&&!e.state.is(G)&&-1===c.Controller.getAdjacent(u)||F(n))}return{mount:function(){f.wheel&&n(c.Elements.track,"wheel",t,jt)}}},Live:function(n,t,i){var r=Q(n).on,o=t.Elements.track,u=i.live&&!i.isNavigation,e=j("span",wt),c=qn(90,R(f,!1));function f(n){I(o,rt,n),n?(L(o,e),c.start()):(T(e),c.cancel())}function a(n){u&&I(o,it,n?"off":"polite")}return{mount:function(){u&&(a(!t.Autoplay.isPaused()),I(o,ot,!0),e.textContent="â¦",r(Fn,R(a,!0)),r(Xn,R(a,!1)),r([Dn,V],R(f,!0)))},disable:a,destroy:function(){P(o,[it,ot,rt]),T(e)}}}}),qt={type:"slide",role:"region",speed:400,perPage:1,cloneStatus:!0,arrows:!0,pagination:!0,paginationKeyboard:!0,interval:5e3,pauseOnHover:!0,pauseOnFocus:!0,resetProgress:!0,easing:"cubic-bezier(0.25, 1, 0.5, 1)",drag:!0,direction:"ltr",trimSpace:!0,focusableNodes:"a, button, textarea, input, select, iframe",live:!0,classes:{slide:at,clone:st,arrows:dt,arrow:vt,prev:ht,next:pt,pagination:gt,page:mt,spinner:i+"spinner"},i18n:{prev:"Previous slide",next:"Next slide",first:"Go to first slide",last:"Go to last slide",slideX:"Go to slide %s",pageX:"Go to page %s",play:"Start autoplay",pause:"Pause autoplay",carousel:"carousel",slide:"slide",select:"Select a slide to show",slideLabel:"%s of %s"},reducedMotion:{speed:0,rewindSpeed:0,autoplay:"pause"}};function Bt(n,t,i){var r=t.Slides;function o(){r.forEach(function(n){n.style("transform","translateX(-"+100*n.index+"%)")})}return{mount:function(){Q(n).on([B,J],o)},start:function(n,t){r.style("transition","opacity "+i.speed+"ms "+i.easing),p(t)},cancel:on}}function Ht(u,n,e){var c,f=n.Move,a=n.Controller,s=n.Scroll,t=n.Elements.list,l=R(_,t,"transition");function i(){l(""),s.cancel()}return{mount:function(){Q(u).bind(t,"transitionend",function(n){n.target===t&&c&&(i(),c())})},start:function(n,t){var i=f.toPosition(n,!0),r=f.getPosition(),o=function(n){var t=e.rewindSpeed;if(u.is(Mt)&&t){var i=a.getIndex(!0),r=a.getEnd();if(0===i&&r<=n||r<=i&&0===n)return t}return e.speed}(n);1<=U(i-r)&&1<=o?e.useScroll?s.scroll(i,o,!1,t):(l("transform "+o+"ms "+e.easing),f.translate(i,!0),c=t):(f.jump(n),t())},cancel:i}}t=function(){function i(n,t){this.event=Q(),this.Components={},this.state=s(1),this.splides=[],this.n={},this.t={};n=C(n)?pn(document,n):n;bn(n,n+" is invalid."),t=d({label:z(this.root=n,nn)||"",labelledby:z(n,Zn)||""},qt,i.defaults,t||{});try{d(t,JSON.parse(z(n,f)))}catch(n){bn(!1,"Invalid JSON")}this.n=Object.create(d({},t))}var n=i.prototype;return n.mount=function(n,t){var i=this,r=this.state,o=this.Components;return bn(r.is([1,7]),"Already mounted!"),r.set(1),this.i=o,this.r=t||this.r||(this.is(It)?Bt:Ht),this.t=n||this.t,w(an({},Ut,this.t,{Transition:this.r}),function(n,t){n=n(i,o,i.n);(o[t]=n).setup&&n.setup()}),w(o,function(n){n.mount&&n.mount()}),this.emit(B),M(this.root,"is-initialized"),r.set(3),this.emit("ready"),this},n.sync=function(n){return this.splides.push({splide:n}),n.splides.push({splide:this,isParent:!0}),this.state.is(3)&&(this.i.Sync.remount(),n.Components.Sync.remount()),this},n.go=function(n){return this.i.Controller.go(n),this},n.on=function(n,t){return this.event.on(n,t),this},n.off=function(n){return this.event.off(n),this},n.emit=function(n){var t;return(t=this.event).emit.apply(t,[n].concat(o(arguments,1))),this},n.add=function(n,t){return this.i.Slides.add(n,t),this},n.remove=function(n){return this.i.Slides.remove(n),this},n.is=function(n){return this.n.type===n},n.refresh=function(){return this.emit(J),this},n.destroy=function(t){void 0===t&&(t=!0);var n=this.event,i=this.state;return i.is(1)?Q(this).on("ready",this.destroy.bind(this,t)):(w(this.i,function(n){n.destroy&&n.destroy(t)},!0),n.emit(a),n.destroy(),t&&D(this.splides),i.set(7)),this},Jt(i,[{key:"options",get:function(){return this.n},set:function(n){this.i.Media.set(n,!0,!0)}},{key:"length",get:function(){return this.i.Slides.getLength(!0)}},{key:"index",get:function(){return this.i.Controller.getIndex()}}]),i}();return t.defaults={},t.STATES=r,t},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).Splide=t();
4752</script>
4752<script> 4753 let SnapSlider = class { 4754 constructor(el, { 4755 labelSepparator = 'von', 4756 autoPager, 4757 groupPager, 4758 loop, 4759 forcePager 4760 } = {}) { 4761 this.el = el; 4762 this.track = this.el.querySelector("[data-track]"); 4763 if (!this.track) { 4764 console.warn( 4765 "No Slider track defined, reverting back to CSS slider.\nPlease create a wrapper for your slides with the attribute data-track", 4766 this.el 4767 ); 4768 return; 4769 } 4770 this.initialLoad = true; 4771 this.slides = []; 4772 this.inViewObserver; 4773 this.mutationObserver; 4774 this.resizeObserver; 4775 this.pager = this.el.querySelector("[data-pager]"); 4776 this.navBtns = Array.from( 4777 this.el.querySelectorAll("[data-next], [data-prev]") 4778 ); 4779 this.slideLabelSepparator = this.el.dataset.slideLabelSepparator || labelSepparator; 4780 this.useAutoPager = autoPager || this.el.hasAttribute("data-auto-pager") || false; 4781 this.useGroupPager = groupPager || this.el.hasAttribute("data-group-pager") || false; 4782 this.useLoop = loop || this.el.hasAttribute("data-loop") || false; 4783 this.forcePager = forcePager || this.el.hasAttribute("data-force-pager") || false; 4784 this.sliderLabel = this.el.hasAttribute("aria-label") && this.el.getAttribute("aria-label").toLowerCase().trim().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, ""); 4785 this.sliderId = this.el.id || this.sliderLabel || "slider"; 4786 this.markerIdName = "data-target-id"; 4787 this.pagerClasses = this.el.dataset.pagerClass || "snap-pager"; 4788 this.markerClasses = this.el.dataset.markerClass || "snap-marker"; 4789 this.init(); 4790 } 4791 init() { 4792 this.setupSlides(); 4793 this.setupNav(); 4794 if (this.useAutoPager) { 4795 this.createPager(); 4796 } else { 4797 this.setupPager(); 4798 } 4799 this.setupObservers(); 4800 this.setupMutationObserver(); 4801 this.setupResizeObserver(); 4802 this.el.addEventListener("click", this.eventHandler.bind(this)); 4803 this.el.addEventListener("keydown", this.eventHandler.bind(this)); 4804 if ("onscrollend" in window) { 4805 this.track.addEventListener("scrollend", () => { 4806 this.isNavigating = false; 4807 }); 4808 } else { 4809 this.track.addEventListener("scroll", () => { 4810 clearTimeout(this.scrollEndTimer); 4811 this.scrollEndTimer = setTimeout(() => { 4812 this.isNavigating = false; 4813 }, 100); 4814 }); 4815 } 4816 } 4817 destroy() { 4818 this.inViewObserver?.disconnect(); 4819 this.mutationObserver?.disconnect(); 4820 this.resizeObserver?.disconnect(); 4821 this.el.removeEventListener("click", this.eventHandler.bind(this)); 4822 this.el.removeEventListener("keydown", this.eventHandler.bind(this)); 4823 } 4824 roundUpIfGreaterThan(number, min = 8) { 4825 const decimalPart = number - Math.floor(number); 4826 return decimalPart >= min ? Math.ceil(number) : Math.floor(number); 4827 } 4828 getInViewItems() { 4829 const inViewSlides = Array.from(this.track.querySelectorAll("[data-in-view]")).filter((el) => this.slides.includes(el)); 4830 const firstInViewSlide = inViewSlides[0] || null; 4831 const lastInViewSlide = inViewSlides[inViewSlides.length - 1] || null; 4832 const isAtStart = firstInViewSlide === this.slides[0]; 4833 const isAtEnd = lastInViewSlide === this.slides[this.slides.length - 1]; 4834 return { 4835 inViewSlides, 4836 totalInViewSlides: inViewSlides.length, 4837 firstInViewSlide, 4838 lastInViewSlide, 4839 isAtStart, 4840 isAtEnd, 4841 hasNoOverflow: isAtStart && isAtEnd 4842 }; 4843 } 4844 groupPagerMarkers() { 4845 if (this.slides.length === 0 || !this.pager || !this.useGroupPager) return; 4846 const totalVisibleSlides = this.roundUpIfGreaterThan( 4847 this.track.offsetWidth / this.slides[0].offsetWidth 4848 ); 4849 const markers = Array.from(this.pager.querySelectorAll("a, button"));
4850 markers.forEach((marker, index) => { 4851 marker.style.display = index % totalVisibleSlides === 0 ? null : "none"; 4852 }); 4853 } 4854 handleInView(entries) { 4855 entries.forEach((entry) => { 4856 const marker = this.pager && (this.pager.querySelector(`[href="#${entry.target.id}"]`) || this.pager.querySelector( 4857 `[${this.markerIdName}="${entry.target.id}"]` 4858 )); 4859 entry.target.toggleAttribute("data-in-view", entry.isIntersecting); 4860 entry.target.toggleAttribute("inert", !entry.isIntersecting); 4861 marker?.setAttribute("aria-current", entry.isIntersecting); 4862 marker?.setAttribute("tabindex", entry.isIntersecting ? "0" : "-1"); 4863 }); 4864 const { isAtStart, isAtEnd, hasNoOverflow } = this.getInViewItems(); 4865 this.navBtns.forEach((btn) => { 4866 if (btn.hasAttribute("data-next")) { 4867 btn.style.visibility = hasNoOverflow ? "hidden" : null; 4868 isAtEnd && !this.useLoop ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled"); 4869 } 4870 if (btn.hasAttribute("data-prev")) { 4871 btn.style.visibility = hasNoOverflow ? "hidden" : null; 4872 isAtStart && !this.useLoop ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled"); 4873 } 4874 }); 4875 if (this.pager) { 4876 const hidePager = hasNoOverflow && !this.forcePager; 4877 this.pager.style.visibility = hidePager ? "hidden" : null; 4878 this.pager.toggleAttribute("inert", hidePager); 4879 } 4880 if (!this.initialLoad) { 4881 this.el.dispatchEvent( 4882 new CustomEvent("slideChange", { 4883 detail: this.getInViewItems() 4884 }) 4885 ); 4886 } else { 4887 this.initialLoad = false; 4888 } 4889 if (document.activeElement.parentElement.hasAttribute("data-pager")) { 4890 const activeItems = this.pager.querySelectorAll('[tabindex="0"]'); 4891 if (activeItems.length) { 4892 activeItems[0].focus({ preventScroll: true }); 4893 } 4894 } 4895 } 4896 getSlides() { 4897 if (!this.track) return []; 4898 return Array.from(this.track.children).filter( 4899 (child) => child.tagName.toLowerCase() !== "template" && child.tagName.toLowerCase() !== "style" && child.tagName.toLowerCase() !== "script" && child.style.display !== "none" 4900 ); 4901 } 4902 refreshSlides() { 4903 this.initialLoad = true; 4904 this.slides = this.getSlides(); 4905 this.setupSlides(); 4906 if (this.useAutoPager) { 4907 this.createPager(); 4908 } else { 4909 this.setupPager(); 4910 } 4911 this.groupPagerMarkers(); 4912 this.setupObservers(); 4913 } 4914 setupSlides() { 4915 this.slides = this.getSlides(); 4916 this.slides.forEach((slide, index) => { 4917 const totalSlides = this.slides.length; 4918 const currentSlide = index + 1; 4919 const existingLabel = slide.getAttribute("aria-label") || ""; 4920 const isImage = slide.tagName.toLowerCase() === "img" || slide.tagName.toLowerCase() === "picture"; 4921 const slideLabelTag = isImage ? "alt" : "aria-label"; 4922 const hasAutoLabel = existingLabel.startsWith( 4923 `${currentSlide} ${this.slideLabelSepparator} ` 4924 ); 4925 if (!slide.hasAttribute("id")) { 4926 slide.setAttribute( 4927 "id", 4928 `${this.sliderId}-item-${currentSlide}` 4929 ); 4930 } 4931 if (!slide.hasAttribute(slideLabelTag) || slide.getAttribute(slideLabelTag) === "" || hasAutoLabel) { 4932 slide.setAttribute( 4933 slideLabelTag, 4934 `${currentSlide} ${this.slideLabelSepparator} ${totalSlides}` 4935 ); 4936 } 4937 if (slide.tagName.toLowerCase() === "div" && !slide.hasAttribute("role")) { 4938 slide.setAttribute("role", "group"); 4939 } 4940 if (this.pager && !isImage) { 4941 slide.setAttribute("role", "tabpanel"); 4942 } 4943 if (slide.getAttribute("role") === "group") { 4944 slide.setAttribute("aria-roledescription", "item"); 4945 } 4946 }); 4947 if (!this.el.hasAttribute("role") && this.el.tagName !== "SECTION") { 4948 this.el.setAttribute("role", "region"); 4949 } 4950 if (!this.el.hasAttribute("aria-roledescription")) { 4951 this.el.setAttribute("aria-roledescription", "carousel"); 4952 } 4953 if (!this.track.hasAttribute("tabindex")) { 4954 this.track.setAttribute("tabindex", 0); 4955 } 4956 this.track.setAttribute("aria-live", "polite"); 4957 } 4958 setupNav() { 4959 this.navBtns.forEach((btn) => { 4960 btn.setAttribute("disabled", ""); 4961 btn.removeAttribute("hidden"); 4962 btn.classList.remove("invisible"); 4963 btn.style.visibility = null; 4964 }); 4965 } 4966 createPager() { 4967 const newPager = document.createElement("nav"); 4968 newPager.setAttribute("data-pager", ""); 4969 newPager.setAttribute("role", "tablist"); 4970 newPager.classList.add(...this.pagerClasses.split(" "));
4971 this.slides.forEach((slide, index) => { 4972 const marker = document.createElement("button"); 4973 const slideId = slide.id || `${this.sliderId}-item-${index + 1}`; 4974 marker.setAttribute(this.markerIdName, slideId); 4975 marker.classList.add(...this.markerClasses.split(" ")); 4976 this.setupPagerMarker(marker, index); 4977 newPager.appendChild(marker); 4978 if (slide.tagName.toLowerCase() !== "img" && slide.tagName.toLowerCase() !== "picture") { 4979 slide.removeAttribute("aria-roledescription"); 4980 slide.setAttribute("role", "tabpanel"); 4981 } 4982 }); 4983 if (this.pager) { 4984 this.pager.setAttribute("role", "tablist"); 4985 this.pager.replaceChildren(...newPager.children); 4986 } else { 4987 this.track.after(newPager); 4988 this.pager = this.el.querySelector("[data-pager]"); 4989 } 4990 } 4991 setupPager() { 4992 if (!this.pager) return; 4993 this.pager.setAttribute("role", "tablist"); 4994 const items = Array.from(this.pager.querySelectorAll("a, button")); 4995 items.forEach((marker, index) => this.setupPagerMarker(marker, index)); 4996 } 4997 setupPagerMarker(marker, index) { 4998 const markerId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName); 4999 const slideId = markerId || `${this.sliderId}-item-${index + 1}`; 5000 if (!markerId) { 5001 marker.setAttribute(this.markerIdName, slideId); 5002 } 5003 marker.setAttribute("role", "tab"); 5004 marker.setAttribute("aria-controls", slideId); 5005 marker.setAttribute("aria-posinset", index + 1); 5006 marker.setAttribute("aria-setsize", this.slides.length); 5007 marker.setAttribute("tabindex", "-1"); 5008 if (!marker.hasAttribute("aria-label")) { 5009 marker.setAttribute("aria-label", `Slide ${index + 1}`); 5010 } 5011 } 5012 setupObservers() { 5013 if (this.inViewObserver) { 5014 this.inViewObserver.disconnect(); 5015 } 5016 this.inViewObserver = new IntersectionObserver( 5017 this.handleInView.bind(this), { 5018 root: this.track, 5019 threshold: 0.8 5020 } 5021 ); 5022 this.slides.forEach((slide) => this.inViewObserver.observe(slide)); 5023 } 5024 setupMutationObserver() { 5025 this.mutationObserver = new MutationObserver((mutations) => { 5026 if (mutations.some((m) => m.type === "childList" || m.target.parentElement === this.track)) { 5027 this.refreshSlides(); 5028 } 5029 }); 5030 this.mutationObserver.observe(this.track, { 5031 childList: true, 5032 subtree: true, 5033 attributeFilter: ["style"] 5034 }); 5035 } 5036 setupResizeObserver() { 5037 this.resizeObserver = new ResizeObserver( 5038 this.groupPagerMarkers.bind(this) 5039 ); 5040 this.resizeObserver.observe(this.el); 5041 } 5042 goToSlideDir(dir = "next") { 5043 if (this.isNavigating) return; 5044 const { firstInViewSlide, lastInViewSlide } = this.getInViewItems(); 5045 const isPrev = dir === "prev"; 5046 const referenceSlide = isPrev ? firstInViewSlide : lastInViewSlide; 5047 const currentIndex = this.slides.indexOf(referenceSlide); 5048 let targetIndex = isPrev ? currentIndex - 1 : currentIndex + 1; 5049 if (targetIndex < 0 || targetIndex >= this.slides.length) { 5050 if (!this.useLoop) return; 5051 targetIndex = isPrev ? this.slides.length - 1 : 0; 5052 } 5053 const targetSlide = this.slides[targetIndex]; 5054 if (!targetSlide) return; 5055 this.isNavigating = true; 5056 targetSlide.scrollIntoView({ 5057 block: "nearest", 5058 inline: isPrev ? "end" : "start" 5059 }); 5060 } 5061 pagerToSlide(event) { 5062 if (!event.target.closest("[data-pager]")) return; 5063 const marker = event.target.closest("a, button"); 5064 if (!marker) return; 5065 event.preventDefault(); 5066 const slideId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName); 5067 const targetSlide = this.track.querySelector(`#${slideId}`);
5068 targetSlide?.scrollIntoView({ block: "nearest", inline: "start" }); 5069 } 5070 eventHandler(event) { 5071 const target = event.target.closest( 5072 "[data-next], [data-prev], [data-pager]" 5073 ); 5074 if (!target) return; 5075 if (event.type === "click") { 5076 if (target.hasAttribute("data-next")) { 5077 this.goToSlideDir("next"); 5078 } else if (target.hasAttribute("data-prev")) { 5079 this.goToSlideDir("prev"); 5080 } else if (target.closest("[data-pager]")) { 5081 this.pagerToSlide(event); 5082 } 5083 } 5084 if (event.type === "keydown" && target.closest("[data-pager]")) { 5085 if (event.key === "ArrowRight" || event.key === "ArrowDown") { 5086 event.preventDefault(); 5087 this.goToSlideDir("next"); 5088 } else if (event.key === "ArrowLeft" || event.key === "ArrowUp") { 5089 event.preventDefault(); 5090 this.goToSlideDir("prev"); 5091 } 5092 } 5093 } 5094 }; 5095 5096 (() => { 5097 function alpineSnapSlider(Alpine) { 5098 Alpine.directive("snap-slider", (el, { 5099 modifiers 5100 }, { 5101 cleanup 5102 }) => { 5103 const slider = new SnapSlider(el, { 5104 autoPager: modifiers.includes("auto-pager"), 5105 groupPager: modifiers.includes("group-pager"), 5106 loop: modifiers.includes("loop"), 5107 forcePager: modifiers.includes("force-pager") 5108 }); 5109 cleanup(() => { 5110 slider.destroy(); 5111 }); 5112 }); 5113 } 5114 5115 document.addEventListener("alpine:init", () => { 5116 window.Alpine.plugin(alpineSnapSlider); 5117 }); 5118 })(); 5119 //# sourceURL=alpine-snap-slider.js 5120</script>
vendor: 1 bytes, line 5120
5120
5121<script> 5122 (() => { 5123 // src/dialog.js 5124 function dialog_default(Alpine) { 5125 Alpine.directive("htmldialog", fylgjaAlpineDialog); 5126 function fylgjaAlpineDialog(el, { expression, modifiers }, { evaluateLater, cleanup }) { 5127 const evaluate = expression.length ? evaluateLater(expression) : () => {}; 5128 const lockPageScroll = modifiers.includes("noscroll"); 5129 const isModeless = modifiers.includes("modeless"); 5130 const closeBy = el.getAttribute("closeby") || modifierValue(modifiers, "closeby", "closerequest"); 5131 el.style.display = null; 5132 el.style.length === 0 && el.removeAttribute("style"); 5133 if (el._x_isShown) { 5134 open(); 5135 } 5136 const closeBySupported = (() => { 5137 return "closedBy" in HTMLDialogElement.prototype; 5138 })(); 5139 function scrollLock(use = true) { 5140 document.body.style.overflow = use ? "hidden" : ""; 5141 } 5142 function dialogSubmit(event) { 5143 if (event.target.getAttribute("method") === "dialog" || event.submitter?.getAttribute("formmethod") === "dialog") { 5144 event.preventDefault(); 5145 evaluate(); 5146 } 5147 } 5148 function escapeDialog(event) { 5149 if (event.key !== "Escape") return; 5150 event.preventDefault(); 5151 if (closeBy === "none") return; 5152 evaluate(); 5153 } 5154 function handleCloseByEvent(event) { 5155 if (event.target !== el) return; 5156 const rect = el.getBoundingClientRect(); 5157 const isInDialog = rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width; 5158 if (!isInDialog) { 5159 if (closeBy === "any") { 5160 if (closeBySupported) { 5161 event.preventDefault(); 5162 } 5163 evaluate(); 5164 } 5165 } 5166 } 5167 function handleCloseEvent() { 5168 evaluate(); 5169 } 5170 function open() { 5171 if (el.hasAttribute("open")) return; 5172 isModeless ? el.show() : el.showModal(); 5173 scrollLock(lockPageScroll); 5174 } 5175 function close() { 5176 if (!el.hasAttribute("open")) return; 5177 el.close(); 5178 scrollLock(false); 5179 } 5180 el._x_doShow = () => open(); 5181 el._x_doHide = () => close(); 5182 el.addEventListener("keydown", escapeDialog); 5183 el.addEventListener("submit", dialogSubmit); 5184 el.addEventListener("click", handleCloseByEvent); 5185 el.addEventListener("cancel", handleCloseEvent); 5186 cleanup(() => { 5187 el.removeEventListener("keydown", escapeDialog); 5188 el.removeEventListener("submit", dialogSubmit); 5189 el.removeEventListener("click", handleCloseByEvent); 5190 el.removeEventListener("cancel", handleCloseEvent); 5191 scrollLock(false); 5192 }); 5193 } 5194 } 5195 function modifierValue(modifiers, key, fallback) { 5196 if (modifiers.indexOf(key) === -1) return fallback; 5197 const rawValue = modifiers[modifiers.indexOf(key) + 1]; 5198 if (!rawValue) return fallback; 5199 if (key === "closeby") { 5200 const allowedValues = ["auto", "none", "closerequest", "any"]; 5201 const options = allowedValues.join(", "); 5202 if (!allowedValues.includes(rawValue)) { 5203 console.warn( 5204 `"${rawValue}" is not one of the allowed values for closeby: ${options}` 5205 ); 5206 return fallback; 5207 } 5208 } 5209 return rawValue; 5210 } 5211 5212 // src/cdn.js 5213 document.addEventListener("alpine:init", () => { 5214 window.Alpine.plugin(dialog_default); 5215 }); 5216 })(); 5217 //# sourceURL=alpine-htmldialog.js 5218</script>
vendor: 1 bytes, line 5218
5218
vendor: 2,386 bytes, lines 5219-5279
5219<script> 5220 (() => { 5221 function src_default(Alpine) { 5222 Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 5223 let evaluate = evaluateLater(expression); 5224 let options = { 5225 rootMargin: getRootMargin(modifiers), 5226 threshold: getThreshold(modifiers) 5227 }; 5228 let observer = new IntersectionObserver((entries) => { 5229 entries.forEach((entry) => { 5230 if (entry.isIntersecting === (value === "leave")) 5231 return; 5232 evaluate(); 5233 modifiers.includes("once") && observer.disconnect(); 5234 }); 5235 }, options); 5236 observer.observe(el); 5237 cleanup(() => { 5238 observer.disconnect(); 5239 }); 5240 })); 5241 } 5242 function getThreshold(modifiers) { 5243 if (modifiers.includes("full")) 5244 return 0.99; 5245 if (modifiers.includes("half")) 5246 return 0.5; 5247 if (!modifiers.includes("threshold")) 5248 return 0; 5249 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 5250 if (threshold === "100") 5251 return 1; 5252 if (threshold === "0") 5253 return 0; 5254 return Number(`.${threshold}`); 5255 } 5256 function getLengthValue(rawValue) { 5257 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 5258 return match ? match[1] + (match[2] || "px") : void 0; 5259 } 5260 function getRootMargin(modifiers) { 5261 const key = "margin"; 5262 const fallback = "0px 0px 0px 0px"; 5263 const index = modifiers.indexOf(key); 5264 if (index === -1) 5265 return fallback; 5266 let values = []; 5267 for (let i = 1; i < 5; i++) { 5268 values.push(getLengthValue(modifiers[index + i] || "")); 5269 } 5270 values = values.filter((v) => v !== void 0); 5271 return values.length ? values.join(" ").trim() : fallback; 5272 } 5273 5274 document.addEventListener("alpine:init", () => { 5275 window.Alpine.plugin(src_default); 5276 }); 5277 })(); 5278 //# sourceURL=alpine-intersect.js 5279</script>
5279 5280
5281<script> 5282 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"})) { 5283 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 5284 } 5285 //# sourceURL=alpine-defer-rules.js 5286</script>
vendor: 1 bytes, line 5286
5286
5287<script> 5288 (() => { 5289 const hasAlpine = new Promise(resolve => { 5290 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 5291 }); 5292 5293 const hasInteract = new Promise(resolve => { 5294 (events => { 5295 const onInteract = () => { 5296 resolve(); 5297 events.forEach(type => window.removeEventListener(type, onInteract)); 5298 } 5299 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 5300 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 5301 }); 5302 5303 const onIntersect = (el) => { 5304 return new Promise(resolve => { 5305 const observer = new IntersectionObserver(entries => { 5306 for (const entry of entries) { 5307 if (entry.isIntersecting) { 5308 observer.disconnect() 5309 resolve(); 5310 } 5311 } 5312 }, {}); 5313 observer.observe(el); 5314 }); 5315 } 5316 5317 function runComponent(el) { 5318 hasAlpine.then(() => { 5319 el.removeAttribute('x-ignore'); 5320 queueMicrotask(() => Alpine.initTree(el)); 5321 }); 5322 } 5323 5324 function initDeferredComponents() { 5325 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 5326 el.setAttribute('x-ignore', ''); 5327 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 5328 switch (deferUntil) { 5329 case 'interact': 5330 hasInteract.then(() => runComponent(el)); 5331 break; 5332 case 'intersect': 5333 onIntersect(el).then(() => runComponent(el)) 5334 break; 5335 case 'idle': 5336 window.requestIdleCallback 5337 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 5338 : setTimeout(() => runComponent(el), 4000); 5339 break; 5340 case 'eager': 5341 runComponent(el); 5342 break; 5343 default: 5344 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 5345 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 5346 } 5347 } 5348 }); 5349 } 5350 5351 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 5352 })(); 5353 //# sourceURL=alpine-defer.js 5354</script>
5354 5355
vendor: 4,392 bytes, lines 5356-5463
5356<script> 5357 (() => { 5358 // packages/collapse/src/index.js 5359 function src_default(Alpine) { 5360 Alpine.directive("collapse", collapse); 5361 collapse.inline = (el, { 5362 modifiers 5363 }) => { 5364 if (!modifiers.includes("min")) 5365 return; 5366 el._x_doShow = () => {}; 5367 el._x_doHide = () => {}; 5368 }; 5369 5370 function collapse(el, { 5371 modifiers 5372 }) { 5373 let duration = modifierValue(modifiers, "duration", 250) / 1e3; 5374 let floor = modifierValue(modifiers, "min", 0); 5375 let fullyHide = !modifiers.includes("min"); 5376 if (!el._x_isShown) 5377 el.style.height = `${floor}px`; 5378 if (!el._x_isShown && fullyHide) 5379 el.hidden = true; 5380 if (!el._x_isShown) 5381 el.style.overflow = "hidden"; 5382 let setFunction = (el2, styles) => { 5383 let revertFunction = Alpine.setStyles(el2, styles); 5384 return styles.height ? () => {} : revertFunction; 5385 }; 5386 let transitionStyles = { 5387 transitionProperty: "height", 5388 transitionDuration: `${duration}s`, 5389 transitionTimingFunction: "cubic-bezier(0.4, 0.0, 0.2, 1)" 5390 }; 5391 el._x_transition = { 5392 in(before = () => {}, after = () => {}) { 5393 if (fullyHide) 5394 el.hidden = false; 5395 if (fullyHide) 5396 el.style.display = null; 5397 let current = el.getBoundingClientRect().height; 5398 el.style.height = "auto"; 5399 let full = el.getBoundingClientRect().height; 5400 if (current === full) { 5401 current = floor; 5402 } 5403 Alpine.transition(el, Alpine.setStyles, { 5404 during: transitionStyles, 5405 start: { 5406 height: current + "px" 5407 }, 5408 end: { 5409 height: full + "px" 5410 } 5411 }, () => el._x_isShown = true, () => { 5412 if (el.getBoundingClientRect().height == full) { 5413 el.style.overflow = null; 5414 } 5415 }); 5416 }, 5417 out(before = () => {}, after = () => {}) { 5418 let full = el.getBoundingClientRect().height; 5419 Alpine.transition(el, setFunction, { 5420 during: transitionStyles, 5421 start: { 5422 height: full + "px" 5423 }, 5424 end: { 5425 height: floor + "px" 5426 } 5427 }, () => el.style.overflow = "hidden", () => { 5428 el._x_isShown = false; 5429 if (el.style.height == `${floor}px` && fullyHide) { 5430 el.style.display = "none"; 5431 el.hidden = true; 5432 } 5433 }); 5434 } 5435 }; 5436 } 5437 } 5438 5439 function modifierValue(modifiers, key, fallback) { 5440 if (modifiers.indexOf(key) === -1) 5441 return fallback; 5442 const rawValue = modifiers[modifiers.indexOf(key) + 1]; 5443 if (!rawValue) 5444 return fallback; 5445 if (key === "duration") { 5446 let match = rawValue.match(/([0-9]+)ms/); 5447 if (match) 5448 return match[1]; 5449 } 5450 if (key === "min") { 5451 let match = rawValue.match(/([0-9]+)px/); 5452 if (match) 5453 return match[1]; 5454 } 5455 return rawValue; 5456 } 5457 5458 // packages/collapse/builds/cdn.js 5459 document.addEventListener("alpine:init", () => { 5460 window.Alpine.plugin(src_default); 5461 }); 5462 })(); 5463</script>
5463<script> 5464// x-teleport implementation 5465(_ => { 5466 document.addEventListener('DOMContentLoaded', event => { 5467 // x-teleport available only for template 5468 if (!Alpine.version.startsWith('2')) { 5469 return; 5470 } 5471 5472 const teleportDirective = (el, expression) => { 5473 let target = document.querySelector(expression) 5474 let clone = el.content.cloneNode(true).firstElementChild; 5475 5476 target.appendChild(clone); 5477 setTimeout(() => { 5478 target.querySelectorAll('[x-data]') 5479 .forEach(el => Alpine.initializeComponent(el)); 5480 }, 0) 5481 }; 5482 5483 document.querySelectorAll('template').forEach(el => { 5484 if (!el.hasAttribute('x-teleport')) { 5485 return; 5486 } 5487 5488 teleportDirective(el, el.getAttribute('x-teleport')); 5489 }); 5490 5491 document.querySelectorAll('[x-data]').forEach(el => { 5492 if (el.hasAttribute('x-init')) { 5493 return; 5494 } 5495 5496 setTimeout(() => { 5497 Alpine.initializeComponent(el); 5498 }, 0); 5499 }); 5500 }); 5501})() 5502</script>
5502 5503
5504<script type="module" 5505 src="https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_Theme/js/alpine3.min.js" 5506 defer 5507 crossorigin 5508></script>
vendor: 1 bytes, line 5508
5508
5509<script> 5510 loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/jquery.min.js', 'jquery') 5511 .then(() => { 5512 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonPageBuilder/js/common.js', 'common'); 5513 }) 5514 .then(() => { 5515 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Hyva_MagezonBuilder/js/waypoints.min.js', 'waypoints'); 5516 }) 5517 .then(() => { 5518 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Builder/js/jarallax/jarallax.min.js', 'jarallax'); 5519 }) 5520 .then(() => { 5521 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Builder/js/jarallax/jarallax-video.js', 'jarallax-video'); 5522 }) 5523 .then(() => { 5524 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Builder/js/vimeo/player.js', 'vimeo-player'); 5525 }) 5526 .then(() => { 5527 return loadScript('https://www.mode-jost.de/static/version1789565467/frontend/Modehaus/mhdesign_hyva/de_DE/Magezon_Core/js/jquery.magnific-popup.min.js', 'magnific-popup'); 5528 }) 5529 .then(() => { 5530 var $wnd = $(window); 5531 var $doc = $(document); 5532 5533 var throttle = function ( delay, noTrailing, callback, debounceMode ) { 5534 /* 5535 * After wrapper has stopped being called, this timeout ensures that 5536 * `callback` is executed at the proper times in `throttle` and `end` 5537 * debounce modes. 5538 */ 5539 var timeoutID; 5540 var cancelled = false; 5541 5542 // Keep track of the last time `callback` was executed. 5543 var lastExec = 0; 5544 5545 // Function to clear existing timeout 5546 function clearExistingTimeout () { 5547 if ( timeoutID ) { 5548 clearTimeout(timeoutID); 5549 } 5550 } 5551 5552 // Function to cancel next exec 5553 function cancel () { 5554 clearExistingTimeout(); 5555 cancelled = true; 5556 } 5557 5558 5559 // `noTrailing` defaults to falsy. 5560 if ( typeof noTrailing !== 'boolean' ) { 5561 debounceMode = callback; 5562 callback = noTrailing; 5563 noTrailing = undefined; 5564 } 5565 5566 /* 5567 * The `wrapper` function encapsulates all of the throttling / debouncing 5568 * functionality and when executed will limit the rate at which `callback` 5569 * is executed. 5570 */ 5571 function wrapper () { 5572 5573 var self = this; 5574 var elapsed = Date.now() - lastExec; 5575 var args = arguments; 5576 5577 if (cancelled) { 5578 return; 5579 } 5580 5581 // Execute `callback` and update the `lastExec` timestamp. 5582 function exec () { 5583 lastExec = Date.now(); 5584 callback.apply(self, args); 5585 } 5586 5587 /* 5588 * If `debounceMode` is true (at begin) this is used to clear the flag 5589 * to allow future `callback` executions. 5590 */ 5591 function clear () { 5592 timeoutID = undefined; 5593 } 5594 5595 if ( debounceMode && !timeoutID ) { 5596 /* 5597 * Since `wrapper` is being called for the first time and 5598 * `debounceMode` is true (at begin), execute `callback`. 5599 */ 5600 exec(); 5601 } 5602 5603 clearExistingTimeout(); 5604 5605 if ( debounceMode === undefined && elapsed > delay ) { 5606 /* 5607 * In throttle mode, if `delay` time has been exceeded, execute 5608 * `callback`. 5609 */ 5610 exec(); 5611 5612 } else if ( noTrailing !== true ) { 5613 /* 5614 * In trailing throttle mode, since `delay` time has not been 5615 * exceeded, schedule `callback` to execute `delay` ms after most 5616 * recent execution. 5617 * 5618 * If `debounceMode` is true (at begin), schedule `clear` to execute 5619 * after `delay` ms. 5620 * 5621 * If `debounceMode` is false (at end), schedule `callback` to 5622 * execute after `delay` ms. 5623 */ 5624 timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay); 5625 } 5626 5627 } 5628 5629 wrapper.cancel = cancel; 5630 5631 // Return the wrapper function. 5632 return wrapper; 5633 5634 } 5635 5636 var isMobile = /Android|iPhone|iPad|iPod|BlackBerry|W
5636indows Phone/g.test(navigator.userAgent || navigator.vendor || window.opera); 5637 5638 var wndW = 0; 5639 var wndH = 0; 5640 wndW = $wnd.width(); 5641 wndH = $wnd.height(); 5642 $wnd.on( 'resize load orientationchange', function() { 5643 wndW = $wnd.width(); 5644 wndH = $wnd.height(); 5645 }); 5646 5647 /** 5648 * In Viewport checker 5649 * return visible percent from 0 to 1 5650 * 5651 * @param {Object} $item - jQuery object. 5652 * @param {Bool} returnRect - return array with result and rect. 5653 * 5654 * @return {Mixed} - in viewport flag. 5655 */ 5656 function isInViewport( $item, returnRect ) { 5657 var rect = $item[ 0 ].getBoundingClientRect(); 5658 var result = 1; 5659 5660 if ( rect.right <= 0 || rect.left >= wndW ) { 5661 result = 0; 5662 } else if ( rect.bottom < 0 && rect.top <= wndH ) { 5663 result = 0; 5664 } else { 5665 var beforeTopEnd = Math.max( 0, rect.height + rect.top ); 5666 var beforeBottomEnd = Math.max( 0, rect.height - ( rect.top + rect.height - wndH ) ); 5667 var afterTop = Math.max( 0, -rect.top ); 5668 var beforeBottom = Math.max( 0, rect.top + rect.height - wndH ); 5669 5670 if ( rect.height < wndH ) { 5671 result = 1 - ( ( afterTop || beforeBottom ) / rect.height ); 5672 } else if ( beforeTopEnd <= wndH ) { 5673 result = beforeTopEnd / wndH; 5674 } else if ( beforeBottomEnd <= wndH ) { 5675 result = beforeBottomEnd / wndH; 5676 } 5677 result = result < 0 ? 0 : result; 5678 } 5679 if ( returnRect ) { 5680 return [ result, rect ]; 5681 } 5682 return result; 5683 } 5684 5685 5686 /** 5687 * Mouse Parallax 5688 */ 5689 var $parallaxMouseList = false; 5690 var parallaxMouseTimeout; 5691 var parallaxMouseFirstRun = 1; 5692 5693 // run parallax animation 5694 function parallaxMouseRun( x, y, deviceOrientation ) { 5695 var data; 5696 var itemX; 5697 var itemY; 5698 $parallaxMouseList.each( function() { 5699 var $this = $( this ); 5700 data = $this.data( 'parallax-mouse-data' ); 5701 5702 // don't animate if block isn't in viewport 5703 if ( typeof data !== 'object' || ( ! data.is_in_viewport && ! ( deviceOrientation && parallaxMouseFirstRun ) ) ) { 5704 return; 5705 } 5706 5707 // device acceleration calculate 5708 if ( deviceOrientation ) { 5709 itemX = -data.size * x; 5710 itemY = -data.size * y; 5711 5712 // mouse calculate 5713 } else { 5714 itemX = ( data.rect.width - ( x - data.rect.left ) ) / data.rect.width; 5715 itemY = ( data.rect.height - ( y - data.rect.top ) ) / data.rect.height; 5716 if ( itemX > 1 || itemX < 0 || itemY > 1 || itemY < 0 ) { 5717 itemX = 0.5; 5718 itemY = 0.5; 5719 } 5720 itemX = data.size * ( itemX - 0.5 ) * 2; 5721 itemY = data.size * ( itemY - 0.5 ) * 2; 5722 } 5723 5724 // if first run orientation on device, set default values without animation 5725 if ( deviceOrientation && parallaxMouseFirstRun ) { 5726 $this.css( { 5727 transform: `translateX(${ itemX }px) translateY(${ itemY }px) translateZ(0)`, 5728 } ); 5729 } else { 5730 $this.css( { 5731 transition: `transform ${ deviceOrientation ? 2 : data.speed }s cubic-bezier(0.22, 0.63, 0.6, 0.88)`, 5732 transform: `translateX(${ itemX }px) translateY(${ itemY }px) translateZ(0)`, 5733 } ); 5734 } 5735 } ); 5736 parallaxMouseFirstRun = 0; 5737 } 5738 var throttledParallaxMouseRun = throttle( 200, ( x, y, deviceOrientation ) => { 5739 parallaxMouseRun( x, y, deviceOrientation ); 5740 }); 5741 5742 window.mgzParallaxMouse = function ( force ) { 5743 function run() { 5744 var $newParallax = $( '.mgz-parallax.mgz-parallax-mouse-parallax' ).children( '.mgz-parallax-inner' ); 5745 if ( $newParallax.length ) { 5746 // add new parallax blocks 5747 if ( $parallaxMouseList ) { 5748 $parallaxMouseList = $newParallax; 5749 5750 // first init parallax 5751 } else { 5752 $parallaxMouseList = $newParallax; 5753 5754 if ( isMobile && window.DeviceOrientationEvent ) { 5755 $wnd.on( 'deviceorientation', ( event ) => { 5756 throttledParallaxMouseRun( event.originalEvent.gamma / 90, event.originalEvent.beta / 180, true ); 5757 } ); 5758 5759 // no smooth on firefox 5760 } else { 5761 $wnd.on( 'mousemove', ( event ) => { 5762 throttledParallaxMouseRun( event.clientX, event.clientY ); 5763 } ); 5764 } 5765 } 5766 } 5767 5768 // update data for parallax blocks 5769 if ( $parallaxMouseList ) { 5770 $parallaxMouseList.each( function() { 5771 var $this = $( this ); 5772 var $elem = $( this ).closest('.mgz-element'); 5773 var $parent = $this.parent(); 5774 var size = parseFloat( $parent.attr( 'data-
5774parallax-mouse-parallax-size' ) ) || 30; 5775 var speed = parseFloat( $parent.attr( 'data-parallax-mouse-parallax-speed' ) ) || 10000; 5776 $this.data( 'parallax-mouse-data', { 5777 is_in_viewport: isInViewport( $parent ) ? $elem.is( ':visible' ) : 0, 5778 rect: $parent[ 0 ].getBoundingClientRect(), 5779 size, 5780 speed: speed / 1000, 5781 } ); 5782 $this.css( { 5783 left: -size, 5784 right: -size, 5785 top: -size, 5786 bottom: -size, 5787 } ); 5788 } ); 5789 } 5790 } 5791 5792 // run force without timeout 5793 clearTimeout( parallaxMouseTimeout ); 5794 if ( force ) { 5795 run(); 5796 } else { 5797 parallaxMouseTimeout = setTimeout( parallaxMouseTimeout, 100 ); 5798 } 5799 } 5800 $wnd.on( 'resize scroll orientationchange load', window.mgzParallaxMouse ); 5801 5802 setInterval( window.mgzParallaxMouse, 3000 ); 5803 5804 $(document).find('.mgz-parallax').each(function(index, el) { 5805 var $this = $( this ); 5806 var backgroundType = $this.attr( 'data-background-type' ); 5807 var imageBgSize = $this.attr( 'data-parallax-image-background-size' ); 5808 var imageBgPosition = $this.attr( 'data-parallax-image-background-position' ); 5809 var video = false; 5810 var videoStartTime = 0; 5811 var videoEndTime = 0; 5812 var videoVolume = 0; 5813 var videoLoop = true; 5814 var videoAlwaysPlay = true; 5815 var videoMobile = false; 5816 var parallax = $this.attr( 'data-parallax-type' ); 5817 var parallaxSpeed = $this.attr( 'data-parallax-speed' ); 5818 var parallaxMobile = $this.attr( 'data-parallax-mobile' ) === 'true' || $this.attr( 'data-parallax-mobile' ) === '1'; 5819 5820 // video type 5821 if ( backgroundType === 'yt_vm_video' || backgroundType === 'video' ) { 5822 video = $this.attr( 'data-parallax-video' ); 5823 videoStartTime = parseFloat( $this.attr( 'data-parallax-video-start-time' ) ) || 0; 5824 videoEndTime = parseFloat( $this.attr( 'data-parallax-video-end-time' ) ) || 0; 5825 videoVolume = parseFloat( $this.attr( 'data-parallax-video-volume' ) ) || 0; 5826 videoLoop = $this.attr( 'data-parallax-video-loop' ) !== 'false'; 5827 videoAlwaysPlay = $this.attr( 'data-parallax-video-always-play' ) === 'true'; 5828 videoMobile = $this.attr( 'data-parallax-video-mobile' ) === '1' || $this.attr( 'data-parallax-video-mobile' ) === 'true'; 5829 5830 if ( video && ! parallax && ! parallaxSpeed ) { 5831 parallax = 'scroll'; 5832 parallaxSpeed = 1; 5833 parallaxMobile = videoMobile; 5834 } 5835 } 5836 5837 // prevent if no parallax and no video 5838 if ( ! parallax && ! video ) return; 5839 5840 var jarallaxParams = { 5841 automaticResize: true, 5842 type: parallax, 5843 speed: parallaxSpeed, 5844 disableParallax() { 5845 return parallaxMobile ? false : isMobile; 5846 }, 5847 disableVideo() { 5848 return videoMobile ? false : isMobile; 5849 }, 5850 imgSize: imageBgSize || 'cover', 5851 imgPosition: imageBgPosition || '50% 50%', 5852 }; 5853 5854 if ( imageBgSize === 'pattern' ) { 5855 jarallaxParams.imgSize = 'auto'; 5856 jarallaxParams.imgRepeat = 'repeat'; 5857 } 5858 5859 if ( video ) { 5860 jarallaxParams.speed = parallax ? parallaxSpeed : 1; 5861 jarallaxParams.videoSrc = video; 5862 jarallaxParams.videoStartTime = videoStartTime; 5863 jarallaxParams.videoEndTime = videoEndTime; 5864 jarallaxParams.videoVolume = videoVolume; 5865 jarallaxParams.videoLoop = videoLoop; 5866 jarallaxParams.videoPlayOnlyVisible = ! videoAlwaysPlay; 5867 } 5868 jarallax($this.children( '.mgz-parallax-inner' ), jarallaxParams); 5869 }); 5870 5871 var mgzInit = function() { 5872 5873 var height = $(window).height(); 5874 $(document).find('.mgz-row-full-height').each(function(index, el) { 5875 $(this).css('min-height', height); 5876 $(this).children('.mgz-element-inner').css('min-height', height); 5877 $(this).children().children('.mgz-element-row-content').css('min-height', height); 5878 }); 5879 5880 // ANIMATION 5881 if ($(".mgz-animated:not(.mgz_start_animation)").length) { 5882 $(".mgz-animated:not(.mgz_start_animation)").waypoint(function() { 5883 var self = this; 5884 var delayTime = 0; 5885 if ($(this.element).data('animation-delay')) { 5886 delayTime = $(this.element).data('animation-delay'); 5887 } 5888 var durationTime = 0; 5889 if ($(this.element).data('animation-duration')) { 5890 durationTime = $(this.element).data('animation-duration'); 5891 } 5892 if (durationTime) $(self.element).css("animation-duration", durationTime + 's'); 5893 setTimeout(function() { 5894 $(self.element).addClass("mgz_start_animation animated") 5895 }, delayTime * 1000); 5896 }, { 5897 offset: "85%" 5898 }); 5899 } 5900 5901 // WAYPOINT 5902 if ($(".mgz-waypoint").length) { 5903 $(".mgz-waypoint").waypoint(function() { 5904 if (!$(this.element).hasClass('mgz-animation-applied')) { 5905 $(this.element).trigger('mgz:animation:run'); 5906 $(this.element).addClass('mgz-animation-applied'); 5907 } 5908 }, { 5909 offset: "85%", 5910 triggerOnce: true 5911 }); 5912 } 5913 5914 $('.magezon-builder').find('.mgz-magnific-link').each(function(index, el) { 5915 var type = $(this).data('type') ? $(this).data('type') : 'image'; 5916 var options = { 5917 type: type, 5918 mainClass: $(this).data('main-class'),
5919 removalDelay: 300, 5920 fixedContentPos: true, 5921 fixedBgPos: true, 5922 image: { 5923 verticalFit: true 5924 } 5925 } 5926 5927 if ($(this).data('zoom')) { 5928 if (options['mainClass']) { 5929 options['mainClass'] += ' mfp-no-margins mfp-with-zoom'; 5930 } else { 5931 options['mainClass'] = 'mfp-no-margins mfp-with-zoom'; 5932 } 5933 options['zoom'] = { 5934 enabled: true, 5935 duration: 300 5936 }; 5937 } 5938 5939 $(this).magnificPopup(options); 5940 }); 5941 5942 $('.magezon-builder').find('.mgz-magnific-gallery').each(function(index, el) { 5943 var options = { 5944 delegate: 'a', 5945 type: 'image', 5946 tLoading: 'Loading image #%curr%...', 5947 mainClass: 'mgz-mfp', 5948 fixedContentPos: true, 5949 gallery: { 5950 enabled: true, 5951 navigateByImgClick: true, 5952 preload: [0,1] 5953 } 5954 } 5955 $(this).magnificPopup(options); 5956 }); 5957 5958 $('.magezon-builder').find('.mgz-magnific').each(function(index, el) { 5959 var type = $(this).data('type') ? $(this).data('type') : 'image'; 5960 var options = {}; 5961 5962 switch (type) { 5963 case 'gallery': 5964 var delegate = 'a'; 5965 options = { 5966 delegate: delegate, 5967 type: 'image', 5968 tLoading: 'Loading image #%curr%...', 5969 mainClass: 'mgz-mfp', 5970 fixedContentPos: true, 5971 gallery: { 5972 enabled: true, 5973 navigateByImgClick: true, 5974 preload: [0,1] 5975 }, 5976 iframe: { 5977 markup: '<div class="mfp-iframe-scaler">'+ 5978 '<div class="mfp-close"></div>'+ 5979 '<iframe class="mfp-iframe" allow="accelerometer; ; encrypted-media; gyroscope; picture-in-picture" frameborder="0" allowfullscreen></iframe>'+ 5980 '<div class="mfp-title"></div>' + 5981 '<div class="mfp-counter"></div>' + 5982 '</div>' 5983 }, 5984 callbacks: { 5985 elementParse: function(item) { 5986 if (item.el.data('type')) { 5987 item.type = item.el.data('type'); 5988 } 5989 }, 5990 5991 markupParse: function(template, values, item) { 5992 values.title = item.el.attr('title'); 5993 } 5994 } 5995 } 5996 break; 5997 5998 default: 5999 options = { 6000 type: type, 6001 mainClass: $(this).data('main-class'), 6002 removalDelay: 300, 6003 fixedContentPos: true, 6004 image: { 6005 verticalFit: true 6006 }, 6007 image: { 6008 titleSrc: function(item) { 6009 var title = item.el.attr('title'); 6010 if (item.el.data('title')) { 6011 title = item.el.data('title'); 6012 } 6013 return title; 6014 } 6015 } 6016 } 6017 if ($(this).data('zoom')) { 6018 options['zoom'] = { 6019 enabled: true, 6020 duration: 300 6021 }; 6022 } 6023 break; 6024 } 6025 6026 if ($(this).data('zoom')) { 6027 if (options['mainClass']) { 6028 options['mainClass'] += ' mfp-no-margins mfp-with-zoom'; 6029 } else { 6030 options['mainClass'] = 'mfp-no-margins mfp-with-zoom'; 6031 } 6032 options['zoom'] = { 6033 enabled: true, 6034 duration: 300 6035 }; 6036 } 6037 6038 $(this).click(function(e) { 6039 e.preventDefault(); 6040 }); 6041 $(this).magnificPopup(options); 6042 }); 6043 6044 $('.mgz-magnific').on('click', function() { 6045 return false;
6046 }); 6047 6048 $('.mgz-element-single_image .image-content').click(function(event) { 6049 $(this).siblings('a')[0].click(); 6050 }); 6051 6052 $('.mgz-element-single_image .mgz-single-image-inner').hover(function() { 6053 var img = $(this).find('img'); 6054 if (img.data('hover')) { 6055 var src = img.attr('src'); 6056 img.data('src', src); 6057 img.attr('src', img.data('hover')); 6058 } 6059 }, function() { 6060 var img = $(this).find('img'); 6061 if (img.data('src')) { 6062 var src = img.data('src'); 6063 img.attr('src', src); 6064 } 6065 }); 6066 } 6067 $('body').on('magezonBuilderLoaded', mgzInit); 6068 $(document).on('mgz:init', mgzInit); 6069 $('body').trigger('magezonBuilderLoaded'); 6070 jQuery(document).ready(function($) { 6071 $('.magezon-builder').removeClass('magezon-builder-preload'); 6072 }); 6073 }) 6074</script>
6074<script> 6075 (function () { 6076 const modals = []; 6077 let lastHide = 0; 6078 6079 function resolveElement($refs, value) { 6080 if (!value) return null; 6081 if (value instanceof Element) return value; 6082 if (typeof value === 'string') { 6083 try { 6084 return ($refs && $refs[value]) || document.querySelector(value) || null; 6085 } catch (e) {} 6086 } 6087 return null; 6088 } 6089 6090 function determineTrigger($refs, dialog, trigger) { 6091 if (!trigger && dialog?.target instanceof HTMLElement) { 6092 return dialog.target; 6093 } 6094 6095 if (typeof dialog === 'string' && trigger?.target instanceof HTMLElement) { 6096 return trigger.target; 6097 } 6098 6099 return resolveElement($refs, trigger); 6100 } 6101 6102 function setFocusFirstElement(dialogElement) { 6103 if (!dialogElement) return; 6104 6105 window.setTimeout(() => { 6106 const candidates = dialogElement.querySelectorAll('[x-focus-first]'); 6107 for (const candidate of candidates) { 6108 if (candidate.closest('dialog') === dialogElement) { 6109 candidate.focus(); 6110 return; 6111 } 6112 } 6113 }, 50); 6114 } 6115 6116 window.hyva.modal = function(options = {}) { 6117 if (this.$el && this.$el.dataset && this.$el.dataset.options) { 6118 try { 6119 options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}')); 6120 } catch (e) { 6121 throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON'); 6122 } 6123 } 6124 6125 const config = Object.assign({ 6126 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 6127 transitionEnterStart: 'opacity-0', 6128 transitionEnterEnd: 'opacity-100', 6129 transitionLeave: 'transition ease-in duration-300', 6130 transitionLeaveStart: 'opacity-100', 6131 transitionLeaveEnd: 'opacity-0', 6132 }, options); 6133 6134 return { 6135 opened: {}, 6136 show(dialog, trigger) { 6137 const name = typeof dialog === 'string' ? dialog : config.dialog; 6138 if (!name || this.opened[name]) return; 6139 6140 this.opened[name] = true; 6141 const focusTarget = determineTrigger(this.$refs, dialog, trigger); 6142 const dialogEl = this.$refs && this.$refs[name]; 6143 const frame = { name, instance: this, focusTarget, time: Date.now() }; 6144 modals.push(frame); 6145 setFocusFirstElement(dialogEl); 6146 return new Promise(resolve => { frame.resolve = resolve; }); 6147 }, 6148 cancel() { 6149 this.hide(false); 6150 }, 6151 ok() { 6152 this.hide(true); 6153 }, 6154 hide(value) { 6155 if (Date.now() - lastHide < config.duration) return; 6156 lastHide = Date.now(); 6157 6158 const modal = modals.pop(); 6159 if (!modal) return; 6160 6161 modal.instance.opened[modal.name] = false; 6162 6163 const focusTarget = modal.focusTarget; 6164 focusTarget && window.setTimeout(() => focusTarget.focus(), config.duration + 50); 6165 modal.resolve && modal.resolve(value); 6166 }, 6167 /** 6168 * @deprecated Use dialogConfig() instead, which is used by the default modal-container.phtml template. 6169 * This method is kept for backwards compatibility with custom container templates. 6170 */ 6171 overlay(dialog) { 6172 dialog = this.$el.dataset.dialogRefName || dialog; 6173 const name = typeof dialog === 'string' ? dialog : config.dialog; 6174 if (this.$el.tagName !== 'DIALOG' && ! window.hyva.modal.legacyModalCompatibility) { 6175 console.warn( 6176 '[hyva] Deprecated modal markup detected (x-bind="overlay" on a non-dialog element' + 6177 (name ? ` for "${name}"` : '') + ').\n' + 6178 'Escape and click-outside closing are not available for such dialogs anymore.\n' + 6179 'Install hyva-themes/magento2-legacy-modal-compatibility or migrate to the native <dialog> markup.' 6180 ); 6181 } 6182 return Object.assign({}, this.dialogConfig(name), { 6183 ['@hyva-modal-show.window'](event) { 6184 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 6185 } 6186 }); 6187 }, 6188 dialogConfig(name) { 6189 name = name || this.$el.dataset.dialogRefName || config.dialog; 6190 return { 6191 ['x-show']: () => name ? this.opened[name] : false, 6192 ['x-transition:enter']: config.transitionEnter, 6193 ['x-transition:enter-start']: config.transitionEnterStart, 6194 ['x-transition:enter-end']: config.transitionEnterEnd, 6195 ['x-transition:leave']: config.transitionLeave, 6196 ['x-transition:leave-start']: config.transitionLeaveStart, 6197 ['x-transition:leave-end']: config.transitionLeaveEnd, 6198 ['@hyva-modal-show.window'](event) { 6199 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide); 6200 }, 6201 }; 6202 },
6203 showDialogOnInit() { 6204 const name = this.$el.dataset.dialogRefName; 6205 if (name) { 6206 this.show(name); 6207 } 6208 } 6209 }; 6210 } 6211 6212 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length - 1] 6213 6214 window.hyva.modal.pop = function () { 6215 if (modals.length > 0) { 6216 modals[modals.length - 1].instance.hide(); 6217 } 6218 } 6219 6220 /** 6221 * @deprecated Native <dialog> handles focus trapping automatically. 6222 * Calling this function has no effect. Kept for backwards compatibility. 6223 */ 6224 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) {} 6225 6226 /** 6227 * @deprecated Native <dialog> with x-htmldialog handles ESC key and click-outside events. 6228 * These functions have no effect. Kept for backwards compatibility. 6229 */ 6230 window.hyva.modal.eventListeners = { 6231 keydown: event => {}, 6232 click: event => {} 6233 }; 6234 })(); 6235 6236 window.addEventListener('alpine:init', () => { 6237 Alpine.data('hyvaModal', window.hyva.modal); 6238 }, {once: true}); 6239</script>
vendor: 1 bytes, line 6239
6239
6240<script> 6241 (function () { 6242 if (! window.hyva || ! window.hyva.modal) { 6243 return; 6244 } 6245 6246 window.hyva.modal.legacyModalCompatibility = true; 6247 6248 const refElement = frame => 6249 frame && frame.instance && frame.instance.$refs && frame.instance.$refs[frame.name]; 6250 6251 const isLegacyElement = el => !! el && el.tagName !== 'DIALOG'; 6252 6253 const isOverlayDisabled = el => !! el && el.hasAttribute('x-no-overlay'); 6254 6255 window.hyva.modal.eventListeners = Object.assign(window.hyva.modal.eventListeners || {}, { 6256 keydown: event => { 6257 if (event.key !== 'Escape') { 6258 return; 6259 } 6260 const frame = window.hyva.modal.peek(); 6261 if (frame && isLegacyElement(refElement(frame))) { 6262 frame.instance.hide(); 6263 } 6264 }, 6265 click: event => { 6266 const frame = window.hyva.modal.peek(); 6267 const dialog = refElement(frame); 6268 if (! frame || ! isLegacyElement(dialog)) { 6269 return; 6270 } 6271 if (frame.time + 50 < Date.now() && ! isOverlayDisabled(dialog) && 6272 ! dialog.contains(event.target) 6273 ) { 6274 frame.instance.hide(); 6275 } 6276 } 6277 }); 6278 6279 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 6280 document.addEventListener('click', window.hyva.modal.eventListeners.click); 6281 6282 window.hyva.modal = new Proxy(window.hyva.modal, { 6283 apply(target, thisArg, args) { 6284 const instance = Reflect.apply(target, thisArg, args); 6285 6286 const originalShow = instance.show; 6287 instance.show = function (dialog, trigger) { 6288 const frameBefore = window.hyva.modal.peek(); 6289 const openerCandidate = document.activeElement; 6290 const result = originalShow.call(this, dialog, trigger); 6291 const frame = window.hyva.modal.peek(); 6292 if (! frame || frame === frameBefore) { 6293 return result; } 6294 const el = refElement(frame); 6295 if (isLegacyElement(el)) { 6296 frame.legacyFocusTarget = openerCandidate; 6297 if (! isOverlayDisabled(el)) { 6298 document.body.classList.add('overflow-hidden'); 6299 this.$nextTick 6300 ? this.$nextTick(() => hyva.trapFocus(el)) 6301 : hyva.trapFocus(el); 6302 } 6303 window.setTimeout(() => { 6304 const focusFirst = el.querySelector('[x-focus-first]'); 6305 focusFirst && focusFirst.focus(); 6306 }, 50); 6307 } 6308 return result; 6309 }; 6310 6311 const originalHide = instance.hide; 6312 instance.hide = function (value) { 6313 const frame = window.hyva.modal.peek(); 6314 const el = refElement(frame); 6315 const wasLegacy = frame && isLegacyElement(el); 6316 const result = originalHide.call(this, value); 6317 if (! wasLegacy || window.hyva.modal.peek() === frame) { 6318 return result; } 6319 hyva.releaseFocus(el); 6320 6321 const next = window.hyva.modal.peek(); 6322 const nextEl = next ? refElement(next) : null; 6323 if (isLegacyElement(nextEl) && ! isOverlayDisabled(nextEl)) { 6324 hyva.trapFocus(nextEl); 6325 } else { 6326 document.body.classList.remove('overflow-hidden'); 6327 } 6328 6329 const focusTarget = frame.legacyFocusTarget; 6330 focusTarget && window.setTimeout(() =>
6330 focusTarget.focus(), 50); 6331 6332 return result; 6333 }; 6334 6335 return instance; 6336 } 6337 }); 6338 })(); 6339</script>
vendor: 1 bytes, line 6339
6339
6340<script> 6341 function dispatchMessages(messages, hideAfter) { 6342 const messagesEvent = new CustomEvent("messages-loaded", { 6343 detail: { 6344 messages: messages, 6345 hideAfter: hideAfter 6346 } 6347 }); 6348 window.dispatchEvent(messagesEvent); 6349 } 6350 6351 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 6352 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 6353 } 6354 6355 (function( hyva, undefined ) { 6356 6357 hyva.initFormKey = () => { 6358 if (typeof hyva.getFormKey !== 'function') return; 6359 6360 const formKey = hyva.getFormKey(); 6361 if (!formKey) return; 6362 6363 document.querySelectorAll('input[name="form_key"]').forEach((input) => { 6364 input.value = formKey; 6365 }); 6366 } 6367 6368 hyva.initMessages = () => { 6369 try { 6370 const messages = hyva.getCookie('mage-messages'); 6371 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 6372 6373 dispatchMessages(window.mageMessages); 6374 6375 // empty `mage-messages` cookie 6376 const skipSetDomain = true; 6377 hyva.setCookie('mage-messages','', -1, skipSetDomain); 6378 6379 } catch (error) { 6380 console.warn('Error parsing Cookie Messages:', error); 6381 } 6382 } 6383 6384 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 6385 6386 window.addEventListener('pageshow', (event) => { 6387 if (event.persisted) { 6388 hyva.initFormKey(); 6389 } 6390 }); 6391 6392 hyva.alpineInitialized(hyva.initMessages) 6393 }( window.hyva = window.hyva || {} )); 6394 //# sourceURL=hyva-cookies.js 6395</script>
vendor: 1 bytes, line 6395
6395
6396<script> 6397 (() => { 6398 const private_content_key = 'mage-cache-storage'; 6399 const private_content_expire_key = 'mage-cache-timeout'; 6400 const private_content_version_key = 'private_content_version'; 6401 const section_data_ids_key = 'section_data_ids'; 6402 const mage_cache_session_id_key = 'mage-cache-sessid'; 6403 const last_visited_store_key = 'last_visited_store'; 6404 6405 const ttl = 3600; 6406 6407 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 6408 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 6409 } 6410 6411 function loadSectionData () { 6412 const browserStorage = hyva.getBrowserStorage(); 6413 if (!browserStorage) { 6414 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 6415 [{ 6416 type: "warning", 6417 text: "Bitte aktivieren Sie LocalStorage in Ihrem Browser." 6418 }] 6419 ); 6420 return; 6421 } 6422 try { 6423 let isInvalid = false; 6424 6425 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 6426 isInvalid = true; 6427 } 6428 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 6429 6430 if (!hyva.getCookie(mage_cache_session_id_key)) { 6431 isInvalid = true; 6432 browserStorage.removeItem(private_content_key); 6433 const skipSetDomain = true; 6434 const days = false; 6435 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 6436 } 6437 6438 const cookieVersion = hyva.getCookie(private_content_version_key); 6439 const storageVersion = browserStorage.getItem(private_content_version_key); 6440 6441 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 6442 isInvalid = true; 6443 } 6444 6445 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 6446 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 6447 browserStorage.removeItem(private_content_key); 6448 } 6449 6450 if (isInvalid && cookieVersion) { 6451 fetchPrivateContent([]); 6452 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 6453 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 6454 if ( 6455 privateContent && 6456 privateContentExpires && 6457 privateContent.cart && 6458 privateContent.customer 6459 ) { 6460 dispatchPrivateContent(privateContent); 6461 } else { 6462 fetchPrivateContent([]); 6463 } 6464 } else { 6465 if (document.getElementById('default-section-data')) { 6466 const privateContent = JSON.parse(document.getElementById('default-section-data').textContent.trim()); 6467 dispatchPrivateContent(privateContent); 6468 } else { 6469 dispatchPrivateContent({}); 6470 } 6471 } 6472 6473 } catch (error) { 6474 console.warn('Error retrieving Private Content:', error); 6475 } 6476 } 6477 6478 hyva.alpineInitialized(loadSectionData) 6479 window.addEventListener('reload-customer-section-data', loadSectionData); 6480 6481 window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data); 6482 6483 function dispatchPrivateContent(data) { 6484 6485 const privateContentEvent = new CustomEvent("private-content-loaded", { 6486 detail: { 6487 data: window.processSectionDataBeforeDispatch(data) 6488 } 6489 }); 6490 window.dispatchEvent(privateContentEvent); 6491 } 6492 6493 function fetchPrivateContent(sections) { 6494 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 6495 method: 'GET', 6496 headers: { 6497 'Content-Type': 'application/json', 6498 'X-Requested-With': 'XMLHttpRequest' 6499 } 6500 }) 6501 .then(response => response.ok && response.json()) 6502 .then( 6503 data => { 6504 if (data) { 6505 try { 6506 const browserStorage = hyva.getBrowserStorage(); 6507 6508 // merge new data preserving non-invalidated sections 6509 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 6510 6511 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 6512 delete oldSectionData['checkout-data']; 6513 } 6514 const newSectionData = Object.assign(oldSectionData, data); 6515 6516 dispatchPrivateContent(newSectionData); 6517 6518 // don't persist messages, they've been dispatched already 6519 if (newSectionData.messages && newSectionData.messages.messages ) { 6520 newSectionData.messages.messages = []; 6521 } 6522 6523 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 6524 6525 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 6526 browserStorage.setItem(private_content_expire_key, expiresAt); 6527 6528 const newCookieVersion = hyva.getCookie(private_content_version_key); 6529 browserStorage.setItem(private_content_version_key, newCookieVersion); 6530 6531 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 6532 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 6533 hyva.setCookie( 6534 section_data_ids_key, 6535 JSON.stringify( 6536 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 6537 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 6538 return sectionDataIds; 6539 }, {}) 6540 ), 6541 false, 6542 true 6543 ); 6544 } catch (error) { 6545 console.warn("Couldn't store privateContent", error); 6546 } 6547 } 6548 } 6549 ) 6550 .catch(error => { 6551 console.warn("Couldn't fetch privateContent", error); 6552 }); 6553 } 6554 })(); 6555 //# sourceURL=hyva-private-content.js 6556</script>
vendor: 1 bytes, line 6556
6556
6557<script> 6558 (() => { 6559 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 6560 })() 6561</script>
vendor: 1 bytes, line 6561
6561
6562<script> 6563 (events => { 6564 const dispatchUserInteractionEvent = () => { 6565 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 6566 window.dispatchEvent(new Event('init-external-scripts')) 6567 }; 6568 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 6569 })(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown']); 6570 //# sourceURL=hyva-init-external-scripts.js 6571</script>
vendor: 1 bytes, line 6571
6571
6572<script> 6573 function initConfigurableOptions(productId, optionConfig) { 6574 6575 function findPathParam(key) { 6576 const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL; 6577 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 6578 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 6579 for (let i = 0; i < pathParts.length; i += 2) { 6580 if (pathParts[i] === key && pathParts.length > i) { 6581 return pathParts[i + 1]; 6582 } 6583 } 6584 } 6585 6586 return { 6587 optionConfig, 6588 productId, 6589 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 6590 allowedAttributeOptions: [], 6591 selectedValues: [], 6592 selectedOptions: {}, 6593 init() { 6594 this.baseInit(); 6595 }, 6596 baseInit() { 6597 this.buildLookupMap(); 6598 this.findAllowedAttributeOptions(); 6599 this.$nextTick(() => { 6600 if (typeof this.optionConfig.defaultValues === 'object') { 6601 for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) { 6602 this.changeOption(attributeId, value + ''); 6603 } 6604 } 6605 this.applyCheckedState(); 6606 }); 6607 }, 6608 applyCheckedState() { 6609 this.$root.querySelectorAll('input[data-attribute-id], select[data-attribute-id]').forEach(el => { 6610 const val = this.selectedValues[el.dataset.attributeId]; 6611 if (!val) return; 6612 if (el.tagName === 'SELECT') { 6613 el.value = val; 6614 this.selectedOptions[el.dataset.attributeId] = el.options[el.selectedIndex]?.text || ''; 6615 } else if (el.value === val && this.optionIsActive(el.dataset.attributeId, el.value)) { 6616 el.checked = true; 6617 this.selectedOptions[el.dataset.attributeId] = el.dataset.optionLabel || ''; 6618 } 6619 }); 6620 }, 6621 productIndex: 0, 6622 productIndexForPrice: 0, 6623 productIndexesMap: null, 6624 productIndexesKeys: null, 6625 attributeCount: 0, 6626 optionIsActive(attributeId, optionId) { 6627 return !!this.getAllowedAttributeOptions(attributeId).find( 6628 option => option.id === optionId 6629 ) 6630 }, 6631 optionIsDisabled() { 6632 const attributeId = this.$el.dataset.attributeId; 6633 if (!attributeId) { 6634 throw new Error('data-attribute-id missing, in item template'); 6635 } 6636 return !this.optionIsActive(attributeId, this.$el.value); 6637 }, 6638 findSimpleIndex() { 6639 this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); 6640 this.productIndexForPrice = this.findCheapestProductForPartialSelection(this.selectedValues); 6641 }, 6642 calculateSimpleIndexForPartialSelection(selectedValues) { 6643 if (selectedValues.length === 0) return 0; 6644 return this.findProductIdsForPartialSelection(selectedValues)[0]; 6645 }, 6646 buildLookupMap() { 6647 this.productIndexesMap = new Map(); 6648 this.attributeCount = Object.keys(this.optionConfig.attributes).length; 6649 for (const id in this.optionConfig.index) { 6650 const options = this.optionConfig.index[id]; 6651 if (! this.productIndexesKeys) { 6652 this.productIndexesKeys = Object.keys(options).sort(); 6653 } 6654 const key = JSON.stringify(options, this.productIndexesKeys); 6655 this.productIndexesMap.set(key, id); 6656 } 6657 }, 6658 findAllowedAttributeOptions() { 6659 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 6660 }, 6661 calculateAllowedAttributeOptions(selectedValues) { 6662 const allAttributes = this.optionConfig.attributes; 6663 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 6664 return a.position - b.position 6665 }); 6666 6667 const newAllowedAttributeOptions = []; 6668 6669 allAttributesSorted.forEach(attribute => { 6670 const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id)); 6671 const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr); 6672 newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { 6673 return !!option.products.find(product => { 6674 return availableIndexes.includes(product); 6675 }) 6676 }); 6677 }); 6678 return newAllowedAttributeOptions; 6679 }, 6680 calculateAvailableProductIndexes(selectedOptions) { 6681 if (Object.keys(selectedOptions).length === 0) { 6682 if (Object.values(this.optionConfig.salable || {}).length) { 6683 return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i) 6684 } 6685 return Object.keys(this.optionConfig.index); 6686 } 6687 6688 const selectedIds = Object.keys(selectedOptions); 6689 if (Object.values(this.optionConfig.salable || {}).length) { 6690 const selectedOptionIndexes = selectedIds.map(attrId => { 6691 const optionValue = selectedOptions[attrId]; 6692 return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] 6693 }) 6694 return selectedOptionIndexes.reduce((acc, optionIndexes) => { 6695 return acc.filter(index => optionIndexes.includes(index)); 6696 }); 6697 } else { 6698 const productIndexes = this.optionConfig.index; 6699 return Object.keys(productIndexes).filter(index => { 6700 for (const attrId of selectedIds) { 6701 if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false 6702 } 6703 return true 6704 }); 6705 } 6706 }, 6707 findAttributeByOptionId(optionId) { 6708 for (const attributeId in this.optionConfig.attributes) { 6709 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 6710 if (attributeOptions.find(option => option.id === optionId)) { 6711 return attributeId; 6712 } 6713 } 6714 }, 6715 getAllowedAttributeOptions(attributeId) { 6716 return this.allowedAttributeOptions[attributeId] || [] 6717 }, 6718 getAllAttributeOptions(attributeId) { 6719 return ( 6720 this.optionConfig.attributes[attributeId] && 6721 this.optionConfig.attributes[attributeId].options 6722 ) || [] 6723 }, 6724 getProductIdsForOption(option) { 6725 const attributeId = this.findAttributeByOptionId(option.id); 6726 const allOptions = this.optionConfig.attributes[attributeId]; 6727 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 6728 return opt && opt.products 6729 ? opt.products 6730 : []; 6731 }, 6732 findProductIdsForPartialSelection(optionSelection) { 6733 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 6734 const newCandidates = this.getProductIdsForOption({id: optionId}); 6735 return candidates === null 6736 ? newCandidates 6737 : candidates.filter(productId => newCandidates.includes(productId)); 6738 }, null); 6739 return candidateProducts || []; 6740 },
6741 findCheapestProductForPartialSelection(optionSelection) { 6742 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 6743 return candidateProducts.reduce((cheapest, simpleIdx) => { 6744 // in the first iteration we start with simpleIdx as the currently cheapest product 6745 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 6746 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 6747 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 6748 ? simpleIdx 6749 : cheapest; 6750 }, 0) 6751 }, 6752 removeAttrFromSelection(selectedValues, attributeId) { 6753 attributeId = parseInt(attributeId); 6754 return selectedValues.reduce((newSelection, val, attr) => { 6755 if (attr !== attributeId) { 6756 newSelection[attr] = val; 6757 } 6758 return newSelection; 6759 }, []); 6760 }, 6761 reflectOption(event) { 6762 const attributeId = event.target.dataset.attributeId; 6763 const label = event.target.dataset.optionLabel 6764 || event.target.options?.[event.target.selectedIndex]?.text 6765 || ''; 6766 this.selectedOptions[attributeId] = label; 6767 this.changeOption(attributeId, event.target.value); 6768 }, 6769 baseChangeOption(attributeId, value) { 6770 if (value === '') { 6771 this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId) 6772 } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) { 6773 this.selectedValues[attributeId] = value; 6774 } 6775 this.findSimpleIndex(); 6776 this.findAllowedAttributeOptions(); 6777 this.updatePrices(); 6778 this.updateGallery(); 6779 }, 6780 changeOption(attributeId, value) { 6781 this.baseChangeOption(attributeId, value); 6782 6783 const candidates = this.findProductIdsForPartialSelection(this.selectedValues); 6784 6785 window.dispatchEvent( 6786 new CustomEvent( 6787 'configurable-selection-changed', 6788 { 6789 detail: { 6790 productId: this.productId, 6791 optionId: attributeId, 6792 value: value, 6793 productIndex: this.productIndex, 6794 selectedValues: this.selectedValues, 6795 candidates: candidates, 6796 skuCandidates: Object.values(candidates).map(id => this.optionConfig.sku?.[id] ?? null).filter(Boolean), 6797 } 6798 } 6799 ) 6800 ); 6801 }, 6802 calculateIsMinimalPrice() { 6803 return ! this.isFullSelection(this.selectedValues); 6804 }, 6805 isFullSelection(selectedValues) { 6806 return Object.keys(selectedValues).length === this.attributeCount; 6807 }, 6808 updatePrices() { 6809 const value = this.optionConfig.optionPrices[this.productIndexForPrice] || this.optionConfig.prices; 6810 window.dispatchEvent( 6811 new CustomEvent( 6812 "update-prices-" + this.productId, 6813 { 6814 detail: Object.assign( 6815 value, 6816 { isMinimalPrice: this.calculateIsMinimalPrice() } 6817 ) 6818 } 6819 ) 6820 ); 6821 }, 6822 updateGallery () { 6823 if (this.productIndex) { 6824 const images = this.optionConfig.images[this.productIndex]; 6825 images && window.dispatchEvent(new CustomEvent( 6826 "update-gallery", 6827 { detail: this.sortImagesByPosition(images) } 6828 )); 6829 } else { 6830 window.dispatchEvent(new Event("reset-gallery")); 6831 } 6832 }, 6833 sortImagesByPosition(images) { 6834 return images.sort((x, y) => { 6835 return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) 6836 }); 6837 }, 6838 preselectQuerystringItems() { 6839 // pre-select option like ?size=167 6840 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 6841 this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code)); 6842 }, 6843 preselectLocationHashItems() { 6844 // pre-select option like #144=167 6845 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 6846 this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id)); 6847 }, 6848 preselectItemsBasedOnLocation(getLocationValue) { 6849 Object.values(this.optionConfig.attributes).map(attribute => { 6850 const v = getLocationValue(attribute); 6851 v && this.changeOption(attribute.id, v) 6852 }); 6853 }, 6854 findProductForOptionPrice(attributeId, value) { 6855 const options = this.optionConfig.attributes[attributeId]?.options || []; 6856 const option = options.find(o => o.id === value); 6857 if (!option?.products?.length) return null; 6858 return option.products.reduce((cheapest, productId) => { 6859 if (!cheapest) return productId; 6860 const cheapestPrice = this.optionConfig.optionPrices[cheapest]?.finalPrice?.amount ?? Infinity; 6861 const thisPrice = this.optionConfig.optionPrices[productId]?.finalPrice?.amount ?? Infinity; 6862 return thisPrice < cheapestPrice ? productId : cheapest; 6863 }, null); 6864 }, 6865 getOptionLabel() { 6866 const value = this.$el.value; 6867 const attributeId = this.$el.dataset.attributeId; 6868 const label = this.$el.dataset.optionLabel || ''; 6869 if (!value || !attributeId) return label; 6870 6871 const productId = this.findProductForOptionPrice(attributeId, value); 6872 if (!productId) return label; 6873 6874 const optionPrice = this.optionConfig.optionPrices[productId]?.finalPrice?.amount; 6875 const basePrice = this.optionConfig.prices?.finalPrice?.amount; 6876 if (optionPrice == null || basePrice == null) return label; 6877 6878 const adjustment = optionPrice - basePrice; 6879 if (Math.abs(adjustment) < 0.001) return label; 6880 6881 const formatted = hyva.formatPrice(Math.abs(adjustment)); 6882 return `${label} (${adjustment > 0 ? '+' : '-'}${formatted})`; 6883 }, 6884 } 6885 } 6886</script>
vendor: 1 bytes, line 6886
6886
6887<script> 6888 function initSwatchOptions() { 6889 return { 6890 activeTooltipItem: false, 6891 tooltipPositionElement: false, 6892 isTooltipVisible() { 6893 return !!this.activeTooltipItem; 6894 }, 6895 isCurrentTooltipVisual() { 6896 return this.activeTooltipItem && ['color', 'image'].includes(this.activeTooltipItem.type); 6897 }, 6898 getTooltipImageStyle() { 6899 const item = this.activeTooltipItem; 6900 if (item?.type === 'color') return { 6901 backgroundColor: item.preview, 6902 width: `${item.width ?? 90}px`, 6903 height: `${item.height ?? 90}px` 6904 }; 6905 if (item?.type === 'image') return { 6906 backgroundImage: `url(${item.preview})`, 6907 backgroundSize: 'cover', 6908 backgroundPosition: 'center', 6909 backgroundRepeat: 'no-repeat', 6910 width: `${item.width ?? 90}px`, 6911 height: `${item.height ?? 90}px` 6912 }; 6913 return null; 6914 }, 6915 getTooltipPosition() { 6916 if (!this.tooltipPositionElement) return null; 6917 const el = this.tooltipPositionElement; 6918 const elRect = el.getBoundingClientRect(); 6919 const left = elRect.left + elRect.width / 2; 6920 6921 return { 6922 bottom: `${window.innerHeight - elRect.top}px`, 6923 left: `${left}px`, 6924 translate: '-50% 0' 6925 }; 6926 }, 6927 getTooltipLabel() { 6928 return this.activeTooltipItem ? this.activeTooltipItem.label : ''; 6929 }, 6930 showTooltip(event) { 6931 if (!window.matchMedia('(hover: hover) and (pointer: fine)').matches) return; 6932 const input = event.currentTarget.querySelector('input'); 6933 this.activeTooltipItem = JSON.parse(input.dataset.tooltip); 6934 this.tooltipPositionElement = event.currentTarget; 6935 }, 6936 hideTooltip() { 6937 this.activeTooltipItem = false; 6938 }, 6939 } 6940 } 6941</script>
6941 6942 6943<div 6944 class="z-30 fixed bottom-6 sm:bottom-12 lg:bottom-16 right-4 sm:left-auto sm:right-8 md:right-12 lg:right-20 scrollToTop" 6945 x-data="initScrollToTop()" 6946 x-cloak 6947 x-show="visible" 6948 x-transition.duration.250ms 6949 @scroll.window.throttle.50ms="scrollPosition = document.documentElement.scrollTop" 6950 @scroll.window.debounce.4000ms="visible = false" 6951 > 6952 <button 6953 type="button" 6954 class="btn justify-center rounded-full mx-auto p-3 text-base shadow-lg hover:shadow-lg active:shadow transition 6955 bg-white text-blue-700 border border-transparent hover:bg-white focus:ring-blue-200" 6956 @click="scrollToTop()" 6957 aria-label="Scroll back to the top of the page" 6958 > 6959 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 6960 <path stroke-linecap="round" stroke-linejoin="round" d="M5 10l7-7m0 0l7 7m-7-7v18"/> 6961<title>Scroll back to the top of the page</title></svg> 6962 </button> 6963 6964
6964<script> 6965 function initScrollToTop() { 6966 return { 6967 visible: false, 6968 scrollOffset: 200, 6969 scrollPosition: 0, 6970 init() { 6971 scrollPosition = document.documentElement.scrollTop; 6972 this.$watch('scrollPosition', (pos, prevPos) => { 6973 this.visible = pos > this.scrollOffset && pos < prevPos; 6974 }); 6975 }, 6976 scrollToTop() { 6977 this.visible = false; 6978 document.documentElement.scrollIntoView({ behavior: 'smooth' }) 6979 }, 6980 } 6981 } 6982 </script>
6982 6983</div> 6984 6985 6986<div x-data="initCookieBarSettings" x-bind="eventListeners"> 6987 <dialog 6988 x-ref="am-cookie-bar-settings" 6989 data-dialog-ref-name="am-cookie-bar-settings" 6990 aria-label="Cookie Bar Settings" 6991 closeby="any" 6992 class="open:flex flex-col relative max-h-screen overflow-auto max-w-[90vw] shadow-xl rounded-lg p-10 text-gray-700 6993 bg-ambar-settings-bar-group-background backdrop:bg-gray-500/50 am-cookie-bar-settings" 6994 x-bind="dialogConfig" 6995 x-htmldialog="hideHandler" 6996 > 6997 <button @click="hideHandler" 6998 aria-label="Close Cookie Bar Settings" 6999 x-ref="ambar-settings-close" 7000 class="absolute right-2 top-2 text-gray-300 transition 7001 hover:text-black focus:drop-shadow-md hover:drop-shadow-md"> 7002 <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" 7003 stroke="currentColor" 7004 stroke-width="2"> 7005 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 7006 </svg> 7007 </button> 7008 <div id="cookiebar-groups"> 7009 7010<div x-data="initAmCookieGroups" class="w-full flex flex-col"> 7011 <template x-for="group in $store.AmastyCookieGroups.groupData" :key="group.groupId"> 7012 <div class="mb-2"> 7013 <div class="header flex justify-between items-start py-2"> 7014 <h3 class="text-lg font-semibold pr-6 ambar-group-title text-ambar-settings-bar-group-title" x-text="group.name"></h3> 7015 <div> 7016 <input type="checkbox" 7017 :name="getInputGroupId" 7018 data-group-prefix="classic-" 7019 @change="toggleGroup" 7020 :checked="group.checked" 7021 :aria-checked="group.checked" 7022 :id="getInputGroupId" 7023 :disabled="group.isEssential" 7024 :value="group.groupId" 7025 class="amsettings-bar-input-toggle" 7026 :class="getInputStyles" 7027 > 7028 <label data-group-prefix="classic-" 7029 :for="getInputGroupId" class="sr-only" x-text="group.name"> 7030 </label> 7031 </div> 7032 </div> 7033 <p class="py-2 text-sm ambar-group-description text-ambar-settings-bar-group-description" x-html="group.description"></p> 7034 <button class="btn btn-secondary px-4 text-xs mb-4 rounded-xs before:content-none after:content-none" 7035 type="button" 7036 data-dispatch-action="classic-open-am-cookie-group-info" 7037 @click="moreInfoClickHandler"> 7038 <span class="text-ambar-settings-bar-group-links">Mehr Informationen</span> 7039 <span class="sr-only" x-text="moreInformationAboutCookieGroup"></span> 7040 </button> 7041 </div> 7042 </template> 7043</div> 7044 </div> 7045 <div class="w-full flex"> 7046 <button type="button" 7047 class="ambar-action-btn rounded-sm text-center text-sm transition-colors focus:drop-shadow hover:drop-shadow px-2 py-4 w-full text-xs font-semibold uppercase bg-ambar-settings-bar-button 7048 hover:bg-ambar-settings-bar-button-hover text-ambar-settings-bar-button-text 7049 hover:text-ambar-settings-bar-button-hover-text" 7050 x-data="initAmCookieActionDispatcherBtn" 7051 @click.prevent="actiondispatchHandler" 7052 x-ref="ambar-settings-done" 7053 data-dispatch-action="cookiebar-action-accept" 7054 data-dispatch-payload='{"include_checked_groups":true}' 7055 > 7056 Fertig </button> 7057 </div> 7058 <dialog> 7059 </div> 7060
7061<script data-cfasync="false"> 7062 'use strict'; 7063 7064 function initCookieBarSettings() { 7065 return { 7066 ...hyva.modal({ 7067 dialog: 'am-cookie-bar-settings' 7068 }), 7069 eventListeners: { 7070 ['@close-am-cookie-bar-settings.window']() { 7071 this.hideHandler(); 7072 }, 7073 ['@open-am-cookie-bar-settings.window']() { 7074 !this.opened['am-cookie-bar-settings'] && 7075 this.show('am-cookie-bar-settings'); 7076 }, 7077 ['@cookiebar-action-accept-finish.window']() { 7078 this.hideHandler(); 7079 } 7080 }, 7081 hideHandler: function () { 7082 !!this.opened['am-cookie-bar-settings'] && 7083 this.hide('am-cookie-bar-settings'); 7084 }, 7085 focusDoneButton: function () { 7086 this.$refs['ambar-settings-done']?.focus(); 7087 }, 7088 focusCloseButton: function () { 7089 this.$refs['ambar-settings-close']?.focus(); 7090 } 7091 } 7092 } 7093 7094 window.addEventListener('alpine:init', () => Alpine.data('initCookieBarSettings', initCookieBarSettings), { once: true }); 7095</script>
7095 7096 7097<div x-data="initCookieGroupInfo_6ab51c700597e" x-bind="eventListeners"> 7098 <dialog 7099 x-ref="am-cookie-group-info" 7100 data-dialog-ref-name="am-cookie-group-info" 7101 aria-labelledby="amcookie-group-info" 7102 closeby="any" 7103 class="open:flex flex-col max-h-[92vh] max-w-[90vw] overflow-auto 7104 bg-ambar-info-bar-background shadow-xl rounded-lg p-8 text-gray-700 relative backdrop:bg-gray-500/50" 7105 x-bind="dialogConfig" 7106 x-htmldialog="closeHandler" 7107 > 7108 <template x-if="group"> 7109 <div id="amcookie-group-info"> 7110 <button @click.stop="closeHandler" 7111 aria-label="Schließen" 7112 class="absolute right-2 top-2 text-gray-300 transition 7113 hover:text-black focus:drop-shadow-md hover:drop-shadow-md" 7114 > 7115 <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" 7116 stroke="currentColor" 7117 stroke-width="2"> 7118 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 7119 </svg> 7120 </button> 7121 <div class="md:flex md:justify-start pb-4"> 7122 <h3 class="text-xl font-semibold text-ambar-info-bar-title" x-text="group.name"></h3> 7123 </div> 7124 <template x-if="group.description"> 7125 <p class="mb-4 text-ambar-info-bar-description" x-html="group.description"></p> 7126 </template> 7127 <div class="overflow-x-scroll md:overflow-x-auto"> 7128 <table class="table-auto w-full mb-4 text-left"> 7129 <thead class="text-ambar-info-bar-table-header"> 7130 <tr> 7131 <th class="pr-4">Cookie-Name</th> 7132 <th class="pr-4">Cookie-Anbieter</th> 7133 <th class="min-w-[30%] pr-4">Cookie Beschreibung</th> 7134 <th class="pr-4">Cookie-Lebensdauer</th> 7135 <th class="pr-4">Cookie Typ</th> 7136 </tr> 7137 </thead> 7138 <tbody class="text-ambar-info-bar-table-content"> 7139 <template x-for="(item, index) in group.cookies" :key="index"> 7140 <tr> 7141 <td x-text="item.name" class="font-semibold pr-4"></td> 7142 <td x-text="item.provider" class="pr-4"></td> 7143 <td x-html="item.description" class="min-w-[30%] pr-4"></td> 7144 <td x-text="item.lifetime" class="pr-4"></td> 7145 <td x-text="item.type" class="pr-4"></td> 7146 </tr> 7147 </template> 7148 </tbody> 7149 </table> 7150 </div> 7151 </div> 7152 </template> 7153 <button 7154 @click.stop="closeHandler" 7155 aria-label="Fertig" 7156 class="mt-4 w-full text-xs font-semibold text-ambar-info-bar-button-text 7157 hover:text-ambar-info-bar-button-hover-text uppercase bg-ambar-info-bar-button 7158 hover:bg-ambar-info-bar-button-hover ambar-action-btn rounded-sm text-center text-sm transition-colors focus:drop-shadow hover:drop-shadow px-2 py-4" 7159 > 7160 Fertig </button> 7161 </dialog> 7162 7163</div>
7164<script data-cfasync="false"> 7165 'use strict'; 7166 7167 function initCookieGroupInfo_6ab51c700597e() { 7168 return { 7169 ...hyva.modal({ 7170 dialog: 'am-cookie-group-info' 7171 }), 7172 group: null, 7173 eventListeners: { 7174 ['@close-am-cookie-group-info.window']() { 7175 this.closeHandler(); 7176 }, 7177 ['@open-am-cookie-group-info.window'](event) { 7178 this.group = event.detail; 7179 7180 if (!!this.group) { 7181 /* 7182 If modal have big cookies list this can lead to 7183 trigger hide event in hyva.modal.eventListeners.click, 7184 so we should wait till this.group is reassigned 7185 */ 7186 this.$nextTick(() => this.show('am-cookie-group-info')); 7187 } 7188 } 7189 }, 7190 closeHandler: function () { 7191 this.hide('am-cookie-group-info'); 7192 } 7193 } 7194 } 7195 7196 window.addEventListener( 7197 'alpine:init', 7198 () => Alpine.data( 7199 'initCookieGroupInfo_6ab51c700597e', 7200 initCookieGroupInfo_6ab51c700597e ), 7201 {once: true} 7202 ); 7203</script>
7203 7204
7205<script data-cfasync="false"> 7206 'use strict'; 7207 7208 /** 7209 * @typedef {Object} CookieGroupData 7210 * @prop {Boolean} checked 7211 * @prop {[{description: string, lifetime: number|null, name: string, provider: string, type: string}]} cookies 7212 * @prop {String} description 7213 * @prop {string|null} groupId 7214 * @prop {Boolean} isEssential 7215 * @prop {String} name 7216 */ 7217 7218 function initAmastyCookieGroupsStorage() { 7219 return { 7220 /** 7221 * @type {[CookieGroupData]} 7222 */ 7223 groupData: [], 7224 cookiePolicy: undefined, 7225 lastUpdate: undefined, 7226 7227 /** 7228 * @returns {string|number[]} 7229 */ 7230 getEssentialGroupIds: function () { 7231 return this.groupData.reduce(function (essentialGroupIds, group) { 7232 if (group.isEssential) { 7233 essentialGroupIds.push(group.groupId) 7234 } 7235 7236 return essentialGroupIds; 7237 }, []); 7238 }, 7239 7240 /** 7241 * @returns {string|number[]} 7242 */ 7243 getCheckedGroupIds: function () { 7244 return this.groupData.reduce(function (checkedGroupIds, group) { 7245 if (group.checked) { 7246 checkedGroupIds.push(group.groupId); 7247 } 7248 7249 return checkedGroupIds; 7250 }, []); 7251 }, 7252 7253 /** 7254 * @param {string} cookieName 7255 * @returns {boolean} 7256 */ 7257 isCookieEssential: function (cookieName) { 7258 const allEssentialCookies = this.getEssentialCookies(); 7259 7260 return !!allEssentialCookies.find(cookie => cookie.name === cookieName); 7261 }, 7262 7263 /** 7264 * @returns {array} 7265 */ 7266 getEssentialCookies: function () { 7267 return this.groupData 7268 .filter(group => group.isEssential) 7269 .map(group => group.cookies) 7270 .flat(); 7271 }, 7272 7273 /** 7274 * @returns {boolean} 7275 */ 7276 hasGroupData: function () { 7277 return !!this.groupData.length; 7278 }, 7279 7280 /** 7281 * @param {string} cookieName 7282 * @param {string} pattern 7283 * @returns {boolean} 7284 */ 7285 isEssentialByPattern: function (cookieName, pattern) { 7286 const essentialCookiePatterns = this.getEssentialCookiesPattern(pattern); 7287 7288 return essentialCookiePatterns.some((pattern) => !!cookieName.match(this.getCookiePattern(pattern))); 7289 }, 7290 7291 /** 7292 * @param {string} pattern 7293 * @return {Array} 7294 */ 7295 getEssentialCookiesPattern: function (pattern) { 7296 return this.getCookiesByPattern(pattern, this.getEssentialCookies()); 7297 }, 7298 7299 /** 7300 * @param {string} pattern 7301 * @param {Array|undefined} cookies 7302 * @return {Array} 7303 */ 7304 getCookiesByPattern: function (pattern, cookies) { 7305 if (typeof cookie === 'undefined') { 7306 cookies = this.getAllCookies(); 7307 } 7308 7309 return cookies
7310 .map((cookie) => typeof cookie === 'object' ? cookie.name : cookie.split('=')[0].trim()) 7311 .filter((cookie) => cookie.match(pattern) !== null); 7312 }, 7313 7314 /** 7315 * @returns {array} 7316 */ 7317 getDisallowedCookies: function () { 7318 const disallowedCookie = decodeURIComponent(hyva.getCookie('amcookie_disallowed') ?? ''); 7319 if (!disallowedCookie) { 7320 return []; 7321 } 7322 7323 return disallowedCookie.split(','); 7324 }, 7325 7326 /** 7327 * @returns {string} 7328 */ 7329 getCookiePattern: function (pattern) { 7330 return `^${pattern.replaceAll('*', '.*')}$`; 7331 }, 7332 7333 /** 7334 * @returns {array} 7335 */ 7336 getAllCookies: function () { 7337 return document.cookie.split(';'); 7338 }, 7339 7340 /** 7341 * @param {Array} groupData 7342 * @returns {array} 7343 */ 7344 updateGroupDataPermanently: function (groupData) { 7345 this.groupData = [...groupData]; 7346 }, 7347 7348 /** 7349 * @param {boolean} setAcceptance 7350 * @returns {Promise} 7351 */ 7352 updateGroupData: function (setAcceptance = false) { 7353 const cookieFetchUrl = `${BASE_URL}amcookie/cookie/cookies`; 7354 const requestUrl = new URL(cookieFetchUrl, window.location.origin); 7355 7356 requestUrl.searchParams.append('allowed', hyva.getCookie('amcookie_allowed')); 7357 requestUrl.searchParams.append('restriction', hyva.getCookie('amcookie_policy_restriction')); 7358 7359 return fetch(requestUrl.toString(), { 7360 method: "GET", 7361 headers: { 7362 'X-Requested-With': 'XMLHttpRequest' 7363 } 7364 }).then(response => { 7365 if (response.ok) { 7366 return response.json(); 7367 } 7368 7369 return Promise.reject(`${response.status} ${response.statusText}`); 7370 }).then(data => { 7371 this.cookiePolicy = data.cookiePolicy ?? 'allowed'; 7372 this.lastUpdate = data.lastUpdate ?? 0; 7373 this.groupData = [...data.groupData]; 7374 7375 hyva.setCookie('amcookie_policy_restriction', this.cookiePolicy, 10); 7376 if (setAcceptance) { 7377 amastyCookieManager.setLastCookieAcceptance(this.lastUpdate); 7378 } 7379 7380 return data; 7381 }).catch(error => { 7382 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 7383 { 7384 type: "error", 7385 text: error 7386 } 7387 ]); 7388 }).finally(() => window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated'))); 7389 } 7390 } 7391 } 7392 7393 window.addEventListener( 7394 'alpine:init', 7395 () => Alpine.store('AmastyCookieGroups', initAmastyCookieGroupsStorage()), 7396 { once: true } 7397 ); 7398</script>
7398 7399
7400<script data-cfasync="false"> 7401 (function (amastyCookieManager) { 7402 'use strict'; 7403 7404 amastyCookieManager.pattern = '{(?<cookiePattern>.*)}'; 7405 7406 amastyCookieManager.getAmastyCookieGroupStorage = function () { 7407 return Alpine.store('AmastyCookieGroups') ?? {}; 7408 }; 7409 7410 amastyCookieManager.deleteDisallowedCookie = function () { 7411 const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); 7412 const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; 7413 7414 disallowedCookies.forEach((name) => { 7415 const pattern = name.match(this.pattern); 7416 if (!!pattern && !!amastyCookieGroupStorage) { 7417 const cookiePattern = amastyCookieGroupStorage.getCookiePattern(pattern.groups.cookiePattern) ?? ''; 7418 7419 amastyCookieGroupStorage.getCookiesByPattern(cookiePattern).forEach((cookieName) => { 7420 this.deleteNotEssentialCookie(cookieName); 7421 }); 7422 } else { 7423 this.deleteNotEssentialCookie(name); 7424 } 7425 }); 7426 }; 7427 7428 amastyCookieManager.isCookieAllowed = function (cookieName) { 7429 const allowedGroups = hyva.getCookie('amcookie_allowed'); 7430 const disallowedCookie = this.getAmastyCookieGroupStorage()?.getDisallowedCookies() ?? []; 7431 const isCookiePolicyAllowed = hyva.getCookie('amcookie_policy_restriction') === 'allowed'; 7432 const isCookieEssential = this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName); 7433 const isCookieEssentialByPattern = this.getAmastyCookieGroupStorage()?.isEssentialByPattern(cookieName, this.pattern); 7434 7435 if (!isCookiePolicyAllowed || isCookieEssential || isCookieEssentialByPattern) { 7436 return true; 7437 } 7438 7439 return !((!allowedGroups && !disallowedCookie) || this.isCookieDisallowed(cookieName)); 7440 }; 7441 7442 amastyCookieManager.isCookieDisallowed = function (cookieName) { 7443 const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); 7444 const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; 7445 7446 return disallowedCookies.some((cookie) => { 7447 const pattern = cookie.match(this.pattern); 7448 7449 return !!pattern && !!cookieName.match(amastyCookieGroupStorage?.getCookiePattern(pattern.groups.cookiePattern)); 7450 }) || disallowedCookies.indexOf(cookieName) !== -1; 7451 }; 7452 7453 amastyCookieManager.processManageableCookies = function () { 7454 let cookieScripts = document.querySelectorAll('script[data-amcookie-groupid][type="text/plain"]'); 7455 7456 cookieScripts.forEach((elem) => { 7457 if (this.isChecked(elem.dataset['amcookie-groupid'])) { 7458 let elClone = elem.cloneNode(true).setAttribute('type', 'text/javascript'); 7459 7460 elem.remove(); 7461 document.body.appendChild(elClone); 7462 } 7463 }); 7464 }; 7465 7466 amastyCookieManager.deleteNotEssentialCookie = function (cookieName) { 7467 if (!this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName)) { 7468 hyva.setCookie(cookieName, '', -1, true); 7469 } 7470 }; 7471 7472 amastyCookieManager.setLastCookieAcceptance = function (lastUpdate) { 7473 localStorage.setItem('am-last-cookie-acceptance', lastUpdate); 7474 }; 7475 7476 window.addEventListener('amasty-cookie-group-updated', () => { 7477 amastyCookieManager.deleteDisallowedCookie(); 7478 }); 7479 7480 window.addEventListener('private-content-loaded', () => { 7481 amastyCookieManager.getAmastyCookieGroupStorage()?.hasGroupData() && amastyCookieManager.deleteDisallowedCookie(); 7482 }); 7483 }(window.amastyCookieManager = window.amastyCookieManager || {})); 7484</script>
7484 7485
7486<script data-cfasync="false"> 7487 (function () { 7488 'use strict'; 7489 7490 window.addEventListener('cookiebar-action-accept', (event) => { 7491 const groups = event.detail?.include_checked_groups ? Alpine.store('AmastyCookieGroups').getCheckedGroupIds() : []; 7492 const url = `${BASE_URL}amcookie/cookie/savegroups`; 7493 const urlParams = event.detail?.params ?? {}; 7494 const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; 7495 const body = new URLSearchParams({ 7496 form_key: hyva.getFormKey() 7497 }); 7498 groups.length && groups.map(groupId => body.append('groups[]', groupId)); 7499 7500 for (const [key, value] of Object.entries(urlParams)) { 7501 body.append(key, value); 7502 } 7503 7504 fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) 7505 .then(response => { 7506 if (response.ok) { 7507 return response.json(); 7508 } 7509 7510 return Promise.reject(`${response.status} ${response.statusText}`); 7511 }) 7512 .then(data => { 7513 !!data.success && Alpine.store('AmastyCookieGroups').updateGroupData(true); 7514 }) 7515 .catch(error => { 7516 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 7517 { 7518 type: "error", 7519 text: error 7520 } 7521 ]); 7522 }) 7523 .finally(() => { 7524 amastyCookieManager.processManageableCookies(); 7525 window.dispatchEvent(new CustomEvent('cookiebar-action-accept-finish')); 7526 window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated')); 7527 // Wait cookiebar close animation 7528 setTimeout(() => { 7529 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 7530 }, 100); 7531 }); 7532 }); 7533 })(); 7534</script>
7534 7535
7536<script data-cfasync="false"> 7537 (function () { 7538 'use strict'; 7539 7540 window.addEventListener('cookiebar-action-allow', () => { 7541 const url = `${BASE_URL}amcookie/cookie/allow`; 7542 const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; 7543 const body = new URLSearchParams({ 7544 form_key: hyva.getFormKey() 7545 }); 7546 fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) 7547 .then(response => { 7548 if (response.ok) { 7549 return response; 7550 } 7551 7552 return Promise.reject(`${response.status} ${response.statusText}`); 7553 }) 7554 .then(() => { 7555 Alpine.store('AmastyCookieGroups').updateGroupData(true); 7556 }) 7557 .catch(error => { 7558 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 7559 { 7560 type: "error", 7561 text: error 7562 } 7563 ]); 7564 }) 7565 .finally(() => { 7566 amastyCookieManager.processManageableCookies(); 7567 window.dispatchEvent(new CustomEvent('cookiebar-action-allow-finish')); 7568 // Wait cookiebar close animation 7569 setTimeout(() => { 7570 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 7571 }, 100); 7572 }); 7573 }); 7574 })(); 7575</script>
7575 7576
7577<script data-cfasync="false"> 7578 (function () { 7579 'use strict'; 7580 7581 window.addEventListener('cookiebar-action-settings', () => { 7582 window.dispatchEvent(new Event('open-am-cookie-bar-settings')); 7583 }); 7584 })(); 7585</script>
7585 7586 7587<style> 7588 :root { 7589 /* Bar Color Settings */ 7590 --ambar-background: #fff; 7591 --ambar-links-color: #131212; 7592 --ambar-policy-text: #131212; 7593 --ambar-toggle-active-color: #2563eb; 7594 --ambar-toggle-inactive-color: #fff; 7595 7596 /* Buttons Color Settings */ 7597 --ambar-button-accept-color: #00B507; 7598 --ambar-button-accept-hover-color: #337ab7; 7599 --ambar-button-accept-text: #FFFFFF; 7600 --ambar-button-accept-hover-text: #fff; 7601 7602 --ambar-button-allow-color: #FFFFFF; 7603 --ambar-button-allow-hover-color: #337ab7; 7604 --ambar-button-allow-text: #131212; 7605 --ambar-button-allow-hover-text: #fff; 7606 7607 --ambar-button-decline-color: #337ab7; 7608 --ambar-button-decline-hover-color: #337ab7; 7609 --ambar-button-decline-text: #fff; 7610 --ambar-button-decline-hover-text: #fff; 7611 7612 --ambar-button-settings-color: #FFFFFF; 7613 --ambar-button-settings-hover-color: #337ab7; 7614 --ambar-button-settings-text: #131212; 7615 --ambar-button-settings-hover-text: #fff; 7616 7617 /* Buttons Order Settings */ 7618 --ambar-button-accept-order: 0; 7619 --ambar-button-allow-order: 0; 7620 --ambar-button-settings-order: 0; 7621 --ambar-button-decline-order: 0; 7622 7623 /* Cookie Information Bar Color Settings */ 7624 --ambar-information-background: #fff; 7625 --ambar-information-title: #374151; 7626 --ambar-information-description: #374151; 7627 --ambar-information-table-header: #374151; 7628 --ambar-information-table-content: #374151; 7629 7630 /* Cookie Information Bar Done Button Settings */ 7631 --ambar-information-button-color: #1d4ed8; 7632 --ambar-information-button-hover-color: #1d4ed8; 7633 --ambar-information-button-text: #fff; 7634 --ambar-information-button-hover-text: #fff; 7635 7636 /* Settings Bar Done Button Settings */ 7637 --ambar-setting-button-color: #1d4ed8; 7638 --ambar-setting-button-hover-color: #1d4ed8; 7639 --ambar-setting-button-text: #fff; 7640 --ambar-setting-button-hover-text: #fff; 7641 7642 /* cookie_settings_bar_customisation */ 7643 --ambar-setting-bar-group-background: #fff; 7644 --ambar-setting-bar-group-title: #000; 7645 --ambar-setting-bar-group-description: #000; 7646 --ambar-setting-bar-group-links: #326ed1; 7647 } 7648</style> 7649
7650<script data-cfasync="false"> 7651 'use strict'; 7652 7653 function initAmCookieActionDispatcherBtn() { 7654 return { 7655 actiondispatchHandler: function (event) { 7656 const { dispatchAction, dispatchPayload } = event.currentTarget.dataset; 7657 this.$dispatch(dispatchAction, this.parsePayload(dispatchPayload)); 7658 }, 7659 parsePayload: function (payload) { 7660 try { 7661 return JSON.parse(payload); 7662 } catch (e) { 7663 return null; 7664 } 7665 } 7666 }; 7667 } 7668 7669 window.addEventListener( 7670 'alpine:init', 7671 () => Alpine.data('initAmCookieActionDispatcherBtn', initAmCookieActionDispatcherBtn), 7672 { once: true } 7673 ); 7674</script>
7674 7675
7676<script data-cfasync="false"> 7677 'use strict'; 7678 7679 function initAmCookieGroups() { 7680 return { 7681 /** 7682 * @withContext x-for: $store.AmastyCookieGroups.groupData 7683 * @returns {string} 7684 */ 7685 getInputGroupId: function () { 7686 return `amcookie-${this.$el.dataset.groupPrefix}group-${this.group.groupId}` 7687 }, 7688 7689 /** 7690 * @withContext x-for: $store.AmastyCookieGroups.groupData 7691 * @returns {{"!bg-gray-400": boolean}} 7692 */ 7693 getInputStyles: function () { 7694 return { 7695 '!bg-gray-400': this.group.isEssential 7696 } 7697 }, 7698 7699 /** 7700 * @withContext x-for: $store.AmastyCookieGroups.groupData 7701 * @returns {void} 7702 */ 7703 toggleGroup: function () { 7704 this.group.checked = !this.group.checked; 7705 }, 7706 7707 /** 7708 * @withContext x-for: $store.AmastyCookieGroups.groupData 7709 * @returns {void} 7710 */ 7711 moreInfoClickHandler: function () { 7712 this.$dispatch(this.$el.dataset.dispatchAction, this.group); 7713 }, 7714 7715 moreInformationAboutCookieGroup: function () { 7716 return hyva.str('About\u0020\u0022\u00251\u0022\u0020Cookie\u0020Group', this.group.name); 7717 } 7718 } 7719 } 7720 7721 window.addEventListener( 7722 'alpine:init', 7723 () => Alpine.data('initAmCookieGroups', initAmCookieGroups), 7724 {once: true} 7725 ); 7726</script>
vendor: 1 bytes, line 7726
7726
7727<script> 7728 if (window.AmFB) { 7729 (() => { 7730 const gdprListeners = [ 7731 { 7732 event: 'cookiebar-action-accept-finish', 7733 callback: () => window.AmFB.initPixels(), 7734 options: { once: true } 7735 }, 7736 { 7737 event: 'cookiebar-action-allow-finish', 7738 callback: () => window.AmFB.initPixels(), 7739 options: { once: true } 7740 } 7741 ]; 7742 7743 const isAllowedToRunScript = function () { 7744 const facebookPixelCookieName = '_fbp'; 7745 const allowedCookies = hyva.getCookie('amcookie_allowed') || ''; 7746 const disallowedCookies = hyva.getCookie('amcookie_disallowed') || ''; 7747 return !!allowedCookies.length 7748 && (!disallowedCookies || disallowedCookies.indexOf(facebookPixelCookieName) === -1); 7749 }; 7750 7751 window.AmFB.setDataToSection = new Proxy(window.AmFB.setDataToSection, { 7752 apply(target, thisArg, argArray) { 7753 if (isAllowedToRunScript()) { 7754 return target.apply(thisArg, argArray); 7755 } 7756 7757 return { 7758 then: () => {} 7759 } 7760 } 7761 }); 7762 7763 window.AmFB.initPixels = new Proxy(window.AmFB.initPixels, { 7764 apply(target, thisArg, argArray) { 7765 if (isAllowedToRunScript()) { 7766 return target.apply(thisArg, argArray); 7767 } 7768 } 7769 }); 7770 7771 window.AmFB = new Proxy(window.AmFB, { 7772 get(target, prop, receiver) { 7773 if (prop === 'listeners') { 7774 return [...Reflect.get(...arguments), ...(gdprListeners)]; 7775 } 7776 7777 return Reflect.get(...arguments); 7778 } 7779 }); 7780 })(); 7781 } 7782</script>
vendor: 1 bytes, line 7782
7782
7783<script> 7784 'use strict'; 7785 7786 (function () { 7787 document.querySelectorAll('[data-amcookie-js="footer-link"]').forEach(link => { 7788 link.addEventListener('click', function (event) { 7789 event.preventDefault(); 7790 window.dispatchEvent(new CustomEvent('cookiebar-action-settings')); 7791 }); 7792 }); 7793 })(); 7794</script>
vendor: 1 bytes, line 7794
7794
7795<script type="text/json" id="default-section-data"> 7796 {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"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"}}},"data_id":1790254192},"captcha":[],"instant-purchase":[],"loggedAsCustomer":[],"persistent":[],"review":[],"payments":[],"wishlist":{"items":[]},"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"paypal-buyer-country":[]}</script>
7796 7797</div></body> 7798</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.