Salta il contenuto
Kostenloser Versand für Bestellungen über 2500 € in Deutschland! Europaweiter Versand möglich!
Kostenloser Versand für Bestellungen über 2500 €
/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = (function() { const modules = {}; /* Module 646: CSSBreakpoints (Desktop-anpassung) */ modules[646] = function(module) { "use strict"; class CSSBreakpoint { /* Wie zuvor */ } function readCSSBreakpoints() { /* Wie zuvor */ } function readCSSCurrentBreakpoint() { /* Wie zuvor */ } const breakpoints = { previous: new CSSBreakpoint(readCSSCurrentBreakpoint()), current: new CSSBreakpoint(readCSSCurrentBreakpoint()) }; let callbacks = []; function get() { return breakpoints; } function onChange(cb) { if (!callbacks.includes(cb)) callbacks.push(cb); } function offChange(cb) { const idx = callbacks.indexOf(cb); if (idx !== -1) callbacks.splice(idx, 1); } const mediaLists = /* Wie zuvor */; if (mediaLists.length > 0) { mediaLists.forEach(media => { const mql = window.matchMedia(media.mediaText); mql.addListener(debounce(() => { const current = readCSSCurrentBreakpoint(); if (breakpoints.current.value !== current) { breakpoints.previous = breakpoints.current; breakpoints.current = new CSSBreakpoint(current); callbacks.forEach(cb => cb(breakpoints)); } }, 50)); // Kürzere Debounce-Zeit für Desktop }); } else { window.addEventListener('resize', debounce(() => { const current = readCSSCurrentBreakpoint(); if (breakpoints.current.value !== current) { breakpoints.previous = breakpoints.current; breakpoints.current = new CSSBreakpoint(current); callbacks.forEach(cb => cb(breakpoints)); } }, 50)); } module.exports = { get, onChange, offChange, CSSBreakpoint, breakpoints }; }; /* Module 263: GroupedContent (Virtuelles DOM für Desktop) */ modules[263] = function(module) { "use strict"; function forEach(array, cb, scope) { for (let i = 0; i < array.length; i++) cb.call(scope, array[i], i); } function hasClass(el, className) { /* Wie zuvor */ } function addClass(el, className) { /* Wie zuvor */ } function removeClass(el, className) { /* Wie zuvor */ } function toggleClass(el, className) { /* Wie zuvor */ } function findPairingFromPairingTrigger(pairings, trigger) { /* Wie zuvor */ } function uuidv4() { /* Wie zuvor */ } class TabsLayout { /* Wie zuvor */ } class AccordionLayout { /* Wie zuvor */ } function getHeadingContent(heading) { /* Wie zuvor */ } function getHeadingTree(el, children, root = false) { /* Wie zuvor */ } function getHeadingGroups(headings, invalid, minSeq) { /* Wie zuvor */ } function createGroupedContent(children) { const pairings = []; const fragment = document.createDocumentFragment(); const triggers = document.createElement('div'); const contents = document.createElement('div'); const first = children[0].el; fragment.appendChild(triggers); fragment.appendChild(contents); first.parentNode.insertBefore(fragment, first); for (let i = 0; i < children.length; i++) { const child = children[i]; const trigger = triggers.appendChild(child.el.cloneNode(true)); const content = contents.appendChild(document.createElement('div')); content.append(...child.content); pairings.push({ trigger, content }); } return { triggers, contents, pairings }; } function getGroupedContentSet(node) { /* Wie zuvor, mit Filterung */ } function intelliParse(el) { /* Wie zuvor */ } function staticParse(el) { /* Wie zuvor */ } function parse(content, intelli = false) { return intelli ? intelliParse(content) : staticParse(content); } class GroupedContent { constructor(el, options = {}) { this.namespace = 'grouped-content'; this.el = el; this.instances = []; const { layout = 'tabs', intelliparse = false } = options; const parsed = parse(el, intelliparse).filter(gc => gc.pairings.length > 1); forEach(parsed, gc => { const id = uuidv4(); const instance = layout === 'accordion' ? new AccordionLayout(gc) : new TabsLayout(gc); this.instances.push({ gc, instance }); }); } unload() { forEach(this.instances, ({ instance }) => instance.unload()); } } module.exports = GroupedContent; }; /* Module ShoppableImage (Desktop-spezifische Bildoptimierung) */ modules['shoppable'] = function() { class ShoppableImage { constructor(section) { this.el = section.el; this.events = new (require(766).default)(); this.activeClass = 'shoppable-image__hotspot--active'; this.delay = 200; // Kürzere Verzögerung für Desktop this._bind(); this._optimizeImages(); } _bind() { /* Wie zuvor */ } _setActive(e) { e.stopPropagation(); const point = e.target.closest('[data-hotspot]'); if (!point) return; if (['touchend', 'click'].includes(e.type) && point.classList.contains(this.activeClass)) { point.classList.remove(this.activeClass); return; } document.querySelectorAll(`.${this.activeClass}`).forEach(el => el.classList.remove(this.activeClass)); point.classList.add(this.activeClass); const img = point.querySelector('img'); if (img) { img.setAttribute('loading', 'eager'); if (!img.hasAttribute('width') || !img.hasAttribute('height')) { img.setAttribute('width', img.naturalWidth || 300); img.setAttribute('height', img.naturalHeight || 300); } } } _optimizeImages() { this.el.querySelectorAll('[data-hotspot] img').forEach(img => { if (!img.closest('.shoppable-image__hotspot--active')) { img.setAttribute('loading', 'lazy'); if (!img.hasAttribute('srcset')) img.setAttribute('srcset', `${img.src} 1x, ${img.src.replace(/\.[^.]+$/, '_2x.$&')} 2x`); } }); } unload() { this.events.unregisterAll(); } } return ShoppableImage; }; /* Module DynamicTestimonials (Desktop-Anpassung) */ modules['dynamic-testimonials'] = function() { class DynamicTestimonials { constructor(section) { this.$el = section.el; this.events = new (require(766).default)(); this.carousel = this.$el.querySelector('.testimonials'); this.onChange = debounce(() => { const slides = this.$el.querySelectorAll('.testimonial'); const shouldInit = (require(646).breakpoints.current.min('M') && slides.length > 2) || // Desktop-spezifische Bedingung (require(646).breakpoints.current.min('XL') && slides.length > 3); if (shouldInit && !this.flickity) this._initFlickity(); else if (!shouldInit && this.flickity) this._destroyFlickity(); }, 50); require(646).onChange(this.onChange); this._optimizeImages(); this.onChange(); } _optimizeImages() { this.$el.querySelectorAll('.testimonial img').forEach(img => { img.setAttribute('loading', 'lazy'); if (!img.hasAttribute('width') || !img.hasAttribute('height')) { img.setAttribute('width', img.naturalWidth || 400); img.setAttribute('height', img.naturalHeight || 300); } }); } onSectionUnload() { /* Wie zuvor */ } _initFlickity() { /* Wie zuvor */ } _destroyFlickity() { /* Wie zuvor */ } } return DynamicTestimonials; }; /* Module Order (Web Worker für Desktop) */ modules['order'] = function() { class Order { constructor() { this.el = document.querySelector('.template-order'); this.events = new (require(766).default)(); this.worker = null; this._init(); } _init() { if (typeof(Worker) !== 'undefined' && require(646).breakpoints.current.min('L')) { this.worker = new Worker(URL.createObjectURL(new Blob([` self.onmessage = function(e) { fetch(e.data.url).then(r => r.json()).then(d => self.postMessage(d)); }; `], { type: 'text/javascript' }))); this.worker.onmessage = (e) => this._onSuccess(e.data); } this.events.register(this.el.querySelector('[data-atc-button]'), 'click', e => this._addToCart(e)); } _addToCart(e) { e.stopPropagation(); this.el.querySelector('[data-atc-button]').classList.add('processing'); const url = `${window.Theme.routes.cart_add_url}.js`; if (this.worker) this.worker.postMessage({ url, method: 'POST', body: JSON.stringify({ items: [] }) }); else fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ items: [] }) }) .then(r => r.json()).then(d => this._onSuccess()).catch(e => this._showError(e.message)); } _onSuccess(data) { fetch(`${window.Theme.routes.cart_url}.js`).then(r => r.json()).then(d => { const evt = new CustomEvent('cartcount:update', { detail: d }); window.dispatchEvent(evt); }).catch(e => this._showError(e.message)); } _showError(msg) { console.log(msg); } unload() { if (this.worker) this.worker.terminate(); this.events.unregisterAll(); } } return Order; }; /* Weitere Module (Unverändert, aber mit Desktop-Anpassungen) */ modules['product-compare-flyout'] = function() { /* Wie zuvor */ }; modules['back-to-top'] = function() { /* Wie zuvor */ }; /* Helper Functions */ function debounce(fn, wait) { /* Wie zuvor */ } function throttle(fn, limit) { /* Wie zuvor */ } function isInViewport(el) { /* Wie zuvor */ } /* Main Initialization */ function initEmpire() { require(970); // Revealer require(186); // Trend const sections = new Map(); sections.set('shoppable-image', el => new (require('shoppable').default)({ el, id: el.dataset.sectionId })); sections.set('grouped-content', el => new (require(263).default)(el, { intelliparse: true })); sections.set('dynamic-testimonials', el => new (require('dynamic-testimonials').default)({ el, id: el.dataset.sectionId })); sections.set('order', () => new (require('order').default)()); sections.set('product-compare-flyout', el => new (require('product-compare-flyout').default)(el)); sections.set('back-to-top', el => new (require('back-to-top').default)(el)); document.querySelectorAll('[data-section-type]').forEach(el => { const type = el.dataset.sectionType; if (sections.has(type)) { if (require(646).breakpoints.current.min('L') && ['product-compare-flyout', 'back-to-top'].includes(type) && !isInViewport(el)) { const observer = new IntersectionObserver((entries) => { if (entries[0].isIntersecting) { sections.get(type)(el); observer.unobserve(el); } }, { rootMargin: '100px' }); observer.observe(el); } else { sections.get(type)(el); } } }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initEmpire); } else { initEmpire(); } return modules; })(); /******/ var __webpack_module_cache__ = {}; /******/ function __webpack_require__(moduleId) { /* Wie zuvor */ } /******/ var __webpack_exports__ = __webpack_require__(263); /******/ })();
/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = (function() { const modules = {}; /* Module 646: CSSBreakpoints (Desktop-anpassung) */ modules[646] = function(module) { "use strict"; class CSSBreakpoint { /* Wie zuvor */ } function readCSSBreakpoints() { /* Wie zuvor */ } function readCSSCurrentBreakpoint() { /* Wie zuvor */ } const breakpoints = { previous: new CSSBreakpoint(readCSSCurrentBreakpoint()), current: new CSSBreakpoint(readCSSCurrentBreakpoint()) }; let callbacks = []; function get() { return breakpoints; } function onChange(cb) { if (!callbacks.includes(cb)) callbacks.push(cb); } function offChange(cb) { const idx = callbacks.indexOf(cb); if (idx !== -1) callbacks.splice(idx, 1); } const mediaLists = /* Wie zuvor */; if (mediaLists.length > 0) { mediaLists.forEach(media => { const mql = window.matchMedia(media.mediaText); mql.addListener(debounce(() => { const current = readCSSCurrentBreakpoint(); if (breakpoints.current.value !== current) { breakpoints.previous = breakpoints.current; breakpoints.current = new CSSBreakpoint(current); callbacks.forEach(cb => cb(breakpoints)); } }, 50)); // Kürzere Debounce-Zeit für Desktop }); } else { window.addEventListener('resize', debounce(() => { const current = readCSSCurrentBreakpoint(); if (breakpoints.current.value !== current) { breakpoints.previous = breakpoints.current; breakpoints.current = new CSSBreakpoint(current); callbacks.forEach(cb => cb(breakpoints)); } }, 50)); } module.exports = { get, onChange, offChange, CSSBreakpoint, breakpoints }; }; /* Module 263: GroupedContent (Virtuelles DOM für Desktop) */ modules[263] = function(module) { "use strict"; function forEach(array, cb, scope) { for (let i = 0; i < array.length; i++) cb.call(scope, array[i], i); } function hasClass(el, className) { /* Wie zuvor */ } function addClass(el, className) { /* Wie zuvor */ } function removeClass(el, className) { /* Wie zuvor */ } function toggleClass(el, className) { /* Wie zuvor */ } function findPairingFromPairingTrigger(pairings, trigger) { /* Wie zuvor */ } function uuidv4() { /* Wie zuvor */ } class TabsLayout { /* Wie zuvor */ } class AccordionLayout { /* Wie zuvor */ } function getHeadingContent(heading) { /* Wie zuvor */ } function getHeadingTree(el, children, root = false) { /* Wie zuvor */ } function getHeadingGroups(headings, invalid, minSeq) { /* Wie zuvor */ } function createGroupedContent(children) { const pairings = []; const fragment = document.createDocumentFragment(); const triggers = document.createElement('div'); const contents = document.createElement('div'); const first = children[0].el; fragment.appendChild(triggers); fragment.appendChild(contents); first.parentNode.insertBefore(fragment, first); for (let i = 0; i < children.length; i++) { const child = children[i]; const trigger = triggers.appendChild(child.el.cloneNode(true)); const content = contents.appendChild(document.createElement('div')); content.append(...child.content); pairings.push({ trigger, content }); } return { triggers, contents, pairings }; } function getGroupedContentSet(node) { /* Wie zuvor, mit Filterung */ } function intelliParse(el) { /* Wie zuvor */ } function staticParse(el) { /* Wie zuvor */ } function parse(content, intelli = false) { return intelli ? intelliParse(content) : staticParse(content); } class GroupedContent { constructor(el, options = {}) { this.namespace = 'grouped-content'; this.el = el; this.instances = []; const { layout = 'tabs', intelliparse = false } = options; const parsed = parse(el, intelliparse).filter(gc => gc.pairings.length > 1); forEach(parsed, gc => { const id = uuidv4(); const instance = layout === 'accordion' ? new AccordionLayout(gc) : new TabsLayout(gc); this.instances.push({ gc, instance }); }); } unload() { forEach(this.instances, ({ instance }) => instance.unload()); } } module.exports = GroupedContent; }; /* Module ShoppableImage (Desktop-spezifische Bildoptimierung) */ modules['shoppable'] = function() { class ShoppableImage { constructor(section) { this.el = section.el; this.events = new (require(766).default)(); this.activeClass = 'shoppable-image__hotspot--active'; this.delay = 200; // Kürzere Verzögerung für Desktop this._bind(); this._optimizeImages(); } _bind() { /* Wie zuvor */ } _setActive(e) { e.stopPropagation(); const point = e.target.closest('[data-hotspot]'); if (!point) return; if (['touchend', 'click'].includes(e.type) && point.classList.contains(this.activeClass)) { point.classList.remove(this.activeClass); return; } document.querySelectorAll(`.${this.activeClass}`).forEach(el => el.classList.remove(this.activeClass)); point.classList.add(this.activeClass); const img = point.querySelector('img'); if (img) { img.setAttribute('loading', 'eager'); if (!img.hasAttribute('width') || !img.hasAttribute('height')) { img.setAttribute('width', img.naturalWidth || 300); img.setAttribute('height', img.naturalHeight || 300); } } } _optimizeImages() { this.el.querySelectorAll('[data-hotspot] img').forEach(img => { if (!img.closest('.shoppable-image__hotspot--active')) { img.setAttribute('loading', 'lazy'); if (!img.hasAttribute('srcset')) img.setAttribute('srcset', `${img.src} 1x, ${img.src.replace(/\.[^.]+$/, '_2x.$&')} 2x`); } }); } unload() { this.events.unregisterAll(); } } return ShoppableImage; }; /* Module DynamicTestimonials (Desktop-Anpassung) */ modules['dynamic-testimonials'] = function() { class DynamicTestimonials { constructor(section) { this.$el = section.el; this.events = new (require(766).default)(); this.carousel = this.$el.querySelector('.testimonials'); this.onChange = debounce(() => { const slides = this.$el.querySelectorAll('.testimonial'); const shouldInit = (require(646).breakpoints.current.min('M') && slides.length > 2) || // Desktop-spezifische Bedingung (require(646).breakpoints.current.min('XL') && slides.length > 3); if (shouldInit && !this.flickity) this._initFlickity(); else if (!shouldInit && this.flickity) this._destroyFlickity(); }, 50); require(646).onChange(this.onChange); this._optimizeImages(); this.onChange(); } _optimizeImages() { this.$el.querySelectorAll('.testimonial img').forEach(img => { img.setAttribute('loading', 'lazy'); if (!img.hasAttribute('width') || !img.hasAttribute('height')) { img.setAttribute('width', img.naturalWidth || 400); img.setAttribute('height', img.naturalHeight || 300); } }); } onSectionUnload() { /* Wie zuvor */ } _initFlickity() { /* Wie zuvor */ } _destroyFlickity() { /* Wie zuvor */ } } return DynamicTestimonials; }; /* Module Order (Web Worker für Desktop) */ modules['order'] = function() { class Order { constructor() { this.el = document.querySelector('.template-order'); this.events = new (require(766).default)(); this.worker = null; this._init(); } _init() { if (typeof(Worker) !== 'undefined' && require(646).breakpoints.current.min('L')) { this.worker = new Worker(URL.createObjectURL(new Blob([` self.onmessage = function(e) { fetch(e.data.url).then(r => r.json()).then(d => self.postMessage(d)); }; `], { type: 'text/javascript' }))); this.worker.onmessage = (e) => this._onSuccess(e.data); } this.events.register(this.el.querySelector('[data-atc-button]'), 'click', e => this._addToCart(e)); } _addToCart(e) { e.stopPropagation(); this.el.querySelector('[data-atc-button]').classList.add('processing'); const url = `${window.Theme.routes.cart_add_url}.js`; if (this.worker) this.worker.postMessage({ url, method: 'POST', body: JSON.stringify({ items: [] }) }); else fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ items: [] }) }) .then(r => r.json()).then(d => this._onSuccess()).catch(e => this._showError(e.message)); } _onSuccess(data) { fetch(`${window.Theme.routes.cart_url}.js`).then(r => r.json()).then(d => { const evt = new CustomEvent('cartcount:update', { detail: d }); window.dispatchEvent(evt); }).catch(e => this._showError(e.message)); } _showError(msg) { console.log(msg); } unload() { if (this.worker) this.worker.terminate(); this.events.unregisterAll(); } } return Order; }; /* Weitere Module (Unverändert, aber mit Desktop-Anpassungen) */ modules['product-compare-flyout'] = function() { /* Wie zuvor */ }; modules['back-to-top'] = function() { /* Wie zuvor */ }; /* Helper Functions */ function debounce(fn, wait) { /* Wie zuvor */ } function throttle(fn, limit) { /* Wie zuvor */ } function isInViewport(el) { /* Wie zuvor */ } /* Main Initialization */ function initEmpire() { require(970); // Revealer require(186); // Trend const sections = new Map(); sections.set('shoppable-image', el => new (require('shoppable').default)({ el, id: el.dataset.sectionId })); sections.set('grouped-content', el => new (require(263).default)(el, { intelliparse: true })); sections.set('dynamic-testimonials', el => new (require('dynamic-testimonials').default)({ el, id: el.dataset.sectionId })); sections.set('order', () => new (require('order').default)()); sections.set('product-compare-flyout', el => new (require('product-compare-flyout').default)(el)); sections.set('back-to-top', el => new (require('back-to-top').default)(el)); document.querySelectorAll('[data-section-type]').forEach(el => { const type = el.dataset.sectionType; if (sections.has(type)) { if (require(646).breakpoints.current.min('L') && ['product-compare-flyout', 'back-to-top'].includes(type) && !isInViewport(el)) { const observer = new IntersectionObserver((entries) => { if (entries[0].isIntersecting) { sections.get(type)(el); observer.unobserve(el); } }, { rootMargin: '100px' }); observer.observe(el); } else { sections.get(type)(el); } } }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initEmpire); } else { initEmpire(); } return modules; })(); /******/ var __webpack_module_cache__ = {}; /******/ function __webpack_require__(moduleId) { /* Wie zuvor */ } /******/ var __webpack_exports__ = __webpack_require__(263); /******/ })();

Entdecken Sie unsere Angebote

Alle Anzeigen

Confronta Prodotti

{"one"=>"Seleziona 2 o 3 articoli da confrontare", "other"=>"{{ count }} di 3 elementi selezionati"}

Seleziona il primo elemento da confrontare

Seleziona il secondo elemento da confrontare

Seleziona il terzo elemento da confrontare

Confrontare