CINXE.COM
HEATSAIL Heizstrahler | SunLiner
<!doctype html> <html lang="de"> <head > <meta charset="utf-8"/> <meta name="title" content="HEATSAIL Heizstrahler | SunLiner"/> <meta name="description" content="Kaufen Sie HEATSAIL Heizstrahler in unserem Online Shop! ✓ Käuferschutz ✓ hohe Qualität ✓ Versandkostenfrei ► Jetzt HEATSAIL bei SunLiner kaufen!"/> <meta name="keywords" content="HEATSAIL, Dome, Beem, Leaf"/> <meta name="robots" content="INDEX,FOLLOW"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>HEATSAIL Heizstrahler | SunLiner</title> <link rel="stylesheet" type="text/css" media="all" href="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/css/styles.css" /> <link rel="icon" type="image/x-icon" href="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/Magento_Theme/favicon.ico" /> <link rel="shortcut icon" type="image/x-icon" href="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/Magento_Theme/favicon.ico" /> <link rel="preload" as="font" crossorigin="anonymous" href="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/fonts/poppins-v9-latin-300.woff2" /> <link rel="preload" as="font" crossorigin="anonymous" href="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/fonts/poppins-v9-latin-regular.woff2" /> <link rel="preload" as="font" crossorigin="anonymous" href="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/fonts/poppins-v9-latin-600.woff2" /> <link rel="preload" as="font" crossorigin="anonymous" href="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/fonts/poppins-v9-latin-700.woff2" /> <link rel="canonical" href="https://www.sunliner.de/heatsail.html" /> <meta name="google-site-verification" content="et2qDm5qWFEn291AlkVjbEPJITlhS-XS_OVv1by3jPE" /> <script nonce="cWZycXp5aHc1dDA0OHJ0bXA0ZWViNHduMnk3NzdyZmE="> window.YIREO_GOOGLETAGMANAGER2_ENABLED = true; (function (events) { const initYireoGoogleTagManager2 = function () { events.forEach(function (eventType) { window.removeEventListener(eventType, initYireoGoogleTagManager2); }); (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({'gtm.start': new Date().getTime(), event: 'gtm.js'}); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com' + '/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-5KTXCV8'); } events.forEach(function (eventType) { window.addEventListener(eventType, initYireoGoogleTagManager2, {once: true, passive: true}) }) })(['load', 'keydown', 'mouseover', 'scroll', 'touchstart', 'wheel']); </script> <script> var BASE_URL = 'https://www.sunliner.de/'; var THEME_PATH = 'https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE'; var COOKIE_CONFIG = { "expires": null, "path": "\u002F", "domain": ".www.sunliner.de", "secure": true, "lifetime": "3600", "cookie_restriction_enabled": false }; var CURRENT_STORE_CODE = 'deutsch'; var CURRENT_WEBSITE_ID = '1'; window.hyva = window.hyva || {} window.cookie_consent_groups = window.cookie_consent_groups || {} window.cookie_consent_groups['necessary'] = true; window.cookie_consent_config = window.cookie_consent_config || {}; window.cookie_consent_config['necessary'] = [].concat( window.cookie_consent_config['necessary'] || [], [ 'user_allowed_save_cookie', 'form_key', 'mage-messages', 'private_content_version', 'mage-cache-sessid', 'last_visited_store', 'section_data_ids' ] ); </script> <script> 'use strict'; (function( hyva, undefined ) { function lifetimeToExpires(options, defaults) { const lifetime = options.lifetime || defaults.lifetime; if (lifetime) { const date = new Date; date.setTime(date.getTime() + lifetime * 1000); return date; } return null; } function generateRandomString() { const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', length = 16; let formKey = '', charactersLength = allowedCharacters.length; for (let i = 0; i < length; i++) { formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] } return formKey; } const sessionCookieMarker = {noLifetime: true} const cookieTempStorage = {}; const internalCookie = { get(name) { const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); return v ? v[2] : null; }, set(name, value, days, skipSetDomain) { let expires, path, domain, secure, samesite; const defaultCookieConfig = { expires: null, path: '/', domain: null, secure: false, lifetime: null, samesite: 'lax' }; const cookieConfig = window.COOKIE_CONFIG || {}; expires = days && days !== sessionCookieMarker ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; path = cookieConfig.path || defaultCookieConfig.path; domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); secure = cookieConfig.secure || defaultCookieConfig.secure; samesite = cookieConfig.samesite || defaultCookieConfig.samesite; document.cookie = name + "=" + encodeURIComponent(value) + (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + (path ? '; path=' + path : '') + (domain ? '; domain=' + domain : '') + (secure ? '; secure' : '') + (samesite ? '; samesite=' + samesite : 'lax'); }, isWebsiteAllowedToSaveCookie() { const allowedCookies = this.get('user_allowed_save_cookie'); if (allowedCookies) { const allowedWebsites = JSON.parse(unescape(allowedCookies)); return allowedWebsites[CURRENT_WEBSITE_ID] === 1; } return false; }, getGroupByCookieName(name) { const cookieConsentConfig = window.cookie_consent_config || {}; let group = null; for (let prop in cookieConsentConfig) { if (!cookieConsentConfig.hasOwnProperty(prop)) continue; if (cookieConsentConfig[prop].includes(name)) { group = prop; break; } } return group; }, isCookieAllowed(name) { const cookieGroup = this.getGroupByCookieName(name); return cookieGroup ? window.cookie_consent_groups[cookieGroup] : this.isWebsiteAllowedToSaveCookie(); }, saveTempStorageCookies() { for (const [name, data] of Object.entries(cookieTempStorage)) { if (this.isCookieAllowed(name)) { this.set(name, data['value'], data['days'], data['skipSetDomain']); delete cookieTempStorage[name]; } } } }; hyva.getCookie = (name) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; } return internalCookie.get(name); } hyva.setCookie = (name, value, days, skipSetDomain) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { cookieTempStorage[name] = {value, days, skipSetDomain}; return; } return internalCookie.set(name, value, days, skipSetDomain); } hyva.setSessionCookie = (name, value, skipSetDomain) => { return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) } hyva.getBrowserStorage = () => { const browserStorage = window.localStorage || window.sessionStorage; if (!browserStorage) { console.warn('Browser Storage is unavailable'); return false; } try { browserStorage.setItem('storage_test', '1'); browserStorage.removeItem('storage_test'); } catch (error) { console.warn('Browser Storage is not accessible', error); return false; } return browserStorage; } hyva.postForm = (postParams) => { const form = document.createElement("form"); let data = postParams.data; if (! postParams.skipUenc && ! data.uenc) { data.uenc = btoa(window.location.href); } form.method = "POST"; form.action = postParams.action; Object.keys(postParams.data).map(key => { const field = document.createElement("input"); field.type = 'hidden' field.value = postParams.data[key]; field.name = key; form.appendChild(field); }); const form_key = document.createElement("input"); form_key.type = 'hidden'; form_key.value = hyva.getFormKey(); form_key.name="form_key"; form.appendChild(form_key); document.body.appendChild(form); form.submit(); } hyva.getFormKey = function () { let formKey = hyva.getCookie('form_key'); if (!formKey) { formKey = generateRandomString(); hyva.setCookie('form_key', formKey); } return formKey; } hyva.formatPrice = (value, showSign, options = {}) => { const formatter = new Intl.NumberFormat( 'de\u002DDE', Object.assign({ style: 'currency', currency: 'EUR', signDisplay: showSign ? 'always' : 'auto' }, options) ); return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? formatter.formatToParts(value).map(({type, value}) => { switch (type) { case 'currency': return '\u20AC' || value; case 'minusSign': return '- '; case 'plusSign': return '+ '; default : return value; } }).reduce((string, part) => string + part) : formatter.format(value); } const formatStr = function (str, nStart) { const args = Array.from(arguments).slice(2); return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { const idx = parseInt(n) - nStart; if (args[idx] === null || args[idx] === void 0) { return m; } return p.length % 2 ? p.slice(0, -1).replace('%%', '%') + args[idx] : p.replace('%%', '%') + n; }) } hyva.str = function (string) { const args = Array.from(arguments); args.splice(1, 0, 1); return formatStr.apply(undefined, args); } hyva.strf = function () { const args = Array.from(arguments); args.splice(1, 0, 0); return formatStr.apply(undefined, args); } /** * Take a html string as `content` parameter and * extract an element from the DOM to replace in * the current page under the same selector, * defined by `targetSelector` */ hyva.replaceDomElement = (targetSelector, content) => { // Parse the content and extract the DOM node using the `targetSelector` const parser = new DOMParser(); const doc = parser.parseFromString(content, 'text/html'); const contentNode = doc.querySelector(targetSelector); // Bail if content can't be found if (!contentNode) { return; } hyva.activateScripts(contentNode) // Replace the old DOM node with the new content document.querySelector(targetSelector).replaceWith(contentNode); // Reload customerSectionData and display cookie-messages if present window.dispatchEvent(new CustomEvent("reload-customer-section-data")); hyva.initMessages(); } hyva.activateScripts = (contentNode) => { // Extract all the script tags from the content. // Script tags won't execute when inserted into a dom-element directly, // therefore we need to inject them to the head of the document. const tmpScripts = contentNode.getElementsByTagName('script'); if (tmpScripts.length > 0) { // Push all script tags into an array // (to prevent dom manipulation while iterating over dom nodes) const scripts = []; for (let i = 0; i < tmpScripts.length; i++) { scripts.push(tmpScripts[i]); } // Iterate over all script tags and duplicate+inject each into the head for (let i = 0; i < scripts.length; i++) { let script = document.createElement('script'); script.innerHTML = scripts[i].innerHTML; document.head.appendChild(script); // Remove the original (non-executing) node from the content scripts[i].parentNode.removeChild(scripts[i]); } } return contentNode; } const replace = {['+']: '-', ['/']: '_', ['=']: ','}; hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); let currentTrap; const focusableElements = (rootElement) => { const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; return Array.from(rootElement.querySelectorAll(selector)) .filter(el => { return el.style.display !== 'none' && !el.disabled && el.tabIndex !== -1 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) }) } const focusTrap = (e) => { const isTabPressed = e.key === 'Tab' || e.keyCode === 9; if (!isTabPressed) return; const focusable = focusableElements(currentTrap) const firstFocusableElement = focusable[0] const lastFocusableElement = focusable[focusable.length - 1] e.shiftKey ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) }; hyva.releaseFocus = (rootElement) => { if (currentTrap && (!rootElement || rootElement === currentTrap)) { currentTrap.removeEventListener('keydown', focusTrap) currentTrap = null } } hyva.trapFocus = (rootElement) => { if (!rootElement) return; hyva.releaseFocus() currentTrap = rootElement rootElement.addEventListener('keydown', focusTrap) const firstElement = focusableElements(rootElement)[0] firstElement && firstElement.focus() } hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) }( window.hyva = window.hyva || {} )); </script> <script> if (!window.IntersectionObserver) { window.IntersectionObserver = function (callback) { this.observe = el => el && callback(this.takeRecords()); this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; this.disconnect = () => {}; this.unobserve = () => {}; } } </script> <meta property="og:type" content="product.group"/> <meta property="og:title" content="HEATSAIL Heizstrahler | SunLiner"/> <meta property="og:description" content="Kaufen Sie HEATSAIL Heizstrahler in unserem Online Shop! ✓ Käuferschutz ✓ hohe Qualität ✓ Versandkostenfrei ► Jetzt HEATSAIL bei SunLiner kaufen!"/> <meta property="og:url" content="https://www.sunliner.de/heatsail.html"/> <meta property="og:site_name" content="SunLiner"/> <meta property="og:image" content="https://www.sunliner.de/media/amasty/shopby/option_images/Heatsail-LOGO_horizontal-6.png"/> <script type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"WebSite","url":"https:\/\/www.sunliner.de\/","name":"SunLiner"}</script><script type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"LocalBusiness","@id":"https:\/\/www.sunliner.de\/","name":"SunLiner GmbH","telephone":"+49 541-2002731","email":"info@sunliner.de","faxNumber":"+49 541-2002732","address":{"@type":"PostalAddress","addressCountry":"","addressLocality":"Osnabr\u00fcck","addressRegion":"Niedersachsen","streetAddress":"Kiebitzheide 11-21","postalCode":"49084"},"sameAs":[["https:\/\/www.facebook.com\/Sunliner\/","https:\/\/twitter.com\/Schirmprofi"]],"image":"https:\/\/www.sunliner.de\/media\/seller_image\/","url":"https:\/\/www.sunliner.de\/"}</script><script type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":{"@id":"https:\/\/www.sunliner.de\/heatsail.html","name":"HEATSAIL"},"position":1}]}</script></head> <body id="html-body" class="page-with-filter page-products categorypath- category-default-category ambrand-index-index page-layout-1column"> <script> var foomanGaBaseUrl = '/heatsail.html'; </script> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5KTXCV8" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <input name="form_key" type="hidden" value="CoQfn5T6L3h73yql" /> <noscript> <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"> <div class="container text-center"> <p> <strong>JavaScript scheint in Ihrem Browser deaktiviert zu sein.</strong> <span> Um unsere Website in bester Weise zu erfahren, aktivieren Sie Javascript in Ihrem Browser. </span> </p> </div> </section> </noscript> <script> document.body.addEventListener('touchstart', () => {}, {passive: true}) </script> <script nonce="cWZycXp5aHc1dDA0OHJ0bXA0ZWViNHduMnk3NzdyZmE="> function yireoGoogleTagManager2Pusher(eventData, message) { window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS = window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS || []; const copyEventData = Object.assign({}, eventData); let metaData = {}; if (copyEventData.meta) { metaData = copyEventData.meta; delete copyEventData.meta; } const eventHash = btoa(encodeURIComponent(JSON.stringify(copyEventData))); if (window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS.includes(eventHash)) { yireoGoogleTagManager2Logger('Warning: Event already triggered', eventData); return; } if (metaData && metaData.allowed_pages && metaData.allowed_pages.length > 0 && false === metaData.allowed_pages.some(page => window.location.pathname.includes(page))) { yireoGoogleTagManager2Logger('Warning: Skipping event, not in allowed pages', window.location.pathname, eventData); return; } if (!message) { message = 'push (unknown) [unknown]'; } yireoGoogleTagManager2Logger(message, eventData); window.dataLayer = window.dataLayer || []; if (eventData.ecommerce) { window.dataLayer.push({ecommerce: null}); } window.dataLayer.push(eventData); window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS.push(eventHash); } </script> <script nonce="cWZycXp5aHc1dDA0OHJ0bXA0ZWViNHduMnk3NzdyZmE="> function yireoGoogleTagManager2Logger(...args) { const debug = window.YIREO_GOOGLETAGMANAGER2_DEBUG || false; if (false === debug) { return; } var color = 'gray'; if (args[0].toLowerCase().startsWith('push')) { color = 'green'; } if (args[0].toLowerCase().startsWith('warning')) { color = 'orange'; } var css = 'color:white; background-color:' + color + '; padding:1px;' console.log('%cYireo_GoogleTagManager2', css, ...args); } </script> <div class="page-wrapper"><header class="page-header"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white contentarea" href="#contentarea"> <span> Direkt zum Inhalt </span> </a> <div id="benefits_bar" class="h-7 bg-sunliner-orange-darker"> <div class="relative container max-w-1300 h-full"> <script> 'use strict'; function initBenefitsSliderComponent() { return { active: 0, itemCount: 3, slideshow: 0, slideInterval: 10000, init() { if (this.checkIsMobileResolution()) { this.startSlideshow(); } }, updateSlideshow(nextTick) { if (this.checkIsMobileResolution()) { this.startSlideshow(); } else if (this.slideshow !== 0) { window.clearInterval(this.slideshow); this.slideshow = 0; } nextTick(() => { this.calcActive(); }); }, checkIsMobileResolution() { return window.matchMedia('(max-width: 1023px)').matches; }, startSlideshow() { this.slideshow = window.setInterval(() => { this.slide() }, this.slideInterval); }, slide() { const slider = this.getSlider(); if (slider) { if (this.active >= (this.itemCount - 1)) { this.active = 0; } else { this.active++; } slider.scrollLeft = (slider.scrollWidth / this.itemCount) * this.active; } }, calcActive() { const slider = this.getSlider(); if (slider) { this.active = Math.ceil( Math.round( slider.scrollLeft / (slider.scrollWidth / this.itemCount) ) ); } }, getSlider() { return this.$root.querySelector('.js_slides'); } } } </script> <section class="w-full h-full" x-data="initBenefitsSliderComponent()" @resize.window.debounce="checkIsMobileResolution(); updateSlideshow($nextTick)" x-id="['benefits-desc', 'benefits-id']" role="group" aria-roledescription="Karussell" aria-label="Karussell Kundenvorteile" :aria-describedby="$id('benefits-desc')" > <span class="sr-only" :id="$id('benefits-desc')" tabindex="-1" > Mit der Tabulatortaste können Sie durch die Elemente des Karussells navigieren. Mit den Skip-Links können Sie das Karussell überspringen oder direkt zur Karussellnavigation wechseln. </span> <a href="#benefits-end" class="action skip sr-only focus:not-sr-only focus:absolute focus:z-30 focus:bg-white" > Clicken, um das Karussell zu überspringen </a> <div id="benefits" class="relative w-full overflow-x-hidden h-full font-semibold text-xs text-white"> <div class="relative flex flex-nowrap w-full overflow-auto js_slides snap h-full lg:justify-evenly items-center transition-all"> <div class="js_slide flex-none w-full lg:w-auto" role="group" :aria-hidden="(!checkIsMobileResolution() || (1 === (active + 1))) ? 'false' : 'true'" aria-label="Vorteil 1" :aria-describedby="`benefits-desc-1-${$id('benefits-id')}`" > <div class="flex justify-center items-center gap-x-1"> <a href="/newsletter-rabatt/" target="_self" rel="noopener" :id="`benefits-desc-1-${$id('benefits-id')}`" > 100,- Euro Newsletter Rabatt </a> </div> </div> <div class="js_slide flex-none w-full lg:w-auto" role="group" :aria-hidden="(!checkIsMobileResolution() || (2 === (active + 1))) ? 'false' : 'true'" aria-label="Vorteil 2" :aria-describedby="`benefits-desc-2-${$id('benefits-id')}`" > <div class="flex justify-center items-center gap-x-1"> <a href="/service/" target="_self" rel="noopener" :id="`benefits-desc-2-${$id('benefits-id')}`" > Kostenloser Versand in DE </a> </div> </div> <div class="js_slide flex-none w-full lg:w-auto" role="group" :aria-hidden="(!checkIsMobileResolution() || (3 === (active + 1))) ? 'false' : 'true'" aria-label="Vorteil 3" :aria-describedby="`benefits-desc-3-${$id('benefits-id')}`" > <div class="flex justify-center items-center gap-x-1"> <a href="/zahlung/" target="_self" rel="noopener" :id="`benefits-desc-3-${$id('benefits-id')}`" > 5 % Rabatt </a> </div> </div> </div> </div> <span id="benefits-end" tabindex="-1"></span> </section> <div class="absolute top-1 right-5 w-full max-w-max"> <div x-data="{ open: false }" class="relative"> <div @click.prevent="open = !open" @click.outside="open = false" @keydown.window.escape="open=false" aria-haspopup="true" aria-expanded="true" class="w-full flex justify-center items-center gap-x-1 py-0.5 cursor-pointer"> <div class="text-xs uppercase"> de </div> <i class="svgsprite flag-de"></i> <img x-show="!open" class="w-2 h-2" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/arrow-brown-d.svg" alt=""> <img x-show="open" x-cloak class="w-2 h-2" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/arrow-brown-u.svg" alt=""> </div> <nav x-cloak="" x-show="open" aria-orientation="vertical" aria-labelledby="options-menu" role="menu" class="absolute right-0 top-full z-50 mt-2 shadow-md max-w-max bg-white border border-sunliner-gray-light text-xs"> <i class="absolute top-[-14px] right-[8px] w-0 h-0 block z-50 border-[7px] border-transparent border-b-[#BBB]"></i> <i class="absolute top-[-12px] right-[9px] w-0 h-0 block z-[51] border-[6px] border-transparent border-b-white"></i> <a href="https://www.sunliner.de/stores/store/redirect/___store/en/uenc/aHR0cHM6Ly93d3cuc3VubGluZXIuZGUvZW4vaGVhdHNhaWw%2C/___from_store/deutsch/" class="block p-2 text-sunliner-orange hover:text-sunliner-blue-light"> english </a> <a href="https://www.sunliner.de/stores/store/redirect/___store/fr/uenc/aHR0cHM6Ly93d3cuc3VubGluZXIuZGUvZnIvaGVhdHNhaWw%2C/___from_store/deutsch/" class="block p-2 text-sunliner-orange hover:text-sunliner-blue-light"> Français </a> </nav> </div> </div> </div> </div> <script> function initHeader () { return { searchOpen: false, searchResultsOpen: false, isMobileForSearch: false, isMobileForNavigation: false, cart: {}, isCartOpen: false, getData(data) { if (data.cart) { this.cart = data.cart } }, isCartEmpty() { return !this.cart.summary_count }, toggleCart(event) { if (event.detail && event.detail.isOpen !== undefined) { this.isCartOpen = event.detail.isOpen if (!this.isCartOpen && this.$refs && this.$refs.cartButton) { this.$refs.cartButton.focus() } } else { this.isCartOpen = true } }, menu: initHeaderNavigation(), init() { this.cloakMobileMenu(); this.checkIsMobileResolutionForSearch(); this.checkIsMobileResolutionForNavigation(); this.positionSearchBar(); }, checkIsMobileResolutionForSearch() { this.isMobileForSearch = window.matchMedia('(max-width: 767px)').matches; }, checkIsMobileResolutionForNavigation() { this.isMobileForNavigation = window.matchMedia('(max-width: 1023px)').matches; }, positionSearchBar() { const searchForm = document.getElementById('search_mini_form').parentElement; const desktopSearchBar = document.getElementById('desktop_search_bar'); const mobileSearchBar = document.getElementById('mobile_search_bar'); if (this.isMobileForSearch) { if (desktopSearchBar.querySelector('#search_mini_form') !== null) { mobileSearchBar.appendChild(searchForm); } } else if (mobileSearchBar.childElementCount > 0) { desktopSearchBar.appendChild(searchForm); } }, cloakMobileMenu() { const menu = document.getElementById('menu'); menu.classList.remove('hidden'); menu.classList.replace('lg:block', 'block'); }, eventListeners: { ['@resize.window.debounce']() { this.init(); }, ['@visibilitychange.window.debounce']() { this.checkIsMobileResolutionForSearch(); this.checkIsMobileResolutionForNavigation(); }, ['@keydown.window.escape']() { this.searchOpen = false; }, ['@private-content-loaded.window'](event) { this.getData(event.detail.data); }, ['@search-results-open-updated.window.debounce.50'](event) { this.searchResultsOpen = event.detail.open; } } } } function initCompareHeader() { return { compareProducts: null, itemCompareCount: 0, receiveCompareData(data) { if (data['compare-products']) { this.compareProducts = data['compare-products']; this.itemCompareCount = this.compareProducts.count; } } } } function initWishlistHeader() { return { wishlistProducts: null, itemWishlistCount: 0, receiveWishlistData(data) { if (data['wishlist']) { this.wishlistProducts = data['wishlist']; this.itemWishlistCount = this.wishlistProducts.items.length; } } } } </script> <div id="header" class="z-30" :class="{ 'relative': !(isMobileForSearch && searchResultsOpen), 'fixed inset-0 overflow-y-scroll': (isMobileForSearch && searchResultsOpen) }" x-data="initHeader()" @private-content-loaded.window="getData(event.detail.data)" x-bind="eventListeners" > <div id="header_main_bar" class="container max-w-1300 pt-5 bg-white"> <div class="flex items-end justify-between w-full gap-y-0 gap-x-5 pb-8"> <!-- Logo & Hamburger --> <div class="md:mr-5 2xl:mr-10 flex md:shrink-0 gap-x-3"> <!-- Mobile Hamburger --> <button x-ref="mobileMenuTrigger" @click="menu.openMobileMenu()" type="button" class="lg:hidden z-[101] shrink-0 self-center xs:pt-2.5 text-sunliner-gray" aria-label="Menü öffnen" aria-haspopup="menu" :aria-expanded="menu.open" :hidden="menu.open" @keydown.window.escape="menu.open=false"> <img x-show="!menu.open" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/menu.svg" alt="" width="24" height="18"/> </button> <button @click="menu.closeMobileMenu()" :class="{ 'absolute top-0 right-11 r-3.5': menu.open }" class="lg:hidden z-[101] shrink-0 text-sunliner-gray" aria-label="Menü schließen" type="button" @keydown.window.escape="menu.open=false" > <img x-show="menu.open" x-cloak src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/menu-close.svg" alt="" width="20" height="20"/> </button> <!-- Logo --> <a href="https://www.sunliner.de/" title="" aria-label="Zur Startseite gehen" > <img src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/sunliner-logo.svg" title="Sunliner Logo" alt="Sunliner Logo" class="h-full" width="168" height="63" /> </a> </div> <!-- Desktop Search --> <div id="desktop_search_bar" class="w-full hidden md:block"> <label class="sr-only" for="search" data-role="minisearch-label"> <span>Suche</span> </label> <div x-data="initMirasvitSearch()" @click.outside="closeSearch"> <form id="search_mini_form" action="https://www.sunliner.de/catalogsearch/result/" method="get" autocomplete="off" class="form minisearch flex justify-end items-end"> <input id="search" type="search" x-ref="searchInput" name="q" value="" placeholder="Hier den ganzen Shop durchsuchen..." maxlength="128" class="w-full h-8 border-0 border-b border-sunliner-gray-lighter text-sunliner-gray placeholder-sunliner-gray-lightest focus:outline-none focus:ring-0 focus:border-sunliner-orange transition appearance-none" x-on:keyup.debounce.300="doSearch($refs.searchInput.value)" x-on:click.debounce.150="openSearch" x-on:keydown.debounce.100="startSearch($refs.searchInput.value)" @input.debounce="toggleSearchButton" @search-open.window.debounce.10=" $el.focus() $el.select() " /> <button type="submit" title="Suche" :disabled="buttonDisabled" class="hidden z-[91] w-10 h-12 md:flex shrink-0 justify-center items-center bg-sunliner-gray-faint border-b border-sunliner-orange group" :class="{'hover:bg-sunliner-orange': !buttonDisabled}"> <i class="svgsprite search" :class="{'search': buttonDisabled, 'search-hoverable': !buttonDisabled}"></i> </button> </form> <div x-cloak x-show="isOpen" id="mirasvitSearchResults" class="absolute inset-x-0 z-[90] max-w-1300 w-full mx-auto p-5 md:pt-8 shadow-lg bg-white text-lg leading-normal transition appearance-none lg:text-xl"> <div class="flex flex-row justify-center items-center w-full h-full absolute select-none z-40" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"> <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> <svg width="57" height="57" viewBox="0 0 57 57" xmlns="http://www.w3.org/2000/svg" stroke="#fff" class="stroke-current text-primary"> <g fill="none" fill-rule="evenodd"> <g transform="translate(1 1)" stroke-width="2"> <circle cx="5" cy="50" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> </circle> <circle cx="27" cy="5" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> </circle> <circle cx="49" cy="50" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> </circle> </g> </g> </svg> <div class="ml-10 text-primary text-xl"> Laden... </div> </div> <template x-if="searchResults"> <div class="w-full"> <div class="container p-0 grid xs:grid-cols-1 lg:grid-cols-2 gap-5"> <template x-for="item in searchProducts"> <div class="group w-full p-2 outline outline-1 outline-sunliner-gray-lightest overflow-hidden transition duration-200 ease-out hover:shadow-cards hover:outline-sunliner-orange-lighter"> <a x-bind:href="`${item.url}`" class="w-full h-full flex gap-4"> <div class="self-center"> <img x-bind:src="`${item.imageUrl}`" class="p-0.5 border border-sunliner-gray-faint group-hover:border-sunliner-gray-lightest"/> </div> <div class="w-full flex flex-col gap-y-2"> <h4 x-html="item.name"></h4> <p class="max-h-16 text-sunliner-gray text-xs overflow-hidden" x-html="item.description"></p> <div class="self-end flex lg:flex-col xl:flex-row justify-between item-end"> <span class="" x-html="item.price"></span> </div> </div> </a> </div> </template> <template x-if="searchProducts == ''"> <p>No results found.</p> </template> </div> <div class="px-6 pt-6 w-full order-2 col-span-12"> <hr class="border-sunliner-gray-lighter"> <div class="flex items-center justify-center"> <a x-bind:href="numberResultsUrl"> <p class="mt-4 font-bold text-base lg:text-lg text-sunliner-gray hover:text-sunliner-orange" x-html="numberResults"></p> </a> </div> </div> </div> </template> <template x-if="noResults"> <div class="w-full bg-white"> <p class="w-full mb-0 p-2 bg-sunliner-orange-delivery text-lg leading-normal transition appearance-none lg:text-xl" x-html="noResultsText"> </p> </div> </template> </div> </div> <script> function initMirasvitSearch() { return { //initialize Variables hotSearch: false, searchResults: false, noResults: false, isLoading: false, isOpen: false, blockConfig: {"query":"","priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":".","groupLength":3,"integerRequired":false},"minSearchLength":3,"url":"https:\/\/www.sunliner.de\/searchautocomplete\/ajax\/suggest\/","storeId":"1","delay":300,"isAjaxCartButton":false,"isShowCartButton":false,"isShowImage":true,"isShowPrice":true,"isShowSku":false,"isShowRating":true,"isShowDescription":true,"isShowStockStatus":false,"layout":"in-page","popularTitle":"Popular Suggestions","popularSearches":[],"isTypeaheadEnabled":true,"typeaheadUrl":"https:\/\/www.sunliner.de\/searchautocomplete\/ajax\/typeahead\/","minSuggestLength":2,"currency":"EUR","limit":32,"customerGroupId":0}, xhttp: false, noResultsText: '', numberResults: '', numberResultsUrl: '', buttonDisabled: true, searchProductsTotal: '', searchCategoriesTotal: '', searchPagesTotal: '', searchMirasvitKbArticleTotal: '', searchMirasvitBlogPostTotal: '', searchProducts: [], searchCategories: [], searchPages: [], searchMirasvitBlogPost: [], searchMirasvitKbArticle: [], searchMap: { 'magento_cms_page': 'Pages', 'magento_catalog_category': 'Categories', 'magento_catalog_product': 'Products', 'mirasvit_blog_post': 'MirasvitBlogPost', 'mirasvit_kb_article': 'MirasvitKbArticle' }, hotSearchClickEvent: function (ev) { var hotSearchClick = event.currentTarget.innerText; document.getElementById("search").value = hotSearchClick; this.doSearch(hotSearchClick); }, openSearch: function () { searchValue = document.getElementById("search").value.length; this.isOpen = searchValue !== 0; this.dispatchSearchEvent(this.isOpen); if (searchValue >= this.blockConfig.minSearchLength) { this.hideHotSearch(); } else { this.showHotSearch(); this.hideSearchResults(); } }, startSearch: function (e) { if (e) { this.isOpen = true; this.dispatchSearchEvent(true); } else { this.isOpen = false; } }, closeSearch: function () { this.isOpen = false; this.dispatchSearchEvent(false); }, showHotSearch: function () { this.hotSearch = true; }, hideHotSearch: function () { this.hotSearch = false; }, showSearchResults: function () { this.searchResults = true; this.dispatchSearchEvent(true); }, hideSearchResults: function () { this.searchResults = false; this.dispatchSearchEvent(false); }, showNoResults: function () { this.noResults = true; }, hideNoResults: function () { this.noResults = false; }, setNoResultsText(text) { if (!text) { return; } this.noResultsText = text; }, setNumberResults(text) { this.numberResults = text; }, setNumberResultsUrl(text) { this.numberResultsUrl = text; }, resetSearchData: function () { // Reinitialize Variables to avoid wrong search results. this.searchPagesTotal = 0; this.searchCategoriesTotal = 0; this.searchProductsTotal = 0; this.searchMirasvitKbArticleTotal = 0; this.searchMirasvitBlogPostTotal = 0; this.searchProducts = []; this.searchPages = []; this.searchCategories = []; this.searchMirasvitKbArticle = []; this.searchMirasvitBlogPost = []; }, dispatchSearchEvent: function (open) { window.dispatchEvent( new CustomEvent( 'search-results-open-updated', {detail: {open: open}} ) ); }, doSearch: function (query) { var self = this; // Min search length if (query.length < this.blockConfig.minSearchLength) { this.showHotSearch(); this.isLoading = false; this.hideSearchResults(); return; } else { this.hideHotSearch(); this.isLoading = true; this.showSearchResults(); } // AJAX for searchautocomplete/ajax/suggest/ if (this.xhttp) { try { this.xhttp.abort(); } catch { } } this.xhttp = new XMLHttpRequest(); var xhttp = this.xhttp; var queryEncoded = encodeURIComponent(query); var url = this.blockConfig.url.replace(/\/$/, "") + "/?q=" + queryEncoded + "&store_id=" + this.blockConfig.storeId + "&cat=false"; xhttp.open("GET", url, true); xhttp.setRequestHeader("Content-Type", "application/json"); xhttp.onreadystatechange = function () { if (this.readyState === 4 && this.status === 200) { // Response from ajax call in JSON. var response = JSON.parse(this.responseText); self.resetSearchData(); // Product Search Results for (index in response.indexes) { if (response.indexes[index].items.length > 0) { var res = response.indexes[index]; var map = null; if (self.searchMap[res.identifier]) { map = self.searchMap[res.identifier]; self['search' + map] = res.items; self['search' + map + 'Total'] = res.totalItems; } } } self.isLoading = false; self.hideNoResults(); self.setNumberResults(response.textAll); self.setNumberResultsUrl(response.urlAll); if (response.noResults) { self.setNoResultsText(response.textEmpty); self.hideSearchResults(); self.showNoResults(); } } }; xhttp.send(); }, toggleSearchButton: function() { this.buttonDisabled = this.$refs.searchInput < this.blockConfig.minSearchLength; } } } </script> </div> <!-- Hotline --> <div class="hidden lg:flex shrink-0 items-end gap-x-5 pb-1"> <div class="flex items-center gap-x-1.5"> <i class="shrink-0 svgsprite hotline-small"></i> <div class="w-full flex flex-col gap-y-1"> <span class="text-sm font-light tracking-wider leading-none"> Hotline: </span> <a href="tel:05412002731" class="min-w-max w-full text-lg font-bold leading-none text-sunliner-brown-lighter hover:text-sunliner-brown-lighter focus:text-sunliner-brown-lighter" aria-label="Hotline anrufen" > 0541 - 200 27 31 </a> </div> </div> <a class="shrink-0 w-14 mb-0.5" target="_blank" rel="noopener" href="https://www.trustedshops.de/bewertung/info_X69B028C7DECCB7B48277310B07990616.html" aria-label="Gehe zu Trusted Shops" > <img src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/ts.png" srcset="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/ts.png 1x, https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/ts-2x.png 2x" alt="Trusted Shops" width="55" height="55" aria-hidden="true"/> </a> </div> <!-- Icons --> <div class="xl:ml-5 2xl:ml-10 flex justify-end items-center gap-x-2 md:gap-x-5 xs:pb-2.5" @touchend.prevent.stop="$refs['mobile_search_label'].click()"> <!-- Mobile Search Icon--> <button id="menu-search-icon" class="md:hidden w-8 h-8 flex justify-center items-center fill-current" @click.prevent=" searchOpen = !searchOpen; $dispatch('search-open'); " aria-label="Suchformular umschalten" aria-haspopup="true" :aria-expanded="searchOpen" x-ref="mobile_search_label" :class=" searchOpen ? 'text-sunliner-orange' : 'text-sunliner-gray-darker' " > <label for="search" data-role="minisearch-label"> <img class="w-8 h-8" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/search.svg" alt=""> </label> </button> <!-- Customer Icon --> <a href="https://www.sunliner.de/customer/account/" id="customer-menu" @touchend.prevent.stop="$el.click()" title="Login"> <svg class="w-8 h-9 block hover-orange text-sunliner-gray-darker" viewBox="0 0 32 36" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" fill="currentColor" aria-hidden="true"> <path d="M30.112 31.573c0 8.793-6.276 1.737-14.017 1.737S2.078 40.366 2.078 31.573c0-4.306-3.686-8.214-1.24-11.08 1.399-1.639 4.669-2.937 7.989-3.775 1.635 3.267 4.484 5.978 7.715 5.978 3.125 0 5.875-2.535 7.519-5.656 3.002.929 5.822 2.289 7.133 3.965 2.198 2.812-1.082 6.513-1.082 10.568zm-13.57-10.834c-5.053 0-9.173-6.628-9.173-11.649 0-5.02 4.097-9.09 9.15-9.09 5.054 0 9.15 4.07 9.15 9.09 0 5.021-4.073 11.649-9.127 11.649z"/> <clippath id="account"> <path d="M30.112 31.573c0 8.793-6.276 1.737-14.017 1.737S2.078 40.366 2.078 31.573c0-4.306-3.686-8.214-1.24-11.08 1.399-1.639 4.669-2.937 7.989-3.775 1.635 3.267 4.484 5.978 7.715 5.978 3.125 0 5.875-2.535 7.519-5.656 3.002.929 5.822 2.289 7.133 3.965 2.198 2.812-1.082 6.513-1.082 10.568zm-13.57-10.834c-5.053 0-9.173-6.628-9.173-11.649 0-5.02 4.097-9.09 9.15-9.09 5.054 0 9.15 4.07 9.15 9.09 0 5.021-4.073 11.649-9.127 11.649z" clip-rule="evenodd"/> </clippath> <g clip-path="url(#account)"> <rect height="100%" width="100%"></rect> </g> </svg> </a> <!-- Wishlist Icon --> <a id="wishlist-icon" class="hidden xs:flex justify-center items-center gap-x-1" href="https://www.sunliner.de/wishlist/" title="Wunschliste" x-data="initWishlistHeader()" @private-content-loaded.window="receiveWishlistData($event.detail.data)" @touchend.prevent.stop="$el.click()" :aria-label="` Wunschliste, ${itemWishlistCount > 1 ? hyva.str('\u00251\u0020Artikel', itemWishlistCount) : hyva.str('\u00251\u0020Eintrag', itemWishlistCount) }`" > <svg class="w-10 h-9 block hover-orange text-sunliner-gray-darker" aria-hidden="true" viewBox="0 0 37 35" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" fill="currentColor"> <path d="M18.5 0l6.098 11L37 13.369l-8.633 9.168L29.934 35 18.5 29.667 7.066 35l1.567-12.463L0 13.369 12.402 11 18.5 0"/> <clippath id="star"> <path d="M18.5 0l6.098 11L37 13.369l-8.633 9.168L29.934 35 18.5 29.667 7.066 35l1.567-12.463L0 13.369 12.402 11 18.5 0" clip-rule="evenodd"/> </clippath> <g clip-path="url(#star)"> <rect height="100%" width="100%"></rect> </g> </svg> <span x-text="itemWishlistCount" class="bg-sunliner-orange text-white text-center uppercase tabular-nums w-6 h-5 flex justify-center items-center" aria-hidden="true" ></span> </a> <!-- Compare Icon --> <a id="compare-link" class="justify-center items-center gap-x-1" :class="{ 'hidden': !(itemCompareCount > 0), 'hidden sm:flex': (itemCompareCount > 0) }" href="https://www.sunliner.de/catalog/product_compare/index/" title="Produkte vergleichen" x-data="initCompareHeader()" @private-content-loaded.window="receiveCompareData($event.detail.data)" @touchend.prevent.stop="$el.click()" :aria-label="` Produkte vergleichen, ${itemCompareCount > 1 ? hyva.str('\u00251\u0020Artikel', itemCompareCount) : hyva.str('\u00251\u0020Eintrag', itemCompareCount) }`" x-cloak > <svg class="w-9 h-9 block hover-orange text-sunliner-gray-darker" aria-hidden="true" viewBox="0 0 35 36" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" fill="currentColor"> <path d="M17.5.5a17.5 17.5 0 110 35 17.5 17.5 0 010-35zM11.45 13H9.14l3.27 4H3.75v2h8.66l-3.28 4h2.32l4.1-5-4.1-5zm11.15 4l3.27-4h-2.31l-4.1 5 4.1 5h2.31l-3.27-4h8.65v-2H22.6z"/> <clippath id="wish"> <path d="M17.5.5a17.5 17.5 0 110 35 17.5 17.5 0 010-35zM11.45 13H9.14l3.27 4H3.75v2h8.66l-3.28 4h2.32l4.1-5-4.1-5zm11.15 4l3.27-4h-2.31l-4.1 5 4.1 5h2.31l-3.27-4h8.65v-2H22.6z" clip-rule="evenodd"/> </clippath> <g clip-path="url(#wish)"> <rect height="100%" width="100%"></rect> </g> </svg> <span x-text="itemCompareCount" class="bg-sunliner-orange text-white text-center uppercase tabular-nums w-6 h-5 flex justify-center items-center" aria-hidden="true" ></span> </a> <!-- Cart Icon --> <button id="menu-cart-icon" class="relative flex justify-center items-center gap-x-1" x-ref="cartButton" :aria-disabled="isCartEmpty()" :aria-label="` Mini-Warenkorb umschalten, ${isCartEmpty() ? 'Warenkorb ist leer' : cart.summary_count > 1 ? hyva.str('%1 Artikel', cart.summary_count) : hyva.str('%1 Element', cart.summary_count) }`" @click.prevent.stop="() => { $dispatch('toggle-cart', { isOpen: true }) }" @toggle-cart.window="toggleCart($event)" :aria-expanded="isCartOpen" aria-haspopup="dialog" @touchend.prevent.stop="$refs['cartButton'].click()" > <svg class="w-8 h-9 block hover-orange text-sunliner-gray-darker" aria-hidden="true" viewBox="0 0 32 37" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" fill="currentColor"> <path d="M31.93 8.424l-10.637-2.82-1.673 6.222h7.043c4.647 0-.077 11.188-.077 11.188-.421.84-1.263 1.399-2.386 1.399H9.963L8.7 26.791v.139c0 .14.141.28.281.28H26.36v2.797H8.42a2.81 2.81 0 01-2.807-2.797c0-.419.141-.979.281-1.398l1.964-3.357-5.051-10.629H0V9.029h4.631l1.263 2.797h12.644l1.745-6.49L9.914 2.587l.008-.036c.688-2.56 6.173-3.32 12.25-1.697 6.074 1.622 10.441 5.01 9.758 7.57zM8.616 31.022c1.652 0 3.003 1.345 3.003 2.989S10.268 37 8.616 37c-1.651 0-3.003-1.345-3.003-2.989s1.352-2.989 3.003-2.989zm15.016 0c1.652 0 3.003 1.345 3.003 2.989S25.284 37 23.632 37c-1.652 0-3.003-1.345-3.003-2.989s1.351-2.989 3.003-2.989z" fill="#555"/> <clippath id="cart"> <path d="M31.93 8.424l-10.637-2.82-1.673 6.222h7.043c4.647 0-.077 11.188-.077 11.188-.421.84-1.263 1.399-2.386 1.399H9.963L8.7 26.791v.139c0 .14.141.28.281.28H26.36v2.797H8.42a2.81 2.81 0 01-2.807-2.797c0-.419.141-.979.281-1.398l1.964-3.357-5.051-10.629H0V9.029h4.631l1.263 2.797h12.644l1.745-6.49L9.914 2.587l.008-.036c.688-2.56 6.173-3.32 12.25-1.697 6.074 1.622 10.441 5.01 9.758 7.57zM8.616 31.022c1.652 0 3.003 1.345 3.003 2.989S10.268 37 8.616 37c-1.651 0-3.003-1.345-3.003-2.989s1.352-2.989 3.003-2.989zm15.016 0c1.652 0 3.003 1.345 3.003 2.989S25.284 37 23.632 37c-1.652 0-3.003-1.345-3.003-2.989s1.351-2.989 3.003-2.989z" clip-rule="evenodd"/> </clippath> <g clip-path="url(#cart)"> <rect height="100%" width="100%"></rect> </g> </svg> <span x-text="cart.summary_count" class="bg-sunliner-orange text-white text-center uppercase tabular-nums w-6 h-5 flex justify-center items-center" aria-hidden="true" > </span> </button> </div> </div> <!-- Mobile Search Placeholder--> <div id="mobile_search_bar" x-cloak x-show="searchOpen" class="z-10 md:hidden w-full mx-auto px-2 py-1.5" @click.outside="searchOpen = false" @keydown.escape=" searchOpen = false; $refs.mobile_search_label.focus(); " ></div> </div> <!-- Main Navigation --> <div id="navigation_bar" class="w-full bg-sunliner-orange-darker"> <div id="menu" class="fixed inset-0 lg:static hidden lg:block w-screen lg:max-w-1300 lg:w-full h-screen lg:h-auto z-[100] lg:m-auto lg:px-1.5 bg-white lg:bg-transparent" :class="{ 'overflow-y-scroll': menu.open }" @click.outside="menu.open = false" x-show="!isMobileForNavigation || menu.open" > <nav class="w-full text-base font-bold px-8 py-12 lg:p-0" aria-label="Hauptmenü" > <ul class="w-full lg:flex items-center divide-y divide-sunliner-gray-lightest lg:divide-y-0"> <li x-data="{ drop: false, canHover: window.matchMedia('(hover:hover)').matches }" class="nav-menu-item" :class="{'nav-menu-item-dropped' : drop}" @touchend.self.stop="drop = !drop" @touchstart.outside.passive="drop = false" @mouseenter="if (canHover) { drop = true }" @mouseleave="if (canHover) { drop = false }" @keydown.window.escape="drop = false" @keydown.enter.stop="drop = !drop" tabindex="0" aria-label="Sonnenschirme" > <span class="px-3.5 flex items-center gap-x-3" @touchend.stop="drop = !drop" aria-hidden="true" > <span>Sonnenschirme</span> <svg x-show="!drop" class="w-3 h-3 lg:w-1.5 lg:h-1.5 ml-auto lg:ml-0 fill-current" width="100%" height="100%" viewBox="0 0 9 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <g transform="matrix(1,0,0,1,-1575.68,-81.5688)"> <path d="M1580.19,85.29C1579.08,84.152 1577.97,83.013 1576.82,81.923C1576.35,81.481 1575.65,82.172 1576.11,82.63C1577.24,83.799 1578.41,84.924 1579.55,86.07C1579.95,86.465 1580.41,86.45 1580.82,86.07C1582.01,84.969 1583.14,83.809 1584.26,82.63C1584.45,82.43 1584.46,82.124 1584.26,81.923C1584.06,81.723 1583.75,81.734 1583.55,81.923C1582.4,83.013 1581.29,84.152 1580.19,85.29Z"/> </g> </svg> <svg x-show="drop" x-cloak class="w-3 h-3 lg:w-1.5 lg:h-1.5 ml-auto lg:ml-0 fill-current" width="100%" height="100%" viewBox="0 0 9 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <g transform="matrix(1,0,0,-1,-1575.68,86.5688)"> <path d="M1580.19,85.29C1579.08,84.152 1577.97,83.013 1576.82,81.923C1576.35,81.481 1575.65,82.172 1576.11,82.63C1577.24,83.799 1578.41,84.924 1579.55,86.07C1579.95,86.465 1580.41,86.45 1580.82,86.07C1582.01,84.969 1583.14,83.809 1584.26,82.63C1584.45,82.43 1584.46,82.124 1584.26,81.923C1584.06,81.723 1583.75,81.734 1583.55,81.923C1582.4,83.013 1581.29,84.152 1580.19,85.29Z"/> </g> </svg> </span> <div class="submenu-box lg:grid-cols-3 lg:w-187" x-show="drop" x-cloak> <div class="flex flex-col w-full"> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/allwetterschirme.html" title="Kategorie Allwetterschirme"> <span>Allwetterschirme</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/ampelschirm.html" title="Kategorie Ampelschirme / Freiarmschirme"> <span>Ampelschirme / Freiarmschirme</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/balkonschirme.html" title="Kategorie Balkonschirme"> <span>Balkonschirme</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/gartenschirme.html" title="Kategorie Gartenschirme"> <span>Gartenschirme</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/sonnenschirme-gastronomie-gewerbe.html" title="Kategorie Gastronomie & Gewerbe"> <span>Gastronomie & Gewerbe</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/grossschirme.html" title="Kategorie Großschirme"> <span>Großschirme</span> </a> </div> <div class="flex flex-col w-full"> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/holzschirme.html" title="Kategorie Holzschirme"> <span>Holzschirme</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/marktschirme.html" title="Kategorie Marktschirme"> <span>Marktschirme</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/sonderloesungen.html" title="Kategorie Sonderlösungen"> <span>Sonderlösungen</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/werbeschirme.html" title="Kategorie Werbeschirme"> <span>Werbeschirme</span> </a> </div> <div class="submenu-text"> <span class="w-full"> <img src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/grossschirme.png" alt="" width="140" loading="lazy"/> </span> <span class="w-full pl-1.5"> Sonnenschirme </span> <span class="w-full pl-1.5 font-normal leading-normal"> Wir sind der Spezialist für hochwertige Sonnenschirme. Stöbern Sie gerne durch unsere zahlreichen Kategorien oder kontaktieren Sie uns direkt - wir freuen, dass sie hier sind! </span> </div> </div> </li> <li x-data="{ drop: false, canHover: window.matchMedia('(hover:hover)').matches }" class="nav-menu-item" :class="{'nav-menu-item-dropped' : drop}" @touchend.self.stop="drop = !drop" @touchstart.outside.passive="drop = false" @mouseenter="if (canHover) { drop = true }" @mouseleave="if (canHover) { drop = false }" @keydown.window.escape="drop = false" @keydown.enter.stop="drop = !drop" tabindex="0" aria-label="Marken" > <span class="px-3.5 flex items-center gap-x-3" @touchend.stop="drop = !drop"> <span>Marken</span> <svg x-show="!drop" class="w-3 h-3 lg:w-1.5 lg:h-1.5 ml-auto lg:ml-0 fill-current" width="100%" height="100%" viewBox="0 0 9 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <g transform="matrix(1,0,0,1,-1575.68,-81.5688)"> <path d="M1580.19,85.29C1579.08,84.152 1577.97,83.013 1576.82,81.923C1576.35,81.481 1575.65,82.172 1576.11,82.63C1577.24,83.799 1578.41,84.924 1579.55,86.07C1579.95,86.465 1580.41,86.45 1580.82,86.07C1582.01,84.969 1583.14,83.809 1584.26,82.63C1584.45,82.43 1584.46,82.124 1584.26,81.923C1584.06,81.723 1583.75,81.734 1583.55,81.923C1582.4,83.013 1581.29,84.152 1580.19,85.29Z"/> </g> </svg> <svg x-show="drop" x-cloak class="w-3 h-3 lg:w-1.5 lg:h-1.5 ml-auto lg:ml-0 fill-current" width="100%" height="100%" viewBox="0 0 9 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <g transform="matrix(1,0,0,-1,-1575.68,86.5688)"> <path d="M1580.19,85.29C1579.08,84.152 1577.97,83.013 1576.82,81.923C1576.35,81.481 1575.65,82.172 1576.11,82.63C1577.24,83.799 1578.41,84.924 1579.55,86.07C1579.95,86.465 1580.41,86.45 1580.82,86.07C1582.01,84.969 1583.14,83.809 1584.26,82.63C1584.45,82.43 1584.46,82.124 1584.26,81.923C1584.06,81.723 1583.75,81.734 1583.55,81.923C1582.4,83.013 1581.29,84.152 1580.19,85.29Z"/> </g> </svg> </span> <div class="submenu-box lg:grid-cols-3 lg:w-187" x-show="drop" x-cloak> <div class="flex flex-col w-full"> <a class="submenu-item" title="Marke Bahama" href="https://www.sunliner.de/bahama_jumbrella.html" > Bahama </a> <a class="submenu-item" title="Marke Bikatec / Schneider" href="https://www.sunliner.de/bikatec.html" > Bikatec / Schneider </a> <a class="submenu-item" "Marke Fim Umbrella" href="https://www.sunliner.de/fim_umbrella.html" > Fim Umbrella </a> <a class="submenu-item" title="Marke Glatz" href="https://www.sunliner.de/glatz.html" > Glatz </a> <a class="submenu-item" title="Marke Heatsail" href="https://www.sunliner.de/heatsail.html" > Heatsail </a> <a class="submenu-item" "Marke Instashade" href="https://www.sunliner.de/instashade.html" > Instashade </a> <a class="submenu-item" title="Marke Jardinico" href="https://www.sunliner.de/jardinico_sonnenschirme.html" > Jardinico </a> <a class="submenu-item" title="Marke Leiner" href="https://www.sunliner.de/leiner.html" > Leiner </a> <a class="submenu-item" title="Marke Liro" href="https://www.sunliner.de/liro.html" > Liro </a> <a class="submenu-item" title="Marke May" href="https://www.sunliner.de/may.html" > May </a> <a class="submenu-item" title="Marke MDT-Tex" href="https://www.sunliner.de/MDT_Sonnenschirme.html" > MDT-Tex </a> </div> <div class="flex flex-col w-full"> <a class="submenu-item" title="Marke Paraflex" href="https://www.sunliner.de/paraflex.html" > Paraflex </a> <a class="submenu-item" title="Marke Prostor" href="https://www.sunliner.de/prostor.html" > Prostor </a> <a class="submenu-item" title="Marke Schneider" href="https://www.sunliner.de/schneider.html" > Schneider </a> <a class="submenu-item" title="Marke Scolaro" href="https://www.sunliner.de/scolaro.html" > Scolaro </a> <a class="submenu-item" title="Marke Shademaker" href="https://www.sunliner.de/shademaker.html" > Shademaker </a> <a class="submenu-item" title="Marke Suncomfort" href="https://www.sunliner.de/suncomfort_by_glatz.html" > Suncomfort </a> <a class="submenu-item" title="Marke Tuuci" href="https://www.sunliner.de/tuuci.html" > Tuuci </a> <a class="submenu-item" title="Marke Umbrosa" href="https://www.sunliner.de/umbrosa.html" > Umbrosa </a> <a class="submenu-item" title="Marke Weishäupl" href="https://www.sunliner.de/weishaeupl.html" > Weishäupl </a> <a class="submenu-item" title="Marke Zangenberg" href="https://www.sunliner.de/zangenberg.html" > Zangenberg </a> </div> <div class="submenu-text"> <span class="w-full"> <img src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/sunliner-logo.svg" alt="" width="140" loading="lazy"/> </span> <span class="w-full"> Eine Auswahl der besten Marken </span> <span class="w-full font-normal leading-normal"> Vielleicht ist es nicht Ihr erster Sonnenschirm, den Sie kaufen möchten!? Aber nun soll es der Richtige sein! Alle führenden Marken finden Sie bei uns. </span> </div> </div> </li> <li x-data="{ drop: false, canHover: window.matchMedia('(hover:hover)').matches }" class="nav-menu-item" :class="{'nav-menu-item-dropped' : drop}" @touchend.self.stop="drop = !drop" @touchstart.outside.passive="drop = false" @mouseenter="if (canHover) { drop = true }" @mouseleave="if (canHover) { drop = false }" @keydown.window.escape="drop = false" @keydown.enter.stop="drop = !drop" tabindex="0" aria-label="Zubehör & Ersatzteile" > <span class="px-3.5 flex items-center gap-x-3" @touchend.stop="drop = !drop"> <span>Zubehör & Ersatzteile</span> <svg x-show="!drop" class="w-3 h-3 lg:w-1.5 lg:h-1.5 ml-auto lg:ml-0 fill-current" width="100%" height="100%" viewBox="0 0 9 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <g transform="matrix(1,0,0,1,-1575.68,-81.5688)"> <path d="M1580.19,85.29C1579.08,84.152 1577.97,83.013 1576.82,81.923C1576.35,81.481 1575.65,82.172 1576.11,82.63C1577.24,83.799 1578.41,84.924 1579.55,86.07C1579.95,86.465 1580.41,86.45 1580.82,86.07C1582.01,84.969 1583.14,83.809 1584.26,82.63C1584.45,82.43 1584.46,82.124 1584.26,81.923C1584.06,81.723 1583.75,81.734 1583.55,81.923C1582.4,83.013 1581.29,84.152 1580.19,85.29Z"/> </g> </svg> <svg x-show="drop" x-cloak class="w-3 h-3 lg:w-1.5 lg:h-1.5 ml-auto lg:ml-0 fill-current" width="100%" height="100%" viewBox="0 0 9 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <g transform="matrix(1,0,0,-1,-1575.68,86.5688)"> <path d="M1580.19,85.29C1579.08,84.152 1577.97,83.013 1576.82,81.923C1576.35,81.481 1575.65,82.172 1576.11,82.63C1577.24,83.799 1578.41,84.924 1579.55,86.07C1579.95,86.465 1580.41,86.45 1580.82,86.07C1582.01,84.969 1583.14,83.809 1584.26,82.63C1584.45,82.43 1584.46,82.124 1584.26,81.923C1584.06,81.723 1583.75,81.734 1583.55,81.923C1582.4,83.013 1581.29,84.152 1580.19,85.29Z"/> </g> </svg> </span> <div class="submenu-box lg:grid-cols-2 lg:w-125" x-show="drop" x-cloak> <div class="flex flex-col w-full"> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/bodenhuelsen.html" title="Kategorie Bodenhülsen"> <span>Bodenhülsen</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/ersatzbespannungen.html" title="Kategorie Ersatzbespannungen"> <span>Ersatzbespannungen</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/schirmstaender-sockel.html" title="Kategorie Schirmständer & Sockel"> <span>Schirmständer & Sockel</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/schutzhuellen.html" title="Kategorie Schutzhüllen"> <span>Schutzhüllen</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/wandhalterungen.html" title="Kategorie Wandhalterungen"> <span>Wandhalterungen</span> </a> <a class="submenu-item widget block block-category-link-inline" href="https://www.sunliner.de/sonstige-verankerungen.html" title="Kategorie Sonstige Verankerungen"> <span>Sonstige Verankerungen</span> </a> </div> <div class="submenu-text"> <span class="w-full"> <img src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/nav-cms-spare.jpg" alt="" width="92" loading="lazy"/> </span> <span class="w-full pl-1"> Mit uns halten Sie Ihren Sonnenschutz intakt </span> <span class="w-full pl-1 font-normal leading-normal"> SunLiner Sonneschirme sind immer eine gute Investition. Nachhaltigkeit ist uns besonders wichtig. Hier finden Ersatzteile und -bespannungen für viele unserer Schirme. </span> </div> </div> </li> <li> <a class="nav-menu-item px-3.5 widget block block-category-link-inline" href="https://www.sunliner.de/outdoor-lifestyle.html" title="Kategorie Outdoor-Lifestyle"> <span>Outdoor-Lifestyle</span> </a> </li> <li> <a class="nav-menu-item px-3.5 widget block block-category-link-inline" href="https://www.sunliner.de/sonnenschirme-angebote.html" title="Kategorie Sale"> <span>% Sale</span> </a> </li> <li id="parasol_finder" class="lg:ml-auto"> <a class="nav-menu-item px-3.5 widget block block-category-link-inline" href="https://www.sunliner.de/sonnenschirm-finder.html" title="Sonnenschirm-Finder"> <span>Sonnenschirm-Finder</span> </a> </li> </ul> </nav> </div> </div> <script> function initHeaderNavigation() { return { open: false, openMobileMenu() { this.open = true this.$nextTick(() => hyva.trapFocus(this.$refs['mobileMenuNavLinks'])); // Prevent from body scrolling while mobile menu opened document.body.style.position = 'fixed'; }, closeMobileMenu() { document.body.style.position = ''; if (this.open) { this.$nextTick(() => this.$refs['mobileMenuTrigger'].focus() || hyva.releaseFocus()); } this.open = false }, } } </script> <!-- Cart Drawer --> <script> function initCartDrawer() { return { open: false, isLoading: false, cart: {}, maxItemsToDisplay: 10, itemsCount: 0, getData(data) { if (data.cart) { this.cart = data.cart; this.itemsCount = data.cart.items && data.cart.items.length || 0; this.setCartItems(); } this.isLoading = false; }, cartItems: [], getItemCountTitle() { return hyva.strf('\u00250\u0020von\u0020\u00251\u0020Produkten\u0020im\u0020Warenkorb\u0020angezeigt', this.maxItemsToDisplay, this.itemsCount) }, setCartItems() { this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; if (this.maxItemsToDisplay > 0) { this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); } }, deleteItemFromCart(itemId) { this.isLoading = true; const formKey = hyva.getFormKey(); const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; fetch(postUrl, { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, "body": "form_key=" + formKey + "&item_id=" + itemId, "method": "POST", "mode": "cors", "credentials": "include" }).then(response => { if (response.redirected) { window.location.href = response.url; } else if (response.ok) { return response.json(); } else { window.dispatchMessages && window.dispatchMessages([{ type: 'warning', text: 'Der\u0020Artikel\u0020konnte\u0020nicht\u0020aus\u0020dem\u0020Warenkorb\u0020entfernt\u0020werden.' }]); this.isLoading = false; } }).then(result => { window.dispatchMessages && window.dispatchMessages([{ type: result.success ? 'success' : 'error', text: result.success ? 'Sie\u0020haben\u0020die\u0020Artikel\u0020entfernt.' : result.error_message }], result.success ? 5000 : 0) window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }); }, scrollLock(use = true) { document.body.style.overflow = use ? "hidden" : ""; }, toggleCartDrawer(event) { if (event.detail && event.detail.isOpen !== undefined) { if (event.detail.isOpen) { this.openCartDrawer(); } else { this.open = false; this.scrollLock(false); this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent); } } else { this.openCartDrawer() } }, openCartDrawer() { this.open = true; this.scrollLock(true); this.$nextTick(() => { this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent) }) }, closeCartDrawer() { this.$dispatch('toggle-cart', { isOpen: false }) }, getSectionDataExtraActions() { if (!this.cart.extra_actions) { return ''; } const contentNode = document.createElement('div'); contentNode.innerHTML = this.cart.extra_actions; hyva.activateScripts(contentNode); return contentNode.innerHTML; } } } </script> <section x-cloak x-show="cart" id="cart-drawer" x-data="initCartDrawer()" @private-content-loaded.window="getData($event.detail.data)" @toggle-cart.window="toggleCartDrawer($event)" @keydown.escape="closeCartDrawer" > <div role="dialog" aria-labelledby="cart-drawer-title" aria-modal="true" :aria-hidden="!open" class="fixed inset-y-0 right-0 z-[110] flex max-w-full"> <div class="backdrop" x-show="open" x-transition:enter="ease-in-out duration-500" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in-out duration-500" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" role="button" @click="closeCartDrawer" aria-label="Mini-Warenkorb schließen"></div> <div class="relative w-screen max-w-md shadow-2xl" x-show="open" x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" x-transition:enter-start="translate-x-full" x-transition:enter-end="translate-x-0" x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" x-transition:leave-start="translate-x-0" x-transition:leave-end="translate-x-full" x-ref="cartDialogContent" role="region" :tabindex="open ? 0 : -1" aria-label="Mein Warenkorb" > <div class="flex flex-col h-full max-h-screen bg-white shadow-xl py-6 space-y-6 divide-y divide-sunliner-gray-lightest overflow-y-auto"> <header class="px-4 sm:px-6"> <h2 id="cart-drawer-title" class="text-lg"> <span x-text="cart.summary_count" class="font-bold"></span> <span x-show="cart.summary_count === 1">Artikel</span> <span x-show="cart.summary_count > 1">Artikel</span> <span>im Warenkorb</span> </h2> </header> <template x-if="!itemsCount"> <div class="relative px-4 py-6 bg-white border-bs sm:px-6 border-container"> Warenkorb ist leer </div> </template> <template x-if="itemsCount"> <div class="relative grid gap-6 sm:gap-8 px-4 py-6 sm:px-6 overflow-y-auto overscroll-y-contain min-h-screen-50"> <template x-for="item in cartItems"> <div class="flex gap-x-4 transition duration-150 ease-in-out"> <a :href="item.product_url" class="w-1/4" :aria-label="hyva.strf('Produkt\u0020\u0022\u00250\u0022', item.product_name)" > <img :src="item.product_image.src" :width="item.product_image.width" :height="item.product_image.height" loading="lazy" alt="" /> </a> <div class="w-3/4 flex flex-col gap-y-2"> <div> <p class="text-xl"> <span x-html="item.qty"></span> x <a class="text-sunliner-orange hover:text-sunliner-blue-light" :href="item.product_url" :aria-label="hyva.strf('Produkt\u0020\u0022\u00250\u0022', item.product_name)" > <span x-html="item.product_name"></span> </a> </p> </div> <template x-for="option in item.options"> <div class="pt-2"> <p class="font-semibold" x-text="option.label + ':'"></p> <p x-html="option.value"></p> </div> </template> <p><span class="font-bold" x-html="item.product_price"></span></p> <div class="max-w-max "> <button type="button" class="p-2 flex items-center gap-x-2 text-sunliner-orange-darker hover:text-sunliner-blue-light" @click="deleteItemFromCart(item.item_id)" :aria-label="hyva.strf('Produkt\u0020\u0022\u00250\u0022\u0020aus\u0020dem\u0020Warenkorb\u0020entfernen', item.product_name)" > <svg class="w-5 h-5 fill-current" viewBox="0 0 11 15" aria-hidden="true" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"> <path id="Form-32-Kopie" d="M10.002,14.5l-9.098,0l0,-8.049l9.098,0l0,8.049Zm-6.452,-6.778l-0.975,0l0,5.931l0.975,0l0,-5.931Zm4.875,0l-0.975,0l0,5.931l0.975,0l0,-5.931Zm-2.437,0l-0.975,0l0,5.931l0.975,0l0,-5.931Zm4.526,-2.119l-10.028,0l0,-2.542l2.535,0c0.085,-1.009 0.651,-2.561 2.385,-2.561c1.732,0 2.228,1.552 2.466,2.561l2.642,0l0,2.542Zm-3.343,-2.118c0,-0.004 -0.243,-2.145 -1.822,-2.138c-1.506,0.008 -1.52,2.138 -1.52,2.138l3.342,0Z"/> </svg> <span>Artikel entfernen</span> </button> </div> </div> </div> </template> </div> </template> <template x-if="itemsCount"> <div> <div class="relative grid gap-5 px-4 py-6 sm:px-6"> <div class="w-full transition duration-150 ease-in-out"> <p>Warenkorb-Zwischensumme: <span class="font-bold text-lg" x-html="cart.subtotal"></span></p> </div> <div class="w-full transition duration-150 ease-in-out"> <a @click.prevent.stop="closeCartDrawer; $dispatch('toggle-authentication', {url: 'https://www.sunliner.de/checkout/'});" href="https://www.sunliner.de/checkout/" class="w-full btn btn-primary py-3.5"> Zur Kasse gehen </a> </div> <div class="w-full transition duration-150 ease-in-out"> <a href="https://www.sunliner.de/checkout/cart/" class="w-full flex justify-center items-center text-sunliner-orange hover:text-sunliner-blue-light"> Warenkorb ansehen und bearbeiten </a> </div> <div x-html="getSectionDataExtraActions()"></div> </div> </div> </template> </div> <button type="button" @click="closeCartDrawer" aria-label="Mini-Warenkorb schließen" class="absolute top-0 right-2 p-4 mt-2 text-gray-300 transition-colors duration-150 ease-in-out text-sunliner-gray hover:text-sunliner-brown-darker z-50" > <svg class="w-5 h-5 stroke-current" width="100%" height="100%" viewBox="0 0 13 13" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"> <g transform="matrix(1,0,0,1,-1589.38,-188.558)"> <path d="M1601.07,189.871L1590.69,200.246" style="fill:none;stroke-width:1px;"/> <g transform="matrix(-1,0,0,1,3191.76,0)"> <path d="M1601.07,189.871L1590.69,200.246" style="fill:none;stroke-width:1px;"/> </g> </g> </svg> </button> </div> <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-cloak x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"> <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> <g fill="none" fill-rule="evenodd"> <g transform="translate(1 1)" stroke-width="2"> <circle cx="5" cy="50" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> </circle> <circle cx="27" cy="5" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> </circle> <circle cx="49" cy="50" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> </circle> </g> </g> <title>loader</title></svg> <div class="ml-10 text-primary text-xl"> Laden... </div> </div> </div> </section> <!-- Authentication Pop-Up --> <script> function initAuthentication() { return { open: false, forceAuthentication: false, checkoutUrl: 'https://www.sunliner.de/checkout/index/', errors: 0, hasCaptchaToken: 0, displayErrorMessage: false, errorMessages: [], setErrorMessages: function setErrorMessages(messages) { this.errorMessages = [messages]; this.displayErrorMessage = this.errorMessages.length; }, submitForm: function () { // Do not rename $form, the variable is expected to be declared in the recaptcha output const $form = document.querySelector('#login-form'); if (this.errors === 0) { this.dispatchLoginRequest($form); } }, onPrivateContentLoaded: function (data) { const isLoggedIn = data.customer && data.customer.firstname; if (data.cart && !isLoggedIn) { this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; } }, redirectIfAuthenticated: function (event) { if (event.detail && event.detail.url) { this.checkoutUrl = event.detail.url; } if (!this.forceAuthentication) { window.location.href = this.checkoutUrl; } }, dispatchLoginRequest: function(form) { this.isLoading = true; const username = this.$refs['customer-email'].value; const password = this.$refs['customer-password'].value; const formKey = hyva.getFormKey(); const bodyFields = { 'username': username, 'password': password, 'formKey': formKey }; const fieldName = 'g\u002Drecaptcha\u002Dresponse'; const recaptchaField = fieldName && form[fieldName]; if (recaptchaField) { bodyFields[fieldName] = recaptchaField.value; } fetch('https://www.sunliner.de/customer/ajax/login/', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify(bodyFields) } ).then(response => { return response.json() } ).then(data=> { this.isLoading = false; if (data.errors) { dispatchMessages([{ type: 'error', text: data.message }], 5000); this.errors = 1; this.hasCaptchaToken = 0; } else { window.location.href = this.checkoutUrl; } }); } } } </script> <section id="authentication-popup" x-data="initAuthentication()" @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)" @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)" @keydown.window.escape="open = false" > <div class="backdrop" aria-hidden="true" x-cloak x-show="open" x-transition:enter="ease-in-out duration-500" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in-out duration-500" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" @click="open = false" ></div> <div role="dialog" aria-modal="true" @click.outside="open = false" class="inset-y-0 right-0 z-30 flex max-w-full fixed" x-cloak x-show="open" > <div class="relative w-screen max-w-md pt-16 bg-container-lighter" x-show="open" x-cloak="" x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" x-transition:enter-start="translate-x-full" x-transition:enter-end="translate-x-0" x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" x-transition:leave-start="translate-x-0" x-transition:leave-end="translate-x-full" > <div x-show="open" x-cloak="" x-transition:enter="ease-in-out duration-500" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in-out duration-500" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" class="absolute top-0 right-2 flex p-2 mt-2"> <button type="button" @click="open = false;" aria-label="Panel schließen" class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black" > <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"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> <title>Panel schließen</title></svg> </button> </div> <template x-if="open"> <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto"> <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm"> <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900"> <strong class="font-medium">Auschecken über Ihr Konto</strong> </p> <form class="form form-login" method="post" @submit.prevent="submitForm();" id="login-form" > <div class="fieldset login"> <div class="field email required"> <label class="label" for="form-login-username" form="login-form" > <span>E-Mail-Adresse</span> </label> <div class="control"> <input name="username" id="form-login-username" x-ref="customer-email" @change="errors = 0" type="email" required autocomplete="off" class="form-input input-text" > </div> </div> <div class="field password required"> <label for="form-login-password" class="label" form="login-form"> <span>Passwort</span> </label> <div class="control"> <input name="password" id="form-login-password" type="password" class="form-input input-text" required x-ref="customer-password" autocomplete="off" @change="errors = 0" > </div> </div> <input name="context" type="hidden" value="checkout" /> <div class="actions-toolbar flex justify-between pt-6 pb-2 items-center"> <button type="submit" class="inline-flex btn btn-primary disabled:opacity-75" > Anmelden </button> <a href="https://www.sunliner.de/customer/account/forgotpassword/" > Passwort vergessen? </a> </div> </div> </form> </div> <div class="mx-4"> </div> <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm"> <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900"> <strong class="font-medium">Als Neukunde auschecken</strong> </p> <div class="block-content"> <p class="mb-1"> Ein Konto zu erstellen hat viele Vorteile: </p> <ul class="list-disc pl-5"> <li> Bestellungen und Sendungen verfolgen</li> <li> Alte Bestellungen einsehen</li> <li> Schneller zur Kasse gehen</li> </ul> <div class="actions-toolbar flex justify-between mt-6 mb-2 items-center"> <a href="https://www.sunliner.de/customer/account/create/" class="inline-flex btn btn-primary"> Registrieren </a> </div> </div> </div> </div> </template> </div> </div> </section> </div> </header><div class="top-container"><!--Glossary-Skip--> <nav class="breadcrumbs max-w-1300 w-full mx-auto my-5 px-5" aria-label="Breadcrumb"> <div class=""> <ol class="flex items-center text-xs text-sunliner-gray"> <li class="flex items-center home"> <a href="https://www.sunliner.de/" title="Zur Homepage"> <i class="svgsprite breadcrumb"></i> </a> </li> <li class="flex items-center manufacturer313"> <span aria-hidden="true" class="px-2"> <img class="w-2 h-2" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/arrow-orange-r.svg" alt="" width="8" height="8"> </span> <a href="https://www.sunliner.de/heatsail.html" title=""> HEATSAIL </a> </li> <li class="flex items-center all-products"> <span aria-hidden="true" class="px-2"> <img class="w-2 h-2" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/arrow-orange-r.svg" alt="" width="8" height="8"> </span> <a href="" aria-current="page" >HEATSAIL</a> </li> </ol> </div> </nav> <!--/Glossary-Skip--></div><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> <div class="page messages"><script> function initMessages() { "use strict"; return { messages: window.mageMessages || [], isEmpty() { return this.messages.reduce( function (isEmpty, message) { return isEmpty && message === undefined }, true ) }, removeMessage(messageIndex) { this.messages[messageIndex] = undefined; }, addMessages(messages, hideAfter) { messages.map((message) => { this.messages = this.messages.concat(message); if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { hideAfter = window.defaultSuccessMessageTimeout; } if (hideAfter) { this.setHideTimeOut(this.messages.length -1, hideAfter); } }); }, setHideTimeOut(messageIndex, hideAfter) { setTimeout((messageIndex) => { this.removeMessage(messageIndex); }, hideAfter, messageIndex); }, eventListeners: { ['@messages-loaded.window'](event) { this.addMessages(event.detail.messages, event.detail.hideAfter) }, ['@private-content-loaded.window'](event) { const data = event.detail.data; if ( data.messages && data.messages.messages && data.messages.messages.length ) { this.addMessages(data.messages.messages); } }, ['@clear-messages.window']() { this.messages = []; } } } } </script> <section id="messages" x-data="initMessages()" x-bind="eventListeners" aria-live="assertive" role="alert" > <template x-if="!isEmpty()"> <div class="w-full"> <div class="messages container mx-auto py-3"> <template x-for="(message, index) in messages" :key="index"> <div> <template x-if="message"> <div class="message" :class="message.type" :ui-id="'message-' + message.type" > <span x-html="message.text"></span> <button type="button" class="text-white hover:text-sunliner-gray-darker" aria-label="Nachricht schließen" @click.prevent="removeMessage(index)" > <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"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> </svg> </button> </div> </template> </div> </template> </div> </div> </template> </section> </div> <div class="container xl:max-w-1300 flex flex-col md:flex-row flex-wrap font-bold justify-center items-center mt-6 mb-5 lg:mt-8 px-2.5 md:px-5"> <h1 class="page-title" > <span class="base" data-ui-id="page-title-wrapper" >HEATSAIL</span> </h1> </div> <div id="category-view-container" class="category-view container"> <div class="category-image max-w-64 lg:w-1/5 my-5 lg:mr-5 shrink-0"> <img src="https://www.sunliner.de/media/amasty/shopby/option_images/Heatsail-LOGO_horizontal-6.png" alt="HEATSAIL" title="HEATSAIL" width="800" height="160" class="image object-contain ml-auto"/> </div> <div class="category-description w-full lg:w-4/5 lg:min-h-[128px] mx-auto my-2.5 lg:text-left"> <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-element="inner" style="justify-content: flex-start; display: flex; flex-direction: column; background-position: left top; background-size: cover; background-repeat: no-repeat; background-attachment: scroll; border-style: none; border-width: 1px; border-radius: 0px; margin: 0px 0px 10px; padding: 10px;"> <div data-content-type="html" data-appearance="default" data-element="main" style="border-style: none; border-width: 1px; border-radius: 0px; margin: 0px; padding: 0px;"> <span class="amshopby-descr"><p><strong><span style="font-size: 16px;">HAETSAIL - Heizung, Licht und Design im HIGH-END Format!</span></strong></p> <p>HEATSAIL ist ein Hersteller für exklusive Heizungslösung, kombiniert mit LED-Beleuchtung in einem außergewöhnlichen Design. Auf dem Weg zum Outdoorlinving ist HEATSAIL ein Must-have für Gärten, Dachterrassen ob für Privat oder gewerbliche Bereiche.</p> Heatsail Produkte sind einzigartig in Design und Funktionalität und werden in Handarbeit in Belgischen Antwerpen produziert.</span> </div> </div> </div> </div> </div><div class="columns"><div class="column main"><section id="filters" class="order-first"> <div x-data="initLayeredNavigation()" x-init="checkIsMobileResolution()" @resize.window.debounce="checkIsMobileResolution()" @visibilitychange.window.debounce="checkIsMobileResolution()" class="relative w-full mt-11 flex justify-center border-t-4 border-sunliner-orange-lighter" role="region" aria-label="Produktfilter" > <h2 id="filters-heading" class="absolute -top-6" > <button type="button" @click="blockOpen = !blockOpen" class="max-w-max h-10 px-7 py-2 flex justify-start items-center gap-x-3.5 bg-sunliner-orange-darker text-white" aria-controls="filters-content" :aria-expanded="blockOpen" :aria-disabled="!isMobile" :disabled="!isMobile ? '' : null" > <i class="svgsprite filters"></i> <span class="text-xl font-bold uppercase"> Filter </span> <span class="flex lg:hidden w-5 h-5" x-ref="LayeredNavigationMobileToggleIcon" > <img x-show="!blockOpen" class="w-5 h-5" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/arrow-filled-white-d.svg" alt="" width="20" height="20" aria-hidden="true" focusable="false" > <img x-cloak x-show="blockOpen" class="w-5 h-5" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/arrow-filled-white-u.svg" alt="" width="20" height="20" aria-hidden="true" focusable="false" > </span> </button> </h2> <div id="filters-content" class="hidden w-full h-full bg-sunliner-gray-lightest border-b-2 border-white lg:flex flex-col items-center pb-7" :class="{ 'hidden' : isMobile && !blockOpen }" > <div class="lg:hidden max-w-1300 w-full px-2.5"> </div> <a href="#product-list" class="sr-only focus:not-sr-only bg-sunliner-blue-light text-white focus:!px-4 focus:!py-2 text-center block !max-w-max focus:!mx-auto focus:!mt-6" > Zur Produktliste springen </a> <div class="block-content filter-content max-w-1300 w-full px-2.5 lg:px-16 xl:px-2.5 pt-11 pb-7 flex gap-x-5 flex-col flex-nowrap justify-start items-center lg:flex-row lg:flex-wrap lg:justify-center lg:items-start"> <div x-data="{ open: false, id: $id('filter-option') }" x-defer="intersect" class="filter-option relative w-full lg:w-max bg-white shadow-filter mb-4" :class="{'lg:mb-2 lg:pb-2' : open}" :id="`${id}`" > <h3 :id="`${id}-title`"> <button type="button" @click="open = !open" class="filter-options-title flex justify-between cursor-pointer w-full h-min min-w-40 px-2 py-2 bg-white group" :class="{ 'bg-sunliner-orange-darker lg:bg-white' : open, 'hover:bg-sunliner-blue-light' : !open }" :aria-controls="`${id}-content`" :aria-expanded="open" > <span class="title font-light text-sm capitalize" :class="{ 'text-white lg:text-sunliner-orange-darker group-hover:text-sunliner-blue-light' : open, 'group-hover:text-white' : !open }"> Preis <span class="sr-only"> Filter</span> </span> <span class="py-1 px-1 text-sunliner-blue-light" :class="{ 'text-white lg:text-sunliner-brown-lighter' : open,'text-sunliner-blue-light group-hover:text-white' : !open }"> <svg x-show="!open" class="w-2.5 h-2.5 fill-current" aria-hidden="true" focusable="false" width="100%" height="100%" viewBox="0 0 10 6" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <g transform="matrix(1,0,0,-1,-1222.93,565.876)"> <path d="M1227.93,560.22L1232.76,565.532L1223.1,565.532L1227.93,560.22Z"/> </g> </svg> <svg x-cloak x-show="open" class="w-2.5 h-2.5 fill-current" aria-hidden="true" focusable="false" width="100%" height="100%" viewBox="0 0 10 6" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <g transform="matrix(1,0,0,1,-1222.93,-559.876)"> <path d="M1227.93,560.22L1232.76,565.532L1223.1,565.532L1227.93,560.22Z"/> </g> </svg> </span> </button> </h3> <!-- We can't use the original <template> here, because the @click.outside then prevents the filter button from opening --> <div x-cloak x-show="open" :id="`${id}-content`" class="filter-options-content static lg:absolute z-50 top-full left-0 lg:min-w-80 max-h-125 px-6 py-3.5 bg-white shadow-filter overflow-y-auto" @click.outside="open = false" > <style> input[type=range]::-webkit-slider-thumb { width: 1.25rem; height: 1.25rem; pointer-events: all; -webkit-appearance: none; } input[type=range]::-moz-range-thumb { width: 1.25rem; height: 1.25rem; pointer-events: all; -webkit-appearance: none; } input[type=range]::-ms-thumb { width: 1.25rem; height: 1.25rem; pointer-events: all; -webkit-appearance: none; } </style> <div class="amshopby-slider-wrapper"> <div x-data="rangeSlider67496ed6760dd()" x-init="initialize()" class="relative max-w-96 w-full h-full pt-4 flex flex-col justify-center gap-y-4"> <div> <input type="range" step="1" x-bind:min="min" x-bind:max="max" x-on:input="mintrigger" x-model="minprice" class="absolute z-20 w-full h-1 opacity-0 pointer-events-none appearance-none cursor-pointer"> <input type="range" step="1" x-bind:min="min" x-bind:max="max" x-on:input="maxtrigger" x-model="maxprice" class="absolute z-20 w-full h-1 opacity-0 pointer-events-none appearance-none cursor-pointer"> <div class="relative z-10 h-1"> <div class="absolute z-10 inset-0 rounded-md bg-sunliner-blue-light"></div> <div class="absolute z-20 inset-0 rounded-md bg-sunliner-gray-light" x-bind:style="'right:'+maxthumb+'%; left:'+minthumb+'%'"></div> <div class="absolute z-30 w-5 h-5 -top-2 left-0 rounded-full bg-sunliner-orange-lighter" x-bind:style="'left: '+minthumb+'%'"></div> <div class="absolute z-30 w-5 h-5 -top-2 right-0 rounded-full bg-sunliner-orange-lighter" x-bind:style="'right: '+maxthumb+'%'"></div> </div> </div> <div class="flex justify-center items-center gap-x-1 font-semibold"> <span x-model="minprice" x-text="fromLabel" class=""></span> <span>-</span> <span x-model="maxprice" x-text="toLabel" class=""></span> </div> <a class="max-w-max btn btn-secondary -mt-1 py-1.5 text-sm" x-model="url" :href="url"> <span>OK</span> </a> </div> </div> <script> function rangeSlider67496ed6760dd() { "use strict"; return { initialize: function () { this.url = "https\u003A\u002F\u002Fwww.sunliner.de\u002Fheatsail.html\u003Fprice\u003Damshopby_slider_from\u002Damshopby_slider_to"; this.min = Math.floor(1634.85); this.max = Math.round(15729.51); this.minprice = 1634.85; this.maxprice = 15729.51; this.mintrigger(); this.maxtrigger(); }, mintrigger: function () { this.validation(); this.minprice = Math.min(this.minprice, this.maxprice); this.minthumb = ((this.minprice - this.min) / (this.max - this.min)) * 100; this._onChangeAfter(); }, maxtrigger: function () { this.validation(); this.maxprice = Math.max(this.maxprice, this.minprice); this.maxthumb = 100 - (((this.maxprice - this.min) / (this.max - this.min)) * 100); this._onChangeAfter(); }, _onChangeAfter: function () { this._applyRange(); this._refreshDisplay(); }, validation: function () { if (/^\d*$/.test(this.minprice)) { if (this.minprice > this.max) { this.minprice = 1634.85; } if (this.minprice < this.min) { this.minprice = this.min; } } else { this.minprice = 1634.85; } if (/^\d*$/.test(this.maxprice)) { if (this.maxprice > this.max) { this.maxprice = this.max; } if (this.maxprice < this.min) { this.maxprice = 15729.51; } } else { this.maxprice = 15729.51; } }, _refreshDisplay: function () { this.fromLabel = this._formatLabel(this.minprice); this.toLabel = this._formatLabel(this.maxprice); }, _formatLabel: function (value) { var formattedValue = value; formattedValue = this._formatPrice(value); return formattedValue; }, _formatPrice: function (value) { var formatter = new Intl.NumberFormat( document.documentElement.lang, { style: 'currency', currency: 'EUR', } ); return formatter.format(value); }, _applyRange: function () { var range = { from: this.minprice, to: this.maxprice }; this.url = this._unescape("https\u003A\u002F\u002Fwww.sunliner.de\u002Fheatsail.html\u003Fprice\u003Damshopby_slider_from\u002Damshopby_slider_to".replace('amshopby_slider_from', range.from).replace('amshopby_slider_to', range.to)); }, _unescape: function (str) { return str.replace(/<%|%3C%/g, '<%').replace(/%>|%%3E/g, '%>').replace('&', '&'); }, } } </script> </div> </div> <div x-data="{ open: false, id: $id('filter-option') }" x-defer="intersect" class="filter-option relative w-full lg:w-max bg-white shadow-filter mb-4" :class="{'lg:mb-2 lg:pb-2' : open}" :id="`${id}`" > <h3 :id="`${id}-title`"> <button type="button" @click="open = !open" class="filter-options-title flex justify-between cursor-pointer w-full h-min min-w-40 px-2 py-2 bg-white group" :class="{ 'bg-sunliner-orange-darker lg:bg-white' : open, 'hover:bg-sunliner-blue-light' : !open }" :aria-controls="`${id}-content`" :aria-expanded="open" > <span class="title font-light text-sm capitalize" :class="{ 'text-white lg:text-sunliner-orange-darker group-hover:text-sunliner-blue-light' : open, 'group-hover:text-white' : !open }"> Schnell lieferbar <span class="sr-only"> Filter</span> </span> <span class="py-1 px-1 text-sunliner-blue-light" :class="{ 'text-white lg:text-sunliner-brown-lighter' : open,'text-sunliner-blue-light group-hover:text-white' : !open }"> <svg x-show="!open" class="w-2.5 h-2.5 fill-current" aria-hidden="true" focusable="false" width="100%" height="100%" viewBox="0 0 10 6" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <g transform="matrix(1,0,0,-1,-1222.93,565.876)"> <path d="M1227.93,560.22L1232.76,565.532L1223.1,565.532L1227.93,560.22Z"/> </g> </svg> <svg x-cloak x-show="open" class="w-2.5 h-2.5 fill-current" aria-hidden="true" focusable="false" width="100%" height="100%" viewBox="0 0 10 6" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <g transform="matrix(1,0,0,1,-1222.93,-559.876)"> <path d="M1227.93,560.22L1232.76,565.532L1223.1,565.532L1227.93,560.22Z"/> </g> </svg> </span> </button> </h3> <!-- We can't use the original <template> here, because the @click.outside then prevents the filter button from opening --> <div x-cloak x-show="open" :id="`${id}-content`" class="filter-options-content static lg:absolute z-50 top-full left-0 lg:min-w-80 max-h-125 px-6 py-3.5 bg-white shadow-filter overflow-y-auto" @click.outside="open = false" > <form class="am-ranges" data-am-js="ranges" data-amshopby-filter="fast_delivery" data-amshopby-filter-request-var="fast_delivery" autocomplete="off"> <ol class="items am-filter-items-fast_delivery -am-singleselect space-y-3" > <li class="item relative" data-label="Ja"> <a class="am-filter-item-67496ed676708" data-am-js="filter-item-default" href="https://www.sunliner.de/heatsail.html?fast_delivery=1" > <span class="label text-sunliner-gray hover:text-sunliner-orange-darker">Ja</span> <span class="count text-sunliner-gray-light">(1)</span> </a> <input class="invisible absolute top-0 left-0" name="amshopby[fast_delivery][]" value="1" type="radio" style="" /> </li> </ol> </form> </div> </div> </div> <div class="hidden lg:block max-w-1300"> </div> </div> </div> </section> <script> function initLayeredNavigation() { return { isMobile: false, blockOpen: false, checkIsMobileResolution() { const mobileElement = this.$refs.LayeredNavigationMobileToggleIcon; this.isMobile = mobileElement ? getComputedStyle(mobileElement).display !== "none" : window.matchMedia('(max-width: 1023px)').matches; // Fallback to `lg` breakpoint } } } </script> <script> if (window.require) { require(['jquery', 'domReady!'], function($){ if ($('.mfblogunveil').length) { require(['Magefan_Blog/js/lib/mfblogunveil'], function(){ $('.mfblogunveil').mfblogunveil(); }); } }); } else { /* e.g. hyva theme */ document.addEventListener("DOMContentLoaded", function(){ var items = document.getElementsByClassName('mfblogunveil'); var el, url; if (items.length) { for (var i=0; i<items.length;i++) { el = items[i]; url = el.getAttribute('data-original'); if (!url) { continue; } if ('IMG' == el.tagName) { el.src = url; } else { el.style.backgroundImage = "url('" + url + "')"; } } } }); } </script> <div id="amasty-shopby-product-list"> <section class="pt-16 pb-20 flex flex-col items-center blue-gradient" id="product-list" aria-label="Produktliste" tabindex="-1"> <div class="max-w-1300 w-full mb-2.5 px-2.5 flex flex-col gap-y-6"> <div class="flex flex-col gap-y-4"> <script> function initToolbar_67496ed6787cc() { return { options: {"productListToolbarForm":{"mode":"product_list_mode","direction":"product_list_dir","order":"product_list_order","limit":"product_list_limit","modeDefault":"grid","directionDefault":"asc","orderDefault":"position","limitDefault":32,"url":"https:\/\/www.sunliner.de\/heatsail.html","formKey":"CoQfn5T6L3h73yql","post":false,"page":"p"}}.productListToolbarForm || {}, getUrlParams: function () { let decode = window.decodeURIComponent, urlPaths = this.options.url.split('?'), urlParams = urlPaths[1] ? urlPaths[1].split('&') : [], params = {}, parameters, i; for (i = 0; i < urlParams.length; i++) { parameters = urlParams[i].split('='); params[decode(parameters[0])] = parameters[1] !== undefined ? decode(parameters[1].replace(/\+/g, '%20')) : ''; } return params; }, getCurrentLimit: function () { return this.getUrlParams()[this.options.limit] || this.options.limitDefault; }, getCurrentPage: function () { return this.getUrlParams()[this.options.page] || 1; }, changeUrl(paramName, paramValue, defaultValue) { let urlPaths = this.options.url.split('?'), baseUrl = urlPaths[0], paramData = this.getUrlParams(), currentPage = this.getCurrentPage(), newPage; /** * calculates the page on which the first item of the current page will * be with the new limit and sets that number as the new page */ if (currentPage > 1 && paramName === this.options.limit) { newPage = Math.floor(this.getCurrentLimit() * (currentPage - 1) / paramValue) + 1; if (newPage > 1) { paramData[this.options.page] = newPage; } else { delete paramData[this.options.page]; } } paramData[paramName] = paramValue; if (this.options.post) { hyva.postForm({action: baseUrl, data: paramData, skipUenc: true}); } else { if (paramValue === defaultValue.toString()) { delete paramData[paramName]; } paramData = Object.keys(paramData).length === 0 ? '' : '?' + (new URLSearchParams(paramData)); location.href = baseUrl + paramData } } } } </script> <div x-data="initToolbar_67496ed6787cc()" class="toolbar toolbar-products w-full px-2.5 flex flex-col md:flex-row items-center gap-y-7 md:gap-y-0"> <div class="hidden md:w-1/3 md:flex"> <p class="toolbar-amount text-base" id="toolbar-amount"> <span class="toolbar-number">9</span> Artikel </p> </div> <div class="md:w-1/3 flex justify-center"> <div class="flex justify-center pages"> </div> </div> <div class="md:w-1/3 flex justify-end"> <div class="toolbar-sorter sorter flex flex-col xl:flex-row items-center md:items-end gap-1"> <span class="sorter-label"> Sortieren nach </span> <label class="h-full flex gap-x-0.5"> <select data-role="sorter" class="form-select sorter-options pl-2.5 bg-sunliner-gray-faint text-sunliner-gray-darker" aria-label="Sortieren nach" @change="changeUrl( 'product_list_order', $event.currentTarget.options[$event.currentTarget.selectedIndex].value, options.orderDefault )"> <option value="position" selected="selected" > Position </option> <option value="price" > Preis </option> </select> <a title="In absteigender Reihenfolge" href="#" class="action sorter-action sort-asc h-full px-2 py-2 flex justify-center items-center bg-transparent border border-sunliner-gray-lighter" @click.prevent="changeUrl('product_list_dir', 'desc', options.directionDefault)" > <img class="w-3.5 h-3.5" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/arrow-blue-u.svg" alt="" width="14" height="14"> </a> </label> </div> </div> </div> <div class="flex w-full"> <i class="w-1/6 border-b-8 border-sunliner-orange-lighter"></i> <i class="w-full border-b-8 border-sunliner-gray-faint"></i> <i class="w-1/6 border-b-8 border-sunliner-orange-lighter"></i> </div> </div> </div> <div class="products wrapper mode-grid products-grid"> <ul role="list" class="max-w-1300 mx-auto px-2.5 pt-4 pb-12 grid gap-4 grid-cols-1 sm:grid-cols-2 xl:grid-cols-4" > <li> <div x-data="{ canHover: window.matchMedia('(hover:hover)').matches, touchMoved: false }" class="item product product-item card card-interactive flex flex-col relative mx-1 h-full overflow-hidden transition-all duration-200 ease-out" :class="{ 'group': canHover }" @touchstart.passive="touchMoved = false" @touchmove.passive="touchMoved = true" @touchend.prevent.stop.passive="if (!touchMoved) $refs['product_item_link'].click()" > <a href="https://www.sunliner.de/heatsail-dome-luxus-heizstrahler-stehlampe-design-ausstellungsstueck.html" class="absolute w-full h-full z-10" x-ref="product_item_link" @click.stop="" ></a> <div class="product photo product-item-photo block mx-auto mb-3 " style="width: 308px; height: 308px;" tabindex="-1"> <img class="w-full h-full product-image-photo" x-data="" @update-gallery-11226.window="$root.src = $event.detail" loading="eager" fetchpriority="high" src="https://www.sunliner.de/media/catalog/product/cache/5030247684eafdb264ce7d02ffe3305c/d/o/domepress_1__1_1_1.jpg" width="308" height="308" alt="Heatsail Dome Luxus Heizstrahler / Stehlampe - Ausstellungsstück" title="Heatsail Dome Luxus Heizstrahler / Stehlampe - Ausstellungsstück" /> <span class="absolute left-full -translate-x-10 -translate-y-2/3 max-w-max w-full px-2 py-1 flex items-center gap-x-3 bg-sunliner-orange-lighter text-xxs font-semibold text-white" :class="{ 'transition duration-300 ease-in-out group-hover:-translate-x-full group-hover:bg-sunliner-orange': canHover }"> <img class="inline" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/fast-delivery-truck.svg" alt="" width="25" height="18" loading="lazy"/> <span>Schnell lieferbar</span> </span> </div> <div class="product-info flex flex-col grow w-full h-full mt-auto pl-2.5 py-2 bg-sunliner-gray-faint justify-between"> <div class="px-1.5 py-3 flex font-bold text-sunliner-brown" :class="{ 'group-hover:text-sunliner-orange-darker': canHover }"> <a class="product-item-link" href="https://www.sunliner.de/heatsail-dome-luxus-heizstrahler-stehlampe-design-ausstellungsstueck.html" :id="`slide-desc-11226-${$id('slider-id')}`" > Heatsail Dome Luxus Heizstrahler / Stehlampe - Ausstellungsstück </a> </div> <div class="mt-auto"> <div x-data="initRating11226674968fca1643()" x-defer="intersect" class="rating-summary flex" :class="{'cursor-pointer' : reviewsSection}" title="Seien Sie der erste, der dieses Produkt bewertet" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection ? 'Heatsail\u0020Dome\u0020Luxus\u0020Heizstrahler\u0020\u002F\u0020Stehlampe\u0020\u002D\u0020Ausstellungsst\u00FCck\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen.\u0020Klicken\u0020Sie,\u0020um\u0020zu\u0020den\u0020Bewertungen\u0020zu\u0020gelangen.' : 'Heatsail\u0020Dome\u0020Luxus\u0020Heizstrahler\u0020\u002F\u0020Stehlampe\u0020\u002D\u0020Ausstellungsst\u00FCck\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen' " :role="reviewsSection ? 'button' : 'img'" > <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> </div> <script> 'use strict'; function initRating11226674968fca1643() { return { reviewsSection: document.getElementById('customer-review-list') || document.getElementById('customer-reviews') || document.getElementById('review-form'), scrollToRatings() { let scrollTimeout = null if (!this.reviewsSection) { return } addEventListener('scroll', () => { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { if (this.reviewsSection) { this.reviewsSection.focus() } }, 50); }, { once: true }); this.reviewsSection.scrollIntoView({behavior: 'smooth'}) } } } </script> </div> <div class="mt-2 mb-auto"> </div> <div class="self-end px-5 py-1.5 text-center bg-white" :class="{ 'group-hover:bg-sunliner-orange-darker': canHover }"> <div class="font-bold text-lg" x-data="initPriceBox()" x-defer="intersect" @update-prices-11226.window="updatePrice($event.detail);" > <div class="price-box price-final_price" data-role="priceBox" data-product-id="11226" data-price-box="product-id-11226"> <div class="flex gap-x-3"> <span class="old-price relative text-sunliner-gray group-hover:text-black"> <span x-data x-id="['old\u002Dprice\u002D11226']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Normalpreis:</span> <span :id="$id('old\u002Dprice\u002D11226')" data-price-amount="4420" data-price-type="oldPrice" class="price-wrapper " ><span class="price">4.420,00 €</span></span> </span> <span class="absolute left-0 bottom-1/4 w-full h-0.5 -rotate-6 bg-sunliner-gray-darker group-hover:bg-sunliner-gray-lighter"></span> </span> <span class="special-price text-sunliner-orange-darker group-hover:text-white"> <span x-data x-id="['product\u002Dprice\u002D11226']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Sonderangebot:</span> <span :id="$id('product\u002Dprice\u002D11226')" data-price-amount="3536" data-price-type="finalPrice" class="price-wrapper " ><span class="price">3.536,00 €</span></span> </span> </span> </div> </div><div class="price-details mt-1.5 text-sm"> <span class="tax-details"> Inkl. 19% MwSt. <span class="tax-separator">, </span> <span class="shipping-cost-details"> versandkostenfrei (Deutschland), sonst zzgl. <a class="text-sunliner-orange" href="https://www.sunliner.de/service">Versandkosten (Ausland)</a> </span> </span> </div> </div> </div> </div> </div> </li> <li> <div x-data="{ canHover: window.matchMedia('(hover:hover)').matches, touchMoved: false }" class="item product product-item card card-interactive flex flex-col relative mx-1 h-full overflow-hidden transition-all duration-200 ease-out" :class="{ 'group': canHover }" @touchstart.passive="touchMoved = false" @touchmove.passive="touchMoved = true" @touchend.prevent.stop.passive="if (!touchMoved) $refs['product_item_link'].click()" > <a href="https://www.sunliner.de/heatsail-dome-luxus-heizstrahler-stehlampe-design.html" class="absolute w-full h-full z-10" x-ref="product_item_link" @click.stop="" ></a> <div class="product photo product-item-photo block mx-auto mb-3 " style="width: 308px; height: 308px;" tabindex="-1"> <img class="w-full h-full product-image-photo" x-data="" @update-gallery-10539.window="$root.src = $event.detail" loading="eager" fetchpriority="high" src="https://www.sunliner.de/media/catalog/product/cache/5030247684eafdb264ce7d02ffe3305c/d/o/domepress_1__1_1.jpg" width="308" height="308" alt="Heatsail Dome Luxus Heizstrahler / Stehlampe" title="Heatsail Dome Luxus Heizstrahler / Stehlampe" /> </div> <div class="product-info flex flex-col grow w-full h-full mt-auto pl-2.5 py-2 bg-sunliner-gray-faint justify-between"> <div class="px-1.5 py-3 flex font-bold text-sunliner-brown" :class="{ 'group-hover:text-sunliner-orange-darker': canHover }"> <a class="product-item-link" href="https://www.sunliner.de/heatsail-dome-luxus-heizstrahler-stehlampe-design.html" :id="`slide-desc-10539-${$id('slider-id')}`" > Heatsail Dome Luxus Heizstrahler / Stehlampe </a> </div> <div class="mt-auto"> <div x-data="initRating10539674968fc9fc86()" x-defer="intersect" class="rating-summary flex" :class="{'cursor-pointer' : reviewsSection}" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection ? 'Heatsail\u0020Dome\u0020Luxus\u0020Heizstrahler\u0020\u002F\u0020Stehlampe\u0020Bewertung.\u00205\u0020von\u00205\u0020Sternen.\u0020Klicken\u0020Sie,\u0020um\u0020zu\u0020den\u0020Bewertungen\u0020zu\u0020gelangen.' : 'Heatsail\u0020Dome\u0020Luxus\u0020Heizstrahler\u0020\u002F\u0020Stehlampe\u0020Bewertung.\u00205\u0020von\u00205\u0020Sternen' " :role="reviewsSection ? 'button' : 'img'" > <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" viewBox="0 0 20 21" fill="currentColor" aria-hidden="true" stroke-linejoin="round" stroke-miterlimit="2" fill-rule="evenodd" clip-rule="evenodd" > <path d="M10 1.13l2.33 7.16h7.52l-6.09 4.42 2.33 7.16L10 15.45l-6.09 4.42 2.33-7.16L.15 8.3h7.53L10 1.13z"/> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" viewBox="0 0 20 21" fill="currentColor" aria-hidden="true" stroke-linejoin="round" stroke-miterlimit="2" fill-rule="evenodd" clip-rule="evenodd" > <path d="M10 1.13l2.33 7.16h7.52l-6.09 4.42 2.33 7.16L10 15.45l-6.09 4.42 2.33-7.16L.15 8.3h7.53L10 1.13z"/> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" viewBox="0 0 20 21" fill="currentColor" aria-hidden="true" stroke-linejoin="round" stroke-miterlimit="2" fill-rule="evenodd" clip-rule="evenodd" > <path d="M10 1.13l2.33 7.16h7.52l-6.09 4.42 2.33 7.16L10 15.45l-6.09 4.42 2.33-7.16L.15 8.3h7.53L10 1.13z"/> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" viewBox="0 0 20 21" fill="currentColor" aria-hidden="true" stroke-linejoin="round" stroke-miterlimit="2" fill-rule="evenodd" clip-rule="evenodd" > <path d="M10 1.13l2.33 7.16h7.52l-6.09 4.42 2.33 7.16L10 15.45l-6.09 4.42 2.33-7.16L.15 8.3h7.53L10 1.13z"/> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" viewBox="0 0 20 21" fill="currentColor" aria-hidden="true" stroke-linejoin="round" stroke-miterlimit="2" fill-rule="evenodd" clip-rule="evenodd" > <path d="M10 1.13l2.33 7.16h7.52l-6.09 4.42 2.33 7.16L10 15.45l-6.09 4.42 2.33-7.16L.15 8.3h7.53L10 1.13z"/> </svg> </div> <script> 'use strict'; function initRating10539674968fc9fc86() { return { reviewsSection: document.getElementById('customer-review-list') || document.getElementById('customer-reviews') || document.getElementById('review-form'), scrollToRatings() { let scrollTimeout = null if (!this.reviewsSection) { return } addEventListener('scroll', () => { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { if (this.reviewsSection) { this.reviewsSection.focus() } }, 50); }, { once: true }); this.reviewsSection.scrollIntoView({behavior: 'smooth'}) } } } </script> </div> <div class="mt-2 mb-auto"> </div> <div class="self-end px-5 py-1.5 text-center bg-white" :class="{ 'group-hover:bg-sunliner-orange-darker': canHover }"> <div class="font-bold text-lg" x-data="initPriceBox()" x-defer="intersect" @update-prices-10539.window="updatePrice($event.detail);" > <div class="price-box price-final_price" data-role="priceBox" data-product-id="10539" data-price-box="product-id-10539"> <div class="flex gap-x-3"> <span class="old-price relative text-sunliner-gray group-hover:text-black"> <span x-data x-id="['old\u002Dprice\u002D10539']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Normalpreis:</span> <span :id="$id('old\u002Dprice\u002D10539')" data-price-amount="4420" data-price-type="oldPrice" class="price-wrapper " ><span class="price">4.420,00 €</span></span> </span> <span class="absolute left-0 bottom-1/4 w-full h-0.5 -rotate-6 bg-sunliner-gray-darker group-hover:bg-sunliner-gray-lighter"></span> </span> <span class="special-price text-sunliner-orange-darker group-hover:text-white"> <span x-data x-id="['product\u002Dprice\u002D10539']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Sonderangebot:</span> <span :id="$id('product\u002Dprice\u002D10539')" data-price-amount="4176.9" data-price-type="finalPrice" class="price-wrapper " ><span class="price">4.176,90 €</span></span> </span> </span> </div> </div><div class="price-details mt-1.5 text-sm"> <span class="tax-details"> Inkl. 19% MwSt. <span class="tax-separator">, </span> <span class="shipping-cost-details"> versandkostenfrei (Deutschland), sonst zzgl. <a class="text-sunliner-orange" href="https://www.sunliner.de/service">Versandkosten (Ausland)</a> </span> </span> </div> </div> </div> </div> </div> </li> <li> <div x-data="{ canHover: window.matchMedia('(hover:hover)').matches, touchMoved: false }" class="item product product-item card card-interactive flex flex-col relative mx-1 h-full overflow-hidden transition-all duration-200 ease-out" :class="{ 'group': canHover }" @touchstart.passive="touchMoved = false" @touchmove.passive="touchMoved = true" @touchend.prevent.stop.passive="if (!touchMoved) $refs['product_item_link'].click()" > <a href="https://www.sunliner.de/heatsail-twig-design-heizstrahler-stehleuchte.html" class="absolute w-full h-full z-10" x-ref="product_item_link" @click.stop="" ></a> <div class="product photo product-item-photo block mx-auto mb-3 " style="width: 308px; height: 308px;" tabindex="-1"> <img class="w-full h-full product-image-photo" x-data="" @update-gallery-11546.window="$root.src = $event.detail" loading="eager" fetchpriority="high" src="https://www.sunliner.de/media/catalog/product/cache/5030247684eafdb264ce7d02ffe3305c/h/e/heatsail_twig_heizstrahler_stehlampe.png" width="308" height="308" alt="Heatsail TWIG Design Heizstrahler / Stehleuchte" title="Heatsail TWIG Design Heizstrahler / Stehleuchte" /> </div> <div class="product-info flex flex-col grow w-full h-full mt-auto pl-2.5 py-2 bg-sunliner-gray-faint justify-between"> <div class="px-1.5 py-3 flex font-bold text-sunliner-brown" :class="{ 'group-hover:text-sunliner-orange-darker': canHover }"> <a class="product-item-link" href="https://www.sunliner.de/heatsail-twig-design-heizstrahler-stehleuchte.html" :id="`slide-desc-11546-${$id('slider-id')}`" > Heatsail TWIG Design Heizstrahler / Stehleuchte </a> </div> <div class="mt-auto"> <div x-data="initRating1154667496ed679421()" x-defer="intersect" class="rating-summary flex" :class="{'cursor-pointer' : reviewsSection}" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection ? 'Heatsail\u0020TWIG\u0020Design\u0020Heizstrahler\u0020\u002F\u0020Stehleuchte\u0020Bewertung.\u00205\u0020von\u00205\u0020Sternen.\u0020Klicken\u0020Sie,\u0020um\u0020zu\u0020den\u0020Bewertungen\u0020zu\u0020gelangen.' : 'Heatsail\u0020TWIG\u0020Design\u0020Heizstrahler\u0020\u002F\u0020Stehleuchte\u0020Bewertung.\u00205\u0020von\u00205\u0020Sternen' " :role="reviewsSection ? 'button' : 'img'" > <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" viewBox="0 0 20 21" fill="currentColor" aria-hidden="true" stroke-linejoin="round" stroke-miterlimit="2" fill-rule="evenodd" clip-rule="evenodd" > <path d="M10 1.13l2.33 7.16h7.52l-6.09 4.42 2.33 7.16L10 15.45l-6.09 4.42 2.33-7.16L.15 8.3h7.53L10 1.13z"/> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" viewBox="0 0 20 21" fill="currentColor" aria-hidden="true" stroke-linejoin="round" stroke-miterlimit="2" fill-rule="evenodd" clip-rule="evenodd" > <path d="M10 1.13l2.33 7.16h7.52l-6.09 4.42 2.33 7.16L10 15.45l-6.09 4.42 2.33-7.16L.15 8.3h7.53L10 1.13z"/> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" viewBox="0 0 20 21" fill="currentColor" aria-hidden="true" stroke-linejoin="round" stroke-miterlimit="2" fill-rule="evenodd" clip-rule="evenodd" > <path d="M10 1.13l2.33 7.16h7.52l-6.09 4.42 2.33 7.16L10 15.45l-6.09 4.42 2.33-7.16L.15 8.3h7.53L10 1.13z"/> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" viewBox="0 0 20 21" fill="currentColor" aria-hidden="true" stroke-linejoin="round" stroke-miterlimit="2" fill-rule="evenodd" clip-rule="evenodd" > <path d="M10 1.13l2.33 7.16h7.52l-6.09 4.42 2.33 7.16L10 15.45l-6.09 4.42 2.33-7.16L.15 8.3h7.53L10 1.13z"/> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" viewBox="0 0 20 21" fill="currentColor" aria-hidden="true" stroke-linejoin="round" stroke-miterlimit="2" fill-rule="evenodd" clip-rule="evenodd" > <path d="M10 1.13l2.33 7.16h7.52l-6.09 4.42 2.33 7.16L10 15.45l-6.09 4.42 2.33-7.16L.15 8.3h7.53L10 1.13z"/> </svg> </div> <script> 'use strict'; function initRating1154667496ed679421() { return { reviewsSection: document.getElementById('customer-review-list') || document.getElementById('customer-reviews') || document.getElementById('review-form'), scrollToRatings() { let scrollTimeout = null if (!this.reviewsSection) { return } addEventListener('scroll', () => { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { if (this.reviewsSection) { this.reviewsSection.focus() } }, 50); }, { once: true }); this.reviewsSection.scrollIntoView({behavior: 'smooth'}) } } } </script> </div> <div class="mt-2 mb-auto"> </div> <div class="self-end px-5 py-1.5 text-center bg-white" :class="{ 'group-hover:bg-sunliner-orange-darker': canHover }"> <div class="font-bold text-lg" x-data="initPriceBox()" x-defer="intersect" @update-prices-11546.window="updatePrice($event.detail);" > <div class="price-box price-final_price" data-role="priceBox" data-product-id="11546" data-price-box="product-id-11546"> <div class="flex gap-x-3"> <span class="old-price relative text-sunliner-gray group-hover:text-black"> <span x-data x-id="['old\u002Dprice\u002D11546']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Normalpreis:</span> <span :id="$id('old\u002Dprice\u002D11546')" data-price-amount="1770" data-price-type="oldPrice" class="price-wrapper " ><span class="price">1.770,00 €</span></span> </span> <span class="absolute left-0 bottom-1/4 w-full h-0.5 -rotate-6 bg-sunliner-gray-darker group-hover:bg-sunliner-gray-lighter"></span> </span> <span class="special-price text-sunliner-orange-darker group-hover:text-white"> <span x-data x-id="['product\u002Dprice\u002D11546']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Sonderangebot:</span> <span :id="$id('product\u002Dprice\u002D11546')" data-price-amount="1672.65" data-price-type="finalPrice" class="price-wrapper " ><span class="price">1.672,65 €</span></span> </span> </span> </div> </div><div class="price-details mt-1.5 text-sm"> <span class="tax-details"> Inkl. 19% MwSt. <span class="tax-separator">, </span> <span class="shipping-cost-details"> versandkostenfrei (Deutschland), sonst zzgl. <a class="text-sunliner-orange" href="https://www.sunliner.de/service">Versandkosten (Ausland)</a> </span> </span> </div> </div> </div> </div> </div> </li> <li> <div x-data="{ canHover: window.matchMedia('(hover:hover)').matches, touchMoved: false }" class="item product product-item card card-interactive flex flex-col relative mx-1 h-full overflow-hidden transition-all duration-200 ease-out" :class="{ 'group': canHover }" @touchstart.passive="touchMoved = false" @touchmove.passive="touchMoved = true" @touchend.prevent.stop.passive="if (!touchMoved) $refs['product_item_link'].click()" > <a href="https://www.sunliner.de/heatsail-glow-deckenleuchte-luxus-heizstrahler.html" class="absolute w-full h-full z-10" x-ref="product_item_link" @click.stop="" ></a> <div class="product photo product-item-photo block mx-auto mb-3 " style="width: 308px; height: 308px;" tabindex="-1"> <img class="w-full h-full product-image-photo" x-data="" @update-gallery-11462.window="$root.src = $event.detail" loading="eager" fetchpriority="high" src="https://www.sunliner.de/media/catalog/product/cache/5030247684eafdb264ce7d02ffe3305c/g/l/glow_3_op_1_rij_-_1029_1.jpg" width="308" height="308" alt="Heatsail Glow Deckenleuchte / Heizstrahler" title="Heatsail Glow Deckenleuchte / Heizstrahler" /> </div> <div class="product-info flex flex-col grow w-full h-full mt-auto pl-2.5 py-2 bg-sunliner-gray-faint justify-between"> <div class="px-1.5 py-3 flex font-bold text-sunliner-brown" :class="{ 'group-hover:text-sunliner-orange-darker': canHover }"> <a class="product-item-link" href="https://www.sunliner.de/heatsail-glow-deckenleuchte-luxus-heizstrahler.html" :id="`slide-desc-11462-${$id('slider-id')}`" > Heatsail Glow Deckenleuchte / Heizstrahler </a> </div> <div class="mt-auto"> <div x-data="initRating1146267496ed67a6fd()" x-defer="intersect" class="rating-summary flex" :class="{'cursor-pointer' : reviewsSection}" title="Seien Sie der erste, der dieses Produkt bewertet" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection ? 'Heatsail\u0020Glow\u0020Deckenleuchte\u0020\u002F\u0020Heizstrahler\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen.\u0020Klicken\u0020Sie,\u0020um\u0020zu\u0020den\u0020Bewertungen\u0020zu\u0020gelangen.' : 'Heatsail\u0020Glow\u0020Deckenleuchte\u0020\u002F\u0020Heizstrahler\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen' " :role="reviewsSection ? 'button' : 'img'" > <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> </div> <script> 'use strict'; function initRating1146267496ed67a6fd() { return { reviewsSection: document.getElementById('customer-review-list') || document.getElementById('customer-reviews') || document.getElementById('review-form'), scrollToRatings() { let scrollTimeout = null if (!this.reviewsSection) { return } addEventListener('scroll', () => { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { if (this.reviewsSection) { this.reviewsSection.focus() } }, 50); }, { once: true }); this.reviewsSection.scrollIntoView({behavior: 'smooth'}) } } } </script> </div> <div class="mt-2 mb-auto"> </div> <div class="self-end px-5 py-1.5 text-center bg-white" :class="{ 'group-hover:bg-sunliner-orange-darker': canHover }"> <div class="font-bold text-lg" x-data="initPriceBox()" x-defer="intersect" @update-prices-11462.window="updatePrice($event.detail);" > <div class="price-box price-final_price" data-role="priceBox" data-product-id="11462" data-price-box="product-id-11462"> <div class="flex gap-x-3"> <span class="old-price relative text-sunliner-gray group-hover:text-black"> <span x-data x-id="['old\u002Dprice\u002D11462']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Normalpreis:</span> <span :id="$id('old\u002Dprice\u002D11462')" data-price-amount="1730" data-price-type="oldPrice" class="price-wrapper " ><span class="price">1.730,00 €</span></span> </span> <span class="absolute left-0 bottom-1/4 w-full h-0.5 -rotate-6 bg-sunliner-gray-darker group-hover:bg-sunliner-gray-lighter"></span> </span> <span class="special-price text-sunliner-orange-darker group-hover:text-white"> <span x-data x-id="['product\u002Dprice\u002D11462']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Sonderangebot:</span> <span :id="$id('product\u002Dprice\u002D11462')" data-price-amount="1634.85" data-price-type="finalPrice" class="price-wrapper " ><span class="price">1.634,85 €</span></span> </span> </span> </div> </div><div class="price-details mt-1.5 text-sm"> <span class="tax-details"> Inkl. 19% MwSt. <span class="tax-separator">, </span> <span class="shipping-cost-details"> versandkostenfrei (Deutschland), sonst zzgl. <a class="text-sunliner-orange" href="https://www.sunliner.de/service">Versandkosten (Ausland)</a> </span> </span> </div> </div> </div> </div> </div> </li> <li> <div x-data="{ canHover: window.matchMedia('(hover:hover)').matches, touchMoved: false }" class="item product product-item card card-interactive flex flex-col relative mx-1 h-full overflow-hidden transition-all duration-200 ease-out" :class="{ 'group': canHover }" @touchstart.passive="touchMoved = false" @touchmove.passive="touchMoved = true" @touchend.prevent.stop.passive="if (!touchMoved) $refs['product_item_link'].click()" > <a href="https://www.sunliner.de/heatsail-beem-luxus-heizstrahler-leuchte-kuehlsystem.html" class="absolute w-full h-full z-10" x-ref="product_item_link" @click.stop="" ></a> <div class="product photo product-item-photo block mx-auto mb-3 " style="width: 308px; height: 308px;" tabindex="-1"> <img class="w-full h-full product-image-photo" x-data="" @update-gallery-10799.window="$root.src = $event.detail" src="https://www.sunliner.de/media/catalog/product/cache/5030247684eafdb264ce7d02ffe3305c/b/e/beem_230trim.jpg" loading="lazy" width="308" height="308" alt="Heatsail BEEM Luxus Heizstrahler, Leuchte und Kühlsystem" title="Heatsail BEEM Luxus Heizstrahler, Leuchte und Kühlsystem" /> </div> <div class="product-info flex flex-col grow w-full h-full mt-auto pl-2.5 py-2 bg-sunliner-gray-faint justify-between"> <div class="px-1.5 py-3 flex font-bold text-sunliner-brown" :class="{ 'group-hover:text-sunliner-orange-darker': canHover }"> <a class="product-item-link" href="https://www.sunliner.de/heatsail-beem-luxus-heizstrahler-leuchte-kuehlsystem.html" :id="`slide-desc-10799-${$id('slider-id')}`" > Heatsail BEEM Luxus Heizstrahler, Leuchte und Kühlsystem </a> </div> <div class="mt-auto"> <div x-data="initRating10799674968fca7a85()" x-defer="intersect" class="rating-summary flex" :class="{'cursor-pointer' : reviewsSection}" title="Seien Sie der erste, der dieses Produkt bewertet" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection ? 'Heatsail\u0020BEEM\u0020Luxus\u0020Heizstrahler,\u0020Leuchte\u0020und\u0020K\u00FChlsystem\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen.\u0020Klicken\u0020Sie,\u0020um\u0020zu\u0020den\u0020Bewertungen\u0020zu\u0020gelangen.' : 'Heatsail\u0020BEEM\u0020Luxus\u0020Heizstrahler,\u0020Leuchte\u0020und\u0020K\u00FChlsystem\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen' " :role="reviewsSection ? 'button' : 'img'" > <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> </div> <script> 'use strict'; function initRating10799674968fca7a85() { return { reviewsSection: document.getElementById('customer-review-list') || document.getElementById('customer-reviews') || document.getElementById('review-form'), scrollToRatings() { let scrollTimeout = null if (!this.reviewsSection) { return } addEventListener('scroll', () => { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { if (this.reviewsSection) { this.reviewsSection.focus() } }, 50); }, { once: true }); this.reviewsSection.scrollIntoView({behavior: 'smooth'}) } } } </script> </div> <div class="mt-2 mb-auto"> </div> <div class="self-end px-5 py-1.5 text-center bg-white" :class="{ 'group-hover:bg-sunliner-orange-darker': canHover }"> <div class="font-bold text-lg" x-data="initPriceBox()" x-defer="intersect" @update-prices-10799.window="updatePrice($event.detail);" > <div class="price-box price-final_price" data-role="priceBox" data-product-id="10799" data-price-box="product-id-10799"> <div class="flex gap-x-3"> <span class="old-price relative text-sunliner-gray group-hover:text-black"> <span x-data x-id="['old\u002Dprice\u002D10799']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Normalpreis:</span> <span :id="$id('old\u002Dprice\u002D10799')" data-price-amount="2945" data-price-type="oldPrice" class="price-wrapper " ><span class="price">2.945,00 €</span></span> </span> <span class="absolute left-0 bottom-1/4 w-full h-0.5 -rotate-6 bg-sunliner-gray-darker group-hover:bg-sunliner-gray-lighter"></span> </span> <span class="special-price text-sunliner-orange-darker group-hover:text-white"> <span x-data x-id="['product\u002Dprice\u002D10799']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Sonderangebot:</span> <span :id="$id('product\u002Dprice\u002D10799')" data-price-amount="2783.02" data-price-type="finalPrice" class="price-wrapper " ><span class="price">2.783,02 €</span></span> </span> </span> </div> </div><div class="price-details mt-1.5 text-sm"> <span class="tax-details"> Inkl. 19% MwSt. <span class="tax-separator">, </span> <span class="shipping-cost-details"> versandkostenfrei (Deutschland), sonst zzgl. <a class="text-sunliner-orange" href="https://www.sunliner.de/service">Versandkosten (Ausland)</a> </span> </span> </div> </div> </div> </div> </div> </li> <li> <div x-data="{ canHover: window.matchMedia('(hover:hover)').matches, touchMoved: false }" class="item product product-item card card-interactive flex flex-col relative mx-1 h-full overflow-hidden transition-all duration-200 ease-out" :class="{ 'group': canHover }" @touchstart.passive="touchMoved = false" @touchmove.passive="touchMoved = true" @touchend.prevent.stop.passive="if (!touchMoved) $refs['product_item_link'].click()" > <a href="https://www.sunliner.de/heatsail-leaf-luxus-schirm-schattenloesung-optional-kuhlsystem-heizung-licht.html" class="absolute w-full h-full z-10" x-ref="product_item_link" @click.stop="" ></a> <div class="product photo product-item-photo block mx-auto mb-3 " style="width: 308px; height: 308px;" tabindex="-1"> <img class="w-full h-full product-image-photo" x-data="" @update-gallery-10859.window="$root.src = $event.detail" src="https://www.sunliner.de/media/catalog/product/cache/5030247684eafdb264ce7d02ffe3305c/h/e/heatsail-leaf-start.jpg" loading="lazy" width="308" height="308" alt="Heatsail LEAF Luxus Schirm / Schattenlösung mit optionalem Kühlystem / Beleuchtung & Heizung" title="Heatsail LEAF Luxus Schirm / Schattenlösung mit optionalem Kühlystem / Beleuchtung & Heizung" /> </div> <div class="product-info flex flex-col grow w-full h-full mt-auto pl-2.5 py-2 bg-sunliner-gray-faint justify-between"> <div class="px-1.5 py-3 flex font-bold text-sunliner-brown" :class="{ 'group-hover:text-sunliner-orange-darker': canHover }"> <a class="product-item-link" href="https://www.sunliner.de/heatsail-leaf-luxus-schirm-schattenloesung-optional-kuhlsystem-heizung-licht.html" :id="`slide-desc-10859-${$id('slider-id')}`" > Heatsail LEAF Luxus Schirm / Schattenlösung mit optionalem Kühlystem / Beleuchtung & Heizung </a> </div> <div class="mt-auto"> <div x-data="initRating10859674968fcaa28d()" x-defer="intersect" class="rating-summary flex" :class="{'cursor-pointer' : reviewsSection}" title="Seien Sie der erste, der dieses Produkt bewertet" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection ? 'Heatsail\u0020LEAF\u0020Luxus\u0020Schirm\u0020\u002F\u0020Schattenl\u00F6sung\u0020mit\u0020optionalem\u0020K\u00FChlystem\u0020\u002F\u0020Beleuchtung\u0020\u0026\u0020Heizung\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen.\u0020Klicken\u0020Sie,\u0020um\u0020zu\u0020den\u0020Bewertungen\u0020zu\u0020gelangen.' : 'Heatsail\u0020LEAF\u0020Luxus\u0020Schirm\u0020\u002F\u0020Schattenl\u00F6sung\u0020mit\u0020optionalem\u0020K\u00FChlystem\u0020\u002F\u0020Beleuchtung\u0020\u0026\u0020Heizung\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen' " :role="reviewsSection ? 'button' : 'img'" > <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> </div> <script> 'use strict'; function initRating10859674968fcaa28d() { return { reviewsSection: document.getElementById('customer-review-list') || document.getElementById('customer-reviews') || document.getElementById('review-form'), scrollToRatings() { let scrollTimeout = null if (!this.reviewsSection) { return } addEventListener('scroll', () => { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { if (this.reviewsSection) { this.reviewsSection.focus() } }, 50); }, { once: true }); this.reviewsSection.scrollIntoView({behavior: 'smooth'}) } } } </script> </div> <div class="mt-2 mb-auto"> </div> <div class="self-end px-5 py-1.5 text-center bg-white" :class="{ 'group-hover:bg-sunliner-orange-darker': canHover }"> <div class="font-bold text-lg" x-data="initPriceBox()" x-defer="intersect" @update-prices-10859.window="updatePrice($event.detail);" > <div class="price-box price-final_price" data-role="priceBox" data-product-id="10859" data-price-box="product-id-10859"> <div class="flex gap-x-3"> <span class="old-price relative text-sunliner-gray group-hover:text-black"> <span x-data x-id="['old\u002Dprice\u002D10859']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Normalpreis:</span> <span :id="$id('old\u002Dprice\u002D10859')" data-price-amount="16645" data-price-type="oldPrice" class="price-wrapper " ><span class="price">16.645,00 €</span></span> </span> <span class="absolute left-0 bottom-1/4 w-full h-0.5 -rotate-6 bg-sunliner-gray-darker group-hover:bg-sunliner-gray-lighter"></span> </span> <span class="special-price text-sunliner-orange-darker group-hover:text-white"> <span x-data x-id="['product\u002Dprice\u002D10859']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Sonderangebot:</span> <span :id="$id('product\u002Dprice\u002D10859')" data-price-amount="15729.51" data-price-type="finalPrice" class="price-wrapper " ><span class="price">15.729,51 €</span></span> </span> </span> </div> </div><div class="price-details mt-1.5 text-sm"> <span class="tax-details"> Inkl. 19% MwSt. <span class="tax-separator">, </span> <span class="shipping-cost-details"> versandkostenfrei (Deutschland), sonst zzgl. <a class="text-sunliner-orange" href="https://www.sunliner.de/service">Versandkosten (Ausland)</a> </span> </span> </div> </div> </div> </div> </div> </li> <li> <div x-data="{ canHover: window.matchMedia('(hover:hover)').matches, touchMoved: false }" class="item product product-item card card-interactive flex flex-col relative mx-1 h-full overflow-hidden transition-all duration-200 ease-out" :class="{ 'group': canHover }" @touchstart.passive="touchMoved = false" @touchmove.passive="touchMoved = true" @touchend.prevent.stop.passive="if (!touchMoved) $refs['product_item_link'].click()" > <a href="https://www.sunliner.de/heatsail-dome-luxus-heizstrahler-hangelampe.html" class="absolute w-full h-full z-10" x-ref="product_item_link" @click.stop="" ></a> <div class="product photo product-item-photo block mx-auto mb-3 " style="width: 308px; height: 308px;" tabindex="-1"> <img class="w-full h-full product-image-photo" x-data="" @update-gallery-10716.window="$root.src = $event.detail" src="https://www.sunliner.de/media/catalog/product/cache/5030247684eafdb264ce7d02ffe3305c/d/o/domependantral_.jpg" loading="lazy" width="308" height="308" alt="Heatsail Dome Luxus Heizstrahler / Hängelampe" title="Heatsail Dome Luxus Heizstrahler / Hängelampe" /> </div> <div class="product-info flex flex-col grow w-full h-full mt-auto pl-2.5 py-2 bg-sunliner-gray-faint justify-between"> <div class="px-1.5 py-3 flex font-bold text-sunliner-brown" :class="{ 'group-hover:text-sunliner-orange-darker': canHover }"> <a class="product-item-link" href="https://www.sunliner.de/heatsail-dome-luxus-heizstrahler-hangelampe.html" :id="`slide-desc-10716-${$id('slider-id')}`" > Heatsail Dome Luxus Heizstrahler / Hängelampe </a> </div> <div class="mt-auto"> <div x-data="initRating10716674968fca425d()" x-defer="intersect" class="rating-summary flex" :class="{'cursor-pointer' : reviewsSection}" title="Seien Sie der erste, der dieses Produkt bewertet" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection ? 'Heatsail\u0020Dome\u0020Luxus\u0020Heizstrahler\u0020\u002F\u0020H\u00E4ngelampe\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen.\u0020Klicken\u0020Sie,\u0020um\u0020zu\u0020den\u0020Bewertungen\u0020zu\u0020gelangen.' : 'Heatsail\u0020Dome\u0020Luxus\u0020Heizstrahler\u0020\u002F\u0020H\u00E4ngelampe\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen' " :role="reviewsSection ? 'button' : 'img'" > <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> </div> <script> 'use strict'; function initRating10716674968fca425d() { return { reviewsSection: document.getElementById('customer-review-list') || document.getElementById('customer-reviews') || document.getElementById('review-form'), scrollToRatings() { let scrollTimeout = null if (!this.reviewsSection) { return } addEventListener('scroll', () => { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { if (this.reviewsSection) { this.reviewsSection.focus() } }, 50); }, { once: true }); this.reviewsSection.scrollIntoView({behavior: 'smooth'}) } } } </script> </div> <div class="mt-2 mb-auto"> </div> <div class="self-end px-5 py-1.5 text-center bg-white" :class="{ 'group-hover:bg-sunliner-orange-darker': canHover }"> <div class="font-bold text-lg" x-data="initPriceBox()" x-defer="intersect" @update-prices-10716.window="updatePrice($event.detail);" > <div class="price-box price-final_price" data-role="priceBox" data-product-id="10716" data-price-box="product-id-10716"> <div class="flex gap-x-3"> <span class="old-price relative text-sunliner-gray group-hover:text-black"> <span x-data x-id="['old\u002Dprice\u002D10716']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Normalpreis:</span> <span :id="$id('old\u002Dprice\u002D10716')" data-price-amount="3587" data-price-type="oldPrice" class="price-wrapper " ><span class="price">3.587,00 €</span></span> </span> <span class="absolute left-0 bottom-1/4 w-full h-0.5 -rotate-6 bg-sunliner-gray-darker group-hover:bg-sunliner-gray-lighter"></span> </span> <span class="special-price text-sunliner-orange-darker group-hover:text-white"> <span x-data x-id="['product\u002Dprice\u002D10716']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Sonderangebot:</span> <span :id="$id('product\u002Dprice\u002D10716')" data-price-amount="3389.71" data-price-type="finalPrice" class="price-wrapper " ><span class="price">3.389,71 €</span></span> </span> </span> </div> </div><div class="price-details mt-1.5 text-sm"> <span class="tax-details"> Inkl. 19% MwSt. <span class="tax-separator">, </span> <span class="shipping-cost-details"> versandkostenfrei (Deutschland), sonst zzgl. <a class="text-sunliner-orange" href="https://www.sunliner.de/service">Versandkosten (Ausland)</a> </span> </span> </div> </div> </div> </div> </div> </li> <li> <div x-data="{ canHover: window.matchMedia('(hover:hover)').matches, touchMoved: false }" class="item product product-item card card-interactive flex flex-col relative mx-1 h-full overflow-hidden transition-all duration-200 ease-out" :class="{ 'group': canHover }" @touchstart.passive="touchMoved = false" @touchmove.passive="touchMoved = true" @touchend.prevent.stop.passive="if (!touchMoved) $refs['product_item_link'].click()" > <a href="https://www.sunliner.de/heatsail-dome-bogenhalterung-luxus-heizstrahler.html" class="absolute w-full h-full z-10" x-ref="product_item_link" @click.stop="" ></a> <div class="product photo product-item-photo block mx-auto mb-3 " style="width: 308px; height: 308px;" tabindex="-1"> <img class="w-full h-full product-image-photo" x-data="" @update-gallery-10717.window="$root.src = $event.detail" src="https://www.sunliner.de/media/catalog/product/cache/5030247684eafdb264ce7d02ffe3305c/b/o/bowbracketcutout.jpg" loading="lazy" width="308" height="308" alt="Heatsail Dome Luxus Heizstrahler / Bogenhalterung" title="Heatsail Dome Luxus Heizstrahler / Bogenhalterung" /> </div> <div class="product-info flex flex-col grow w-full h-full mt-auto pl-2.5 py-2 bg-sunliner-gray-faint justify-between"> <div class="px-1.5 py-3 flex font-bold text-sunliner-brown" :class="{ 'group-hover:text-sunliner-orange-darker': canHover }"> <a class="product-item-link" href="https://www.sunliner.de/heatsail-dome-bogenhalterung-luxus-heizstrahler.html" :id="`slide-desc-10717-${$id('slider-id')}`" > Heatsail Dome Luxus Heizstrahler / Bogenhalterung </a> </div> <div class="mt-auto"> <div x-data="initRating10717674968fca4e26()" x-defer="intersect" class="rating-summary flex" :class="{'cursor-pointer' : reviewsSection}" title="Seien Sie der erste, der dieses Produkt bewertet" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection ? 'Heatsail\u0020Dome\u0020Luxus\u0020Heizstrahler\u0020\u002F\u0020Bogenhalterung\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen.\u0020Klicken\u0020Sie,\u0020um\u0020zu\u0020den\u0020Bewertungen\u0020zu\u0020gelangen.' : 'Heatsail\u0020Dome\u0020Luxus\u0020Heizstrahler\u0020\u002F\u0020Bogenhalterung\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen' " :role="reviewsSection ? 'button' : 'img'" > <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> </div> <script> 'use strict'; function initRating10717674968fca4e26() { return { reviewsSection: document.getElementById('customer-review-list') || document.getElementById('customer-reviews') || document.getElementById('review-form'), scrollToRatings() { let scrollTimeout = null if (!this.reviewsSection) { return } addEventListener('scroll', () => { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { if (this.reviewsSection) { this.reviewsSection.focus() } }, 50); }, { once: true }); this.reviewsSection.scrollIntoView({behavior: 'smooth'}) } } } </script> </div> <div class="mt-2 mb-auto"> </div> <div class="self-end px-5 py-1.5 text-center bg-white" :class="{ 'group-hover:bg-sunliner-orange-darker': canHover }"> <div class="font-bold text-lg" x-data="initPriceBox()" x-defer="intersect" @update-prices-10717.window="updatePrice($event.detail);" > <div class="price-box price-final_price" data-role="priceBox" data-product-id="10717" data-price-box="product-id-10717"> <div class="flex gap-x-3"> <span class="old-price relative text-sunliner-gray group-hover:text-black"> <span x-data x-id="['old\u002Dprice\u002D10717']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Normalpreis:</span> <span :id="$id('old\u002Dprice\u002D10717')" data-price-amount="3445" data-price-type="oldPrice" class="price-wrapper " ><span class="price">3.445,00 €</span></span> </span> <span class="absolute left-0 bottom-1/4 w-full h-0.5 -rotate-6 bg-sunliner-gray-darker group-hover:bg-sunliner-gray-lighter"></span> </span> <span class="special-price text-sunliner-orange-darker group-hover:text-white"> <span x-data x-id="['product\u002Dprice\u002D10717']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Sonderangebot:</span> <span :id="$id('product\u002Dprice\u002D10717')" data-price-amount="3255.52" data-price-type="finalPrice" class="price-wrapper " ><span class="price">3.255,52 €</span></span> </span> </span> </div> </div><div class="price-details mt-1.5 text-sm"> <span class="tax-details"> Inkl. 19% MwSt. <span class="tax-separator">, </span> <span class="shipping-cost-details"> versandkostenfrei (Deutschland), sonst zzgl. <a class="text-sunliner-orange" href="https://www.sunliner.de/service">Versandkosten (Ausland)</a> </span> </span> </div> </div> </div> </div> </div> </li> <li> <div x-data="{ canHover: window.matchMedia('(hover:hover)').matches, touchMoved: false }" class="item product product-item card card-interactive flex flex-col relative mx-1 h-full overflow-hidden transition-all duration-200 ease-out" :class="{ 'group': canHover }" @touchstart.passive="touchMoved = false" @touchmove.passive="touchMoved = true" @touchend.prevent.stop.passive="if (!touchMoved) $refs['product_item_link'].click()" > <a href="https://www.sunliner.de/heatsail-dome-wandhalterung-luxus-heizstrahler.html" class="absolute w-full h-full z-10" x-ref="product_item_link" @click.stop="" ></a> <div class="product photo product-item-photo block mx-auto mb-3 " style="width: 308px; height: 308px;" tabindex="-1"> <img class="w-full h-full product-image-photo" x-data="" @update-gallery-10718.window="$root.src = $event.detail" src="https://www.sunliner.de/media/catalog/product/cache/5030247684eafdb264ce7d02ffe3305c/d/o/dome-wall-bracket-modif.png" loading="lazy" width="308" height="308" alt="Heatsail Dome Luxus Heizstrahler / Wandhalterung" title="Heatsail Dome Luxus Heizstrahler / Wandhalterung" /> </div> <div class="product-info flex flex-col grow w-full h-full mt-auto pl-2.5 py-2 bg-sunliner-gray-faint justify-between"> <div class="px-1.5 py-3 flex font-bold text-sunliner-brown" :class="{ 'group-hover:text-sunliner-orange-darker': canHover }"> <a class="product-item-link" href="https://www.sunliner.de/heatsail-dome-wandhalterung-luxus-heizstrahler.html" :id="`slide-desc-10718-${$id('slider-id')}`" > Heatsail Dome Luxus Heizstrahler / Wandhalterung </a> </div> <div class="mt-auto"> <div x-data="initRating10718674968fca68d9()" x-defer="intersect" class="rating-summary flex" :class="{'cursor-pointer' : reviewsSection}" title="Seien Sie der erste, der dieses Produkt bewertet" :tabindex="reviewsSection ? '0' : '-1'" :aria-label="reviewsSection ? 'Heatsail\u0020Dome\u0020Luxus\u0020Heizstrahler\u0020\u002F\u0020Wandhalterung\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen.\u0020Klicken\u0020Sie,\u0020um\u0020zu\u0020den\u0020Bewertungen\u0020zu\u0020gelangen.' : 'Heatsail\u0020Dome\u0020Luxus\u0020Heizstrahler\u0020\u002F\u0020Wandhalterung\u0020Bewertung.\u00200\u0020von\u00205\u0020Sternen' " :role="reviewsSection ? 'button' : 'img'" > <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> <img class="w-4 h-4 text-sunliner-orange-lighter group-hover:text-sunliner-blue-light" aria-hidden="true" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/star-gray.svg" alt=""> </div> <script> 'use strict'; function initRating10718674968fca68d9() { return { reviewsSection: document.getElementById('customer-review-list') || document.getElementById('customer-reviews') || document.getElementById('review-form'), scrollToRatings() { let scrollTimeout = null if (!this.reviewsSection) { return } addEventListener('scroll', () => { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { if (this.reviewsSection) { this.reviewsSection.focus() } }, 50); }, { once: true }); this.reviewsSection.scrollIntoView({behavior: 'smooth'}) } } } </script> </div> <div class="mt-2 mb-auto"> </div> <div class="self-end px-5 py-1.5 text-center bg-white" :class="{ 'group-hover:bg-sunliner-orange-darker': canHover }"> <div class="font-bold text-lg" x-data="initPriceBox()" x-defer="intersect" @update-prices-10718.window="updatePrice($event.detail);" > <div class="price-box price-final_price" data-role="priceBox" data-product-id="10718" data-price-box="product-id-10718"> <div class="flex gap-x-3"> <span class="old-price relative text-sunliner-gray group-hover:text-black"> <span x-data x-id="['old\u002Dprice\u002D10718']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Normalpreis:</span> <span :id="$id('old\u002Dprice\u002D10718')" data-price-amount="4420" data-price-type="oldPrice" class="price-wrapper " ><span class="price">4.420,00 €</span></span> </span> <span class="absolute left-0 bottom-1/4 w-full h-0.5 -rotate-6 bg-sunliner-gray-darker group-hover:bg-sunliner-gray-lighter"></span> </span> <span class="special-price text-sunliner-orange-darker group-hover:text-white"> <span x-data x-id="['product\u002Dprice\u002D10718']" class="price-container price-final_price tax weee" > <span class="price-label font-semibold text-xs text-sunliner-gray-medium group-hover:text-white">Sonderangebot:</span> <span :id="$id('product\u002Dprice\u002D10718')" data-price-amount="4176.9" data-price-type="finalPrice" class="price-wrapper " ><span class="price">4.176,90 €</span></span> </span> </span> </div> </div><div class="price-details mt-1.5 text-sm"> <span class="tax-details"> Inkl. 19% MwSt. <span class="tax-separator">, </span> <span class="shipping-cost-details"> versandkostenfrei (Deutschland), sonst zzgl. <a class="text-sunliner-orange" href="https://www.sunliner.de/service">Versandkosten (Ausland)</a> </span> </span> </div> </div> </div> </div> </div> </li> </ul> </div> <div class="max-w-1300 w-full mt-2.5 px-2.5 flex flex-col gap-y-4"> <div class="flex w-full"> <i class="w-1/6 border-b-8 border-sunliner-orange-lighter"></i> <i class="w-full border-b-8 border-sunliner-gray-faint"></i> <i class="w-1/6 border-b-8 border-sunliner-orange-lighter"></i> </div> <script> function initToolbar_67496ed67b238() { return { options: {"productListToolbarForm":{"mode":"product_list_mode","direction":"product_list_dir","order":"product_list_order","limit":"product_list_limit","modeDefault":"grid","directionDefault":"asc","orderDefault":"position","limitDefault":32,"url":"https:\/\/www.sunliner.de\/heatsail.html","formKey":"CoQfn5T6L3h73yql","post":false,"page":"p"}}.productListToolbarForm || {}, getUrlParams: function () { let decode = window.decodeURIComponent, urlPaths = this.options.url.split('?'), urlParams = urlPaths[1] ? urlPaths[1].split('&') : [], params = {}, parameters, i; for (i = 0; i < urlParams.length; i++) { parameters = urlParams[i].split('='); params[decode(parameters[0])] = parameters[1] !== undefined ? decode(parameters[1].replace(/\+/g, '%20')) : ''; } return params; }, getCurrentLimit: function () { return this.getUrlParams()[this.options.limit] || this.options.limitDefault; }, getCurrentPage: function () { return this.getUrlParams()[this.options.page] || 1; }, changeUrl(paramName, paramValue, defaultValue) { let urlPaths = this.options.url.split('?'), baseUrl = urlPaths[0], paramData = this.getUrlParams(), currentPage = this.getCurrentPage(), newPage; /** * calculates the page on which the first item of the current page will * be with the new limit and sets that number as the new page */ if (currentPage > 1 && paramName === this.options.limit) { newPage = Math.floor(this.getCurrentLimit() * (currentPage - 1) / paramValue) + 1; if (newPage > 1) { paramData[this.options.page] = newPage; } else { delete paramData[this.options.page]; } } paramData[paramName] = paramValue; if (this.options.post) { hyva.postForm({action: baseUrl, data: paramData, skipUenc: true}); } else { if (paramValue === defaultValue.toString()) { delete paramData[paramName]; } paramData = Object.keys(paramData).length === 0 ? '' : '?' + (new URLSearchParams(paramData)); location.href = baseUrl + paramData } } } } </script> <div x-data="initToolbar_67496ed67b238()" class="toolbar toolbar-products w-full px-2.5 flex flex-col md:flex-row items-center gap-y-7 md:gap-y-0"> <div class="hidden md:w-1/3 md:flex"> <p class="toolbar-amount text-base" id="toolbar-amount"> <span class="toolbar-number">9</span> Artikel </p> </div> <div class="md:w-1/3 flex justify-center"> <div class="flex justify-center pages"> </div> </div> <div class="md:w-1/3 flex justify-end"> <div class="toolbar-sorter sorter flex flex-col xl:flex-row items-center md:items-end gap-1"> <span class="sorter-label"> Sortieren nach </span> <label class="h-full flex gap-x-0.5"> <select data-role="sorter" class="form-select sorter-options pl-2.5 bg-sunliner-gray-faint text-sunliner-gray-darker" aria-label="Sortieren nach" @change="changeUrl( 'product_list_order', $event.currentTarget.options[$event.currentTarget.selectedIndex].value, options.orderDefault )"> <option value="position" selected="selected" > Position </option> <option value="price" > Preis </option> </select> <a title="In absteigender Reihenfolge" href="#" class="action sorter-action sort-asc h-full px-2 py-2 flex justify-center items-center bg-transparent border border-sunliner-gray-lighter" @click.prevent="changeUrl('product_list_dir', 'desc', options.directionDefault)" > <img class="w-3.5 h-3.5" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/arrow-blue-u.svg" alt="" width="14" height="14"> </a> </label> </div> </div> </div> </div> </section> </div> <script> 'use strict'; function initBrandSliderComponent() { return { active: 0, itemCount: 21, getSlider() { return this.$root.querySelector('.js_slides'); }, pageSize: 1, pageFillers: 0, calcPageSize() { const slider = this.getSlider(); if (slider) { this.pageSize = Math.round(slider.clientWidth / slider.querySelector('.js_slide').clientWidth); this.pageFillers = ( this.pageSize * Math.ceil(this.itemCount / this.pageSize) ) - this.itemCount; } }, calcActive(event) { const slider = this.getSlider(); if (slider) { this.active = Math.ceil( Math.round( slider.scrollLeft / (slider.scrollWidth / this.itemCount) ) / this.pageSize ) * this.pageSize; } }, skipCarouselToNavigation(navSelector) { const element = document.getElementById(navSelector) if (element) { element.scrollIntoView({behavior: 'smooth', block: 'end'}); const button = element.querySelector('button:not([disabled])'); this.$nextTick(() => button && button.focus({preventScroll: true})) } } } } </script> <section class="w-full my-3" x-data="initBrandSliderComponent()" x-init="calcPageSize();" x-id="['slider-nav', 'slider-desc', 'slider-id']" x-on:resize.window.debounce="calcPageSize(); $nextTick( function() { calcActive() })" role="group" aria-roledescription="Karussell" aria-label="Karussell Top Marken" :aria-describedby="$id('slider-desc')" x-defer="intersect" > <div class="relative container max-w-screen xl:max-w-1300"> <div class="container mb-6 pt-6 pb-3 flex flex-col items-center md:flex-row border-b border-sunliner-gray-lightest"> <h3 class="text-1.5xl font-light"> Top Marken </h3 > </div> <span class="sr-only" :id="$id('slider-desc')" tabindex="-1" > Mit der Tabulatortaste können Sie durch die Elemente des Karussells navigieren. Mit den Skip-Links können Sie das Karussell überspringen oder direkt zur Karussellnavigation wechseln. </span> <a href="#-slider-end" class="action skip sr-only focus:not-sr-only focus:absolute focus:z-30 focus:bg-white" > Clicken, um das Karussell zu überspringen </a> <button x-show="itemCount > pageSize" type="button" class="action skip sr-only focus:not-sr-only focus:absolute focus:z-30 focus:bg-white" x-on:click.prevent="skipCarouselToNavigation($id('slider-nav'))" > Clicken, um zur Karussell-Navigation zu gelangen </button> <div class="relative w-full container overflow-x-hidden focus-within:ring-2 ring-offset-2 active:ring-0 ring-blue-500/50"> <div class="relative flex flex-nowrap w-full overflow-auto js_slides snap transition-all" id="top-marken" :class="{'justify-center' : itemCount < 2}" x-on:scroll.debounce="calcActive" > <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="1 > active && 1 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 1" :aria-describedby="`slide-desc-1-${$id('slider-id')}`"> <a href="https://www.sunliner.de/bahama_jumbrella.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-1-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/BAHAMA_LogoRGB_Kopie.png" alt="Bahama GmbH" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="2 > active && 2 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 2" :aria-describedby="`slide-desc-2-${$id('slider-id')}`"> <a href="https://www.sunliner.de/bambrella.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-2-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/manufacturers/files/b/a/bambrella-logo-mar-15.jpg" alt="Bambrella" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="3 > active && 3 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 3" :aria-describedby="`slide-desc-3-${$id('slider-id')}`"> <a href="https://www.sunliner.de/bikatec.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-3-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/manufacturers/files/b/i/bikatec.jpg" alt="BiKATEC" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="4 > active && 4 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 4" :aria-describedby="`slide-desc-4-${$id('slider-id')}`"> <a href="https://www.sunliner.de/fim_umbrella.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-4-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/manufacturers/files/l/o/logo-fim.jpeg" alt="FIM umbrella Sonnenschirme" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="5 > active && 5 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 5" :aria-describedby="`slide-desc-5-${$id('slider-id')}`"> <a href="https://www.sunliner.de/glatz.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-5-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/01_glatz_logo_pos_rgb_large.png" alt="Glatz Sonnenschirme" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="6 > active && 6 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 6" :aria-describedby="`slide-desc-6-${$id('slider-id')}`"> <a href="https://www.sunliner.de/heatsail.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-6-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/Heatsail-LOGO_horizontal-6.png" alt="HEATSAIL" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="7 > active && 7 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 7" :aria-describedby="`slide-desc-7-${$id('slider-id')}`"> <a href="https://www.sunliner.de/instashade.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-7-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/manufacturers/files/i/n/instashade_logo.jpg" alt="InstaShade" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="8 > active && 8 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 8" :aria-describedby="`slide-desc-8-${$id('slider-id')}`"> <a href="https://www.sunliner.de/jardinico_sonnenschirme.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-8-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/Jardinico_Logo.png" alt="Jardinico Sonnenschirme - Belgisches Design in Vollendung" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="9 > active && 9 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 9" :aria-describedby="`slide-desc-9-${$id('slider-id')}`"> <a href="https://www.sunliner.de/leiner.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-9-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/manufacturers/files/l/e/leiner_markisen.jpg" alt="Leiner Markisen" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="10 > active && 10 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 10" :aria-describedby="`slide-desc-10-${$id('slider-id')}`"> <a href="https://www.sunliner.de/lume.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-10-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/manufacturers/files/l/u/lume_logo.png" alt="Lume" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="11 > active && 11 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 11" :aria-describedby="`slide-desc-11-${$id('slider-id')}`"> <a href="https://www.sunliner.de/mdt_sonnenschirme.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-11-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/MDT_Logo_2_.png" alt="MDT-tex" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="12 > active && 12 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 12" :aria-describedby="`slide-desc-12-${$id('slider-id')}`"> <a href="https://www.sunliner.de/may.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-12-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/manufacturers/files/m/a/may-sonnenschirme_logo.gif" alt="May Sonnenschirme" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="13 > active && 13 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 13" :aria-describedby="`slide-desc-13-${$id('slider-id')}`"> <a href="https://www.sunliner.de/liro.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-13-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/Logo_Tranparent_300_p_pro_zoll_klein_2_5_x_4_cm_Hintergrund_wei_.png" alt="Nertes GmbH LiRo" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="14 > active && 14 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 14" :aria-describedby="`slide-desc-14-${$id('slider-id')}`"> <a href="https://www.sunliner.de/scolaro.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-14-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/Scolaro.png" alt="Scolaro Sonnenschirme" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="15 > active && 15 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 15" :aria-describedby="`slide-desc-15-${$id('slider-id')}`"> <a href="https://www.sunliner.de/shademaker.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-15-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/manufacturers/files/s/h/shademaker_logo_3.jpg" alt="Shademaker Sonnenschirme" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="16 > active && 16 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 16" :aria-describedby="`slide-desc-16-${$id('slider-id')}`"> <a href="https://www.sunliner.de/sunliner.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-16-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/manufacturers/files/s/u/sun_logo-2014_09_rz_2.jpg" alt="SunLiner" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="17 > active && 17 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 17" :aria-describedby="`slide-desc-17-${$id('slider-id')}`"> <a href="https://www.sunliner.de/suncomfort_by_glatz.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-17-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/Suncomfort_Logo.jpg" alt="Suncomfort" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="18 > active && 18 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 18" :aria-describedby="`slide-desc-18-${$id('slider-id')}`"> <a href="https://www.sunliner.de/tuuci.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-18-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/Tuuci_klein.jpg" alt="TUUCI® Sonnenschirme und Ampelschirme" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="19 > active && 19 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 19" :aria-describedby="`slide-desc-19-${$id('slider-id')}`"> <a href="https://www.sunliner.de/umbrosa.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-19-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/Umbrosa_Logo_1.png" alt="UMBROSA NV Sonnensegel" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="20 > active && 20 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 20" :aria-describedby="`slide-desc-20-${$id('slider-id')}`"> <a href="https://www.sunliner.de/weishaeupl.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-20-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/Weishaeupl_Logo_NEU.png" alt="Weishäupl Sonnenschirme" loading="lazy" width="130" height="90" /> </a> </div> <div class="js_slide flex-none w-full py-1 md:w-1/2 lg:w-1/3 xl:w-1/4" role="group" :aria-hidden="21 > active && 21 <= (active + pageSize) ? 'false' : 'true'" aria-label="Posten 21" :aria-describedby="`slide-desc-21-${$id('slider-id')}`"> <a href="https://www.sunliner.de/zangenberg.html" class="w-full h-full flex justify-center items-center bg-white" :id="`slide-desc-21-${$id('slider-id')}`" > <img class="pb-3 self-center" src="https://www.sunliner.de/media/amasty/shopby/option_images/manufacturers/files/z/a/zangenberg.png" alt="Zangenberg Sonnenschirme" loading="lazy" width="130" height="90" /> </a> </div> </div> </div> <template x-if="itemCount > pageSize"> <div class="w-full flex justify-center items-center p-4" :id="$id('slider-nav')" x-cloak > <button type="button" aria-label="Vorherige Folie" :disabled="active === 0" class="w-8 h-8 btn mx-2 xs:mx-4 p-0 text-sunliner-gray" :class="{ 'invisible' : active === 0 }" x-on:click="getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * (active-pageSize); active=active-pageSize;"> <img class="w-6 h-6" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/arrow-gray-l.svg" alt="" aria-hidden="true" /> </button> <div class="flex flex-wrap justify-center items-center gap-y-2"> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(0 % pageSize)) }" :aria-current="active === 0" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (0 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 0; active=0;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 0, 'bg-sunliner-blue-light': active === 0, 'hidden': (pageSize !== 1 && !!(0 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 0; active=0;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(1 % pageSize)) }" :aria-current="active === 1" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (1 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 1; active=1;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 1, 'bg-sunliner-blue-light': active === 1, 'hidden': (pageSize !== 1 && !!(1 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 1; active=1;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(2 % pageSize)) }" :aria-current="active === 2" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (2 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 2; active=2;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 2, 'bg-sunliner-blue-light': active === 2, 'hidden': (pageSize !== 1 && !!(2 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 2; active=2;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(3 % pageSize)) }" :aria-current="active === 3" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (3 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 3; active=3;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 3, 'bg-sunliner-blue-light': active === 3, 'hidden': (pageSize !== 1 && !!(3 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 3; active=3;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(4 % pageSize)) }" :aria-current="active === 4" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (4 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 4; active=4;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 4, 'bg-sunliner-blue-light': active === 4, 'hidden': (pageSize !== 1 && !!(4 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 4; active=4;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(5 % pageSize)) }" :aria-current="active === 5" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (5 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 5; active=5;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 5, 'bg-sunliner-blue-light': active === 5, 'hidden': (pageSize !== 1 && !!(5 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 5; active=5;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(6 % pageSize)) }" :aria-current="active === 6" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (6 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 6; active=6;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 6, 'bg-sunliner-blue-light': active === 6, 'hidden': (pageSize !== 1 && !!(6 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 6; active=6;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(7 % pageSize)) }" :aria-current="active === 7" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (7 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 7; active=7;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 7, 'bg-sunliner-blue-light': active === 7, 'hidden': (pageSize !== 1 && !!(7 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 7; active=7;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(8 % pageSize)) }" :aria-current="active === 8" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (8 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 8; active=8;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 8, 'bg-sunliner-blue-light': active === 8, 'hidden': (pageSize !== 1 && !!(8 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 8; active=8;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(9 % pageSize)) }" :aria-current="active === 9" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (9 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 9; active=9;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 9, 'bg-sunliner-blue-light': active === 9, 'hidden': (pageSize !== 1 && !!(9 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 9; active=9;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(10 % pageSize)) }" :aria-current="active === 10" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (10 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 10; active=10;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 10, 'bg-sunliner-blue-light': active === 10, 'hidden': (pageSize !== 1 && !!(10 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 10; active=10;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(11 % pageSize)) }" :aria-current="active === 11" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (11 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 11; active=11;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 11, 'bg-sunliner-blue-light': active === 11, 'hidden': (pageSize !== 1 && !!(11 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 11; active=11;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(12 % pageSize)) }" :aria-current="active === 12" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (12 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 12; active=12;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 12, 'bg-sunliner-blue-light': active === 12, 'hidden': (pageSize !== 1 && !!(12 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 12; active=12;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(13 % pageSize)) }" :aria-current="active === 13" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (13 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 13; active=13;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 13, 'bg-sunliner-blue-light': active === 13, 'hidden': (pageSize !== 1 && !!(13 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 13; active=13;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(14 % pageSize)) }" :aria-current="active === 14" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (14 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 14; active=14;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 14, 'bg-sunliner-blue-light': active === 14, 'hidden': (pageSize !== 1 && !!(14 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 14; active=14;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(15 % pageSize)) }" :aria-current="active === 15" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (15 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 15; active=15;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 15, 'bg-sunliner-blue-light': active === 15, 'hidden': (pageSize !== 1 && !!(15 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 15; active=15;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(16 % pageSize)) }" :aria-current="active === 16" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (16 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 16; active=16;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 16, 'bg-sunliner-blue-light': active === 16, 'hidden': (pageSize !== 1 && !!(16 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 16; active=16;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(17 % pageSize)) }" :aria-current="active === 17" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (17 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 17; active=17;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 17, 'bg-sunliner-blue-light': active === 17, 'hidden': (pageSize !== 1 && !!(17 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 17; active=17;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(18 % pageSize)) }" :aria-current="active === 18" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (18 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 18; active=18;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 18, 'bg-sunliner-blue-light': active === 18, 'hidden': (pageSize !== 1 && !!(18 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 18; active=18;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(19 % pageSize)) }" :aria-current="active === 19" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (19 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 19; active=19;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 19, 'bg-sunliner-blue-light': active === 19, 'hidden': (pageSize !== 1 && !!(19 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 19; active=19;" > </span> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(20 % pageSize)) }" :aria-current="active === 20" :aria-label="hyva.str('Folie\u0020anzeigen\u0020\u00251', (20 / pageSize) + 1)" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 20; active=20;" > <span class="shrink-0 block w-4 h-4 mx-1 hover:bg-sunliner-orange-lighter cursor-pointer" :class="{ 'bg-sunliner-gray-lightest': active !== 20, 'bg-sunliner-blue-light': active === 20, 'hidden': (pageSize !== 1 && !!(20 % pageSize)) }" x-on:click=" getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * 20; active=20;" > </span> </div> <button type="button" aria-label="Next Slide" :disabled="active >= itemCount-pageSize" class="w-8 h-8 btn mx-2 xs:mx-4 p-0 text-sunliner-gray-lighter" :class="{ 'invisible' : active >= itemCount-pageSize }" x-on:click="getSlider().scrollLeft = (getSlider().scrollWidth / itemCount) * (active+pageSize); active=active+pageSize"> <img class="w-6 h-6" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/arrow-gray-r.svg" alt="" aria-hidden="true" /> </button> </div> </template> <span id="-slider-end" tabindex="-1"></span> </div> </section> <script type="text/x-magento-init"> { ".sidebar #narrow-by-list": { "accordion": { "multipleCollapsible": true, "active": [] } } } </script> <script type="text/x-magento-init"> { ".products-grid, .products-list": { "amShopbySwatchesChoose": { "listSwatches": [] } } } </script> <script type="text/x-magento-init"> { "#narrow-by-list": { "amShopbyFiltersSync": { } } } </script> <section class="w-full container"> <div class="category-cms container xl:max-w-1300 flex justify-center"> <div class="w-full md:w-4/5"> </div> </div> <div class="amshopby-filters-bottom-cms container xl:max-w-1300 flex justify-center"> <div class="w-full md:w-4/5"> <style>#html-body [data-pb-style=AHDY6C1]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</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="AHDY6C1"><div data-content-type="text" data-appearance="default" data-element="main"><h1>Luxuriöse Wärme für Draußen: Heatsail und der einzigartige Dome Heizstrahler</h1> <p>In den kühleren Monaten gibt es nichts Schöneres, als gemütlich draußen zu sitzen und die frische Luft zu genießen. Und genau hier kommt Heatsail ins Spiel. Diese belgische Firma hat sich darauf spezialisiert, exklusive Heizstrahler herzustellen, die nicht nur für wohlige Wärme, sondern auch für einen Hauch von Luxus im Freien sorgen. Ein herausragendes Produkt aus ihrer Kollektion ist der Dome Heizstrahler.</p> <h2>Was macht Heatsail so besonders?</h2> <p>Heatsail hebt sich von anderen Herstellern von Heizstrahlern ab, indem sie auf höchste Qualität und Design setzen. Ihre Produkte sind nicht nur funktional, sondern auch ästhetisch ansprechend, was sie zur perfekten Ergänzung für anspruchsvolle Außenbereiche macht. Heatsail-Heizstrahler sind nicht nur Wärmespender, sondern auch Designelemente, die einen Hauch von Eleganz und Raffinesse in Ihre Terrasse, Ihren Garten oder Ihren Restaurantbereich bringen.</p> <h2>Der Dome Heizstrahler: Eine Klasse für sich</h2> <p>Der Dome Heizstrahler von Heatsail ist zweifellos ein Highlight ihrer Produktpalette. Er vereint modernes Design, innovative Technologie und effiziente Wärmeabgabe in einem. Hier sind einige Gründe, warum der Dome so außergewöhnlich ist:</p> <ul> <li><strong>Schickes Design:</strong> Der Dome ist mehr als nur ein Heizstrahler. Mit seinem markanten Erscheinungsbild und hochwertigen Materialien wird er zum Blickfang in jedem Raum im Freien.</li> <li><strong>Vielseitige Wärmeabgabe:</strong> Der Dome strahlt nicht nur Wärme nach unten ab, sondern auch seitlich, was für eine gleichmäßige Wärmeverteilung sorgt und mehrere Personen gleichzeitig wärmt.</li> <li><strong>Fernbedienung:</strong> Mit der beiliegenden Fernbedienung können Sie die Heizstufen des Domes bequem und einfach anpassen, ohne aufstehen zu müssen.</li> <li><strong>Robuste Konstruktion:</strong> Heatsail legt großen Wert auf Qualität und Langlebigkeit. Der Dome ist wetterfest und somit ideal für den Außenbereich geeignet.</li> </ul> <h2>Fazit</h2> <p>Heatsail ist die richtige Wahl, wenn Sie auf der Suche nach exklusiven Heizstrahlern sind, die Eleganz und Wärme in Ihren Außenbereich bringen. Der <a title="Heatsail Dome" href="https://www.sunliner.de/heatsail-dome-luxus-heizstrahler-stehlampe-design.html">Heatsail Dome</a> ist das perfekte Beispiel für ihre Leidenschaft für Design und Funktionalität. Investieren Sie in Heatsail und erleben Sie luxuriöse Wärme im Freien. Machen Sie Ihren Außenbereich zu einem Ort, an dem Sie das ganze Jahr über entspannen können.</p></div></div></div> </div> </div> </section> <div data-am-js="js-init"> <script type="text/x-magento-init"> { "[data-am-js='filter-item-default']": { "amShopbyFilterItemDefault": { "collectFilters": 0, "clearUrl": "https://www.sunliner.de/heatsail.html" } }, "*": { "amShopbyResponsive": {} } } </script> </div> </div></div></main><footer class="page-footer"><div class="footer content"><footer class="container max-w-1300 pb-5 pt-10"> <div class="flex flex-col gap-y-9"> <div class="w-full grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-x-2 gap-y-6 xl:gap-x-5 pb-7"> <div class="flex flex-col gap-y-2.5"> <a class="mb-2" href="https://www.sunliner.de/"> <img src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/sunliner-logo.svg" alt="Sunliner Logo" width="168" height="63" loading="lazy"/> </a> <p class="text-white">Ihr zuverlässiger und professioneller Spezialist für Sonnenschirme</p> <p class="text-sunliner-gray text-xs">Besuchen Sie uns auch auf:</p> <div class="flex gap-x-3.5"> <a href="https://www.facebook.com/Sunliner/" target="_blank" class="svgsprite facebook"></a> <a href="https://www.twitter.com/Schirmprofi/" target="_blank" class="svgsprite twitter"></a> </div> </div> <div class="flex flex-col gap-y-2"> <div class="flex items-center gap-x-3 mb-2"> <i class="svgsprite payment"></i> <h3>Zahlung & Versand</h3> </div> <a href="https://www.sunliner.de/zahlung/" class="w-full grid grid-cols-2 sm:grid-cols-3 grid-rows-4 sm:grid-rows-3 gap-2 justify-center items-center payment-icons"> <span class="w-full h-full col-span-1 flex justify-center items-center px-2 py-2 bg-sunliner-gray-lightest hover:opacity-80"><i class="z-10 svgsprite visa"></i></span> <span class="w-full h-full col-span-1 flex justify-center items-center px-2 py-2 bg-sunliner-gray-lightest hover:opacity-80"><i class="z-10 svgsprite mastercard"></i></span> <span class="w-full h-full col-span-1 flex justify-center items-center px-2 py-2 bg-sunliner-gray-lightest hover:opacity-80"><i class="z-10 svgsprite amex"></i></span> <span class="w-full h-full col-span-1 flex justify-center items-center px-2 py-2 bg-sunliner-gray-lightest hover:opacity-80"><i class="z-10 svgsprite paypal"></i></span> <span class="w-full h-full col-span-1 flex justify-center items-center px-2 py-2 bg-sunliner-gray-lightest hover:opacity-80"><i class="z-10 svgsprite applepay"></i></span> <span class="w-full h-full col-span-1 flex justify-center items-center px-2 py-2 bg-sunliner-gray-lightest hover:opacity-80"><i class="z-10 svgsprite instant"></i></span> <span class="w-full h-full col-span-1 sm:col-span-2 flex justify-center items-center px-2 py-2 bg-sunliner-gray-lightest hover:opacity-80"><i class="z-10 svgsprite klarna"></i></span> <span class="w-full h-full col-span-1 flex justify-center items-center px-2 py-2 bg-sunliner-gray-lightest hover:opacity-80"><i class="z-10 svgsprite advance"></i></span> </a> <a href="https://www.sunliner.de/service/" class="flex items-center gap-x-2.5 xl:gap-x-10 p-4 text-white text-xs hover:bg-sunliner-orange hover:text-white"> <i class="svgsprite shipping"></i> <span class="max-w-xxs">Keine Versandkosten innerhalb Deutschlands</span> </a> </div> <div class="flex flex-col gap-y-4"> <div class="flex items-center gap-x-3"> <i class="svgsprite newsletter"></i> <h3>Sunliner Newsletter</h3> </div> <form class="subscribe flex flex-wrap" action="https://www.sunliner.de/newsletter/subscriber/new/" method="post" x-data="initNewsletterForm()" @submit.prevent="submitForm()" id="newsletter-validate-detail" aria-label="Newsletter abonnieren" > <div class="w-3/5 flex items-center border-b border-sunliner-orange-lighter"> <div class="w-full flex items-center gap-x-1"> <img class="w-5 h-3.5 text-sunliner-gray fill-current" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/mail.svg" alt=""> <label for="newsletter-subscribe" class="m-0"> <span class="sr-only"> E-Mail-Adresse </span> <input name="email" type="email" required id="newsletter-subscribe" class="w-full p-0 bg-transparent border-none placeholder-sunliner-gray-lightest placeholder-opacity-25 text-sm text-sunliner-gray-lightest focus:outline-none focus:ring-0" placeholder="Ihre E-Mail Adresse" aria-describedby="footer-newsletter-heading" > <input name="form_key" type="hidden" value="CoQfn5T6L3h73yql" /> </label> </div> </div> <button class="btn btn-secondary w-2/5 -ml-px mb-0.5 py-1.5 font-light text-sm"> <span>Abonnieren</span> </button> <div> <template x-if="displayErrorMessage"> <p class="flex items-center text-red"> <span class="inline-block w-8 h-8 mr-3"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/> </svg> </span> <template x-for="errorMessage in errorMessages"> <span x-html="errorMessage"></span> </template> </p> </template> </div> </form> <div class="w-full"> </div> <span class="w-60 text-sunliner-gray text-xs leading-loose"> Sie können den Newsletter jederzeit wieder abbestellen </span> <script> function initNewsletterForm() { return { errors: 0, hasCaptchaToken: 0, displayErrorMessage: false, errorMessages: [], setErrorMessages(messages) { this.errorMessages = [messages] this.displayErrorMessage = this.errorMessages.length }, submitForm() { // Do not rename $form, the variable is expected to be declared in the recaptcha output const $form = document.querySelector('#newsletter-validate-detail'); if (this.errors === 0) { $form.submit(); } } } } </script> </div> <div class="flex flex-col gap-y-3"> <div class="flex items-center gap-x-3"> <i class="svgsprite hotline"></i> <h3>Hotline: 0541 - 200 27 31</h3> </div> <span class="text-sm ml-10">Servicezeiten:<br>Montag bis Freitag 08:30 bis 18:00 Uhr</span> <a class="group mt-2 ml-10 flex hover:text-white" href="https://api.whatsapp.com/message/PL2SIAUEFEESK1?autoload=1&app_absent=0" target="_blank"> <img class="w-14 z-10" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/whatsapp-business.svg" alt="WhatsApp Logo" width="56" height="56" loading="lazy"/> <div class="w-full mt-px mb-0.5 -ml-7 flex items-center bg-sunliner-brown-lighter group-hover:bg-sunliner-orange"> <span class="ml-10 text-sm"> Kontaktieren Sie uns via ­ <span class="font-semibold text-lg leading-5">WhatsApp</span> </span> </div> </a> </div></div><div class="w-full grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-x-2 gap-y-6 xl:gap-x-5 pt-7 border-t border-sunliner-brown-lighter"><div class="justify-self-center mt-7"> <a href="https://www.CO2neutralwebsite.de/crt/dispcust/c/5554/l/4" target="_blank"> <img src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/images/co2.png" alt="" width="140" height="51" loading="lazy"/> </a> </div> <div class="flex flex-col gap-y-2"> <h3 class="mb-1.5 text-sunliner-orange">Ihr Einkauf bei uns</h3> <a href="https://www.sunliner.de/zahlung/">Zahlungsarten</a> <a href="https://www.sunliner.de/service/">Versand / Retoure</a> <a href="https://www.sunliner.de/widerruf/">Widerrufsbelehrung</a> </div><div class="flex flex-col gap-y-2"> <h3 class="mb-1.5 text-sunliner-orange">Weitere Informationen</h3> <a href="https://www.sunliner.de/blog/">Blog</a> <a href="https://www.sunliner.de/sonnenschirm-lexikon.html"> Sonnenschirm-Lexikon</a> <a href="https://www.sunliner.de/faq/">FAQ</a> <a href="https://www.sunliner.de/ueber-uns/">Über uns</a> <a href="https://www.sunliner.de/contact/">Kontakt</a> </div><div class="flex flex-col gap-y-2"> <h3 class="mb-1.5 text-sunliner-orange">Gesetzliche Angaben</h3> <a href="https://www.sunliner.de/datenschutzerklaerung/">Datenschutz</a> <a href="javascript: Cookiebot.renew()">Cookie-Einwilligung</a> <a href="https://www.sunliner.de/batteriegesetz/">Batteriegesetz</a> <a href="https://www.sunliner.de/agb/">AGB</a> <a href="https://www.sunliner.de/impressum/">Impressum</a> </div> </div> <div class="w-full flex flex-col justify-center text-sunliner-gray-light text-xxs text-center pt-6 lg:pt-0"> <span>Alle Preise inkl. der gesetzl. MwSt.</span> <span>Die durchgestrichenen Preise entsprechen dem bisherigen Preis bei Sunliner</span> <span>© 2024 SunLiner GmbH Alle Rechte vorbehalten</span> </div> </div> </footer> </div></footer> <script> function loadTrustedShopsWidget() { var _tsid = 'X69B028C7DECCB7B48277310B07990616'; _tsConfig = { 'yOffset': '120', /* offset from page bottom */ 'variant': 'reviews', /* text, default, small, reviews, custom, custom_reviews */ 'customElementId': '', /* required for variants custom and custom_reviews */ 'trustcardDirection': '', /* for custom variants: topRight, topLeft, bottomRight, bottomLeft */ 'customBadgeWidth': '', /* for custom variants: 40 - 90 (in pixels) */ 'customBadgeHeight': '', /* for custom variants: 40 - 90 (in pixels) */ 'disableResponsive': 'false', /* deactivate responsive behaviour */ 'disableTrustbadge': 'false', /* deactivate trustbadge */ 'trustCardTrigger': 'mouseenter', /* set to 'click' if you want the trustcard to be opened on click instead */ 'customCheckoutElementId': '' /* required for custom trustcard */ }; var _ts = document.createElement('script'); _ts.type = 'text/javascript'; _ts.charset = 'utf-8'; _ts.async = true; _ts.src = '//widgets.trustedshops.com/js/' + _tsid + '.js'; var __ts = document.getElementsByTagName('script')[0]; __ts.parentNode.insertBefore(_ts, __ts); } document.body.addEventListener('touchstart', loadTrustedShopsWidget, {once: true}); document.body.addEventListener('mouseover', loadTrustedShopsWidget, {once: true}); </script> <script src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/IMI_FriendlyCaptcha/js/vendor/friendly-challenge/widget.module.min.js" type="module" async></script> <script data-mfmofile="true"> document.addEventListener("DOMContentLoaded", function() { if (document.querySelectorAll('.mf-ytw-wrapper').length || document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { !function (f, b, e, v, t, s) { if(f.mfytwcss)return; f.mfytwcss=1; t = b.createElement(e); t.rel = 'stylesheet'; t.type = 'text/css'; t.href = v; s = b.getElementsByTagName('HEAD')[0]; s.appendChild(t) }(window, document, 'link', 'https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/Magefan_YouTubeWidget/css/youtubewidget.css'); } if (document.querySelectorAll('.mf-ytw-wrapper').length) { !function (f, b, e, v, t, s) { if(f.mfytwjs)return; f.mfytwjs=1; t = b.createElement(e); t.type = 'text/javascript'; t.src = v; s = b.getElementsByTagName('HEAD')[0]; s.appendChild(t) }(window, document, 'script', 'https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/Magefan_YouTubeWidget/js/iframe.js'); } if (document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { !function (f, b, e, v, t) { if(f.mflinkjs)return; f.mflinkjs=1; t = b.createElement(e); t.type = 'text/javascript'; t.src = v; s = b.getElementsByTagName('HEAD')[0]; s.appendChild(t) }(window, document, 'script', 'https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/Magefan_YouTubeWidget/js/link.js'); } }); </script> <!--Start of Tawk.to Script--> <script> var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date(); function loadTawkChatWidget() { var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0]; s1.async=true; s1.src='https://embed.tawk.to/5da9f44ddf22d913399fe135/default'; s1.charset='UTF-8'; s1.setAttribute('crossorigin','*'); s0.parentNode.insertBefore(s1,s0); } document.body.addEventListener('touchstart', loadTawkChatWidget, {once: true}); document.body.addEventListener('mouseover', loadTawkChatWidget, {once: true}); </script> <!--End of Tawk.to Script--> <script> (() => { function src_default(Alpine) { Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { let evaluate = evaluateLater(expression); let options = { rootMargin: getRootMargin(modifiers), threshold: getThreshhold(modifiers) }; let observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting === (value === "leave")) return; evaluate(); modifiers.includes("once") && observer.disconnect(); }); }, options); observer.observe(el); cleanup(() => { observer.disconnect(); }); }); } function getThreshhold(modifiers) { if (modifiers.includes("full")) return 0.99; if (modifiers.includes("half")) return 0.5; if (!modifiers.includes("threshold")) return 0; let threshold = modifiers[modifiers.indexOf("threshold") + 1]; if (threshold === "100") return 1; if (threshold === "0") return 0; return Number(`.${threshold}`); } function getLengthValue(rawValue) { let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); return match ? match[1] + (match[2] || "px") : void 0; } function getRootMargin(modifiers) { const key = "margin"; const fallback = "0px 0px 0px 0px"; const index = modifiers.indexOf(key); if (index === -1) return fallback; let values = []; for (let i = 1; i < 5; i++) { values.push(getLengthValue(modifiers[index + i] || "")); } values = values.filter((v) => v !== void 0); return values.length ? values.join(" ").trim() : fallback; } document.addEventListener("alpine:init", () => { window.Alpine.plugin(src_default); }); })(); </script> <script> for (const [selector, deferUntil] of Object.entries({".page-product-configurable #product_addtocart_form [x-data]":"intersect"})) { document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); } </script> <script> (function () { "use strict"; const hasAlpine = new Promise(resolve => { window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); }); const hasInteract = new Promise(resolve => { (events => { const onInteract = () => { resolve(); events.forEach(type => window.removeEventListener(type, onInteract)); } events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) }); const onIntersect = (el) => { return new Promise(resolve => { const observer = new IntersectionObserver(entries => { for (const entry of entries) { if (entry.isIntersecting) { observer.disconnect() resolve(); } } }, {}); observer.observe(el); }); } function runComponent(el) { hasAlpine.then(() => { el.removeAttribute('x-ignore'); queueMicrotask(() => Alpine.initTree(el)); }); } function initDeferredComponents() { document.querySelectorAll('[x-data][x-defer]').forEach(el => { el.setAttribute('x-ignore', ''); const deferUntil = (el.getAttribute('x-defer') || '').trim(); switch (deferUntil) { case 'interact': hasInteract.then(() => runComponent(el)); break; case 'intersect': onIntersect(el).then(() => runComponent(el)) break; case 'idle': window.requestIdleCallback ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) : setTimeout(() => runComponent(el), 4000); break; case 'eager': runComponent(el); break; default: if (deferUntil.startsWith('event:') && deferUntil.length > 6) { window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); } } }); } window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); })() </script> <script type="module" src="https://www.sunliner.de/static/version1732779490/frontend/sunliner/themeHyva/de_DE/Hyva_Theme/js/alpine3.min.js" defer crossorigin ></script> <script> 'use strict'; function dispatchMessages(messages, hideAfter) { const messagesEvent = new CustomEvent("messages-loaded", { detail: { messages: messages, hideAfter: hideAfter } }); window.dispatchEvent(messagesEvent); } if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } (function( hyva, undefined ) { hyva.initFormKey = () => { const inputSelector = 'input[name="form_key"]', formKey = hyva.getFormKey(); Array.from(document.querySelectorAll(inputSelector)).map(function (input) { input.value = formKey }); } hyva.initMessages = () => { try { const messages = hyva.getCookie('mage-messages'); window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; dispatchMessages(window.mageMessages); // empty `mage-messages` cookie const skipSetDomain = true; hyva.setCookie('mage-messages','', -1, skipSetDomain); } catch (error) { console.warn('Error parsing Cookie Messages:', error); } } window.addEventListener('DOMContentLoaded', hyva.initFormKey); hyva.alpineInitialized(hyva.initMessages) }( window.hyva = window.hyva || {} )); </script> <script> 'use strict'; { const private_content_key = 'mage-cache-storage'; const private_content_expire_key = 'mage-cache-timeout'; const private_content_version_key = 'private_content_version'; const section_data_ids_key = 'section_data_ids'; const mage_cache_session_id_key = 'mage-cache-sessid'; const last_visited_store_key = 'last_visited_store'; const ttl = 3600; if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } function loadSectionData () { const browserStorage = hyva.getBrowserStorage(); if (!browserStorage) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "warning", text: "Bitte aktivieren Sie LocalStorage in Ihrem Browser." }] ); return; } try { let isInvalid = false; if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { isInvalid = true; } hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); if (!hyva.getCookie(mage_cache_session_id_key)) { isInvalid = true; browserStorage.removeItem(private_content_key); const skipSetDomain = true; const days = false; hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) } const cookieVersion = hyva.getCookie(private_content_version_key); const storageVersion = browserStorage.getItem(private_content_version_key); if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { isInvalid = true; } const privateContentExpires = browserStorage.getItem(private_content_expire_key); if (privateContentExpires && new Date(privateContentExpires) < new Date()) { browserStorage.removeItem(private_content_key); } if (isInvalid && cookieVersion) { fetchPrivateContent([]); } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); if ( privateContent && privateContentExpires && privateContent.cart && privateContent.customer ) { dispatchPrivateContent(privateContent); } else { fetchPrivateContent([]); } } else { if (document.getElementById('default-section-data')) { const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); dispatchPrivateContent(privateContent); } else { dispatchPrivateContent({}); } } } catch (error) { console.warn('Error retrieving Private Content:', error); } } hyva.alpineInitialized(loadSectionData) window.addEventListener('reload-customer-section-data', loadSectionData); function dispatchPrivateContent(data) { const privateContentEvent = new CustomEvent("private-content-loaded", { detail: { data: data } }); window.dispatchEvent(privateContentEvent); } function fetchPrivateContent(sections) { fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { method: 'GET', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }) .then(response => response.json()) .then( data => { if (data) { try { const browserStorage = hyva.getBrowserStorage(); // merge new data preserving non-invalidated sections const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { delete oldSectionData['checkout-data']; } const newSectionData = Object.assign(oldSectionData, data); dispatchPrivateContent(newSectionData); // don't persist messages, they've been dispatched already if (newSectionData.messages && newSectionData.messages.messages ) { newSectionData.messages.messages = []; } browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); browserStorage.setItem(private_content_expire_key, expiresAt); const newCookieVersion = hyva.getCookie(private_content_version_key); browserStorage.setItem(private_content_version_key, newCookieVersion); // We don't need the section_data_ids in Hyvä, but we store them for compatibility // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout hyva.setCookie( section_data_ids_key, JSON.stringify( Object.keys(data).reduce((sectionDataIds, sectionKey) => { sectionDataIds[sectionKey] = data[sectionKey]['data_id']; return sectionDataIds; }, {}) ), false, true ); } catch (error) { console.warn("Couldn't store privateContent", error); } } } ); } } </script> <script> (() => { document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); })() </script> <script> (events => { const dispatchUserInteractionEvent = () => { events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) window.dispatchEvent(new Event('init-external-scripts')) }; events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) </script> <script> function initWishlist() { return { addToWishlist(productId) { const formKey = hyva.getFormKey(); const postUrl = BASE_URL + 'wishlist/index/add/'; fetch(postUrl, { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), "method": "POST", "mode": "cors", "credentials": "include" }).then(function (response) { if (response.redirected) { window.location.href = response.url; } else if (response.ok) { return response.json(); } else { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "warning", text: "Der\u0020Artikel\u0020konnte\u0020nicht\u0020zur\u0020Wunschliste\u0020hinzugef\u00FCgt\u0020werden." }], 5000 ); } }).then(function (response) { if (!response) { return } typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: (response.success) ? "success" : "error", text: (response.success) ? "Produkt\u0020wurde\u0020Ihrem\u0020Wunschzettel\u0020hinzugef\u00FCgt." : response.error_message }], 5000 ); const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); window.dispatchEvent(reloadCustomerDataEvent); }).catch(function (error) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "error", text: error }], 5000 ); }); } } } </script> <script> function initCompareOnProductList() { return { addToCompare(productId) { const formKey = hyva.getFormKey(); const postUrl = BASE_URL + 'catalog/product_compare/add/'; fetch(postUrl, { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), "method": "POST", "mode": "cors", "credentials": "include" }).then(function (response) { if (response.redirected) { window.location.href = response.url; } }).catch(function (error) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "error", text: error }], 5000 ); }); } }; } </script> <script> function initPriceBox() { return { updatePrice(priceData) { const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); if (priceData.finalPrice.amount < priceData.oldPrice.amount) { regularPriceLabel && regularPriceLabel.classList.add('hidden'); } else { regularPriceLabel && regularPriceLabel.classList.remove('hidden'); } regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); } } } </script> <script> if (HTMLScriptElement.supports && HTMLScriptElement.supports('speculationrules')) { const specScript = document.createElement('script'); specScript.type = 'speculationrules'; specRules = { 'prerender': [{ 'where': { 'and': [ {'href_matches': '/*'}, {'not': {'href_matches': '/checkout/*'}}, {'not': {'href_matches': '/customer/*'}}, {'not': {'href_matches': '/download/*'}}, {'not': {'href_matches': '/newsletter/*'}}, {'not': {'href_matches': '/product_compare/*'}}, {'not': {'href_matches': '/quotation/*'}}, {'not': {'href_matches': '/sales/*'}}, {'not': {'href_matches': '/search/*'}}, {'not': {'href_matches': '/stores/*'}}, {'not': {'href_matches': '/vault/*'}}, {'not': {'href_matches': '/wishlist/*'}}, {'not': {'href_matches': '/*.pdf'}}, {'not': {'selector_matches': '.do-not-prerender'}}, {'not': {'selector_matches': '[rel=nofollow]'}}, {'not': {'selector_matches': '[target=_blank]'}}, {'not': {'selector_matches': '[target=_parent]'}}, {'not': {'selector_matches': '[target=_top]'}} ], }, 'eagerness': 'moderate' }] }; specScript.textContent = JSON.stringify(specRules); document.body.append(specScript); } </script> <script> function initConfigurableOptions(productId, optionConfig) { function findPathParam(key) { const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL; const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); for (let i = 0; i < pathParts.length; i += 2) { if (pathParts[i] === key && pathParts.length > i) { return pathParts[i + 1]; } } } return { optionConfig, productId, itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), allowedAttributeOptions: [], selectedValues: [], init() { this.findAllowedAttributeOptions(); this.$nextTick(() => { if (typeof this.optionConfig.defaultValues === 'object') { for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) { this.changeOption(attributeId, value + ''); } } }); }, findSimpleIndex() { this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); }, calculateSimpleIndexForPartialSelection(selectedValues) { if (selectedValues.length === 0) return 0; let productIndexIds = Object.keys(this.optionConfig.index); Object.keys(this.optionConfig.attributes).forEach((attribute) => { const productsWithAttributeMatch = selectedValues[attribute] ? productIndexIds.filter((productIndex) => { return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute] }) : []; productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds }) return productIndexIds[0]; }, calculateSimpleIndexForFullSelection(selectedValues) { const productIndexes = this.optionConfig.index; return Object.keys(productIndexes).find(productIndex => { const productCandidateOptions = productIndexes[productIndex]; for (const productOption in productCandidateOptions) { if ( ! selectedValues[productOption] || selectedValues[productOption] !== productCandidateOptions[productOption] ) { return false; } } return productIndex; }); }, productIndex: 0, findAllowedAttributeOptions() { this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); }, calculateAllowedAttributeOptions(selectedValues) { const allAttributes = this.optionConfig.attributes; const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { return a.position - b.position }); const newAllowedAttributeOptions = []; allAttributesSorted.forEach(attribute => { const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id)); const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr); newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { return !!option.products.find(product => { return availableIndexes.includes(product); }) }); }); return newAllowedAttributeOptions; }, calculateAvailableProductIndexes(selectedOptions) { if (Object.keys(selectedOptions).length === 0) { if (Object.values(this.optionConfig.salable || {}).length) { return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i) } return Object.keys(this.optionConfig.index); } const selectedIds = Object.keys(selectedOptions); if (Object.values(this.optionConfig.salable || {}).length) { const selectedOptionIndexes = selectedIds.map(attrId => { const optionValue = selectedOptions[attrId]; return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] }) return selectedOptionIndexes.reduce((acc, optionIndexes) => { return acc.filter(index => optionIndexes.includes(index)); }); } else { const productIndexes = this.optionConfig.index; return Object.keys(productIndexes).filter(index => { for (const attrId of selectedIds) { if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false } return true }); } }, findAttributeByOptionId(optionId) { for (const attributeId in this.optionConfig.attributes) { const attributeOptions = this.optionConfig.attributes[attributeId].options || []; if (attributeOptions.find(option => option.id === optionId)) { return attributeId; } } }, getAllowedAttributeOptions(attributeId) { return this.allowedAttributeOptions[attributeId] || [] }, getProductIdsForOption(option) { const attributeId = this.findAttributeByOptionId(option.id); const allOptions = this.optionConfig.attributes[attributeId]; const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); return opt && opt.products ? opt.products : []; }, findProductIdsForPartialSelection(optionSelection) { const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { const newCandidates = this.getProductIdsForOption({id: optionId}); return candidates === null ? newCandidates : candidates.filter(productId => newCandidates.includes(productId)); }, null); return candidateProducts || []; }, findCheapestProductForPartialSelection(optionSelection) { const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); return candidateProducts.reduce((cheapest, simpleIdx) => { // in the first iteration we start with simpleIdx as the currently cheapest product if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount ? simpleIdx : cheapest; }, 0) }, findProductIdToUseForOptionPrice(option) { // try to find a product for a complete selection const attributeId = this.findAttributeByOptionId(option.id); const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); // if there is no complete selection, use the cheapest product for the option return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); }, getAttributeOptionLabel(option) { const optionProduct = this.findProductIdToUseForOptionPrice(option); if ((! optionProduct) || (optionProduct === this.productIndex)) { return option.label; } const currentPrice = this.getOptionPriceAdjustmentBasePrice(); if (this.optionConfig.optionPrices[optionProduct]) { const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; if (optionPrice !== currentPrice){ return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); } } return option.label; }, getOptionPriceAdjustmentBasePrice() { if (this.optionConfig.optionPrices[this.productIndex]) { return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount } const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); return this.optionConfig.optionPrices[cheapestForSelection] ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount : this.optionConfig.prices.finalPrice.amount; // default price if no option selection }, clearOptionIfActive(optionId, value) { if (this.selectedValues[optionId] === value) { this.blurLabel() this.changeOption(optionId, '') } }, removeAttrFromSelection(selectedValues, attributeId) { attributeId = parseInt(attributeId); return selectedValues.reduce((newSelection, val, attr) => { if (attr !== attributeId) { newSelection[attr] = val; } return newSelection; }, []); }, changeOption(attributeId, value) { if (value === '') { this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId) } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) { this.selectedValues[attributeId] = value; } this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateGallery(); window.dispatchEvent( new CustomEvent( 'configurable-selection-changed', { detail: { productId: this.productId, optionId: attributeId, value: value, productIndex: this.productIndex, selectedValues: this.selectedValues, candidates: this.findProductIdsForPartialSelection(this.selectedValues), } } ) ); }, calculateIsMinimalPrice() { return ( this.selectedValues.filter(value => !!value).length < Object.keys(this.optionConfig.attributes).length ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; window.dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updateGallery () { if (this.productIndex) { const images = this.optionConfig.images[this.productIndex]; images && window.dispatchEvent(new CustomEvent( "update-gallery", { detail: this.sortImagesByPosition(images) } )); } else { window.dispatchEvent(new Event("reset-gallery")); } }, sortImagesByPosition(images) { return images.sort((x, y) => { return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) }); }, onGetCartData(data) { }, preselectCartItems(data) { // pre-select options based on cart data for current (quote) itemId const cart = data && data.cart; if (cart && cart.items) { const cartItem = cart.items.find((item) => { return ( item.item_id === this.itemId && item.product_id === this.productId ) }); if (cartItem && cartItem.options && cartItem.options.length) { cartItem.options.map(option => { this.changeOption(option.option_id, option.option_value); }) } } }, preselectQuerystringItems() { // pre-select option like ?size=167 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code)); }, preselectLocationHashItems() { // pre-select option like #144=167 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id)); }, preselectItemsBasedOnLocation(getLocationValue) { Object.values(this.optionConfig.attributes).map(attribute => { this.changeOption(attribute.id, getLocationValue(attribute)) }); } } } </script> <script> function initSwatchOptions(swatchConfig) { return { swatchConfig, getAttributeSwatchData(attributeId) { const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]); swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); return swatchConfig; }, getAllAttributeOptions(attributeId) { return ( this.optionConfig.attributes[attributeId] && this.optionConfig.attributes[attributeId].options ) || [] }, optionIsActive(attributeId, optionId) { // return true if a product with this option is in stock return !!this.getAllowedAttributeOptions(attributeId).find( option => option.id === optionId ) }, optionIsEnabled(attributeId, optionId) { // return true if a product with this option is enabled for (const productId in this.optionConfig.index) { if (this.optionConfig.index[productId][attributeId] === optionId) { return true; } } return false; }, mapSwatchTypeNumberToTypeCode(typeNumber) { switch ("" + typeNumber) { case "1": return "color" case "2": return "image" case "3": return "empty" case "0": default: return "text" } }, getTypeOfFirstOption(attributeId) { for (const optionId in this.swatchConfig[attributeId]) { const option = this.swatchConfig[attributeId][optionId]; if (typeof option.type !== 'undefined') { return this.mapSwatchTypeNumberToTypeCode(option.type); } } }, getVisualSwatchType(attributeId, targetOptionId) { // If a type configuration is present for the given option id, use it const config = this.swatchConfig[attributeId]; if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); } // Otherwise - if no config is present for the target option - use the type of the first option // with a type property from the attribute, thus assuming its the same type as the target option. // (This edge case condition can occur on single swatch products if some options are not salable) return this.getTypeOfFirstOption(attributeId); }, getSwatchType(attributeId, optionId) { // Deserialize the attribute details the first time they are used if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); } const type = this.swatchConfig[attributeId] && this.swatchConfig[attributeId].details && this.swatchConfig[attributeId].details.swatch_input_type || "empty"; return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; }, isTextSwatch(attributeId, optionId) { return this.getSwatchType(attributeId, optionId) === 'text'; }, isVisualSwatch(attributeId, optionId) { const type = this.getSwatchType(attributeId, optionId); return ['image', 'color'].includes(type); }, getSwatchBackgroundStyle(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); const type = this.getSwatchType(attributeId, optionId); if (type === "color") { return 'background-color:' + config.value; } else if (type === "image") { return "background: #ffffff url('" + config.value + "') no-repeat center"; } else { return ''; } }, getSwatchText(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId); }, getOptionLabelFromOptionConfig(attributeId, optionId) { // Fallback if no value is present in swatchConfig data // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190 const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId); return option && option[0] && option[0].label ||''; }, getSwatchConfig(attributeId, optionId) { return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId] ? this.swatchConfig[attributeId][optionId] : false; }, activeTooltipItem: false, tooltipPositionElement: false, isTooltipVisible() { return this.activeTooltipItem && this.getSwatchConfig( this.activeTooltipItem.attribute, this.activeTooltipItem.item ); }, isFirstItemCol() { return this.activeTooltipItem.index === 0; }, getTooltipImageStyle(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); const type = this.getSwatchType(attributeId, optionId); if (type === "color") { return 'background-color:' + config.value + '; width: 110px; height: 90px;'; } else if (type === "image") { return "background: #ffffff url('" + config.thumb + "') center center no-repeat; width: 110px; height: 90px;"; } else { return 'display:none'; } }, getTooltipPosition() { return this.tooltipPositionElement ? `top: ${this.tooltipPositionElement.offsetTop}px;` + `left: ${ this.tooltipPositionElement.offsetLeft - ( this.tooltipPositionElement.closest('.snap') && this.tooltipPositionElement.closest('.snap').scrollLeft || 0 ) }px;` : '' }, getTooltipLabel() { return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label }, focusedLabel: false, focusLabel(optionId) { this.focusedLabel = optionId; }, blurLabel() { this.focusedLabel = false; }, showSwatches: false, initShowSwatchesIntersect() { if ('IntersectionObserver' in window && !window.scrollY) { let io = new IntersectionObserver( entries => { entries.map(entry => { if (entry.isIntersecting) { this.showSwatches = true; io.unobserve(this.$root); } }) } ); io.observe(this.$root); } else { this.showSwatches = true } } } } </script> <div id="imi_friendly_captcha_newsletter" class="frc-captcha" data-sitekey="FCMG0RGUL8NQRS73" data-puzzle-endpoint="https://eu-api.friendlycaptcha.eu/api/v1/puzzle" data-lang="de" data-callback="captchaSolved_imi_friendly_captcha_newsletter" ></div> <script> 'use strict'; document.addEventListener('DOMContentLoaded', function () { function setButtonDisabled(disabled) { const button = Array.from(document.getElementById('imi_friendly_captcha_newsletter').closest('form').elements).find(el => el.type === 'submit'); if (!button) { return; } button.disabled = disabled; } setButtonDisabled(true); window.captchaSolved_imi_friendly_captcha_newsletter = function () { setButtonDisabled(false); } }); </script> <script> 'use strict'; document.getElementById('newsletter-validate-detail').append(document.getElementById('imi_friendly_captcha_newsletter')); </script> <script type="application/json" id="default-section-data"> {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"AE":{"name":"Vereinigte Arabische Emirate"},"AT":{"name":"\u00d6sterreich","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Voralberg"},"95":{"code":"WI","name":"Wien"}}},"BE":{"name":"Belgien"},"BG":{"name":"Bulgarien","regions":{"643":{"code":"BG-01","name":"Blagoevgrad"},"644":{"code":"BG-02","name":"Burgas"},"650":{"code":"BG-08","name":"Dobrich"},"649":{"code":"BG-07","name":"Gabrovo"},"668":{"code":"BG-26","name":"Haskovo"},"651":{"code":"BG-09","name":"Kardzhali"},"652":{"code":"BG-10","name":"Kyustendil"},"653":{"code":"BG-11","name":"Lovech"},"654":{"code":"BG-12","name":"Montana"},"655":{"code":"BG-13","name":"Pazardzhik"},"656":{"code":"BG-14","name":"Pernik"},"657":{"code":"BG-15","name":"Pleven"},"658":{"code":"BG-16","name":"Plovdiv"},"659":{"code":"BG-17","name":"Razgrad"},"660":{"code":"BG-18","name":"Ruse"},"669":{"code":"BG-27","name":"Shumen"},"661":{"code":"BG-19","name":"Silistra"},"662":{"code":"BG-20","name":"Sliven"},"663":{"code":"BG-21","name":"Smolyan"},"664":{"code":"BG-22","name":"Sofia City"},"665":{"code":"BG-23","name":"Sofia Province"},"666":{"code":"BG-24","name":"Stara Zagora"},"667":{"code":"BG-25","name":"Targovishte"},"645":{"code":"BG-03","name":"Varna"},"646":{"code":"BG-04","name":"Veliko Tarnovo"},"647":{"code":"BG-05","name":"Vidin"},"648":{"code":"BG-06","name":"Vratsa"},"670":{"code":"BG-28","name":"Yambol"}}},"CH":{"name":"Schweiz","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"CY":{"name":"Zypern"},"CZ":{"name":"Tschechien"},"DE":{"name":"Deutschland","regions":{"80":{"code":"BAW","name":"Baden-W\u00fcrttemberg"},"81":{"code":"BAY","name":"Bayern"},"82":{"code":"BER","name":"Berlin"},"83":{"code":"BRG","name":"Brandenburg"},"84":{"code":"BRE","name":"Bremen"},"85":{"code":"HAM","name":"Hamburg"},"86":{"code":"HES","name":"Hessen"},"87":{"code":"MEC","name":"Mecklenburg-Vorpommern"},"79":{"code":"NDS","name":"Niedersachsen"},"88":{"code":"NRW","name":"Nordrhein-Westfalen"},"89":{"code":"RHE","name":"Rheinland-Pfalz"},"90":{"code":"SAR","name":"Saarland"},"91":{"code":"SAS","name":"Sachsen"},"92":{"code":"SAC","name":"Sachsen-Anhalt"},"93":{"code":"SCN","name":"Schleswig-Holstein"},"94":{"code":"THE","name":"Th\u00fcringen"}}},"DK":{"name":"D\u00e4nemark","regions":{"861":{"code":"DK-84","name":"Hovedstaden"},"862":{"code":"DK-82","name":"Midtjylland"},"863":{"code":"DK-81","name":"Nordjylland"},"864":{"code":"DK-85","name":"Sj\u00e6lland"},"865":{"code":"DK-83","name":"Syddanmark"}}},"EE":{"name":"Estland","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"}}},"ES":{"name":"Spanien","regions":{"130":{"code":"A Coru\u0441a","name":"A Coru\u00f1a"},"131":{"code":"Alava","name":"Alava"},"132":{"code":"Albacete","name":"Albacete"},"133":{"code":"Alicante","name":"Alicante"},"134":{"code":"Almeria","name":"Almeria"},"135":{"code":"Asturias","name":"Asturias"},"136":{"code":"Avila","name":"Avila"},"137":{"code":"Badajoz","name":"Badajoz"},"138":{"code":"Baleares","name":"Baleares"},"139":{"code":"Barcelona","name":"Barcelona"},"140":{"code":"Burgos","name":"Burgos"},"141":{"code":"Caceres","name":"Caceres"},"142":{"code":"Cadiz","name":"Cadiz"},"143":{"code":"Cantabria","name":"Cantabria"},"144":{"code":"Castellon","name":"Castellon"},"145":{"code":"Ceuta","name":"Ceuta"},"146":{"code":"Ciudad Real","name":"Ciudad Real"},"147":{"code":"Cordoba","name":"Cordoba"},"148":{"code":"Cuenca","name":"Cuenca"},"149":{"code":"Girona","name":"Girona"},"150":{"code":"Granada","name":"Granada"},"151":{"code":"Guadalajara","name":"Guadalajara"},"152":{"code":"Guipuzcoa","name":"Guipuzcoa"},"153":{"code":"Huelva","name":"Huelva"},"154":{"code":"Huesca","name":"Huesca"},"155":{"code":"Jaen","name":"Jaen"},"156":{"code":"La Rioja","name":"La Rioja"},"157":{"code":"Las Palmas","name":"Las Palmas"},"158":{"code":"Leon","name":"Leon"},"159":{"code":"Lleida","name":"Lleida"},"160":{"code":"Lugo","name":"Lugo"},"161":{"code":"Madrid","name":"Madrid"},"162":{"code":"Malaga","name":"Malaga"},"163":{"code":"Melilla","name":"Melilla"},"164":{"code":"Murcia","name":"Murcia"},"165":{"code":"Navarra","name":"Navarra"},"166":{"code":"Ourense","name":"Ourense"},"167":{"code":"Palencia","name":"Palencia"},"168":{"code":"Pontevedra","name":"Pontevedra"},"169":{"code":"Salamanca","name":"Salamanca"},"170":{"code":"Santa Cruz de Tenerife","name":"Santa Cruz de Tenerife"},"171":{"code":"Segovia","name":"Segovia"},"172":{"code":"Sevilla","name":"Sevilla"},"173":{"code":"Soria","name":"Soria"},"174":{"code":"Tarragona","name":"Tarragona"},"175":{"code":"Teruel","name":"Teruel"},"176":{"code":"Toledo","name":"Toledo"},"177":{"code":"Valencia","name":"Valencia"},"178":{"code":"Valladolid","name":"Valladolid"},"179":{"code":"Vizcaya","name":"Vizcaya"},"180":{"code":"Zamora","name":"Zamora"},"181":{"code":"Zaragoza","name":"Zaragoza"}}},"FI":{"name":"Finnland","regions":{"339":{"code":"Ahvenanmaa","name":"Ahvenanmaa"},"333":{"code":"Etel\u00e4-Karjala","name":"Etel\u00e4-Karjala"},"326":{"code":"Etel\u00e4-Pohjanmaa","name":"Etel\u00e4-Pohjanmaa"},"325":{"code":"Etel\u00e4-Savo","name":"Etel\u00e4-Savo"},"337":{"code":"It\u00e4-Uusimaa","name":"It\u00e4-Uusimaa"},"322":{"code":"Kainuu","name":"Kainuu"},"335":{"code":"Kanta-H\u00e4me","name":"Kanta-H\u00e4me"},"330":{"code":"Keski-Pohjanmaa","name":"Keski-Pohjanmaa"},"331":{"code":"Keski-Suomi","name":"Keski-Suomi"},"338":{"code":"Kymenlaakso","name":"Kymenlaakso"},"320":{"code":"Lappi","name":"Lappi"},"334":{"code":"P\u00e4ij\u00e4t-H\u00e4me","name":"P\u00e4ij\u00e4t-H\u00e4me"},"328":{"code":"Pirkanmaa","name":"Pirkanmaa"},"327":{"code":"Pohjanmaa","name":"Pohjanmaa"},"323":{"code":"Pohjois-Karjala","name":"Pohjois-Karjala"},"321":{"code":"Pohjois-Pohjanmaa","name":"Pohjois-Pohjanmaa"},"324":{"code":"Pohjois-Savo","name":"Pohjois-Savo"},"329":{"code":"Satakunta","name":"Satakunta"},"336":{"code":"Uusimaa","name":"Uusimaa"},"332":{"code":"Varsinais-Suomi","name":"Varsinais-Suomi"}}},"FR":{"name":"Frankreich","regions":{"182":{"code":"01","name":"Ain"},"183":{"code":"02","name":"Aisne"},"184":{"code":"03","name":"Allier"},"185":{"code":"04","name":"Alpes-de-Haute-Provence"},"187":{"code":"06","name":"Alpes-Maritimes"},"188":{"code":"07","name":"Ard\u00e8che"},"189":{"code":"08","name":"Ardennes"},"190":{"code":"09","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":"05","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"},"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"GR":{"name":"Griechenland","regions":{"903":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"890":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"891":{"code":"GR-I","name":"Attik\u00ed"},"892":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"893":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"894":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"895":{"code":"GR-D","name":"\u00cdpeiros"},"896":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"897":{"code":"GR-M","name":"Kr\u00edti"},"898":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"899":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"900":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"},"901":{"code":"GR-E","name":"Thessal\u00eda"},"902":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"HR":{"name":"Kroatien"},"HU":{"name":"Ungarn"},"IE":{"name":"Irland"},"IT":{"name":"Italien","regions":{"485":{"code":"AG","name":"Agrigento"},"671":{"code":"AG","name":"Agrigento"},"486":{"code":"AL","name":"Alessandria"},"672":{"code":"AL","name":"Alessandria"},"673":{"code":"AN","name":"Ancona"},"487":{"code":"AN","name":"Ancona"},"488":{"code":"AO","name":"Aosta"},"674":{"code":"AO","name":"Aosta"},"676":{"code":"AR","name":"Arezzo"},"489":{"code":"AR","name":"Arezzo"},"490":{"code":"AP","name":"Ascoli Piceno"},"677":{"code":"AP","name":"Ascoli-Piceno"},"678":{"code":"AT","name":"Asti"},"491":{"code":"AT","name":"Asti"},"679":{"code":"AV","name":"Avellino"},"492":{"code":"AV","name":"Avellino"},"680":{"code":"BA","name":"Bari"},"493":{"code":"BA","name":"Bari"},"494":{"code":"BT","name":"Barletta-Andria-Trani"},"681":{"code":"BT","name":"Barletta-Andria-Trani"},"682":{"code":"BL","name":"Belluno"},"495":{"code":"BL","name":"Belluno"},"496":{"code":"BN","name":"Benevento"},"683":{"code":"BN","name":"Benevento"},"684":{"code":"BG","name":"Bergamo"},"497":{"code":"BG","name":"Bergamo"},"498":{"code":"BI","name":"Biella"},"685":{"code":"BI","name":"Biella"},"686":{"code":"BO","name":"Bologna"},"499":{"code":"BO","name":"Bologna"},"500":{"code":"BZ","name":"Bolzano"},"687":{"code":"BZ","name":"Bolzano"},"688":{"code":"BS","name":"Brescia"},"501":{"code":"BS","name":"Brescia"},"502":{"code":"BR","name":"Brindisi"},"689":{"code":"BR","name":"Brindisi"},"503":{"code":"CA","name":"Cagliari"},"690":{"code":"CA","name":"Cagliari"},"691":{"code":"CL","name":"Caltanissetta"},"504":{"code":"CL","name":"Caltanissetta"},"505":{"code":"CB","name":"Campobasso"},"692":{"code":"CB","name":"Campobasso"},"693":{"code":"CI","name":"Carbonia Iglesias"},"506":{"code":"CI","name":"Carbonia-Iglesias"},"507":{"code":"CE","name":"Caserta"},"694":{"code":"CE","name":"Caserta"},"695":{"code":"CT","name":"Catania"},"508":{"code":"CT","name":"Catania"},"509":{"code":"CZ","name":"Catanzaro"},"696":{"code":"CZ","name":"Catanzaro"},"510":{"code":"CH","name":"Chieti"},"697":{"code":"CH","name":"Chieti"},"698":{"code":"CO","name":"Como"},"511":{"code":"CO","name":"Como"},"699":{"code":"CS","name":"Cosenza"},"512":{"code":"CS","name":"Cosenza"},"513":{"code":"CR","name":"Cremona"},"700":{"code":"CR","name":"Cremona"},"701":{"code":"KR","name":"Crotone"},"514":{"code":"KR","name":"Crotone"},"515":{"code":"CN","name":"Cuneo"},"702":{"code":"CN","name":"Cuneo"},"516":{"code":"EN","name":"Enna"},"703":{"code":"EN","name":"Enna"},"704":{"code":"FM","name":"Fermo"},"517":{"code":"FM","name":"Fermo"},"518":{"code":"FE","name":"Ferrara"},"705":{"code":"FE","name":"Ferrara"},"519":{"code":"FI","name":"Firenze"},"706":{"code":"FI","name":"Firenze"},"707":{"code":"FG","name":"Foggia"},"520":{"code":"FG","name":"Foggia"},"521":{"code":"FC","name":"Forl\u00ec-Cesena"},"708":{"code":"FC","name":"Forli-Cesena"},"709":{"code":"FR","name":"Frosinone"},"522":{"code":"FR","name":"Frosinone"},"523":{"code":"GE","name":"Genova"},"710":{"code":"GE","name":"Genova"},"711":{"code":"GO","name":"Gorizia"},"524":{"code":"GO","name":"Gorizia"},"525":{"code":"GR","name":"Grosseto"},"712":{"code":"GR","name":"Grosseto"},"526":{"code":"IM","name":"Imperia"},"713":{"code":"IM","name":"Imperia"},"527":{"code":"IS","name":"Isernia"},"714":{"code":"IS","name":"Isernia"},"675":{"code":"AQ","name":"L'Aquila"},"529":{"code":"AQ","name":"L'Aquila"},"528":{"code":"SP","name":"La Spezia"},"715":{"code":"SP","name":"La-Spezia"},"530":{"code":"LT","name":"Latina"},"716":{"code":"LT","name":"Latina"},"717":{"code":"LE","name":"Lecce"},"531":{"code":"LE","name":"Lecce"},"532":{"code":"LC","name":"Lecco"},"718":{"code":"LC","name":"Lecco"},"533":{"code":"LI","name":"Livorno"},"719":{"code":"LI","name":"Livorno"},"534":{"code":"LO","name":"Lodi"},"720":{"code":"LO","name":"Lodi"},"721":{"code":"LU","name":"Lucca"},"535":{"code":"LU","name":"Lucca"},"722":{"code":"MC","name":"Macerata"},"536":{"code":"MC","name":"Macerata"},"537":{"code":"MN","name":"Mantova"},"723":{"code":"MN","name":"Mantova"},"538":{"code":"MS","name":"Massa-Carrara"},"724":{"code":"MS","name":"Massa-Carrara"},"725":{"code":"MT","name":"Matera"},"539":{"code":"MT","name":"Matera"},"571":{"code":"VS","name":"Medio Campidano"},"726":{"code":"VS","name":"Medio Campidano"},"727":{"code":"ME","name":"Messina"},"540":{"code":"ME","name":"Messina"},"728":{"code":"MI","name":"Milano"},"541":{"code":"MI","name":"Milano"},"542":{"code":"MO","name":"Modena"},"729":{"code":"MO","name":"Modena"},"543":{"code":"MB","name":"Monza e Brianza"},"730":{"code":"MB","name":"Monza-Brianza"},"544":{"code":"NA","name":"Napoli"},"731":{"code":"NA","name":"Napoli"},"732":{"code":"NO","name":"Novara"},"545":{"code":"NO","name":"Novara"},"546":{"code":"NU","name":"Nuoro"},"733":{"code":"NU","name":"Nuoro"},"581":{"code":"OG","name":"Ogliastra"},"734":{"code":"OG","name":"Ogliastra"},"735":{"code":"OT","name":"Olbia Tempio"},"547":{"code":"OT","name":"Olbia-Tempio"},"736":{"code":"OR","name":"Oristano"},"548":{"code":"OR","name":"Oristano"},"549":{"code":"PD","name":"Padova"},"737":{"code":"PD","name":"Padova"},"550":{"code":"PA","name":"Palermo"},"738":{"code":"PA","name":"Palermo"},"551":{"code":"PR","name":"Parma"},"739":{"code":"PR","name":"Parma"},"552":{"code":"PV","name":"Pavia"},"740":{"code":"PV","name":"Pavia"},"741":{"code":"PG","name":"Perugia"},"553":{"code":"PG","name":"Perugia"},"554":{"code":"PU","name":"Pesaro e Urbino"},"742":{"code":"PU","name":"Pesaro-Urbino"},"743":{"code":"PE","name":"Pescara"},"555":{"code":"PE","name":"Pescara"},"556":{"code":"PC","name":"Piacenza"},"744":{"code":"PC","name":"Piacenza"},"557":{"code":"PI","name":"Pisa"},"745":{"code":"PI","name":"Pisa"},"746":{"code":"PT","name":"Pistoia"},"558":{"code":"PT","name":"Pistoia"},"747":{"code":"PN","name":"Pordenone"},"559":{"code":"PN","name":"Pordenone"},"748":{"code":"PZ","name":"Potenza"},"560":{"code":"PZ","name":"Potenza"},"561":{"code":"PO","name":"Prato"},"749":{"code":"PO","name":"Prato"},"562":{"code":"RG","name":"Ragusa"},"750":{"code":"RG","name":"Ragusa"},"563":{"code":"RA","name":"Ravenna"},"751":{"code":"RA","name":"Ravenna"},"564":{"code":"RC","name":"Reggio Calabria"},"565":{"code":"RE","name":"Reggio Emilia"},"752":{"code":"RC","name":"Reggio-Calabria"},"753":{"code":"RE","name":"Reggio-Emilia"},"566":{"code":"RI","name":"Rieti"},"754":{"code":"RI","name":"Rieti"},"567":{"code":"RN","name":"Rimini"},"755":{"code":"RN","name":"Rimini"},"568":{"code":"RM","name":"Roma"},"756":{"code":"RM","name":"Roma"},"569":{"code":"RO","name":"Rovigo"},"757":{"code":"RO","name":"Rovigo"},"570":{"code":"SA","name":"Salerno"},"758":{"code":"SA","name":"Salerno"},"572":{"code":"SS","name":"Sassari"},"759":{"code":"SS","name":"Sassari"},"573":{"code":"SV","name":"Savona"},"760":{"code":"SV","name":"Savona"},"574":{"code":"SI","name":"Siena"},"761":{"code":"SI","name":"Siena"},"575":{"code":"SR","name":"Siracusa"},"762":{"code":"SR","name":"Siracusa"},"576":{"code":"SO","name":"Sondrio"},"763":{"code":"SO","name":"Sondrio"},"577":{"code":"TA","name":"Taranto"},"764":{"code":"TA","name":"Taranto"},"578":{"code":"TE","name":"Teramo"},"765":{"code":"TE","name":"Teramo"},"579":{"code":"TR","name":"Terni"},"766":{"code":"TR","name":"Terni"},"580":{"code":"TO","name":"Torino"},"767":{"code":"TO","name":"Torino"},"582":{"code":"TP","name":"Trapani"},"768":{"code":"TP","name":"Trapani"},"583":{"code":"TN","name":"Trento"},"769":{"code":"TN","name":"Trento"},"584":{"code":"TV","name":"Treviso"},"770":{"code":"TV","name":"Treviso"},"585":{"code":"TS","name":"Trieste"},"771":{"code":"TS","name":"Trieste"},"586":{"code":"UD","name":"Udine"},"772":{"code":"UD","name":"Udine"},"587":{"code":"VA","name":"Varese"},"773":{"code":"VA","name":"Varese"},"588":{"code":"VE","name":"Venezia"},"774":{"code":"VE","name":"Venezia"},"775":{"code":"VB","name":"Verbania"},"589":{"code":"VB","name":"Verbano-Cusio-Ossola"},"590":{"code":"VC","name":"Vercelli"},"776":{"code":"VC","name":"Vercelli"},"591":{"code":"VR","name":"Verona"},"777":{"code":"VR","name":"Verona"},"592":{"code":"VV","name":"Vibo Valentia"},"778":{"code":"VV","name":"Vibo-Valentia"},"593":{"code":"VI","name":"Vicenza"},"779":{"code":"VI","name":"Vicenza"},"594":{"code":"VT","name":"Viterbo"},"780":{"code":"VT","name":"Viterbo"}}},"LT":{"name":"Litauen","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":"Luxemburg"},"LV":{"name":"Lettland","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"},"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"}}},"MT":{"name":"Malta"},"NL":{"name":"Niederlande"},"NO":{"name":"Norwegen"},"PL":{"name":"Polen","regions":{"627":{"code":"PL-02","name":"dolno\u015bl\u0105skie"},"628":{"code":"PL-04","name":"kujawsko-pomorskie"},"629":{"code":"PL-06","name":"lubelskie"},"630":{"code":"PL-08","name":"lubuskie"},"633":{"code":"PL-14","name":"mazowieckie"},"632":{"code":"PL-12","name":"ma\u0142opolskie"},"634":{"code":"PL-16","name":"opolskie"},"635":{"code":"PL-18","name":"podkarpackie"},"636":{"code":"PL-20","name":"podlaskie"},"637":{"code":"PL-22","name":"pomorskie"},"638":{"code":"PL-24","name":"\u015bl\u0105skie"},"639":{"code":"PL-26","name":"\u015bwi\u0119tokrzyskie"},"640":{"code":"PL-28","name":"warmi\u0144sko-mazurskie"},"641":{"code":"PL-30","name":"wielkopolskie"},"642":{"code":"PL-32","name":"zachodniopomorskie"},"631":{"code":"PL-10","name":"\u0142\u00f3dzkie"}}},"PT":{"name":"Portugal","regions":{"966":{"code":"PT-01","name":"Aveiro"},"967":{"code":"PT-02","name":"Beja"},"968":{"code":"PT-03","name":"Braga"},"969":{"code":"PT-04","name":"Bragan\u00e7a"},"970":{"code":"PT-05","name":"Castelo Branco"},"971":{"code":"PT-06","name":"Coimbra"},"972":{"code":"PT-07","name":"\u00c9vora"},"973":{"code":"PT-08","name":"Faro"},"974":{"code":"PT-09","name":"Guarda"},"975":{"code":"PT-10","name":"Leiria"},"976":{"code":"PT-11","name":"Lisboa"},"977":{"code":"PT-12","name":"Portalegre"},"978":{"code":"PT-13","name":"Porto"},"985":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"984":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"979":{"code":"PT-14","name":"Santar\u00e9m"},"980":{"code":"PT-15","name":"Set\u00fabal"},"981":{"code":"PT-16","name":"Viana do Castelo"},"982":{"code":"PT-17","name":"Vila Real"},"983":{"code":"PT-18","name":"Viseu"}}},"RO":{"name":"Rum\u00e4nien","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":"Serbien"},"SE":{"name":"Schweden","regions":{"996":{"code":"SE-K","name":"Blekinge l\u00e4n"},"997":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"999":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"998":{"code":"SE-I","name":"Gotlands l\u00e4n"},"1000":{"code":"SE-N","name":"Hallands l\u00e4n"},"1001":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"1002":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"1003":{"code":"SE-H","name":"Kalmar l\u00e4n"},"1004":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"1005":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"1015":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"1016":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"1006":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"1008":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"1007":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"1009":{"code":"SE-C","name":"Uppsala l\u00e4n"},"1010":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"1011":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"1012":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"1013":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"1014":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SI":{"name":"Slowenien"},"SK":{"name":"Slowakei"},"data_id":1732865750},"instant-purchase":[],"loggedAsCustomer":[],"captcha":[],"persistent":[],"review":[],"wishlist":{"items":[]},"quote":[],"hyva_checkout":[],"gtm-checkout":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[]}</script> </div><script nonce="cWZycXp5aHc1dDA0OHJ0bXA0ZWViNHduMnk3NzdyZmE="> yireoGoogleTagManager2Pusher({"version":"3.9.7","page_type":"category","page_path":"https:\/\/www.sunliner.de\/heatsail.html","page_title":"HEATSAIL Heizstrahler | SunLiner","virtual_page":"\/heatsail.html","breadcrumb":["HEATSAIL"],"user":{"has_transacted":false},"category_size":0,"products":[],"category_id":"2","category_name":"SunLiner Katalog"}, 'push (initial page) [data-layer.phtml]'); yireoGoogleTagManager2Pusher({"event":"view_item_list","ecommerce":{"items":[]}}, 'push (page-based event) [data-layer.phtml]'); </script> <script nonce="cWZycXp5aHc1dDA0OHJ0bXA0ZWViNHduMnk3NzdyZmE="> function yireoGoogleTagManager2FindParentElementWithName(element, parentTagName) { if (!element.parentElement) { return null; } if (element.parentElement.tagName.toLowerCase() === parentTagName) { return element.parentElement; } return yireoGoogleTagManager2FindParentElementWithName(element.parentElement, parentTagName); } const products = document.querySelectorAll('.products a.product'); if (products) { products.forEach(function(product) { product.addEventListener('click', function(event, s) { let parentElement = yireoGoogleTagManager2FindParentElementWithName(event.target, 'form'); const inputElement = parentElement.querySelector('input[name="product"]'); const productId = inputElement.value; const productData = window['YIREO_GOOGLETAGMANAGER2_PRODUCT_DATA_ID_' + productId] || {}; productData.item_id = productId; const eventData = { 'event': 'select_item', 'ecommerce': { 'items': [productData] } } yireoGoogleTagManager2Pusher(eventData, 'push (page event "select_item") [script-product-clicks.phtml]'); if (window['YIREO_GOOGLETAGMANAGER2_DEBUG_CLICKS'] && confirm("Press to continue with redirect") === false) { event.preventDefault(); } }); }) } </script> <script nonce="cWZycXp5aHc1dDA0OHJ0bXA0ZWViNHduMnk3NzdyZmE="> window.addEventListener('private-content-loaded', function(event) { window.dataLayer = window.dataLayer || []; var isEmpty = function (variable) { if (typeof variable === 'undefined') { return true; } if (Array.isArray(variable) && variable.length === 0) { return true; } return typeof variable === 'object' && Object.keys(variable).length === 0; } var getSectionNames = function () { return ['cart', 'customer']; } getSectionNames().forEach(function (sectionName) { if (!event.detail.data[sectionName].gtm) { return; } const attributes = event.detail.data[sectionName].gtm; if (!Object.keys(attributes).length > 0) { return; } yireoGoogleTagManager2Pusher(attributes, 'push (attributes) [script-additions.phtml]'); }); let attributes = {}; getSectionNames().forEach(function (sectionName) { if (!event.detail.data[sectionName].gtm_events) { return; } const gtmEvents = event.detail.data[sectionName].gtm_events; for (const [eventId, eventData] of Object.entries(gtmEvents)) { yireoGoogleTagManager2Logger('found event in section "' + sectionName + '"', eventData); const metaData = eventData.meta; yireoGoogleTagManager2Pusher(eventData, 'push (customerData "' + sectionName + '" event "' + eventId + '")'); if (!metaData || metaData.cacheable !== true) { yireoGoogleTagManager2Logger('removing event "' + eventId + '" from section "' + sectionName + '"') let mageCacheStorage = event.detail.data; if (mageCacheStorage !== null && typeof mageCacheStorage[sectionName] !== 'undefined' && typeof mageCacheStorage[sectionName].gtm_events !== 'undefined' && eventId in mageCacheStorage[sectionName].gtm_events) { delete mageCacheStorage[sectionName].gtm_events[eventId]; } window.localStorage.setItem('mage-cache-storage', JSON.stringify(mageCacheStorage)); } } }); if (false === isEmpty(attributes)) { yireoGoogleTagManager2Pusher(attributes, 'dataLayer (initial js) [script-additions.phtml]'); } }); </script> </body> </html>