1<!doctype html> 2<html lang="en"> 3<head > 4 <meta charset="utf-8"/> 5<meta name="title" content="Partner Login"/> 6<meta name="robots" content="INDEX,FOLLOW"/> 7<meta name="viewport" content="width=device-width, initial-scale=1"/> 8<title>Partner Login</title> 9 <link rel="stylesheet" type="text/css" media="all" href="https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/css/styles.css" /> 10<link rel="stylesheet" type="text/css" media="all" href="https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Mageplaza_Core/css/font-awesome.min.css" /> 11<link rel="stylesheet" type="text/css" media="all" href="https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Mageplaza_Core/css/magnific-popup.css" /> 12<link rel="stylesheet" type="text/css" media="all" href="https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Mageplaza_Core/css/owl.carousel.css" /> 13<link rel="stylesheet" type="text/css" media="all" href="https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/css/instantsearch.css" /> 14<link rel="icon" type="image/x-icon" href="https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Magento_Theme/favicon.ico" /> 15<link rel="shortcut icon" type="image/x-icon" href="https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Magento_Theme/favicon.ico" /> 16<link rel="canonical" href="https://www.eichholtz.com/en/customer/account/login" /> 17<meta name="google-site-verification" content="ps71IjN9FsMnuVk1HTXElHWuYlQy01NSjghptPnj8SY" /> 18<meta name="facebook-domain-verification" content="027mv110qg8dbz1y14kfk9y5ja6m8h" />
19<script id="mcjs">!function(c,h,i,m,p){m=c.createElement(h),p=c.getElementsByTagName(h)[0],m.async=1,m.src=i,p.parentNode.insertBefore(m,p)}(document,"script","https://chimpstatic.com/mcjs-connected/js/users/351f606b4f61d36be7ea82af7/5100132d39227afb599e4008e.js");</script>
19 20 21<style> 22li.level0.shop-by { 23 display: none !important; 24} 25</style> 26<!--a6b4eb93de39ff29a5844878fdb2affe--> 27<!-- Microsoft Clarity Tracking Code -->
28<script type="text/javascript"> 29 (function(c,l,a,r,i,t,y){ 30 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 31 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 32 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 33 })(window, document, "clarity", "script", "siulbybx3a"); 34</script>
34 <link rel="dns-prefetch" href="https://use.typekit.net" /> 35<link rel="preconnect" href="https://use.typekit.net" /> 36<link rel="stylesheet" href="https://use.typekit.net/fov3djr.css" /> 37 <link rel="alternate" hreflang="en" href="https://www.eichholtz.com/en/customer/account/login"/> 38 <link rel="alternate" hreflang="fr" href="https://www.eichholtz.com/fr/customer/account/login"/> 39 <link rel="alternate" hreflang="de" href="https://www.eichholtz.com/de/customer/account/login"/> 40 <link rel="alternate" hreflang="es" href="https://www.eichholtz.com/es/customer/account/login"/> 41 <link rel="alternate" hreflang="en-us" href="https://www.eichholtz.com/usa/customer/account/login"/>
42<script nonce="eGFtYno5eG9uMGRhNG9taXYzamE1N2xvZHM0bjVkbnY="> 43 window.YIREO_GOOGLETAGMANAGER2_ENABLED = true; 44 45 window.addEventListener('init-external-scripts', () => { 46 (function (w, d, s, l, i) { 47 w[l] = w[l] || []; 48 w[l].push({'gtm.start': new Date().getTime(), event: 'gtm.js'}); 49 var f = d.getElementsByTagName(s)[0], 50 j = d.createElement(s), 51 dl = l != 'dataLayer' ? '&l=' + l : ''; 52 j.async = true; 53 j.src = 'https://metrics.eichholtz.com' + '/gtm.js?id=' + i + dl; 54 f.parentNode.insertBefore(j, f); 55 })(window, document, 'script', 'dataLayer', 'GTM-WNN8W7W'); 56 }, {once: true, passive: true}); 57</script>
57 58
59<script> 60 var BASE_URL = 'https://www.eichholtz.com/en/'; 61 var THEME_PATH = 'https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB'; 62 var COOKIE_CONFIG = { 63 "expires": null, 64 "path": "\u002F", 65 "domain": ".eichholtz.com", 66 "secure": true, 67 "lifetime": "36000", 68 "cookie_restriction_enabled": false }; 69 var CURRENT_STORE_CODE = 'en'; 70 var CURRENT_WEBSITE_ID = '1'; 71 72 window.hyva = window.hyva || {} 73 74 window.cookie_consent_groups = window.cookie_consent_groups || {} 75 window.cookie_consent_groups['necessary'] = true; 76 77 window.cookie_consent_config = window.cookie_consent_config || {}; 78 window.cookie_consent_config['necessary'] = [].concat( 79 window.cookie_consent_config['necessary'] || [], 80 [ 81 'user_allowed_save_cookie', 82 'form_key', 83 'mage-messages', 84 'private_content_version', 85 'mage-cache-sessid', 86 'last_visited_store', 87 'section_data_ids' 88 ] 89 ); 90</script>
vendor: 1 bytes, line 90
90
91<script> 92 'use strict'; 93 (function( hyva, undefined ) { 94 95 function lifetimeToExpires(options, defaults) { 96 97 const lifetime = options.lifetime || defaults.lifetime; 98 99 if (lifetime) { 100 const date = new Date; 101 date.setTime(date.getTime() + lifetime * 1000); 102 return date; 103 } 104 105 return null; 106 } 107 108 function generateRandomString() { 109 110 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 111 length = 16; 112 113 let formKey = '', 114 charactersLength = allowedCharacters.length; 115 116 for (let i = 0; i < length; i++) { 117 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 118 } 119 120 return formKey; 121 } 122 123 const sessionCookieMarker = {noLifetime: true} 124 125 const cookieTempStorage = {}; 126 127 const internalCookie = { 128 get(name) { 129 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 130 return v ? v[2] : null; 131 }, 132 set(name, value, days, skipSetDomain) { 133 let expires, 134 path, 135 domain, 136 secure, 137 samesite; 138 139 const defaultCookieConfig = { 140 expires: null, 141 path: '/', 142 domain: null, 143 secure: false, 144 lifetime: null, 145 samesite: 'lax' 146 }; 147 148 const cookieConfig = window.COOKIE_CONFIG || {}; 149 150 expires = days && days !== sessionCookieMarker 151 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 152 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 153 154 path = cookieConfig.path || defaultCookieConfig.path; 155 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 156 secure = cookieConfig.secure || defaultCookieConfig.secure; 157 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 158 159 document.cookie = name + "=" + encodeURIComponent(value) + 160 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 161 (path ? '; path=' + path : '') + 162 (domain ? '; domain=' + domain : '') + 163 (secure ? '; secure' : '') + 164 (samesite ? '; samesite=' + samesite : 'lax'); 165 }, 166 isWebsiteAllowedToSaveCookie() { 167 const allowedCookies = this.get('user_allowed_save_cookie'); 168 if (allowedCookies) { 169 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 170 171 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 172 } 173 return false; 174 }, 175 getGroupByCookieName(name) { 176 const cookieConsentConfig = window.cookie_consent_config || {}; 177 let group = null; 178 for (let prop in cookieConsentConfig) { 179 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 180 if (cookieConsentConfig[prop].includes(name)) { 181 group = prop; 182 break; 183 } 184 } 185 return group; 186 }, 187 isCookieAllowed(name) { 188 const cookieGroup = this.getGroupByCookieName(name); 189 return cookieGroup 190 ? window.cookie_consent_groups[cookieGroup] 191 : this.isWebsiteAllowedToSaveCookie(); 192 }, 193 saveTempStorageCookies() { 194 for (const [name, data] of Object.entries(cookieTempStorage)) { 195 if (this.isCookieAllowed(name)) { 196 this.set(name, data['value'], data['days'], data['skipSetDomain']); 197 delete cookieTempStorage[name]; 198 } 199 } 200 } 201 }; 202 203 hyva.getCookie = (name) => { 204 const cookieConfig = window.COOKIE_CONFIG || {}; 205 206 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 207 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 208 } 209 210 return internalCookie.get(name); 211 } 212 213 hyva.setCookie = (name, value, days, skipSetDomain) => { 214 const cookieConfig = window.COOKIE_CONFIG || {}; 215 216 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 217 cookieTempStorage[name] = {value, days, skipSetDomain}; 218 return; 219 } 220 return internalCookie.set(name, value, days, skipSetDomain); 221 } 222 223 224 hyva.setSessionCookie = (name, value, skipSetDomain) => { 225 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 226 } 227 228 hyva.getBrowserStorage = () => { 229 const browserStorage = window.localStorage || window.sessionStorage; 230 if (!browserStorage) { 231 console.warn('Browser Storage is unavailable'); 232 return false;
233 } 234 try { 235 browserStorage.setItem('storage_test', '1'); 236 browserStorage.removeItem('storage_test'); 237 } catch (error) { 238 console.warn('Browser Storage is not accessible', error); 239 return false; 240 } 241 return browserStorage; 242 } 243 244 hyva.postForm = (postParams) => { 245 const form = document.createElement("form"); 246 247 let data = postParams.data; 248 249 if (! postParams.skipUenc && ! data.uenc) { 250 data.uenc = btoa(window.location.href); 251 } 252 form.method = "POST"; 253 form.action = postParams.action; 254 255 Object.keys(postParams.data).map(key => { 256 const field = document.createElement("input"); 257 field.type = 'hidden' 258 field.value = postParams.data[key]; 259 field.name = key; 260 form.appendChild(field); 261 }); 262 263 const form_key = document.createElement("input"); 264 form_key.type = 'hidden'; 265 form_key.value = hyva.getFormKey(); 266 form_key.name="form_key"; 267 form.appendChild(form_key); 268 269 document.body.appendChild(form); 270 271 form.submit(); 272 } 273 274 hyva.getFormKey = function () { 275 let formKey = hyva.getCookie('form_key'); 276 277 if (!formKey) { 278 formKey = generateRandomString(); 279 hyva.setCookie('form_key', formKey); 280 } 281 282 return formKey; 283 } 284 285 hyva.formatPrice = (value, showSign, options = {}) => { 286 const groupSeparator = options.groupSeparator; 287 const decimalSeparator = options.decimalSeparator 288 delete options.groupSeparator; 289 delete options.decimalSeparator; 290 const formatter = new Intl.NumberFormat( 291 'en\u002DGB', 292 Object.assign({ 293 style: 'currency', 294 currency: 'EUR', 295 signDisplay: showSign ? 'always' : 'auto' 296 }, options) 297 ); 298 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 299 formatter.formatToParts(value).map(({type, value}) => { 300 switch (type) { 301 case 'currency': 302 return '\u20AC' || value; 303 case 'minusSign': 304 return '- '; 305 case 'plusSign': 306 return '+ '; 307 case 'group': 308 return groupSeparator !== undefined ? groupSeparator : value; 309 case 'decimal': 310 return decimalSeparator !== undefined ? decimalSeparator : value; 311 default : 312 return value; 313 } 314 }).reduce((string, part) => string + part) : 315 formatter.format(value); 316 } 317 318 const formatStr = function (str, nStart) { 319 const args = Array.from(arguments).slice(2); 320 321 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 322 const idx = parseInt(n) - nStart; 323 324 if (args[idx] === null || args[idx] === void 0) { 325 return m; 326 } 327 return p.length % 2 328 ? p.slice(0, -1).replace('%%', '%') + args[idx] 329 : p.replace('%%', '%') + n; 330 }) 331 } 332 333 hyva.str = function (string) { 334 const args = Array.from(arguments); 335 args.splice(1, 0, 1); 336 337 return formatStr.apply(undefined, args); 338 } 339 340 hyva.strf = function () { 341 const args = Array.from(arguments); 342 args.splice(1, 0, 0); 343 344 return formatStr.apply(undefined, args); 345 } 346 347 /** 348 * Take a html string as `content` parameter and 349 * extract an element from the DOM to replace in 350 * the current page under the same selector, 351 * defined by `targetSelector` 352 */ 353 hyva.replaceDomElement = (targetSelector, content) => { 354 // Parse the content and extract the DOM node using the `targetSelector` 355 const parser = new DOMParser(); 356 const doc = parser.parseFromString(content, 'text/html');
357 const contentNode = doc.querySelector(targetSelector); 358 359 // Bail if content or target can't be found 360 if (!contentNode || !document.querySelector(targetSelector)) { 361 return; 362 } 363 364 hyva.activateScripts(contentNode); 365 366 // Replace the old DOM node with the new content 367 document.querySelector(targetSelector).replaceWith(contentNode); 368 369 // Reload customerSectionData and display cookie-messages if present 370 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 371 hyva.initMessages(); 372 } 373 374 hyva.removeScripts = (contentNode) => { 375 const scripts = contentNode.getElementsByTagName('script'); 376 for (let i = 0; i < scripts.length; i++) { 377 scripts[i].parentNode.removeChild(scripts[i]); 378 } 379 const templates = contentNode.getElementsByTagName('template'); 380 for (let i = 0; i < templates.length; i++) { 381 const container = document.createElement('div'); 382 container.innerHTML = templates[i].innerHTML; 383 hyva.removeScripts(container); 384 templates[i].innerHTML = container.innerHTML; 385 } 386 } 387 388 hyva.activateScripts = (contentNode) => { 389 // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM. 390 const scripts = Array.from(contentNode.getElementsByTagName('script')); 391 392 // Iterate over all script tags to duplicate+inject each into the head 393 for (const original of scripts) { 394 const script = document.createElement('script'); 395 original.type && (script.type = original.type); 396 script.innerHTML = original.innerHTML; 397 398 // Remove the original (non-executing) script from the contentNode 399 original.parentNode.removeChild(original) 400 401 // Add script to head 402 document.head.appendChild(script); 403 } 404 405 return contentNode; 406 } 407 408 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 409 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 410 411 let currentTrap; 412 413 const focusableElements = (rootElement) => { 414 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 415 return Array.from(rootElement.querySelectorAll(selector)) 416 .filter(el => { 417 return el.style.display !== 'none' 418 && !el.disabled 419 && el.tabIndex !== -1 420 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 421 }) 422 } 423 424 const focusTrap = (e) => { 425 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 426 if (!isTabPressed) return; 427 428 const focusable = focusableElements(currentTrap) 429 const firstFocusableElement = focusable[0] 430 const lastFocusableElement = focusable[focusable.length - 1] 431 432 e.shiftKey 433 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 434 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 435 }; 436 437 hyva.releaseFocus = (rootElement) => { 438 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 439 currentTrap.removeEventListener('keydown', focusTrap) 440 currentTrap = null 441 } 442 } 443 hyva.trapFocus = (rootElement) => { 444 if (!rootElement) return; 445 hyva.releaseFocus() 446 currentTrap = rootElement 447 rootElement.addEventListener('keydown', focusTrap) 448 const firstElement = focusableElements(rootElement)[0] 449 firstElement && firstElement.focus() 450 } 451 452 hyva.safeParseNumber = (rawValue) => { 453 const number = rawValue ? parseFloat(rawValue) : null; 454 455 return Array.isArray(number) || isNaN(number) ? rawValue : number; 456 } 457 458 const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(''); 459 hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => { 460 461 const camelCase = toCamelCase(name);
462 const key = '__hyva_bool_' + name 463 464 return new Proxy(Object.assign( 465 additionalMethods, 466 { 467 [key]: !!value, 468 [name]() {return !!this[key]}, 469 ['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine 470 ['not' + camelCase]() {return !this[key]}, 471 ['toggle' + camelCase]() {this[key] = !this[key]}, 472 [`set${camelCase}True`]() {this[key] = true}, 473 [`set${camelCase}False`]() {this[key] = false}, 474 } 475 ), { 476 set(target, prop, value) { 477 return prop === name 478 ? (target[key] = !!value) 479 : Reflect.set(...arguments); 480 } 481 }) 482 } 483 484 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 485 window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true}); 486 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 487 488 }( window.hyva = window.hyva || {} )); 489</script>
vendor: 1 bytes, line 489
489
490<script> 491 if (!window.IntersectionObserver) { 492 window.IntersectionObserver = function (callback) { 493 this.observe = el => el && callback(this.takeRecords()); 494 this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; 495 this.disconnect = () => {}; 496 this.unobserve = () => {}; 497 } 498 } 499</script>
499 500</head> 501<body class="store-base-en customer-account-login page-layout-1column" id="html-body"> 502 503
503<script> 504 (function () { 505 'use strict'; 506 507 window.amRecaptchaModel = { 508 formsToProtect: "\u0023payment\u002Dform,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fcreatepost\u0022\u005D,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002FloginPost\u0022\u005D,form\u005Baction\u002A\u003D\u0022newsletter\u002Fsubscriber\u002Fnew\u0022\u005D,form\u005Baction\u002A\u003D\u0022contact\u002Findex\u002Fpost\u0022\u005D,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fforgotpasswordpost\u0022\u005D,form\u005Bx\u002Ddata\u003D\u0022initReviewForm\u0028\u0029\u0022\u005D,form\u005Bx\u002Ddata\u003D\u0022initReviewForm\u0022\u005D,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fresetpasswordpost\u0022\u005D,form\u005Baction\u002A\u003D\u0022amasty_customform\u002Fform\u002Fsubmit\u0022\u005D", 509 isEnabledOnPayments: "", 510 checkoutRecaptchaValidateUrl: "https://www.eichholtz.com/en/amcapthca/checkout/validate/", 511 invisibleCaptchaCustomForm: "1", 512 recaptchaConfig: { 513 lang: "hl\u003Den" || 'hl=en', 514 theme: "light", 515 badge: "bottomright", 516 sitekey: "6LcD4KUZAAAAAJ9u-xWGWrhEAh5C3alX-jLpplwu", 517 size: "invisible" 518 }, 519 url: 'https://www.google.com/recaptcha/api.js', 520 isCaptchaScriptLoaded: false, 521 isInvisible: "invisible" === 'invisible', 522 523 /** 524 * Submit event 525 * 526 * @param {Object} $event 527 * @param {object} options 528 * @return {void} 529 */ 530 execute: function ($event, options = {targetSelector: 'form'}) { 531 const eventTarget = $event?.target; 532 if (this.isCaptchaScriptLoaded) { 533 this.executeCaptcha(eventTarget, options); 534 } else { 535 window.addEventListener('amcaptcha-script-loaded', () => { 536 this.isCaptchaScriptLoaded = true; 537 this.executeCaptcha(eventTarget, options); 538 this.initAmcaptchaBadges(); 539 }); 540 541 this.loadRecaptchaScript(); 542 } 543 }, 544 545 /** 546 * Execute original submit 547 * 548 * @param {Object} $event 549 * @param {HTMLElement} $el 550 * @return {void} 551 */ 552 recaptchaCallback: function ($event, $el) { 553 this.shouldExecuteCallback($event, $el) && $el.dispatchEvent(new CustomEvent('amrecaptcha-executable-callback')); 554 }, 555 556 /** 557 * Reset captcha 558 * 559 * @param {Object} $event 560 * @param {HTMLElement} $el 561 */ 562 expiredCallback: function($event, $el) { 563 this.shouldExecuteCallback($event, $el) && grecaptcha.reset($event.detail.widgetId); 564 }, 565 566 /** 567 * Checks if event is fired on submitted element 568 * 569 * @param {Object} $event 570 * @param {HTMLElement} $el 571 * @return {boolean} 572 */ 573 shouldExecuteCallback: function($event, $el) { 574 const eventWidgetId = $event.detail.widgetId; 575 const elementWidgetId = $el.dataset.amCaptchaWidgetId || $el.closest('form')?.dataset.amCaptchaWidgetId; 576 577 return eventWidgetId === elementWidgetId; 578 }, 579 580 /** 581 * Run captcha for widget by id 582 * 583 * @param {HTMLElement} eventTarget 584 * @param {object} options 585 * @return {void} 586 */ 587 executeCaptcha: function(eventTarget, options) { 588 if (!eventTarget.dataset.hasOwnProperty('amCaptchaRendered')) { 589 this.bindCaptchaGlobalCallbacks(eventTarget); 590 this.renderCaptcha(eventTarget, options); 591 eventTarget.dataset.amCaptchaRendered = ''; 592 } 593 594 const widgetId = this.getWidgetId(eventTarget); 595 596 if (!widgetId) { 597 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 598 { 599 type: "error", 600 text: 'Recaptcha\u0020cannot\u0020properly\u0020validate\u0020form.' 601 } 602 ]); 603 return; 604 } 605 606 window.dispatchEvent(new CustomEvent('amcaptcha-loading-start')); 607 grecaptcha.reset(widgetId); 608 609 if (!this.isInvisible) { 610 this.stopAmcaptchaLoading(); 611 return; 612 } 613 614 grecaptcha.execute(widgetId) 615 .then(() => this.stopAmcaptchaLoading()) 616 .catch(() => this.stopAmcaptchaLoading()); 617 }, 618 619 /** 620 * Add recaptcha script to page 621 * 622 * @return {void} 623 */ 624 loadRecaptchaScript: function () { 625 const lang = window.amRecaptchaModel.recaptchaConfig.lang; 626 const url = `${window.amRecaptchaModel.url}?onload=amRecaptchaLoadCallback&render=explicit&${lang}`; 627 const script = document.createElement('script'); 628 629 script.type = 'text/javascript'; 630 script.src = url; 631 script.async = true; 632 document.head.appendChild(script); 633 }, 634 635 /** 636 * Stop loader on page 637 * 638 * @return {void} 639 */ 640 stopAmcaptchaLoading: function () { 641 window.dispatchEvent(new CustomEvent('amcaptcha-loading-stop')); 642 }, 643 644 /** 645 * Add attributes to hide captcha badge 646 * 647 * @return {void} 648 */ 649 initAmcaptchaBadges: function () { 650 if (!this.isInvisible) { 651 return; 652 } 653 654 document.querySelectorAll('.grecaptcha-badge')?.forEach(captchaBadge => { 655 captchaBadge?.setAttribute('x-data', 'amGrecaptchaBadge'); 656 captchaBadge?.setAttribute('x-on:amcaptcha-loading-start.window', 'loadingStart'); 657 captchaBadge?.setAttribute('x-on:amcaptcha-loading-stop.window', 'loadingStop'); 658 captchaBadge?.setAttribute(':class', 'getVisibility'); 659 }); 660 }, 661 662 /** 663 * Get form widgetId 664 * 665 * @param {HTMLElement} eventTarget 666 * @return {string} 667 */ 668 getWidgetId: function (eventTarget) { 669 return eventTarget.dataset.amCaptchaWidgetId 670 || eventTarget.closest('form')?.dataset.amCaptchaWidgetId; 671 }, 672 673 /** 674 * Add captcha badge or checkbox to protected form. 675 * Store widgetId in dataset to pass this info in callbacks 676 * 677 * @param {HTMLElement} eventTarget 678 * @param {object} options 679 * @return {void} 680 */ 681 renderCaptcha: function (eventTarget, options = {targetSelector: 'form'}) { 682 const captchaElement = document.createElement('div'); 683 const formContent = eventTarget.closest(options.targetSelector)?.querySelector('[data-element="form-content"]') 684 ?? eventTarget.closest(options.targetSelector); 685 formContent?.appendChild(captchaElement); 686 687 eventTarget.dataset.amCaptchaWidgetId = grecaptcha.render(captchaElement, { 688 ...window.amRecaptchaModel?.recaptchaConfig, 689 callback: () => { 690 window.dispatchEvent(new CustomEvent( 691 'amrecaptcha-callback', { 692 detail: this.getCaptchaCallbackDetail(eventTarget) 693 })); 694 }, 695 'expired-callback': () => { 696 window.dispatchEvent(new CustomEvent( 697 'amrecaptcha-expired-callback', { 698 detail: this.getCaptchaCallbackDetail(eventTarget) 699 })); 700 } 701 }); 702 }, 703 704 /** 705 * Get detail property for callback event 706 * 707 * @param {HTMLElement} eventTarget 708 * @return {object} 709 */ 710 getCaptchaCallbackDetail: function (eventTarget) { 711 return { 712 widgetId: eventTarget.dataset.amCaptchaWidgetId, 713 form: eventTarget 714 } 715 }, 716 717 /** 718 * Add functions that will be called on the global state 719 * 720 * @param {HTMLElement} eventTarget 721 * @return {void} 722 */ 723 bindCaptchaGlobalCallbacks: function (eventTarget) { 724 eventTarget.setAttribute( 725 'x-on:amrecaptcha-callback.window', 726 `amRecaptchaModelRecaptchaCallback` 727 ); 728 eventTarget.setAttribute( 729 'x-on:amrecaptcha-expired-callback.window', 730 'amRecaptchaModelExpiredCallback' 731 ); 732 } 733 }; 734 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 735 736 window.amRecaptchaLoadCallback = function () { 737 window.dispatchEvent(new CustomEvent('amcaptcha-script-loaded')); 738 } 739 740 function amGrecaptchaBadge() { 741 return { 742 visible: true, 743 744 loadingStart () { 745 this.visible = true; 746 }, 747 748 loadingStop () { 749 this.visible = false;
750 }, 751 752 getVisibility() { 753 return { 'invisible': !this.visible }; 754 } 755 }; 756 } 757 758 window.addEventListener( 759 'alpine:init', () => Alpine.data('amGrecaptchaBadge', amGrecaptchaBadge), {once: true} 760 ) 761 </script>
761 762
763<script nonce='eGFtYno5eG9uMGRhNG9taXYzamE1N2xvZHM0bjVkbnY=' > 764 'use strict'; 765 (function (blackbird) { 766 767 const addEventListenerOnElementToLoad = (elementToLoad, source) => new Promise((resolve, reject) => { 768 elementToLoad.addEventListener('load', () => { 769 elementToLoad.dataset.loaded = true; 770 resolve(elementToLoad); 771 }) 772 773 elementToLoad.addEventListener('error', () => { 774 reject(new Error(`[External resource loader] : The resource "${source}", failed to load.`)); 775 }); 776 }); 777 778 blackbird.loadExternalScript = async (source) => { 779 const scriptWithSameSrc = document.querySelector(`script[src="${source}"][data-loaded]`); 780 781 if (scriptWithSameSrc && scriptWithSameSrc.dataset.loaded === 'true') { 782 return scriptWithSameSrc; 783 } 784 785 const script = scriptWithSameSrc ?? document.createElement('script'); 786 script.type = 'text/javascript'; 787 script.async = true; 788 script.src = source; 789 script.dataset.loaded = false; 790 791 document.head.appendChild(script); 792 await addEventListenerOnElementToLoad(script, source); 793 return script; 794 } 795 796 blackbird.loadExternalStyle = async (source) => { 797 const linkWithSameHref = document.querySelector(`link[href="${source}"][data-loaded]`); 798 799 if (linkWithSameHref && linkWithSameHref.dataset.loaded === 'true') { 800 return linkWithSameHref; 801 } 802 803 const link = linkWithSameHref ?? document.createElement('link'); 804 link.type = 'text/css' 805 link.rel = 'stylesheet'; 806 link.href = source; 807 link.dataset.loaded = false; 808 809 document.head.prepend(link); 810 await addEventListenerOnElementToLoad(link, source); 811 return link; 812 } 813 814 blackbird.loadExternalResource = (source) => { 815 const scriptUrlRegex = /\.(js)$/i; 816 const styleUrlRegex = /\.(css)$/i; 817 818 if (scriptUrlRegex.test(source)) { 819 return blackbird.loadExternalScript(source); 820 } 821 822 if (styleUrlRegex.test(source)) { 823 return blackbird.loadExternalStyle(source); 824 } 825 } 826 827 }(window.blackbird = window.blackbird || {})); 828</script>
828 829<noscript><iframe src="https://metrics.eichholtz.com/ns.html?id=GTM-WNN8W7W" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 830<input name="form_key" type="hidden" value="cqxto8ZaiPDyUmPs" /> 831 <noscript> 832 <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"> 833 <div class="container text-center"> 834 <p> 835 <strong>JavaScript seems to be disabled in your browser.</strong> 836 <span> 837 For the best experience on our site, be sure to turn on Javascript in your browser. </span> 838 </p> 839 </div> 840 </section> 841 </noscript> 842 843 <section 844 x-data 845 x-show="typeof(Storage) === 'undefined'" 846 x-cloak 847 class="message global local_storage border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal" 848 > 849 <div class="container text-center"> 850 <p> 851 <strong>Local Storage seems to be disabled in your browser.</strong> 852 For the best experience on our site, be sure to turn on Local Storage in your browser. </p> 853 </div> 854 </section> 855
856<script> 857 document.body.addEventListener('touchstart', () => {}, {passive: true}) 858</script>
858 859<div class="widget block block-static-block"> 860 </div> 861<div class="widget block block-static-block"> 862 </div> 863 864
864<script> 865 window.amRecaptchaModel = window.amRecaptchaModel || {}; 866 </script>
866 867
867<script nonce="eGFtYno5eG9uMGRhNG9taXYzamE1N2xvZHM0bjVkbnY="> 868 function yireoGoogleTagManager2Pusher(eventData, message, callback) { 869 window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS = window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS || []; 870 871 function doCallback(cb) { 872 if (undefined === cb) { 873 return; 874 } 875 876 cb(); 877 } 878 879 880 const copyEventData = Object.assign({}, eventData); 881 let metaData = {}; 882 if (copyEventData.meta) { 883 metaData = copyEventData.meta; 884 delete copyEventData.meta; 885 } 886 887 const eventHash = btoa(encodeURIComponent(JSON.stringify(copyEventData))); 888 if (window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS.includes(eventHash)) { 889 yireoGoogleTagManager2Logger('Warning: Event already triggered', eventData); 890 doCallback(callback); 891 return; 892 } 893 894 if (metaData && metaData.allowed_pages && metaData.allowed_pages.length > 0 895 && false === metaData.allowed_pages.some(page => window.location.pathname.includes(page))) { 896 yireoGoogleTagManager2Logger('Warning: Skipping event, not in allowed pages', window.location.pathname, eventData); 897 doCallback(callback); 898 return; 899 } 900 901 if (!message) { 902 message = 'push (unknown) [unknown]'; 903 } 904 905 yireoGoogleTagManager2Logger(message, eventData); 906 window.dataLayer = window.dataLayer || []; 907 908 if (eventData.ecommerce) { 909 window.dataLayer.push({ecommerce: null}); 910 } 911 912 try { 913 window.dataLayer.push(eventData); 914 window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS.push(eventHash); 915 } catch(error) { 916 doCallback(callback); 917 } 918 919 doCallback(callback); 920 } 921</script>
vendor: 1 bytes, line 921
921
922<script nonce="eGFtYno5eG9uMGRhNG9taXYzamE1N2xvZHM0bjVkbnY="> 923 function yireoGoogleTagManager2Logger(...args) { 924 const debug = window.YIREO_GOOGLETAGMANAGER2_DEBUG || false; 925 if (false === debug) { 926 return; 927 } 928 929 var color = 'gray'; 930 if (args[0].toLowerCase().startsWith('push')) { 931 color = 'green'; 932 } 933 934 if (args[0].toLowerCase().startsWith('warning')) { 935 color = 'orange'; 936 } 937 938 var css = 'color:white; background-color:' + color + '; padding:1px;' 939 console.log('%cYireo_GoogleTagManager2', css, ...args); 940 } 941</script>
941 942
943<script> 944 'use strict'; 945 (function(hyva) { 946 const formValidationRules = { 947 required(value, options, field, context) { 948 const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, 949 msg = 'This\u0020is\u0020a\u0020required\u0020field.'; 950 951 if (el.type === 'radio' || el.type === 'checkbox') { 952 return (value === undefined || value.length === 0) ? msg : true; 953 } 954 955 el.setAttribute('required', ''); 956 el.checkValidity(); 957 958 return el.validity.valueMissing ? msg : true; 959 }, 960 maxlength(value, options, field, context) { 961 const n = Number(options) 962 if (value.length > n) { 963 return n === 1 964 ? hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u00201\u0020character.') 965 : hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u0020\u00250\u0020characters.', options) 966 } 967 return true; 968 }, 969 minlength(value, options, field, context) { 970 const n = Number(options) 971 if (value.length > 0 && value.length < n) { 972 return n === 1 973 ? hyva.strf('Please\u0020enter\u0020at\u0020least\u00201\u0020character.') 974 : hyva.strf('Please\u0020enter\u0020at\u0020least\u0020\u00250\u0020characters.', options) 975 } 976 return true; 977 }, 978 max(value, options, field, context) { 979 field.element.setAttribute('max', options); 980 field.element.checkValidity(); 981 if (field.element.validity.rangeOverflow) { 982 return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020less\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options); 983 } 984 return true; 985 }, 986 min(value, options, field, context) { 987 field.element.setAttribute('min', options); 988 field.element.checkValidity(); 989 if (field.element.validity.rangeUnderflow) { 990 return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020greater\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options); 991 } 992 return true; 993 }, 994 step(value, options, field, context) { 995 field.element.setAttribute('step', options); 996 field.element.checkValidity(); 997 if (field.element.validity.stepMismatch) { 998 const val = Number(value); 999 const step = Number(options); 1000 const msg = 'Please\u0020enter\u0020a\u0020valid\u0020value.\u0020The\u0020two\u0020nearest\u0020valid\u0020values\u0020are\u0020\u0022\u00250\u0022\u0020and\u0020\u0022\u00251\u0022.'; 1001 return hyva.strf(msg, Math.floor(val / step) * step, Math.ceil(val / step) * step); 1002 } 1003 return true; 1004 }, 1005 pattern(value, options, field, context) { 1006 field.element.setAttribute('pattern', options); 1007 field.element.checkValidity(); 1008 if (field.element.validity.patternMismatch) { 1009 return field.element.title 1010 ? hyva.strf('Please\u0020match\u0020the\u0020requested\u0020format\u003A\u0020\u00250.', field.element.title) 1011 : 'Please\u0020match\u0020the\u0020requested\u0020format.' 1012 } 1013 return true; 1014 }, 1015 email(value, options, field, context) { 1016 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; 1017 if (value.length > 0 && !rule.test(value)) { 1018 return 'Please\u0020enter\u0020a\u0020valid\u0020email\u0020address.'; 1019 } 1020 return true; 1021 }, 1022 password(value, options, field, context) { 1023 const rule = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/; 1024 if (value.length > 0 && !rule.test(value)) { 1025 return 'Please\u0020provide\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'; 1026 } 1027 return true; 1028 }, 1029 equalTo(value, options, field, context) { 1030 const dependencyField = context.fields[options].element; 1031 if (value !== dependencyField.value) { 1032 const dependencyFieldName = 1033 dependencyField.label || 1034 dependencyField.title || 1035 (dependencyField.labels && dependencyField.labels[0] && dependencyField.labels[0].innerText) || 1036 dependencyField.name; 1037 return hyva.strf('This\u0020field\u0020value\u0020must\u0020be\u0020the\u0020same\u0020as\u0020\u0022\u00250\u0022.', dependencyFieldName); 1038 } 1039 return true; 1040 } 1041 }; 1042 1043 function raceSome(promises, pred) { 1044 return new Promise((resolve, reject) => { 1045 1046 if (promises.length === 0) { 1047 return resolve(); 1048 } 1049 1050 let settled = false, nDone = 0; 1051 1052 const resolveIf = v => { 1053 if (!settled && (pred(v) || ++nDone === promises.length)) { 1054 settled = true; 1055 resolve(v); 1056 } 1057 return v; 1058 } 1059 1060 promises.map(promise => {
1061 promise.then(resolveIf).catch(reason => { 1062 settled = true; 1063 reject(reason) 1064 }); 1065 return promise; 1066 }); 1067 }); 1068 } 1069 1070 const INPUT_ATTRIBUTE_RULES = {min: 'min', max: 'max', required: 'required', minlength: 'minlength', maxlength: 'maxlength', step: 'step', pattern: 'pattern'} 1071 const INPUT_TYPE_RULES = {email: 'email'} 1072 1073 function getRules(element) { 1074 let rules = {}; 1075 Object.keys(INPUT_ATTRIBUTE_RULES).forEach(attrName => { 1076 if (element.hasAttribute(attrName)) { 1077 rules[INPUT_ATTRIBUTE_RULES[attrName]] = element.getAttribute(attrName); 1078 } 1079 }) 1080 if (INPUT_TYPE_RULES[element.type]) { 1081 rules[INPUT_TYPE_RULES[element.type]] = true; 1082 } 1083 1084 if (element.dataset.validate) { 1085 try { 1086 Object.assign(rules, JSON.parse(element.dataset.validate)); 1087 } catch (error) { 1088 console.error('Validator error. Cannot parse data-validate attribute of element:\n', element); 1089 } 1090 } 1091 1092 return rules; 1093 } 1094 1095 function isInvalidRuleResult(ruleState) { 1096 return typeof ruleState === 'string' || !ruleState || (ruleState.type && ruleState.content); 1097 } 1098 1099 async function runValidateFn(rule, options, value, field) { 1100 return formValidationRules[rule](value, options, field, this); 1101 } 1102 1103 function generateId() { 1104 let id; 1105 do { 1106 id = `${this.idPrefix}-${++this.idSeq}`; 1107 } while (document.getElementById(id)); 1108 return id; 1109 } 1110 1111 function isVisible(element) { 1112 const el = element.type !== 'hidden' ? element : (element.parentElement || {}); 1113 return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length) 1114 } 1115 1116 function elementWillValidate(element) { 1117 return (element.willValidate || element.type === 'hidden') 1118 && element.tagName !== 'BUTTON' 1119 && element.disabled === false 1120 && !(element.tagName === 'INPUT' && element.type === 'submit') 1121 && (element.hasAttribute('data-validate-hidden') || isVisible(element)) 1122 } 1123 1124 function createMessageContainer(el, fieldWrapperClassName) { 1125 if (! el.parentElement) { 1126 return; 1127 } 1128 const refocus = document.activeElement === el; 1129 const wrapper = document.createElement('div'); 1130 wrapper.classList.add.apply(wrapper.classList, fieldWrapperClassName.split(' ')); 1131 el.parentElement.insertBefore(wrapper, el); 1132 wrapper.appendChild(el); 1133 refocus && document.activeElement !== el && el.focus(); 1134 return wrapper; 1135 } 1136 1137 function containerNotFound(selector, el) { 1138 const msg = `Cannot find message container element ${selector} of ${el.name}`; 1139 console.error(msg, el); 1140 throw msg; 1141 } 1142 1143 function createTextInputFrom(el) { 1144 const text = document.createElement('INPUT'); 1145 text.type = 'text'; 1146 text.value = el.value; 1147 return text; 1148 } 1149 1150 function classNamesToSelector(classNames) { 1151 return classNames.split(' ') 1152 .filter(className => className.length > 0) 1153 .map(className => `.${className}`) 1154 .join('') 1155 } 1156 1157 function hasMessagesWrapper(field, messagesWrapperClassName) { 1158 return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); 1159 } 1160 1161 function getMessagesWrapper(field, messagesWrapperClassName) { 1162 if (hasMessagesWrapper.call(this, field, messagesWrapperClassName)) { 1163 return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); 1164 } 1165 1166 const msgWrapper = document.createElement('ul'); 1167 const msgId = generateId.call(this); 1168 msgWrapper.id = msgId; 1169 field.element.setAttribute('aria-errormessage', msgId); 1170 field.element.setAttribute('aria-describedby', msgId); 1171 msgWrapper.classList.add.apply(msgWrapper.classList, messagesWrapperClassName.split(' ')); 1172 if (field.validateOnChange) { 1173 msgWrapper.setAttribute('aria-live', 'polite'); 1174 } 1175 this.getMessageContainer(field).appendChild(msgWrapper); 1176 1177 return msgWrapper; 1178 } 1179 1180 function getCheckedValues(field) { 1181 const name = field.element.name.replace(/([\\"])/g, '\\$1'); 1182 const elements = field.element.form.querySelectorAll('input[name="' + name + '"]:checked'); 1183 return Array.from(elements).map(el => el.value); 1184 } 1185 1186 function escapeHtml(s) { 1187 const div = document.createElement('div') 1188 div.innerText = s; 1189 return div.innerHTML; 1190 } 1191 1192 1193 function formValidation(form, options = {}) { 1194 const formElement = form || this.$el; 1195 1196 if (formElement.dataset && formElement.dataset.options) { 1197 try { 1198 options = Object.assign(options, JSON.parse(formElement.dataset.options || '{}')); 1199 } catch (e) { 1200 throw new Error('Cannot read the form options from the data-options attribute: not val
1200id JSON'); 1201 } 1202 } 1203 1204 // Disable browser default validation 1205 if (formElement.tagName === 'FORM') { 1206 formElement.setAttribute('novalidate', ''); 1207 } else { 1208 console.error('formValidation can be initialized only on FORM element', formElement); 1209 return; 1210 } 1211 1212 options = Object.assign({ 1213 fieldWrapperClassName: 'field field-reserved', 1214 messagesWrapperClassName: 'messages', 1215 validClassName: 'field-success', 1216 invalidClassName: 'field-error', 1217 pageMessagesWrapperSelector: null, 1218 scrollToFirstError: true, 1219 }, options || {}); 1220 1221 return { 1222 state: { 1223 valid: false, 1224 }, 1225 fields: {}, 1226 idSeq: 0, 1227 idPrefix: formElement.id || 'vld-msg', 1228 setupFields(elements) { 1229 this.fields = {}; 1230 Array.from(elements).forEach(element => { 1231 if (elementWillValidate(element)) { 1232 this.setupField(element); 1233 } 1234 }); 1235 }, 1236 setupField(element) { 1237 if (! element) return; 1238 const onChange = !!element.dataset.onChange; 1239 if (elementWillValidate(element)) { 1240 const rules = getRules(element); 1241 if (Object.keys(rules).length > 0) { 1242 if (this.fields[element.name]) { 1243 Object.assign(this.fields[element.name].rules, rules); 1244 } else { 1245 this.fields[element.name] = { 1246 element, 1247 rules: rules, 1248 validateOnChange: onChange, 1249 state: { 1250 valid: null, 1251 rules: {} 1252 } 1253 } 1254 } 1255 } 1256 } else { 1257 console.error('Element will not validate', element); 1258 } 1259 }, 1260 onSubmit(event) { 1261 if (event.target.tagName === 'FORM') { 1262 event.preventDefault(); 1263 1264 this.validate() 1265 .then(() => event.target.submit()) 1266 .catch(invalidElements => {}); 1267 } 1268 }, 1269 onChange(event) { 1270 event.target.dataset.onChange = 'true'; 1271 if (!Object.keys(this.fields).length) { 1272 this.setupFields(formElement.elements); 1273 } 1274 if (!Object.keys(this.fields).includes(event.target.name)) { 1275 this.setupField(event.target); 1276 } 1277 const field = this.fields[event.target.name]; 1278 1279 this.validateField(field); 1280 field && field.element.removeAttribute('data-on-change') 1281 }, 1282 validateSafe() { 1283 return new Promise(resolve => this.validate().then(() => resolve(true)).catch(() => {})) 1284 }, 1285 validate() { 1286 if (!Object.keys(this.fields).length || !Object.keys(this.fields).length !== formElement.elements.length) { 1287 this.setupFields(formElement.elements); 1288 } 1289 return new Promise(async (resolve, reject) => { 1290 if (formElement.elements) { 1291 await raceSome(this.validateFields(), result => result !== true) 1292 const invalidFields = Object.values(this.fields).filter(field => !field.state.valid); 1293 this.state.valid = invalidFields.length === 0; 1294 if (this.state.valid) { 1295 resolve(); 1296 } else { 1297 if (options.scrollToFirstError && invalidFields.length > 0) { 1298 invalidFields[0].element.focus() 1299 invalidFields[0].element.select && invalidFields[0].element.select(); 1300 } 1301 reject(invalidFields.map(field => field.element)); 1302 } 1303 } 1304 }); 1305 }, 1306 validateFields() { 1307 const fields = Object.values(this.fields); 1308 1309 fields.forEach(field => { 1310 this.getMessageContainer(field).classList.remove(options.validClassName, options.invalidClassName) 1311 }); 1312 return fields.map(field => this.validateField(field)) 1313 }, 1314 validateField(field) { 1315 if (! field || ! elementWillValidate(field.element)) { 1316 return new Promise(resolve => resolve(true)) 1317 } 1318 1319 let value; 1320 if (field.element.type === 'checkbox') { 1321 value = getCheckedValues(field); 1322 } else if (field.element.type === 'radio') { 1323 value = getCheckedValues(field)[0] || undefined; 1324 } else if (field.element.tagName === 'SELECT' && field.element.multiple) { 1325 value = Array.from(field.element.selectedOptions).map(opt => opt.value); 1326 } else { 1327 value = field.element.value; 1328 } 1329 1330 const rules = field.rules || {}; 1331 1332 field.state.valid = true;
1333 this.showFieldState(field); 1334 1335 1336 const fieldValidations = Object.keys(rules).filter(rule => formValidationRules[rule]).map(async rule => { 1337 return runValidateFn.call(this, rule, rules[rule], value, field).then(result => { 1338 field.state.rules[rule] = result; 1339 return result; 1340 }) 1341 }); 1342 1343 return new Promise(resolve => { 1344 Promise.all(fieldValidations).then(results => { 1345 field.state.valid = !elementWillValidate(field.element) || rules.length === 0 || !results.some(isInvalidRuleResult) 1346 this.showFieldState(field); 1347 resolve(field.state.valid); 1348 }) 1349 }); 1350 }, 1351 getMessagesByField(field) { 1352 const messages = []; 1353 const invalidRules = Object.keys(field.state.rules).filter(rule => isInvalidRuleResult(field.state.rules[rule])); 1354 1355 field.rules && Object.keys(field.rules).forEach((rule) => { 1356 if (invalidRules.includes(rule)) { 1357 const customMessage = field.element.getAttribute('data-msg-' + rule); 1358 const message = customMessage ? customMessage : field.state.rules[rule]; 1359 const ruleOptions = JSON.parse(JSON.stringify(field.rules[rule])); 1360 1361 if (typeof message === 'undefined' || message === null || (typeof message !== 'string' && ! message.type)) { 1362 messages.push(hyva.strf('Validation rule "%0" failed.', rule)); 1363 } else if (Array.isArray(ruleOptions)) { 1364 ruleOptions.unshift(message.type ? message.content : message); 1365 const content = hyva.strf.apply(null, ruleOptions); 1366 messages.push(message.type ? {type: message.type, content} : content); 1367 } else { 1368 const content = hyva.strf(message.type ? message.content : message, ruleOptions) 1369 messages.push(message.type ? {type: message.type, content} : content); 1370 } 1371 } 1372 }); 1373 return messages; 1374 }, 1375 /** @deprecated */ 1376 getFieldWrapper(field) { 1377 return this.getMessageContainer(field) 1378 }, 1379 getMessageContainer(field) { 1380 let container; 1381 const pageSelector = field.element.getAttribute('data-validation-container') || options.pageMessagesContainerSelector; 1382 if (pageSelector) { 1383 container = document.querySelector(pageSelector) 1384 || containerNotFound(pageSelector, field.element) 1385 } else { 1386 const containerSelector = classNamesToSelector(options.fieldWrapperClassName); 1387 container = field.element.closest(containerSelector) 1388 || createMessageContainer(field.element, options.fieldWrapperClassName) 1389 || containerNotFound(containerSelector, field.element); 1390 } 1391 1392 return container; 1393 }, 1394 showFieldState(field) { 1395 const container = this.getMessageContainer(field), 1396 hasErrorMessages = hasMessagesWrapper.call(this, field, options.messagesWrapperClassName), 1397 messages = this.getMessagesByField(field).map(m => { 1398 return m.type !== 'html' ? escapeHtml(m.type ? m.content : m) : m.content; 1399 }); 1400 container.classList.toggle(options.validClassName, field.state.valid && ! hasErrorMessages); 1401 container.classList.toggle(options.invalidClassName, !field.state.valid || hasErrorMessages); 1402 this.createHtmlErrorMessage(field, messages); 1403 1404 if (field.state.valid) { 1405 field.element.removeAttribute('aria-invalid'); 1406 } else { 1407 field.element.setAttribute('aria-invalid', 'true'); 1408 if (! document.activeElement) { 1409 field.element.focus(); 1410 } 1411 } 1412 }, 1413 removeMessages(field, messagesClass) { 1414 if (! hasMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName)) { 1415 return; 1416 } 1417 1418 const msgWrapper = getMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName); 1419 const messages = msgWrapper.querySelectorAll(`[data-msg-field='${field.element.name}']`);
1420 Array.from(messages).forEach(msg => msg.remove()); 1421 if (msgWrapper && msgWrapper.childElementCount === 0) { 1422 field.element.removeAttribute('aria-errormessage'); 1423 field.element.removeAttribute('aria-describedby'); 1424 msgWrapper.remove(); 1425 } 1426 }, 1427 createErrorMessage(field, messages) { 1428 const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) 1429 this.createHtmlErrorMessage(field, htmlMessages); 1430 }, 1431 createHtmlErrorMessage(field, messages) { 1432 this.removeMessages(field, options.messagesWrapperClassName); 1433 field.element.removeAttribute('aria-errormessage'); 1434 field.element.removeAttribute('aria-describedby'); 1435 1436 if (!field.state.valid) { 1437 const msgWrapper = this.addHtmlMessages(field, options.messagesWrapperClassName, messages); 1438 field.element.setAttribute('aria-errormessage', msgWrapper.id); 1439 field.element.setAttribute('aria-describedby', msgWrapper.id); 1440 } 1441 }, 1442 /** @deprecated */ 1443 createMessage(field, message) { 1444 return this.addMessages(field, options.messagesWrapperClassName, message); 1445 }, 1446 addMessages(field, messagesClass, messages) { 1447 const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) 1448 return this.addHtmlMessages(field, messagesClass, htmlMessages); 1449 }, 1450 addHtmlMessages(field, messagesClass, htmlMessages) { 1451 const msgWrapper = getMessagesWrapper.call(this, field, messagesClass); 1452 1453 (Array.isArray(htmlMessages) ? htmlMessages : [htmlMessages]).forEach((htmlMessage) => { 1454 const li = document.createElement('li'); 1455 li.innerHTML = htmlMessage; 1456 li.setAttribute('data-msg-field', field.element.name); 1457 msgWrapper.appendChild(li); 1458 }); 1459 1460 return msgWrapper; 1461 }, 1462 setField(name, value) { 1463 this.fields[name].element.value = value; 1464 this.fields[name].element.dispatchEvent((new Event('input'))); 1465 this.validateField(this.fields[name]); 1466 } 1467 } 1468 } 1469 1470 hyva.formValidation = formValidation; 1471 hyva.formValidation.rules = formValidationRules; 1472 hyva.formValidation.setInputAttributeRuleName = (attrName, ruleName) => INPUT_ATTRIBUTE_RULES[attrName] = ruleName || attrName; 1473 hyva.formValidation.setInputTypeRuleName = (typeName, ruleName) => INPUT_TYPE_RULES[typeName] = ruleName || typeName; 1474 hyva.formValidation.addRule = (name, validator) => formValidationRules[name] = validator; 1475 }(window.hyva = window.hyva || {})); 1476 1477 window.addEventListener('alpine:init', () => { 1478 Alpine.data('hyva.formValidation', hyva.formValidation); 1479 Alpine.data('hyva.formValidation($el)', hyva.formValidation); 1480 }, {once: true}); 1481</script>
1481 1482<div class="page-wrapper"><div class="bg-primary-50"><div class="hidden container flex-row items-center py-2 lg:flex"> 1483<div class="flex-grow text-xs"> 1484 <span class="text-primary-400"> 1485 Become an Eichholtz partner </span> 1486 <a href="https://www.eichholtz.com/en/contactform/" class="pl-2"> 1487 Explore our showroom on a private HQ tour </a> 1488</div> 1489 <div x-data="{ open: false }"> 1490 <span @mouseover="open = !open" 1491 @mouseleave="open = false" 1492 class="flex items-center text-xs gap-1 mr-4 cursor-pointer"> 1493 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" role="img"><path d="M480.068-485.385q29.855 0 51.047-21.26 21.192-21.26 21.192-51.115t-21.26-51.047q-21.26-21.192-51.115-21.192t-51.047 21.26q-21.192 21.26-21.192 51.115t21.26 51.047q21.26 21.192 51.115 21.192ZM480-179.461q117.384-105.076 179.654-201.577 62.269-96.5 62.269-169.039 0-109.384-69.5-179.846T480-800.385q-102.923 0-172.423 70.462t-69.5 179.846q0 72.539 62.269 169.039Q362.616-284.537 480-179.461Zm0 79.844Q329.001-230.463 253.539-343.154q-75.461-112.692-75.461-206.923 0-138.46 89.577-224.191Q357.231-859.999 480-859.999t212.345 85.731q89.577 85.731 89.577 224.191 0 94.231-75.461 206.923Q630.999-230.463 480-99.617Zm0-458.075Z"/><title>location</title></svg> 1494 Shipping from Europe </span> 1495 1496 <div x-cloak="" 1497 x-show="open" 1498 @mouseover="open = true" 1499 @mouseleave="open = false" 1500 class="absolute -mt-4 z-40"> 1501 <div class="relative text-sm bg-white border max-w-sm mt-6"> 1502 <style>#html-body [data-pb-style=XNTIVLC]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;padding:20px}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="XNTIVLC"><div data-content-type="text" data-appearance="default" data-element="main"><p>You are on our International website. Orders placed here will ship from our warehouse in Noordwijkerhout, NL.</p></div></div></div> </div> 1503 </div> 1504 </div> 1505<ul class="flex flex-row gap-4 text-xs text-primary"> 1506 <li> 1507 <a class="" 1508 title="Stores" 1509 href="https://www.eichholtz.com/en/store"> 1510 Stores </a> 1511 </li> 1512 <li> 1513 <a class="" 1514 title="Magazines" 1515 href="https://www.eichholtz.com/en/inspirations/digital-magazines.html"> 1516 Magazines </a> 1517 </li> 1518 <li> 1519 <a class="" 1520 title="Fairs and events" 1521 href="https://www.eichholtz.com/en/inspirations/fairs-and-events.html"> 1522 Fairs and events </a> 1523 </li> 1524 <li> 1525 <a class="" 1526 title="Contact" 1527 href="https://www.eichholtz.com/en/contact-page"> 1528 Contact </a> 1529 </li> 1530 </ul> <div x-data="{ open: false }" class="pl-4"> 1531 <div class="relative inline-block text-left"> 1532 <span @click.prevent="open = !open" 1533 @click.outside="open = false" 1534 @keydown.window.escape="open=false" 1535 class="inline-flex items-center justify-center w-full pl-4 cursor-pointer" 1536 aria-haspopup="true" 1537 aria-expanded="true" 1538 > 1539 <span class="absolute left-0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 513 342" class="-mt-1" width="30" height="17" role="img"><g fill="#FFF"><path d="M0 0h513v341.3H0V0z"/><path d="M311.7 230 513 341.3v-31.5L369.3 230h-57.6zM200.3 111.3 0 0v31.5l143.7 79.8h56.6z"/></g><g fill="#0052B4"><path d="M393.8 230 513 295.7V230H393.8zm-82.1 0L513 341.3v-31.5L369.3 230h-57.6zm146.9 111.3-147-81.7v81.7h147zM90.3 230 0 280.2V230h90.3zm110 14.2v97.2H25.5l174.8-97.2zM118.2 111.3 0 45.6v65.7h118.2zm82.1 0L0 0v31.5l143.7 79.8h56.6zM53.4 0l147 81.7V0h-147zM421.7 111.3 513 61.1v50.2h-91.3zm-110-14.2V0h174.9L311.7 97.1z"/></g><g fill="#D80027"><path d="M288 0h-64v138.7H0v64h224v138.7h64V202.7h224v-64H288V0z"/><path d="M311.7 230 513 341.3v-31.5L369.3 230h-57.6zM143.7 230 0 309.9v31.5L200.3 230h-56.6zM200.3 111.3 0 0v31.5l143.7 79.8h56.6zM368.3 111.3 513 31.5V0L311.7 111.3h56.6z"/></g><title>gb</title></svg> 1540</span>
1540 <span class="pl-5 text-xs text-primary mb-1">English</span> 1541 <template x-if="open"> 1542 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="text-primary" width="20" height="20" role="img"> 1543 <path fill-rule="evenodd" d="M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z" clip-rule="evenodd"/> 1544<title>chevron-up</title></svg> 1545 </template> 1546 <template x-if="!open"> 1547 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="text-primary" width="20" height="20" role="img"> 1548 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 1549<title>chevron-down</title></svg> 1550 </template> 1551 </span> 1552 <nav x-cloak="" 1553 x-show="open" 1554 class="absolute right-0 top-full z-40 w-52 mt-3 overflow-auto origin-top-left rounded-sm shadow-lg border bg-container-lighter"> 1555 <div class="my-1" role="menu" aria-orientation="vertical" aria-labelledby="options-menu"> 1556 <div id="store_switcher_de"> 1557 <a href="https://www.eichholtz.com/en/stores/store/redirect/___store/de/___from_store/en/uenc/aHR0cHM6Ly93d3cuZWljaGhvbHR6LmNvbS9kZS9jdXN0b21lci9hY2NvdW50L2xvZ2lu/" 1558 class="flex items-center px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 1559 rel="nofollow" 1560 > 1561 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 513 342" class="-mt-1" width="30" height="17" role="img"><path fill="#D80027" d="M0 0h513v342H0z"/><path d="M0 0h513v114H0z"/><path fill="#FFDA44" d="M0 228h513v114H0z"/><title>de</title></svg> 1562 <span class="pl-2 text-sm mb-1">Deutsch</span> 1563 </a> 1564 </div> 1565 <div id="store_switcher_es"> 1566 <a href="https://www.eichholtz.com/en/stores/store/redirect/___store/es/___from_store/en/uenc/aHR0cHM6Ly93d3cuZWljaGhvbHR6LmNvbS9lcy9jdXN0b21lci9hY2NvdW50L2xvZ2lu/" 1567 class="flex items-center px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 1568 rel="nofollow" 1569 > 1570 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.5 15" class="-mt-1" width="30" height="17" role="img"><path fill="#FFF" d="M0 0h22.5v15H0V0z"/><path fill="#D03433" d="M0 0h22.5v4H0V0zm0 11h22.5v4H0v-4z"/><path fill="#FBCA46" d="M0 4h22.5v7H0V4z"/><path fill="#FFF" d="M7.8 7h1v.5h-1V7z"/><path fill="#A41517" d="M7.2 8.5c0 .3.3.5.6.5s.6-.2.6-.5L8.5 7H7.1l.1 1.5zM6.6 7c0-.3.2-.5.4-.5h1.5c.3 0 .5.2.5.4V7l-.1 1.5c-.1.6-.5 1-1.1 1-.6 0-1-.4-1.1-1L6.6 7z"/><path fill="#A41517" d="M6.8 7.5h2V8h-.5l-.5 1-.5-1h-.5v-.5zM5.3 6h1v3.5h-1V6zm4 0h1v3.5h-1V6zm-2.5-.5c0-.3.2-.5.5-.5h1c.3 0 .5.2.5.5v.2c0 .2-.1.3-.3.3H7c-.1 0-.2-.1-.2-.2v-.3z"/><title>es</title></svg> 1571 <span class="pl-2 text-sm mb-1">Español</span> 1572 </a> 1573 </div> 1574 <div id="store_switcher_fr"> 1575 <a href="https://www.eichholtz.com/en/stores/store/redirect/___store/fr/___from_store/en/uenc/aHR0cHM6Ly93d3cuZWljaGhvbHR6LmNvbS9mci9jdXN0b21lci9hY2NvdW50L2xvZ2lu/" 1576 class="flex items-center px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 1577 rel="nofollow" 1578 > 1579 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 513 342" class="-mt-1" width="30" height="17" role="img"><path fill="#FFF" d="M0 0h513v342H0z"/><path fill="#0052B4" d="M0 0h171v342H0z"/><path fill="#D80027" d="M342 0h171v342H342z"/><title>fr</title></svg>
1580 <span class="pl-2 text-sm mb-1">Français</span> 1581 </a> 1582 </div> 1583 </div> 1584 </nav> 1585 </div> 1586 </div> 1587</div></div><header class="page-header bg-white sticky z-20 top-0 border-b border-primary-100"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white 1588 contentarea" 1589 href="#contentarea"> 1590 <span> 1591 Skip to Content </span> 1592</a>
1593<script> 1594 function initHeader() { 1595 return { 1596 searchOpen: true, 1597 isOpen: false, 1598 cart: {}, 1599 init() { 1600 this.$watch('isOpen', (value) => { 1601 if (value) { 1602 document.getElementsByTagName('body')[0].style.overflowY = 'hidden'; 1603 } else { 1604 document.getElementsByTagName('body')[0].style.overflowY = 'auto'; 1605 } 1606 }) 1607 }, 1608 getData(data) { 1609 if (data.cart) { 1610 this.cart = data.cart 1611 } 1612 }, 1613 closeSearchBar() { 1614 this.isOpen = false; 1615 this.searchOpen = false; 1616 1617 if (document.getElementsByClassName('aa-Panel').length) { 1618 document.getElementsByClassName('aa-Panel')[0].remove() 1619 } 1620 } 1621 } 1622 } 1623 1624 function initCompareHeader() { 1625 return { 1626 compareProducts: null, 1627 itemCount: 0, 1628 receiveCompareData(data) { 1629 if (data['compare-products']) { 1630 this.compareProducts = data['compare-products']; 1631 this.itemCount = this.compareProducts.count; 1632 } 1633 } 1634 } 1635 } 1636</script>
1636 1637<div id="header" 1638 class="z-30 w-full lg:relative" 1639 x-data="initHeader()" 1640 @keydown.window.escape="searchOpen = false; isOpen = false;" 1641 @private-content-loaded.window="getData(event.detail.data)" 1642> 1643 <div class="lg:container relative w-full px-3 sm:px-6 mt-0 md:pb-[6px] lg:pb-0"> 1644 <div class="flex flex-wrap items-center gap-2 sm:gap-4 md:gap-8 lg:gap-0 md:py-3 h-[56px] lg:h-auto"> 1645 <!--Search--> 1646 <div class="flex items-center justify-center h-10 order-2 lg:justify-start lg:order-1 lg:flex-1 lg:mr-auto px-2" 1647 id="search-content" 1648 :class="{ 'lg:rounded-[2px] lg:border-primary-500 lg:border lg:shadow-button w-full' : isOpen, 'lg:bg-primary-50 lg:w-full lg:cursor-pointer' : !isOpen}" 1649 @click="if (!isOpen) { $refs.searchButton.click(); }"> 1650 <!--Search Icon--> 1651 <button 1652 id="menu-search-icon" 1653 class="rounded outline-offset-2 !border-none" 1654 @click.stop=" 1655 searchOpen = !searchOpen; 1656 isOpen = !isOpen; 1657 $dispatch('search-open'); 1658 " 1659 aria-label="Toggle search form" 1660 aria-haspopup="true" 1661 :aria-expanded="searchOpen" 1662 x-ref="searchButton" 1663 > 1664 <span x-show="!isOpen"> 1665 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="md:h-6 md:w-6" width="28" height="28" aria-hidden="true"> 1666 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 1667</svg> 1668 </span> 1669 <span x-show="isOpen" x-cloak> 1670 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="md:h-6 md:w-6 hidden md:block" width="28" height="28" aria-hidden="true"> 1671 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 1672</svg> 1673 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="md:h-6 md:w-6 block md:hidden" width="24" height="24" aria-hidden="true"> 1674 <path stroke-linecap="round" stroke-linejoin="round" d="M10 19l-7-7m0 0l7-7m-7 7h18"/> 1675</svg> 1676 </span> 1677 </button> 1678 <p x-show="!isOpen" class="text-primary-600 w-full pl-4 text-sm hidden lg:block"> 1679 Search for products, categories, ... </p> 1680 <div x-show="isOpen" class="w-full"> 1681 <div id="algoliaAutocomplete" class="block block-search algolia-search-block algolia-search-input container py-1 md:py-2 px-1 ml-0 text-black !mb-0 !max-w-full" ></div> 1682 <div id="panelContainer" class="w-full lg:container absolute !border-0 leading-normal transition duration-300 appearance-none text-grey-800 bg-white z-30 flex flex-grow flex-col overflow-y-auto top-18 !px-0 !left-0 h-auto mt-2 lg:mt-0 mb-1" x-data="initAutocompleteInsight"></div> 1683
1683<script> 1684 'use strict'; 1685 1686 function initAutocompleteInsight() { 1687 return { 1688 bindClickEvent(element, eventName, objectID, indexName, position, queryId) { 1689 element.querySelector('.algoliasearch-autocomplete-hit')?.addEventListener("click", function () { 1690 buildInsightsEventData(eventName, objectID, indexName, position, queryId); 1691 }); 1692 } 1693 } 1694 } 1695 </script>
1695 1696 </div> 1697 </div> 1698 1699 <!--Logo--> 1700 <div class="flex items-center justify-center h-10 mx-2 flex-1 order-3 md:order-2" 1701 :class="{ 'hidden lg:flex' : isOpen }"> 1702 <a class="tracking-wide no-underline hover:no-underline" 1703 href="https://www.eichholtz.com/en/" 1704 title="" 1705 aria-label="store logo"> 1706 <img src="https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/images/logo.svg" 1707 class="w-[152px] md:w-full" 1708 title="" 1709 alt="" 1710 width="220" height="16" /> 1711 </a> 1712 </div> 1713 1714 <!-- Customer, wishlist and cart --> 1715 <div class="flex gap-2 md:gap-8 h-10 lg:flex-1 order-4 lg:order-3 justify-end ml-auto" 1716 :class="{ 'hidden lg:flex' : isOpen }"> 1717 1718 <!--Customer Icon--> 1719 <div class="flex items-center justify-center"> 1720 <a 1721 href="https://www.eichholtz.com/en/customer/account/" 1722 id="customer-menu" 1723 class="block hover:text-black" 1724 aria-label="My Account" 1725> 1726 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" role="img"><path d="M240.924-268.307q51-37.846 111.115-59.769Q412.154-349.999 480-349.999t127.961 21.923q60.115 21.923 111.115 59.769 37.308-41 59.116-94.923Q800-417.154 800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 62.846 21.808 116.77 21.808 53.923 59.116 94.923Zm239.088-181.694q-54.781 0-92.396-37.603-37.615-37.604-37.615-92.384 0-54.781 37.603-92.396 37.604-37.615 92.384-37.615 54.781 0 92.396 37.603 37.615 37.604 37.615 92.384 0 54.781-37.603 92.396-37.604 37.615-92.384 37.615Zm-.012 350q-79.154 0-148.499-29.77-69.346-29.769-120.654-81.076-51.307-51.308-81.076-120.654-29.77-69.345-29.77-148.499t29.77-148.499q29.769-69.346 81.076-120.654 51.308-51.307 120.654-81.076 69.345-29.77 148.499-29.77t148.499 29.77q69.346 29.769 120.654 81.076 51.307 51.308 81.076 120.654 29.77 69.345 29.77 148.499t-29.77 148.499q-29.769 69.346-81.076 120.654-51.308 51.307-120.654 81.076-69.345 29.77-148.499 29.77ZM480-160q54.154 0 104.423-17.423 50.27-17.423 89.27-48.731-39-30.154-88.116-47Q536.462-290.001 480-290.001q-56.462 0-105.77 16.654-49.308 16.654-87.923 47.193 39 31.308 89.27 48.731Q425.846-160 480-160Zm0-349.999q29.846 0 49.924-20.077 20.077-20.078 20.077-49.924t-20.077-49.924Q509.846-650.001 480-650.001t-49.924 20.077Q409.999-609.846 409.999-580t20.077 49.924q20.078 20.077 49.924 20.077ZM480-580Zm0 355Z"/><title>account</title></svg> 1727</a> 1728 1729 </div> 1730 1731 <!--Wishlist Icon--> 1732 <div class="flex items-center justify-center"> 1733 1734<a 1735 id="menu-wishlist" 1736 class="relative" 1737 href="https://www.eichholtz.com/en/wishlist/" 1738 title="Wish List" 1739 x-data="{ itemCount: 0 }" 1740 @private-content-loaded.window="itemCount = parseInt($event.detail.data.wishlist.counter)" 1741> 1742 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6 hover:text-black" role="img"><path d="m480-146.925-44.153-39.691q-99.461-90.231-164.5-155.077-65.038-64.846-103.076-115.423-38.039-50.577-53.154-92.269-15.116-41.692-15.116-84.615 0-85.153 57.423-142.576Q214.847-833.999 300-833.999q52.385 0 99 24.501 46.615 24.5 81 70.269 34.385-45.769 81-70.269 46.615-24.501 99-24.501 85.153 0 142.576 57.423Q859.999-719.153 859.999-634q0 42.923-15.116 84.615-15.115 41.692-53.154 92.269-38.038 50.577-102.884 115.423T524.153-186.616L480-146.925ZM480-228q96-86.385 158-148.077 62-61.692 98-107.192 36-45.5 50-80.808 14-35.308 14-69.923 0-60-40-100t-100-40q-47.385 0-87.577 26.885-40.192 26.884-63.654 74.808h-57.538q-23.846-48.308-63.846-75.001Q347.385-774 300-774q-59.615 0-99.808 40Q160-694 160-634q0 34.615 14 69.923t50 80.808q36 45.5 98 107T480-228Zm0-273Z"/><title>favorite</title></svg> 1743 1744 <template x-if="itemCount"> 1745 <div 1746 class="tabular-nums absolute top-0 right-0 flex items-center justify-center h-5 min-w-5 p-1 -mt-5 -mr-4 text-xs 1747 leading-none text-center text-white uppercase transform -translate-x-1
1748 translate-y-1/2 rounded-full bg-system-error border-2 border-white" 1749 > 1750 <span x-text="itemCount" class="-mt-0.5"></span> 1751 </div> 1752 </template> 1753 1754 <span class="sr-only label"> 1755 Wish List </span> 1756</a> 1757 </div> 1758 1759 <!--Cart Icon--> 1760 <div class="flex items-center justify-center"> 1761 <a id="menu-cart-icon" 1762 @click.prevent.stop="$dispatch('toggle-cart',{});" class="relative inline-block no-underline hover:text-black" 1763 href="https://www.eichholtz.com/en/checkout/cart/index/" 1764 > 1765 <span class="sr-only label"> 1766 Cart </span> 1767 1768 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="hover:text-black" role="img"><path d="M286.154-97.694q-29.153 0-49.576-20.422-20.423-20.423-20.423-49.577 0-29.153 20.423-49.576 20.423-20.423 49.576-20.423 29.154 0 49.577 20.423t20.423 49.576q0 29.154-20.423 49.577-20.423 20.422-49.577 20.422Zm387.692 0q-29.154 0-49.577-20.422-20.423-20.423-20.423-49.577 0-29.153 20.423-49.576 20.423-20.423 49.577-20.423 29.153 0 49.576 20.423 20.423 20.423 20.423 49.576 0 29.154-20.423 49.577-20.423 20.422-49.576 20.422ZM240.615-730 342-517.692h272.692q3.462 0 6.154-1.731 2.693-1.731 4.616-4.808l107.307-195q2.308-4.231.385-7.5-1.923-3.27-6.539-3.27h-486Zm-28.769-59.998h555.383q24.538 0 37.115 20.884 12.577 20.885 1.192 42.654L677.384-494.309q-9.847 17.308-26.039 26.962-16.192 9.653-35.499 9.653H324l-46.308 84.616q-3.077 4.616-.192 10.001t8.654 5.385h457.691v59.998H286.154q-39.999 0-60.115-34.499-20.115-34.5-1.423-68.884l57.078-102.616-145.539-306.308H60.001v-59.998h113.845l38 80ZM342-517.692h280-280Z"/><title>cart</title></svg> 1769 1770 <span x-text="cart.summary_count" 1771 class="absolute top-0 right-0 hidden h-5 px-2 -mt-5 -mr-3 text-xs font-semibold 1772 leading-none text-center uppercase transform -translate-x-1 1773 translate-y-1/2 rounded-full" 1774 :class="{'hidden': !cart.summary_count, 'block': cart.summary_count }"></span> 1775 </a> 1776 </div> 1777 </div> 1778 1779 <!--Main Navigation--> 1780 <div class="order-1 z-20 w-6 lg:basis-full lg:order-4 lg:w-full navigation" 1781 :class="{ 'hidden lg:flex' : isOpen }"> 1782 <div x-data="initMenuMobile_6abfd924009f6()" 1783 class="order-1 z-20 navigation w-6 lg:hidden" 1784> 1785 <!-- mobile --> 1786 <div @load.window="setActiveMenu($el)" 1787 class="z-50 bg-container-lighter" 1788 :class="{'h-screen overflow-x-hidden overflow-y-auto fixed top-0 left-0 w-full' : open}" 1789 @toggle-mobile-menu.window="open = !open" 1790 @keydown.window.escape="open=false" 1791 > 1792 <div class="flex items-baseline justify-between menu-icon"> 1793 <a @click="$dispatch('toggle-mobile-menu')" 1794 class="flex items-center justify-center cursor-pointer" 1795 :class="{'hidden' : open}"> 1796 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" role="img"><path d="M140.001-254.616v-59.999h679.998v59.999H140.001Zm0-195.385v-59.998h679.998v59.998H140.001Zm0-195.384v-59.999h679.998v59.999H140.001Z"/><title>menu</title></svg> 1797 </a> 1798 1799 <template x-if="open"> 1800 <a @click="$dispatch('toggle-mobile-menu')" 1801 class="flex items-center justify-center cursor-pointer ml-auto"> 1802 <svg xmlns="http://www.w3.org/2000/svg" height="40" viewBox="0 -960 960 960" width="40" class="block mr-7 mt-6 mb-4" role="img"><path d="m253.897-229.795-24.102-24.102L455.897-480 229.795-706.103l24.102-24.102L480-504.103l226.103-226.102 24.102 24.102L504.103-480l226.102 226.103-24.102 24.102L480-455.897 253.897-229.795Z"/><title>close-lg</title></svg> 1803 </a> 1804 </template> 1805 </div> 1806 1807 <nav 1808 class="hidden w-full duration-150 ease-in-out transform transition-display" 1809 :class="{ 'hidden' : !open }" 1810 > 1811 <div class="level-0 text-sm">
1812 <span 1813 class="flex items-center transition-transform duration-150 ease-in-out transform" 1814 :class="{'-translate-x-full': mobilePanelActiveId}" 1815 > 1816 <a class="flex text-lg font-bold items-center w-full px-6 py-2 cursor-pointer level-0" 1817 @click="handleNextMenu('category-node-127')" 1818 title="Collections"> 1819 <span class="category-name">Collections</span> 1820 </a> 1821 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 1822 @click="handleNextMenu('category-node-127')" 1823 > 1824 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 1825 </a> 1826 </span> 1827 <!-- level 1 --> 1828 <div 1829 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-full -translate-x-full" 1830 :class="{ 1831 'translate-x-full': !mobilePanelActiveId || !activeIds.includes('category-node-127'), 1832 '-translate-x-full': mobilePanelActiveId !== 'category-node-127', 1833 }"> 1834 <a class="flex items-center px-6 py-2 cursor-pointer" 1835 @click="mobilePanelActiveId = null, removeActiveId('category-node-127')" 1836 > 1837 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg> 1838 <span class="ml-4 text-lg font-bold"> 1839 Collections </span> 1840 </a> 1841 <div class="level-1"> 1842 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 1843 :class="{ 1844 '-translate-x-full': mobilePanelActiveId === 'category-node-441' 1845 }"> 1846 <a href="https://www.eichholtz.com/en/collection/collections/new-arrivals.html" 1847 title="New Arrivals" 1848 class="flex items-center w-full px-6 py-2 cursor-pointer" 1849 > 1850 New Arrivals </a> 1851 </span> 1852 <!-- level 3 --> 1853 <!-- /level 3 --> 1854 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 1855 :class="{ 1856 '-translate-x-full': mobilePanelActiveId === 'category-node-1187' 1857 }"> 1858 <a href="https://www.eichholtz.com/en/collection/ne
1858w/bold-and-iconic.html" 1859 title="Bold & Iconic" 1860 class="flex items-center w-full px-6 py-2 cursor-pointer" 1861 > 1862 Bold & Iconic </a> 1863 </span> 1864 <!-- level 3 --> 1865 <!-- /level 3 --> 1866 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 1867 :class="{ 1868 '-translate-x-full': mobilePanelActiveId === 'category-node-1189' 1869 }"> 1870 <a href="https://www.eichholtz.com/en/collection/new/atelier.html" 1871 title="Atelier" 1872 class="flex items-center w-full px-6 py-2 cursor-pointer" 1873 > 1874 Atelier </a> 1875 </span> 1876 <!-- level 3 --> 1877 <!-- /level 3 --> 1878 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 1879 :class="{ 1880 '-translate-x-full': mobilePanelActiveId === 'category-node-1196' 1881 }"> 1882 <span 1883 title="Collaborations" 1884 class="flex items-center w-full px-6 py-2 cursor-pointer" 1885 > 1886 Collaborations </span> 1887 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 1888 @click="handleNextMenu('category-node-1196', 'category-node-127')" 1889 > 1890 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 1891 </a> 1892 </span> 1893 <!-- level 3 --> 1894 <div 1895 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 1896 :class="{ 1897 'translate-x-full': mobilePanelActiveId === 'category-node-127' || mobilePanelActiveId === 'category-node-1196', 1898 'translate-x-0': mobilePanelActiveId !== 'category-node-127' && mobilePanelActiveId !== 'category-node-1196' 1899 }"> 1900 <a class="flex items-center px-6 py-2 cursor-pointer" 1901 @click="removeActiveId('category-node-1196'); mobilePanelActiveId = 'category-node-127'" 1902 > 1903 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
1904 <span class="ml-4 text-lg font-bold"> 1905 Collaborations </span> 1906 </a> 1907 <div class="level-2"> 1908 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 1909 :class="{ 1910 '-translate-x-full': mobilePanelActiveId === 'category-node-721' 1911 }"> 1912 <a href="https://www.eichholtz.com/en/collection/new/collaborations/the-met-x-eichholtz.html" 1913 title="The Met x Eichholtz" 1914 class="flex items-center w-full px-6 py-2 cursor-pointer" 1915 > 1916 The Met x Eichholtz </a> 1917 </span> 1918 </div> 1919 <div class="level-2"> 1920 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 1921 :class="{ 1922 '-translate-x-full': mobilePanelActiveId === 'category-node-1139' 1923 }"> 1924 <a href="https://www.eichholtz.com/en/collection/new/collaborations/corey-damen-jenkins.html" 1925 title="Corey Damen Jenkins" 1926 class="flex items-center w-full px-6 py-2 cursor-pointer" 1927 > 1928 Corey Damen Jenkins </a> 1929 </span> 1930 </div> 1931 </div> 1932 <!-- /level 3 --> 1933 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 1934 :class="{ 1935 '-translate-x-full': mobilePanelActiveId === 'category-node-1186' 1936 }"> 1937 <a href="https://www.eichholtz.com/en/collection/new/cityline-collection.html" 1938 title="City line collection" 1939 class="flex items-center w-full px-6 py-2 cursor-pointer" 1940 > 1941 City line collection </a> 1942 </span> 1943 <!-- level 3 --> 1944 <!-- /level 3 --> 1945 </div> 1946 </div> 1947 <!-- / level 2 --> 1948 </div> 1949 <div class="level-0 text-sm">
1950 <span 1951 class="flex items-center transition-transform duration-150 ease-in-out transform" 1952 :class="{'-translate-x-full': mobilePanelActiveId}" 1953 > 1954 <a class="flex text-lg font-bold items-center w-full px-6 py-2 cursor-pointer level-0" 1955 @click="handleNextMenu('category-node-124')" 1956 title="Furniture"> 1957 <span class="category-name">Furniture</span> 1958 </a> 1959 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 1960 @click="handleNextMenu('category-node-124')" 1961 > 1962 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 1963 </a> 1964 </span> 1965 <!-- level 1 --> 1966 <div 1967 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-full -translate-x-full" 1968 :class="{ 1969 'translate-x-full': !mobilePanelActiveId || !activeIds.includes('category-node-124'), 1970 '-translate-x-full': mobilePanelActiveId !== 'category-node-124', 1971 }"> 1972 <a class="flex items-center px-6 py-2 cursor-pointer" 1973 @click="mobilePanelActiveId = null, removeActiveId('category-node-124')" 1974 > 1975 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg> 1976 <span class="ml-4 text-lg font-bold"> 1977 Furniture </span> 1978 </a> 1979 <div class="level-1"> 1980 <a href="https://www.eichholtz.com/en/collection/furniture.html" 1981 title="Furniture" 1982 class="flex items-center w-full px-6 py-2 cursor-pointer"> 1983 All Furniture </a> 1984 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 1985 :class="{ 1986 '-translate-x-full': mobilePanelActiveId === 'category-node-1193' 1987 }"> 1988 <a href="https://www.eichholtz.com/en/collection/furniture/atelier.html" 1989 title="Atelier" 1990 class="flex items-center w-full px-6 py-2 cursor-pointer" 1991 > 1992 Atelier </a> 1993 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 1994 @click="handleNextMenu('category-node-1193', 'category-node-124')" 1995 > 1996 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 1997 </a> 1998 </span> 1999 <!-- level 3 --> 2000 <div 2001 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 2002 :class="{ 2003 'translate-x-full': mobilePanelActiveId === 'category-node-124' || mobilePanelActiveId === 'category-node-1193', 2004 'translate-x-0': mobilePanelActiveId !== 'category-node-124' && mobilePanelActiveId !== 'category-node-1193' 2005 }"> 2006 <a class="flex items-center px-6 py-2 cursor-pointer" 2007 @click="removeActiveId('category-node-1193'); mobilePanelActiveId = 'category-node-124'" 2008 > 2009 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
2010 <span class="ml-4 text-lg font-bold"> 2011 Atelier </span> 2012 </a> 2013 <a href="https://www.eichholtz.com/en/collection/furniture/atelier.html" 2014 title="Atelier" 2015 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2016 All Atelier </a> 2017 <div class="level-2"> 2018 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2019 :class="{ 2020 '-translate-x-full': mobilePanelActiveId === 'category-node-1194' 2021 }"> 2022 <a href="https://www.eichholtz.com/en/collection/furniture/atelier/sofa-lounge-club.html" 2023 title="Sofa Lounge Club" 2024 class="flex items-center w-full px-6 py-2 cursor-pointer" 2025 > 2026 Sofa Lounge Club </a> 2027 </span> 2028 </div> 2029 <div class="level-2"> 2030 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2031 :class="{ 2032 '-translate-x-full': mobilePanelActiveId === 'category-node-1195' 2033 }"> 2034 <a href="https://www.eichholtz.com/en/collection/furniture/atelier/modular-sofa-lounge-club.html" 2035 title="Modular Sofa Lounge Club" 2036 class="flex items-center w-full px-6 py-2 cursor-pointer" 2037 > 2038 Modular Sofa Lounge Club </a> 2039 </span> 2040 </div> 2041 </div> 2042 <!-- /level 3 --> 2043 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2044 :class="{ 2045 '-translate-x-full': mobilePanelActiveId === 'category-node-776' 2046 }"> 2047 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans.html" 2048 title="Sofas | Ottomans" 2049 class="flex items-center w-full px-6 py-2 cursor-pointer" 2050 > 2051 Sofas | Ottomans </a> 2052 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 2053 @click="handleNextMenu('category-node-776', 'category-node-124')" 2054 > 2055 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 2056 </a> 2057 </span> 2058 <!-- level 3 --> 2059 <div 2060 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 2061 :class="{ 2062 'translate-x-full': mobilePanelActiveId === 'category-node-124' || mobilePanelActiveId === 'category-node-776', 2063 'translate-x-0': mobilePanelActiveId !== 'category-node-124' && mobilePanelActiveId !== 'category-node-776' 2064 }"> 2065 <a class="flex items-center px-6 py-2 cursor-pointer" 2066 @click="removeActiveId('category-node-776'); mobilePanelActiveId = 'category-node-124'" 2067 > 2068 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
2069 <span class="ml-4 text-lg font-bold"> 2070 Sofas | Ottomans </span> 2071 </a> 2072 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans.html" 2073 title="Sofas | Ottomans" 2074 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2075 All Sofas | Ottomans </a> 2076 <div class="level-2"> 2077 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2078 :class="{ 2079 '-translate-x-full': mobilePanelActiveId === 'category-node-130' 2080 }"> 2081 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans/sofas.html" 2082 title="Sofas" 2083 class="flex items-center w-full px-6 py-2 cursor-pointer" 2084 > 2085 Sofas </a> 2086 </span> 2087 </div> 2088 <div class="level-2"> 2089 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2090 :class="{ 2091 '-translate-x-full': mobilePanelActiveId === 'category-node-830' 2092 }"> 2093 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans/modular-sofas.html" 2094 title="Modular sofas" 2095 class="flex items-center w-full px-6 py-2 cursor-pointer" 2096 > 2097 Modular sofas </a> 2098 </span> 2099 </div> 2100 <div class="level-2"> 2101 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2102 :class="{ 2103 '-translate-x-full': mobilePanelActiveId === 'category-node-777' 2104 }"> 2105 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans/ottomans.html" 2106 title="Ottomans" 2107 class="flex items-center w-full px-6 py-2 cursor-pointer" 2108 > 2109 Ottomans </a> 2110 </span> 2111 </div> 2112 <div class="level-2">
2113 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2114 :class="{ 2115 '-translate-x-full': mobilePanelActiveId === 'category-node-778' 2116 }"> 2117 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans/chaise-longues.html" 2118 title="Chaise longues" 2119 class="flex items-center w-full px-6 py-2 cursor-pointer" 2120 > 2121 Chaise longues </a> 2122 </span> 2123 </div> 2124 <div class="level-2"> 2125 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2126 :class="{ 2127 '-translate-x-full': mobilePanelActiveId === 'category-node-779' 2128 }"> 2129 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans/benches.html" 2130 title="Benches" 2131 class="flex items-center w-full px-6 py-2 cursor-pointer" 2132 > 2133 Benches </a> 2134 </span> 2135 </div> 2136 </div> 2137 <!-- /level 3 --> 2138 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2139 :class="{ 2140 '-translate-x-full': mobilePanelActiveId === 'category-node-771' 2141 }"> 2142 <a href="https://www.eichholtz.com/en/collection/furniture/chairs-2.html" 2143 title="Chairs" 2144 class="flex items-center w-full px-6 py-2 cursor-pointer" 2145 > 2146 Chairs </a> 2147 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 2148 @click="handleNextMenu('category-node-771', 'category-node-124')" 2149 > 2150 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 2151 </a> 2152 </span> 2153 <!-- level 3 --> 2154 <div 2155 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 2156 :class="{ 2157 'translate-x-full': mobilePanelActiveId === 'category-node-124' || mobilePanelActiveId === 'category-node-771', 2158 'translate-x-0': mobilePanelActiveId !== 'category-node-124' && mobilePanelActiveId !== 'category-node-771' 2159 }"> 2160 <a class="flex items-center px-6 py-2 cursor-pointer" 2161 @click="removeActiveId('category-node-771'); mobilePanelActiveId = 'category-node-124'" 2162 > 2163 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
2164 <span class="ml-4 text-lg font-bold"> 2165 Chairs </span> 2166 </a> 2167 <a href="https://www.eichholtz.com/en/collection/furniture/chairs-2.html" 2168 title="Chairs" 2169 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2170 All Chairs </a> 2171 <div class="level-2"> 2172 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2173 :class="{ 2174 '-translate-x-full': mobilePanelActiveId === 'category-node-144' 2175 }"> 2176 <a href="https://www.eichholtz.com/en/collection/furniture/chairs/armchairs.html" 2177 title="Armchairs" 2178 class="flex items-center w-full px-6 py-2 cursor-pointer" 2179 > 2180 Armchairs </a> 2181 </span> 2182 </div> 2183 <div class="level-2"> 2184 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2185 :class="{ 2186 '-translate-x-full': mobilePanelActiveId === 'category-node-216' 2187 }"> 2188 <a href="https://www.eichholtz.com/en/collection/furniture/chairs-2/dining-chairs.html" 2189 title="Dining chairs" 2190 class="flex items-center w-full px-6 py-2 cursor-pointer" 2191 > 2192 Dining chairs </a> 2193 </span> 2194 </div> 2195 <div class="level-2"> 2196 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2197 :class="{ 2198 '-translate-x-full': mobilePanelActiveId === 'category-node-164' 2199 }"> 2200 <a href="https://www.eichholtz.com/en/collection/furniture/chairs-2/bar-counterstools.html" 2201 title="Bar- & counterstools" 2202 class="flex items-center w-full px-6 py-2 cursor-pointer" 2203 > 2204 Bar- & counterstools </a> 2205 </span> 2206 </div> 2207 <div class="level-2">
2208 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2209 :class="{ 2210 '-translate-x-full': mobilePanelActiveId === 'category-node-774' 2211 }"> 2212 <a href="https://www.eichholtz.com/en/collection/furniture/chairs-2/stools.html" 2213 title="Stools" 2214 class="flex items-center w-full px-6 py-2 cursor-pointer" 2215 > 2216 Stools </a> 2217 </span> 2218 </div> 2219 </div> 2220 <!-- /level 3 --> 2221 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2222 :class="{ 2223 '-translate-x-full': mobilePanelActiveId === 'category-node-781' 2224 }"> 2225 <a href="https://www.eichholtz.com/en/collection/furniture/tables.html" 2226 title="Tables" 2227 class="flex items-center w-full px-6 py-2 cursor-pointer" 2228 > 2229 Tables </a> 2230 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 2231 @click="handleNextMenu('category-node-781', 'category-node-124')" 2232 > 2233 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 2234 </a> 2235 </span> 2236 <!-- level 3 --> 2237 <div 2238 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 2239 :class="{ 2240 'translate-x-full': mobilePanelActiveId === 'category-node-124' || mobilePanelActiveId === 'category-node-781', 2241 'translate-x-0': mobilePanelActiveId !== 'category-node-124' && mobilePanelActiveId !== 'category-node-781' 2242 }"> 2243 <a class="flex items-center px-6 py-2 cursor-pointer" 2244 @click="removeActiveId('category-node-781'); mobilePanelActiveId = 'category-node-124'" 2245 > 2246 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
2247 <span class="ml-4 text-lg font-bold"> 2248 Tables </span> 2249 </a> 2250 <a href="https://www.eichholtz.com/en/collection/furniture/tables.html" 2251 title="Tables" 2252 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2253 All Tables </a> 2254 <div class="level-2"> 2255 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2256 :class="{ 2257 '-translate-x-full': mobilePanelActiveId === 'category-node-129' 2258 }"> 2259 <a href="https://www.eichholtz.com/en/collection/furniture/tables/coffee-tables.html" 2260 title="Coffee tables" 2261 class="flex items-center w-full px-6 py-2 cursor-pointer" 2262 > 2263 Coffee tables </a> 2264 </span> 2265 </div> 2266 <div class="level-2"> 2267 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2268 :class="{ 2269 '-translate-x-full': mobilePanelActiveId === 'category-node-782' 2270 }"> 2271 <a href="https://www.eichholtz.com/en/collection/furniture/tables/side-tables.html" 2272 title="Side tables" 2273 class="flex items-center w-full px-6 py-2 cursor-pointer" 2274 > 2275 Side tables </a> 2276 </span> 2277 </div> 2278 <div class="level-2"> 2279 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2280 :class="{ 2281 '-translate-x-full': mobilePanelActiveId === 'category-node-783' 2282 }"> 2283 <a href="https://www.eichholtz.com/en/collection/furniture/tables/console-tables.html" 2284 title="Console tables" 2285 class="flex items-center w-full px-6 py-2 cursor-pointer" 2286 > 2287 Console tables </a> 2288 </span> 2289 </div> 2290 <div class="level-2">
2291 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2292 :class="{ 2293 '-translate-x-full': mobilePanelActiveId === 'category-node-784' 2294 }"> 2295 <a href="https://www.eichholtz.com/en/collection/furniture/tables/dining-tables.html" 2296 title="Dining tables" 2297 class="flex items-center w-full px-6 py-2 cursor-pointer" 2298 > 2299 Dining tables </a> 2300 </span> 2301 </div> 2302 <div class="level-2"> 2303 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2304 :class="{ 2305 '-translate-x-full': mobilePanelActiveId === 'category-node-785' 2306 }"> 2307 <a href="https://www.eichholtz.com/en/collection/furniture/tables/desks.html" 2308 title="Desks" 2309 class="flex items-center w-full px-6 py-2 cursor-pointer" 2310 > 2311 Desks </a> 2312 </span> 2313 </div> 2314 <div class="level-2"> 2315 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2316 :class="{ 2317 '-translate-x-full': mobilePanelActiveId === 'category-node-173' 2318 }"> 2319 <a href="https://www.eichholtz.com/en/collection/furniture/tables/trolleys-bars-butler-trays.html" 2320 title="Trolleys" 2321 class="flex items-center w-full px-6 py-2 cursor-pointer" 2322 > 2323 Trolleys </a> 2324 </span> 2325 </div> 2326 <div class="level-2"> 2327 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2328 :class="{ 2329 '-translate-x-full': mobilePanelActiveId === 'category-node-786' 2330 }"> 2331 <a href="https://www.eichholtz.com/en/collection/furniture/tables/bars-butler-trays.html" 2332 title="Bars | Butler trays" 2333 class="flex items-center w-full px-6 py-2 cursor-pointer" 2334 > 2335 Bars | Butler trays </a> 2336 </span> 2337 </div> 2338 <div class="level-2">
2339 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2340 :class="{ 2341 '-translate-x-full': mobilePanelActiveId === 'category-node-787' 2342 }"> 2343 <a href="https://www.eichholtz.com/en/collection/furniture/tables/columns.html" 2344 title="Columns" 2345 class="flex items-center w-full px-6 py-2 cursor-pointer" 2346 > 2347 Columns </a> 2348 </span> 2349 </div> 2350 </div> 2351 <!-- /level 3 --> 2352 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2353 :class="{ 2354 '-translate-x-full': mobilePanelActiveId === 'category-node-764' 2355 }"> 2356 <a href="https://www.eichholtz.com/en/collection/furniture/cabinets.html" 2357 title="Cabinets" 2358 class="flex items-center w-full px-6 py-2 cursor-pointer" 2359 > 2360 Cabinets </a> 2361 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 2362 @click="handleNextMenu('category-node-764', 'category-node-124')" 2363 > 2364 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 2365 </a> 2366 </span> 2367 <!-- level 3 --> 2368 <div 2369 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 2370 :class="{ 2371 'translate-x-full': mobilePanelActiveId === 'category-node-124' || mobilePanelActiveId === 'category-node-764', 2372 'translate-x-0': mobilePanelActiveId !== 'category-node-124' && mobilePanelActiveId !== 'category-node-764' 2373 }"> 2374 <a class="flex items-center px-6 py-2 cursor-pointer" 2375 @click="removeActiveId('category-node-764'); mobilePanelActiveId = 'category-node-124'" 2376 > 2377 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
2378 <span class="ml-4 text-lg font-bold"> 2379 Cabinets </span> 2380 </a> 2381 <a href="https://www.eichholtz.com/en/collection/furniture/cabinets.html" 2382 title="Cabinets" 2383 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2384 All Cabinets </a> 2385 <div class="level-2"> 2386 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2387 :class="{ 2388 '-translate-x-full': mobilePanelActiveId === 'category-node-765' 2389 }"> 2390 <a href="https://www.eichholtz.com/en/collection/furniture/cabinets/display-cabinets.html" 2391 title="Display cabinets" 2392 class="flex items-center w-full px-6 py-2 cursor-pointer" 2393 > 2394 Display cabinets </a> 2395 </span> 2396 </div> 2397 <div class="level-2"> 2398 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2399 :class="{ 2400 '-translate-x-full': mobilePanelActiveId === 'category-node-766' 2401 }"> 2402 <a href="https://www.eichholtz.com/en/collection/furniture/cabinets/dressers.html" 2403 title="Dressers" 2404 class="flex items-center w-full px-6 py-2 cursor-pointer" 2405 > 2406 Dressers </a> 2407 </span> 2408 </div> 2409 <div class="level-2"> 2410 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2411 :class="{ 2412 '-translate-x-full': mobilePanelActiveId === 'category-node-767' 2413 }"> 2414 <a href="https://www.eichholtz.com/en/collection/furniture/cabinets/tv-cabinets.html" 2415 title="Tv Cabinets" 2416 class="flex items-center w-full px-6 py-2 cursor-pointer" 2417 > 2418 Tv Cabinets </a> 2419 </span> 2420 </div> 2421 <div class="level-2">
2422 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2423 :class="{ 2424 '-translate-x-full': mobilePanelActiveId === 'category-node-768' 2425 }"> 2426 <a href="https://www.eichholtz.com/en/collection/furniture/cabinets/bar-cabinets.html" 2427 title="Bar cabinets" 2428 class="flex items-center w-full px-6 py-2 cursor-pointer" 2429 > 2430 Bar cabinets </a> 2431 </span> 2432 </div> 2433 </div> 2434 <!-- /level 3 --> 2435 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2436 :class="{ 2437 '-translate-x-full': mobilePanelActiveId === 'category-node-762' 2438 }"> 2439 <a href="https://www.eichholtz.com/en/collection/furniture/bedroom.html" 2440 title="Bedroom" 2441 class="flex items-center w-full px-6 py-2 cursor-pointer" 2442 > 2443 Bedroom </a> 2444 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 2445 @click="handleNextMenu('category-node-762', 'category-node-124')" 2446 > 2447 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 2448 </a> 2449 </span> 2450 <!-- level 3 --> 2451 <div 2452 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 2453 :class="{ 2454 'translate-x-full': mobilePanelActiveId === 'category-node-124' || mobilePanelActiveId === 'category-node-762', 2455 'translate-x-0': mobilePanelActiveId !== 'category-node-124' && mobilePanelActiveId !== 'category-node-762' 2456 }"> 2457 <a class="flex items-center px-6 py-2 cursor-pointer" 2458 @click="removeActiveId('category-node-762'); mobilePanelActiveId = 'category-node-124'" 2459 > 2460 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
2461 <span class="ml-4 text-lg font-bold"> 2462 Bedroom </span> 2463 </a> 2464 <a href="https://www.eichholtz.com/en/collection/furniture/bedroom.html" 2465 title="Bedroom" 2466 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2467 All Bedroom </a> 2468 <div class="level-2"> 2469 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2470 :class="{ 2471 '-translate-x-full': mobilePanelActiveId === 'category-node-131' 2472 }"> 2473 <a href="https://www.eichholtz.com/en/collection/furniture/bedroom/headboards-beds.html" 2474 title="Headboards & beds" 2475 class="flex items-center w-full px-6 py-2 cursor-pointer" 2476 > 2477 Headboards & beds </a> 2478 </span> 2479 </div> 2480 <div class="level-2"> 2481 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2482 :class="{ 2483 '-translate-x-full': mobilePanelActiveId === 'category-node-595' 2484 }"> 2485 <a href="https://www.eichholtz.com/en/collection/furniture/bedroom/nightstands.html" 2486 title="Nightstands" 2487 class="flex items-center w-full px-6 py-2 cursor-pointer" 2488 > 2489 Nightstands </a> 2490 </span> 2491 </div> 2492 <div class="level-2"> 2493 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2494 :class="{ 2495 '-translate-x-full': mobilePanelActiveId === 'category-node-763' 2496 }"> 2497 <a href="https://www.eichholtz.com/en/collection/furniture/bedroom/dressers.html" 2498 title="Drawer dressers" 2499 class="flex items-center w-full px-6 py-2 cursor-pointer" 2500 > 2501 Drawer dressers </a> 2502 </span> 2503 </div> 2504 </div> 2505 <!-- /level 3 --> 2506 <sp
2506an class="flex items-center transition-transform duration-150 ease-in-out transform" 2507 :class="{ 2508 '-translate-x-full': mobilePanelActiveId === 'category-node-136' 2509 }"> 2510 <a href="https://www.eichholtz.com/en/collection/furniture/rugs-carpets.html" 2511 title="Rugs | Carpets" 2512 class="flex items-center w-full px-6 py-2 cursor-pointer" 2513 > 2514 Rugs | Carpets </a> 2515 </span> 2516 <!-- level 3 --> 2517 <!-- /level 3 --> 2518 </div> 2519 </div> 2520 <!-- / level 2 --> 2521 </div> 2522 <div class="level-0 text-sm"> 2523 <span 2524 class="flex items-center transition-transform duration-150 ease-in-out transform" 2525 :class="{'-translate-x-full': mobilePanelActiveId}" 2526 > 2527 <a class="flex text-lg font-bold items-center w-full px-6 py-2 cursor-pointer level-0" 2528 @click="handleNextMenu('category-node-125')" 2529 title="Lighting"> 2530 <span class="category-name">Lighting</span> 2531 </a> 2532 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 2533 @click="handleNextMenu('category-node-125')" 2534 > 2535 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 2536 </a> 2537 </span> 2538 <!-- level 1 --> 2539 <div 2540 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-full -translate-x-full" 2541 :class="{ 2542 'translate-x-full': !mobilePanelActiveId || !activeIds.includes('category-node-125'), 2543 '-translate-x-full': mobilePanelActiveId !== 'category-node-125', 2544 }"> 2545 <a class="flex items-center px-6 py-2 cursor-pointer" 2546 @click="mobilePanelActiveId = null, removeActiveId('category-node-125')" 2547 > 2548 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg> 2549 <span class="ml-4 text-lg font-bold"> 2550 Lighting </span> 2551 </a> 2552 <div class="level-1"> 2553 <a href="https://www.eichholtz.com/en/collection/lighting.html" 2554 title="Lighting" 2555 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2556 All Lighting </a> 2557 <sp
2557an class="flex items-center transition-transform duration-150 ease-in-out transform" 2558 :class="{ 2559 '-translate-x-full': mobilePanelActiveId === 'category-node-137' 2560 }"> 2561 <a href="https://www.eichholtz.com/en/collection/lighting/chandeliers.html" 2562 title="Chandeliers" 2563 class="flex items-center w-full px-6 py-2 cursor-pointer" 2564 > 2565 Chandeliers </a> 2566 </span> 2567 <!-- level 3 --> 2568 <!-- /level 3 --> 2569 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2570 :class="{ 2571 '-translate-x-full': mobilePanelActiveId === 'category-node-214' 2572 }"> 2573 <a href="https://www.eichholtz.com/en/collection/lighting/ceiling-lamps.html" 2574 title="Ceiling lamps" 2575 class="flex items-center w-full px-6 py-2 cursor-pointer" 2576 > 2577 Ceiling lamps </a> 2578 </span> 2579 <!-- level 3 --> 2580 <!-- /level 3 --> 2581 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2582 :class="{ 2583 '-translate-x-full': mobilePanelActiveId === 'category-node-138' 2584 }"> 2585 <a href="https://www.eichholtz.com/en/collection/lighting/table-lamps.html" 2586 title="Table lamps" 2587 class="flex items-center w-full px-6 py-2 cursor-pointer" 2588 > 2589 Table lamps </a> 2590 </span> 2591 <!-- level 3 --> 2592 <!-- /level 3 --> 2593 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2594 :class="{ 2595 '-translate-x-full': mobilePanelActiveId === 'category-node-139' 2596 }"> 2597 <a href="https://www.eichholtz.com/en/collection/lighting/floor-lamps.html" 2598 title="Floor lamps" 2599 class="flex items-center w-full px-6 py-2 cursor-pointer" 2600 > 2601 Floor lamps </a> 2602 </span> 2603 <!-- level 3 --> 2604 <!-- /level 3 --> 2605 <sp
2605an class="flex items-center transition-transform duration-150 ease-in-out transform" 2606 :class="{ 2607 '-translate-x-full': mobilePanelActiveId === 'category-node-140' 2608 }"> 2609 <a href="https://www.eichholtz.com/en/collection/lighting/wall-lamps.html" 2610 title="Wall lamps" 2611 class="flex items-center w-full px-6 py-2 cursor-pointer" 2612 > 2613 Wall lamps </a> 2614 </span> 2615 <!-- level 3 --> 2616 <!-- /level 3 --> 2617 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2618 :class="{ 2619 '-translate-x-full': mobilePanelActiveId === 'category-node-1143' 2620 }"> 2621 <a href="https://www.eichholtz.com/en/collection/lighting/outdoor-lighting.html" 2622 title="Outdoor lighting" 2623 class="flex items-center w-full px-6 py-2 cursor-pointer" 2624 > 2625 Outdoor lighting </a> 2626 </span> 2627 <!-- level 3 --> 2628 <!-- /level 3 --> 2629 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2630 :class="{ 2631 '-translate-x-full': mobilePanelActiveId === 'category-node-142' 2632 }"> 2633 <a href="https://www.eichholtz.com/en/collection/lighting/lamp-shades.html" 2634 title="Lamp shades" 2635 class="flex items-center w-full px-6 py-2 cursor-pointer" 2636 > 2637 Lamp shades </a> 2638 </span> 2639 <!-- level 3 --> 2640 <!-- /level 3 --> 2641 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2642 :class="{ 2643 '-translate-x-full': mobilePanelActiveId === 'category-node-141' 2644 }"> 2645 <a href="https://www.eichholtz.com/en/collection/lighting/led-bulbs.html" 2646 title="LED bulbs" 2647 class="flex items-center w-full px-6 py-2 cursor-pointer" 2648 > 2649 LED bulbs </a> 2650 </span> 2651 <!-- level 3 --> 2652 <!-- /level 3 --> 2653 </div> 2654 </div> 2655 <!-- / level 2 --> 2656 </div> 2657 <div class="level-0 text-sm">
2658 <span 2659 class="flex items-center transition-transform duration-150 ease-in-out transform" 2660 :class="{'-translate-x-full': mobilePanelActiveId}" 2661 > 2662 <a class="flex text-lg font-bold items-center w-full px-6 py-2 cursor-pointer level-0" 2663 @click="handleNextMenu('category-node-126')" 2664 title="Accessories"> 2665 <span class="category-name">Accessories</span> 2666 </a> 2667 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 2668 @click="handleNextMenu('category-node-126')" 2669 > 2670 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 2671 </a> 2672 </span> 2673 <!-- level 1 --> 2674 <div 2675 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-full -translate-x-full" 2676 :class="{ 2677 'translate-x-full': !mobilePanelActiveId || !activeIds.includes('category-node-126'), 2678 '-translate-x-full': mobilePanelActiveId !== 'category-node-126', 2679 }"> 2680 <a class="flex items-center px-6 py-2 cursor-pointer" 2681 @click="mobilePanelActiveId = null, removeActiveId('category-node-126')" 2682 > 2683 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg> 2684 <span class="ml-4 text-lg font-bold"> 2685 Accessories </span> 2686 </a> 2687 <div class="level-1"> 2688 <a href="https://www.eichholtz.com/en/collection/accessories.html" 2689 title="Accessories" 2690 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2691 All Accessories </a> 2692 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2693 :class="{ 2694 '-translate-x-full': mobilePanelActiveId === 'category-node-801' 2695 }"> 2696 <a href="https://www.eichholtz.com/en/collection/accessories/mirrors.html" 2697 title="Mirrors" 2698 class="flex items-center w-full px-6 py-2 cursor-pointer" 2699 > 2700 Mirrors </a> 2701 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 2702 @click="handleNextMenu('category-node-801', 'category-node-126')" 2703 > 2704 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 2705 </a> 2706 </span> 2707 <!-- level 3 --> 2708 <div 2709 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 2710 :class="{ 2711 'translate-x-full': mobilePanelActiveId === 'category-node-126' || mobilePanelActiveId === 'category-node-801', 2712 'translate-x-0': mobilePanelActiveId !== 'category-node-126' && mobilePanelActiveId !== 'category-node-801' 2713 }"> 2714 <a class="flex items-center px-6 py-2 cursor-pointer" 2715 @click="removeActiveId('category-node-801'); mobilePanelActiveId = 'category-node-126'" 2716 > 2717 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
2718 <span class="ml-4 text-lg font-bold"> 2719 Mirrors </span> 2720 </a> 2721 <a href="https://www.eichholtz.com/en/collection/accessories/mirrors.html" 2722 title="Mirrors" 2723 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2724 All Mirrors </a> 2725 <div class="level-2"> 2726 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2727 :class="{ 2728 '-translate-x-full': mobilePanelActiveId === 'category-node-799' 2729 }"> 2730 <a href="https://www.eichholtz.com/en/collection/accessories/mirrors/table-and-floor-mirrors.html" 2731 title="Table and floor mirrors" 2732 class="flex items-center w-full px-6 py-2 cursor-pointer" 2733 > 2734 Table and floor mirrors </a> 2735 </span> 2736 </div> 2737 <div class="level-2"> 2738 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2739 :class="{ 2740 '-translate-x-full': mobilePanelActiveId === 'category-node-802' 2741 }"> 2742 <a href="https://www.eichholtz.com/en/collection/accessories/mirrors/wall-mirrors.html" 2743 title="Wall mirrors" 2744 class="flex items-center w-full px-6 py-2 cursor-pointer" 2745 > 2746 Wall mirrors </a> 2747 </span> 2748 </div> 2749 </div> 2750 <!-- /level 3 --> 2751 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2752 :class="{ 2753 '-translate-x-full': mobilePanelActiveId === 'category-node-803' 2754 }"> 2755 <a href="https://www.eichholtz.com/en/collection/accessories/wall-decorations.html" 2756 title="Wall decorations" 2757 class="flex items-center w-full px-6 py-2 cursor-pointer" 2758 > 2759 Wall decorations </a> 2760 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 2761 @click="handleNextMenu('category-node-803', 'category-node-126')" 2762 > 2763 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 2764 </a> 2765 </span> 2766 <!-- level 3 --> 2767 <div 2768 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 2769 :class="{ 2770 'translate-x-full': mobilePanelActiveId === 'category-node-126' || mobilePanelActiveId === 'category-node-803', 2771 'translate-x-0': mobilePanelActiveId !== 'category-node-126' && mobilePanelActiveId !== 'category-node-803' 2772 }"> 2773 <a class="flex items-center px-6 py-2 cursor-pointer" 2774 @click="removeActiveId('category-node-803'); mobilePanelActiveId = 'category-node-126'" 2775 > 2776 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
2777 <span class="ml-4 text-lg font-bold"> 2778 Wall decorations </span> 2779 </a> 2780 <a href="https://www.eichholtz.com/en/collection/accessories/wall-decorations.html" 2781 title="Wall decorations" 2782 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2783 All Wall decorations </a> 2784 <div class="level-2"> 2785 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2786 :class="{ 2787 '-translate-x-full': mobilePanelActiveId === 'category-node-804' 2788 }"> 2789 <a href="https://www.eichholtz.com/en/collection/accessories/wall-decorations/wall-objects.html" 2790 title="Wall objects" 2791 class="flex items-center w-full px-6 py-2 cursor-pointer" 2792 > 2793 Wall objects </a> 2794 </span> 2795 </div> 2796 <div class="level-2"> 2797 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2798 :class="{ 2799 '-translate-x-full': mobilePanelActiveId === 'category-node-252' 2800 }"> 2801 <a href="https://www.eichholtz.com/en/collection/accessories/wall-decorations/prints-wall-accessories.html" 2802 title="Prints" 2803 class="flex items-center w-full px-6 py-2 cursor-pointer" 2804 > 2805 Prints </a> 2806 </span> 2807 </div> 2808 </div> 2809 <!-- /level 3 --> 2810 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2811 :class="{ 2812 '-translate-x-full': mobilePanelActiveId === 'category-node-805' 2813 }"> 2814 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items.html" 2815 title="Decorative items" 2816 class="flex items-center w-full px-6 py-2 cursor-pointer" 2817 > 2818 Decorative items </a> 2819 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 2820 @click="handleNextMenu('category-node-805', 'category-node-126')" 2821 > 2822 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 2823 </a> 2824 </span> 2825 <!-- level 3 --> 2826 <div 2827 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 2828 :class="{ 2829 'translate-x-full': mobilePanelActiveId === 'category-node-126' || mobilePanelActiveId === 'category-node-805', 2830 'translate-x-0': mobilePanelActiveId !== 'category-node-126' && mobilePanelActiveId !== 'category-node-805' 2831 }"> 2832 <a class="flex items-center px-6 py-2 cursor-pointer" 2833 @click="removeActiveId('category-node-805'); mobilePanelActiveId = 'category-node-126'" 2834 > 2835 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
2836 <span class="ml-4 text-lg font-bold"> 2837 Decorative items </span> 2838 </a> 2839 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items.html" 2840 title="Decorative items" 2841 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2842 All Decorative items </a> 2843 <div class="level-2"> 2844 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2845 :class="{ 2846 '-translate-x-full': mobilePanelActiveId === 'category-node-159' 2847 }"> 2848 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/ashtrays-bowls.html" 2849 title="Ashtrays" 2850 class="flex items-center w-full px-6 py-2 cursor-pointer" 2851 > 2852 Ashtrays </a> 2853 </span> 2854 </div> 2855 <div class="level-2"> 2856 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2857 :class="{ 2858 '-translate-x-full': mobilePanelActiveId === 'category-node-808' 2859 }"> 2860 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/bookends.html" 2861 title="Bookends" 2862 class="flex items-center w-full px-6 py-2 cursor-pointer" 2863 > 2864 Bookends </a> 2865 </span> 2866 </div> 2867 <div class="level-2"> 2868 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2869 :class="{ 2870 '-translate-x-full': mobilePanelActiveId === 'category-node-809' 2871 }"> 2872 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/bowls.html" 2873 title="Bowls" 2874 class="flex items-center w-full px-6 py-2 cursor-pointer" 2875 > 2876 Bowls </a> 2877 </span> 2878 </div> 2879 <div class="level-2">
2880 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2881 :class="{ 2882 '-translate-x-full': mobilePanelActiveId === 'category-node-810' 2883 }"> 2884 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/boxes.html" 2885 title="Boxes" 2886 class="flex items-center w-full px-6 py-2 cursor-pointer" 2887 > 2888 Boxes </a> 2889 </span> 2890 </div> 2891 <div class="level-2"> 2892 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2893 :class="{ 2894 '-translate-x-full': mobilePanelActiveId === 'category-node-152' 2895 }"> 2896 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/decorative-objects.html" 2897 title="Decorative objects" 2898 class="flex items-center w-full px-6 py-2 cursor-pointer" 2899 > 2900 Decorative objects </a> 2901 </span> 2902 </div> 2903 <div class="level-2"> 2904 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2905 :class="{ 2906 '-translate-x-full': mobilePanelActiveId === 'category-node-175' 2907 }"> 2908 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/picture-frames.html" 2909 title="Picture frames" 2910 class="flex items-center w-full px-6 py-2 cursor-pointer" 2911 > 2912 Picture frames </a> 2913 </span> 2914 </div> 2915 <div class="level-2"> 2916 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2917 :class="{
2918 '-translate-x-full': mobilePanelActiveId === 'category-node-170' 2919 }"> 2920 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/bronzes-sculptures-statues.html" 2921 title="Statues" 2922 class="flex items-center w-full px-6 py-2 cursor-pointer" 2923 > 2924 Statues </a> 2925 </span> 2926 </div> 2927 </div> 2928 <!-- /level 3 --> 2929 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2930 :class="{ 2931 '-translate-x-full': mobilePanelActiveId === 'category-node-811' 2932 }"> 2933 <a href="https://www.eichholtz.com/en/collection/accessories/hurricanes-candle-holders.html" 2934 title="Hurricanes | Candle holders" 2935 class="flex items-center w-full px-6 py-2 cursor-pointer" 2936 > 2937 Hurricanes | Candle holders </a> 2938 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 2939 @click="handleNextMenu('category-node-811', 'category-node-126')" 2940 > 2941 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 2942 </a> 2943 </span> 2944 <!-- level 3 --> 2945 <div 2946 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 2947 :class="{ 2948 'translate-x-full': mobilePanelActiveId === 'category-node-126' || mobilePanelActiveId === 'category-node-811', 2949 'translate-x-0': mobilePanelActiveId !== 'category-node-126' && mobilePanelActiveId !== 'category-node-811' 2950 }"> 2951 <a class="flex items-center px-6 py-2 cursor-pointer" 2952 @click="removeActiveId('category-node-811'); mobilePanelActiveId = 'category-node-126'" 2953 > 2954 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
2955 <span class="ml-4 text-lg font-bold"> 2956 Hurricanes | Candle holders </span> 2957 </a> 2958 <a href="https://www.eichholtz.com/en/collection/accessories/hurricanes-candle-holders.html" 2959 title="Hurricanes | Candle holders" 2960 class="flex items-center w-full px-6 py-2 cursor-pointer"> 2961 All Hurricanes | Candle holders </a> 2962 <div class="level-2"> 2963 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2964 :class="{ 2965 '-translate-x-full': mobilePanelActiveId === 'category-node-812' 2966 }"> 2967 <a href="https://www.eichholtz.com/en/collection/accessories/hurricanes-candle-holders/candle-holders.html" 2968 title="Candle holders" 2969 class="flex items-center w-full px-6 py-2 cursor-pointer" 2970 > 2971 Candle holders </a> 2972 </span> 2973 </div> 2974 <div class="level-2"> 2975 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2976 :class="{ 2977 '-translate-x-full': mobilePanelActiveId === 'category-node-813' 2978 }"> 2979 <a href="https://www.eichholtz.com/en/collection/accessories/hurricanes-candle-holders/candles.html" 2980 title="Candles" 2981 class="flex items-center w-full px-6 py-2 cursor-pointer" 2982 > 2983 Candles </a> 2984 </span> 2985 </div> 2986 <div class="level-2"> 2987 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 2988 :class="{ 2989 '-translate-x-full': mobilePanelActiveId === 'category-node-166' 2990 }"> 2991 <a href="https://www.eichholtz.com/en/collection/accessories/hurricanes-candle-holders/hurricanes.html" 2992 title="Hurricanes" 2993 class="flex items-center w-full px-6 py-2 cursor-pointer" 2994 > 2995 Hurricanes </a> 2996 </span> 2997 </div> 2998 </div> 2999 <!-- /level 3 --> 3000 <sp
3000an class="flex items-center transition-transform duration-150 ease-in-out transform" 3001 :class="{ 3002 '-translate-x-full': mobilePanelActiveId === 'category-node-924' 3003 }"> 3004 <a href="https://www.eichholtz.com/en/collection/accessories/artificial-flowers-and-greenery.html" 3005 title="Artificial Flowers & Greenery" 3006 class="flex items-center w-full px-6 py-2 cursor-pointer" 3007 > 3008 Artificial Flowers & Greenery </a> 3009 </span> 3010 <!-- level 3 --> 3011 <!-- /level 3 --> 3012 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3013 :class="{ 3014 '-translate-x-full': mobilePanelActiveId === 'category-node-814' 3015 }"> 3016 <a href="https://www.eichholtz.com/en/collection/accessories/vases-planters.html" 3017 title="Vases | Planters" 3018 class="flex items-center w-full px-6 py-2 cursor-pointer" 3019 > 3020 Vases | Planters </a> 3021 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 3022 @click="handleNextMenu('category-node-814', 'category-node-126')" 3023 > 3024 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 3025 </a> 3026 </span> 3027 <!-- level 3 --> 3028 <div 3029 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 3030 :class="{ 3031 'translate-x-full': mobilePanelActiveId === 'category-node-126' || mobilePanelActiveId === 'category-node-814', 3032 'translate-x-0': mobilePanelActiveId !== 'category-node-126' && mobilePanelActiveId !== 'category-node-814' 3033 }"> 3034 <a class="flex items-center px-6 py-2 cursor-pointer" 3035 @click="removeActiveId('category-node-814'); mobilePanelActiveId = 'category-node-126'" 3036 > 3037 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg> 3038 <span class="ml-4 text-lg font-bold"> 3039 Vases | Planters </span> 3040 </a> 3041 <a href="https://www.eichholtz.com/en/collection/accessories/vases-planters.html" 3042 title="Vases | Planters" 3043 class="flex items-center w-full px-6 py-2 cursor-pointer"> 3044 All Vases | Planters </a> 3045 <div class="level-2">
3046 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3047 :class="{ 3048 '-translate-x-full': mobilePanelActiveId === 'category-node-167' 3049 }"> 3050 <a href="https://www.eichholtz.com/en/collection/accessories/vases-planters/planters-ceramics-vases.html" 3051 title="Vases" 3052 class="flex items-center w-full px-6 py-2 cursor-pointer" 3053 > 3054 Vases </a> 3055 </span> 3056 </div> 3057 <div class="level-2"> 3058 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3059 :class="{ 3060 '-translate-x-full': mobilePanelActiveId === 'category-node-815' 3061 }"> 3062 <a href="https://www.eichholtz.com/en/collection/accessories/vases-planters/planters.html" 3063 title="Planters" 3064 class="flex items-center w-full px-6 py-2 cursor-pointer" 3065 > 3066 Planters </a> 3067 </span> 3068 </div> 3069 </div> 3070 <!-- /level 3 --> 3071 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3072 :class="{ 3073 '-translate-x-full': mobilePanelActiveId === 'category-node-816' 3074 }"> 3075 <a href="https://www.eichholtz.com/en/collection/accessories/serving-accessories.html" 3076 title="Serving accessories" 3077 class="flex items-center w-full px-6 py-2 cursor-pointer" 3078 > 3079 Serving accessories </a> 3080 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 3081 @click="handleNextMenu('category-node-816', 'category-node-126')" 3082 > 3083 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 3084 </a> 3085 </span> 3086 <!-- level 3 --> 3087 <div 3088 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 3089 :class="{ 3090 'translate-x-full': mobilePanelActiveId === 'category-node-126' || mobilePanelActiveId === 'category-node-816', 3091 'translate-x-0': mobilePanelActiveId !== 'category-node-126' && mobilePanelActiveId !== 'category-node-816' 3092 }"> 3093 <a class="flex items-center px-6 py-2 cursor-pointer" 3094 @click="removeActiveId('category-node-816'); mobilePanelActiveId = 'category-node-126'" 3095 > 3096 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
3097 <span class="ml-4 text-lg font-bold"> 3098 Serving accessories </span> 3099 </a> 3100 <a href="https://www.eichholtz.com/en/collection/accessories/serving-accessories.html" 3101 title="Serving accessories" 3102 class="flex items-center w-full px-6 py-2 cursor-pointer"> 3103 All Serving accessories </a> 3104 <div class="level-2"> 3105 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3106 :class="{ 3107 '-translate-x-full': mobilePanelActiveId === 'category-node-168' 3108 }"> 3109 <a href="https://www.eichholtz.com/en/collection/accessories/serving-accessories/trays-serving-accessories.html" 3110 title="Serving accessories" 3111 class="flex items-center w-full px-6 py-2 cursor-pointer" 3112 > 3113 Serving accessories </a> 3114 </span> 3115 </div> 3116 <div class="level-2"> 3117 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3118 :class="{ 3119 '-translate-x-full': mobilePanelActiveId === 'category-node-817' 3120 }"> 3121 <a href="https://www.eichholtz.com/en/collection/accessories/serving-accessories/wine-coolers.html" 3122 title="Wine coolers" 3123 class="flex items-center w-full px-6 py-2 cursor-pointer" 3124 > 3125 Wine coolers </a> 3126 </span> 3127 </div> 3128 <div class="level-2"> 3129 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3130 :class="{ 3131 '-translate-x-full': mobilePanelActiveId === 'category-node-818' 3132 }"> 3133 <a href="https://www.eichholtz.com/en/collection/accessories/serving-accessories/wine-racks.html" 3134 title="Wine racks" 3135 class="flex items-center w-full px-6 py-2 cursor-pointer" 3136 > 3137 Wine racks </a> 3138 </span> 3139 </div> 3140 </div> 3141 <!-- /level 3 --> 3142 <sp
3142an class="flex items-center transition-transform duration-150 ease-in-out transform" 3143 :class="{ 3144 '-translate-x-full': mobilePanelActiveId === 'category-node-819' 3145 }"> 3146 <a href="https://www.eichholtz.com/en/collection/accessories/home-textiles.html" 3147 title="Home textiles" 3148 class="flex items-center w-full px-6 py-2 cursor-pointer" 3149 > 3150 Home textiles </a> 3151 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 3152 @click="handleNextMenu('category-node-819', 'category-node-126')" 3153 > 3154 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 3155 </a> 3156 </span> 3157 <!-- level 3 --> 3158 <div 3159 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 3160 :class="{ 3161 'translate-x-full': mobilePanelActiveId === 'category-node-126' || mobilePanelActiveId === 'category-node-819', 3162 'translate-x-0': mobilePanelActiveId !== 'category-node-126' && mobilePanelActiveId !== 'category-node-819' 3163 }"> 3164 <a class="flex items-center px-6 py-2 cursor-pointer" 3165 @click="removeActiveId('category-node-819'); mobilePanelActiveId = 'category-node-126'" 3166 > 3167 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg> 3168 <span class="ml-4 text-lg font-bold"> 3169 Home textiles </span> 3170 </a> 3171 <a href="https://www.eichholtz.com/en/collection/accessories/home-textiles.html" 3172 title="Home textiles" 3173 class="flex items-center w-full px-6 py-2 cursor-pointer"> 3174 All Home textiles </a> 3175 <div class="level-2"> 3176 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3177 :class="{ 3178 '-translate-x-full': mobilePanelActiveId === 'category-node-172' 3179 }"> 3180 <a href="https://www.eichholtz.com/en/collection/accessories/home-textiles/cushions-plaids.html" 3181 title="Cushions" 3182 class="flex items-center w-full px-6 py-2 cursor-pointer" 3183 > 3184 Cushions </a> 3185 </span> 3186 </div> 3187 </div> 3188 <!-- /level 3 --> 3189 <sp
3189an class="flex items-center transition-transform duration-150 ease-in-out transform" 3190 :class="{ 3191 '-translate-x-full': mobilePanelActiveId === 'category-node-822' 3192 }"> 3193 <a href="https://www.eichholtz.com/en/collection/accessories/coat-racks-umbrella-stands.html" 3194 title="Coat racks | Umbrella stands & more" 3195 class="flex items-center w-full px-6 py-2 cursor-pointer" 3196 > 3197 Coat racks | Umbrella stands & more </a> 3198 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 3199 @click="handleNextMenu('category-node-822', 'category-node-126')" 3200 > 3201 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 3202 </a> 3203 </span> 3204 <!-- level 3 --> 3205 <div 3206 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 3207 :class="{ 3208 'translate-x-full': mobilePanelActiveId === 'category-node-126' || mobilePanelActiveId === 'category-node-822', 3209 'translate-x-0': mobilePanelActiveId !== 'category-node-126' && mobilePanelActiveId !== 'category-node-822' 3210 }"> 3211 <a class="flex items-center px-6 py-2 cursor-pointer" 3212 @click="removeActiveId('category-node-822'); mobilePanelActiveId = 'category-node-126'" 3213 > 3214 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg> 3215 <span class="ml-4 text-lg font-bold"> 3216 Coat racks | Umbrella stands & more </span> 3217 </a> 3218 <a href="https://www.eichholtz.com/en/collection/accessories/coat-racks-umbrella-stands.html" 3219 title="Coat racks | Umbrella stands & more" 3220 class="flex items-center w-full px-6 py-2 cursor-pointer"> 3221 All Coat racks | Umbrella stands & more </a> 3222 <div class="level-2"> 3223 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3224 :class="{
3225 '-translate-x-full': mobilePanelActiveId === 'category-node-174' 3226 }"> 3227 <a href="https://www.eichholtz.com/en/collection/accessories/coat-racks-umbrella-stands/coat-racks.html" 3228 title="Coat racks" 3229 class="flex items-center w-full px-6 py-2 cursor-pointer" 3230 > 3231 Coat racks </a> 3232 </span> 3233 </div> 3234 <div class="level-2"> 3235 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3236 :class="{ 3237 '-translate-x-full': mobilePanelActiveId === 'category-node-823' 3238 }"> 3239 <a href="https://www.eichholtz.com/en/collection/accessories/coat-racks-umbrella-stands/umbrella-stands.html" 3240 title="Umbrella stands" 3241 class="flex items-center w-full px-6 py-2 cursor-pointer" 3242 > 3243 Umbrella stands </a> 3244 </span> 3245 </div> 3246 <div class="level-2"> 3247 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3248 :class="{ 3249 '-translate-x-full': mobilePanelActiveId === 'category-node-177' 3250 }"> 3251 <a href="https://www.eichholtz.com/en/collection/accessories/coat-racks-umbrella-stands/fireplace-accessories.html" 3252 title="Fireplace accessories" 3253 class="flex items-center w-full px-6 py-2 cursor-pointer" 3254 > 3255 Fireplace accessories </a> 3256 </span> 3257 </div> 3258 <div class="level-2"> 3259 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3260 :class="{ 3261 '-translate-x-full': mobilePanelActiveId === 'category-node-171' 3262 }"> 3263 <a href="https://www.eichholtz.com/en/collection/accessories/coat-racks-umbrella-stands/bathroom-accessories.html" 3264 title="Bathroom accessories" 3265 class="flex items-center w-full px-6 py-2 cursor-pointer" 3266 > 3267 Bathroom accessories </a> 3268 </span> 3269 </div> 3270 </div> 3271 <!-- /level 3 --> 3272 </div> 3273 </div> 3274 <!-- / level 2 --> 3275 </div> 3276 <div class="level-0 text-sm">
3277 <span 3278 class="flex items-center transition-transform duration-150 ease-in-out transform" 3279 :class="{'-translate-x-full': mobilePanelActiveId}" 3280 > 3281 <a class="flex text-lg font-bold items-center w-full px-6 py-2 cursor-pointer level-0" 3282 @click="handleNextMenu('category-node-218')" 3283 title="Outdoor"> 3284 <span class="category-name">Outdoor</span> 3285 </a> 3286 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 3287 @click="handleNextMenu('category-node-218')" 3288 > 3289 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 3290 </a> 3291 </span> 3292 <!-- level 1 --> 3293 <div 3294 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-full -translate-x-full" 3295 :class="{ 3296 'translate-x-full': !mobilePanelActiveId || !activeIds.includes('category-node-218'), 3297 '-translate-x-full': mobilePanelActiveId !== 'category-node-218', 3298 }"> 3299 <a class="flex items-center px-6 py-2 cursor-pointer" 3300 @click="mobilePanelActiveId = null, removeActiveId('category-node-218')" 3301 > 3302 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg> 3303 <span class="ml-4 text-lg font-bold"> 3304 Outdoor </span> 3305 </a> 3306 <div class="level-1"> 3307 <a href="https://www.eichholtz.com/en/collection/outdoor.html" 3308 title="Outdoor" 3309 class="flex items-center w-full px-6 py-2 cursor-pointer"> 3310 All Outdoor </a> 3311 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3312 :class="{ 3313 '-translate-x-full': mobilePanelActiveId === 'category-node-789' 3314 }"> 3315 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-sofas-daybeds.html" 3316 title="Outdoor sofas | Daybeds" 3317 class="flex items-center w-full px-6 py-2 cursor-pointer" 3318 > 3319 Outdoor sofas | Daybeds </a> 3320 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 3321 @click="handleNextMenu('category-node-789', 'category-node-218')" 3322 > 3323 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 3324 </a> 3325 </span> 3326 <!-- level 3 --> 3327 <div 3328 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 3329 :class="{ 3330 'translate-x-full': mobilePanelActiveId === 'category-node-218' || mobilePanelActiveId === 'category-node-789', 3331 'translate-x-0': mobilePanelActiveId !== 'category-node-218' && mobilePanelActiveId !== 'category-node-789' 3332 }"> 3333 <a class="flex items-center px-6 py-2 cursor-pointer" 3334 @click="removeActiveId('category-node-789'); mobilePanelActiveId = 'category-node-218'" 3335 > 3336 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
3337 <span class="ml-4 text-lg font-bold"> 3338 Outdoor sofas | Daybeds </span> 3339 </a> 3340 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-sofas-daybeds.html" 3341 title="Outdoor sofas | Daybeds" 3342 class="flex items-center w-full px-6 py-2 cursor-pointer"> 3343 All Outdoor sofas | Daybeds </a> 3344 <div class="level-2"> 3345 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3346 :class="{ 3347 '-translate-x-full': mobilePanelActiveId === 'category-node-547' 3348 }"> 3349 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-sofas-daybeds/outdoor-sofas.html" 3350 title="Outdoor sofas" 3351 class="flex items-center w-full px-6 py-2 cursor-pointer" 3352 > 3353 Outdoor sofas </a> 3354 </span> 3355 </div> 3356 <div class="level-2"> 3357 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3358 :class="{ 3359 '-translate-x-full': mobilePanelActiveId === 'category-node-550' 3360 }"> 3361 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-sofas-daybeds/outdoor-beds.html" 3362 title="Outdoor beds" 3363 class="flex items-center w-full px-6 py-2 cursor-pointer" 3364 > 3365 Outdoor beds </a> 3366 </span> 3367 </div> 3368 </div> 3369 <!-- /level 3 --> 3370 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3371 :class="{ 3372 '-translate-x-full': mobilePanelActiveId === 'category-node-791' 3373 }"> 3374 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-chairs.html" 3375 title="Outdoor chairs" 3376 class="flex items-center w-full px-6 py-2 cursor-pointer" 3377 > 3378 Outdoor chairs </a> 3379 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 3380 @click="handleNextMenu('category-node-791', 'category-node-218')" 3381 > 3382 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 3383 </a> 3384 </span> 3385 <!-- level 3 --> 3386 <div 3387 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 3388 :class="{ 3389 'translate-x-full': mobilePanelActiveId === 'category-node-218' || mobilePanelActiveId === 'category-node-791', 3390 'translate-x-0': mobilePanelActiveId !== 'category-node-218' && mobilePanelActiveId !== 'category-node-791' 3391 }"> 3392 <a class="flex items-center px-6 py-2 cursor-pointer" 3393 @click="removeActiveId('category-node-791'); mobilePanelActiveId = 'category-node-218'" 3394 > 3395 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
3396 <span class="ml-4 text-lg font-bold"> 3397 Outdoor chairs </span> 3398 </a> 3399 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-chairs.html" 3400 title="Outdoor chairs" 3401 class="flex items-center w-full px-6 py-2 cursor-pointer"> 3402 All Outdoor chairs </a> 3403 <div class="level-2"> 3404 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3405 :class="{ 3406 '-translate-x-full': mobilePanelActiveId === 'category-node-549' 3407 }"> 3408 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-chairs/outdoor-armchairs.html" 3409 title="Outdoor armchairs" 3410 class="flex items-center w-full px-6 py-2 cursor-pointer" 3411 > 3412 Outdoor armchairs </a> 3413 </span> 3414 </div> 3415 <div class="level-2"> 3416 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3417 :class="{ 3418 '-translate-x-full': mobilePanelActiveId === 'category-node-792' 3419 }"> 3420 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-chairs/outdoor-dining-chairs.html" 3421 title="Outdoor dining chairs" 3422 class="flex items-center w-full px-6 py-2 cursor-pointer" 3423 > 3424 Outdoor dining chairs </a> 3425 </span> 3426 </div> 3427 </div> 3428 <!-- /level 3 --> 3429 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3430 :class="{ 3431 '-translate-x-full': mobilePanelActiveId === 'category-node-794' 3432 }"> 3433 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-tables.html" 3434 title="Outdoor tables" 3435 class="flex items-center w-full px-6 py-2 cursor-pointer" 3436 > 3437 Outdoor tables </a> 3438 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 3439 @click="handleNextMenu('category-node-794', 'category-node-218')" 3440 > 3441 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 3442 </a> 3443 </span> 3444 <!-- level 3 --> 3445 <div 3446 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-0" 3447 :class="{ 3448 'translate-x-full': mobilePanelActiveId === 'category-node-218' || mobilePanelActiveId === 'category-node-794', 3449 'translate-x-0': mobilePanelActiveId !== 'category-node-218' && mobilePanelActiveId !== 'category-node-794' 3450 }"> 3451 <a class="flex items-center px-6 py-2 cursor-pointer" 3452 @click="removeActiveId('category-node-794'); mobilePanelActiveId = 'category-node-218'" 3453 > 3454 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg>
3455 <span class="ml-4 text-lg font-bold"> 3456 Outdoor tables </span> 3457 </a> 3458 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-tables.html" 3459 title="Outdoor tables" 3460 class="flex items-center w-full px-6 py-2 cursor-pointer"> 3461 All Outdoor tables </a> 3462 <div class="level-2"> 3463 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3464 :class="{ 3465 '-translate-x-full': mobilePanelActiveId === 'category-node-548' 3466 }"> 3467 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-tables/outdoor-coffee-tables.html" 3468 title="Outdoor coffee tables" 3469 class="flex items-center w-full px-6 py-2 cursor-pointer" 3470 > 3471 Outdoor coffee tables </a> 3472 </span> 3473 </div> 3474 <div class="level-2"> 3475 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3476 :class="{ 3477 '-translate-x-full': mobilePanelActiveId === 'category-node-795' 3478 }"> 3479 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-tables/outdoor-dining-tables.html" 3480 title="Outdoor dining tables" 3481 class="flex items-center w-full px-6 py-2 cursor-pointer" 3482 > 3483 Outdoor dining tables </a> 3484 </span> 3485 </div> 3486 <div class="level-2"> 3487 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3488 :class="{ 3489 '-translate-x-full': mobilePanelActiveId === 'category-node-796' 3490 }"> 3491 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-tables/outdoor-console-tables.html" 3492 title="Outdoor console tables" 3493 class="flex items-center w-full px-6 py-2 cursor-pointer" 3494 > 3495 Outdoor console tables </a> 3496 </span> 3497 </div> 3498 <div class="level-2">
3499 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3500 :class="{ 3501 '-translate-x-full': mobilePanelActiveId === 'category-node-797' 3502 }"> 3503 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-tables/outdoor-side-tables.html" 3504 title="Outdoor side tables" 3505 class="flex items-center w-full px-6 py-2 cursor-pointer" 3506 > 3507 Outdoor side tables </a> 3508 </span> 3509 </div> 3510 </div> 3511 <!-- /level 3 --> 3512 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3513 :class="{ 3514 '-translate-x-full': mobilePanelActiveId === 'category-node-570' 3515 }"> 3516 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-carpets.html" 3517 title="Outdoor carpets" 3518 class="flex items-center w-full px-6 py-2 cursor-pointer" 3519 > 3520 Outdoor carpets </a> 3521 </span> 3522 <!-- level 3 --> 3523 <!-- /level 3 --> 3524 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3525 :class="{ 3526 '-translate-x-full': mobilePanelActiveId === 'category-node-551' 3527 }"> 3528 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-accessories.html" 3529 title="Outdoor accessories" 3530 class="flex items-center w-full px-6 py-2 cursor-pointer" 3531 > 3532 Outdoor accessories </a> 3533 </span> 3534 <!-- level 3 --> 3535 <!-- /level 3 --> 3536 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3537 :class="{ 3538 '-translate-x-full': mobilePanelActiveId === 'category-node-798' 3539 }"> 3540 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-lighting.html" 3541 title="Outdoor lighting" 3542 class="flex items-center w-full px-6 py-2 cursor-pointer" 3543 > 3544 Outdoor lighting </a> 3545 </span> 3546 <!-- level 3 --> 3547 <!-- /level 3 --> 3548 <sp
3548an class="flex items-center transition-transform duration-150 ease-in-out transform" 3549 :class="{ 3550 '-translate-x-full': mobilePanelActiveId === 'category-node-1161' 3551 }"> 3552 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-covers.html" 3553 title="Outdoor covers" 3554 class="flex items-center w-full px-6 py-2 cursor-pointer" 3555 > 3556 Outdoor covers </a> 3557 </span> 3558 <!-- level 3 --> 3559 <!-- /level 3 --> 3560 </div> 3561 </div> 3562 <!-- / level 2 --> 3563 </div> 3564 <div class="level-0 text-sm"> 3565 <span 3566 class="flex items-center transition-transform duration-150 ease-in-out transform" 3567 :class="{'-translate-x-full': mobilePanelActiveId}" 3568 > 3569 <a class="flex text-lg font-bold items-center w-full px-6 py-2 cursor-pointer level-0" 3570 @click="handleNextMenu('category-node-193')" 3571 title="Inspiration"> 3572 <span class="category-name">Inspiration</span> 3573 </a> 3574 <a class="absolute right-0 flex w-8 h-8 mr-8 cursor-pointer" 3575 @click="handleNextMenu('category-node-193')" 3576 > 3577 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-full h-full p-1" role="img"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/><title>chevron-right</title></svg> 3578 </a> 3579 </span> 3580 <!-- level 1 --> 3581 <div 3582 class="absolute top-0 right-0 z-10 w-full h-auto transition-transform duration-200 ease-in-out transform translate-x-full -translate-x-full" 3583 :class="{ 3584 'translate-x-full': !mobilePanelActiveId || !activeIds.includes('category-node-193'), 3585 '-translate-x-full': mobilePanelActiveId !== 'category-node-193', 3586 }"> 3587 <a class="flex items-center px-6 py-2 cursor-pointer" 3588 @click="mobilePanelActiveId = null, removeActiveId('category-node-193')" 3589 > 3590 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="w-6 h-6" role="img"><path d="M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z"/><title>chevron-left</title></svg> 3591 <span class="ml-4 text-lg font-bold"> 3592 Inspiration </span> 3593 </a> 3594 <div class="level-1"> 3595 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3596 :class="{
3597 '-translate-x-full': mobilePanelActiveId === 'category-node-1142' 3598 }"> 3599 <a href="https://www.eichholtz.com/en/inspirations/digital-magazines.html" 3600 title="Digital Magazines" 3601 class="flex items-center w-full px-6 py-2 cursor-pointer" 3602 > 3603 Digital Magazines </a> 3604 </span> 3605 <!-- level 3 --> 3606 <!-- /level 3 --> 3607 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3608 :class="{ 3609 '-translate-x-full': mobilePanelActiveId === 'category-node-1164' 3610 }"> 3611 <a href="https://www.eichholtz.com/en/inspirations/collaborations.html" 3612 title="Collaborations" 3613 class="flex items-center w-full px-6 py-2 cursor-pointer" 3614 > 3615 Collaborations </a> 3616 </span> 3617 <!-- level 3 --> 3618 <!-- /level 3 --> 3619 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3620 :class="{ 3621 '-translate-x-full': mobilePanelActiveId === 'category-node-154' 3622 }"> 3623 <a href="https://www.eichholtz.com/en/inspirations/featured-rooms.html" 3624 title="Featured Rooms" 3625 class="flex items-center w-full px-6 py-2 cursor-pointer" 3626 > 3627 Featured Rooms </a> 3628 </span> 3629 <!-- level 3 --> 3630 <!-- /level 3 --> 3631 <span class="flex items-center transition-transform duration-150 ease-in-out transform" 3632 :class="{ 3633 '-translate-x-full': mobilePanelActiveId === 'category-node-194' 3634 }"> 3635 <a href="https://www.eichholtz.com/en/inspirations/fairs-and-events.html" 3636 title="Fairs and events" 3637 class="flex items-center w-full px-6 py-2 cursor-pointer" 3638 > 3639 Fairs and events </a> 3640 </span> 3641 <!-- level 3 --> 3642 <!-- /level 3 --> 3643 </div> 3644 </div> 3645 <!-- / level 2 --> 3646 </div> 3647 <div class="level-0 text-sm">
3648 <span 3649 class="flex items-center transition-transform duration-150 ease-in-out transform" 3650 :class="{'-translate-x-full': mobilePanelActiveId}" 3651 > 3652 <a class="flex text-lg font-bold items-center w-full px-6 py-2 cursor-pointer level-0" 3653 @click="handleNextMenu('category-node-1173')" 3654 title="Contract"> 3655 <span class="category-name">Contract</span> 3656 </a> 3657 </span> 3658 <!-- level 1 --> 3659 <!-- / level 2 --> 3660 </div> 3661 <div class="level-0 text-sm"> 3662 <span 3663 class="flex items-center transition-transform duration-150 ease-in-out transform" 3664 :class="{'-translate-x-full': mobilePanelActiveId}" 3665 > 3666 <a class="flex text-lg font-bold items-center w-full px-6 py-2 cursor-pointer level-0" 3667 @click="handleNextMenu('category-node-1176')" 3668 title="Sale"> 3669 <span class="category-name">Sale</span> 3670 </a> 3671 </span> 3672 <!-- level 1 --> 3673 <!-- / level 2 --> 3674 </div> 3675 <div x-show="mobilePanelActiveId == null"> 3676 <ul class="flex flex-col my-8 px-6"> 3677 <li> 3678 <a class="" 3679 title="Account" 3680 href="https://www.eichholtz.com/en/customer/account/login"> 3681 Account </a> 3682 </li> 3683 <li> 3684 <a class="" 3685 title="Contact us" 3686 href="https://www.eichholtz.com/en/contactform"> 3687 Contact us </a> 3688 </li> 3689 <li> 3690 <a class="" 3691 title="Fairs and events" 3692 href="https://www.eichholtz.com/en/inspirations/fairs-and-events.html"> 3693 Fairs and events </a> 3694 </li> 3695 <li> 3696 <a class="" 3697 title="ESG" 3698 href="https://www.eichholtz.com/en/esg-at-eichholtz"> 3699 ESG </a> 3700 </li> 3701 <li> 3702 <a class="" 3703 title="Stores" 3704 href="https://www.eichholtz.com/en/store"> 3705 Stores </a> 3706 </li> 3707
3707<script> 3708 "use strict"; 3709 3710 function initComponent() { 3711 return { 3712 customer: false, 3713 receiveCustomerData(data) { 3714 if (data.customer) { 3715 this.customer = data.customer; 3716 } 3717 } 3718 } 3719 } 3720</script>
3720 3721 3722<div class="text-sm" x-data="initComponent()" 3723 @private-content-loaded.window="receiveCustomerData($event.detail.data)" 3724> 3725 <template x-if="customer.firstname"> 3726 <li class="text-sm"> 3727 <a class="flex items-center w-full px-6 py-2 cursor-pointer level-0" 3728 title="Sign Out" 3729 href="https://www.eichholtz.com/en/customer/account/logout/"> 3730 Sign Out </a> 3731 </li> 3732 </template> 3733</div> 3734 3735 <ul class="my-8"> 3736 <li class="text-sm" 3737 x-data="{ htmlContent: '' }" 3738 x-init="htmlContent = document.getElementById('store_switcher_de')?.innerHTML || ''" 3739 > 3740 <p x-html="htmlContent"></p> 3741 </li> 3742 <li class="text-sm" 3743 x-data="{ htmlContent: '' }" 3744 x-init="htmlContent = document.getElementById('store_switcher_es')?.innerHTML || ''" 3745 > 3746 <p x-html="htmlContent"></p> 3747 </li> 3748 <li class="text-sm" 3749 x-data="{ htmlContent: '' }" 3750 x-init="htmlContent = document.getElementById('store_switcher_fr')?.innerHTML || ''" 3751 > 3752 <p x-html="htmlContent"></p> 3753 </li> 3754 </ul> 3755</ul> </div> 3756 </nav> 3757 </div> 3758</div>
3759<script> 3760 'use strict'; 3761 3762 const initMenuMobile_6abfd924009f6 = () => { 3763 return { 3764 mobilePanelActive: {}, 3765 mobilePanelActiveId: null, 3766 hoverPanelActiveId: null, 3767 activeIds: [], 3768 open: false, 3769 openLevel: 0, 3770 init() { 3771 this.$watch('open', () => { 3772 this.toggleBackgroundScrolling(!this.open); 3773 }) 3774 }, 3775 removeActiveId (id) { 3776 this.activeIds = this.activeIds.filter(currentId => currentId !== id); 3777 }, 3778 setActiveMenu(menuNode) { 3779 Array.from(menuNode.querySelectorAll('a')).filter(link => { 3780 return link.href === window.location.href.split('?')[0]; 3781 }).map(item => { 3782 item.querySelector('span.category-name') && 3783 item.querySelector('span.category-name').classList.add('underline','underline-offset-4'); 3784 item.closest('div.level-0') && 3785 item.closest('div.level-0').querySelector('a.level-0 span.category-name') && 3786 item.closest('div.level-0').querySelector('a.level-0 span.category-name').classList.add('underline','underline-offset-4'); 3787 }); 3788 }, 3789 handleNextMenu (itemId) { 3790 this.mobilePanelActiveId = itemId; 3791 this.activeIds.push(itemId); 3792 }, 3793 display (itemId) { 3794 return this.mobilePanelActive.hasOwnProperty(itemId) && this.mobilePanelActive[itemId] === true; 3795 }, 3796 // Prevent / allow background scrolling
3797 toggleBackgroundScrolling: function (allow) { 3798 // Background scroll prevention is only required on mobile 3799 if (screen.width > 768) return 3800 3801 document.getElementsByTagName('body')[0].style.overflowY = allow ? 'auto' : 'hidden'; 3802 } 3803 } 3804 } 3805</script>
3805 3806<div x-data="initMenuDesktop_6abfd9243168b()" 3807 class="basis-full z-20 order-4 w-full navigation hidden lg:flex mt-2" 3808> 3809 3810 <template x-teleport="body" x-cloak> 3811 <div class="backdrop" 3812 x-show="isOpen" 3813 x-transition:enter="ease-in-out duration-300" 3814 x-transition:enter-start="opacity-0" 3815 x-transition:enter-end="opacity-100" 3816 x-transition:leave="ease-in-out duration-300" 3817 x-transition:leave-start="opacity-100" 3818 x-transition:leave-end="opacity-0"> 3819 3820 </div> 3821 </template> 3822 3823 <!-- desktop --> 3824 <div x-ref="nav-desktop" 3825 @load.window="setActiveMenu($root)" 3826 class="justify-between mx-auto w-full" 3827 > 3828 <nav 3829 class="-mx-2" 3830 aria-label="Main menu" 3831 > 3832 <ul class="flex flex-wrap justify-center"> 3833 <div class="level-0 flex items-center px-2 mx-2 transition transition-colors duration-500 group/parent xl:px-4 xl:mx-4" 3834 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height; menuMinHeight = 0;" 3835 @mouseover="isOpen = true" 3836 @mouseleave="isOpen = false" 3837 > 3838 <span 3839 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height;" 3840 title="Collections" 3841 class="level-0 block py-2 pl-2 pr-1 text-sm font-bold text-black whitespace-nowrap underline-offset-4 group-hover/parent:underline"> 3842 Collections </span> 3843 <span class="inline items-center"> 3844 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" class="inline" aria-hidden="true"><path d="M480-358.463 253.847-584.615 296-626.768l184 184 184-184 42.153 42.153L480-358.463Z"/></svg> 3845 </span> 3846 3847 <div class="absolute bg-white left-0 right-0 ml-auto mr-auto top-full z-10 border-t border-white pt-3 -mt-3 w-11/12 2xl:w-[1330px] opacity-0 transition-opacity ease-out pointer-events-none group-hover/parent:opacity-100 focus-within:opacity-100 group-hover/parent:pointer-events-auto" 3848 :style="`margin-top: 0; top: ${hoverTopPosition}px;`" 3849 > 3850 <div class="flex flex-row justify-between items-stretch bg-white relative shadow-xl min-h-screen-50" 3851 :style="`min-height: ${menuMinHeight}px`" 3852 > 3853 <ul class="w-1/3 py-6 border-r border-r-grey-100"> 3854 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 3855 > 3856 <a href="https://www.eichholtz.com/en/collection/collections/new-arrivals.html" 3857 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 3858 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 3859 > 3860 New Arrivals </a> 3861 </li> 3862 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 3863 > 3864 <a href="https://www.eichholtz.com/en/collection/ne
3864w/bold-and-iconic.html" 3865 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 3866 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 3867 > 3868 Bold & Iconic </a> 3869 </li> 3870 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 3871 > 3872 <a href="https://www.eichholtz.com/en/collection/new/atelier.html" 3873 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 3874 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 3875 > 3876 Atelier </a> 3877 </li> 3878 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 3879 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 3880 > 3881 <span 3882 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 3883 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 3884 > 3885 Collaborations </span> 3886 <span class="inline-block z-10 relative py-2 px-2"> 3887 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 3888 </span> 3889 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 3890 <ul class="w-full py-6"> 3891 <li class="level-1 w-full pl-8 pr-6"> 3892 <a href="https://www.eichholtz.com/en/collection/new/collaborations/the-met-x-eichholtz.html" 3893 title="The Met x Eichholtz" 3894 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 3895 The Met x Eichholtz </a> 3896 </li> 3897 <li class="level-1 w-full pl-8 pr-6"> 3898 <a href="https://www.eichholtz.com/en/collection/ne
3898w/collaborations/corey-damen-jenkins.html" 3899 title="Corey Damen Jenkins" 3900 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 3901 Corey Damen Jenkins </a> 3902 </li> 3903 </ul> 3904 </div> 3905 </li> 3906 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 3907 > 3908 <a href="https://www.eichholtz.com/en/collection/new/cityline-collection.html" 3909 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 3910 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 3911 > 3912 City line collection </a> 3913 </li> 3914 </ul> 3915 3916 <div class="flex w-1/3 min-h-[375px]"> 3917 <img class="object-cover w-full" alt="Collections" src="" :src="isOpen ? '/media/catalog/category/collections-category-image-eichholtz-bold-and-iconic.jpg' : ''" /> 3918 </div> 3919 </div> 3920 </div> 3921 </div> 3922 <div class="level-0 flex items-center px-2 mx-2 transition transition-colors duration-500 group/parent xl:px-4 xl:mx-4" 3923 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height; menuMinHeight = 0;" 3924 @mouseover="isOpen = true" 3925 @mouseleave="isOpen = false" 3926 > 3927 <a href="https://www.eichholtz.com/en/collection/furniture.html" 3928 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height;" 3929 title="Furniture" 3930 class="level-0 block py-2 pl-2 pr-1 text-sm font-bold text-black whitespace-nowrap underline-offset-4 group-hover/parent:underline"> 3931 Furniture </a> 3932 <span class="inline items-center"> 3933 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" class="inline" aria-hidden="true"><path d="M480-358.463 253.847-584.615 296-626.768l184 184 184-184 42.153 42.153L480-358.463Z"/></svg> 3934 </span> 3935 3936 <div class="absolute bg-white left-0 right-0 ml-auto mr-auto top-full z-10 border-t border-white pt-3 -mt-3 w-11/12 2xl:w-[1330px] opacity-0 transition-opacity ease-out pointer-events-none group-hover/parent:opacity-100 focus-within:opacity-100 group-hover/parent:pointer-events-auto" 3937 :style="`margin-top: 0; top: ${hoverTopPosition}px;`" 3938 > 3939 <div class="flex flex-row justify-between items-stretch bg-white relative shadow-xl min-h-screen-50" 3940 :style="`min-height: ${menuMinHeight}px`" 3941 > 3942 <ul class="w-1/3 py-6 border-r border-r-grey-100"> 3943 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 3944 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 3945 > 3946 <a href="https://www.eichholtz.com/en/collection/furniture/atelier.html" 3947 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 3948 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 3949 > 3950 Atelier </a> 3951 <sp
3951an class="inline-block z-10 relative py-2 px-2"> 3952 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 3953 </span> 3954 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 3955 <ul class="w-full py-6"> 3956 <li class="level-1 w-full pl-8 pr-6"> 3957 <a href="https://www.eichholtz.com/en/collection/furniture/atelier/sofa-lounge-club.html" 3958 title="Sofa Lounge Club" 3959 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 3960 Sofa Lounge Club </a> 3961 </li> 3962 <li class="level-1 w-full pl-8 pr-6"> 3963 <a href="https://www.eichholtz.com/en/collection/furniture/atelier/modular-sofa-lounge-club.html" 3964 title="Modular Sofa Lounge Club" 3965 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 3966 Modular Sofa Lounge Club </a> 3967 </li> 3968 </ul> 3969 </div> 3970 </li> 3971 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 3972 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 3973 > 3974 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans.html" 3975 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 3976 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 3977 > 3978 Sofas | Ottomans </a> 3979 <sp
3979an class="inline-block z-10 relative py-2 px-2"> 3980 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 3981 </span> 3982 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 3983 <ul class="w-full py-6"> 3984 <li class="level-1 w-full pl-8 pr-6"> 3985 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans/sofas.html" 3986 title="Sofas" 3987 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 3988 Sofas </a> 3989 </li> 3990 <li class="level-1 w-full pl-8 pr-6"> 3991 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans/modular-sofas.html" 3992 title="Modular sofas" 3993 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 3994 Modular sofas </a> 3995 </li> 3996 <li class="level-1 w-full pl-8 pr-6"> 3997 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans/ottomans.html" 3998 title="Ottomans" 3999 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4000 Ottomans </a> 4001 </li> 4002 <li class="level-1 w-full pl-8 pr-6"> 4003 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans/chaise-longues.html" 4004 title="Chaise longues" 4005 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4006 Chaise longues </a> 4007 </li> 4008 <li class="level-1 w-full pl-8 pr-6"> 4009 <a href="https://www.eichholtz.com/en/collection/furniture/sofas-ottomans/benches.html" 4010 title="Benches" 4011 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4012 Benches </a> 4013 </li> 4014 </ul> 4015 </div> 4016 </li> 4017 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4018 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4019 > 4020 <a href="https://www.eichholtz.com/en/collection/furniture/chairs-2.html" 4021 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4022 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4023 > 4024 Chairs </a> 4025 <sp
4025an class="inline-block z-10 relative py-2 px-2"> 4026 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4027 </span> 4028 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4029 <ul class="w-full py-6"> 4030 <li class="level-1 w-full pl-8 pr-6"> 4031 <a href="https://www.eichholtz.com/en/collection/furniture/chairs/armchairs.html" 4032 title="Armchairs" 4033 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4034 Armchairs </a> 4035 </li> 4036 <li class="level-1 w-full pl-8 pr-6"> 4037 <a href="https://www.eichholtz.com/en/collection/furniture/chairs-2/dining-chairs.html" 4038 title="Dining chairs" 4039 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4040 Dining chairs </a> 4041 </li> 4042 <li class="level-1 w-full pl-8 pr-6"> 4043 <a href="https://www.eichholtz.com/en/collection/furniture/chairs-2/bar-counterstools.html" 4044 title="Bar- & counterstools" 4045 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4046 Bar- & counterstools </a> 4047 </li> 4048 <li class="level-1 w-full pl-8 pr-6"> 4049 <a href="https://www.eichholtz.com/en/collection/furniture/chairs-2/stools.html" 4050 title="Stools" 4051 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4052 Stools </a> 4053 </li> 4054 </ul> 4055 </div> 4056 </li> 4057 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4058 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4059 > 4060 <a href="https://www.eichholtz.com/en/collection/furniture/tables.html" 4061 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4062 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4063 > 4064 Tables </a> 4065 <sp
4065an class="inline-block z-10 relative py-2 px-2"> 4066 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4067 </span> 4068 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4069 <ul class="w-full py-6"> 4070 <li class="level-1 w-full pl-8 pr-6"> 4071 <a href="https://www.eichholtz.com/en/collection/furniture/tables/coffee-tables.html" 4072 title="Coffee tables" 4073 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4074 Coffee tables </a> 4075 </li> 4076 <li class="level-1 w-full pl-8 pr-6"> 4077 <a href="https://www.eichholtz.com/en/collection/furniture/tables/side-tables.html" 4078 title="Side tables" 4079 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4080 Side tables </a> 4081 </li> 4082 <li class="level-1 w-full pl-8 pr-6"> 4083 <a href="https://www.eichholtz.com/en/collection/furniture/tables/console-tables.html" 4084 title="Console tables" 4085 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4086 Console tables </a> 4087 </li> 4088 <li class="level-1 w-full pl-8 pr-6"> 4089 <a href="https://www.eichholtz.com/en/collection/furniture/tables/dining-tables.html" 4090 title="Dining tables" 4091 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4092 Dining tables </a> 4093 </li> 4094 <li class="level-1 w-full pl-8 pr-6"> 4095 <a href="https://www.eichholtz.com/en/collection/furniture/tables/desks.html" 4096 title="Desks" 4097 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4098 Desks </a> 4099 </li> 4100 <li class="level-1 w-full pl-8 pr-6"> 4101 <a href="https://www.eichholtz.com/en/collection/furniture/tables/trolleys-bars-butler-trays.html" 4102 title="Trolleys" 4103 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4104 Trolleys </a> 4105 </li> 4106 <li class="level-1 w-full pl-8 pr-6"> 4107 <a href="https://www.eichholtz.com/en/collection/furniture/tables/bars-butler-trays.html" 4108 title="Bars | Butler trays" 4109 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4110 Bars | Butler trays </a> 4111 </li> 4112 <li class="level-1 w-full pl-8 pr-6"> 4113 <a href="https://www.eichholtz.com/en/collection/furniture/tables/columns.html" 4114 title="Columns" 4115 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4116 Columns </a> 4117 </li> 4118 </ul> 4119 </div> 4120 </li> 4121 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4122 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4123 > 4124 <a href="https://www.eichholtz.com/en/collection/furniture/cabinets.html" 4125 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4126 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4127 > 4128 Cabinets </a> 4129 <sp
4129an class="inline-block z-10 relative py-2 px-2"> 4130 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4131 </span> 4132 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4133 <ul class="w-full py-6"> 4134 <li class="level-1 w-full pl-8 pr-6"> 4135 <a href="https://www.eichholtz.com/en/collection/furniture/cabinets/display-cabinets.html" 4136 title="Display cabinets" 4137 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4138 Display cabinets </a> 4139 </li> 4140 <li class="level-1 w-full pl-8 pr-6"> 4141 <a href="https://www.eichholtz.com/en/collection/furniture/cabinets/dressers.html" 4142 title="Dressers" 4143 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4144 Dressers </a> 4145 </li> 4146 <li class="level-1 w-full pl-8 pr-6"> 4147 <a href="https://www.eichholtz.com/en/collection/furniture/cabinets/tv-cabinets.html" 4148 title="Tv Cabinets" 4149 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4150 Tv Cabinets </a> 4151 </li> 4152 <li class="level-1 w-full pl-8 pr-6"> 4153 <a href="https://www.eichholtz.com/en/collection/furniture/cabinets/bar-cabinets.html" 4154 title="Bar cabinets" 4155 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4156 Bar cabinets </a> 4157 </li> 4158 </ul> 4159 </div> 4160 </li> 4161 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4162 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4163 > 4164 <a href="https://www.eichholtz.com/en/collection/furniture/bedroom.html" 4165 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4166 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4167 > 4168 Bedroom </a> 4169 <sp
4169an class="inline-block z-10 relative py-2 px-2"> 4170 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4171 </span> 4172 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4173 <ul class="w-full py-6"> 4174 <li class="level-1 w-full pl-8 pr-6"> 4175 <a href="https://www.eichholtz.com/en/collection/furniture/bedroom/headboards-beds.html" 4176 title="Headboards & beds" 4177 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4178 Headboards & beds </a> 4179 </li> 4180 <li class="level-1 w-full pl-8 pr-6"> 4181 <a href="https://www.eichholtz.com/en/collection/furniture/bedroom/nightstands.html" 4182 title="Nightstands" 4183 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4184 Nightstands </a> 4185 </li> 4186 <li class="level-1 w-full pl-8 pr-6"> 4187 <a href="https://www.eichholtz.com/en/collection/furniture/bedroom/dressers.html" 4188 title="Drawer dressers" 4189 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4190 Drawer dressers </a> 4191 </li> 4192 </ul> 4193 </div> 4194 </li> 4195 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4196 > 4197 <a href="https://www.eichholtz.com/en/collection/furniture/rugs-carpets.html" 4198 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4199 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4200 > 4201 Rugs | Carpets </a> 4202 </li> 4203 </ul> 4204 4205 <div class="flex w-1/3 min-h-[375px]"> 4206 <img class="object-cover w-full" alt="Furniture" src="" :src="isOpen ? '/media/catalog/category/collections-category-image-eichholtz-furniture-1.jpg' : ''" /> 4207 </div> 4208 </div> 4209 </div> 4210 </div> 4211 <div class="level-0 flex items-center px-2 mx-2 transition transition-colors duration-500 group/parent xl:px-4 xl:mx-4" 4212 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height; menuMinHeight = 0;" 4213 @mouseover="isOpen = true" 4214 @mouseleave="isOpen = false" 4215 > 4216 <a href="https://www.eichholtz.com/en/collection/lighting.html" 4217 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height;" 4218 title="Lighting" 4219 class="level-0 block py-2 pl-2 pr-1 text-sm font-bold text-black whitespace-nowrap underline-offset-4 group-hover/parent:underline"> 4220 Lighting </a> 4221 <sp
4221an class="inline items-center"> 4222 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" class="inline" aria-hidden="true"><path d="M480-358.463 253.847-584.615 296-626.768l184 184 184-184 42.153 42.153L480-358.463Z"/></svg> 4223 </span> 4224 4225 <div class="absolute bg-white left-0 right-0 ml-auto mr-auto top-full z-10 border-t border-white pt-3 -mt-3 w-11/12 2xl:w-[1330px] opacity-0 transition-opacity ease-out pointer-events-none group-hover/parent:opacity-100 focus-within:opacity-100 group-hover/parent:pointer-events-auto" 4226 :style="`margin-top: 0; top: ${hoverTopPosition}px;`" 4227 > 4228 <div class="flex flex-row justify-between items-stretch bg-white relative shadow-xl min-h-screen-50" 4229 :style="`min-height: ${menuMinHeight}px`" 4230 > 4231 <ul class="w-1/3 py-6 border-r border-r-grey-100"> 4232 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4233 > 4234 <a href="https://www.eichholtz.com/en/collection/lighting/chandeliers.html" 4235 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4236 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4237 > 4238 Chandeliers </a> 4239 </li> 4240 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4241 > 4242 <a href="https://www.eichholtz.com/en/collection/lighting/ceiling-lamps.html" 4243 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4244 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4245 > 4246 Ceiling lamps </a> 4247 </li> 4248 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4249 > 4250 <a href="https://www.eichholtz.com/en/collection/lighting/table-lamps.html" 4251 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4252 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4253 > 4254 Table lamps </a> 4255 </li> 4256 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4257 > 4258 <a href="https://www.eichholtz.com/en/collection/lighting/floor-lamps.html" 4259 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4260 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4261 > 4262 Floor lamps </a> 4263 </li> 4264 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4265 > 4266 <a href="https://www.eichholtz.com/en/collection/lighting/wall-lamps.html" 4267 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4268 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4269 > 4270 Wall lamps </a> 4271 </li> 4272 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4273 > 4274 <a href="https://www.eichholtz.com/en/collection/lighting/outdoor-lighting.html" 4275 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4276 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4277 > 4278 Outdoor lighting </a> 4279 </li> 4280 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4281 > 4282 <a href="https://www.eichholtz.com/en/collection/lighting/lamp-shades.html" 4283 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4284 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4285 > 4286 Lamp shades </a> 4287 </li> 4288 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4289 > 4290 <a href="https://www.eichholtz.com/en/collection/lighting/led-bulbs.html" 4291 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4292 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4293 > 4294 LED bulbs </a> 4295 </li> 4296 </ul> 4297 4298 <div class="flex w-1/3 min-h-[375px]"> 4299 <img class="object-cover w-full" alt="Lighting" src="" :src="isOpen ? '/media/catalog/category/collections-category-image-eichholtz-lighting.jpg' : ''" /> 4300 </div> 4301 </div> 4302 </div> 4303 </div> 4304 <div class="level-0 flex items-center px-2 mx-2 transition transition-colors duration-500 group/parent xl:px-4 xl:mx-4" 4305 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height; menuMinHeight = 0;" 4306 @mouseover="isOpen = true" 4307 @mouseleave="isOpen = false" 4308 > 4309 <a href="https://www.eichholtz.com/en/collection/accessories.html" 4310 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height;" 4311 title="Accessories" 4312 class="level-0 block py-2 pl-2 pr-1 text-sm font-bold text-black whitespace-nowrap underline-offset-4 group-hover/parent:underline"> 4313 Accessories </a> 4314 <sp
4314an class="inline items-center"> 4315 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" class="inline" aria-hidden="true"><path d="M480-358.463 253.847-584.615 296-626.768l184 184 184-184 42.153 42.153L480-358.463Z"/></svg> 4316 </span> 4317 4318 <div class="absolute bg-white left-0 right-0 ml-auto mr-auto top-full z-10 border-t border-white pt-3 -mt-3 w-11/12 2xl:w-[1330px] opacity-0 transition-opacity ease-out pointer-events-none group-hover/parent:opacity-100 focus-within:opacity-100 group-hover/parent:pointer-events-auto" 4319 :style="`margin-top: 0; top: ${hoverTopPosition}px;`" 4320 > 4321 <div class="flex flex-row justify-between items-stretch bg-white relative shadow-xl min-h-screen-50" 4322 :style="`min-height: ${menuMinHeight}px`" 4323 > 4324 <ul class="w-1/3 py-6 border-r border-r-grey-100"> 4325 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4326 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4327 > 4328 <a href="https://www.eichholtz.com/en/collection/accessories/mirrors.html" 4329 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4330 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4331 > 4332 Mirrors </a> 4333 <span class="inline-block z-10 relative py-2 px-2"> 4334 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4335 </span> 4336 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4337 <ul class="w-full py-6"> 4338 <li class="level-1 w-full pl-8 pr-6"> 4339 <a href="https://www.eichholtz.com/en/collection/accessories/mirrors/table-and-floor-mirrors.html" 4340 title="Table and floor mirrors" 4341 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4342 Table and floor mirrors </a> 4343 </li> 4344 <li class="level-1 w-full pl-8 pr-6"> 4345 <a href="https://www.eichholtz.com/en/collection/accessories/mirrors/wall-mirrors.html" 4346 title="Wall mirrors" 4347 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4348 Wall mirrors </a> 4349 </li> 4350 </ul> 4351 </div> 4352 </li> 4353 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4354 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4355 > 4356 <a href="https://www.eichholtz.com/en/collection/accessories/wall-decorations.html" 4357 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4358 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4359 > 4360 Wall decorations </a> 4361 <sp
4361an class="inline-block z-10 relative py-2 px-2"> 4362 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4363 </span> 4364 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4365 <ul class="w-full py-6"> 4366 <li class="level-1 w-full pl-8 pr-6"> 4367 <a href="https://www.eichholtz.com/en/collection/accessories/wall-decorations/wall-objects.html" 4368 title="Wall objects" 4369 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4370 Wall objects </a> 4371 </li> 4372 <li class="level-1 w-full pl-8 pr-6"> 4373 <a href="https://www.eichholtz.com/en/collection/accessories/wall-decorations/prints-wall-accessories.html" 4374 title="Prints" 4375 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4376 Prints </a> 4377 </li> 4378 </ul> 4379 </div> 4380 </li> 4381 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4382 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4383 > 4384 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items.html" 4385 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4386 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4387 > 4388 Decorative items </a> 4389 <span class="inline-block z-10 relative py-2 px-2"> 4390 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4391 </span> 4392 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4393 <ul class="w-full py-6"> 4394 <li class="level-1 w-full pl-8 pr-6"> 4395 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/ashtrays-bowls.html" 4396 title="Ashtrays" 4397 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4398 Ashtrays </a> 4399 </li> 4400 <li class="level-1 w-full pl-8 pr-6"> 4401 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/bookends.html" 4402 title="Bookends" 4403 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4404 Bookends </a> 4405 </li> 4406 <li class="level-1 w-full pl-8 pr-6"> 4407 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/bowls.html" 4408 title="Bowls" 4409 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4410 Bowls </a> 4411 </li> 4412 <li class="level-1 w-full pl-8 pr-6"> 4413 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/boxes.html" 4414 title="Boxes" 4415 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4416 Boxes </a> 4417 </li> 4418 <li class="level-1 w-full pl-8 pr-6"> 4419 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/decorative-objects.html" 4420 title="Decorative objects" 4421 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4422 Decorative objects </a> 4423 </li> 4424 <li class="level-1 w-full pl-8 pr-6"> 4425 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/picture-frames.html" 4426 title="Picture frames" 4427 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4428 Picture frames </a> 4429 </li> 4430 <li class="level-1 w-full pl-8 pr-6"> 4431 <a href="https://www.eichholtz.com/en/collection/accessories/decorative-items/bronzes-sculptures-statues.html" 4432 title="Statues" 4433 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4434 Statues </a> 4435 </li> 4436 </ul> 4437 </div> 4438 </li> 4439 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4440 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4441 > 4442 <a href="https://www.eichholtz.com/en/collection/accessories/hurricanes-candle-holders.html" 4443 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4444 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4445 > 4446 Hurricanes | Candle holders </a> 4447 <sp
4447an class="inline-block z-10 relative py-2 px-2"> 4448 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4449 </span> 4450 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4451 <ul class="w-full py-6"> 4452 <li class="level-1 w-full pl-8 pr-6"> 4453 <a href="https://www.eichholtz.com/en/collection/accessories/hurricanes-candle-holders/candle-holders.html" 4454 title="Candle holders" 4455 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4456 Candle holders </a> 4457 </li> 4458 <li class="level-1 w-full pl-8 pr-6"> 4459 <a href="https://www.eichholtz.com/en/collection/accessories/hurricanes-candle-holders/candles.html" 4460 title="Candles" 4461 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4462 Candles </a> 4463 </li> 4464 <li class="level-1 w-full pl-8 pr-6"> 4465 <a href="https://www.eichholtz.com/en/collection/accessories/hurricanes-candle-holders/hurricanes.html" 4466 title="Hurricanes" 4467 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4468 Hurricanes </a> 4469 </li> 4470 </ul> 4471 </div> 4472 </li> 4473 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4474 > 4475 <a href="https://www.eichholtz.com/en/collection/accessories/artificial-flowers-and-greenery.html" 4476 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4477 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4478 > 4479 Artificial Flowers & Greenery </a> 4480 </li> 4481 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4482 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4483 > 4484 <a href="https://www.eichholtz.com/en/collection/accessories/vases-planters.html" 4485 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4486 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4487 > 4488 Vases | Planters </a> 4489 <sp
4489an class="inline-block z-10 relative py-2 px-2"> 4490 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4491 </span> 4492 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4493 <ul class="w-full py-6"> 4494 <li class="level-1 w-full pl-8 pr-6"> 4495 <a href="https://www.eichholtz.com/en/collection/accessories/vases-planters/planters-ceramics-vases.html" 4496 title="Vases" 4497 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4498 Vases </a> 4499 </li> 4500 <li class="level-1 w-full pl-8 pr-6"> 4501 <a href="https://www.eichholtz.com/en/collection/accessories/vases-planters/planters.html" 4502 title="Planters" 4503 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4504 Planters </a> 4505 </li> 4506 </ul> 4507 </div> 4508 </li> 4509 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4510 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4511 > 4512 <a href="https://www.eichholtz.com/en/collection/accessories/serving-accessories.html" 4513 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4514 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4515 > 4516 Serving accessories </a> 4517 <span class="inline-block z-10 relative py-2 px-2"> 4518 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4519 </span> 4520 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4521 <ul class="w-full py-6"> 4522 <li class="level-1 w-full pl-8 pr-6"> 4523 <a href="https://www.eichholtz.com/en/collection/accessories/serving-accessories/trays-serving-accessories.html" 4524 title="Serving accessories" 4525 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4526 Serving accessories </a> 4527 </li> 4528 <li class="level-1 w-full pl-8 pr-6"> 4529 <a href="https://www.eichholtz.com/en/collection/accessories/serving-accessories/wine-coolers.html" 4530 title="Wine coolers" 4531 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4532 Wine coolers </a> 4533 </li> 4534 <li class="level-1 w-full pl-8 pr-6"> 4535 <a href="https://www.eichholtz.com/en/collection/accessories/serving-accessories/wine-racks.html" 4536 title="Wine racks" 4537 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4538 Wine racks </a> 4539 </li> 4540 </ul> 4541 </div> 4542 </li> 4543 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4544 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4545 > 4546 <a href="https://www.eichholtz.com/en/collection/accessories/home-textiles.html" 4547 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4548 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4549 > 4550 Home textiles </a> 4551 <sp
4551an class="inline-block z-10 relative py-2 px-2"> 4552 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4553 </span> 4554 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4555 <ul class="w-full py-6"> 4556 <li class="level-1 w-full pl-8 pr-6"> 4557 <a href="https://www.eichholtz.com/en/collection/accessories/home-textiles/cushions-plaids.html" 4558 title="Cushions" 4559 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4560 Cushions </a> 4561 </li> 4562 </ul> 4563 </div> 4564 </li> 4565 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4566 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4567 > 4568 <a href="https://www.eichholtz.com/en/collection/accessories/coat-racks-umbrella-stands.html" 4569 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4570 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4571 > 4572 Coat racks | Umbrella stands & more </a> 4573 <span class="inline-block z-10 relative py-2 px-2"> 4574 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4575 </span> 4576 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4577 <ul class="w-full py-6"> 4578 <li class="level-1 w-full pl-8 pr-6"> 4579 <a href="https://www.eichholtz.com/en/collection/accessories/coat-racks-umbrella-stands/coat-racks.html" 4580 title="Coat racks" 4581 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4582 Coat racks </a> 4583 </li> 4584 <li class="level-1 w-full pl-8 pr-6"> 4585 <a href="https://www.eichholtz.com/en/collection/accessories/coat-racks-umbrella-stands/umbrella-stands.html" 4586 title="Umbrella stands" 4587 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4588 Umbrella stands </a> 4589 </li> 4590 <li class="level-1 w-full pl-8 pr-6"> 4591 <a href="https://www.eichholtz.com/en/collection/accessories/coat-racks-umbrella-stands/fireplace-accessories.html" 4592 title="Fireplace accessories" 4593 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4594 Fireplace accessories </a> 4595 </li> 4596 <li class="level-1 w-full pl-8 pr-6"> 4597 <a href="https://www.eichholtz.com/en/collection/accessories/coat-racks-umbrella-stands/bathroom-accessories.html" 4598 title="Bathroom accessories" 4599 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4600 Bathroom accessories </a> 4601 </li> 4602 </ul> 4603 </div> 4604 </li> 4605 </ul> 4606 4607 <div class="flex w-1/3 min-h-[375px]"> 4608 <img class="object-cover w-full" alt="Accessories" src="" :src="isOpen ? '/media/catalog/category/collections-category-image-eichholtz-accessories.jpg' : ''" /> 4609 </div> 4610 </div> 4611 </div> 4612 </div> 4613 <div class="level-0 flex items-center px-2 mx-2 transition transition-colors duration-500 group/parent xl:px-4 xl:mx-4" 4614 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height; menuMinHeight = 0;" 4615 @mouseover="isOpen = true" 4616 @mouseleave="isOpen = false" 4617 > 4618 <a href="https://www.eichholtz.com/en/collection/outdoor.html" 4619 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height;" 4620 title="Outdoor" 4621 class="level-0 block py-2 pl-2 pr-1 text-sm font-bold text-black whitespace-nowrap underline-offset-4 group-hover/parent:underline"> 4622 Outdoor </a> 4623 <sp
4623an class="inline items-center"> 4624 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" class="inline" aria-hidden="true"><path d="M480-358.463 253.847-584.615 296-626.768l184 184 184-184 42.153 42.153L480-358.463Z"/></svg> 4625 </span> 4626 4627 <div class="absolute bg-white left-0 right-0 ml-auto mr-auto top-full z-10 border-t border-white pt-3 -mt-3 w-11/12 2xl:w-[1330px] opacity-0 transition-opacity ease-out pointer-events-none group-hover/parent:opacity-100 focus-within:opacity-100 group-hover/parent:pointer-events-auto" 4628 :style="`margin-top: 0; top: ${hoverTopPosition}px;`" 4629 > 4630 <div class="flex flex-row justify-between items-stretch bg-white relative shadow-xl min-h-screen-50" 4631 :style="`min-height: ${menuMinHeight}px`" 4632 > 4633 <ul class="w-1/3 py-6 border-r border-r-grey-100"> 4634 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4635 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4636 > 4637 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-sofas-daybeds.html" 4638 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4639 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4640 > 4641 Outdoor sofas | Daybeds </a> 4642 <span class="inline-block z-10 relative py-2 px-2"> 4643 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4644 </span> 4645 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4646 <ul class="w-full py-6"> 4647 <li class="level-1 w-full pl-8 pr-6"> 4648 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-sofas-daybeds/outdoor-sofas.html" 4649 title="Outdoor sofas" 4650 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4651 Outdoor sofas </a> 4652 </li> 4653 <li class="level-1 w-full pl-8 pr-6"> 4654 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-sofas-daybeds/outdoor-beds.html" 4655 title="Outdoor beds" 4656 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4657 Outdoor beds </a> 4658 </li> 4659 </ul> 4660 </div> 4661 </li> 4662 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4663 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4664 > 4665 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-chairs.html" 4666 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4667 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4668 > 4669 Outdoor chairs </a> 4670 <sp
4670an class="inline-block z-10 relative py-2 px-2"> 4671 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4672 </span> 4673 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4674 <ul class="w-full py-6"> 4675 <li class="level-1 w-full pl-8 pr-6"> 4676 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-chairs/outdoor-armchairs.html" 4677 title="Outdoor armchairs" 4678 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4679 Outdoor armchairs </a> 4680 </li> 4681 <li class="level-1 w-full pl-8 pr-6"> 4682 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-chairs/outdoor-dining-chairs.html" 4683 title="Outdoor dining chairs" 4684 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4685 Outdoor dining chairs </a> 4686 </li> 4687 </ul> 4688 </div> 4689 </li> 4690 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4691 @mouseover.stop="setMenuMinHeight($event.currentTarget)" 4692 > 4693 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-tables.html" 4694 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4695 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4696 > 4697 Outdoor tables </a> 4698 <sp
4698an class="inline-block z-10 relative py-2 px-2"> 4699 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" aria-hidden="true"><path d="m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z"/></svg> 4700 </span> 4701 <div class="absolute left-1/3 w-1/3 min-h-full top-0 opacity-0 group-hover/child:opacity-100 pointer-events-none group-hover/child:pointer-events-auto"> 4702 <ul class="w-full py-6"> 4703 <li class="level-1 w-full pl-8 pr-6"> 4704 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-tables/outdoor-coffee-tables.html" 4705 title="Outdoor coffee tables" 4706 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4707 Outdoor coffee tables </a> 4708 </li> 4709 <li class="level-1 w-full pl-8 pr-6"> 4710 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-tables/outdoor-dining-tables.html" 4711 title="Outdoor dining tables" 4712 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4713 Outdoor dining tables </a> 4714 </li> 4715 <li class="level-1 w-full pl-8 pr-6"> 4716 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-tables/outdoor-console-tables.html" 4717 title="Outdoor console tables" 4718 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4719 Outdoor console tables </a> 4720 </li> 4721 <li class="level-1 w-full pl-8 pr-6"> 4722 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-tables/outdoor-side-tables.html" 4723 title="Outdoor side tables" 4724 class="level-1 p-1 block text-sm leading-loose underline-offset-4 hover:underline"> 4725 Outdoor side tables </a> 4726 </li> 4727 </ul> 4728 </div> 4729 </li> 4730 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4731 > 4732 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-carpets.html" 4733 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4734 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4735 > 4736 Outdoor carpets </a> 4737 </li> 4738 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4739 > 4740 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-accessories.html" 4741 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4742 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4743 > 4744 Outdoor accessories </a> 4745 </li> 4746 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4747 > 4748 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-lighting.html" 4749 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4750 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4751 > 4752 Outdoor lighting </a> 4753 </li> 4754 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4755 > 4756 <a href="https://www.eichholtz.com/en/collection/outdoor/outdoor-covers.html" 4757 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4758 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4759 > 4760 Outdoor covers </a> 4761 </li> 4762 </ul> 4763 4764 <div class="flex w-1/3 min-h-[375px]"> 4765 <img class="object-cover w-full" alt="Outdoor" src="" :src="isOpen ? '/media/catalog/category/category-banner-eic
4765hholtz-outdoor.jpg' : ''" /> 4766 </div> 4767 </div> 4768 </div> 4769 </div> 4770 <div class="level-0 flex items-center px-2 mx-2 transition transition-colors duration-500 group/parent xl:px-4 xl:mx-4" 4771 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height; menuMinHeight = 0;" 4772 @mouseover="isOpen = true" 4773 @mouseleave="isOpen = false" 4774 > 4775 <span 4776 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height;" 4777 title="Inspiration" 4778 class="level-0 block py-2 pl-2 pr-1 text-sm font-bold text-black whitespace-nowrap underline-offset-4 group-hover/parent:underline"> 4779 Inspiration </span> 4780 <span class="inline items-center"> 4781 <svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20" class="inline" aria-hidden="true"><path d="M480-358.463 253.847-584.615 296-626.768l184 184 184-184 42.153 42.153L480-358.463Z"/></svg> 4782 </span> 4783 4784 <div class="absolute bg-white left-0 right-0 ml-auto mr-auto top-full z-10 border-t border-white pt-3 -mt-3 w-11/12 2xl:w-[1330px] opacity-0 transition-opacity ease-out pointer-events-none group-hover/parent:opacity-100 focus-within:opacity-100 group-hover/parent:pointer-events-auto" 4785 :style="`margin-top: 0; top: ${hoverTopPosition}px;`" 4786 > 4787 <div class="flex flex-row justify-between items-stretch bg-white relative shadow-xl min-h-screen-50" 4788 :style="`min-height: ${menuMinHeight}px`" 4789 > 4790 <ul class="w-1/3 py-6 border-r border-r-grey-100"> 4791 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4792 > 4793 <a href="https://www.eichholtz.com/en/inspirations/digital-magazines.html" 4794 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4795 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4796 > 4797 Digital Magazines </a> 4798 </li> 4799 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4800 > 4801 <a href="https://www.eichholtz.com/en/inspirations/collaborations.html" 4802 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4803 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4804 > 4805 Collaborations </a> 4806 </li> 4807 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4808 > 4809 <a href="https://www.eichholtz.com/en/inspirations/featured-rooms.html" 4810 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4811 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4812 > 4813 Featured Rooms </a> 4814 </li> 4815 <li class="group/child flex justify-between items-center w-full pl-8 pr-6" 4816 > 4817 <a href="https://www.eichholtz.com/en/inspirations/fairs-and-events.html" 4818 class="w-full py-2 z-10 relative break-words text-sm underline-offset-4 group-hover/child:underline" 4819 @focus="setMenuMinHeight($event.currentTarget.parentNode)" 4820 > 4821 Fairs and events </a> 4822 </li> 4823 </ul> 4824 4825 <div class="flex w-1/3 min-h-[375px]"> 4826 <img class="object-cover w-full" alt="Inspiration" src="" :src="isOpen ? '/media/catalog/category/collections-category-image-eichholtz-x-the-met-season-4.jpg' : ''" /> 4827 </div> 4828 </div> 4829 </div> 4830 </div> 4831 <div class="level-0 flex items-center px-2 mx-2 transition transition-colors duration-500 group/parent xl:px-4 xl:mx-4" 4832 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height; menuMinHeight = 0;" 4833 @mouseover="isOpen = true" 4834 @mouseleave="isOpen = false" 4835 > 4836 <a href="https://www.eichholtz.com/en/contract.html" 4837 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height;" 4838 title="Contract" 4839 class="level-0 block py-2 pl-2 pr-1 text-sm font-bold text-black whitespace-nowrap underline-offset-4 group-hover/parent:underline"> 4840 Contract </a> 4841 </div> 4842 <div class="level-0 flex items-center px-2 mx-2 transition transition-colors duration-500 group/parent xl:px-4 xl:mx-4" 4843 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height; menuMinHeight = 0;" 4844 @mouseover="isOpen = true" 4845 @mouseleave="isOpen = false" 4846 > 4847 <a href="https://www.eichholtz.com/en/sale.html" 4848 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height;" 4849 title="Sale" 4850 class="level-0 block py-2 pl-2 pr-1 text-sm font-bold text-black whitespace-nowrap underline-offset-4 group-hover/parent:underline"> 4851 Sale </a> 4852 </div> 4853 </ul> 4854 </nav> 4855 </div> 4856 4857</div>
4858<script> 4859 'use strict'; 4860 4861 const initMenuDesktop_6abfd9243168b = () => { 4862 return { 4863 hoverTopPosition: '100%', 4864 menuMinHeight: 0, 4865 isOpen: false, 4866 setMenuMinHeight(targetElement) { 4867 const childMenu = targetElement.querySelector('div.absolute'); 4868 childMenu && (this.menuMinHeight = childMenu.getBoundingClientRect().height); 4869 }, 4870 setActiveMenu(menuNode) { 4871 Array.from(menuNode.querySelectorAll('a')).filter(link => { 4872 return link.href === window.location.href.split('?')[0]; 4873 }).map(item => { 4874 if (!item.classList.contains('level-0')) { 4875 item.classList.add('underline'); 4876 } 4877 item.closest('div.level-0') && 4878 item.closest('div.level-0').classList.add('border-secondary'); 4879 }); 4880 } 4881 } 4882 } 4883</script>
4883 4884 </div> 4885 </div> 4886 </div> 4887 4888 4889 <!--Cart Drawer--> 4890
4890<script> 4891 function initCartDrawer() { 4892 return { 4893 open: false, 4894 isLoading: false, 4895 isLoggedIn: false, 4896 hasLoadedFbt: false, 4897 cart: {}, 4898 maxItemsToDisplay: 0, 4899 itemsCount: 0, 4900 totalCartAmount: 0, 4901 getData(data) { 4902 if (data.cart) { 4903 this.cart = data.cart; 4904 this.itemsCount = data.cart.items && data.cart.items.length || 0; 4905 this.totalCartAmount = this.cart.summary_count; 4906 this.setCartItems(); 4907 } 4908 4909 this.isLoggedIn = !!(data.customer && data.customer.firstname); 4910 4911 this.isLoading = false; 4912 }, 4913 cartItems: [], 4914 getItemCountTitle() { 4915 return hyva.strf('(%0 item' + (this.totalCartAmount > 1 ? 's' : '') + ')', this.totalCartAmount) 4916 }, 4917 setCartItems() { 4918 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 4919 4920 if (this.maxItemsToDisplay > 0) { 4921 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 4922 } 4923 }, 4924 openStateChanged(isOpen) { 4925 document.body.style.overflowY = isOpen ? 'hidden' : 'auto'; 4926 4927 if (isOpen && !this.hasLoadedFbt && typeof initFrequentlyBoughtTogether === 'function') { 4928 this.hasLoadedFbt = true; 4929 initFrequentlyBoughtTogether(); 4930 } 4931 }, 4932 deleteItemFromCart(itemId) { 4933 this.isLoading = true; 4934 4935 const formKey = hyva.getFormKey(); 4936 const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; 4937 4938 fetch(postUrl, { 4939 "headers": { 4940 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 4941 }, 4942 "body": "form_key=" + formKey + "&item_id=" + itemId, 4943 "method": "POST", 4944 "mode": "cors", 4945 "credentials": "include" 4946 }).then(response => { 4947 if (response.redirected) { 4948 window.location.href = response.url; 4949 } else if (response.ok) { 4950 return response.json(); 4951 } else { 4952 window.dispatchMessages && window.dispatchMessages([{ 4953 type: 'warning', 4954 text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' 4955 }]); 4956 this.isLoading = false; 4957 } 4958 }).then(result => { 4959 window.dispatchMessages && window.dispatchMessages([{ 4960 type: result.success ? 'success' : 'error', 4961 text: result.success 4962 ? 'You\u0020removed\u0020the\u0020item.' 4963 : result.error_message 4964 }], result.success ? 5000 : 0) 4965 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 4966 }); 4967 } 4968 } 4969 } 4970</script>
4970 4971<section id="cart-drawer" 4972 x-data="initCartDrawer()" 4973 x-init="$watch('open', (value) => openStateChanged(value))" 4974 @private-content-loaded.window="getData($event.detail.data)" 4975 @toggle-cart.window="open=true" 4976 @keydown.window.escape="open=false" 4977> 4978 4979 <template x-teleport="body" x-cloak> 4980 <div role="dialog" 4981 aria-labelledby="cart-drawer-title" 4982 aria-modal="true" 4983 @click.outside="open=false" 4984 x-cloak 4985 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 4986 <div class="backdrop" 4987 x-show="open" 4988 x-transition:enter="ease-in-out duration-500" 4989 x-transition:enter-start="opacity-0" 4990 x-transition:enter-end="opacity-100" 4991 x-transition:leave="ease-in-out duration-500" 4992 x-transition:leave-start="opacity-100" 4993 x-transition:leave-end="opacity-0" 4994 @click="open=false" 4995 aria-label="Close panel"></div> 4996 4997 <div id="cart-drawer-content-container" 4998 class="relative mx-auto my-auto px-16 lg:block h-fit transition-opacity ease-in-out duration-500" 4999 x-show="open && window.innerWidth >= 1024" 5000 x-transition:enter="transition-opacity ease-in-out duration-500" 5001 x-transition:enter-start="opacity-0" 5002 x-transition:enter-end="opacity-100" 5003 x-transition:leave="transition-opacity ease-in-out duration-500" 5004 x-transition:leave-start="opacity-100" 5005 x-transition:leave-end="opacity-0" 5006 > 5007 5008<section 5009 x-data="{ showFbt: false }" 5010 @show-fbt.window="showFbt = true" 5011 x-show="showFbt" 5012 x-transition:enter="transition-opacity ease-in-out duration-500 delay-300" 5013 x-transition:enter-start="opacity-0" 5014 x-transition:enter-end="opacity-100" 5015 class="bg-white p-5 h-fit max-w-screen-lg hidden lg:block" 5016 id="fbt-section" 5017> 5018 <h3 id="fbt-title" class="mb-2"></h3> 5019 5020 <div id="frequently-bought-together" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-8"></div> 5021 5022
5022<script> 5023 let fbtInitialized = false; 5024 5025 Promise.all([ 5026 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/internals/common.js"), 5027 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/internals/base64.js"), 5028 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/algolia-instantsearch.min.js"), 5029 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/search-insights.min.js"), 5030 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/recommend.min.js"), 5031 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/recommend-js.min.js"), 5032 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/recommend.js"), 5033 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/template/recommend/products.js"), 5034 ]); 5035 5036 window.addEventListener('product-addtocart-success', function (event) { 5037 const productId = event.detail?.productId; 5038 if (!productId || fbtInitialized) return; 5039 5040 fbtInitialized = true; 5041 fetchAlgoliaRecommendations(productId); 5042 }); 5043 5044 document.addEventListener('DOMContentLoaded', () => { 5045 const titleEl = document.getElementById('fbt-title'); 5046 const fbtTitle = window.algoliaConfig?.recommend?.FBTTitle; 5047 if (titleEl) { 5048 titleEl.textContent = fbtTitle; 5049 } 5050 }); 5051 5052 function showFbtSection() { 5053 const section = document.getElementById('fbt-section'); 5054 if (section) { 5055 section.dispatchEvent(new CustomEvent('show-fbt', {bubbles: true})); 5056 } 5057 } 5058 5059 function fetchAlgoliaRecommendations(productId) { 5060 const recommend = window['@algolia/recommend']; 5061 if (typeof recommend !== 'function') { 5062 console.error('Algolia Recommend is not loaded'); 5063 return; 5064 } 5065 5066 let indexName = window.algoliaConfig.indexName + '_products'; 5067 let indexType; 5068 const {applicationId, apiKey} = window.algoliaConfig; 5069 const recommendClient = recommend(applicationId, apiKey); 5070 5071 if (indexName.includes('local') || indexName.includes('test') || indexName.includes('uat')) { 5072 console.warn('[Algolia] Overriding indexName for local/test environment'); 5073 indexName = 'uat_magento2_en_products'; 5074 indexType = recommendClient.getLookingSimilar; 5075 } 5076 else{ 5077 indexType = recommendClient.getFrequentlyBoughtTogether; 5078 } 5079 5080 indexType([{ 5081 indexName, 5082 objectID: productId.toString(), 5083 maxRecommendations: 3 5084 }]).then((result) => { 5085 const hits = result?.results?.[0]?.hits || []; 5086 5087 // Don't show when there are less than 3 results 5088 if (hits.length < 3) { 5089 return; 5090 } 5091 5092 const container = document.getElementById('frequently-bought-together'); 5093 const customerGroupId = 44; 5094 const priceKey = `group_${customerGroupId}_formated`; 5095 const originalPriceKey = `group_${customerGroupId}_original_formated`; 5096
5097 hits.forEach(product => { 5098 const groupPrice = product.price?.[priceKey] || ''; 5099 const originalPrice = product.price?.[originalPriceKey] || ''; 5100 const discount = product.discount < 50 ? product.discount : ''; 5101 const url = new URL(product.url); 5102 url.searchParams.set('type', 'frequently_bought_together'); 5103 5104 const html = `<div class="flex flex-col text-center items-center"> 5105 <div class="relative w-full group"> 5106 <a href="${url}"> 5107 <img src="${product.image_url}" alt="${product.name}" class="mb-4 w-full h-auto object-cover transition-opacity duration-300 group-hover:opacity-0" /> 5108 ${product.hover_image ? `<img src="${product.hover_image}" alt="${product.name} hover" class="absolute top-0 left-0 mb-4 w-full h-auto object-cover opacity-0 transition-opacity duration-300 group-hover:opacity-100" />` : ''} 5109 </a> 5110 </div> 5111 <div class="product-info flex flex-col gap-2 grow"> 5112 <a href="${url}" class="product-item-link grow text-center text-xl font-serif text-black px-3 leading-6"> 5113 ${product.name} 5114 </a> 5115 <div class="flex flex-wrap items-center gap-2 justify-center text-sm"> 5116 ${originalPrice && groupPrice && originalPrice !== groupPrice 5117 ? `<span class="text-primary-900 font-bold">${originalPrice}</span><span class="line-through text-gray-400">${groupPrice}</span>` 5118 : `<span class="text-primary-900 font-bold">${groupPrice}</span>`} 5119 ${discount ? ` 5120 <div class="text-white text-sm bg-red px-2 rounded-sm w-max tracking-wider"> 5121 ${discount}% discount 5122 </div>` : ''} 5123 </div> 5124 <div class="flex flex-row items-center justify-center gap-4 text-primary-400 text-xs"> 5125 <div>${product.sku}</div> 5126 <div class="flex items-center justify-center gap-2"> 5127 <span class="inline-block w-2 h-2 ${window.algoliaConfig.availability_values[product.nav_available].class} rounded-full"></span> 5128 <span>${product.nav_available}</span> 5129 </div> 5130 </div> 5131 </div> 5132 </div>`; 5133 5134 container.insertAdjacentHTML('beforeend', html); 5135 }); 5136 showFbtSection(); 5137 }); 5138 } 5139 </script>
5139 5140</section> 5141 </div> 5142 5143 <div class="relative w-screen max-w-md shadow-2xl bg-white" 5144 x-show="open" 5145 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 5146 x-transition:enter-start="translate-x-full" 5147 x-transition:enter-end="translate-x-0" 5148 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 5149 x-transition:leave-start="translate-x-0" 5150 x-transition:leave-end="translate-x-full" 5151 > 5152 <template x-if="cart && isLoggedIn"> 5153 <div class="flex flex-col h-full bg-white shadow-xl"> 5154 5155 <header class="px-6 py-6 sm:px-8 flex items-center justify-between gap-4 w-full"> 5156 <span class="text-xl leading-7 font-semibold text-primary-900"> 5157 My Cart <span class="items-total text-xs" 5158 x-show="totalCartAmount > 0" 5159 x-text="getItemCountTitle()"> 5160 </span> 5161 </span> 5162 <button 5163 type="button" 5164 @click="open=false" 5165 aria-label="Close panel" 5166 class="shrink-0 h-10 w-10 rounded-full bg-primary-50 text-primary-900 hover:bg-primary-100 transition-colors duration-150 ease-in-out flex items-center justify-center" 5167 > 5168 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="h-6 w-6" aria-hidden="true"><path d="M256-213.847 213.847-256l224-224-224-224L256-746.153l224 224 224-224L746.153-704l-224 224 224 224L704-213.847l-224-224-224 224Z"/></svg> 5169 </button> 5170 </header> 5171 5172 5173 <template x-if="itemsCount === 0"> 5174 <p class="mb-4 text-center">You have no items in your shopping cart.</p> 5175 </template> 5176 5177 <div class="relative grid px-4 py-1 overflow-y-auto bg-white border-b 5178 sm:px-6 border-container divide-y"> 5179 <template x-for="item in cartItems"> 5180 <div class="flex items-start p-3 space-x-4 transition duration-150 5181 ease-in-out hover:bg-gray-100"> 5182 <a :href="item.product_url" class="w-1/4"> 5183 <img 5184 :src="item.product_image.src" 5185 :width="item.product_image.width" 5186 :height="item.product_image.height" 5187 loading="lazy" 5188 /> 5189 </a> 5190 <div class="w-3/4 space-y-2"> 5191 <div> 5192 <p class="pb-1 text-xl"> 5193 <a :href="item.product_url" class="no-underline"> 5194 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 5195 </a> 5196 </p> 5197 <p class="text-sm"><span x-html="item.product_sku"></span></p> 5198 </div> 5199 <template x-for="option in item.options"> 5200 <div class="pt-2"> 5201 <p class="font-semibold" x-text="option.label + ':'"></p> 5202 <p class="text-secondary" x-html="option.value"></p> 5203 </div> 5204 </template> 5205 <p><span x-html="item.product_price"></span></p> 5206 </div> 5207 </div> 5208 </template> 5209 </div> 5210 5211 5212 <div class="relative grid gap-6 px-4 py-1 bg-white sm:gap-8 sm:px-6"> 5213 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg"> 5214 <p class="font-bold">Cart subtotal:
5215 <span class="font-normal" x-html="cart.subtotal"></span> 5216 </p> 5217 </div> 5218 <div class="inline-flex w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out 5219 rounded-lg"> 5220 <a href="https://www.eichholtz.com/en/checkout/" 5221 class="inline-flex btn-primary"> 5222 Checkout </a> 5223 <span class="mt-2">or</span> 5224 <a href="https://www.eichholtz.com/en/checkout/cart/" 5225 class="underline mt-2"> 5226 View and edit cart </a> 5227 </div> 5228 </div> 5229 5230 </div> 5231 </template> 5232 5233 <template x-if="!isLoggedIn"> 5234 <div class="flex flex-col h-ful bg-white "> 5235 <header class="px-6 py-6 sm:px-8 flex items-center justify-between gap-4 w-full"> 5236 <span class="text-xl leading-7 font-semibold text-primary-900"> 5237 My Cart </span> 5238 <button 5239 type="button" 5240 @click="open=false" 5241 aria-label="Close panel" 5242 class="shrink-0 h-10 w-10 rounded-full bg-primary-50 text-primary-900 hover:bg-primary-100 transition-colors duration-150 ease-in-out flex items-center justify-center" 5243 > 5244 <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" class="h-6 w-6" aria-hidden="true"><path d="M256-213.847 213.847-256l224-224-224-224L256-746.153l224 224 224-224L746.153-704l-224 224 224 224L704-213.847l-224-224-224 224Z"/></svg> 5245 </button> 5246 </header> 5247 <div class="relative grid px-8 py-1 overflow-y-auto bg-white"> 5248 <p class="mb-4 text-center">You have no items in your shopping cart.</p> 5249 5250 <a class="btn-primary block text-center" href="https://www.eichholtz.com/en/customer/account/login/"> 5251 Login to view your cart </a> 5252 </div> 5253 </div> 5254 </template> 5255 </div> 5256 <div 5257 class="z-50 fixed inset-0 grid place-items-center bg-white/70 text-primary" 5258 x-cloak 5259 x-show="isLoading" 5260 x-transition.opacity.duration.200ms 5261> 5262 <div class="flex gap-10 items-center p-4"> 5263 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" width="57" height="57" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"> 5264 <style> 5265 @keyframes spinner-ball-triangle1 { 5266 0% { transform: translate(0%, 0%); } 5267 33% { transform: translate(38%, -79%); } 5268 66% { transform: translate(77%, 0%); } 5269 100% { transform: translate(0%, 0%); } 5270 } 5271 5272 @keyframes spinner-ball-triangle2 { 5273 0% { transform: translate(0%, 0%); } 5274 33% { transform: translate(38%, 79%); } 5275 66% { transform: translate(-38%, 79%); } 5276 100% { transform: translate(0%, 0%); } 5277 } 5278 5279 @keyframes spinner-ball-triangle3 { 5280 0% { transform: translate(0%, 0%); } 5281 33% { transform: translate(-77%, 0%); } 5282 66% { transform: translate(-38%, -79%); } 5283 100% { transform: translate(0%, 0%); } 5284 } 5285 </style> 5286 <circle cx="5" cy="50" r="5" style="animation: spinner-ball-triangle1 2.2s linear infinite"/> 5287 <circle cx="27" cy="5" r="5" style="animation: spinner-ball-triangle2 2.2s linear infinite"/> 5288 <circle cx="49" cy="50" r="5" style="animation: spinner-ball-tr
5288iangle3 2.2s linear infinite"/> 5289</svg> 5290 <span class="text-xl select-none"> 5291 Loading... </span> 5292 </div> 5293</div> 5294 </div> 5295 </template> 5296</section> 5297 5298 <!--Authentication Pop-Up--> 5299 5300 <template x-teleport="body" x-cloak> 5301 <div class="backdrop" 5302 x-show="isOpen" 5303 @click="closeSearchBar" 5304 x-transition:enter="ease-in-out duration-300" 5305 x-transition:enter-start="opacity-0" 5306 x-transition:enter-end="opacity-100" 5307 x-transition:leave="ease-in-out duration-300" 5308 x-transition:leave-start="opacity-100" 5309 x-transition:leave-end="opacity-0"> 5310 5311 </div> 5312 </template> 5313</div>
5314<script type="text/javascript"> 5315 window.initExtraAlgoliaConfiguration = (algoliaConfig) => { 5316 const querySuggestionsPlugin = createQuerySuggestionsPlugin({ 5317 searchClient, 5318 indexName: algoliaConfig.indexName + "_products_query_suggestions", 5319 transformSource: ({ source, onTapAhead }) => { 5320 return { 5321 ...source, 5322 templates: { 5323 item({ item, components, html }) { 5324 return html`<button onClick=${ (event) => { 5325 event.preventDefault(); 5326 event.stopPropagation(); 5327 onTapAhead(item)} 5328 }>${item.query}</button>` 5329 } 5330 } 5331 } 5332 } 5333 }); 5334 5335 return { plugins: [querySuggestionsPlugin] } 5336 } 5337</script>
5337 5338</header><div class="widget block block-banners" data-banner-id="6017262ac7383beb2977b859b6b1fdd653602a0d4d0083f6cd39564b784d6f01" data-types="" data-display-mode="fixed" data-ids="232" data-rotate="" data-store-id="1" data-banner-name="Notification Bar - NCL 2026 EN" data-banner-status="Disabled"></div> 5339<main id="maincontent" class="page-main"> <!-- 5340DEPRECATED: This template will be removed in version 3.17 5341If you're overriding or referencing this file, please update your layout and customizations accordingly. 5342--><div id="contentarea" tabindex="-1"></div> 5343<div class="page messages">
5343<script> 5344 function initMessages() { 5345 "use strict"; 5346 return { 5347 messages: window.mageMessages || [], 5348 isEmpty() { 5349 return this.messages.reduce( 5350 function (isEmpty, message) { 5351 return isEmpty && message === undefined 5352 }, true 5353 ) 5354 }, 5355 removeMessage(messageIndex) { 5356 this.messages[messageIndex] = undefined; 5357 }, 5358 addMessages(messages, hideAfter) { 5359 messages.map((message) => { 5360 this.messages = this.messages.concat(message); 5361 if (hideAfter === undefined && window.defaultSuccessMessageTimeout) { 5362 hideAfter = window.defaultSuccessMessageTimeout; 5363 } 5364 if (hideAfter) { 5365 this.setHideTimeOut(this.messages.length -1, hideAfter); 5366 } 5367 }); 5368 }, 5369 setHideTimeOut(messageIndex, hideAfter) { 5370 setTimeout((messageIndex) => { 5371 this.removeMessage(messageIndex); 5372 }, hideAfter, messageIndex); 5373 }, 5374 eventListeners: { 5375 ['@messages-loaded.window'](event) { 5376 this.addMessages(event.detail.messages, window.defaultSuccessMessageTimeout) 5377 }, 5378 ['@private-content-loaded.window'](event) { 5379 const data = event.detail.data; 5380 if ( 5381 data.messages && 5382 data.messages.messages && 5383 data.messages.messages.length 5384 ) { 5385 this.addMessages(data.messages.messages); 5386 } 5387 }, 5388 ['@clear-messages.window']() { 5389 this.messages = []; 5390 } 5391 } 5392 } 5393 } 5394</script>
5394 5395<section id="messages" 5396 x-data="initMessages()" 5397 x-bind="eventListeners" 5398 aria-live="assertive" 5399 role="alert" 5400> 5401 <template x-if="!isEmpty()"> 5402 <div class="w-full"> 5403 <div class="messages container mx-auto py-3"> 5404 <template x-for="(message, index) in messages" :key="index"> 5405 <div> 5406 <template x-if="message"> 5407 <div class="message" :class="message.type" 5408 :ui-id="'message-' + message.type" 5409 > 5410 <span x-html="message.text"></span> 5411 <a 5412 type="button" 5413 class="text-white hover:text-gray-400 cursor-pointer" 5414 aria-label="Close message" 5415 @click.prevent="removeMessage(index)" 5416 > 5417 <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"> 5418 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 5419</svg> 5420 </a> 5421 </div> 5422 </template> 5423 </div> 5424 </template> 5425 </div> 5426 </div> 5427 </template> 5428</section> 5429</div><div class="container main-title-container flex flex-row flex-wrap my-6 pt-0 "> 5430 <h2 class="font-normal"> 5431 <span class="base" data-ui-id="page-title-wrapper" >Partner Login</span> </h2> 5432 </div> 5433<div class="columns"><div class="column main"> <div class="language-switcher-modal" x-data="Object.assign({}, hyva.modal(), websiteSwitcherPopup())" 5434 @private-content-loaded.window="retrieveCustomerData($event.detail.data)"> 5435 <div x-cloak data-dialog-ref-name="dialog" 5436 x-bind="overlay" 5437 class="fixed inset-0 bg-black bg-opacity-50 z-50 bg-grey-700 bg-opacity-50"> 5438 <div class="fixed flex justify-center items-center text-left z-40 inset-0"> 5439 <div x-ref="dialog" role="dialog" aria-modal="true" 5440 class="inline-block bg-white shadow-xl p-10 max-h-screen overflow-auto overscroll-y-contain border border-10 p-12"> 5441 <div class="language-switcher-modal__holder"> 5442 <div class="w-full text-center"> 5443 <h2 class="uppercase text-3xl">Visit eichholtz.com/usa for:</h2> 5444 <ul class="text-sm pt-4 text-secondary m-auto w-4/5 list-disc text-left"> 5445 <li class="pt-2">direct access to the US Quick Shipping Program</li> 5446 <li class="pt-2">UL certified lighting</li> 5447 </ul> 5448 <a href="https://www.eichholtz.com/usa/" class="rounded-none my-4 py-2 border-0 focus:rounded-none focus-visible:rounded-none bg-primary-darker text-white w-[230px] py-2 px-3 uppercase inline-block"> 5449 <span class="inline-block left-0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 513 342" width="30" height="17" role="img"><path fill="#FFF" d="M0 0h513v342H0z"/><g fill="#D80027"><path d="M0 0h513v26.3H0zM0 52.6h513v26.3H0zM0 105.2h513v26.3H0zM0 157.8h513v26.3H0zM0 210.5h513v26.3H0zM0 263.1h513v26.3H0zM0 315.7h513V342H0z"/></g><path fill="#2E52B2" d="M0 0h256.5v184.1H0z"/><g fill="#FFF"><path d="m47.8 138.9-4-12.8-4.4 12.8H26.2l10.7 7.7-4 12.8 10.9-7.9 10.6 7.9-4.1-12.8 10.9-7.7zM104.1 138.9l-4.1-12.8-4.2 12.8H82.6l10.7 7.7-4 12.8 10.7-7.9 10.8 7.9-4-12.8 10.7-7.7zM160.6 138.9l-4.3-12.8-4 12.8h-13.5l11 7.7-4.2 12.8 10.7-7.9 11 7.9-4.2-12.8 10.7-7.7zM216.8 138.9l-4-12.8-4.2 12.8h-13.3l10.8 7.7-4 12.8 10.7-7.9 10.8 7.9-4.3-12.8 11-7.7zM100 75.3l-4.2 12.8H82.6L93.3 96l-4 12.6 10.7-7.8 10.8 7.8-4-12.6 10.7-7.9h-13.4zM43.8 75.3l-4.4 12.8H26.2L36.9 96l-4 12.6 10.9-7.8 10.6 7.8L50.3 96l10.9-7.9H47.8zM156.3 75.3l-4 12.8h-13.5l11 7.9-4.2 12.6 10.7-7.8 11 7.8-4.2-12.6 10.7-7.9h-13.2zM212.8 75.3l-4.2 12.8h-13.3l10.8 7.9-4 12.6 10.7-7.8 10.8 7.8-4.3-12.6 11-7.9h-13.5zM43.8 24.7l-4.4 12.6H26.2l10.7 7.9-4 12.7L43.8 50l10.6 7.9-4.1-12.7 10.9-7.9H47.8zM100 24.7l-4.2 12.6H82.6l10.7 7.9-4 12.7L100 50l10.8 7.9-4-12.7 10.7-7.9h-13.4zM156.3 24.7l-4 12.6h-13.5l11 7.9-4.2 12.7 10.7-7.9 11 7.9-4.2-12.7 10.7-7.9h-13.2zM212.8 24.7l-4.2 12.6h-13.3l10.8 7.9-4 12.7 10.7-7.9 10.8 7.9-4.3-12.7 11-7.9h-13.5z"/></g><title>us</title></svg> 5450</span>
5450 <span>USA website</span> 5451 </a> 5452 <div class="py-4"> 5453 <h2 class="border-t-2 leading-[0.1rem]"> 5454 <span class="uppercase text-3xl px-3 leading-[0.1rem] bg-container-lighter">Or</span> 5455 </h2> 5456 </div> 5457 <div class="usa-continue-as-normal"> 5458 <h2 class="uppercase text-3xl pt-2 mb-4">Visit Eichholtz.com</h2> 5459 <span class="text-sm text-secondary"> 5460 and select your language </span> 5461 <div class="block"> 5462 <div class="max-w-[230px] mt-3 w-[230px] block m-auto text-primary" x-data="{ listOpen: false }"> 5463 <p x-on:click="listOpen = ! listOpen" 5464 class="inline-block relative cursor-pointer leading-7 border w-full py-2 px-4 uppercase hover:bg-container"> 5465 <span class="float-left" x-html="getIcon"></span> 5466 <span x-text="selectedStoreName"></span> 5467 <span class="float-right"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="24" height="24" role="img"> 5468 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 5469<title>chevron-down</title></svg> 5470</span> 5471 </p> 5472 <div class="max-w-[230px] z-10 absolute bg-container-lighter" x-show="listOpen"> 5473 <p 5474 class="inline-block relative cursor-pointer leading-7 border-b border-x w-full py-2 px-4 uppercase hover:bg-container" 5475 @click="function () { 5476 updateSelectOption('Deutsch', 'de', 'https://www.eichholtz.com/en/stores/store/redirect/___store/de/___from_store/en/uenc/aHR0cHM6Ly93d3cuZWljaGhvbHR6LmNvbS9kZS9jdXN0b21lci9hY2NvdW50L2xvZ2lu/'); 5477 listOpen = false; 5478 }"> 5479 <span class="float-left"> 5480 <span class="inline-block left-0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 513 342" class="-mt-1" width="30" height="17" role="img"><path fill="#D80027" d="M0 0h513v342H0z"/><path d="M0 0h513v114H0z"/><path fill="#FFDA44" d="M0 228h513v114H0z"/><title>de</title></svg> 5481</span> </span> 5482 <span class="mr-4">Deutsch</span> 5483 <span class="float-right"></span> 5484 </p> 5485 <p 5486 class="inline-block relative cursor-pointer leading-7 border-b border-x w-full py-2 px-4 uppercase hover:bg-container" 5487 @click="function () { 5488 updateSelectOption('English', 'en', 'https://www.eichholtz.com/en/stores/store/redirect/___store/en/___from_store/en/uenc/aHR0cHM6Ly93d3cuZWljaGhvbHR6LmNvbS9lbi9jdXN0b21lci9hY2NvdW50L2xvZ2lu/'); 5489 listOpen = false; 5490 }"> 5491 <span class="float-left"> 5492 <span class="inline-block left-0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 513 342" class="-mt-1" width="30" height="17" role="img"><g fill="#FFF"><path d="M0 0h513v341.3H0V0z"/><path d="M311.7 230 513 341.3v-31.5L369.3 230h-57.6zM200.3 111.3 0 0v31.5l143.7 79.8h56.6z"/></g><g fill="#0052B4"><path d="M393.8 230 513 295.7V230H393.8zm-82.1 0L513 341.3v-31.5L369.3 230h-57.6zm146.9 111.3-147-81.7v81.7h147zM90.3 230 0 280.2V230h90.3zm110 14.2v97.2H25.5l174.8-97.2zM118.2 111.3 0 45.6v65.7h118.2zm82.1 0L0 0v31.5l143.7 79.8h56.6zM53.4 0l147 81.7V0h-147zM421.7 111.3 513 61.1v50.2h-91.3zm-110-14.2V0h174.9L311.7 97.1z"/></g><g fill="#D80027"><path d="M288 0h-64v138.7H0v64h224v138.7h64V202.7h224v-64H288V0z"/><path d="M311.7 230 513 341.3v-31.5L369.3 230h-57.6zM143.7 230 0 309.9v31.5L200.3 230h-56.6zM200.3 111.3 0 0v31.5l143.7 79.8h56.6zM368.3 111.3 513 31.5V0L311.7 111.3h56.6z"/></g><title>gb</title></svg> 5493</span> </span>
5494 <span class="mr-4">English</span> 5495 <span class="float-right"></span> 5496 </p> 5497 <p 5498 class="inline-block relative cursor-pointer leading-7 border-b border-x w-full py-2 px-4 uppercase hover:bg-container" 5499 @click="function () { 5500 updateSelectOption('Español', 'es', 'https://www.eichholtz.com/en/stores/store/redirect/___store/es/___from_store/en/uenc/aHR0cHM6Ly93d3cuZWljaGhvbHR6LmNvbS9lcy9jdXN0b21lci9hY2NvdW50L2xvZ2lu/'); 5501 listOpen = false; 5502 }"> 5503 <span class="float-left"> 5504 <span class="inline-block left-0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.5 15" class="-mt-1" width="30" height="17" role="img"><path fill="#FFF" d="M0 0h22.5v15H0V0z"/><path fill="#D03433" d="M0 0h22.5v4H0V0zm0 11h22.5v4H0v-4z"/><path fill="#FBCA46" d="M0 4h22.5v7H0V4z"/><path fill="#FFF" d="M7.8 7h1v.5h-1V7z"/><path fill="#A41517" d="M7.2 8.5c0 .3.3.5.6.5s.6-.2.6-.5L8.5 7H7.1l.1 1.5zM6.6 7c0-.3.2-.5.4-.5h1.5c.3 0 .5.2.5.4V7l-.1 1.5c-.1.6-.5 1-1.1 1-.6 0-1-.4-1.1-1L6.6 7z"/><path fill="#A41517" d="M6.8 7.5h2V8h-.5l-.5 1-.5-1h-.5v-.5zM5.3 6h1v3.5h-1V6zm4 0h1v3.5h-1V6zm-2.5-.5c0-.3.2-.5.5-.5h1c.3 0 .5.2.5.5v.2c0 .2-.1.3-.3.3H7c-.1 0-.2-.1-.2-.2v-.3z"/><title>es</title></svg> 5505</span> </span> 5506 <span class="mr-4">Español</span> 5507 <span class="float-right"></span> 5508 </p> 5509 <p 5510 class="inline-block relative cursor-pointer leading-7 border-b border-x w-full py-2 px-4 uppercase hover:bg-container" 5511 @click="function () { 5512 updateSelectOption('Français', 'fr', 'https://www.eichholtz.com/en/stores/store/redirect/___store/fr/___from_store/en/uenc/aHR0cHM6Ly93d3cuZWljaGhvbHR6LmNvbS9mci9jdXN0b21lci9hY2NvdW50L2xvZ2lu/'); 5513 listOpen = false; 5514 }"> 5515 <span class="float-left"> 5516 <span class="inline-block left-0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 513 342" class="-mt-1" width="30" height="17" role="img"><path fill="#FFF" d="M0 0h513v342H0z"/><path fill="#0052B4" d="M0 0h171v342H0z"/><path fill="#D80027" d="M342 0h171v342H342z"/><title>fr</title></svg> 5517</span> </span> 5518 <span class="mr-4">Français</span> 5519 <span class="float-right"></span> 5520 </p> 5521 </div> 5522 <span class="rounded-none my-4 py-2 border-0 focus:rounded-none focus-visible:rounded-none bg-primary-darker text-white w-[230px] py-2 px-3 uppercase inline-block cursor-pointer" @click="selectStore"> 5523 Continue </span> 5524 </div> 5525 </div> 5526 </div> 5527 </div> 5528</div> 5529 </div> 5530 </div> 5531 </div> 5532 </div> 5533
5533<script> 5534 function websiteSwitcherPopup() { 5535 return { 5536 currentStoreCode: CURRENT_STORE_CODE, 5537 selectedStoreName: 'English', 5538 selectedStoreUrl: BASE_URL, 5539 selectedStoreCode: 'en', 5540 redirectNoticeStoreCodes: 'CA,US', 5541 icons: { 5542 'en': '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 513 342" width="30" height="17" role="img"><g fill="#FFF"><path d="M0 0h513v341.3H0V0z"/><path d="M311.7 230 513 341.3v-31.5L369.3 230h-57.6zM200.3 111.3 0 0v31.5l143.7 79.8h56.6z"/></g><g fill="#0052B4"><path d="M393.8 230 513 295.7V230H393.8zm-82.1 0L513 341.3v-31.5L369.3 230h-57.6zm146.9 111.3-147-81.7v81.7h147zM90.3 230 0 280.2V230h90.3zm110 14.2v97.2H25.5l174.8-97.2zM118.2 111.3 0 45.6v65.7h118.2zm82.1 0L0 0v31.5l143.7 79.8h56.6zM53.4 0l147 81.7V0h-147zM421.7 111.3 513 61.1v50.2h-91.3zm-110-14.2V0h174.9L311.7 97.1z"/></g><g fill="#D80027"><path d="M288 0h-64v138.7H0v64h224v138.7h64V202.7h224v-64H288V0z"/><path d="M311.7 230 513 341.3v-31.5L369.3 230h-57.6zM143.7 230 0 309.9v31.5L200.3 230h-56.6zM200.3 111.3 0 0v31.5l143.7 79.8h56.6zM368.3 111.3 513 31.5V0L311.7 111.3h56.6z"/></g><title>gb</title></svg>', 5543 'de': '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 513 342" width="30" height="17" role="img"><path fill="#D80027" d="M0 0h513v342H0z"/><path d="M0 0h513v114H0z"/><path fill="#FFDA44" d="M0 228h513v114H0z"/><title>de</title></svg>', 5544 'es': '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.5 15" width="30" height="17" role="img"><path fill="#FFF" d="M0 0h22.5v15H0V0z"/><path fill="#D03433" d="M0 0h22.5v4H0V0zm0 11h22.5v4H0v-4z"/><path fill="#FBCA46" d="M0 4h22.5v7H0V4z"/><path fill="#FFF" d="M7.8 7h1v.5h-1V7z"/><path fill="#A41517" d="M7.2 8.5c0 .3.3.5.6.5s.6-.2.6-.5L8.5 7H7.1l.1 1.5zM6.6 7c0-.3.2-.5.4-.5h1.5c.3 0 .5.2.5.4V7l-.1 1.5c-.1.6-.5 1-1.1 1-.6 0-1-.4-1.1-1L6.6 7z"/><path fill="#A41517" d="M6.8 7.5h2V8h-.5l-.5 1-.5-1h-.5v-.5zM5.3 6h1v3.5h-1V6zm4 0h1v3.5h-1V6zm-2.5-.5c0-.3.2-.5.5-.5h1c.3 0 .5.2.5.5v.2c0 .2-.1.3-.3.3H7c-.1 0-.2-.1-.2-.2v-.3z"/><title>es</title></svg>', 5545 'fr': '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 513 342" width="30" height="17" role="img"><path fill="#FFF" d="M0 0h513v342H0z"/><path fill="#0052B4" d="M0 0h171v342H0z"/><path fill="#D80027" d="M342 0h171v342H342z"/><title>fr</title></svg>', 5546 }, 5547 cookieName: 'is-notified-usa', 5548 5549 _isAlreadyNotified: function () { 5550 var isNotifiedCookie = hyva.getCookie(this.cookieName); 5551 return typeof isNotifiedCookie === 'string'; 5552 }, 5553 5554 retrieveCustomerData(data) { 5555 if (data && data['geo-ip-data']) { 5556 var redirectNoticeStoreCodes = this.redirectNoticeStoreCodes.split(','); 5557 var customerCountryData = data['geo-ip-data']; 5558 if (redirectNoticeStoreCodes.includes(customerCountryData.countryCode) && !this._isAlreadyNotified()) { 5559 this.show(); 5560 } 5561 } 5562 }, 5563 5564 getIcon() { 5565 return this.icons[this.selectedStoreCode]; 5566 }, 5567 5568 updateSelectOption: function(storeName, storeLangCode, storeUrl) { 5569 this.selectedStoreName = storeName; 5570 this.selectedStoreCode = storeLangCode; 5571 this.selectedStoreUrl = storeUrl; 5572 }, 5573 5574 selectStore: function() { 5575 this._storeIsNotifiedCookie(); 5576 5577 if (this.selectedStoreCode === this.currentStoreCode) { 5578 this.hide(); 5579 } else { 5580 window.location.replace(this.selectedStoreUrl); 5581 } 5582 }, 5583 5584 _storeIsNotifiedCookie: function () { 5585 hyva.setCookie(this.cookieName, '1', 1); 5586 } 5587 } 5588 } 5589 </script>
5589 5590<div id="customer-login-container" class="login-container"> <div class="block-new-customer w-full md:w-1/2 mb-4 md:my-0 p-2 md:pr-8 md:pt-6 relative"> 5591 <div class="block-title border-b-2"> 5592 <h2 class="text-xl font-medium title-font mb-3 text-primary-darker uppercase" role="heading" 5593 aria-level="2">Request an account</h2> 5594 </div> 5595 <div class="block-content" aria-labelledby="block-new-customer-heading"> 5596 <p class="mt-8 italic text-secondary-lighter"> 5597 Is this your first time here? We will ask you to provide some information in order to make ordering as safe and easy as possible. </p> 5598 <p class="mt-4 italic text-secondary-lighter"> 5599 <strong> 5600 Eichholtz is a business to business wholesale company. Hence we do not sell to private individuals. </strong> 5601 </p> 5602 </div> 5603 <div class="pt-6 w-full lg:w-1/2"> 5604 <a href="https://www.eichholtz.com/en/customer/account/create/" 5605 class="btn-primary block text-center"><span>Become Eichholtz partner</span></a> 5606 </div> 5607 </div> 5608<div class="w-full md:w-1/2 bg-container p-2 md:px-8 pt-6"> 5609 <div aria-labelledby="block-customer-login-heading"> 5610 <form class="form form-login" 5611 action="https://www.eichholtz.com/en/customer/account/loginPost/" 5612 method="post" 5613 x-data="{...initCustomerLoginForm(), ...hyva.formValidation($el)}" 5614 @submit.prevent="submitForm()" 5615 id="customer-login-form"> 5616 <input name="form_key" type="hidden" value="cqxto8ZaiPDyUmPs" /> <fieldset class="fieldset login"> 5617 <legend class="border-b-2 w-full"> 5618 <h2 class="text-xl font-medium title-font mb-3 text-primary-darker uppercase"> 5619 Partner Login </h2> 5620 </legend> 5621 <div class="text-secondary-darker my-8 italic text-secondary-lighter"> 5622 Have you been here before? Please enter your e-mail address and password. Your saved data will then be retrieved. </div> 5623 <div class="field required email"> 5624 <label for="email"> 5625 <span>Email</span> 5626 </label> 5627 <div class="control"> 5628 <input name="login[username]" 5629 class="form-input" 5630 required 5631 value="" 5632 autocomplete="off" 5633 id="email" 5634 type="email" 5635 title="Email"/> 5636 </div> 5637 </div> 5638 <div class="field required password"> 5639 <label for="pass"> 5640 <span>Password</span> 5641 </label> 5642 <div class="control flex items-center relative"> 5643 <div class="w-full"> 5644 <input name="login[password]" 5645 class="form-input" 5646 required 5647 :type="showPassword ? 'text' : 'password'" 5648 autocomplete="off" 5649 id="pass" 5650 title="Password"/> 5651 </div> 5652 <div x-on:click="showPassword = !showPassword" 5653 class="cursor-pointer px-4 absolute right-2" 5654 :aria-label="showPassword ? 'Hide\u0020Password' : 'Show\u0020Password'" 5655 > 5656 <template x-if="!showPassword"> 5657 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" width="24" height="24" role="img"> 5658 <path d="M10 12a2 2 0 100-4 2 2 0 000 4z"/> 5659 <path fill-rule="evenodd" d="M.458 10C1.732 5.943 5.522 3 10 3s8.268 2.943 9.542 7c-1.274 4.057-5.064 7-9.542 7S1.732 14.057.458 10zM14 10a4 4 0 11-8 0 4 4 0 018 0z" clip-rule="evenodd"/> 5660<title>eye</title></svg> 5661 </template> 5662 <template x-if="showPassword"> 5663 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" width="24" height="24" role="img"> 5664 <path fill-rule="evenodd" d="M3.707 2.293a1 1 0 00-1.414 1.414l14 14a1 1 0 001.414-1.414l-1.473-1.473A10.014 10.014 0 0019.542 10C18.268 5.943 14.478 3 10 3a9.958 9.958 0 00-4.512 1.074l-1.78-1.781zm4.261 4.26l1.514 1.515a2.003 2.003 0 012.45 2.45l1.514 1.514a4 4 0 00-5.478-5.478z" clip-rule="evenodd"/> 5665 <path d="M12.454 16.697L9.75 13.992a4 4 0 01-3.742-3.741L2.335 6.578A9.98 9.98 0 00.458 10c1.274 4.057 5.065 7 9.542 7 .847 0 1.669-.105 2.454-.303z"/> 5666<title>
5666eye-off</title></svg> 5667 </template> 5668 </div> 5669 </div> 5670 </div> 5671 5672 <div class="flex justify-between py-2 items-center"> 5673 <a class="underline text-secondary" href="https://www.eichholtz.com/en/customer/account/forgotpassword/"><span>Forgot Your Password?</span> 5674 </a> 5675 <button type="submit" class="btn-primary disabled:opacity-75" name="send" 5676 > 5677 <span>Sign in</span></button> 5678 </div> 5679 <div> 5680 <template x-if="displayErrorMessage"> 5681 <p class="text-red flex items-center"> 5682 <span class="inline-block w-8 h-8 mr-3"> 5683 <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"> 5684 <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/> 5685<title>exclamation-circle</title></svg> 5686 </span> 5687 <template x-for="errorMessage in errorMessages"> 5688 <span x-html="errorMessage"></span> 5689 </template> 5690 </p> 5691 </template> 5692 </div> 5693 </fieldset> 5694 </form> 5695 </div> 5696 <div class="w-full"> 5697 </div> 5698
5698<script> 5699 function initCustomerLoginForm() { 5700 return { 5701 errors: 0, 5702 hasCaptchaToken: 0, 5703 showPassword: false, 5704 displayErrorMessage: false, 5705 errorMessages: [], 5706 setErrorMessages(messages) { 5707 this.errorMessages = [messages] 5708 this.displayErrorMessage = this.errorMessages.length 5709 }, 5710 submitForm() { 5711 this.validate() 5712 .then(() => { 5713 // do not rename $form, the variable is the expected name in the recaptcha output 5714 const $form = document.querySelector('#customer-login-form'); 5715 5716 if (this.errors === 0) { 5717 $form.submit(); 5718 } 5719 }) 5720 .catch((invalid) => { 5721 if (invalid.length > 0) { 5722 invalid[0].focus(); 5723 } 5724 }); 5725 } 5726 } 5727 } 5728 </script>
5728 5729</div> 5730</div>
5730<script defer> 5731 async function setDynamicBlocks() { 5732 try { 5733 const url = new URL('https\u003A\u002F\u002Fwww.eichholtz.com\u002Fen\u002Fbanner\u002Fajax\u002Fload\u002F'); 5734 const sections = []; 5735 5736 document 5737 .querySelectorAll('[data-banner-id]') 5738 .forEach(el => sections.push(el.getAttribute('data-banner-id'))); 5739 5740 url.searchParams.append('requesting_page_url', url.origin); 5741 url.searchParams.append('sections', sections.toString()); 5742 5743 const response = await fetch(url.href, { 5744 headers: { 5745 'Content-Type': 'application/json', 5746 'X-Requested-With': 'XMLHttpRequest' 5747 } 5748 }); 5749 const data = await response.json(); 5750 const items = data.data.items.fixed; 5751 const elements = document.querySelectorAll('[data-ids]'); 5752 5753 for (const element of elements) { 5754 const ids = element.getAttribute('data-ids').split(','); 5755 const config = { 5756 type: element.getAttribute('data-rotate'), 5757 bannerId: element.getAttribute('data-banner-id'), 5758 }; 5759 5760 getByType(config, element, items, ids); 5761 } 5762 } catch (err) { 5763 console.warn(err); 5764 } 5765 } 5766 5767 /** 5768 * Get banner items by type 5769 */ 5770 function getByType(config = null, container, items, ids) { 5771 if (!config) return; 5772 5773 if (config.type === 'random') { 5774 const randomId = ids[Math.floor(Math.random() * ids.length)]; 5775 5776 container.insertAdjacentHTML('beforeend', items[randomId].content); 5777 5778 return; 5779 } 5780 5781 if (config.type === 'series') { 5782 showInOrder(config, items, ids); 5783 5784 return; 5785 } 5786 5787 if (config.type === 'shuffle') { 5788 showInOrder(config, items, ids); 5789 5790 return; 5791 } 5792 5793 for (const id of ids) { 5794 const block = items[id]; 5795 5796 if (block) { 5797 container.insertAdjacentHTML('beforeend', block.content); 5798 } 5799 } 5800 } 5801 5802 /** 5803 * Show blocks in order 5804 */ 5805 function showInOrder(config, items, ids) { 5806 const bannerId = config.bannerId; 5807 const type = config.type; 5808 let localSeries = JSON.parse(localStorage.getItem('data-dynamic-series')); 5809 5810 if (!localSeries) { 5811 localStorage.setItem( 5812 'data-dynamic-series', 5813 JSON.stringify({ 5814 [bannerId]: ids 5815 }) 5816 ); 5817 5818 localSeries = { 5819 [bannerId]: ids 5820 }; 5821 } 5822 5823 if (!localSeries[bannerId]?.length) { 5824 delete localSeries[bannerId]; 5825 5826 if (Object.keys(localSeries).length === 0) 5827 localStorage.removeItem('data-dynamic-series'); 5828 5829 showInOrder(config, items, ids); 5830 5831 return; 5832 } 5833 5834 let id = localSeries[bannerId][0]; 5835 5836 if (type === 'series') { 5837 id = localSeries[bannerId].shift(); 5838 } 5839 5840 if (type === 'shuffle') { 5841 const bannerOption = localSeries[bannerId]; 5842 5843 if (bannerOption.length === 1) { 5844 id = localSeries[bannerId].shift(); 5845 } else { 5846 id = bannerOption[Math.floor(Math.random() * bannerOption.length)]; 5847 localSeries[bannerId].filter(item => item !== id); 5848 } 5849 } 5850 5851 if (id) { 5852 const block = document.querySelector(`[data-banner-id="${bannerId}"]`); 5853 5854 if (!items[id]) { 5855 localStorage.removeItem('data-dynamic-series'); 5856 5857 showInOrder(config, items, ids); 5858 5859 return; 5860 } 5861 5862 block?.insertAdjacentHTML('beforeend', items[id].content); 5863 } 5864 5865 localStorage.setItem( 5866 'data-dynamic-series', 5867 JSON.stringify(localSeries = { 5868 [bannerId]: localSeries[bannerId] 5869 }) 5870 ); 5871 } 5872 5873 /** Set blocks */ 5874 setDynamicBlocks(); 5875</script>
5875 5876
5876<script nonce="eGFtYno5eG9uMGRhNG9taXYzamE1N2xvZHM0bjVkbnY="> 5877 function hasWebP() { 5878 var elem = document.createElement('canvas'); 5879 5880 if (!!(elem.getContext && elem.getContext('2d'))) { 5881 return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0; 5882 } 5883 return false; 5884 } 5885 5886 if (hasWebP()) { 5887 document.body.classList.add("webp"); 5888 } else { 5889 document.body.classList.add("no-webp"); 5890 }</script>
5890</div></div></main><footer class="page-footer"><div class="footer content"><div class="text-white body-font bg-container"> 5891 <div class="bg-black"> 5892 <div class="container p-0 md:pt-6 mx-auto"> 5893 <div class="md:flex md:flex-row md:justify-between divide-y divide-primary-darker md:divide-none"><div class="footer-item flex-column md:flex-row py-1"><div x-data="{ show: false }" class="mx-4 my-3 md:mt-0"> 5894 <h3 class="text-lg" @click="show = ! show"> 5895 <div class="inline-block">General</div> 5896 <div class="inline-block float-right pt-2"> 5897 <p x-show.transition.in="show" class="md:hidden"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 5898 <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> 5899<title>chevron-up</title></svg> 5900</p> 5901 <p x-show.transition.in="!show" class="md:hidden"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 5902 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 5903<title>chevron-down</title></svg> 5904</p> 5905 </div> 5906 </h3> 5907 <ul class="text-sm mt-2"> 5908 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5909 <a href="https://www.eichholtz.com/en/general-conditions" class="hover:underline" 5910 >General Terms and Conditions of Sale</a> 5911 </li> 5912 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5913 <a href="https://www.eichholtz.com/en/privacy" class="hover:underline" 5914 >Privacy statement</a> 5915 </li> 5916 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5917 <a href="https://www.eichholtz.com/en/cookie-policy" class="hover:underline" 5918 >Cookie policy</a> 5919 </li> 5920 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5921 <a href="https://www.eichholtz.com/en/digital-policy" class="hover:underline" 5922 >Digital policy</a> 5923 </li> 5924 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5925 <a href="https://www.eichholtz.com/en/disclaimer" class="hover:underline" 5926 >Disclaimer</a> 5927 </li> 5928 </ul> 5929</div> 5930</div><div class="footer-item flex-column md:flex-row py-1"><div x-data="{ show: false }" class="mx-4 my-3 md:mt-0"> 5931 <h3 class="text-lg" @click="show = ! show"> 5932 <div class="inline-block">Customer service</div> 5933 <div class="inline-block float-right pt-2"> 5934 <p x-show.transition.in="show" class="md:hidden"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 5935 <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> 5936<title>chevron-up</title></svg> 5937</p> 5938 <p x-show.transition.in="!show" class="md:hidden"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 5939 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 5940<title>chevron-down</title></svg> 5941</p> 5942 </div> 5943 </h3> 5944 <ul class="text-sm mt-2"> 5945 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5946 <a href="https://www.eichholtz.com/en/contact-page" class="hover:underline" 5947 >Contact us</a> 5948 </li> 5949 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5950 <a href="https://www.eichholtz.com/en/us-sales-representatives" class="hover:underline" 5951 >US sales representatives</a> 5952 </li> 5953 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5954 <a href="https://www.eichholtz.com/en/inspirations/fairs-and-events.html" class="hover:underline" 5955 >Fairs and events</a> 5956 </li> 5957 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5958 <a href="https://www.eichholtz.com/en/online-payment" class="hover:underline" 5959 >Online payment</a> 5960 </li> 5961 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5962 <a href="https://www.eichholtz.com/en/knowledge-base" class="hover:underline" 5963 >FAQ</a> 5964 </li> 5965 </ul> 5966</div> 5967</div><div class="footer-item flex-column md:flex-row py-1"><div x-data="{ show: false }" class="mx-4 my-3 md:mt-0"> 5968 <h3 class="text-lg" @click="show = ! show"> 5969 <div class="inline-block">Collection</div> 5970 <div class="inline-block float-right pt-2"> 5971 <p x-show.transition.in="show" class="md:hidden"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 5972 <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> 5973<title>chevron-up</title></svg> 5974</p> 5975 <p x-show.transition.in="!show" class="md:hidden"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 5976 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 5977<title>chevron-down</title></svg> 5978</p> 5979 </div> 5980 </h3> 5981 <ul class="text-sm mt-2"> 5982 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5983 <a href="https://www.eichholtz.com/en/collection/ne
5983w/new-arrivals.html" class="hover:underline" 5984 >New arrivals</a> 5985 </li> 5986 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5987 <a href="https://www.eichholtz.com/en/collection/furniture.html" class="hover:underline" 5988 >Furniture</a> 5989 </li> 5990 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5991 <a href="https://www.eichholtz.com/en/collection/lighting.html" class="hover:underline" 5992 target="_blank" >Lighting</a> 5993 </li> 5994 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5995 <a href="https://www.eichholtz.com/en/collection/accessories.html" class="hover:underline" 5996 >Home accessories</a> 5997 </li> 5998 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 5999 <a href="https://www.eichholtz.com/en/collection/outdoor.html" class="hover:underline" 6000 >Outdoor</a> 6001 </li> 6002 </ul> 6003</div> 6004</div><div class="footer-item flex-column md:flex-row py-1"><div x-data="{ show: false }" class="mx-4 my-3 md:mt-0"> 6005 <h3 class="text-lg" @click="show = ! show"> 6006 <div class="inline-block">Our company</div> 6007 <div class="inline-block float-right pt-2"> 6008 <p x-show.transition.in="show" class="md:hidden"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 6009 <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> 6010<title>chevron-up</title></svg> 6011</p> 6012 <p x-show.transition.in="!show" class="md:hidden"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 6013 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 6014<title>chevron-down</title></svg> 6015</p> 6016 </div> 6017 </h3> 6018 <ul class="text-sm mt-2"> 6019 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 6020 <a href="https://www.eichholtz.com/en/about-us" class="hover:underline" 6021 >About us</a> 6022 </li> 6023 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 6024 <a href="https://www.eichholtz.com/en/code-of-conduct" class="hover:underline" 6025 >Code of conduct</a> 6026 </li> 6027 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 6028 <a href="https://www.eichholtz.com/en/our-usps" class="hover:underline" 6029 >Our USP's</a> 6030 </li> 6031 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 6032 <a href="https://www.eichholtz.com/en/esg-at-eichholtz" class="hover:underline" 6033 target="_blank" >ESG</a> 6034 </li> 6035 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 6036 <a href="http://werkenbij.eichholtz.com/" class="hover:underline" 6037 >Careers</a> 6038 </li> 6039 <li :class="show ? 'block md:block' : 'md:block hidden'" class="footer-link last:pb-4 py-1"> 6040 <a href="https://www.eichholtz.com/en/modern-slavery-statement" class="hover:underline" 6041 >Modern Slavery Statement</a> 6042 </li> 6043 </ul> 6044</div> 6045</div></div> </div> 6046 </div> 6047 <div class="border-t border-primary-darker border-container bg-black"> 6048 <div class="container py-6 mx-auto flex items-center sm:flex-row flex-col"> 6049 <div class="footer-container-wrapper footer-copyright text-sm w-full"><small class="copyright"> 6050 <span></span> 6051</small> 6052<div class="footer-container w-full flex flex-col gap-4 md:flex-row"><div class="footer-policy-links-container block md:hidden list-none"> 6053 <li> 6054 <a class="" 6055 title="VAT NL8070.53.600.B01<br>" 6056 href=""> 6057 VAT NL8070.53.600.B01<br> </a> 6058 </li> 6059 <li> 6060 <a class="" 6061 title="KVK 28060994<br>" 6062 href=""> 6063 KVK 28060994<br> </a> 6064 </li> 6065 <li> 6066 <a class="" 6067 title="© Copyright 2026 Eichholtz B.V.   |   All rights reserved." 6068 href=""> 6069 © Copyright 2026 Eichholtz B.V.  |  All rights reserved. </a> 6070 </li> 6071 </div><div class="footer-item footer-item-payment-icons float-left hidden md:block"><ul class="">
6072 <li class="flex leading-6 mb-3"> 6073 <span class="ml-2"> 6074 VAT NL8070.53.600.B01  |  KVK 28060994  |  © Copyright 2026 Eichholtz B.V.  |  All rights reserved. </span> 6075 </li> 6076 </ul> 6077</div><div class="footer-item footer-item-social-icons md:ml-auto"><div class="footer-item"> 6078 <ul class="footer-contact-social social-icons flex"> 6079 <li class="facebook mr-2"> 6080 <a href="https://www.facebook.com/eichholtzBV/" target="_blank"> 6081 <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 448 512" width="24" height="24" role="img"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z"/><title>square-facebook</title></svg> 6082 </a> 6083 </li> 6084 <li class="xtwitter mr-2"> 6085 <a href="https://twitter.com/Eichholtz_bv" target="_blank"> 6086 <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 448 512" width="24" height="24" role="img"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm297.1 84L257.3 234.6 379.4 396H283.8L209 298.1 123.3 396H75.8l111-126.9L69.7 116h98l67.7 89.5L313.6 116h47.5zM323.3 367.6L153.4 142.9H125.1L296.9 367.6h26.3z"/><title>square-xtwitter</title></svg> 6087 </a> 6088 </li> 6089 <li class="instagram mr-2"> 6090 <a href="https://www.instagram.com/worldofeichholtz/" target="_blank"> 6091 <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 448 512" width="24" height="24" role="img"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M224,202.66A53.34,53.34,0,1,0,277.36,256,53.38,53.38,0,0,0,224,202.66Zm124.71-41a54,54,0,0,0-30.41-30.41c-21-8.29-71-6.43-94.3-6.43s-73.25-1.93-94.31,6.43a54,54,0,0,0-30.41,30.41c-8.28,21-6.43,71.05-6.43,94.33S91,329.26,99.32,350.33a54,54,0,0,0,30.41,30.41c21,8.29,71,6.43,94.31,6.43s73.24,1.93,94.3-6.43a54,54,0,0,0,30.41-30.41c8.35-21,6.43-71.05,6.43-94.33S357.1,182.74,348.75,161.67ZM224,338a82,82,0,1,1,82-82A81.9,81.9,0,0,1,224,338Zm85.38-148.3a19.14,19.14,0,1,1,19.13-19.14A19.1,19.1,0,0,1,309.42,189.74ZM400,32H48A48,48,0,0,0,0,80V432a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V80A48,48,0,0,0,400,32ZM382.88,322c-1.29,25.63-7.14,48.34-25.85,67s-41.4,24.63-67,25.85c-26.41,1.49-105.59,1.49-132,0-25.63-1.29-48.26-7.15-67-25.85s-24.63-41.42-25.85-67c-1.49-26.42-1.49-105.61,0-132,1.29-25.63,7.07-48.34,25.85-67s41.47-24.56,67-25.78c26.41-1.49,105.59-1.49,132,0,25.63,1.29,48.33,7.15,67,25.85s24.63,41.42,25.85,67.05C384.37,216.44,384.37,295.56,382.88,322Z"/><title>square-instagram</title></svg> 6092 </a> 6093 </li> 6094 <li class="pinterest mr-2"> 6095 <a href="https://nl.pinterest.com/eichholtzinteriors/" target="_blank"> 6096 <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 448 512" width="24" height="24" role="img"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4
609615.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z"/><title>square-pinterest</title></svg> 6097 </a> 6098 </li> 6099 <li class="vimeo mr-2"> 6100 <a href="https://vimeo.com/eichholtz" target="_blank"> 6101 <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 448 512" width="24" height="24" role="img"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z"/><title>square-vimeo</title></svg> 6102 </a> 6103 </li> 6104 <li class="youtube mr-2"> 6105 <a href="https://www.youtube.com/user/EichholtzInteriors/" target="_blank"> 6106 <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 448 512" width="24" height="24" role="img"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z"/><title>square-youtube</title></svg> 6107 </a> 6108 </li> 6109 </ul> 6110</div> 6111</div></div></div> </div> 6112 </div> 6113</div> 6114<span x-data="initRetailCheck()" 6115 @private-content-loaded.window="receiveCustomerData($event.detail.data)"> 6116 6117</span>
6118<script> 6119 function initRetailCheck() { 6120 6121 return { 6122 retailIsEnabled: true, 6123 isLoggedIn: false, 6124 6125 6126 async init() { 6127 var self = this; 6128 6129 self.pricesObserver('body', '.amasty-shopby-product-list', function () { 6130 self.loadLabels(); 6131 }); 6132 self.pricesObserver('amasty-shopby-product-list', function () { 6133 self.loadLabels(); 6134 }); 6135 self.pricesObserver('product-labels', function () { 6136 self.loadLabels(); 6137 }); 6138 self.pricesObserver('ais-Hits-item', function () { 6139 self.loadLabels(); 6140 }); 6141 self.pricesObserver('', function () { 6142 self.loadLabels(); 6143 }); 6144 }, 6145 6146 pricesObserver: function(elementSelector, callback) { 6147 var onMutationsObserved = function(mutations) { 6148 mutations.forEach(function(mutation) { 6149 if (mutation.addedNodes.length) { 6150 var isElementFound = false; 6151 Array.from(mutation.addedNodes).forEach(function(addedNode) { 6152 isElementFound = (addedNode.id === elementSelector) 6153 || (addedNode.firstChild?.id === elementSelector) 6154 || (addedNode.className === elementSelector); 6155 if (isElementFound) { 6156 callback(); 6157 } 6158 }); 6159 } 6160 }) 6161 } 6162 6163 var config = { childList: true, subtree: true }; 6164 var MutationObserver = window.MutationObserver || window.WebKitMutationObserver; 6165 var observer = new MutationObserver(onMutationsObserved); 6166 observer.observe(document.getElementsByTagName('body')[0], config); 6167 }, 6168 6169 receiveCustomerData(data) { 6170 this.retailIsEnabled = !!(data['show-retail-prices'] && data['show-retail-prices'].showRetailPrices); 6171 this.isLoggedIn = !!(data.customer && data.customer.firstname); 6172 this.loadLabels(); 6173 }, 6174 6175 loadLabels: function () { 6176 if (typeof window.setAjaxCart === 'function') { 6177 window.setAjaxCart(); 6178 } 6179 if (this.isLoggedIn && !this.retailIsEnabled) { 6180 this.changeVisibility('block'); 6181 } else { 6182 this.changeVisibility('none'); 6183 } 6184 }, 6185 6186 changeVisibility: function (displayValue) { 6187 var productLabels = document.getElementsByClassName('product-labels'); 6188 if (productLabels.length > 0) { 6189 Array.from(productLabels).forEach(function(element) { 6190 var images = element.getElementsByClassName('label-image'); 6191 Array.from(images).forEach(function(image) { 6192 if (image.className.indexOf('label-image-label') > -1) { 6193 image.style.display = displayValue; 6194 } else { 6195 image.style.display = 'block'; 6196 } 6197 }) 6198 }); 6199 } 6200 } 6201 } 6202 } 6203</script>
6203 6204 6205</div></footer>
6205<script> 6206 function initAlgoliaInsights(partial) { 6207 window.algoliaAnalytics = AlgoliaAnalytics.default; 6208 window.hasAddedParameters = false; 6209 window.useCookie = algoliaConfig.cookieConfiguration.cookieRestrictionModeEnabled ? !!hyva.getCookie(algoliaConfig.cookieConfiguration.consentCookieName) : true; 6210 6211 if (!canTrack()) { 6212 return; 6213 } 6214 6215 initializeAnalytics(partial); 6216 addSearchParameters(); 6217 bindEvents(); 6218 6219 // Although events can accept both auth and anon tokens, queries can only accept a single token 6220 function determineUserToken() { 6221 return window.algoliaAnalytics.getAuthenticatedUserToken() ?? algoliaAnalytics.getUserToken(); 6222 } 6223 6224 function initializeAnalytics(partial = false) { 6225 if (partial) { 6226 algoliaAnalytics.init({ 6227 appId: algoliaConfig.applicationId, 6228 apiKey: algoliaConfig.apiKey, 6229 partial: true, 6230 useCookie: true, 6231 cookieDuration: Number(algoliaConfig.cookieConfiguration.cookieDuration) 6232 }); 6233 } else { 6234 algoliaAnalytics.init({ 6235 appId: algoliaConfig.applicationId, 6236 apiKey: algoliaConfig.apiKey, 6237 useCookie: true, 6238 cookieDuration: Number(algoliaConfig.cookieConfiguration.cookieDuration) 6239 }); 6240 } 6241 let userAgent = 'insights-js-in-magento (' + algoliaConfig.extensionVersion + ')'; 6242 window.algoliaAnalytics.addAlgoliaAgent(userAgent); 6243 6244 let unsetAuthenticationToken = hyva.getCookie('unset_authentication_token'); 6245 if (hyva.getCookie('aa-search') && hyva.getCookie('aa-search') !== '') { 6246 window.algoliaAnalytics.setUserToken(hyva.getCookie('aa-search')); 6247 } else if (hyva.getCookie('_ALGOLIA') && hyva.getCookie('_ALGOLIA') !== '') { 6248 window.algoliaAnalytics.setUserToken(hyva.getCookie('_ALGOLIA')); 6249 } else if (unsetAuthenticationToken && unsetAuthenticationToken !== '') { 6250 window.algoliaAnalytics.setUserToken('undefined'); 6251 hyva.setCookie('unset_authentication_token', '', -1); 6252 } 6253 } 6254 6255 function applyInsightsToSearchParams(params = {}) { 6256 if (algoliaConfig.ccAnalytics.enabled) { 6257 params.clickAnalytics = true; 6258 } 6259 6260 const urlParams = new URLSearchParams(window.location.search); 6261 const q = urlParams.get('q'); 6262 if ((!document.getElementById('autocomplete-0-input') || document.getElementById('autocomplete-0-input').value.length < 0) && (!q || q && q.trim() == '')) { 6263 params.analytics = false; 6264 } 6265 6266 if (algoliaConfig.personalization.enabled) { 6267 params.enablePersonalization = true; 6268 params.userToken = determineUserToken(); 6269 } 6270 6271 return params; 6272 } 6273 6274 function addSearchParameters() { 6275 if (window.hasAddedParameters) { 6276 return; 6277 } 6278 algolia.registerHook('beforeWidgetInitialization', function (allWidgetConfiguration) { 6279 allWidgetConfiguration.configure = applyInsightsToSearchParams( 6280 allWidgetConfiguration.configure 6281 ); 6282 return allWidgetConfiguration; 6283 }); 6284 6285 algolia.registerHook('afterAutocompleteProductSourceOptions', (options) => { 6286 return applyInsightsToSearchParams(options); 6287 }); 6288 6289 window.hasAddedParameters = true; 6290 } 6291 6292 6293 function bindEvents() { 6294 bindClickedEvents(); 6295 bindViewedEvents(); 6296 6297 algolia.triggerHooks('afterInsightsBindEvents', this); 6298 } 6299 6300 function bindClickedEvents() { 6301 // Filter Clicked 6302 if (algoliaConfig.personalization.filterClicked.enabled) { 6303 const facets = algoliaConfig.facets; 6304 let containers = []; 6305 for (let i = 0; i < facets.length; i++) { 6306 let elem = createISWidgetContainer(facets[i].attribute); 6307 containers.push('.' + elem.className); 6308 } 6309 6310 algolia.registerHook('afterInstantsearchStart', function (search) { 6311 const selectors = document.querySelectorAll(containers.join(', '));
6312 selectors.forEach(function (e) { 6313 e.addEventListener('click', function (event) { 6314 const attribute = this.dataset.attr; 6315 const elem = event.target; 6316 if (elem.type === "checkbox" && elem.checked) { 6317 var filter = attribute + ':' + elem.value; 6318 trackFilterClick([filter]); 6319 } 6320 }); 6321 }); 6322 6323 return search; 6324 }); 6325 } 6326 } 6327 6328 function bindViewedEvents() { 6329 // viewed event is exclusive to personalization 6330 if (!algoliaConfig.personalization.enabled) { 6331 return; 6332 } 6333 6334 const viewConfig = algoliaConfig.personalization.viewedEvents.viewProduct; 6335 if (viewConfig.enabled) { 6336 if (document.body.classList.contains('catalog-product-view')) { 6337 const objectId = document.querySelector('#product_addtocart_form')?.querySelector('input[name="product"]').value; 6338 if (objectId) { 6339 const viewData = buildEventData(viewConfig.eventName, objectId, algoliaConfig.indexName + '_products'); 6340 trackView(viewData); 6341 } 6342 } 6343 6344 } 6345 } 6346 6347 function buildEventData(eventName, objectId, indexName, position = null, queryId = null) { 6348 const eventData = { 6349 eventName: eventName, 6350 objectIDs: [objectId + ''], 6351 index: indexName 6352 }; 6353 6354 if (position) { 6355 eventData.positions = [parseInt(position)]; 6356 } 6357 6358 if (queryId) { 6359 eventData.queryID = queryId; 6360 } 6361 6362 return eventData; 6363 } 6364 6365 function trackClick(eventData) { 6366 if (eventData.queryID) { 6367 window.algoliaAnalytics.clickedObjectIDsAfterSearch(eventData); 6368 } else { 6369 window.algoliaAnalytics.clickedObjectIDs(eventData); 6370 } 6371 } 6372 6373 function trackFilterClick(filters) { 6374 const eventData = { 6375 index: algoliaConfig.indexName + '_products', 6376 eventName: algoliaConfig.personalization.filterClicked.eventName, 6377 filters: filters 6378 }; 6379 6380 window.algoliaAnalytics.clickedFilters(eventData); 6381 } 6382 6383 function trackView(eventData) { 6384 window.algoliaAnalytics.viewedObjectIDs(eventData); 6385 } 6386 } 6387 6388 function canTrack() { 6389 return ((algoliaConfig.ccAnalytics.enabled 6390 || algoliaConfig.personalization.enabled) && window.useCookie); 6391 } 6392 6393 function buildInsightsEventData(eventName, objectId, indexName, position = null, queryId = null) { 6394 if (!canTrack()) { 6395 return; 6396 } 6397 6398 const eventData = { 6399 eventName: eventName, 6400 objectIDs: [objectId + ''], 6401 index: indexName 6402 }; 6403 if (position) { 6404 eventData.positions = [parseInt(position)]; 6405 } 6406 if (queryId) { 6407 eventData.queryID = queryId; 6408 } 6409 trackClick(eventData); 6410 } 6411 6412 function trackClick(eventData) { 6413 if (eventData.queryID) { 6414 window.algoliaAnalytics.clickedObjectIDsAfterSearch(eventData); 6415 } else { 6416 window.algoliaAnalytics.clickedObjectIDs(eventData); 6417 } 6418 } 6419</script>
vendor: 1 bytes, line 6419
6419
6420<script type="text/x-magento-init"> 6421 { 6422 "*": { 6423 "Magento_Ui/js/core/app": { 6424 "components": { 6425 "eichholtz-facebook": { 6426 "component": "Eichholtz_Facebook/js/event", 6427 "eventName": "registration" 6428 } 6429 } 6430 } 6431 } 6432 } 6433</script>
6433 6434 6435
6436<script> 6437 (function () { 6438 'use strict'; 6439 6440 /** 6441 * Config to determine which element is responsible for the form submission 6442 * 6443 * @type {[{elementSelector: undefined|string, submitAttribute: string}]} 6444 */ 6445 const formWrapperConfig = [{"elementSelector":null,"submitAttribute":"submit"},{"elementSelector":"[type=\"submit\"]","submitAttribute":"click"}]; 6446 6447 /** 6448 * Replace protected forms submit with amRecaptchaModel.execute($event) method. 6449 * Call original submit on amrecaptcha-callback event after successful captcha validation. 6450 * 6451 * @return {void} 6452 */ 6453 const wrapFormSubmit = function () { 6454 document.addEventListener("DOMContentLoaded", function () { 6455 const formsSelector = window.amRecaptchaModel?.formsToProtect || ''; 6456 if (formsSelector.length === 0) { 6457 return; 6458 } 6459 6460 document.querySelectorAll(formsSelector)?.forEach(formElement => { 6461 if (!formElement) { 6462 return; 6463 } 6464 6465 const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); 6466 if (!elementToWrap || !attributeNameToWrap) { 6467 return; 6468 } 6469 6470 setElementAttributes(formElement, elementToWrap, attributeNameToWrap); 6471 }); 6472 }); 6473 }; 6474 6475 /** 6476 * Find submit event and DOM element that has this event using formWrapperConfig. 6477 * 6478 * @param {HTMLElement} formElement 6479 * @return {{elementToWrap: undefined|string, attributeNameToWrap: undefined|string}} 6480 */ 6481 const resolveElementWrapping = function (formElement) { 6482 let result = { 6483 elementToWrap: undefined, 6484 attributeNameToWrap: undefined 6485 }; 6486 6487 formWrapperConfig.forEach(({ elementSelector, submitAttribute }) => { 6488 const elementToWrap = !!elementSelector ? formElement.querySelector(elementSelector) : formElement; 6489 if (!elementToWrap) { 6490 return; 6491 } 6492 6493 const attributeNameToWrap = elementToWrap.getAttributeNames().find( 6494 (elementAttribute) => { 6495 /** @type {string[]} */ 6496 const submitAttributeVariations = ['@', 'x-on:'].map(variation => variation + submitAttribute); 6497 6498 return submitAttributeVariations.some( 6499 (submitAttributeVariation) => elementAttribute.startsWith(submitAttributeVariation) 6500 ) 6501 } 6502 ); 6503 if (!attributeNameToWrap) { 6504 return; 6505 } 6506 6507 result.elementToWrap = elementToWrap; 6508 result.attributeNameToWrap = attributeNameToWrap; 6509 }); 6510 6511 return result; 6512 } 6513 6514 /** 6515 * Set attribute to wrap original submit, add eventListeners for captcha callbacks 6516 * 6517 * @param {HTMLElement} formElement 6518 * @param {HTMLElement} elementToWrap 6519 * @param {string} attributeNameToWrap 6520 */ 6521 const setElementAttributes = function (formElement, elementToWrap, attributeNameToWrap) { 6522 const originalSubmit = elementToWrap.getAttribute(attributeNameToWrap); 6523 elementToWrap.removeAttribute(attributeNameToWrap); 6524 6525 /** 6526 * To properly set submit attribute - we need to replace '@' with 'x-on:' 6527 * and add preventDefault behaviour 6528 */ 6529 elementToWrap.setAttribute( 6530 attributeNameToWrap.replace(/^@/, 'x-on:').replace(/.prevent$/, '') + '.prevent', 6531 'amRecaptchaModelExecute' 6532 ); 6533 elementToWrap.setAttribute( 6534 'x-on:amrecaptcha-executable-callback', 6535 originalSubmit 6536 ); 6537 } 6538 6539 /** 6540 * Add recaptcha methods to Alpine component with proper error handling and timing 6541 * @param {HTMLElement} elementToWrap - Element with Alpine component 6542 * @returns {void} 6543 */ 6544 const addRecaptchaMethodsToComponent = function (elementToWrap) { 6545 const alpineComponent = Alpine.$data(elementToWrap); 6546 6547 if (!alpineComponent || typeof alpineComponent !== 'object') { 6548 return; 6549 } 6550 6551 alpineComponent.amRecaptchaModelExecute = function ($event) { 6552 window.amRecaptchaModel.execute($event); 6553 }; 6554 6555 alpineComponent.amRecaptchaModelRecaptchaCallback = function ($event, $el) { 6556 $el ??= $event.detail.form; 6557 window.amRecaptchaModel.recaptchaCallback($event, $el); 6558 }; 6559 6560 alpineComponent.amRecaptchaModelExpiredCallback = function ($event, $el) { 6561 $el ??= $event.detail.form; 6562 window.amRecaptchaModel.expiredCallback($event, $el); 6563 }; 6564 6565 elementToWrap.setAttribute('am-captcha-inintialized', 'true'); 6566 }; 6567 6568 const setAmRecaptchaModelExecute = function () { 6569 const formsSelector = window.amRecaptchaModel?.formsToProtect || ''; 6570 6571 if (formsSelector.length === 0) { 6572 return; 6573 } 6574 6575 document.querySelectorAll(formsSelector).forEach(formElement => { 6576 const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); 6577 if (!elementToWrap || !attributeNameToWrap || elementToWrap.getAttribute('am-captcha-inintialized')) { 6578 return; 6579 } 6580 6581 let formComponent = getFormComponent(elementToWrap), 6582 origFormComponent = window[formComponent]; 6583 6584 if (!formComponent) { 6585 [formComponent, origFormComponent] = setNewFormComponent(elementToWrap); 6586 } 6587 6588 if (window.Alpine) { 6589 if (elementToWrap?._x_dataStack) { 6590 addRecaptchaMethodsToComponent(elementToWrap); 6591 } 6592 6593 return; 6594 } 6595 6596 window[formComponent] = function () { 6597 const instance = origFormComponent.apply(this, arguments) || {}; 6598 6599 const reviewComponent = document.querySelector( 6600 '[x-data="initReviewForm()"], [x-data="initReviewForm"]' 6601 ); 6602 6603 if (reviewComponent?.getAttribute('x-data') === formComponent) { 6604 const originalInit = instance.init; 6605 instance.init = function () { 6606 if (typeof originalInit === 'function') { 6607 originalInit.apply(this, arguments); 6608 } 6609 this.$watch( 6610 'errorMessages', 6611 errorMessages => { 6612 errorMessages?.length > 0 6613 && window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 6614 } 6615 ) 6616 } 6617 } 6618 6619 instance.amRecaptchaModelExecute = function ($event) { 6620 window.amRecaptchaModel.execute($event); 6621 } 6622 6623 instance.amRecaptchaModelRecaptchaCallback = function ($event, $el) { 6624 $el ??= $event.detail.form; 6625 window.amRecaptchaModel.recaptchaCallback($event, $el); 6626 } 6627 6628 instance.amRecaptchaModelExpiredCallback = function ($event, $el) { 6629 $el ??= $event.detail.form; 6630 window.amRecaptchaModel.expiredCallback($event, $el); 6631 } 6632 6633 elementToWrap.setAttribute('am-captcha-inintialized', 'true'); 6634 6635 return instance; 6636 }; 6637 }); 6638 } 6639 6640 /** 6641 * Generate a random string for component names 6642 * @param {number} length - Length of the string to generate 6643 * @returns {string} Generated random string 6644 */ 6645 const generateRandomString = function (length) {
6646 const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 6647 const alphabetLength = alphabet.length; 6648 6649 return Array.from( 6650 { length }, 6651 () => alphabet[Math.floor(Math.random() * alphabetLength)] 6652 ).join(''); 6653 } 6654 6655 /** 6656 * @param {HTMLElement} elementToWrap 6657 * @return {string} 6658 */ 6659 const getFormComponent = function (elementToWrap) { 6660 let formComponent = elementToWrap.hasAttribute('x-data') 6661 ? elementToWrap.getAttribute('x-data') 6662 : elementToWrap.closest('[x-data]').getAttribute('x-data'); 6663 const match = formComponent.match(/\b([a-zA-Z0-9_$]+)\s*\(\s*\)/); 6664 6665 if (match && match[1]) { 6666 return match[1]; 6667 } 6668 6669 return formComponent.replace(/\(\)$/g, ''); 6670 } 6671 6672 /** 6673 * Creates a new Alpine form component and assigns it to the element 6674 * @param {HTMLElement} elementToWrap 6675 * @returns {array} 6676 */ 6677 const setNewFormComponent = function (elementToWrap) { 6678 const newFormComponent = function () { 6679 return {}; 6680 }; 6681 6682 const newFormComponentName = generateRandomString(10); 6683 window[newFormComponentName] = newFormComponent; 6684 6685 elementToWrap?.setAttribute('x-data', newFormComponentName); 6686 6687 return [newFormComponentName, newFormComponent]; 6688 }; 6689 6690 wrapFormSubmit(); 6691 6692 // Initialize amRecaptchaModelExecute to wrap form submits before Alpine is fully loaded 6693 !window.Alpine && setAmRecaptchaModelExecute(); 6694 6695 // Initialize amRecaptchaModelExecute after Alpine is fully loaded 6696 document.addEventListener('alpine:initialized', () => { 6697 setAmRecaptchaModelExecute(); 6698 }); 6699 6700 window.addEventListener('am-reinit-captcha', () => { 6701 setAmRecaptchaModelExecute(); 6702 }); 6703 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 6704</script>
6704 6705<div x-data="{ track_disable: false }" x-init="fetch(window.BASE_URL + 'eichholtz_algolia/algolia/isTrackingEnabled') 6706 .then(response => response.json()) 6707 .then(data => { 6708 if (window.algoliaConfig && window.algoliaConfig.ccAnalytics) { 6709 track_disable = data.track_disable; 6710 window.algoliaConfig.ccAnalytics.enabled = !data.track_disable; 6711 } 6712 })"> 6713</div> 6714
6715<script> 6716 (() => { 6717 function src_default(Alpine) { 6718 Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 6719 let evaluate = evaluateLater(expression); 6720 let options = { 6721 rootMargin: getRootMargin(modifiers), 6722 threshold: getThreshold(modifiers) 6723 }; 6724 let observer = new IntersectionObserver((entries) => { 6725 entries.forEach((entry) => { 6726 if (entry.isIntersecting === (value === "leave")) 6727 return; 6728 evaluate(); 6729 modifiers.includes("once") && observer.disconnect(); 6730 }); 6731 }, options); 6732 observer.observe(el); 6733 cleanup(() => { 6734 observer.disconnect(); 6735 }); 6736 })); 6737 } 6738 function getThreshold(modifiers) { 6739 if (modifiers.includes("full")) 6740 return 0.99; 6741 if (modifiers.includes("half")) 6742 return 0.5; 6743 if (!modifiers.includes("threshold")) 6744 return 0; 6745 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 6746 if (threshold === "100") 6747 return 1; 6748 if (threshold === "0") 6749 return 0; 6750 return Number(`.${threshold}`); 6751 } 6752 function getLengthValue(rawValue) { 6753 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 6754 return match ? match[1] + (match[2] || "px") : void 0; 6755 } 6756 function getRootMargin(modifiers) { 6757 const key = "margin"; 6758 const fallback = "0px 0px 0px 0px"; 6759 const index = modifiers.indexOf(key); 6760 if (index === -1) 6761 return fallback; 6762 let values = []; 6763 for (let i = 1; i < 5; i++) { 6764 values.push(getLengthValue(modifiers[index + i] || "")); 6765 } 6766 values = values.filter((v) => v !== void 0); 6767 return values.length ? values.join(" ").trim() : fallback; 6768 } 6769 6770 document.addEventListener("alpine:init", () => { 6771 window.Alpine.plugin(src_default); 6772 }); 6773 })(); 6774</script>
vendor: 1 bytes, line 6774
6774
6775<script> 6776 for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"idle"})) { 6777 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 6778 } 6779</script>
vendor: 1 bytes, line 6779
6779
6780<script> 6781 (function () { 6782 "use strict"; 6783 6784 const hasAlpine = new Promise(resolve => { 6785 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 6786 }); 6787 6788 const hasInteract = new Promise(resolve => { 6789 (events => { 6790 const onInteract = () => { 6791 resolve(); 6792 events.forEach(type => window.removeEventListener(type, onInteract)); 6793 } 6794 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 6795 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 6796 }); 6797 6798 const onIntersect = (el) => { 6799 return new Promise(resolve => { 6800 const observer = new IntersectionObserver(entries => { 6801 for (const entry of entries) { 6802 if (entry.isIntersecting) { 6803 observer.disconnect() 6804 resolve(); 6805 } 6806 } 6807 }, {}); 6808 observer.observe(el); 6809 }); 6810 } 6811 6812 function runComponent(el) { 6813 hasAlpine.then(() => { 6814 el.removeAttribute('x-ignore'); 6815 queueMicrotask(() => Alpine.initTree(el)); 6816 }); 6817 } 6818 6819 function initDeferredComponents() { 6820 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 6821 el.setAttribute('x-ignore', ''); 6822 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 6823 switch (deferUntil) { 6824 case 'interact': 6825 hasInteract.then(() => runComponent(el)); 6826 break; 6827 case 'intersect': 6828 onIntersect(el).then(() => runComponent(el)) 6829 break; 6830 case 'idle': 6831 window.requestIdleCallback 6832 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 6833 : setTimeout(() => runComponent(el), 4000); 6834 break; 6835 case 'eager': 6836 runComponent(el); 6837 break; 6838 default: 6839 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 6840 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 6841 } 6842 } 6843 }); 6844 } 6845 6846 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 6847 })() 6848</script>
6848 6849
6850<script> 6851 (() => { 6852 function loadJSLibrary() { 6853 return new Promise(resolve => { 6854 const script = document.createElement('script'); 6855 script.type = 'text/javascript'; 6856 script.src = 'https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Mageplaza_InstagramFeed/js/splide.min.js'; 6857 script.async = true; 6858 script.onload = resolve; 6859 document.head.appendChild(script); 6860 }) 6861 } 6862 function loadCssLibrary() { 6863 return new Promise(resolve => { 6864 const link = document.createElement('link'); 6865 link.rel = "stylesheet"; 6866 link.type = "text/css"; 6867 link.href = 'https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Mageplaza_InstagramFeed/css/splide.min.css'; 6868 link.onload = resolve; 6869 document.head.appendChild(link); 6870 }) 6871 } 6872 6873 function loadScripts() { 6874 if(isScriptAdded()){ 6875 return; 6876 } 6877 6878 Promise.all([loadJSLibrary(), loadCssLibrary()]).then(() => updateStoreState()); 6879 } 6880 function updateStoreState() { 6881 Alpine.store('hyva_splide_js').is_loaded = true; 6882 } 6883 function isScriptAdded() { 6884 const scripts = document.scripts; 6885 const scriptsContainingSplide = Array.from(scripts).filter((script) => { 6886 if(!script.src){ 6887 return false; 6888 } 6889 6890 return script.src.includes( 6891 'splide.min.js' 6892 ); 6893 }) 6894 6895 return scriptsContainingSplide.length; 6896 } 6897 6898 function initializeStoreState() { 6899 Alpine.store('hyva_splide_js', { 6900 is_loaded: false, 6901 6902 forceLoad() { 6903 loadScripts(); 6904 } 6905 }); 6906 } 6907 6908 document.addEventListener("alpine:init", () => { 6909 initializeStoreState(); 6910 6911 if (!document.getElementsByClassName('splide').length) { 6912 return; 6913 } 6914 6915 loadScripts(); 6916 }); 6917 })(); 6918</script>
6918 6919
6920<script type="module" 6921 src="https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Hyva_Theme/js/alpine3.min.js" 6922 defer 6923 crossorigin 6924></script>
vendor: 1 bytes, line 6924
6924
6925<script> 6926 'use strict'; 6927 function dispatchMessages(messages, hideAfter) { 6928 const messagesEvent = new CustomEvent("messages-loaded", { 6929 detail: { 6930 messages: messages, 6931 hideAfter: hideAfter 6932 } 6933 }); 6934 window.dispatchEvent(messagesEvent); 6935 } 6936 6937 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 6938 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 6939 } 6940 6941 (function( hyva, undefined ) { 6942 6943 hyva.initFormKey = () => { 6944 const inputSelector = 'input[name="form_key"]', 6945 formKey = hyva.getFormKey(); 6946 6947 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 6948 input.value = formKey 6949 }); 6950 } 6951 6952 hyva.initMessages = () => { 6953 try { 6954 const messages = hyva.getCookie('mage-messages'); 6955 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 6956 6957 dispatchMessages(window.mageMessages); 6958 6959 // empty `mage-messages` cookie 6960 6961 if (document.getElementsByClassName('checkout-cart-index').length > 0) { 6962 setTimeout( 6963 (hyva) => { 6964 hyva.setCookie('mage-messages', '', -1, true); 6965 }, 6966 5000, hyva); 6967 } else { 6968 hyva.setCookie('mage-messages', '', -1, true); 6969 } 6970 6971 } catch (error) { 6972 console.warn('Error parsing Cookie Messages:', error); 6973 } 6974 } 6975 6976 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 6977 hyva.alpineInitialized(hyva.initMessages) 6978 6979 }( window.hyva = window.hyva || {} )); 6980</script>
vendor: 1 bytes, line 6980
6980
6981<script> 6982 'use strict'; 6983 { 6984 const private_content_key = 'mage-cache-storage'; 6985 const private_content_expire_key = 'mage-cache-timeout'; 6986 const private_content_version_key = 'private_content_version'; 6987 const section_data_ids_key = 'section_data_ids'; 6988 const mage_cache_session_id_key = 'mage-cache-sessid'; 6989 const last_visited_store_key = 'last_visited_store'; 6990 6991 const ttl = 3600; 6992 6993 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 6994 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 6995 } 6996 6997 function loadSectionData () { 6998 const browserStorage = hyva.getBrowserStorage(); 6999 if (!browserStorage) { 7000 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 7001 [{ 7002 type: "warning", 7003 text: "Please enable LocalStorage in your browser." 7004 }] 7005 ); 7006 return; 7007 } 7008 try { 7009 let isInvalid = false; 7010 7011 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 7012 isInvalid = true; 7013 } 7014 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 7015 7016 if (!hyva.getCookie(mage_cache_session_id_key)) { 7017 isInvalid = true; 7018 browserStorage.removeItem(private_content_key); 7019 const skipSetDomain = true; 7020 const days = false; 7021 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 7022 } 7023 7024 const cookieVersion = hyva.getCookie(private_content_version_key); 7025 const storageVersion = browserStorage.getItem(private_content_version_key); 7026 7027 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 7028 isInvalid = true; 7029 } 7030 7031 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 7032 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 7033 browserStorage.removeItem(private_content_key); 7034 } 7035 7036 if (isInvalid && cookieVersion) { 7037 fetchPrivateContent([]); 7038 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 7039 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 7040 if ( 7041 privateContent && 7042 privateContentExpires && 7043 privateContent.cart && 7044 privateContent.customer 7045 ) { 7046 dispatchPrivateContent(privateContent); 7047 } else { 7048 fetchPrivateContent([]); 7049 } 7050 } else { 7051 if (document.getElementById('default-section-data')) { 7052 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 7053 dispatchPrivateContent(privateContent); 7054 } else { 7055 dispatchPrivateContent({}); 7056 } 7057 } 7058 7059 } catch (error) { 7060 console.warn('Error retrieving Private Content:', error); 7061 } 7062 } 7063 7064 hyva.alpineInitialized(loadSectionData) 7065 window.addEventListener('reload-customer-section-data', loadSectionData); 7066 7067 window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data); 7068 7069 function dispatchPrivateContent(data) { 7070 7071 const privateContentEvent = new CustomEvent("private-content-loaded", { 7072 detail: { 7073 data: window.processSectionDataBeforeDispatch(data) 7074 } 7075 }); 7076 window.dispatchEvent(privateContentEvent); 7077 } 7078 7079 function fetchPrivateContent(sections) { 7080 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 7081 method: 'GET', 7082 headers: { 7083 'Content-Type': 'application/json', 7084 'X-Requested-With': 'XMLHttpRequest' 7085 } 7086 }) 7087 .then(response => response.ok && response.json()) 7088 .then( 7089 data => { 7090 if (data) { 7091 try { 7092 const browserStorage = hyva.getBrowserStorage(); 7093 7094 // merge new data preserving non-invalidated sections 7095 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 7096 7097 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 7098 delete oldSectionData['checkout-data']; 7099 } 7100 const newSectionData = Object.assign(oldSectionData, data); 7101 7102 dispatchPrivateContent(newSectionData); 7103 7104 // don't persist messages, they've been dispatched already 7105 if (newSectionData.messages && newSectionData.messages.messages ) { 7106 newSectionData.messages.messages = []; 7107 } 7108 7109 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 7110 7111 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 7112 browserStorage.setItem(private_content_expire_key, expiresAt); 7113 7114 const newCookieVersion = hyva.getCookie(private_content_version_key); 7115 browserStorage.setItem(private_content_version_key, newCookieVersion); 7116 7117 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 7118 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 7119 hyva.setCookie( 7120 section_data_ids_key, 7121 JSON.stringify( 7122 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 7123 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 7124 return sectionDataIds; 7125 }, {}) 7126 ), 7127 false, 7128 true 7129 ); 7130 } catch (error) { 7131 console.warn("Couldn't store privateContent", error); 7132 } 7133 } 7134 } 7135 ); 7136 } 7137 } 7138</script>
vendor: 1 bytes, line 7138
7138
7139<script> 7140 (() => { 7141 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 7142 })() 7143</script>
vendor: 1 bytes, line 7143
7143
7144<script> 7145 (events => { 7146 const dispatchUserInteractionEvent = () => { 7147 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 7148 window.dispatchEvent(new Event('init-external-scripts')) 7149 }; 7150 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 7151 })(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown']) 7152</script>
vendor: 1 bytes, line 7152
7152
7153<script src="//rum-static.pingdom.net/pa-5c20ba32cea07b00160006d4.js" async></script>
7153<!-- Account type: 'Google Tag Manager' is not supported -->
7154<script> 7155 'use strict'; 7156 7157 const grecaptchaV2LoadCallbacks = []; 7158 7159 function executeRecaptchaLoadCallbacks () { 7160 while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) { 7161 const callback = grecaptchaV2LoadCallbacks.pop(); 7162 typeof callback === 'string' ? window[callback]() : callback(); 7163 } 7164 } 7165 7166 (function() { 7167 const loadRecaptchaScript = (event) => { 7168 7169 if (window.grecaptcha || !event.target.form) { 7170 return; 7171 } 7172 7173 const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks'; 7174 const siteKey = '6LcD4KUZAAAAAJ9u\u002DxWGWrhEAh5C3alX\u002DjLpplwu'; 7175 const script = document.createElement('script'); 7176 script.type = 'text/javascript'; 7177 script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`; 7178 script.async = true; 7179 document.head.appendChild(script); 7180 7181 script.addEventListener('load', () => { 7182 Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled')); 7183 }); 7184 } 7185 7186 window.forceLoadRecaptchaScript = (form) => { 7187 loadRecaptchaScript({target: {form: form || 'dummy'}}); 7188 executeRecaptchaLoadCallbacks(); 7189 }; 7190 7191 document.body.addEventListener('input', loadRecaptchaScript, { once: true }); 7192 document.body.addEventListener('focus', loadRecaptchaScript, { once: true }); 7193 7194 }()); 7195 7196</script>
vendor: 1 bytes, line 7196
7196
7197<script> 7198 'use strict'; 7199 7200 (function () { 7201 const modals = []; 7202 const excludedFromFocusTrapping = new Set(); 7203 7204 function trapFocusInNextModalWithOverlay() { 7205 for (let idx = modals.length -1; idx >= 0; idx--) { 7206 const nextOnStack = modals[idx]; 7207 const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; 7208 if (! isOverlayDisabled(nextDialogElement)) { 7209 hyva.trapFocus(nextDialogElement); 7210 break; 7211 } 7212 } 7213 } 7214 7215 function focusables(dialogElement) { 7216 const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; 7217 return Array.from(dialogElement.querySelectorAll(selector)) 7218 .filter(el => !el.hasAttribute('disabled')); 7219 } 7220 7221 function firstVisible(elements) { 7222 const a = Array.from(elements); 7223 for (let i = 0; i < a.length; i++) { 7224 if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; 7225 } 7226 return null; 7227 } 7228 7229 function isInViewport(element) { 7230 const rect = element && element.getBoundingClientRect(); 7231 return rect && 7232 rect.top >= 0 && 7233 rect.left >= 0 && 7234 rect.right <= window.innerWidth && 7235 rect.bottom <= window.innerHeight; 7236 } 7237 7238 function setFocusAfterTransition(dialogElement, duration) { 7239 const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); 7240 const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); 7241 next: for (let candidate of candidates) { 7242 for (let child of nested) { 7243 if (child.contains(candidate)) continue next; 7244 } 7245 setTimeout(() => candidate.focus(), 50); 7246 break; 7247 } 7248 window.setTimeout(() => { 7249 const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || 7250 focusables(dialogElement)[0] || 7251 null; 7252 focusElement && isInViewport(focusElement) && focusElement.focus(); 7253 }, Math.max(1, duration)); 7254 } 7255 7256 function determineTrigger($refs, dialog, trigger) { 7257 if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { 7258 return dialog.target; 7259 } 7260 if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { 7261 return trigger.target; 7262 } 7263 if (typeof trigger === 'string') { 7264 try { 7265 return $refs[trigger] || document.querySelector(trigger) 7266 } catch (e) {} 7267 } 7268 if (trigger instanceof Element) { 7269 return trigger; 7270 } 7271 7272 return null; 7273 } 7274 7275 function isOverlayDisabled(dialog) { 7276 return dialog && dialog.hasAttribute('x-no-overlay') 7277 } 7278 7279 function areRemainingModalsWithoutOverlay(modals) 7280 { 7281 const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); 7282 7283 return overflowDisabled.length === modals.length; 7284 } 7285 7286 window.hyva.modal = function(options = {}) { 7287 if (this.$el && this.$el.dataset && this.$el.dataset.options) { 7288 try { 7289 options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}')); 7290 } catch (e) { 7291 throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON'); 7292 } 7293 } 7294 7295 const config = Object.assign({ 7296 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 7297 transitionEnterStart: 'opacity-0', 7298 transitionEnterEnd: 'opacity-100', 7299 transitionLeave: 'transition ease-in duration-300', 7300 transitionLeaveStart: 'opacity-100', 7301 transitionLeaveEnd: 'opacity-0', 7302 }, options); 7303 let lastHide = 0; 7304 7305 return { 7306 opened: {}, 7307 show(dialog, trigger) { 7308 const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); 7309 const name = typeof dialog === 'string' ? dialog : config.dialog; 7310 const dialogElement = this.$refs[name]; 7311 if (! dialogElement) { 7312 return; 7313 } 7314 const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); 7315 7316 dialogElement.scrollTop = 0; 7317 7318 if (this.opened[name]) { 7319 return; 7320 } 7321 7322 if (focusTargetAfterHide) { 7323 focusTargetAfterHide.setAttribute('aria-expanded', 'true'); 7324 } 7325 7326 this.opened[name] = true; 7327 useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); 7328 setFocusAfterTransition(dialogElement, config.duration); 7329 7330 const frame = {name, instance: this, focusTarget: focu
7330sTargetAfterHide, time: Date.now()}; 7331 7332 modals.push(frame); 7333 if (useOverlay) { 7334 document.body.classList.add('overflow-hidden'); 7335 } 7336 return new Promise(resolve => frame.resolve = resolve); 7337 }, 7338 cancel() { 7339 this.hide(false); 7340 }, 7341 ok() { 7342 this.hide(true); 7343 }, 7344 hide(value) { 7345 if (Date.now() - lastHide < config.duration) { 7346 return; 7347 } 7348 lastHide = Date.now(); 7349 7350 const modal = modals.pop() || {}; 7351 if (! modal.instance) { 7352 return; 7353 } 7354 7355 const name = modal.name; 7356 this.opened[name] = false; 7357 hyva.releaseFocus(modal.instance.$refs[modal.name]) 7358 trapFocusInNextModalWithOverlay(); 7359 7360 const nextFocusAfterHide = modal.focusTarget; 7361 nextFocusAfterHide && setTimeout(() => { 7362 nextFocusAfterHide.setAttribute('aria-expanded', 'false'); 7363 nextFocusAfterHide.focus() 7364 }, config.duration); 7365 7366 if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { 7367 document.body.classList.remove('overflow-hidden'); 7368 } 7369 7370 modal.resolve(value); 7371 }, 7372 overlay(dialog) { 7373 dialog = this.$el.dataset.dialogRefName || dialog; 7374 const name = typeof dialog === 'string' ? dialog : config.dialog; 7375 return { 7376 ['x-show']() { 7377 return this.opened[name] 7378 }, 7379 ['x-transition:enter']: config.transitionEnter, 7380 ['x-transition:enter-start']: config.transitionEnterStart, 7381 ['x-transition:enter-end']: config.transitionEnterEnd, 7382 ['x-transition:leave']: config.transitionLeave, 7383 ['x-transition:leave-start']: config.transitionLeaveStart, 7384 ['x-transition:leave-end']: config.transitionLeaveEnd, 7385 ['@hyva-modal-show.window'](event) { 7386 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 7387 } 7388 }; 7389 }, 7390 showDialogOnInit() { 7391 const parent = this.$el.closest('[data-dialog-ref-name]'); 7392 if (parent && parent.dataset.dialogRefName) { 7393 this.$dispatch('hyva-modal-show', {dialog: parent.dataset.dialogRefName}) 7394 } 7395 } 7396 }; 7397 } 7398 7399 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] 7400 7401 window.hyva.modal.pop = function () { 7402 if (modals.length > 0) { 7403 const modal = modals[modals.length -1]; 7404 modal.instance.hide(); 7405 } 7406 } 7407 7408 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { 7409 typeof selectors === 'string' || selectors instanceof String 7410 ? excludedFromFocusTrapping.add(selectors) 7411 : selectors.map(selector => excludedFromFocusTrapping.add(selector)); 7412 } 7413 7414 window.hyva.modal.eventListeners = { 7415 keydown: event => { 7416 if (event.key === 'Escape') { 7417 window.hyva.modal.pop(); 7418 } 7419 }, 7420 click: event => { 7421 if (modals.length > 0) { 7422 const modal = modals[modals.length -1]; 7423 const dialog = modal.instance.$refs[modal.name]; 7424 if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago 7425 ! isOverlayDisabled(dialog) && // if dialog has overlay 7426 ! dialog.contains(event.target)) { // if click is outside of dialog 7427 modal.instance.hide(); 7428 } 7429 } 7430 } 7431 }; 7432 7433 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 7434 7435 document.addEventListener('click', window.hyva.modal.eventListeners.click); 7436 })(); 7437 window.addEventListener('alpine:init', () => { 7438 Alpine.data('hyvaModal', window.hyva.modal); 7439 }, {once: true}); 7440</script>
7440 7441 7442<!-- Wrapping template -->
7443<script type="text/template" id="instant_wrapper_template"> 7444 {{#findAutocomplete}} 7445 <div id="algolia-autocomplete-container"></div> 7446 {{/findAutocomplete}} 7447 7448 <div id="algolia_instant_selector" 7449 class="w-full h-full px-6 mx-auto sm:max-w-screen-sm md:max-w-screen-md lg:max-w-screen-lg xl:max-w-screen-xl 2xl:max-w-screen-2xl with-facets"> 7450 <div class="flex flex-col pt-4 md:flex-row"> 7451 <div class="w-full px-2.5 md:px-0 md:w-1/3 lg:pb-8 xl:pr-5 relative" id="algolia-left-container"> 7452 <div class="md:px-0" id="filter-algolia-sidebar" 7453 x-data="initLayeredNavigationTest()" 7454 x-defer="intersect" 7455 x-init="$nextTick(() => initialize($el))" 7456 x-bind="eventListeners" 7457 @resize.window.debounce="checkResolutions($el)" 7458 @scroll.window="onScroll()" 7459 @filter-open-state.window="toggleFilters(true)"> 7460 <div id="filters_start"></div> 7461 <div class="fixed inset-0 bg-black bg-opacity-50 z-20 transition-opacity md:hidden" 7462 x-show="blockOpen" 7463 x-transition.opacity 7464 @click="toggleFilters(false)"> 7465 </div> 7466 <div class="md:hidden py-4"> 7467 <div class="btn btn-secondary w-full my-4 cursor-pointer" id="category-filter-toggle" 7468 @click="toggleFilters(!blockOpen)"> 7469 <span class="text-primary-black text-md text-xl md:text-2xl font-semibold"> 7470 Filter </span> 7471 </div> 7472 </div> 7473 <div class="md:mb-4 md:flex md:flex-col md:p-0 md:pt-3 px-3 pb-3 relative w-full" 7474 id="instant-search-facets-container" x-show="blockOpen" x-transition> 7475 <div 7476 class="flex sticky items-center top-0 bg-white w-full z-40 justify-between py-4 px-2 border-b md:hidden"> 7477 <span class="text-2xl font-bold" id="instant-search-active-filters-label">Filter</span> 7478 <button @click="toggleFilters(false)" 7479 class="flex items-center justify-center cursor-pointer ml-auto"> 7480 <svg xmlns="http://www.w3.org/2000/svg" height="32" viewBox="0 -960 960 960" width="32" class="fill-black" aria-label="close" role="img"><path d="M256-213.847 213.847-256l224-224-224-224L256-746.153l224 224 224-224L746.153-704l-224 224 224 224L704-213.847l-224-224-224 224Z"/><title>close</title></svg> 7481 </button> 7482 </div> 7483 <div class="w-full flex flex-wrap space-between bg-white mt-3"> 7484 <div class="shrink-0 self-center w-full" id="clear-refinements"></div> 7485 <div id="current-refinements" class="grow content-center"></div> 7486 </div> 7487 </div> 7488 <div id="filters_end"></div> 7489 </div> 7490 </div> 7491 7492 <div class="w-full md:pl-6 md:pr-2 lg:pr-0 md:w-2/3 xl:pl-2.5" id="algolia-right-container"> 7493 <div> 7494 <div class="pb-3.5"> 7495 <div class="px-2.5"> 7496 {{#second_bar}} 7497 <div id="instant-search-bar"></div> 7498 {{/second_bar}} 7499 </div> 7500 </div> 7501 </div> 7502 <div> 7503 <div> 7504 <div itemscope itemtype="http://schema.org/ItemList"> 7505 <div class="pl-2.5"> 7506 <div class="flex w-full justify-between flex-row pr-2.5" id="algolia-list-toolbar"> 7507 <div class="basis-full flex items-center" id="algolia-stats"></div> 7508 <div 7509 class="pull-right basis-full flex justify-end items-center text-gray-400 text-sm leading-8 tracking-wider"> 7510 <div class="hidden"> 7511 Sort by </div> 7512 <div id="algolia-sorts"></div> 7513 </div> 7514 </div> 7515 </div> 7516 <div id="algolia-banner"></div> 7517 <div id="instant-empty-results-container"> 7518 <div class="search-term"></div> 7519 <div class="cms-info hidden"> 7520 <style>#html-body [data-pb-style=L5ODY62],#html-body [data-pb-style=RKTHPOR]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=L5ODY62]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=RKTHPOR]{align-self:stretch}#html-body [data-pb-style=AP963QN]{display:flex;width:100%}#html-body [data-pb-style=W983PFK]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="L5ODY62"><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="RKTHPOR"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="AP963QN"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-column-link="" data-element="main" data-pb-style="W983PFK"><div data-content-type="text" data-appearance="default" data-element="main"><div style="font-family: Arial, sans-serif; font-size: 16px; line-height: 1.6;"> 7521<p>Here are a few suggestions to refine your search:</p> 7522<ul style="list-style-type: square;"> 7523<li>Check your spelling - a small typo might be the issue.</li> 7524<li>Try searching by product category - such as "sofas" or "coffee tables."</li> 7525<li>Try a different keyword - perhaps a synonym or a shorter term.</li> 7526</ul> 7527<p>Still can’t find what you’re looking for? Feel free to <a class="external-link" tabindex="0" href="https://eichholtz.com/en/contact-page" target="_blank" rel="nofollow noopener">contact</a> us, we’ll be happy to assist you.</p> 7528</div></div></div></div></div></div></div> </div> 7529 <div class="popular-searches"></div> 7530 </div> 7531 <div class="py-6" id="instant-search-results-container"></div> 7532 </div> 7533 </div> 7534 </div> 7535 <div> 7536 <div id="instant-search-pagination-container"></div> 7537 </div> 7538 </div> 7539 </div> 7540 </div> 7541</script>
vendor: 1 bytes, line 7541
7541
7542<script> 7543 function initLayeredNavigationTest() { 7544 return { 7545 selectors: { 7546 scrollAreaStart: 'contentarea', 7547 scrollAreaEnd: 'page-footer', 7548 filtersStart: 'filters_start', 7549 filtersContent: 'filter-algolia-sidebar', 7550 filtersEnd: 'filters_end', 7551 columns: '.columns', 7552 body: '#html-body', 7553 filterItem: '.ais-Panel', 7554 filterOption: '.ais-RefinementList-item', 7555 selectedClass: '.ais-RefinementList-item--selected', 7556 }, 7557 open: false, 7558 isMobile: false, 7559 blockOpen: false, 7560 headerHeight: null, 7561 headerHeightExtra: null, 7562 filtersBlock: null, 7563 filtersAnchored: false, 7564 filtersOffsetTop: 223, 7565 filtersStartVisible: false, 7566 filtersEndVisible: false, 7567 scrollAreaStartVisible: false, 7568 scrollAreaEndVisible: false, 7569 7570 initialize(filters) { 7571 this.checkResolutions(filters) 7572 7573 this.filtersBlock = document.getElementById(this.selectors.filtersContent) 7574 7575 if (this.isMobile) { 7576 return 7577 } 7578 7579 const observer = new IntersectionObserver((entries) => { 7580 entries.forEach(entry => { 7581 if (entry.target.id === this.selectors.filtersStart) { 7582 this.filtersStartVisible = entry.isIntersecting 7583 } 7584 if (entry.target.id === this.selectors.filtersEnd) { 7585 this.filtersEndVisible = entry.isIntersecting 7586 } 7587 if (entry.target.id === this.selectors.scrollAreaStart) { 7588 this.scrollAreaStartVisible = entry.isIntersecting 7589 } 7590 if (entry.target.className === this.selectors.scrollAreaEnd) { 7591 this.scrollAreaEndVisible = entry.isIntersecting 7592 } 7593 }) 7594 }, { 7595 // Adds an offset to compensate for the sticky header height 7596 rootMargin: "-" + document.getElementsByTagName('header')[0]?.offsetHeight + "px 0px 0px 0px" 7597 }) 7598 7599 observer.observe(document.getElementById(this.selectors.filtersStart)) 7600 observer.observe(document.getElementById(this.selectors.filtersEnd)) 7601 observer.observe(document.getElementById(this.selectors.scrollAreaStart)) 7602 observer.observe(document.getElementsByClassName(this.selectors.scrollAreaEnd)[0]) 7603 7604 // Ensure filters remain in view when initializing 7605 this.positionFilters('sticky', document.getElementsByTagName('header')[0].offsetHeight + 'px') 7606 }, 7607 7608 onScroll() { 7609 if (this.isMobile) { 7610 return false 7611 } 7612 7613 let scrolledY = window.scrollY, 7614 sidebarHeight = this.filtersBlock?.offsetHeight, 7615 scrollUp = this.oldScrollY > scrolledY 7616 7617 this.oldScrollY = scrolledY 7618 7619 if (scrolledY == 0) { 7620 return this.positionFilters('relative') 7621 } 7622 7623 // Only apply non-sticky position when the filters are bigger than the visible window height 7624 if ((window.innerHeight - this.headerHeight) < sidebarHeight) { 7625 // If the start of the scroll area is visible we should anchor the filters to top 7626 if (this.scrollAreaStartVisible) { 7627 return this.positionFilters('relative') 7628 } 7629 7630 // If the end of the scroll area is visible we should anchor the filters to bottom 7631 if (this.scrollAreaEndVisible) { 7632 return this.positionFilters('absolute', 'unset', '0px') 7633 } 7634 7635 // Scrolling up 7636 if (scrollUp) { 7637 // If the top of the filter is visible but not the start of the scrolleable area 7638 // we position the filters fixed to the top of the window 7639 if (this.filtersStartVisible && !this.scrollAreaStartVisible) { 7640 return this.positionFilters('fixed', this.headerHeight + 'px') 7641 } 7642 7643 // If the top of the filters is not yet visible, and we are scrolling up 7644 // we need to anchor the filters based on the scroll distance 7645 if (!this.filtersStartVisible && !this.scrollAreaStartVisible && !this.filtersAnchored) { 7646 let offset = window.scrollY + (this.filtersBlock.offsetTop - this.filtersOffsetTop) - this.headerHeightExtra 7647 return this.positionFilters('relative', offset + 'px') 7648 } 7649 } 7650 7651 // Scrolling down 7652 if (!scrollUp) { 7653 // Needed for when we switch to sticky (filters minified) to filters exceeding screen height 7654 if (this.filtersBlock.style.position === 'sticky') { 7655 return this.positionFilters('fixed', this.headerHeight + 'px') 7656 } 7657 7658 // If we are scrolling down (and not yet reached the end of the page) we 7659 // position the filters fixed to the bottom of the screen 7660 if (this.filtersEndVisible) { 7661 return this.positionFilters('fixed', 'unset', '0px') 7662 } 7663 7664 // If we are not yet at the bottom of the filters, and we are scrolling down 7665 // we need to anchor the filters based on the scroll distance 7666 if (!this.filtersAnchored) { 7667 let offset = window.scrollY + (this.filtersBlock.offsetTop - this.filtersOffsetTop) - this.headerHeightExtra 7668 return this.positionFilters('relative', offset + 'px') 7669 } 7670 } 7671 } else { 7672 // The filters are smaller than the screen height, so we can apply the default sticky behavior 7673 return this.positionFilters('sticky', this.headerHeight + 'px') 7674 } 7675 }, 7676 7677 positionFilters(position, top = 'unset', bottom = 'unset') { 7678 this.filtersBlock.style.position = position 7679 this.filtersBlock.style.bottom = bottom; 7680 this.filtersBlock.style.top = top 7681 this.filtersAnchored = position !== 'fixed' 7682 return true 7683 }, 7684 7685 checkResolutions(filters) { 7686 this.isMobile = window.matchMedia('(max-width: 767px)').matches 7687 this.toggleFilters(false) 7688 this.$nextTick(() => { 7689 if (!this.isMobile) { 7690 this.blockOpen = true;
7691 this.preventMobileBackgroundScrolling(false) 7692 this.headerHeight = document.getElementsByTagName('header')[0].offsetHeight 7693 this.headerHeightExtra = (document.getElementsByClassName('category-info-container')[0]?.offsetHeight || 0) 7694 // Ensure parent wrapper is full height 7695 filters.parentElement.style.gridRowEnd = '3' 7696 filters.parentElement.id = 'scrollarea' 7697 filters.style.maxWidth = filters.parentElement.offsetWidth.toString() + 'px' 7698 filters.style.width = filters.parentElement.offsetWidth.toString() + 'px' 7699 } else { 7700 this.blockOpen = false 7701 filters.parentElement.style.gridRowEnd = 'unset' 7702 filters.style.maxWidth = 'unset' 7703 filters.style.top = 'unset' 7704 filters.style.position = 'relative' 7705 filters.style.width = '100%' 7706 } 7707 this.openFiltersByDefault(filters); 7708 }) 7709 }, 7710 7711 openFiltersByDefault(element) { 7712 let filters = element.querySelectorAll(this.selectors.filterItem); 7713 let hasOpenedFilter = false; 7714 7715 filters.forEach((filter, index) => { 7716 filter.querySelector('.ais-Panel-body').setAttribute("x-show", "open"); 7717 7718 setTimeout(() => { 7719 let hasSelectedOption = filter.querySelector(this.selectors.selectedClass); 7720 let filterContainer = filter.closest('[x-data]'); 7721 7722 if (hasSelectedOption && filterContainer) { 7723 let alpineScope = Alpine.$data(filterContainer); 7724 alpineScope.open = true; 7725 hasOpenedFilter = true; 7726 } 7727 7728 if (!hasOpenedFilter && index === filters.length - 1) { 7729 let firstVisibleFilter = Array.from(filters).find(f => !f.hidden); 7730 7731 if (firstVisibleFilter) { 7732 let firstVisibleContainer = firstVisibleFilter.closest('[x-data]'); 7733 if (firstVisibleContainer) { 7734 let firstAlpineScope = Alpine.$data(firstVisibleContainer); 7735 firstAlpineScope.open = true; 7736 } 7737 } 7738 } 7739 }, 500); 7740 }); 7741 }, 7742 7743 toggleFilters(open) { 7744 this.blockOpen = open; 7745 7746 let facetsContainer = document.getElementById('instant-search-facets-container'); 7747 7748 if (facetsContainer) { 7749 if (open) { 7750 // Apply styles when filters are open 7751 facetsContainer.style.backgroundColor = 'white'; 7752 facetsContainer.style.bottom = '0'; 7753 facetsContainer.style.height = '90vh'; 7754 facetsContainer.style.left = '0'; 7755 facetsContainer.style.overflowY = 'auto'; 7756 facetsContainer.style.position = 'fixed'; 7757 facetsContainer.style.zIndex = '100'; 7758 } else { 7759 // Reset styles when filters are closed 7760 facetsContainer.style.backgroundColor = ''; 7761 facetsContainer.style.bottom = ''; 7762 facetsContainer.style.height = ''; 7763 facetsContainer.style.left = ''; 7764 facetsContainer.style.overflowY = ''; 7765 facetsContainer.style.position = ''; 7766 facetsContainer.style.zIndex = ''; 7767 } 7768 } 7769 7770 this.preventMobileBackgroundScrolling(open); 7771 }, 7772
7773 preventMobileBackgroundScrolling(backgroundScrollingDisabled) { 7774 document.body.style.overflowY = backgroundScrollingDisabled ? 'hidden' : 'auto'; 7775 }, 7776 7777 /** 7778 * Create event for open filter 7779 * @param target element for creating event 7780 * @returns {*} 7781 * @private 7782 */ 7783 _openFilterEvent(target) { 7784 if (target) { 7785 target.dispatchEvent(new CustomEvent('filter-open-state', {})); 7786 } else { 7787 console.warn("Target for _openFilterEvent is null or undefined."); 7788 } 7789 7790 return target.dispatchEvent(new CustomEvent('filter-open-state', {})); 7791 }, 7792 7793 eventListeners: { 7794 ['@open-filters.window']() { 7795 this.toggleFilters(true); 7796 }, 7797 ['@amApplyButton.window']() { 7798 this.preventMobileBackgroundScrolling(false); 7799 }, 7800 ['@amshopby-submit-filters.window'](e) { 7801 if (e.detail.isSorting) { 7802 this.preventMobileBackgroundScrolling(false); 7803 } 7804 } 7805 } 7806 } 7807 } 7808</script>
vendor: 1 bytes, line 7808
7808
7809<script type="text/template" id="instant-hit-template"> 7810 <div class="flex flex-col w-full h-full bg-white" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" 7811 x-data="initInsight()" 7812 x-init="bindClickEvent($el, ' Product Clicked', '{{objectID}}', '{{__indexName}}', '{{__position}}', '{{__queryID}}'), $dispatch('reload-wishlist-state')" 7813 > 7814 <meta itemprop="position" content="{{__position}}"/> 7815 <div class="flex-grow" itemprop="item" itemscope itemtype="http://schema.org/Product"> 7816 <meta itemprop="url" 7817 {{^__queryID}} content="{{url}}" {{/__queryID}} 7818 {{#__queryID}} content="{{urlForInsights}}" {{/__queryID}} 7819 /> 7820 7821 <div class="h-full flex flex-col p-4 relative"> 7822 <a class="h-full result" 7823 {{^__queryID}} href="{{url}}" {{/__queryID}} 7824 {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}> 7825 <div class="flex justify-center items-center mb-3 bg-white object-contain min-h-[300px] relative"> 7826 <div class="product-labels"> 7827 {{#labels}} 7828 <div class="{{position_class}}"> 7829 <img class="label-image label-image-{{label_class}}" alt="Label" src="{{src}}" /> 7830 </div> 7831 {{/labels}} 7832 {{#labels_rrp}} 7833 <div class="{{position_class}}"> 7834 <img class="label-image label-image-{{label_class}}" alt="Label" src="{{src}}" /> 7835 </div> 7836 {{/labels_rrp}} 7837 {{#labels_br.44}} 7838 <div class="{{position_class}}"> 7839 <img class="label-image label-image-{{label_class}}" alt="Label" src="{{src}}" /> 7840 </div> 7841 {{/labels_br.44}} 7842 </div> 7843 {{#image_url}} 7844 {{#hover_image}} 7845 <img itemprop="image" class="hover-image" src="{{{image_url}}}" alt="{{{name}}}" 7846 onmouseenter="this.style.display = 'none'; this.closest('.flex').querySelector('.hovered-image').style.display = 'block';" 7847 /> 7848 <img class="hovered-image hidden" src="{{{hover_image}}}" alt="{{{name}}}" 7849 onmouseleave="this.style.display = 'none'; this.closest('.flex').querySelector('.hover-image').style.display = 'block';" 7850 /> 7851 {{/hover_image}} 7852 {{^hover_image}} 7853 <img itemprop="image" class="hover-image" src="{{{image_url}}}" alt="{{{name}}}" 7854 /> 7855 {{/hover_image}} 7856 {{/image_url}} 7857 {{^image_url}}<span class="no-image"></span>{{/image_url}} 7858 7859 <button 7860 x-data="initWishlist()" 7861 data-product-id="{{objectID}}" 7862 data-addto="wishlist" 7863 @click.prevent="addToWishlist({{objectID}})" 7864 class="flex items-center justify-center absolute bottom-0 right-0 w-10 h-10 bg-white rounded-full shadow-[0_0_0_4px_rgba(255,255,255,0.5)]" 7865 > 7866 </button> 7867 </div> 7868 <h3 itemprop="name" class="product-item-link text-center text-xl font-serif text-black px-3 leading-6"> 7869 {{{ _highlightResult.name.value }}} 7870 </h3> 7871 </a> 7872 {{#has_related_products}} 7873 <span class="text-sm text-primary-400">Available in multiple colors/finishes</span> 7874 {{/has_related_products}} 7875 <div class="special-price title-font text-sm text-primary-900 font-bold leading-4"> 7876 {{# price.group_44_formated }} 7877 <div class="pt-2"> 7878 <div itemprop="offers" itemscope itemtype="http://schema.org/Offer" class="price"> 7879 <meta itemprop="price" content="{{price.group_44}}" /> 7880 <meta itemprop="priceCurrency" content="EUR" /> 7881 <div class="flex flex-col">
7882 <span> 7883 {{price.group_44_formated}} 7884 <span class="font-normal">RRP (incl. VAT)</span> 7885 </span> 7886 </div> 7887 </div> 7888 </div> 7889 {{/ price.group_44_formated }} 7890 <div class="flex flex-row items-center justify-center {{^custom_item}} gap-4 {{/custom_item}} pt-2 text-primary-400"> 7891 <span class="text-xs"> 7892 {{{ sku }}} 7893 </span> 7894 </div> 7895 <div>{{{ _highlightResult.description.value }}}</div> 7896 </div> 7897 </div> 7898 </div> 7899</script>
vendor: 1 bytes, line 7899
7899
7900<script> 7901 'use strict'; 7902 7903 function initInsight() { 7904 return { 7905 bindClickEvent(element, eventName, objectID, indexName, position, queryID) { 7906 element.querySelector(algoliaConfig.ccAnalytics.ISSelector).addEventListener("click", function () { 7907 buildInsightsEventData(eventName, objectID, indexName, position, queryID); 7908 }); 7909 } 7910 } 7911 } 7912</script>
vendor: 1 bytes, line 7912
7912
7913<script type="text/template" id="instant-stats-template"> 7914 <div class="py-2"> 7915 {{#hasOneResult}}<strong>1</strong> 7916 <span class="text-sm leading-5 text-gray-700 tracking-wider"> 7917 Item </span> 7918 {{/hasOneResult}} 7919 {{#hasManyResults}} 7920 <span class="text-sm leading-5 text-gray-700 tracking-wider"> 7921 Items </span> 7922 <span class="text-sm leading-5 text-gray-700 tracking-wider" itemprop="numberOfItems"> 7923 {{first}}-{{last}} of </span> 7924 <span class="text-sm leading-5 text-gray-700 tracking-wider" itemprop="numberOfItems">{{nbHits}}</span> 7925 {{/hasManyResults}} 7926 </div> 7927</script>
vendor: 1 bytes, line 7927
7927
7928<script type="text/template" id="refinements-lists-item-template"> 7929 <label class="{{cssClasses.label}} {{#isRefined}}checked{{/isRefined}} flex items-center mb-2.5 relative"> 7930 {{#swatchValue}} 7931 {{#swatchValue.isColor}} 7932 <input class="{{cssClasses.checkbox}}" {{#isRefined}}checked{{/isRefined}} style="background-color:{{swatchValue.swatch}}" type="checkbox" value="{{value}}" /> 7933 {{/swatchValue.isColor}} 7934 {{#swatchValue.isImage}} 7935 <input class="{{cssClasses.checkbox}}" {{#isRefined}}checked{{/isRefined}} style="background: #ffffff url({{swatchValue.swatch}}) no-repeat center;background-size: cover;" type="checkbox" value="{{value}}" /> 7936 <span class="selected-background facet-image absolute hidden w-8 h-8"> 7937 <svg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'><path d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/></svg> 7938 </span> 7939 {{/swatchValue.isImage}} 7940 {{/swatchValue}} 7941 {{^swatchValue}} 7942 <input {{#isRefined}}checked{{/isRefined}} type="checkbox" value="{{value}}" /> 7943 {{/swatchValue}} 7944 <span 7945 class="pl-2" 7946 x-text="attributeCode === 'discount' ? '{{value}}%' : '{{value}}'" 7947 ></span> 7948 <span class="{{cssClasses.count}} flex-grow count text-primary-400">{{count}}</span> 7949 </label> 7950</script>
vendor: 1 bytes, line 7950
7950
7951<script type="text/template" id="current-refinements-template"> 7952 <div class="cross-wrapper"> 7953 <span class="clear-cross clear-refinement"></span> 7954 </div> 7955 <div class="current-refinement-wrapper"> 7956 {{#label}} 7957 <span class="current-refinement-label">{{label}}{{^operator}}:{{/operator}}</span> 7958 {{/label}} 7959 {{#operator}} 7960 {{{displayOperator}}} 7961 {{/operator}} 7962 {{#exclude}}-{{/exclude}} 7963 <span class="current-refinement-name">{{name}}</span> 7964 </div> 7965</script>
7965 7966 7967 <section x-cloak x-data="amRecaptchaLoading" 7968 @amcaptcha-loading-start.window="loadingStart" @amcaptcha-loading-stop.window="loadingStop"> 7969 <div 7970 class="z-50 fixed inset-0 grid place-items-center bg-white/70 text-primary" 7971 x-cloak 7972 x-show="isLoading" 7973 x-transition.opacity.duration.200ms 7974> 7975 <div class="flex gap-10 items-center p-4"> 7976 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" width="57" height="57" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"> 7977 <style> 7978 @keyframes spinner-ball-triangle1 { 7979 0% { transform: translate(0%, 0%); } 7980 33% { transform: translate(38%, -79%); } 7981 66% { transform: translate(77%, 0%); } 7982 100% { transform: translate(0%, 0%); } 7983 } 7984 7985 @keyframes spinner-ball-triangle2 { 7986 0% { transform: translate(0%, 0%); } 7987 33% { transform: translate(38%, 79%); } 7988 66% { transform: translate(-38%, 79%); } 7989 100% { transform: translate(0%, 0%); } 7990 } 7991 7992 @keyframes spinner-ball-triangle3 { 7993 0% { transform: translate(0%, 0%); } 7994 33% { transform: translate(-77%, 0%); } 7995 66% { transform: translate(-38%, -79%); } 7996 100% { transform: translate(0%, 0%); } 7997 } 7998 </style> 7999 <circle cx="5" cy="50" r="5" style="animation: spinner-ball-triangle1 2.2s linear infinite"/> 8000 <circle cx="27" cy="5" r="5" style="animation: spinner-ball-triangle2 2.2s linear infinite"/> 8001 <circle cx="49" cy="50" r="5" style="animation: spinner-ball-triangle3 2.2s linear infinite"/> 8002</svg> 8003 <span class="text-xl select-none"> 8004 Loading... </span> 8005 </div> 8006</div> 8007 </section> 8008
8008<script> 8009 function amRecaptchaLoading() { 8010 return { 8011 isLoading: false, 8012 8013 loadingStart() { 8014 this.isLoading = true; 8015 }, 8016 8017 loadingStop() { 8018 this.isLoading = false; 8019 } 8020 }; 8021 } 8022 (() => { 8023 const initFn = () => Alpine.data('amRecaptchaLoading', amRecaptchaLoading); 8024 window.Alpine ? initFn() : window.addEventListener('alpine:init', initFn, {once: true}) 8025 })() 8026 </script>
8026 8027 <style> 8028 .is-loading > :not(.loader) { 8029 visibility: hidden; 8030 } 8031</style>
8032<script> 8033 const ajaxAddToCartForms = []; 8034 const processingIds = []; 8035 window.setAjaxCart = (selectors = 'form.product_addtocart_form,\u0020\u0023product_addtocart_form', recursive = true) => { 8036 const forms = document.querySelectorAll(selectors); 8037 const delay = parseInt('1000', 10); 8038 8039 forms.forEach(form => { 8040 const formData = new URLSearchParams(new FormData(form)); 8041 if (ajaxAddToCartForms.includes(formData.get('product'))) { 8042 return; 8043 } 8044 8045 form.addEventListener('submit', async (e) => { 8046 e.preventDefault(); 8047 8048 const formData = new URLSearchParams(new FormData(form)); 8049 8050 ajaxAddToCartForms.push(formData.get('product')); 8051 if (processingIds.includes(formData.get('product'))) { 8052 return; 8053 } 8054 processingIds.push(formData.get('product')); 8055 8056 8057 const button = form.querySelector('button') ? 8058 form.querySelector('button') : 8059 document.getElementById('product-addtocart-button'); 8060 const loader = document.createElement('div'); 8061 8062 loader.className = 'absolute inset-0 flex justify-center items-center loader'; 8063 loader.innerHTML = ` 8064 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" xml:space="preserve" width="32" height="32"> 8065 <path fill="#fff" 8066 d="M73 50c0-12.7-10.3-23-23-23S27 37.3 27 50m3.9 0c0-10.5 8.5-19.1 19.1-19.1S69.1 39.5 69.1 50"> 8067 <animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" 8068 from="0 50 50" to="360 50 50" 8069 repeatCount="indefinite"/> 8070 </path> 8071 </svg> 8072 `; 8073 8074 button.prepend(loader); 8075 button.classList.add('relative', 'is-loading'); 8076 button.disabled = true; 8077 8078 try { 8079 const response = await fetch(e.currentTarget.action, { 8080 method: 'POST', 8081 body: formData, 8082 headers: { 8083 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', 8084 'X-Requested-With': 'XMLHttpRequest' 8085 } 8086 }); 8087 8088 if (!response.ok) { 8089 return form.submit(); 8090 } 8091 8092 if (response.redirected) { 8093 return window.location.href = response.url; 8094 } 8095 8096 const data = await response.json(); 8097 8098 if (data.backUrl) { 8099 return window.location.href = data.backUrl; 8100 } 8101 8102 if (recursive) { 8103 window.dispatchEvent(new CustomEvent('product-addtocart-success', { 8104 detail: { 8105 productId: formData.get('product') 8106 } 8107 })); 8108 } 8109 8110 window.dispatchEvent(new CustomEvent('toggle-cart', { 8111 detail: { 8112 isOpen: true 8113 } 8114 })); 8115 8116 return window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 8117 } catch (err) { 8118 console.warn(err); 8119 window.dispatchEvent(new CustomEvent('product-addtocart-error')); 8120 8121 setMessage({ 8122 text:'There\u0020was\u0020a\u0020problem\u0020adding\u0020your\u0020item\u0020to\u0020the\u0020cart.', 8123 type: 'error' 8124 }); 8125 } finally { 8126 try { 8127 var messages = hyva.getCookie('mage-messages'); 8128 messages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 8129 document.cookie = 'mage-messages=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; 8130 8131 } catch (error) { 8132 console.warn('Error parsing Cookie Messages:', error); 8133 return; 8134 } 8135 8136 setTimeout(() => { 8137 loader.remove(); 8138 button.classList.remove('is-loading'); 8139 button.disabled = false;
8140 processingIds.splice(processingIds.indexOf(formData.get('product'))); 8141 }, delay); 8142 } 8143 }); 8144 }); 8145 } 8146 8147 /** 8148 * Set Message 8149 */ 8150 function setMessage(message) { 8151 typeof window.dispatchMessages !== "undefined" && 8152 window.dispatchMessages([message], 5000); 8153 } 8154 8155 /** Init on pageload */ 8156 window.setAjaxCart(); 8157</script>
8157 8158
8158<script> 8159 "use strict"; 8160 8161 const wishlistContent = { 8162 initialCall: true, 8163 addedIds: [] 8164 } 8165 8166 function getWishListItemsFromStorage() { 8167 const storage = hyva.getBrowserStorage().getItem('mage-cache-storage'); 8168 8169 return JSON.parse(storage)?.wishlist?.items; 8170 } 8171 8172 function getWishListItemFromStorage(productId) { 8173 const items = getWishListItemsFromStorage() 8174 8175 return items?.find(item => parseInt(item.product_id) === parseInt(productId)); 8176 } 8177 8178 function activeWishlistStateHandler(event) { 8179 const items = event?.detail?.data?.wishlist?.items ?? getWishListItemsFromStorage(); 8180 8181 let ids = []; 8182 8183 items?.forEach(item => ids.push(parseInt(item.product_id))); 8184 8185 const wishlistAddedIds = wishlistContent.addedIds; 8186 8187 let addedIds = wishlistAddedIds.length > 0 ? ids.filter(id => !wishlistAddedIds.includes(id)) : wishlistContent.initialCall ? [] : ids, 8188 removedIds = wishlistAddedIds.length > 0 ? wishlistAddedIds.filter(id => !ids.includes(id)) : []; 8189 8190 wishlistContent.initialCall = false; 8191 wishlistContent.addedIds = ids; 8192 8193 const getProductIdFromBtn = (button) => { 8194 let productId = button.getAttribute('data-product-id'); 8195 8196 if (!productId) { 8197 const clickAttr = button.getAttribute('@click.prevent'), 8198 match = clickAttr?.match(/addToWishlist\((\d+)\)/); 8199 8200 if (match) { 8201 productId = match[1]; 8202 } 8203 } 8204 8205 return parseInt(productId); 8206 } 8207 8208 document.querySelectorAll('[data-addto="wishlist"]').forEach(button => { 8209 const productId = getProductIdFromBtn(button); 8210 8211 if (productId) { 8212 button.classList.toggle('added', addedIds.includes(productId)); 8213 button.classList.toggle('removed', removedIds.includes(productId)); 8214 button.classList.toggle('active', ids.includes(productId)); 8215 } 8216 }); 8217 } 8218 8219 function addToWishlistExtended(productId) { 8220 const formKey = hyva.getFormKey(), 8221 item = getWishListItemFromStorage(productId); 8222 8223 let postUrl = BASE_URL + 'wishlist/index/add/', 8224 postData; 8225 8226 const addPageMessage = (state, message) => { 8227 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 8228 { type: state, text: message } 8229 ], 5000); 8230 } 8231 8232 if (item) { 8233 // remove exists, so remove item instead 8234 if (!item.delete_item_params) return; 8235 8236 postData = JSON.parse(item.delete_item_params); 8237 postData.data['form_key'] = formKey; 8238 postUrl = postData.action; 8239 } else { 8240 // add item 8241 postData = { 8242 data: { 8243 form_key: formKey, 8244 product: productId, 8245 uenc: hyva.getUenc() 8246 } 8247 }; 8248 } 8249 8250 fetch(postUrl, { 8251 "headers": { 8252 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 8253 }, 8254 "body": new URLSearchParams(postData.data), 8255 "method": "POST", 8256 "mode": "cors", 8257 "credentials": "include" 8258 }).then((response) => { 8259 if (response.redirected) { 8260 window.location.href = response.url; 8261 } else if (response.ok) { 8262 return response.json(); 8263 } else { 8264 addPageMessage("warning", "Could not add item to wishlist."); 8265 } 8266 }).then((response) => { 8267 if (!response) return; 8268 8269 addPageMessage(response.success ? "success" : "error", response.message); 8270 8271 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 8272 window.dispatchEvent(reloadCustomerDataEvent); 8273 }).catch(() => { 8274 addPageMessage("error", "Wish List can't be updated at the moment."); 8275 }); 8276 } 8277 8278 ['private-content-loaded', 'reload-wishlist-state'].forEach((e) => { 8279 window.addEventListener(e, activeWishlistStateHandler); 8280 }) 8281 8282 function initWishlist() { 8283 return { 8284 addToWishlist(productId) { 8285 addToWishlistExtended(productId); 8286 } 8287 } 8288 } 8289 </script>
8289 8290
8290<script> 8291 window.algoliaConfig = {"instant":{"enabled":true,"selector":".columns","isAddToCartEnabled":false,"addToCartParams":{"action":"https:\/\/www.eichholtz.com\/en\/checkout\/cart\/add\/","formKey":"cqxto8ZaiPDyUmPs","redirectUrlParam":"uenc"},"infiniteScrollEnabled":false,"urlTrackedParameters":["query","attribute:*","index","page"],"isSearchBoxEnabled":false,"isVisualMerchEnabled":true,"categorySeparator":" \/\/\/ ","categoryPageIdAttribute":"categoryPageId","isCategoryNavigationEnabled":false,"hidePagination":true,"isDynamicFacetsEnabled":false,"redirects":{"enabled":false,"onPageLoad":true,"onSearchAsYouType":false,"showSelectableRedirect":true,"openInNewWindow":false}},"autocomplete":{"enabled":true,"selector":".algolia-search-input","sections":[],"nbOfProductsSuggestions":5,"nbOfCategoriesSuggestions":3,"nbOfQueriesSuggestions":3,"isDebugEnabled":false,"isNavigatorEnabled":true,"debounceMilliseconds":300,"minimumCharacters":3,"redirects":{"enabled":true,"showSelectableRedirect":true,"showHitsWithRedirect":false,"openInNewWindow":false}},"landingPage":{"query":"","configuration":"[]"},"recommend":{"enabledFBT":false,"enabledRelated":false,"enabledFBTInCart":false,"enabledRelatedInCart":false,"enabledLookingSimilar":0,"limitFBTProducts":6,"limitRelatedProducts":6,"limitTrendingItems":6,"limitLookingSimilar":6,"enabledTrendItems":0,"trendItemFacetName":null,"trendItemFacetValue":null,"isTrendItemsEnabledInPDP":0,"isTrendItemsEnabledInCartPage":0,"isAddToCartEnabledInFBT":false,"isAddToCartEnabledInRelatedProduct":false,"isAddToCartEnabledInTrendsItem":false,"isAddToCartEnabledInLookingSimilar":false,"FBTTitle":"Frequently bought together","relatedProductsTitle":"Related products","trendingItemsTitle":"Trending items","addToCartParams":{"action":"https:\/\/www.eichholtz.com\/en\/checkout\/cart\/add\/","formKey":"cqxto8ZaiPDyUmPs","redirectUrlParam":"uenc"},"isLookingSimilarEnabledInPDP":0,"isLookingSimilarEnabledInCartPage":0,"lookingSimilarTitle":"Looking Similar"},"extensionVersion":"3.17.3","applicationId":"L9823SLXQ4","indexName":"live_magento2_en","baseIndexName":"live_magento2_en","apiKey":"NzIwYzQxMTJmZWVjZjQ1NmQyOGUwZmY3M2EwODliMTEyOTRjNTc4YWZiMjlmODhjYmMyYjlhYzMxYmIxZjQzOXRhZ0ZpbHRlcnM9JnZhbGlkVW50aWw9MTc5MTA0NzIzNw==","attributeFilter":[],"facets":[{"attribute":"fabric","type":"disjunctive","label":"Fabric","searchable":"1","create_rule":"2"},{"attribute":"finish","type":"disjunctive","label":"Finish","searchable":"1","create_rule":"2"},{"attribute":"website_material_filter","type":"disjunctive","label":"Material","searchable":"1","create_rule":"2"},{"attribute":"product_groupcode_filter","type":"disjunctive","label":"Product Group","searchable":"1","create_rule":"2"},{"attribute":"color","type":"disjunctive","label":"Color","searchable":"1","create_rule":"2"},{"attribute":"shape","type":"disjunctive","label":"Shape","searchable":"1","create_rule":"2"}],"areCategoriesInFacets":false,"hitsPerPage":48,"sortingIndices":[{"attribute":"price_sort_order","sort":"asc","sortLabel":"Price ascending","virtualReplica":"1","name":"live_magento2_en_products_price_sort_order_asc","ranking":["asc(price_sort_order)","typo","geo","words","filters","proximity","attribute","exact","custom"],"label":"Price ascending"},{"attribute":"price_sort_order","sort":"desc","sortLabel":"Price descending","virtualReplica":"1","name":"live_magento2_en_products_price_sort_order_desc","ranking":["desc(price_sort_order)","typo","geo","words","filters","proximity","attribute","exact","custom"],"label":"Price descending"},{"attribute":"item_collection_launch","sort":"desc","sortLabel":"New arrivals","virtualReplica":"1","name":"live_magento2_en_products_item_collection_launch_desc","ranking":["desc(item_collection_launch)","typo","geo","words","filters","proximity","attribute","exact","custom"],"label":"New arrivals"}],"isSearchPage":false,"isCategoryPage":false,"isLandingPage":false,"removeBranding":true,"productId":null,"priceKey":".EUR.group_44","priceGroup":"group_44","origFormatedVar":"price.EUR.group_44_original_formated","tierFormatedVar":"price.EUR.group_44_tier_formated","currencyCode":"EUR","currencySymbol":"\u20ac","priceFormat":{"pattern":"\u20ac%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"maxValuesPerFacet":100000,"autofocus":true,"resultPageUrl":"https:\/\/www.eichholtz.com\/en\/catalogsearch\/result\/","request":{"query":"","refinementKey":"","refinementValue":"","categoryId":"","landingPageId":"","path":"","level":"","parentCategory":"","childCategories":[],"url":"https:\/\/www.eichholtz.com\/en\/customer\/account\/login\/"},"showCatsNotIncludedInNavigation":true,"showSuggestionsOnNoResultsPage":true,"baseUrl":"https:\/\/www.eichholtz.com\/en","popularQueries":["Mirror","Side Table","sofa","chair","console","coffee table","dining table","CHANDELIER","table","table lamp"],"useAdaptiveImage":false,"urls":{"logo":"https:\/\/www.eichholtz.com\/static\/version1789478351\/frontend\/Eichholtz\/hyva\/en_GB\/Algolia_AlgoliaSearch\/js\/images\/algolia-logo-blue.svg"},"cookieConfiguration":{"customerTokenCookie":"_ALGOLIA_MAGENTO_AUTH","consentCookieName":"user_allowed_save_cookie","cookieAllowButtonSelector":"#btn-cookie-allow","cookieRestrictionModeEnabled":false,"cookieDuration":"15552000000"},"ccAnalytics":{"enabled":true,"ISSelector":".ais-Hits-item a.result, .ais-InfiniteHits-item a.result","conversionAnalyticsMode":"all","addToCartSelector":".action.primary.tocart","orderedProductIds":[],"disableProductUrlQueryParams":"1"},"isPersonalizationEnabled":false,"personalization":{"enabled":false,"viewedEvents":{"viewProduct":{"eventName":"Viewed Product","enabled":false,"method":"viewedObjectIDs"}},"clickedEvents":{"productClicked":{"eventName":"Product Clicked","enabled":false,"selector":".ais-Hits-item a.result, .ais-InfiniteHits-item a.result","method":"clickedObjectIDs"},"productRecommended":{"eventName":"Recommended Product Clicked","enabled":false,"selector":".products-upsell .product-item","method":"clickedObjectIDs"}},"filterClicked":{"eventName":" : Filter Clicked","enabled":false,"method":"clickedFilters"}},"analytics":{"enabled":false,"delay":"3000","triggerOnUiInteraction":"1","pushInitialSearch":"0"},"now":1790899200,"queue":{"isEnabled":true,"nbOfJobsToRun":6,"retryLimit":2,"nbOfElementsPerIndexingJob":300},"isPreventBackendRenderingEnabled":true,"translations":{"to":"to","or":"or","go":"Go","popularQueries":"You can try one of the popular search queries","seeAll":"See all products","allDepartments":"See all products","seeIn":"","orIn":"or in","noProducts":"No products for query","noResults":"No results","refine":"Refine","selectedFilters":"Selected Filters","clearAll":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\" role=\"img\">
8291<path d=\"M256-213.847 213.847-256l224-224-224-224L256-746.153l224 224 224-224L746.153-704l-224 224 224 224L704-213.847l-224-224-224 224Z\"\/><title>close<\/title><\/svg>\n<span>Clear all filters<\/span>","previousPage":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\" role=\"img\"><path d=\"M560-253.847 333.847-480 560-706.153 602.153-664l-184 184 184 184L560-253.847Z\"\/><title>chevron-left<\/title><\/svg>\n","nextPage":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\" role=\"img\"><path d=\"m517.847-480-184-184L376-706.153 602.153-480 376-253.847 333.847-296l184-184Z\"\/><title>chevron-right<\/title><\/svg>\n","searchFor":"Search for products","relevance":"Relevance","categories":"Categories","products":"Products","suggestions":"Suggestions","searchBy":"Search by","redirectSearchPrompt":"Continue search for","searchForFacetValuesPlaceholder":"Search for other ...","showMore":"Show more products","searchTitle":"Search results for","placeholder":"Search for products, categories, ...","addToCart":"Add to cart","productsNoResults":"Sorry, we couldn\u2019t find any results for:","popularSearches":"Popular searches"},"configuration":{"products":{"retrievable_fields_basic":["objectID","name","sku","url","image_url","thumbnail_url"],"retrievable_fields":["objectID","name","sku","url","image_url","thumbnail_url","in_stock","labels","labels_br","labels_rrp","nav_available","hover_image","custom_item","has_related_products"],"retrievable_fields_extra":["price.group_44","price.group_44_formated","price.group_44_original_formated"]}},"icons":{"search":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\" role=\"img\"><path d=\"M781.692-136.924 530.461-388.155q-30 24.769-69 38.769t-80.692 14q-102.55 0-173.582-71.014t-71.032-173.537q0-102.524 71.014-173.601 71.014-71.076 173.538-71.076 102.523 0 173.6 71.032T625.384-580q0 42.846-14.385 81.846-14.385 39-38.385 67.846l251.231 251.231-42.153 42.153Zm-400.923-258.46q77.308 0 130.962-53.654Q565.385-502.692 565.385-580q0-77.308-53.654-130.962-53.654-53.654-130.962-53.654-77.308 0-130.962 53.654Q196.154-657.308 196.154-580q0 77.308 53.653 130.962 53.654 53.654 130.962 53.654Z\"\/><title>search<\/title><\/svg>\n","category":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\" role=\"img\"><path d=\"M140.001-520v-299.999H440V-520H140.001Zm0 379.999V-440H440v299.999H140.001ZM520-520v-299.999h299.999V-520H520Zm0 379.999V-440h299.999v299.999H520ZM200-579.999h180.001V-760H200v180.001Zm379.999 0H760V-760H579.999v180.001Zm0 379.999H760v-180.001H579.999V-200ZM200-200h180.001v-180.001H200V-200Zm379.999-379.999Zm0 199.998Zm-199.998 0Zm0-199.998Z\"\/><title>grid-view<\/title><\/svg>\n","page":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" role=\"img\">\n<g id=\"concierge\">\n<mask id=\"mask0_2607_194\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"24\" height=\"24\">\n<rect id=\"Bounding box\" width=\"24\" height=\"24\" fill=\"#D9D9D9\"\/>\n<\/mask>\n<g mask=\"url(#mask0_2607_194)\">\n<path id=\"concierge_2\" d=\"M2.03857 11.9225V3.7687H6.03857V5.0647L13.6538 2.8457L20.6538 5.03795V7.61495H15.7693V9.2302L8.41157 11.9225H2.03857ZM3.03857 10.9225H5.03857V4.7687H3.03857V10.9225ZM6.03857 10.9225H8.25382L14.7693 8.53395V7.61495H12.8406L9.91557 8.58395L9.58457 7.62645L12.6906 6.61495H19.6308V5.77645L13.6038 3.9072L6.03857 6.11495V10.9225ZM11.0001 20.9995H22.0001V19.9995H11.0001V20.9995ZM12.0001 18.615H21.0001C21.0001 17.4571 20.6157 16.4542 19.8471 15.6062C19.0786 14.758 18.1296 14.275 17.0001 14.1572V13.2437H16.0001V14.1572C14.8667 14.275 13.9167 14.758 13.1501 15.6062C12.3834 16.4542 12.0001 17.4571 12.0001 18.615ZM13.2021 17.609C13.4032 16.877 13.8052 16.2741 14.4078 15.8005C15.0103 15.3268 15.7077 15.09 16.5001 15.09C17.2886 15.09 17.9799 15.3268 18.5741 15.8005C19.1684 16.2741 19.5662 16.877 19.7673 17.609H13.2021Z\" fill=\"#060208\"\/>\n<\/g>\n<\/g>\n<title>concierge<\/title><\/svg>\n","arrow":"<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\" fill=\"#000000\" role=\"img\">
8291<path d=\"m708.23-254.23-394-393.62V-290h-60v-460h460v60H356.38L750-296l-41.77 41.77Z\"\/><title>arrow-insert<\/title><\/svg>\n"},"swatches":{"color":{"Beige":{"type":"color","value":"#ffefc2"},"Beige | Sand":{"type":"color","value":"#dbc690"},"Black":{"type":"color","value":"#000000"},"Blue":{"type":"color","value":"#163480"},"Bronze":{"type":"color","value":"#382424"},"Brown":{"type":"color","value":"#6b4c03"},"Clear":{"type":"color","value":"#ffffff"},"Copper":{"type":"color","value":"#a64119"},"Gold":{"type":"color","value":"#c9a524"},"Green":{"type":"color","value":"#306115"},"Greige":{"type":"color","value":"#786757"},"Grey":{"type":"color","value":"#8c8c8c"},"Natural":{"type":"color","value":"#d4b082"},"Off-white":{"type":"color","value":"#f7f5ed"},"Orange":{"type":"color","value":"#d17a3d"},"Pink":{"type":"color","value":"#f095c1"},"Purple":{"type":"color","value":"#874a8c"},"Red":{"type":"color","value":"#c93c3c"},"Sand":{"type":"color","value":"#d4c699"},"Silver":{"type":"color","value":"#969696"},"White":{"type":"color","value":"#ffffff"},"White | Off-white":{"type":"color","value":"#f7f7e8"},"Yellow":{"type":"color","value":"#f5d536"}},"finish":{"Antique gold":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/a\/n\/antique_gold.jpg"},"Antique silver":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/a\/n\/antique_silver_2_lr.jpg"},"Brass (antiqued)":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/a\/n\/antique_brass.jpg"},"Brass (brushed)":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/b\/r\/brushed_brass.jpg"},"Bronze":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/b\/r\/bronze_1.jpg"},"Bronze | Gunmetal":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/b\/r\/bronze.jpg"},"Charcoal":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/c\/h\/charcoal.jpg"},"Copper (brushed)":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/b\/r\/brushed_copper.jpg"},"Gunmetal":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/g\/u\/gunmetal.jpg"},"Mirror glass":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/m\/i\/mirror_glass.jpg"},"Steel (brushed)":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/b\/r\/brushed_steel.jpg"},"Weathered oak":{"type":"image","value":"https:\/\/cdn.eichholtz.com\/media\/attribute\/swatch\/\/w\/e\/weathered_oak_68_.jpg"}},"collabs":[]},"availability_values":{"Almost in Stock":{"code":"almost-available","class":"bg-yellow-500","title":"Almost in Stock","index":0},"In Stock":{"code":"available","class":"bg-green-500","title":"In stock","index":0},"Out of Stock":{"code":"unavailable","class":"bg-red-500","title":"Out of stock","index":2}}}; 8292 8293 let autocompleteInitialized = false; 8294 let commonInitialized = false; 8295 let insightsInitialized = false; 8296 8297 async function initAutocomplete() { 8298 if (autocompleteInitialized) { 8299 return 8300 } 8301 8302 autocompleteInitialized = true; 8303 Promise.all([ 8304 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/internals/common.js"), 8305 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/internals/base64.js"), 8306 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/algolia-instantsearch.min.js"), 8307 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/search-insights.min.js"), 8308 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/algolia-search.min.js"), 8309 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/autocomplete/algolia-autocomplete.min.js"), 8310 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/autocomplete/query-suggestions-plugin.min.js"), 8311 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/autocomplete.js"), 8312 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/additional-section.js"), 8313 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/categories.js"), 8314 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/pages.js"), 8315 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/products.js"), 8316 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/suggestions.js"),
8317 ] 8318 ).then(data => { 8319 initCommon(); 8320 initAlgoliaInsights(); 8321 initAlgoliaAutocomplete(); 8322 }); 8323 } 8324 8325 function initInstantSearch() { 8326 Promise.all([ 8327 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/internals/common.js"), 8328 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/internals/base64.js"), 8329 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/algolia-instantsearch.min.js"), 8330 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/search-insights.min.js"), 8331 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/hogan.min.js"), 8332 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/mustache.min.js"), 8333 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/internals/template-engine.js"), 8334 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/instantsearch.js"), 8335 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/algolia-search.min.js"), 8336 ] 8337 ).then(data => { 8338 initCommon(); 8339 initAlgoliaInsights(); 8340 initAlgoliaInstantSearch(); 8341 }); 8342 } 8343 8344 function initRecommended(objectIds) { 8345 Promise.all([ 8346 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/internals/common.js"), 8347 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/internals/base64.js"), 8348 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/algolia-instantsearch.min.js"), 8349 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/search-insights.min.js"), 8350 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/recommend.min.js"), 8351 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Algolia_AlgoliaSearch/js/lib/recommend-js.min.js"), 8352 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/recommend.js"), 8353 blackbird.loadExternalResource("https://www.eichholtz.com/static/version1789478351/frontend/Eichholtz/hyva/en_GB/Blackbird_HyvaAlgoliaSearch/js/template/recommend/products.js"), 8354 ] 8355 ).then(data => { 8356 initCommon(); 8357 initBase64(); 8358 initAlgoliaInsights(); 8359 initAlgoliaRecommended('customer_account_login', objectIds); 8360 }); 8361 } 8362 8363 function initCommon() { 8364 if (commonInitialized) { 8365 return 8366 } 8367 8368 commonInitialized = true 8369 initAlgoliaCommon(); 8370 initBase64(); 8371 window.dispatchEvent(new CustomEvent('algolia-loaded')); 8372 } 8373 8374 if (algoliaConfig.instant.enabled && (algoliaConfig.isCategoryPage || algoliaConfig.isSearchPage)) { 8375 initInstantSearch(); 8376 } 8377 8378 8379 8380 8381 let objectIds = [""]; 8382 8383 if (algoliaConfig.autocomplete.enabled) { 8384 document.getElementById('menu-search-icon').addEventListener('click', async () => { 8385 await initAutocomplete(); 8386 if (typeof algolia !== 'undefined') { 8387 algolia.registerHook('afterAutocompleteStart', function () { 8388 }); 8389 } 8390 8391 setTimeout(() => { 8392 document.querySelector('#algoliaAutocomplete input')?.focus(); 8393 }, 300); 8394 },{once: true}); 8395 } 8396 8397 window.addEventListener('init-algolia-trends', function () { 8398 initCommon(); 8399 initAlgoliaInsights(); 8400 window.dispatchEvent(new CustomEvent('init-algolia-trends-done')); 8401 }); 8402 8403 window.addEventListener('init-algolia-LS', function () { 8404 initCommon(); 8405 initAlgoliaInsights(); 8406 window.dispatchEvent(new CustomEvent('init-algolia-LS-done')); 8407 }); 8408 8409 window.addEventListener('user-allowed-save-cookie', function () { 8410 initAlgoliaInsights(true); 8411 }); 8412 </script>
vendor: 1 bytes, line 8412
8412
8413<script> 8414 window.addEventListener('algolia-loaded', () => { 8415 algolia.registerHook('afterAutocompleteStart', () => { 8416 document.querySelector('#algoliaAutocomplete input')?.focus(); 8417 }); 8418 },{ once: true}) 8419</script>
8419 8420
8420<script> 8421 window.addEventListener('algolia-loaded', () => { 8422 algolia.registerHook('beforeWidgetInitialization', (allWidgetConfiguration) => { 8423 const {currentRefinements} = allWidgetConfiguration; 8424 const originalTransformItems = currentRefinements.transformItems.bind(currentRefinements); 8425 currentRefinements.transformItems = (items) => { 8426 if (items.length !== 0) { 8427 document.getElementById('instant-search-active-filters-label').classList.remove('hidden'); 8428 } else { 8429 document.getElementById('instant-search-active-filters-label').classList.add('hidden'); 8430 } 8431 return originalTransformItems(items); 8432 } 8433 return allWidgetConfiguration; 8434 }); 8435 },{ once: true}) 8436 </script>
vendor: 1 bytes, line 8436
8436
8437<script type="text/json" id="default-section-data"> 8438 {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"AD":{"name":"Andorra"},"AE":{"name":"United Arab Emirates"},"AF":{"name":"Afghanistan"},"AG":{"name":"Antigua & Barbuda"},"AI":{"name":"Anguilla"},"AL":{"name":"Albania","regions":{"702":{"code":"AL-01","name":"Berat"},"703":{"code":"AL-09","name":"Dib\u00ebr"},"704":{"code":"AL-02","name":"Durr\u00ebs"},"705":{"code":"AL-03","name":"Elbasan"},"706":{"code":"AL-04","name":"Fier"},"707":{"code":"AL-05","name":"Gjirokast\u00ebr"},"708":{"code":"AL-06","name":"Kor\u00e7\u00eb"},"709":{"code":"AL-07","name":"Kuk\u00ebs"},"710":{"code":"AL-08","name":"Lezh\u00eb"},"711":{"code":"AL-10","name":"Shkod\u00ebr"},"712":{"code":"AL-11","name":"Tiran\u00eb"},"713":{"code":"AL-12","name":"Vlor\u00eb"}}},"AM":{"name":"Armenia"},"AO":{"name":"Angola"},"AQ":{"name":"Antarctica"},"AR":{"name":"Argentina","regions":{"715":{"code":"AR-B","name":"Buenos Aires"},"716":{"code":"AR-K","name":"Catamarca"},"717":{"code":"AR-H","name":"Chaco"},"718":{"code":"AR-U","name":"Chubut"},"714":{"code":"AR-C","name":"Ciudad Aut\u00f3noma de Buenos Aires"},"719":{"code":"AR-X","name":"C\u00f3rdoba"},"720":{"code":"AR-W","name":"Corrientes"},"721":{"code":"AR-E","name":"Entre R\u00edos"},"722":{"code":"AR-P","name":"Formosa"},"723":{"code":"AR-Y","name":"Jujuy"},"724":{"code":"AR-L","name":"La Pampa"},"725":{"code":"AR-F","name":"La Rioja"},"726":{"code":"AR-M","name":"Mendoza"},"727":{"code":"AR-N","name":"Misiones"},"728":{"code":"AR-Q","name":"Neuqu\u00e9n"},"729":{"code":"AR-R","name":"R\u00edo Negro"},"730":{"code":"AR-A","name":"Salta"},"731":{"code":"AR-J","name":"San Juan"},"732":{"code":"AR-D","name":"San Luis"},"733":{"code":"AR-Z","name":"Santa Cruz"},"734":{"code":"AR-S","name":"Santa Fe"},"735":{"code":"AR-G","name":"Santiago del Estero"},"736":{"code":"AR-V","name":"Tierra del Fuego"},"737":{"code":"AR-T","name":"Tucum\u00e1n"}}},"AS":{"name":"American Samoa"},"AT":{"name":"Austria","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"AU":{"name":"Australia","regions":{"569":{"code":"ACT","name":"Australian Capital Territory"},"570":{"code":"NSW","name":"New South Wales"},"576":{"code":"NT","name":"Northern Territory"},"572":{"code":"QLD","name":"Queensland"},"573":{"code":"SA","name":"South Australia"},"574":{"code":"TAS","name":"Tasmania"},"571":{"code":"VIC","name":"Victoria"},"575":{"code":"WA","name":"Western Australia"}}},"AW":{"name":"Aruba"},"AX":{"name":"\u00c5land Islands"},"AZ":{"name":"Azerbaijan"},"BA":{"name":"Bosnia & Herzegovina"},"BB":{"name":"Barbados"},"BD":{"name":"Bangladesh"},"BE":{"name":"Belgium","regions":{"609":{"code":"VAN","name":"Antwerpen"},"610":{"code":"WBR","name":"Brabant wallon"},"611":{"code":"BRU","name":"Brussels-Capital Region"},"612":{"code":"WHT","name":"Hainaut"},"614":{"code":"WLG","name":"Li\u00e8ge"},"613":{"code":"VLI","name":"Limburg"},"615":{"code":"WLX","name":"Luxembourg"},"616":{"code":"WNA","name":"Namur"},"617":{"code":"VOV","name":"Oost-Vlaanderen"},"618":{"code":"VBR","name":"Vlaams-Brabant"},"619":{"code":"VWV","name":"West-Vlaanderen"}}},"BF":{"name":"Burkina Faso"},"BG":{"name":"Bulgaria","regions":{"747":{"code":"BG-01","name":"Blagoevgrad"},"748":{"code":"BG-02","name":"Burgas"},"754":{"code":"BG-08","name":"Dobrich"},"753":{"code":"BG-07","name":"Gabrovo"},"772":{"code":"BG-26","name":"Haskovo"},"755":{"code":"BG-09","name":"Kardzhali"},"756":{"code":"BG-10","name":"Kyustendil"},"757":{"code":"BG-11","name":"Lovech"},"758":{"code":"BG-12","name":"Montana"},"759":{"code":"BG-13","name":"Pazardzhik"},"760":{"code":"BG-14","name":"Pernik"},"761":{"code":"BG-15","name":"Pleven"},"762":{"code":"BG-16","name":"Plovdiv"},"763":{"code":"BG-17","name":"Razgrad"},"764":{"code":"BG-18","name":"Ruse"},"773":{"code":"BG-27","name":"Shumen"},"765":{"code":"BG-19","name":"Silistra"},"766":{"code":"BG-20","name":"Sliven"},"767":{"code":"BG-21","name":"Smolyan"},"768":{"code":"BG-22","name":"Sofia City"},"769":{"code":"BG-23","name":"Sofia Province"},"770":{"code":"BG-24","name":"Stara Zagora"},"771":{"code":"BG-25","name":"Targovishte"},"749":{"code":"BG-03","name":"Varna"},"750":{"code":"BG-04","name":"Veliko Tarnovo"},"751":{"code":"BG-05","name":"Vidin"},"752":{"code":"BG-06","name":"Vratsa"},"774":{"code":"BG-28","name":"Yambol"}}},"BH":{"name":"Bahrain"},"BI":{"name":"Burundi"},"BJ":{"name":"Benin"},"BL":{"name":"St. Barth\u00e9lemy"},"BM":{"name":"Bermuda"},"BN":{"name":"Brunei"}
8438,"BO":{"name":"Bolivia","regions":{"739":{"code":"BO-H","name":"Chuquisaca"},"738":{"code":"BO-C","name":"Cochabamba"},"740":{"code":"BO-B","name":"El Beni"},"741":{"code":"BO-L","name":"La Paz"},"742":{"code":"BO-O","name":"Oruro"},"743":{"code":"BO-N","name":"Pando"},"744":{"code":"BO-P","name":"Potos\u00ed"},"745":{"code":"BO-S","name":"Santa Cruz"},"746":{"code":"BO-T","name":"Tarija"}}},"BQ":{"name":"Caribbean Netherlands"},"BR":{"name":"Brazil","regions":{"485":{"code":"AC","name":"Acre"},"486":{"code":"AL","name":"Alagoas"},"487":{"code":"AP","name":"Amap\u00e1"},"488":{"code":"AM","name":"Amazonas"},"489":{"code":"BA","name":"Bahia"},"490":{"code":"CE","name":"Cear\u00e1"},"511":{"code":"DF","name":"Distrito Federal"},"491":{"code":"ES","name":"Esp\u00edrito Santo"},"492":{"code":"GO","name":"Goi\u00e1s"},"493":{"code":"MA","name":"Maranh\u00e3o"},"494":{"code":"MT","name":"Mato Grosso"},"495":{"code":"MS","name":"Mato Grosso do Sul"},"496":{"code":"MG","name":"Minas Gerais"},"497":{"code":"PA","name":"Par\u00e1"},"498":{"code":"PB","name":"Para\u00edba"},"499":{"code":"PR","name":"Paran\u00e1"},"500":{"code":"PE","name":"Pernambuco"},"501":{"code":"PI","name":"Piau\u00ed"},"502":{"code":"RJ","name":"Rio de Janeiro"},"503":{"code":"RN","name":"Rio Grande do Norte"},"504":{"code":"RS","name":"Rio Grande do Sul"},"505":{"code":"RO","name":"Rond\u00f4nia"},"506":{"code":"RR","name":"Roraima"},"507":{"code":"SC","name":"Santa Catarina"},"508":{"code":"SP","name":"S\u00e3o Paulo"},"509":{"code":"SE","name":"Sergipe"},"510":{"code":"TO","name":"Tocantins"}}},"BS":{"name":"Bahamas"},"BT":{"name":"Bhutan"},"BV":{"name":"Bouvet Island"},"BW":{"name":"Botswana"},"BY":{"name":"Belarus","regions":{"1101":{"code":"BY-BR","name":"Bresckaja voblas\u0107"},"1102":{"code":"BY-HO","name":"Homie\u013askaja voblas\u0107"},"1103":{"code":"BY-HM","name":"Horad Minsk"},"1104":{"code":"BY-HR","name":"Hrodzienskaja voblas\u0107"},"1105":{"code":"BY-MA","name":"Mahilio\u016dskaja voblas\u0107"},"1106":{"code":"BY-MI","name":"Minskaja voblas\u0107"},"1107":{"code":"BY-VI","name":"Viciebskaja voblas\u0107"}}},"BZ":{"name":"Belize"},"CA":{"name":"Canada","regions":{"66":{"code":"AB","name":"Alberta"},"67":{"code":"BC","name":"British Columbia"},"68":{"code":"MB","name":"Manitoba"},"70":{"code":"NB","name":"New Brunswick"},"69":{"code":"NL","name":"Newfoundland and Labrador"},"72":{"code":"NT","name":"Northwest Territories"},"71":{"code":"NS","name":"Nova Scotia"},"73":{"code":"NU","name":"Nunavut"},"74":{"code":"ON","name":"Ontario"},"75":{"code":"PE","name":"Prince Edward Island"},"76":{"code":"QC","name":"Quebec"},"77":{"code":"SK","name":"Saskatchewan"},"78":{"code":"YT","name":"Yukon Territory"}}},"CC":{"name":"Cocos (Keeling) Islands"},"CD":{"name":"Congo - Kinshasa"},"CF":{"name":"Central African Republic"},"CG":{"name":"Congo - Brazzaville"},"CH":{"name":"Switzerland","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"CI":{"name":"C\u00f4te d\u2019Ivoire"},"CK":{"name":"Cook Islands"},"CL":{"name":"Chile","regions":{"775":{"code":"CL-AI","name":"Ais\u00e9n del General Carlos Iba\u00f1ez del Campo"},"776":{"code":"CL-AN","name":"Antofagasta"},"777":{"code":"CL-AP","name":"Arica y Parinacota"},"779":{"code":"CL-AT","name":"Atacama"},"780":{"code":"CL-BI","name":"Biob\u00edo"},"781":{"code":"CL-CO","name":"Coquimbo"},"778":{"code":"CL-AR","name":"La Araucan\u00eda"},"782":{"code":"CL-LI","name":"Libertador General Bernardo O'Higgins"}
8438,"783":{"code":"CL-LL","name":"Los Lagos"},"784":{"code":"CL-LR","name":"Los R\u00edos"},"785":{"code":"CL-MA","name":"Magallanes"},"786":{"code":"CL-ML","name":"Maule"},"787":{"code":"CL-NB","name":"\u00d1uble"},"788":{"code":"CL-RM","name":"Regi\u00f3n Metropolitana de Santiago"},"789":{"code":"CL-TA","name":"Tarapac\u00e1"},"790":{"code":"CL-VS","name":"Valpara\u00edso"}}},"CM":{"name":"Cameroon"},"CN":{"name":"China","regions":{"620":{"code":"CN-AH","name":"Anhui Sheng"},"621":{"code":"CN-BJ","name":"Beijing Shi"},"622":{"code":"CN-CQ","name":"Chongqing Shi"},"623":{"code":"CN-FJ","name":"Fujian Sheng"},"624":{"code":"CN-GS","name":"Gansu Sheng"},"625":{"code":"CN-GD","name":"Guangdong Sheng"},"626":{"code":"CN-GX","name":"Guangxi Zhuangzu Zizhiqu"},"627":{"code":"CN-GZ","name":"Guizhou Sheng"},"628":{"code":"CN-HI","name":"Hainan Sheng"},"629":{"code":"CN-HE","name":"Hebei Sheng"},"630":{"code":"CN-HL","name":"Heilongjiang Sheng"},"631":{"code":"CN-HA","name":"Henan Sheng"},"632":{"code":"CN-HK","name":"Hong Kong SAR"},"633":{"code":"CN-HB","name":"Hubei Sheng"},"634":{"code":"CN-HN","name":"Hunan Sheng"},"635":{"code":"CN-JS","name":"Jiangsu Sheng"},"636":{"code":"CN-JX","name":"Jiangxi Sheng"},"637":{"code":"CN-JL","name":"Jilin Sheng"},"638":{"code":"CN-LN","name":"Liaoning Sheng"},"639":{"code":"CN-MO","name":"Macao SAR"},"640":{"code":"CN-NM","name":"Nei Mongol Zizhiqu"},"641":{"code":"CN-NX","name":"Ningxia Huizi Zizhiqu"},"642":{"code":"CN-QH","name":"Qinghai Sheng"},"643":{"code":"CN-SN","name":"Shaanxi Sheng"},"644":{"code":"CN-SD","name":"Shandong Sheng"},"645":{"code":"CN-SH","name":"Shanghai Shi"},"646":{"code":"CN-SX","name":"Shanxi Sheng"},"647":{"code":"CN-SC","name":"Sichuan Sheng"},"648":{"code":"CN-TW","name":"Taiwan Sheng"},"649":{"code":"CN-TJ","name":"Tianjin Shi"},"650":{"code":"CN-XJ","name":"Xinjiang Uygur Zizhiqu"},"651":{"code":"CN-XZ","name":"Xizang Zizhiqu"},"652":{"code":"CN-YN","name":"Yunnan Sheng"},"653":{"code":"CN-ZJ","name":"Zhejiang Sheng"}}},"CO":{"name":"Colombia","regions":{"654":{"code":"CO-AMA","name":"Amazonas"},"655":{"code":"CO-ANT","name":"Antioquia"},"656":{"code":"CO-ARA","name":"Arauca"},"657":{"code":"CO-ATL","name":"Atl\u00e1ntico"},"658":{"code":"CO-BOL","name":"Bol\u00edvar"},"659":{"code":"CO-BOY","name":"Boyac\u00e1"},"660":{"code":"CO-CAL","name":"Caldas"},"661":{"code":"CO-CAQ","name":"Caquet\u00e1"},"662":{"code":"CO-CAS","name":"Casanare"},"663":{"code":"CO-CAU","name":"Cauca"},"664":{"code":"CO-CES","name":"Cesar"},"665":{"code":"CO-CHO","name":"Choc\u00f3"},"666":{"code":"CO-COR","name":"C\u00f3rdoba"},"667":{"code":"CO-CUN","name":"Cundinamarca"},"668":{"code":"CO-GUA","name":"Guain\u00eda"},"669":{"code":"CO-GUV","name":"Guaviare"},"670":{"code":"CO-HUL","name":"Huila"},"671":{"code":"CO-LAG","name":"La Guajira"},"672":{"code":"CO-MAG","name":"Magdalena"},"673":{"code":"CO-MET","name":"Meta"},"674":{"code":"CO-NAR","name":"Nari\u00f1o"},"675":{"code":"CO-NSA","name":"Norte de Santander"},"676":{"code":"CO-PUT","name":"Putumayo"},"677":{"code":"CO-QUI","name":"Quind\u00edo"},"678":{"code":"CO-RIS","name":"Risaralda"},"679":{"code":"CO-SAP","name":"San Andr\u00e9s y Providencia"},"680":{"code":"CO-SAN","name":"Santander"},"681":{"code":"CO-SUC","name":"Sucre"},"682":{"code":"CO-TOL","name":"Tolima"},"683":{"code":"CO-VAC","name":"Valle del Cauca"},"684":{"code":"CO-VAU","name":"Vaup\u00e9s"},"685":{"code":"CO-VID","name":"Vichada"}}},"CR":{"name":"Costa Rica","regions":{"1109":{"code":"CR-AL","name":"Alajuela"},"1110":{"code":"CR-CA","name":"Cartago"},"1112":{"code":"CR-GU","name":"Guanacaste"},"1111":{"code":"CR-HE","name":"Heredia"},"1114":{"code":"CR-LI","name":"Lim\u00f3n"},"1113":{"code":"CR-PU","name":"Puntarenas"},"1108":{"code":"CR-SJ","name":"San Jos\u00e9"}}},"CU":{"name":"Cuba"},"CV":{"name":"Cape Verde"},"CW":{"name":"Cura\u00e7ao"},"CX":{"name":"Christmas Island"},"CY":{"name":"Cyprus"},"CZ":{"name":"Czechia","regions":{"1117":{"code":"CZ-31","name":"Jiho\u010desk\u00fd kraj"},"1125":{"code":"CZ-64","name":"Jihomoravsk\u00fd kraj"},"1119":{"code":"CZ-41","name":"Karlovarsk\u00fd kraj"},"1124":{"code":"CZ-63","name":"Kraj Vyso\u010dina"},"1122":{"code":"CZ-52","name":"Kr\u00e1lov\u00e9hradeck\u00fd kraj"},"1121":{"code":"CZ-51","name":"Libereck\u00fd kraj"},"1128":{"code":"CZ-80","name":"Moravskoslezsk\u00fd kraj"}
8438,"1126":{"code":"CZ-71","name":"Olomouck\u00fd kraj"},"1123":{"code":"CZ-53","name":"Pardubick\u00fd kraj"},"1118":{"code":"CZ-32","name":"Plze\u0148sk\u00fd kraj"},"1115":{"code":"CZ-10","name":"Praha, Hlavn\u00ed m\u011bsto"},"1116":{"code":"CZ-20","name":"St\u0159edo\u010desk\u00fd kraj"},"1120":{"code":"CZ-42","name":"\u00dasteck\u00fd kraj"},"1127":{"code":"CZ-72","name":"Zl\u00ednsk\u00fd kraj"}}},"DE":{"name":"Germany","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"}}},"DJ":{"name":"Djibouti"},"DK":{"name":"Denmark","regions":{"791":{"code":"DK-84","name":"Hovedstaden"},"792":{"code":"DK-82","name":"Midtjylland"},"793":{"code":"DK-81","name":"Nordjylland"},"794":{"code":"DK-85","name":"Sj\u00e6lland"},"795":{"code":"DK-83","name":"Syddanmark"}}},"DM":{"name":"Dominica"},"DO":{"name":"Dominican Republic"},"DZ":{"name":"Algeria"},"EC":{"name":"Ecuador","regions":{"796":{"code":"EC-A","name":"Azuay"},"797":{"code":"EC-B","name":"Bol\u00edvar"},"798":{"code":"EC-F","name":"Ca\u00f1ar"},"799":{"code":"EC-C","name":"Carchi"},"800":{"code":"EC-H","name":"Chimborazo"},"801":{"code":"EC-X","name":"Cotopaxi"},"802":{"code":"EC-O","name":"El Oro"},"803":{"code":"EC-E","name":"Esmeraldas"},"804":{"code":"EC-W","name":"Gal\u00e1pagos"},"805":{"code":"EC-G","name":"Guayas"},"806":{"code":"EC-I","name":"Imbabura"},"807":{"code":"EC-L","name":"Loja"},"808":{"code":"EC-R","name":"Los R\u00edos"},"809":{"code":"EC-M","name":"Manab\u00ed"},"810":{"code":"EC-S","name":"Morona Santiago"},"811":{"code":"EC-N","name":"Napo"},"812":{"code":"EC-D","name":"Orellana"},"813":{"code":"EC-Y","name":"Pastaza"},"814":{"code":"EC-P","name":"Pichincha"},"815":{"code":"EC-SE","name":"Santa Elena"},"816":{"code":"EC-SD","name":"Santo Domingo de los Ts\u00e1chilas"},"817":{"code":"EC-U","name":"Sucumb\u00edos"},"818":{"code":"EC-T","name":"Tungurahua"},"819":{"code":"EC-Z","name":"Zamora Chinchipe"}}},"EE":{"name":"Estonia","regions":{"340":{"code":"EE-37","name":"Harjumaa"},"341":{"code":"EE-39","name":"Hiiumaa"},"342":{"code":"EE-44","name":"Ida-Virumaa"},"344":{"code":"EE-51","name":"J\u00e4rvamaa"},"343":{"code":"EE-49","name":"J\u00f5gevamaa"},"346":{"code":"EE-59","name":"L\u00e4\u00e4ne-Virumaa"},"345":{"code":"EE-57","name":"L\u00e4\u00e4nemaa"},"348":{"code":"EE-67","name":"P\u00e4rnumaa"},"347":{"code":"EE-65","name":"P\u00f5lvamaa"},"349":{"code":"EE-70","name":"Raplamaa"},"350":{"code":"EE-74","name":"Saaremaa"},"351":{"code":"EE-78","name":"Tartumaa"},"352":{"code":"EE-82","name":"Valgamaa"},"353":{"code":"EE-84","name":"Viljandimaa"},"354":{"code":"EE-86","name":"V\u00f5rumaa"}}},"EG":{"name":"Egypt"},"EH":{"name":"Western Sahara"},"ER":{"name":"Eritrea"},"ES":{"name":"Spain","regions":{"130":{"code":"A Coru\u0441a","name":"A Coru\u00f1a"},"131":{"code":"Alava","name":"Alava"},"132":{"code":"Albacete","name":"Albacete"},"133":{"code":"Alicante","name":"Alicante"},"134":{"code":"Almeria","name":"Almeria"},"135":{"code":"Asturias","name":"Asturias"},"136":{"code":"Avila","name":"Avila"},"137":{"code":"Badajoz","name":"Badajoz"},"138":{"code":"Baleares","name":"Baleares"},"139":{"code":"Barcelona","name":"Barcelona"},"140":{"code":"Burgos","name":"Burgos"},"141":{"code":"Caceres","name":"Caceres"},"142":{"code":"Cadiz","name":"Cadiz"},"143":{"code":"Cantabria","name":"Cantabria"},"144":{"code":"Castellon","name":"Castellon"},"145":{"code":"Ceuta","name":"Ceuta"},"146":{"code":"Ciudad Real","name":"Ciudad Real"},"147":{"code":"Cordoba","name":"Cordoba"},"148":{"code":"Cuenca","name":"Cuenca"},"149":{"code":"Girona","name":"Girona"},"150":{"code":"Granada","name":"Granada"},"151":{"code":"Guadalajara","name":"Guadalajara"},"152":{"code":"Guipuzcoa","name":"Guipuzcoa"},"153":{"code":"Huelva","name":"Huelva"},"154":{"code":"Huesca","name":"Huesca"},"155":{"code":"Jaen","name":"Jaen"},"156":{"code":"La Rioja","name":"La Rioja"},"157":{"code":"Las Palmas","name":"Las Palmas"},"158":{"code":"Leon","name":"Leon"},"159":{"code":"Lleida","name":"Lleida"},"160":{"code":"Lugo","name":"Lugo"},"161":{"code":"Madrid","name":"Madrid"},"162":{"code":"Malaga","name":"Malaga"},"163":{"code":"Melilla","name":"Melilla"},"164":{"code":"Murcia","name":"Murcia"},"165":{"code":"Navarra","name":"Navarra"},"166":{"code":"Ourense","name":"Ourense"},"167":{"code":"Palencia","name":"Palencia"},"168":{"code":"Pontevedra","name":"Pontevedra"},"169":{"code":"Salamanca","name":"Salamanca"},"170":{"code":"Santa Cruz de Tenerife","name":"Santa Cruz de Tenerife"},"171":{"code":"Segovia","name":"Segovia"},"172":{"code":"Sevilla","name":"Sevilla"},"173":{"code":"Soria","name":"Soria"},"174":{"code":"Tarragona","name":"Tarragona"},"175":{"code":"Teruel","name":"Teruel"},"176":{"code":"Toledo","name":"Toledo"},"177":{"code":"Valencia","name":"Valencia"},"178":{"code":"Valladolid","name":"Valladolid"}
8438,"179":{"code":"Vizcaya","name":"Vizcaya"},"180":{"code":"Zamora","name":"Zamora"},"181":{"code":"Zaragoza","name":"Zaragoza"}}},"ET":{"name":"Ethiopia"},"FI":{"name":"Finland","regions":{"339":{"code":"Ahvenanmaa","name":"Ahvenanmaa"},"333":{"code":"Etel\u00e4-Karjala","name":"Etel\u00e4-Karjala"},"326":{"code":"Etel\u00e4-Pohjanmaa","name":"Etel\u00e4-Pohjanmaa"},"325":{"code":"Etel\u00e4-Savo","name":"Etel\u00e4-Savo"},"337":{"code":"It\u00e4-Uusimaa","name":"It\u00e4-Uusimaa"},"322":{"code":"Kainuu","name":"Kainuu"},"335":{"code":"Kanta-H\u00e4me","name":"Kanta-H\u00e4me"},"330":{"code":"Keski-Pohjanmaa","name":"Keski-Pohjanmaa"},"331":{"code":"Keski-Suomi","name":"Keski-Suomi"},"338":{"code":"Kymenlaakso","name":"Kymenlaakso"},"320":{"code":"Lappi","name":"Lappi"},"334":{"code":"P\u00e4ij\u00e4t-H\u00e4me","name":"P\u00e4ij\u00e4t-H\u00e4me"},"328":{"code":"Pirkanmaa","name":"Pirkanmaa"},"327":{"code":"Pohjanmaa","name":"Pohjanmaa"},"323":{"code":"Pohjois-Karjala","name":"Pohjois-Karjala"},"321":{"code":"Pohjois-Pohjanmaa","name":"Pohjois-Pohjanmaa"},"324":{"code":"Pohjois-Savo","name":"Pohjois-Savo"},"329":{"code":"Satakunta","name":"Satakunta"},"336":{"code":"Uusimaa","name":"Uusimaa"},"332":{"code":"Varsinais-Suomi","name":"Varsinais-Suomi"}}},"FJ":{"name":"Fiji"},"FK":{"name":"Falkland Islands"},"FM":{"name":"Micronesia"},"FO":{"name":"Faroe Islands"},"FR":{"name":"France","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"},"185":{"code":"4","name":"Alpes-de-Haute-Provence"},"187":{"code":"6","name":"Alpes-Maritimes"},"188":{"code":"7","name":"Ard\u00e8che"},"189":{"code":"8","name":"Ardennes"},"190":{"code":"9","name":"Ari\u00e8ge"},"191":{"code":"10","name":"Aube"},"192":{"code":"11","name":"Aude"},"193":{"code":"12","name":"Aveyron"},"249":{"code":"67","name":"Bas-Rhin"},"194":{"code":"13","name":"Bouches-du-Rh\u00f4ne"},"195":{"code":"14","name":"Calvados"},"196":{"code":"15","name":"Cantal"},"197":{"code":"16","name":"Charente"},"198":{"code":"17","name":"Charente-Maritime"},"199":{"code":"18","name":"Cher"},"200":{"code":"19","name":"Corr\u00e8ze"},"201":{"code":"2A","name":"Corse-du-Sud"},"203":{"code":"21","name":"C\u00f4te-d'Or"},"204":{"code":"22","name":"C\u00f4tes-d'Armor"},"205":{"code":"23","name":"Creuse"},"261":{"code":"79","name":"Deux-S\u00e8vres"},"206":{"code":"24","name":"Dordogne"},"207":{"code":"25","name":"Doubs"},"208":{"code":"26","name":"Dr\u00f4me"},"273":{"code":"91","name":"Essonne"},"209":{"code":"27","name":"Eure"},"210":{"code":"28","name":"Eure-et-Loir"},"211":{"code":"29","name":"Finist\u00e8re"},"212":{"code":"30","name":"Gard"},"214":{"code":"32","name":"Gers"},"215":{"code":"33","name":"Gironde"},"250":{"code":"68","name":"Haut-Rhin"},"202":{"code":"2B","name":"Haute-Corse"},"213":{"code":"31","name":"Haute-Garonne"},"225":{"code":"43","name":"Haute-Loire"},"234":{"code":"52","name":"Haute-Marne"},"252":{"code":"70","name":"Haute-Sa\u00f4ne"},"256":{"code":"74","name":"Haute-Savoie"},"269":{"code":"87","name":"Haute-Vienne"},"186":{"code":"5","name":"Hautes-Alpes"},"247":{"code":"65","name":"Hautes-Pyr\u00e9n\u00e9es"},"274":{"code":"92","name":"Hauts-de-Seine"},"216":{"code":"34","name":"H\u00e9rault"},"217":{"code":"35","name":"Ille-et-Vilaine"},"218":{"code":"36","name":"Indre"},"219":{"code":"37","name":"Indre-et-Loire"},"220":{"code":"38","name":"Is\u00e8re"},"221":{"code":"39","name":"Jura"},"222":{"code":"40","name":"Landes"},"223":{"code":"41","name":"Loir-et-Cher"},"224":{"code":"42","name":"Loire"},"226":{"code":"44","name":"Loire-Atlantique"},"227":{"code":"45","name":"Loiret"},"228":{"code":"46","name":"Lot"},"229":{"code":"47","name":"Lot-et-Garonne"},"230":{"code":"48","name":"Loz\u00e8re"},"231":{"code":"49","name":"Maine-et-Loire"},"232":{"code":"50","name":"Manche"},"233":{"code":"51","name":"Marne"},"235":{"code":"53","name":"Mayenne"},"236":{"code":"54","name":"Meurthe-et-Moselle"},"237":{"code":"55","name":"Meuse"},"238":{"code":"56","name":"Morbihan"},"239":{"code":"57","name":"Moselle"},"240":{"code":"58","name":"Ni\u00e8vre"},"241":{"code":"59","name":"Nord"},"242":{"code":"60","name":"Oise"},"243":{"code":"61","name":"Orne"},"257":{"code":"75","name":"Paris"},"244":{"code":"62","name":"Pas-de-Calais"},"245":{"code":"63","name":"Puy-de-D\u00f4me"},"246":{"code":"64","name":"Pyr\u00e9n\u00e9es-Atlantiques"},"248":{"code":"66","name":"Pyr\u00e9n\u00e9es-Orientales"},"251":{"code":"69","name":"Rh\u00f4ne"},"253":{"code":"71","name":"Sa\u00f4ne-et-Loire"},"254":{"code":"72","name":"Sarthe"},"255":{"code":"73","name":"Savoie"},"259":{"code":"77","name":"Seine-et-Marne"},"258":{"code":"76","name":"Seine-Maritime"},"275":{"code":"93","name":"Seine-Saint-Denis"},"262":{"code":"80","name":"Somme"},"263":{"code":"81","name":"Tarn"},"264":{"code":"82","name":"Tarn-et-Garonne"},"272":{"code":"90","name":"Territoire-de-Belfort"},"277":{"code":"95","name":"Val-d'Oise"}
8438,"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"GA":{"name":"Gabon"},"GB":{"name":"United Kingdom"},"GD":{"name":"Grenada"},"GE":{"name":"Georgia"},"GF":{"name":"French Guiana"},"GG":{"name":"Guernsey"},"GH":{"name":"Ghana"},"GI":{"name":"Gibraltar"},"GL":{"name":"Greenland"},"GM":{"name":"Gambia"},"GN":{"name":"Guinea"},"GP":{"name":"Guadeloupe"},"GQ":{"name":"Equatorial Guinea"},"GR":{"name":"Greece","regions":{"833":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"820":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"821":{"code":"GR-I","name":"Attik\u00ed"},"822":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"823":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"824":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"825":{"code":"GR-D","name":"\u00cdpeiros"},"826":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"827":{"code":"GR-M","name":"Kr\u00edti"},"828":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"829":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"830":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"},"831":{"code":"GR-E","name":"Thessal\u00eda"},"832":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"GS":{"name":"South Georgia & South Sandwich Islands"},"GT":{"name":"Guatemala"},"GU":{"name":"Guam"},"GW":{"name":"Guinea-Bissau"},"GY":{"name":"Guyana","regions":{"834":{"code":"GY-BA","name":"Barima-Waini"},"835":{"code":"GY-CU","name":"Cuyuni-Mazaruni"},"836":{"code":"GY-DE","name":"Demerara-Mahaica"},"837":{"code":"GY-EB","name":"East Berbice-Corentyne"},"838":{"code":"GY-ES","name":"Essequibo Islands-West Demerara"},"839":{"code":"GY-MA","name":"Mahaica-Berbice"},"840":{"code":"GY-PM","name":"Pomeroon-Supenaam"},"841":{"code":"GY-PT","name":"Potaro-Siparuni"},"842":{"code":"GY-UD","name":"Upper Demerara-Berbice"},"843":{"code":"GY-UT","name":"Upper Takutu-Upper Essequibo"}}},"HK":{"name":"Hong Kong SAR China"},"HM":{"name":"Heard & McDonald Islands"},"HN":{"name":"Honduras"},"HR":{"name":"Croatia","regions":{"518":{"code":"HR-07","name":"Bjelovarsko-bilogorska \u017eupanija"},"523":{"code":"HR-12","name":"Brodsko-posavska \u017eupanija"},"530":{"code":"HR-19","name":"Dubrova\u010dko-neretvanska \u017eupanija"},"532":{"code":"HR-21","name":"Grad Zagreb"},"529":{"code":"HR-18","name":"Istarska \u017eupanija"},"515":{"code":"HR-04","name":"Karlova\u010dka \u017eupanija"},"517":{"code":"HR-06","name":"Koprivni\u010dko-kri\u017eeva\u010dka \u017eupanija"},"513":{"code":"HR-02","name":"Krapinsko-zagorska \u017eupanija"},"520":{"code":"HR-09","name":"Li\u010dko-senjska \u017eupanija"},"531":{"code":"HR-20","name":"Me\u0111imurska \u017eupanija"},"525":{"code":"HR-14","name":"Osje\u010dko-baranjska \u017eupanija"},"522":{"code":"HR-11","name":"Po\u017ee\u0161ko-slavonska \u017eupanija"},"519":{"code":"HR-08","name":"Primorsko-goranska \u017eupanija"},"526":{"code":"HR-15","name":"\u0160ibensko-kninska \u017eupanija"},"514":{"code":"HR-03","name":"Sisa\u010dko-moslava\u010dka \u017eupanija"},"528":{"code":"HR-17","name":"Splitsko-dalmatinska \u017eupanija"},"516":{"code":"HR-05","name":"Vara\u017edinska \u017eupanija"},"521":{"code":"HR-10","name":"Viroviti\u010dko-podravska \u017eupanija"},"527":{"code":"HR-16","name":"Vukovarsko-srijemska \u017eupanija"},"524":{"code":"HR-13","name":"Zadarska \u017eupanija"},"512":{"code":"HR-01","name":"Zagreba\u010dka \u017eupanija"}}},"HT":{"name":"Haiti"},"HU":{"name":"Hungary"},"ID":{"name":"Indonesia"},"IE":{"name":"Ireland"},"IL":{"name":"Israel"},"IM":{"name":"Isle of Man"},"IN":{"name":"India","regions":{"533":{"code":"AN","name":"Andaman and Nicobar Islands"},"534":{"code":"AP","name":"Andhra Pradesh"},"535":{"code":"AR","name":"Arunachal Pradesh"},"536":{"code":"AS","name":"Assam"},"537":{"code":"BR","name":"Bihar"},"538":{"code":"CH","name":"Chandigarh"},"539":{"code":"CT","name":"Chhattisgarh"},"540":{"code":"DN","name":"Dadra and Nagar Haveli"},"541":{"code":"DD","name":"Daman and Diu"},"542":{"code":"DL","name":"Delhi"},"543":{"code":"GA","name":"Goa"},"544":{"code":"GJ","name":"Gujarat"},"545":{"code":"HR","name":"Haryana"},"546":{"code":"HP","name":"Himachal Pradesh"},"547":{"code":"JK","name":"Jammu and Kashmir"},"548":{"code":"JH","name":"Jharkhand"},"549":{"code":"KA","name":"Karnataka"},"550":{"code":"KL","name":"Kerala"},"1156":{"code":"LA","name":"Ladakh"},"551":{"code":"LD","name":"Lakshadweep"},"552":{"code":"MP","name":"Madhya Pradesh"},"553":{"code":"MH","name":"Maharashtra"},"554":{"code":"MN","name":"Manipur"},"555":{"code":"ML","name":"Meghalaya"},"556":{"code":"MZ","name":"Mizoram"},"557":{"code":"NL","name":"Nagaland"}
8438,"558":{"code":"OR","name":"Odisha"},"559":{"code":"PY","name":"Puducherry"},"560":{"code":"PB","name":"Punjab"},"561":{"code":"RJ","name":"Rajasthan"},"562":{"code":"SK","name":"Sikkim"},"563":{"code":"TN","name":"Tamil Nadu"},"564":{"code":"TG","name":"Telangana"},"565":{"code":"TR","name":"Tripura"},"566":{"code":"UP","name":"Uttar Pradesh"},"567":{"code":"UT","name":"Uttarakhand"},"568":{"code":"WB","name":"West Bengal"}}},"IO":{"name":"British Indian Ocean Territory"},"IQ":{"name":"Iraq"},"IR":{"name":"Iran"},"IS":{"name":"Iceland","regions":{"850":{"code":"IS-07","name":"Austurland"},"844":{"code":"IS-01","name":"H\u00f6fu\u00f0borgarsv\u00e6\u00f0i"},"849":{"code":"IS-06","name":"Nor\u00f0urland eystra"},"848":{"code":"IS-05","name":"Nor\u00f0urland vestra"},"851":{"code":"IS-08","name":"Su\u00f0urland"},"845":{"code":"IS-02","name":"Su\u00f0urnes"},"847":{"code":"IS-04","name":"Vestfir\u00f0ir"},"846":{"code":"IS-03","name":"Vesturland"}}},"IT":{"name":"Italy","regions":{"852":{"code":"AG","name":"Agrigento"},"853":{"code":"AL","name":"Alessandria"},"854":{"code":"AN","name":"Ancona"},"855":{"code":"AO","name":"Aosta"},"857":{"code":"AR","name":"Arezzo"},"858":{"code":"AP","name":"Ascoli-Piceno"},"859":{"code":"AT","name":"Asti"},"860":{"code":"AV","name":"Avellino"},"861":{"code":"BA","name":"Bari"},"862":{"code":"BT","name":"Barletta-Andria-Trani"},"863":{"code":"BL","name":"Belluno"},"864":{"code":"BN","name":"Benevento"},"865":{"code":"BG","name":"Bergamo"},"866":{"code":"BI","name":"Biella"},"867":{"code":"BO","name":"Bologna"},"868":{"code":"BZ","name":"Bolzano"},"869":{"code":"BS","name":"Brescia"},"870":{"code":"BR","name":"Brindisi"},"871":{"code":"CA","name":"Cagliari"},"872":{"code":"CL","name":"Caltanissetta"},"873":{"code":"CB","name":"Campobasso"},"874":{"code":"CI","name":"Carbonia Iglesias"},"875":{"code":"CE","name":"Caserta"},"876":{"code":"CT","name":"Catania"},"877":{"code":"CZ","name":"Catanzaro"},"878":{"code":"CH","name":"Chieti"},"879":{"code":"CO","name":"Como"},"880":{"code":"CS","name":"Cosenza"},"881":{"code":"CR","name":"Cremona"},"882":{"code":"KR","name":"Crotone"},"883":{"code":"CN","name":"Cuneo"},"884":{"code":"EN","name":"Enna"},"885":{"code":"FM","name":"Fermo"},"886":{"code":"FE","name":"Ferrara"},"887":{"code":"FI","name":"Firenze"},"888":{"code":"FG","name":"Foggia"},"889":{"code":"FC","name":"Forli-Cesena"},"890":{"code":"FR","name":"Frosinone"},"891":{"code":"GE","name":"Genova"},"892":{"code":"GO","name":"Gorizia"},"893":{"code":"GR","name":"Grosseto"},"894":{"code":"IM","name":"Imperia"},"895":{"code":"IS","name":"Isernia"},"856":{"code":"AQ","name":"L'Aquila"},"896":{"code":"SP","name":"La-Spezia"},"897":{"code":"LT","name":"Latina"},"898":{"code":"LE","name":"Lecce"},"899":{"code":"LC","name":"Lecco"},"900":{"code":"LI","name":"Livorno"},"901":{"code":"LO","name":"Lodi"},"902":{"code":"LU","name":"Lucca"},"903":{"code":"MC","name":"Macerata"},"904":{"code":"MN","name":"Mantova"},"905":{"code":"MS","name":"Massa-Carrara"},"906":{"code":"MT","name":"Matera"},"907":{"code":"VS","name":"Medio Campidano"},"908":{"code":"ME","name":"Messina"},"909":{"code":"MI","name":"Milano"},"910":{"code":"MO","name":"Modena"},"911":{"code":"MB","name":"Monza-Brianza"},"912":{"code":"NA","name":"Napoli"},"913":{"code":"NO","name":"Novara"},"914":{"code":"NU","name":"Nuoro"},"915":{"code":"OG","name":"Ogliastra"},"916":{"code":"OT","name":"Olbia Tempio"},"917":{"code":"OR","name":"Oristano"},"918":{"code":"PD","name":"Padova"},"919":{"code":"PA","name":"Palermo"},"920":{"code":"PR","name":"Parma"},"921":{"code":"PV","name":"Pavia"},"922":{"code":"PG","name":"Perugia"},"923":{"code":"PU","name":"Pesaro-Urbino"},"924":{"code":"PE","name":"Pescara"},"925":{"code":"PC","name":"Piacenza"},"926":{"code":"PI","name":"Pisa"},"927":{"code":"PT","name":"Pistoia"},"928":{"code":"PN","name":"Pordenone"},"929":{"code":"PZ","name":"Potenza"},"930":{"code":"PO","name":"Prato"},"931":{"code":"RG","name":"Ragusa"},"932":{"code":"RA","name":"Ravenna"},"933":{"code":"RC","name":"Reggio-Calabria"},"934":{"code":"RE","name":"Reggio-Emilia"},"935":{"code":"RI","name":"Rieti"},"936":{"code":"RN","name":"Rimini"},"937":{"code":"RM","name":"Roma"},"938":{"code":"RO","name":"Rovigo"},"939":{"code":"SA","name":"Salerno"},"940":{"code":"SS","name":"Sassari"},"941":{"code":"SV","name":"Savona"},"942":{"code":"SI","name":"Siena"},"943":{"code":"SR","name":"Siracusa"},"944":{"code":"SO","name":"Sondrio"},"945":{"code":"TA","name":"Taranto"},"946":{"code":"TE","name":"Teramo"},"947":{"code":"TR","name":"Terni"},"948":{"code":"TO","name":"Torino"},"949":{"code":"TP","name":"Trapani"},"950":{"code":"TN","name":"Trento"},"951":{"code":"TV","name":"Treviso"},"952":{"code":"TS","name":"Trieste"},"953":{"code":"UD","name":"Udine"},"954":{"code":"VA","name":"Varese"},"955":{"code":"VE","name":"Venezia"},"956":{"code":"VB","name":"Verbania"},"957":{"code":"VC","name":"Vercelli"},"958":{"code":"VR","name":"Verona"}
8438,"959":{"code":"VV","name":"Vibo-Valentia"},"960":{"code":"VI","name":"Vicenza"},"961":{"code":"VT","name":"Viterbo"}}},"JE":{"name":"Jersey"},"JM":{"name":"Jamaica"},"JO":{"name":"Jordan"},"JP":{"name":"Japan"},"KE":{"name":"Kenya"},"KG":{"name":"Kyrgyzstan"},"KH":{"name":"Cambodia"},"KI":{"name":"Kiribati"},"KM":{"name":"Comoros"},"KN":{"name":"St. Kitts & Nevis"},"KP":{"name":"North Korea"},"KR":{"name":"South Korea"},"KW":{"name":"Kuwait"},"KY":{"name":"Cayman Islands"},"KZ":{"name":"Kazakhstan"},"LA":{"name":"Laos"},"LB":{"name":"Lebanon"},"LC":{"name":"St. Lucia"},"LI":{"name":"Liechtenstein"},"LK":{"name":"Sri Lanka"},"LR":{"name":"Liberia"},"LS":{"name":"Lesotho"},"LT":{"name":"Lithuania","regions":{"475":{"code":"LT-AL","name":"Alytaus Apskritis"},"476":{"code":"LT-KU","name":"Kauno Apskritis"},"477":{"code":"LT-KL","name":"Klaip\u0117dos Apskritis"},"478":{"code":"LT-MR","name":"Marijampol\u0117s Apskritis"},"479":{"code":"LT-PN","name":"Panev\u0117\u017eio Apskritis"},"480":{"code":"LT-SA","name":"\u0160iauli\u0173 Apskritis"},"481":{"code":"LT-TA","name":"Taurag\u0117s Apskritis"},"482":{"code":"LT-TE","name":"Tel\u0161i\u0173 Apskritis"},"483":{"code":"LT-UT","name":"Utenos Apskritis"},"484":{"code":"LT-VL","name":"Vilniaus Apskritis"}}},"LU":{"name":"Luxembourg"},"LV":{"name":"Latvia","regions":{"471":{"code":"\u0100da\u017eu novads","name":"\u0100da\u017eu novads"},"366":{"code":"Aglonas novads","name":"Aglonas novads"},"367":{"code":"LV-AI","name":"Aizkraukles novads"},"368":{"code":"Aizputes novads","name":"Aizputes novads"},"369":{"code":"Akn\u012bstes novads","name":"Akn\u012bstes novads"},"370":{"code":"Alojas novads","name":"Alojas novads"},"371":{"code":"Alsungas novads","name":"Alsungas novads"},"372":{"code":"LV-AL","name":"Al\u016bksnes novads"},"373":{"code":"Amatas novads","name":"Amatas novads"},"374":{"code":"Apes novads","name":"Apes novads"},"375":{"code":"Auces novads","name":"Auces novads"},"376":{"code":"Bab\u012btes novads","name":"Bab\u012btes novads"},"377":{"code":"Baldones novads","name":"Baldones novads"},"378":{"code":"Baltinavas novads","name":"Baltinavas novads"},"379":{"code":"LV-BL","name":"Balvu novads"},"380":{"code":"LV-BU","name":"Bauskas novads"},"381":{"code":"Bever\u012bnas novads","name":"Bever\u012bnas novads"},"382":{"code":"Broc\u0113nu novads","name":"Broc\u0113nu novads"},"383":{"code":"Burtnieku novads","name":"Burtnieku novads"},"384":{"code":"Carnikavas novads","name":"Carnikavas novads"},"387":{"code":"LV-CE","name":"C\u0113su novads"},"385":{"code":"Cesvaines novads","name":"Cesvaines novads"},"386":{"code":"Ciblas novads","name":"Ciblas novads"},"388":{"code":"Dagdas novads","name":"Dagdas novads"},"355":{"code":"LV-DGV","name":"Daugavpils"},"389":{"code":"LV-DA","name":"Daugavpils novads"},"390":{"code":"LV-DO","name":"Dobeles novads"},"391":{"code":"Dundagas novads","name":"Dundagas novads"},"392":{"code":"Durbes novads","name":"Durbes novads"},"393":{"code":"Engures novads","name":"Engures novads"},"472":{"code":"\u0112rg\u013cu novads","name":"\u0112rg\u013cu novads"},"394":{"code":"Garkalnes novads","name":"Garkalnes novads"},"395":{"code":"Grobi\u0146as novads","name":"Grobi\u0146as novads"},"396":{"code":"LV-GU","name":"Gulbenes novads"},"397":{"code":"Iecavas novads","name":"Iecavas novads"},"398":{"code":"Ik\u0161\u0137iles novads","name":"Ik\u0161\u0137iles novads"},"399":{"code":"Il\u016bkstes novads","name":"Il\u016bkstes novads"},"400":{"code":"In\u010dukalna novads","name":"In\u010dukalna novads"},"401":{"code":"Jaunjelgavas novads","name":"Jaunjelgavas novads"},"402":{"code":"Jaunpiebalgas novads","name":"Jaunpiebalgas novads"},"403":{"code":"Jaunpils novads","name":"Jaunpils novads"},"357":{"code":"J\u0113kabpils","name":"J\u0113kabpils"},"405":{"code":"LV-JK","name":"J\u0113kabpils novads"},"356":{"code":"LV-JEL","name":"Jelgava"},"404":{"code":"LV-JL","name":"Jelgavas novads"},"358":{"code":"LV-JUR","name":"J\u016brmala"},"406":{"code":"Kandavas novads","name":"Kandavas novads"},"412":{"code":"K\u0101rsavas novads","name":"K\u0101rsavas novads"},"473":{"code":"\u0136eguma novads","name":"\u0136eguma novads"},"474":{"code":"\u0136ekavas novads","name":"\u0136ekavas novads"},"407":{"code":"Kokneses novads","name":"Kokneses novads"},"410":{"code":"LV-KR","name":"Kr\u0101slavas novads"},"408":{"code":"Krimuldas novads","name":"Krimuldas novads"},"409":{"code":"Krustpils novads","name":"Krustpils novads"},"411":{"code":"LV-KU","name":"Kuld\u012bgas novads"},"413":{"code":"Lielv\u0101rdes novads","name":"Lielv\u0101rdes novads"},"359":{"code":"LV-LPX","name":"Liep\u0101ja"},"360":{"code":"LV-LE","name":"Liep\u0101jas novads"},"417":{"code":"L\u012bgatnes novads","name":"L\u012bgatnes novads"},"414":{"code":"LV-LM","name":"Limba\u017eu novads"},"418":{"code":"L\u012bv\u0101nu novads","name":"L\u012bv\u0101nu novads"},"415":{"code":"Lub\u0101nas novads","name":"Lub\u0101nas novads"},"416":{"code":"LV-LU","name":"Ludzas novads"},"419":{"code":"LV-MA","name":"Madonas novads"},"421":{"code":"M\u0101lpils novads","name":"M\u0101lpils novads"},"422":{"code":"M\u0101rupes novads","name":"M\u0101rupes novads"},"420":{"code":"Mazsalacas novads","name":"Mazsalacas novads"},"423":{"code":"Nauk\u0161\u0113nu novads","name":"Nauk\u0161\u0113nu novads"},"424":{"code":"Neretas novads","name":"Neretas novads"},"425":{"code":"N\u012bcas novads","name":"N\u012bcas novads"},"426":{"code":"LV-OG","name":"Ogres novads"},"427":{"code":"Olaines novads","name":"Olaines novads"},"428":{"code":"Ozolnieku novads","name":"Ozolnieku novads"},"432":{"code":"P\u0101rgaujas novads","name":"P\u0101rgaujas novads"},"433":{"code":"P\u0101vilostas novads","name":"P\u0101vilostas novads"},"434":{"code":"P\u013cavi\u0146u novads","name":"P\u013cavi\u0146u novads"},"429":{"code":"LV-PR","name":"Prei\u013cu novads"},"430":{"code":"Priekules novads","name":"Priekules novads"},"431":{"code":"Prieku\u013cu novads","name":"Prieku\u013cu novads"},"435":{"code":"Raunas novads","name":"Raunas novads"},"361":{"code":"LV-REZ","name":"R\u0113zekne"},"442":{"code":"LV-RE","name":"R\u0113zeknes novads"},"436":{"code":"Riebi\u0146u novads","name":"Riebi\u0146u novads"},"362":{"code":"LV-RIX","name":"R\u012bga"},"363":{"code":"LV-RI","name":"R\u012bgas novads"},"437":{"code":"Rojas novads","name":"Rojas novads"},"438":{"code":"Ropa\u017eu novads","name":"Ropa\u017eu novads"},"439":{"code":"Rucavas novads","name":"Rucavas novads"},"440":{"code":"Rug\u0101ju novads","name":"Rug\u0101ju novads"},"443":{"code":"R\u016bjienas novads","name":"R\u016bjienas novads"},"441":{"code":"Rund\u0101les novads","name":"Rund\u0101les novads"},"444":{"code":"Salacgr\u012bvas novads","name":"Salacgr\u012bvas novads"},"445":{"code":"Salas novads","name":"Salas novads"},"446":{"code":"Salaspils novads","name":"Salaspils novads"},"447":{"code":"LV-SA","name":"Saldus novads"},"448":{"code":"Saulkrastu novads","name":"Saulkrastu novads"},"455":{"code":"S\u0113jas novads","name":"S\u0113jas novads"},"449":{"code":"Siguldas novads","name":"Siguldas novads"}
8438,"451":{"code":"Skr\u012bveru novads","name":"Skr\u012bveru novads"},"450":{"code":"Skrundas novads","name":"Skrundas novads"},"452":{"code":"Smiltenes novads","name":"Smiltenes novads"},"453":{"code":"Stopi\u0146u novads","name":"Stopi\u0146u novads"},"454":{"code":"Stren\u010du novads","name":"Stren\u010du novads"},"456":{"code":"LV-TA","name":"Talsu novads"},"458":{"code":"T\u0113rvetes novads","name":"T\u0113rvetes novads"},"457":{"code":"LV-TU","name":"Tukuma novads"},"459":{"code":"Vai\u0146odes novads","name":"Vai\u0146odes novads"},"460":{"code":"LV-VK","name":"Valkas novads"},"364":{"code":"Valmiera","name":"Valmiera"},"461":{"code":"LV-VM","name":"Valmieras novads"},"462":{"code":"Varak\u013c\u0101nu novads","name":"Varak\u013c\u0101nu novads"},"469":{"code":"V\u0101rkavas novads","name":"V\u0101rkavas novads"},"463":{"code":"Vecpiebalgas novads","name":"Vecpiebalgas novads"},"464":{"code":"Vecumnieku novads","name":"Vecumnieku novads"},"365":{"code":"LV-VEN","name":"Ventspils"},"465":{"code":"LV-VE","name":"Ventspils novads"},"466":{"code":"Vies\u012btes novads","name":"Vies\u012btes novads"},"467":{"code":"Vi\u013cakas novads","name":"Vi\u013cakas novads"},"468":{"code":"Vi\u013c\u0101nu novads","name":"Vi\u013c\u0101nu novads"},"470":{"code":"Zilupes novads","name":"Zilupes novads"}}},"LY":{"name":"Libya"},"MA":{"name":"Morocco"},"MC":{"name":"Monaco"},"MD":{"name":"Moldova"},"ME":{"name":"Montenegro"},"MF":{"name":"St. Martin"},"MG":{"name":"Madagascar"},"MH":{"name":"Marshall Islands"},"MK":{"name":"North Macedonia"},"ML":{"name":"Mali"},"MM":{"name":"Myanmar (Burma)"},"MN":{"name":"Mongolia"},"MO":{"name":"Macao SAR China"},"MP":{"name":"Northern Mariana Islands"},"MQ":{"name":"Martinique"},"MR":{"name":"Mauritania"},"MS":{"name":"Montserrat"},"MT":{"name":"Malta"},"MU":{"name":"Mauritius"},"MV":{"name":"Maldives"},"MW":{"name":"Malawi"},"MX":{"name":"Mexico","regions":{"577":{"code":"AGU","name":"Aguascalientes"},"578":{"code":"BCN","name":"Baja California"},"579":{"code":"BCS","name":"Baja California Sur"},"580":{"code":"CAM","name":"Campeche"},"581":{"code":"CHP","name":"Chiapas"},"582":{"code":"CHH","name":"Chihuahua"},"583":{"code":"CMX","name":"Ciudad de M\u00e9xico"},"584":{"code":"COA","name":"Coahuila"},"585":{"code":"COL","name":"Colima"},"586":{"code":"DUR","name":"Durango"},"587":{"code":"MEX","name":"Estado de M\u00e9xico"},"588":{"code":"GUA","name":"Guanajuato"},"589":{"code":"GRO","name":"Guerrero"},"590":{"code":"HID","name":"Hidalgo"},"591":{"code":"JAL","name":"Jalisco"},"592":{"code":"MIC","name":"Michoac\u00e1n"},"593":{"code":"MOR","name":"Morelos"},"594":{"code":"NAY","name":"Nayarit"},"595":{"code":"NLE","name":"Nuevo Le\u00f3n"},"596":{"code":"OAX","name":"Oaxaca"},"597":{"code":"PUE","name":"Puebla"},"598":{"code":"QUE","name":"Quer\u00e9taro"},"599":{"code":"ROO","name":"Quintana Roo"},"600":{"code":"SLP","name":"San Luis Potos\u00ed"},"601":{"code":"SIN","name":"Sinaloa"},"602":{"code":"SON","name":"Sonora"},"603":{"code":"TAB","name":"Tabasco"},"604":{"code":"TAM","name":"Tamaulipas"},"605":{"code":"TLA","name":"Tlaxcala"},"606":{"code":"VER","name":"Veracruz"},"607":{"code":"YUC","name":"Yucat\u00e1n"},"608":{"code":"ZAC","name":"Zacatecas"}}},"MY":{"name":"Malaysia"},"MZ":{"name":"Mozambique"},"NA":{"name":"Namibia"},"NC":{"name":"New Caledonia"},"NE":{"name":"Niger"},"NF":{"name":"Norfolk Island"},"NG":{"name":"Nigeria"},"NI":{"name":"Nicaragua"},"NL":{"name":"Netherlands"},"NO":{"name":"Norway"},"NP":{"name":"Nepal"},"NR":{"name":"Nauru"},"NU":{"name":"Niue"},"NZ":{"name":"New Zealand"},"OM":{"name":"Oman"},"PA":{"name":"Panama"},"PE":{"name":"Peru","regions":{"981":{"code":"PE-AMA","name":"Amazonas"},"982":{"code":"PE-ANC","name":"Ancash"},"983":{"code":"PE-APU","name":"Apur\u00edmac"},"984":{"code":"PE-ARE","name":"Arequipa"},"985":{"code":"PE-AYA","name":"Ayacucho"},"986":{"code":"PE-CAJ","name":"Cajamarca"},"987":{"code":"PE-CUS","name":"Cusco"},"988":{"code":"PE-CAL","name":"El Callao"},"989":{"code":"PE-HUV","name":"Huancavelica"},"990":{"code":"PE-HUC","name":"Hu\u00e1nuco"},"991":{"code":"PE-ICA","name":"Ica"},"992":{"code":"PE-JUN","name":"Jun\u00edn"},"993":{"code":"PE-LAL","name":"La Libertad"},"994":{"code":"PE-LAM","name":"Lambayeque"},"995":{"code":"PE-LIM","name":"Lima"},"996":{"code":"PE-LOR","name":"Loreto"},"997":{"code":"PE-MDD","name":"Madre de Dios"},"998":{"code":"PE-MOQ","name":"Moquegua"}
8438,"980":{"code":"PE-LMA","name":"Municipalidad Metropolitana de Lima"},"999":{"code":"PE-PAS","name":"Pasco"},"1000":{"code":"PE-PIU","name":"Piura"},"1001":{"code":"PE-PUN","name":"Puno"},"1002":{"code":"PE-SAM","name":"San Mart\u00edn"},"1003":{"code":"PE-TAC","name":"Tacna"},"1004":{"code":"PE-TUM","name":"Tumbes"},"1005":{"code":"PE-UCA","name":"Ucayali"}}},"PF":{"name":"French Polynesia"},"PG":{"name":"Papua New Guinea"},"PH":{"name":"Philippines"},"PK":{"name":"Pakistan"},"PL":{"name":"Poland","regions":{"686":{"code":"PL-02","name":"dolno\u015bl\u0105skie"},"687":{"code":"PL-04","name":"kujawsko-pomorskie"},"688":{"code":"PL-06","name":"lubelskie"},"689":{"code":"PL-08","name":"lubuskie"},"692":{"code":"PL-14","name":"mazowieckie"},"691":{"code":"PL-12","name":"ma\u0142opolskie"},"693":{"code":"PL-16","name":"opolskie"},"694":{"code":"PL-18","name":"podkarpackie"},"695":{"code":"PL-20","name":"podlaskie"},"696":{"code":"PL-22","name":"pomorskie"},"697":{"code":"PL-24","name":"\u015bl\u0105skie"},"698":{"code":"PL-26","name":"\u015bwi\u0119tokrzyskie"},"699":{"code":"PL-28","name":"warmi\u0144sko-mazurskie"},"700":{"code":"PL-30","name":"wielkopolskie"},"701":{"code":"PL-32","name":"zachodniopomorskie"},"690":{"code":"PL-10","name":"\u0142\u00f3dzkie"}}},"PM":{"name":"St. Pierre & Miquelon"},"PN":{"name":"Pitcairn Islands"},"PR":{"name":"Puerto Rico"},"PS":{"name":"Palestinian Territories"},"PT":{"name":"Portugal","regions":{"1006":{"code":"PT-01","name":"Aveiro"},"1007":{"code":"PT-02","name":"Beja"},"1008":{"code":"PT-03","name":"Braga"},"1009":{"code":"PT-04","name":"Bragan\u00e7a"},"1010":{"code":"PT-05","name":"Castelo Branco"},"1011":{"code":"PT-06","name":"Coimbra"},"1012":{"code":"PT-07","name":"\u00c9vora"},"1013":{"code":"PT-08","name":"Faro"},"1014":{"code":"PT-09","name":"Guarda"},"1015":{"code":"PT-10","name":"Leiria"},"1016":{"code":"PT-11","name":"Lisboa"},"1017":{"code":"PT-12","name":"Portalegre"},"1018":{"code":"PT-13","name":"Porto"},"1025":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"1024":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"1019":{"code":"PT-14","name":"Santar\u00e9m"},"1020":{"code":"PT-15","name":"Set\u00fabal"},"1021":{"code":"PT-16","name":"Viana do Castelo"},"1022":{"code":"PT-17","name":"Vila Real"},"1023":{"code":"PT-18","name":"Viseu"}}},"PW":{"name":"Palau"},"PY":{"name":"Paraguay","regions":{"963":{"code":"PY-16","name":"Alto Paraguay"},"964":{"code":"PY-10","name":"Alto Paran\u00e1"},"965":{"code":"PY-13","name":"Amambay"},"962":{"code":"PY-ASU","name":"Asunci\u00f3n"},"966":{"code":"PY-19","name":"Boquer\u00f3n"},"967":{"code":"PY-5","name":"Caaguaz\u00fa"},"968":{"code":"PY-6","name":"Caazap\u00e1"},"969":{"code":"PY-14","name":"Canindey\u00fa"},"970":{"code":"PY-11","name":"Central"},"971":{"code":"PY-1","name":"Concepci\u00f3n"},"972":{"code":"PY-3","name":"Cordillera"},"973":{"code":"PY-4","name":"Guair\u00e1"},"974":{"code":"PY-7","name":"Itap\u00faa"},"975":{"code":"PY-8","name":"Misiones"},"976":{"code":"PY-12","name":"\u00d1eembuc\u00fa"},"977":{"code":"PY-9","name":"Paraguar\u00ed"},"978":{"code":"PY-15","name":"Presidente Hayes"},"979":{"code":"PY-2","name":"San Pedro"}}},"QA":{"name":"Qatar"},"RE":{"name":"R\u00e9union"},"RO":{"name":"Romania","regions":{"278":{"code":"AB","name":"Alba"},"279":{"code":"AR","name":"Arad"},"280":{"code":"AG","name":"Arge\u015f"},"281":{"code":"BC","name":"Bac\u0103u"},"282":{"code":"BH","name":"Bihor"},"283":{"code":"BN","name":"Bistri\u0163a-N\u0103s\u0103ud"},"284":{"code":"BT","name":"Boto\u015fani"},"286":{"code":"BR","name":"Br\u0103ila"},"285":{"code":"BV","name":"Bra\u015fov"},"287":{"code":"B","name":"Bucure\u015fti"},"288":{"code":"BZ","name":"Buz\u0103u"},"290":{"code":"CL","name":"C\u0103l\u0103ra\u015fi"},"289":{"code":"CS","name":"Cara\u015f-Severin"},"291":{"code":"CJ","name":"Cluj"},"292":{"code":"CT","name":"Constan\u0163a"},"293":{"code":"CV","name":"Covasna"},"294":{"code":"DB","name":"D\u00e2mbovi\u0163a"},"295":{"code":"DJ","name":"Dolj"},"296":{"code":"GL","name":"Gala\u0163i"},"297":{"code":"GR","name":"Giurgiu"},"298":{"code":"GJ","name":"Gorj"},"299":{"code":"HR","name":"Harghita"},"300":{"code":"HD","name":"Hunedoara"},"301":{"code":"IL","name":"Ialomi\u0163a"},"302":{"code":"IS","name":"Ia\u015fi"},"303":{"code":"IF","name":"Ilfov"},"304":{"code":"MM","name":"Maramure\u015f"},"305":{"code":"MH","name":"Mehedin\u0163i"},"306":{"code":"MS","name":"Mure\u015f"},"307":{"code":"NT","name":"Neam\u0163"},"308":{"code":"OT","name":"Olt"},"309":{"code":"PH","name":"Prahova"},"311":{"code":"SJ","name":"S\u0103laj"},"310":{"code":"SM","name":"Satu-Mare"},"312":{"code":"SB","name":"Sibiu"},"313":{"code":"SV","name":"Suceava"},"314":{"code":"TR","name":"Teleorman"},"315":{"code":"TM","name":"Timi\u015f"},"316":{"code":"TL","name":"Tulcea"},"318":{"code":"VL","name":"V\u00e2lcea"},"317":{"code":"VS","name":"Vaslui"},"319":{"code":"VN","name":"Vrancea"}}},"RS":{"name":"Serbia"},"RU":{"name":"Russia"},"RW":{"name":"Rwanda"},"SA":{"name":"Saudi Arabia"},"SB":{"name":"Solomon Islands"},"SC":{"name":"Seychelles"},"SD":{"name":"Sudan"},"SE":{"name":"Sweden","regions":{"1036":{"code":"SE-K","name":"Blekinge l\u00e4n"}
8438,"1037":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"1039":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"1038":{"code":"SE-I","name":"Gotlands l\u00e4n"},"1040":{"code":"SE-N","name":"Hallands l\u00e4n"},"1041":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"1042":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"1043":{"code":"SE-H","name":"Kalmar l\u00e4n"},"1044":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"1045":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"1055":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"1056":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"1046":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"1048":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"1047":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"1049":{"code":"SE-C","name":"Uppsala l\u00e4n"},"1050":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"1051":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"1052":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"1053":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"1054":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SG":{"name":"Singapore"},"SH":{"name":"St. Helena"},"SI":{"name":"Slovenia"},"SJ":{"name":"Svalbard & Jan Mayen"},"SK":{"name":"Slovakia"},"SL":{"name":"Sierra Leone"},"SM":{"name":"San Marino"},"SN":{"name":"Senegal"},"SO":{"name":"Somalia"},"SR":{"name":"Suriname","regions":{"1026":{"code":"SR-BR","name":"Brokopondo"},"1027":{"code":"SR-CM","name":"Commewijne"},"1028":{"code":"SR-CR","name":"Coronie"},"1029":{"code":"SR-MA","name":"Marowijne"},"1030":{"code":"SR-NI","name":"Nickerie"},"1031":{"code":"SR-PR","name":"Para"},"1032":{"code":"SR-PM","name":"Paramaribo"},"1033":{"code":"SR-SA","name":"Saramacca"},"1034":{"code":"SR-SI","name":"Sipaliwini"},"1035":{"code":"SR-WA","name":"Wanica"}}},"ST":{"name":"S\u00e3o Tom\u00e9 & Pr\u00edncipe"},"SV":{"name":"El Salvador"},"SX":{"name":"Sint Maarten"},"SY":{"name":"Syria"},"SZ":{"name":"Eswatini"},"TC":{"name":"Turks & Caicos Islands"},"TD":{"name":"Chad"},"TF":{"name":"French Southern Territories"},"TG":{"name":"Togo"},"TH":{"name":"Thailand"},"TJ":{"name":"Tajikistan"},"TK":{"name":"Tokelau"},"TL":{"name":"Timor-Leste"},"TM":{"name":"Turkmenistan"},"TN":{"name":"Tunisia"},"TO":{"name":"Tonga"},"TR":{"name":"T\u00fcrkiye"},"TT":{"name":"Trinidad & Tobago"},"TV":{"name":"Tuvalu"},"TW":{"name":"Taiwan"},"TZ":{"name":"Tanzania"},"UA":{"name":"Ukraine","regions":{"1153":{"code":"UA-43","name":"Avtonomna Respublika Krym"},"1129":{"code":"UA-71","name":"Cherkaska oblast"},"1130":{"code":"UA-74","name":"Chernihivska oblast"},"1131":{"code":"UA-77","name":"Chernivetska oblast"},"1132":{"code":"UA-12","name":"Dnipropetrovska oblast"},"1133":{"code":"UA-14","name":"Donetska oblast"},"1134":{"code":"UA-26","name":"Ivano-Frankivska oblast"},"1135":{"code":"UA-63","name":"Kharkivska oblast"},"1136":{"code":"UA-65","name":"Khersonska oblast"},"1137":{"code":"UA-68","name":"Khmelnytska oblast"},"1138":{"code":"UA-35","name":"Kirovohradska oblast"},"1154":{"code":"UA-30","name":"Kyiv"},"1139":{"code":"UA-32","name":"Kyivska oblast"},"1140":{"code":"UA-09","name":"Luhanska oblast"},"1141":{"code":"UA-46","name":"Lvivska oblast"},"1142":{"code":"UA-48","name":"Mykolaivska oblast"},"1143":{"code":"UA-51","name":"Odeska oblast"},"1144":{"code":"UA-53","name":"Poltavska oblast"},"1145":{"code":"UA-56","name":"Rivnenska oblast"},"1155":{"code":"UA-40","name":"Sevastopol"},"1146":{"code":"UA-59","name":"Sumska oblast"},"1147":{"code":"UA-61","name":"Ternopilska oblast"},"1148":{"code":"UA-05","name":"Vinnytska oblast"},"1149":{"code":"UA-07","name":"Volynska oblast"},"1150":{"code":"UA-21","name":"Zakarpatska oblast"},"1151":{"code":"UA-23","name":"Zaporizka oblast"},"1152":{"code":"UA-18","name":"Zhytomyrska oblast"}}},"UG":{"name":"Uganda"},"UM":{"name":"U.S. Outlying Islands"},"US":{"name":"United States","regions":{"1":{"code":"AL","name":"Alabama"},"2":{"code":"AK","name":"Alaska"},"3":{"code":"AS","name":"American Samoa"},"4":{"code":"AZ","name":"Arizona"},"5":{"code":"AR","name":"Arkansas"},"6":{"code":"AE","name":"Armed Forces Africa"},"7":{"code":"AA","name":"Armed Forces Americas"},"8":{"code":"AE","name":"Armed Forces Canada"},"9":{"code":"AE","name":"Armed Forces Europe"},"10":{"code":"AE","name":"Armed Forces Middle East"},"11":{"code":"AP","name":"Armed Forces Pacific"},"12":{"code":"CA","name":"California"},"13":{"code":"CO","name":"Colorado"},"14":{"code":"CT","name":"Connecticut"},"15":{"code":"DE","name":"Delaware"},"16":{"code":"DC","name":"District of Columbia"},"17":{"code":"FM","name":"Federated States Of Micronesia"}
8438,"18":{"code":"FL","name":"Florida"},"19":{"code":"GA","name":"Georgia"},"20":{"code":"GU","name":"Guam"},"21":{"code":"HI","name":"Hawaii"},"22":{"code":"ID","name":"Idaho"},"23":{"code":"IL","name":"Illinois"},"24":{"code":"IN","name":"Indiana"},"25":{"code":"IA","name":"Iowa"},"26":{"code":"KS","name":"Kansas"},"27":{"code":"KY","name":"Kentucky"},"28":{"code":"LA","name":"Louisiana"},"29":{"code":"ME","name":"Maine"},"30":{"code":"MH","name":"Marshall Islands"},"31":{"code":"MD","name":"Maryland"},"32":{"code":"MA","name":"Massachusetts"},"33":{"code":"MI","name":"Michigan"},"34":{"code":"MN","name":"Minnesota"},"35":{"code":"MS","name":"Mississippi"},"36":{"code":"MO","name":"Missouri"},"37":{"code":"MT","name":"Montana"},"38":{"code":"NE","name":"Nebraska"},"39":{"code":"NV","name":"Nevada"},"40":{"code":"NH","name":"New Hampshire"},"41":{"code":"NJ","name":"New Jersey"},"42":{"code":"NM","name":"New Mexico"},"43":{"code":"NY","name":"New York"},"44":{"code":"NC","name":"North Carolina"},"45":{"code":"ND","name":"North Dakota"},"46":{"code":"MP","name":"Northern Mariana Islands"},"47":{"code":"OH","name":"Ohio"},"48":{"code":"OK","name":"Oklahoma"},"49":{"code":"OR","name":"Oregon"},"50":{"code":"PW","name":"Palau"},"51":{"code":"PA","name":"Pennsylvania"},"52":{"code":"PR","name":"Puerto Rico"},"53":{"code":"RI","name":"Rhode Island"},"54":{"code":"SC","name":"South Carolina"},"55":{"code":"SD","name":"South Dakota"},"56":{"code":"TN","name":"Tennessee"},"57":{"code":"TX","name":"Texas"},"58":{"code":"UT","name":"Utah"},"59":{"code":"VT","name":"Vermont"},"60":{"code":"VI","name":"Virgin Islands"},"61":{"code":"VA","name":"Virginia"},"62":{"code":"WA","name":"Washington"},"63":{"code":"WV","name":"West Virginia"},"64":{"code":"WI","name":"Wisconsin"},"65":{"code":"WY","name":"Wyoming"}}},"UY":{"name":"Uruguay","regions":{"1057":{"code":"UY-AR","name":"Artigas"},"1058":{"code":"UY-CA","name":"Canelones"},"1059":{"code":"UY-CL","name":"Cerro Largo"},"1060":{"code":"UY-CO","name":"Colonia"},"1061":{"code":"UY-DU","name":"Durazno"},"1062":{"code":"UY-FS","name":"Flores"},"1063":{"code":"UY-FD","name":"Florida"},"1064":{"code":"UY-LA","name":"Lavalleja"},"1065":{"code":"UY-MA","name":"Maldonado"},"1066":{"code":"UY-MO","name":"Montevideo"},"1067":{"code":"UY-PA","name":"Paysandu"},"1068":{"code":"UY-RN","name":"R\u00edo Negro"},"1069":{"code":"UY-RV","name":"Rivera"},"1070":{"code":"UY-RO","name":"Rocha"},"1071":{"code":"UY-SA","name":"Salto"},"1072":{"code":"UY-SJ","name":"San Jos\u00e9"},"1073":{"code":"UY-SO","name":"Soriano"},"1074":{"code":"UY-TA","name":"Tacuaremb\u00f3"},"1075":{"code":"UY-TT","name":"Treinta y Tres"}}},"UZ":{"name":"Uzbekistan"},"VA":{"name":"Vatican City"},"VC":{"name":"St. Vincent & Grenadines"},"VE":{"name":"Venezuela","regions":{"1078":{"code":"VE-Z","name":"Amazonas"},"1079":{"code":"VE-B","name":"Anzo\u00e1tegui"},"1080":{"code":"VE-C","name":"Apure"},"1081":{"code":"VE-D","name":"Aragua"},"1082":{"code":"VE-E","name":"Barinas"},"1083":{"code":"VE-F","name":"Bol\u00edvar"},"1084":{"code":"VE-G","name":"Carabobo"},"1085":{"code":"VE-H","name":"Cojedes"},"1086":{"code":"VE-Y","name":"Delta Amacuro"},"1076":{"code":"VE-W","name":"Dependencias Federales"},"1077":{"code":"VE-A","name":"Distrito Capital"},"1087":{"code":"VE-I","name":"Falc\u00f3n"},"1088":{"code":"VE-J","name":"Gu\u00e1rico"},"1089":{"code":"VE-K","name":"Lara"},"1090":{"code":"VE-L","name":"M\u00e9rida"},"1091":{"code":"VE-M","name":"Miranda"},"1092":{"code":"VE-N","name":"Monagas"},"1093":{"code":"VE-O","name":"Nueva Esparta"},"1094":{"code":"VE-P","name":"Portuguesa"},"1095":{"code":"VE-R","name":"Sucre"},"1096":{"code":"VE-S","name":"T\u00e1chira"},"1097":{"code":"VE-T","name":"Trujillo"},"1098":{"code":"VE-X","name":"Vargas"},"1099":{"code":"VE-U","name":"Yaracuy"},"1100":{"code":"VE-V","name":"Zulia"}}},"VG":{"name":"British Virgin Islands"},"VI":{"name":"U.S. Virgin Islands"},"VN":{"name":"Vietnam"},"VU":{"name":"Vanuatu"},"WF":{"name":"Wallis & Futuna"},"WS":{"name":"Samoa"},"XI":{"name":"Northern Ireland"},"XK":{"name":"Kosovo"},"YE":{"name":"Yemen"},"YT":{"name":"Mayotte"},"ZA":{"name":"South Africa"},"ZM":{"name":"Zambia"},"ZW":{"name":"Zimbabwe"},"data_id":1790960837},"captcha":[],"wishlist":{"items":[]},"company":[],"company_authorization":[],"customer-companies":[],"negotiable_quote":[],"instant-purchase":[],"loggedAsCustomer":[],"multiplewishlist":[],"purchase_order":[],"persistent":[],"review":[],"payments":[],"faq":[],"exclusive-products":[],"geo-ip-data":[],"gtm-checkout":[],"show-retail-prices":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"paypal-buyer-country":[]}</script>
8438 8439</div>
8439<script nonce="eGFtYno5eG9uMGRhNG9taXYzamE1N2xvZHM0bjVkbnY="> 8440 yireoGoogleTagManager2Pusher({"version":"3.10.2","page_type":"customer\/account\/login","page_path":"https:\/\/www.eichholtz.com\/en\/customer\/account\/login","page_title":"Partner Login","virtual_page":"\/en\/customer\/account\/login","breadcrumb":[],"user":{"has_transacted":false}}, 'push (initial page) [data-layer.phtml]'); 8441 </script>
vendor: 1 bytes, line 8441
8441
8442<script nonce="eGFtYno5eG9uMGRhNG9taXYzamE1N2xvZHM0bjVkbnY="> 8443 function yireoGoogleTagManager2FindParentElementWithName(element, parentTagName) { 8444 if (!element.parentElement) { 8445 return null; 8446 } 8447 8448 if (element.parentElement.tagName.toLowerCase() === parentTagName) { 8449 return element.parentElement; 8450 } 8451 8452 return yireoGoogleTagManager2FindParentElementWithName(element.parentElement, parentTagName); 8453 } 8454 8455 const products = document.querySelectorAll('.products a.product'); 8456 if (products && products.length > 0) { 8457 products.forEach(function(product) { 8458 product.addEventListener('click', function(event, s) { 8459 let parentElement = yireoGoogleTagManager2FindParentElementWithName(event.target, 'form'); 8460 const inputElement = parentElement.querySelector('input[name="product"]'); 8461 const productId = inputElement.value; 8462 const productData = window['YIREO_GOOGLETAGMANAGER2_PRODUCT_DATA_ID_' + productId] || {}; 8463 productData.item_id = productId; 8464 8465 const eventData = { 8466 'event': 'select_item', 8467 'ecommerce': { 8468 'items': [productData] 8469 } 8470 } 8471 8472 yireoGoogleTagManager2Pusher(eventData, 'push (page event "select_item") [script-product-clicks.phtml]'); 8473 8474 if (window['YIREO_GOOGLETAGMANAGER2_DEBUG_CLICKS'] && confirm("Press to continue with redirect") === false) { 8475 event.preventDefault(); 8476 } 8477 }); 8478 }) 8479 } 8480</script>
vendor: 1 bytes, line 8480
8480
8481<script nonce="eGFtYno5eG9uMGRhNG9taXYzamE1N2xvZHM0bjVkbnY="> 8482 window.addEventListener('private-content-loaded', function(event) { 8483 window.dataLayer = window.dataLayer || []; 8484 8485 var isEmpty = function (variable) { 8486 if (typeof variable === 'undefined') { 8487 return true; 8488 } 8489 8490 if (Array.isArray(variable) && variable.length === 0) { 8491 return true; 8492 } 8493 8494 return typeof variable === 'object' && Object.keys(variable).length === 0; 8495 } 8496 8497 var getSectionNames = function () { 8498 return ['cart', 'customer']; 8499 } 8500 8501 getSectionNames().forEach(function (sectionName) { 8502 if (!event.detail.data[sectionName].gtm) { 8503 return; 8504 } 8505 8506 const attributes = event.detail.data[sectionName].gtm; 8507 if (!Object.keys(attributes).length > 0) { 8508 return; 8509 } 8510 8511 yireoGoogleTagManager2Pusher(attributes, 'push (attributes) [script-additions.phtml]'); 8512 }); 8513 8514 let attributes = {}; 8515 getSectionNames().forEach(function (sectionName) { 8516 if (!event.detail.data[sectionName].gtm_events) { 8517 return; 8518 } 8519 8520 const gtmEvents = event.detail.data[sectionName].gtm_events; 8521 for (const [eventId, eventData] of Object.entries(gtmEvents)) { 8522 yireoGoogleTagManager2Logger('found event in section "' + sectionName + '"', eventData); 8523 8524 const metaData = eventData.meta; 8525 yireoGoogleTagManager2Pusher(eventData, 'push (customerData "' + sectionName + '" event "' + eventId + '")'); 8526 8527 if (!metaData || metaData.cacheable !== true) { 8528 yireoGoogleTagManager2Logger('removing event "' + eventId + '" from section "' + sectionName + '"') 8529 8530 let mageCacheStorage = event.detail.data; 8531 8532 if (mageCacheStorage !== null 8533 && typeof mageCacheStorage[sectionName] !== 'undefined' 8534 && typeof mageCacheStorage[sectionName].gtm_events !== 'undefined' 8535 && eventId in mageCacheStorage[sectionName].gtm_events) { 8536 delete mageCacheStorage[sectionName].gtm_events[eventId]; 8537 } 8538 8539 window.localStorage.setItem('mage-cache-storage', JSON.stringify(mageCacheStorage)); 8540 } 8541 } 8542 }); 8543 8544 if (false === isEmpty(attributes)) { 8545 yireoGoogleTagManager2Pusher(attributes, 'dataLayer (initial js) [script-additions.phtml]'); 8546 } 8547 }); 8548</script>
8548 8549</body> 8550</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.